1<!doctype html> 2<html lang="pt-br" data-tray-theme="Beleza - Full Shop" data-tray-theme-version="2.2.1" data-files="361afbf9ab2035cfedf850d5be0955f4" data-store="1063102" class="page-home"> 3 4<head> 5 6 <link rel="icon" type="image/png" href="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Logomarca_parte_Grafica_F_transparente_com_espacamento.png?40911a9f4d7a99b6eef6b4ae366be082" /> 7 8 9 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 10 11 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 12 <meta name="viewport" content="width=device-width, initial-scale=1"> 13 <meta name="theme-color" content="#3b8d4a"> 14 15 <title>Farmacam - Farmácia de Manipulação e Homeopatia - Melhor farmácia do Brasil para comprar medicamento manipulado!</title><meta http-equiv="content-language" content="pt-br"/><meta name="author" content="Tray Tecnologia"/><meta name="copyright" content="Tray Tecnologia"/><meta name="robots" content="FOLLOW,INDEX,ALL"/><meta name="MSSmartTagsPreventParsing" content="true"/><meta name="description" content="Melhor farmácia de manipulação e homeopatia do Brasil. Atendimento on-line e presencial. Orçamentos personalizados. Pagamento no site em até 12x sem juros. Entrega domiciliar grátis*!" /><meta name="keywords" content="farmacia de manipulação, farmacia de manipulação online,medicamento manipulados,remedio manipulado,fórmula manipulada,comprar medicamento manipulado,comprar homeopatia,valor medicamento manipulado,farmácia de manipulação perto de mim" /><meta http-equiv='expires' content='Thu, 01 Oct 2026 00:00:00 GMT'><meta property="og:url" content="https://www.farmacam.com.br" /><link rel="canonical" href="https://www.farmacam.com.br"/><base id="tag_base" href="https://www.farmacam.com.br/loja/"/><meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE"/><meta property="og:title" content="Farmacam - Farmácia de Manipulação e Homeopatia - Melhor farmácia do Brasil para comprar medicamento manipulado!" /><meta property="og:description" content="Melhor farmácia de manipulação e homeopatia do Brasil. Atendimento on-line e presencial. Orçamentos personalizados. Pagamento no site em até 12x sem juros. Entrega domiciliar grátis*!" /><meta property="og:phone_number" content="(21) 2604-7350" /><meta property="og:street-address" content="Rua Coronel Serrado, 1630" /><meta property="og:locality" content="São Gonçalo" /><meta property="og:region" content="RJ" /><meta property="og:email" content="[email protected]" /><meta property="og:type" content="website" /><meta property="og:image" content="https://images.tcdn.com.br/img/img_prod/1063102/1636391836_logomarca_espacada_retangular_236x147_pixel.png" /><link rel="shortcut icon" href="https://images.tcdn.com.br/img/img_prod/1063102/1636390365_icone_favicon_16_pixel.ico?6ab58096bc3ac" type="image/x-icon"/><meta setting='keep_buying' content='1' /></meta><meta setting='liveshop_alert_position' content='0' /></meta><meta name="facebook-domain-verification" content="zeq0086ndaqbrnl5yfbovucn0xhzga" /><meta name="google-site-verification" content="LLRurApyQfhUbEVZHJHveivrx5RiDlGXCBhUI30aGXM" /><link rel="preconnect" href="//images.tcdn.com.br" /><link rel="preconnect" href="//ssl.google-analytics.com" /><!-- CSSVariables ---><meta property="og:type" content="website"/> <style> 16 17 18 19 20 21 22 23 24 25 26 html{ 27 28 --loja_manutencao_cor_fundo: #f1f5f9; 29 --loja_manutencao_cor_texto: #444444; 30 --loja_manutencao_cor_titulo: #3b8d4a; 31 --loja_manutencao_inauguracao_cor_timer: #3b8d4a; 32 33 --font_family : 'Quicksand'; 34 --font_pesso : ; 35 36 --color_font_medium : #3b8d4a; 37 --color_font_dark : #3b8d4a; 38 --color_font_light : #444444; 39 --color_font_inverted : #ffffff; 40 --color_primary : #3b8d4a; 41 --color_primary_medium : #3b8d4a; 42 --color_primary_light : #4b9e5a; 43 --color_secondary_medium : #83b933; 44 --color_gray_medium : #f1f5f9; 45 --color_gray_dark : #f1f5f9; 46 --barra_full_dots_bg : #ffffff; 47 48 --stories_cor_status : #3b8d4a; 49 --stories_bg_icone : #3b8d4a; 50 --stories_color_icone : #ffffff; 51 52 53 --color_header_bg : #ffffff; 54 --color_header_main_font : #000000; 55 --color_header_second_font : #000000; 56 --color_header_highlight : #3b8d4a; 57 --color_header_cart_count : #3b8d4a; 58 --color_text_header_cart_count : #ffffff; 59 --color_header_details : #f1f5f9; 60 61 --menu-cor-fundo-primaria : #3b8d4a; 62 --menu-cor-fundo-secundaria : #83b933; 63 --menu-cor-texto : #444444; 64 --submenu_cor_fundo : #ffffff; 65 --submenu_cor_texto : #444444; 66 --submenu3_cor_texto : #444444; 67 --submenu_details : ; 68 --menu_mobile_fundo : #ffffff; 69 --menu_texto_mobile : #000000; 70 71 --menu-lt-bg : #998b8b;
72 --menu-lt-text : #444444; 73 --menu-lt-text-second : #444444; 74 --menu-lt-categ : #444444; 75 --menu-lt-subcateg : #444444; 76 --menu-lt-subcateg-3 : #444444; 77 --menu-lt-icon : #444444; 78 --menu-lt-icon-item : #444444; 79 --menu-lt-icon-social : #444444; 80 81 --cor-preco-anterior: #979797; 82 --cor-fundo-botao-comprar: #3b8d4a; 83 --cor-texto-botao-comprar: #ffffff; 84 --listagem_produtos_tag_desconto_cor_texto: #ffffff; 85 --listagem_produtos_tag_desconto_cor_fundo: #3b8d4a; 86 87 --cor_titulo_cat_listagem: #3b8d4a; 88 --cor_bg_cat_listagem: #f1f5f9; 89 --cor_hover_cat_listagem: #83b933; 90 91 --newsletter_cor_fundo: #3b8d4a; 92 --newsletter_cor_texto: #ffffff; 93 --newsletter_cor_fundo_campo_email: #ffffff; 94 --newsletter_cor_texto_campo_email: #444444; 95 --newsletter_cor_fundo_botao: #83b933; 96 --newsletter_cor_texto_botao: #ffffff; 97 98 --newsletter_popup_texto_botao_cor_fundo: #8e44ad; 99 --newsletter_popup_texto_botao_cor_texto: #ffffff; 100 --newsletter_popup_bg_cor: #e9e9e9; 101 102 --color_footer_bg : #ffffff; 103 --color_footer_main_font : #3b8d4a; 104 --color_footer_second_font : #000000; 105 --color_footer_highlight : #000000; 106 --color_footer_button : ; 107 --color_footer_details : #f1f5f9; 108 109 --color_seal : #444444; 110 --color_bg_seal : #F1F0FA; 111 112 --banner_slide_cor_dots : #ffffff; 113 --banner_slide_cor_setas : #ffffff; 114 115 --barra_oferta_cabecaho_cor_fundo_1 : #83b933; 116 --barra_oferta_cabecaho_cor_fundo_2 : #3b8d4a; 117 --barra_oferta_cabecaho_cor_texto : #ffffff; 118 119 --barra_oferta_full_banners_cabecaho_cor_fundo: #3b8d4a; 120 --barra_oferta_full_banners_cabecaho_cor_texto: #ffffff; 121 122 --depoimentos_cor_fundo: #f1f5f9; 123 --depoimentos_cor_borda_direita: #ffffff; 124 --depoimentos_cor_texto_nome: #3b8d4a; 125 --depoimentos_cor_texto_depoimento: #444444; 126 127 --comentarios_cor_fundo: #f1f5f9; 128 --comentarios_cor_borda_direita: #ffffff; 129 --comentarios_cor_texto_nome: #000000; 130 --comentarios_cor_texto_depoimento: #444444; 131 132 --opcoes-flutuantes-tamanho: 48px; 133 134 --lgpd_cor_fundo: #3b8d4a; 135 --lgpd_cor_texto: #ffffff; 136 --lgpd_cor_botao: #83b933; 137 --lgpd_cor_texto_botao: #ffffff; 138 139 --vitrine_tipo_titulo: ; 140 --vitrine_personalizada_cor_fundo: #6fb278; 141 --vitrine_personalizada_cor_fundo_2: #4e8956; 142 --vitrine_personalizada_cor_fundo_3: #6fb278; 143 --vitrine_personalizada_cor_texto: #f1f5f9; 144 --vitrine_personalizada_cor_timer_promocao: #ffffff; 145 --vitrine_personalizada_cor_dots: #ffffff; 146 147 --promocao_destaque_cor_fundo: ; 148 --promocao_destaque_cor_texto: ; 149 150 --listagem_produtos_timer_promocao_cor_texto: #3b8d4a; 151 --listagem_produtos_timer_promocao_cor_fundo: #f1f5f9; 152 153 --produto_exibir_botao_whatsapp_frase: "Comprar" ; 154 --produto_cor_botao_comprar: #8e44ad; 155 --color_compreJunto: #ec1212; 156 --produto_timer_promocao_cor_texto: #9b59b6; 157 --produto_timer_promocao_cor_fundo: #f1f5f9; 158 --produto_timer_promocao_cor_texto: #9b59b6; 159 160 --categoria_imagem_borda_arredondada: 100% ; 161 162 --rastreio-botao-cor-texto: #ffffff; 163 --rastreio-botao-cor-fundo: #3b8d4a; 164 --rastreio_campo_cor_fundo: #f4f5f9; 165 --rastreio_campo_cor_texto: #ffffff; 166 167 --listagem_produtos_ver_produto_cor_texto: #3b8d4a; 168 --listagem_produtos_timer_promocao_cor_fundo: #f1f5f9; 169 170 --arrow_select : url("data:image/svg+xml,%3Csvg fill='%23' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewB
170ox='0 0 284.929 284.929'%3E%3Cpath d='M282.082,76.511l-14.274-14.273c-1.902-1.906-4.093-2.856-6.57-2.856c-2.471,0-4.661,0.95-6.563,2.856L142.466,174.441 L30.262,62.241c-1.903-1.906-4.093-2.856-6.567-2.856c-2.475,0-4.665,0.95-6.567,2.856L2.856,76.515C0.95,78.417,0,80.607,0,83.082 c0,2.473,0.953,4.663,2.856,6.565l133.043,133.046c1.902,1.903,4.093,2.854,6.567,2.854s4.661-0.951,6.562-2.854L282.082,89.647 c1.902-1.903,2.847-4.093,2.847-6.565C284.929,80.607,283.984,78.417,282.082,76.511z' /%3E%3C/svg%3E%0A"); 171 172 --tabela_medidas_cor_fundo_1: #8e44ad; 173 --tabela_medidas_cor_fonte_1: #ffffff; 174 175 --tabela_medidas_cor_fundo_2: ; 176 --tabela_medidas_cor_fonte_2: ; 177 178 --tabela_medidas_cor_fundo_3: ; 179 --tabela_medidas_cor_fonte_3: ; 180 181 --tabela_medidas_cor_fundo_4: ; 182 --tabela_medidas_cor_fonte_4: ; 183 184 --tabela_medidas_cor_fundo_5: ; 185 --tabela_medidas_cor_fonte_5: ; 186 187 --tabela_medidas_cor_fundo_6: ; 188 --tabela_medidas_cor_fonte_6: ; 189 190 --tabela_medidas_cor_fundo_7: ; 191 --tabela_medidas_cor_fonte_7: ; 192 193 --tabela_medidas_cor_fundo_8: ; 194 --tabela_medidas_cor_fonte_8: ; 195 196 --tabela_medidas_cor_fundo_9: ; 197 --tabela_medidas_cor_fonte_9: ; 198 199 --tabela_medidas_cor_fundo_10: ; 200 --tabela_medidas_cor_fonte_10: ; 201 202 --vitrine_cor_fundo : #ffffff; 203 --vitrine_cor_titulo : #3b8d4a; 204 --vitrine_cor_detalhes : #3b8d4a; 205 --vitrine_cor_fundo_tarja : #f1f5f9; 206 --vitrine_cor_fundo_mini_banners: #ffffff; 207 --vitrine_cor_txt_variacao: #444444; 208 209 --pagina_cor_fundo: #ffffff; 210 211 --cupom_cor_fundo: #3b8d4a; 212 --cupom_cor_titulo: #ffffff; 213 --cupom_cor_descricao: #f1f5f9; 214 --cupom_cor_codigo: #ffffff; 215 216 --video_pagina_inicial_cor_texto: #ffffff; 217 --video_pagina_inicial_cor_fundo: #8e44ad; 218 219 --cor_botoes_calculadora : #8e44ad; 220 --cor_texto_botoes_calculadora : #ffffff; 221 222 --compre_economize_cor_fundo: #3b8d4a; 223 --compre_economize_cor_texto: #ffffff; 224 --cantos_arredondados: 5px; 225 226 --cor_widget_titulo_principal: #444444; 227 --cor_widget_title_produto: #444444; 228 --cor_widget_text_produto: #444444; 229 --cor_widget_aba_text: #ffffff; 230 --cor_widget_aba_bg: #3b8d4a; 231 --cor_widget_aba_ativa: #83b933; 232 --cor_widget_text_botao: #ffffff; 233 --cor_widget_bg_botao: #e92135; 234 235 --color_bg_maioridade_btn_aceitar : #1db84a; 236 --color_maioridade_btn_aceitar : #ffffff; 237 --color_bg_maioridade_btn_recusar : #d70026; 238 --color_maioridade_btn_recusar : #ffffff; 239 240 241 --color_bg_btn_pgpd : #3b8d4a; 242 --color_bg_text_btn_pgpd : #ffffff; 243 --color_bg_icone_btn_pgpd : #ffffff; 244 245 --color_bg_qtd_pgpd : #f1f5f9; 246 --color_text_qtd_pgpd : #444444; 247 --color_icone_qtd_pgpd : #444444; 248 --cor_individual_color_btn : ; 249 250 251 --color_bg_cart : #ffffff; 252 --color_bg_text_cart : #444444; 253 --color_bg_button_bg_cart: #3b8d4a; 254 --color_bg_button_text_cart: #ffffff; 255 --color_bg_qtd_bg_cart: #f1f5f9; 256 --color_bg_qtd_text_cart: #444444; 257 --color_bg_qtd_icone_cart: #444444; 258 259 260 --bg_shorts: #f1f5f9; 261 --title_shorts: #3b8d4a; 262 --text_shorts: #444444; 263 --dots_shorts: #83b933 264 } 265 266 267 .eapps-instagram-feed-header-container{ 268 display: none !important; 269 } 270 271 272 .txt-com-desconto + .txt-forma-pagamento{ 273 display: none; 274 } 275 276 .operadora + .txt-forma-pagamento{ 277 display: none; 278 } 279 280</style> 281 282<!-- --> 283<link rel="preload" href="https://fonts.googleapis.com">
284<link rel="preload" href="https://fonts.gstatic.com" crossorigin> 285 286 287 288 289 290 291 292 293 294 <link href="https://fonts.googleapis.com/css2?family=Quicksand:wght@300;400;500;600;700&display=swap" rel="stylesheet"> 295 296 297<link href="https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,wght@0,400;0,600;0,700;1,400&display=swap" rel="stylesheet"> 298 299 <!-- Global site tag (gtag.js) - Google Analytics --> 300
300<script async src="https://www.googletagmanager.com/gtag/js?id=G-DQNKGRQB7E&l=dataLayerGa4"></script>
300 301
301<script> 302 window.dataLayerGa4 = window.dataLayerGa4 || []; 303 function gtag(){dataLayerGa4.push(arguments);} 304 gtag('js', new Date()); 305 306 gtag('config', 'G-DQNKGRQB7E',{cookie_flags: 'secure;samesite=none'}); 307 308 </script>
308 309 <!-- Inicio bloco header -->
309<script>dataLayer = [{"pageTitle":"Farmacam - Farm\u00e1cia de Manipula\u00e7\u00e3o e Homeopatia - Melhor farm\u00e1cia do Brasil para comprar medicamento manipulado!","pageCategory":"Home","event":"","siteSearchFrom":"https:\/\/farmacam.com.br\/"}]</script>
309 310
310<script> 311 document.documentElement.addEventListener("tray-session-loaded", function() { 312 var gtmTray = document.createElement("script"); 313 gtmTray.src = "/mvc/store/1063102/google_tag_manager/updateGTM.js?" + Date.now(); 314 gtmTray.setAttribute("async", "true"); 315 document.querySelector("head").appendChild(gtmTray); 316 }); 317 </script>
317 318 319 <!-- Google Tag Manager --> 320
320<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 321 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 322 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 323 'https://www.googletagmanager.com/gtm.js?id='+i+dl;setTimeout(function(){f.parentNode.insertBefore(j,f)}, 1000); 324 })(window,document,'script','dataLayer','GTM-58WNNRW');</script>
324 325 <!-- End Google Tag Manager --> 326 327 <!-- Fim bloco header --> 328</head> 329 330 <body style="overflow: hidden;"> 331 <div id="loadOtimization"> 332 <style> 333 #loadOtimization { 334 width: 100vw !important; 335 height: 100vh !important; 336 background-color: white !important; 337 z-index: 999 !important; 338 position: fixed !important; 339 top: 0 !important; 340 display: flex !important; 341 align-items: center !important; 342 justify-content: center !important; 343 flex-direction: column !important; 344 }; 345 </style> 346 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/loading.gif?40911a9f4d7a99b6eef6b4ae366be082" alt="Loading" width="34" height="34" title="loading"> 347 </div> 348 <!-- Inicio bloco top --> 349 <!-- Google Tag Manager (noscript) -->
vendor: 76 bytes, lines 349-350
349 350 <noscript><iframe src='https://www.googletagmanager.com/ns.html?id=
350GTM-58WNNRW
vendor: 99 bytes, lines 350-352
350' 351 height='0' width='0' style='display:none;visibility:hidden'></iframe></noscript> 352
352<!-- End Google Tag Manager (noscript) --> 353 <!-- Fim bloco top --> 354 355 356 <div class="apresentacao-preco" opcao="avista"> 357 </div> 358 359 360 <div class="overlay-shadow"></div> 361 <div class="application"> 362 363 364 365 366 367 368<div id="menu-mobile" class="menu-mobile"> 369 370 <div class="close-box close-overlay" role="button" aria-label="Fechar menu" tabindex="0"> 371 <i class="icon icon-times"></i> 372 </div> 373 374 <div class="block-title flex align-center"> 375 <div class="header-menu"> 376 <div></div> 377 <div></div> 378 <div></div> 379 </div> 380 Menu 381 </div> 382 383 <div class="nav-mobile-wrapper"> 384 <nav class="nav-mobile"> 385 386 <ul class="list first-level"> 387 388 <li class="sub"> 389 390 <a class="title-sub"> 391 Contato 392 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-down" viewBox="0 0 16 16"> 393 <path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/> 394 </svg> 395 </a> 396 397 <ul class="second-level"> 398 <li> 399 <p class="box-contato-mobile"> 400 <strong>Telefone </strong>: <a title="(21) 2604-7350" href="tel:2126047350"> (21) 2604-7350</a> 401 </p> 402 403 <p class="box-contato-mobile"> 404 405 <strong>WhatsApp</strong>: <a title="WhatsApp" aria-label="Falar no WhatsApp" href="https://api.whatsapp.com/send?phone=552126047350" rel="noreferrer" target="_blank">(21) 2604-7350</a> 406 </p> 407 408 <p class="box-contato-mobile"> 409 </p> 410 411 <p class="box-contato-mobile"> 412 <strong>E-mail</strong>: <a title="[email protected]" href="mailto:[email protected]">[email protected]</a> 413 </p> 414 415 <p> 416 <strong>Horário de Atendimento</strong> <br /> 417 Segunda a Sexta das 8hs as 17:30hs 418 </p> 419 420 <p> 421 <a title="Fale Conosco" href="/contato"> 422 <strong>Fale Conosco</strong> 423 </a> 424 </p> 425 </li> 426 </ul> 427 428 </li> 429 430 431 <li style="margin: 10px 15px 10px 0px;"><hr/></li> 432 433 </ul> 434 435 <ul class="list first-level"> 436 437 438 439 440 <li class="sub" > 441 442 <a title="Tipo de Produto" href="https://www.farmacam.com.br/tipo-de-produto">Tipo de Produto 443 444 445 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-down" viewB
445ox="0 0 16 16"> 446 <path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/> 447 </svg> 448 </a> 449 450 <ul class="second-level"> 451 452 <a title="Tipo de Produto" href="https://www.farmacam.com.br/tipo-de-produto">Ver Tipo de Produto</a> 453 454 455 <li > 456 457 <a title="Industrializados" href="https://www.farmacam.com.br/industrializados">Industrializados</a> 458 459 460 461 </li> 462 463 464 <li > 465 466 <a title="Manipulados" href="https://www.farmacam.com.br/manipulados">Manipulados</a> 467 468 469 470 </li> 471 472 473 474 </ul> 475 476 </li> 477 478 479 <li class="sub" > 480 481 <a title="Uso" href="https://www.farmacam.com.br/uso">Uso 482 483 484 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-down" viewBox="0 0 16 16"> 485 <path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/> 486 </svg> 487 </a> 488 489 <ul class="second-level"> 490 491 <a title="Uso" href="https://www.farmacam.com.br/uso">Ver Uso</a> 492 493 494 <li > 495 496 <a title="Adulto" href="https://www.farmacam.com.br/adulto">Adulto</a> 497 498 499 500 </li> 501 502 503 <li > 504 505 <a title="Pediátrico" href="https://www.farmacam.com.br/pediatrico">Pediátrico</a> 506 507 508 509 </li> 510 511 512 <li class="sub" > 513 514 <a title="Veterinário" href="https://www.farmacam.com.br/veterinario">Veterinário</a> 515 516 <ul class="third-level"> 517 <li> 518 <a title="Cães" href="https://www.farmacam.com.br/caes">Cães</a> 519 </li> 520 <li> 521 <a title="Felinos" href="https://www.farmacam.com.br/felinos">Felinos</a> 522 </li> 523 <li> 524 <a title="Equinos" href="https://www.farmacam.com.br/equinos">Equinos</a> 525 </li> 526 <li> 527 <a title="Répteis" href="https://www.farmacam.com.br/repteis">Répteis</a> 528 </li> 529 <li> 530 <a title="Aves Silvestres" href="https://www.farmacam.com.br/aves">Aves Silvestres</a> 531 </li> 532 </ul> 533 534 535 </li> 536 537 538 539 </ul> 540 541 </li> 542 543 544 <li class="sub" > 545 546 <a title="Promoções" href="https://www.farmacam.com.br/promocoes">Promoções 547 548 549 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-down" viewB
549ox="0 0 16 16"> 550 <path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/> 551 </svg> 552 </a> 553 554 <ul class="second-level"> 555 556 <a title="Promoções" href="https://www.farmacam.com.br/promocoes">Ver Promoções</a> 557 558 559 <li > 560 561 <a title="Promoção do mês de Agosto" href="https://www.farmacam.com.br/promocoes-do-mes">Promoção do mês de Agosto</a> 562 563 564 565 </li> 566 567 568 569 </ul> 570 571 </li> 572 573 574 <li class="sub" > 575 576 <a title="Linha de Produtos" href="https://www.farmacam.com.br/linha-de-produtos">Linha de Produtos 577 578 579 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-down" viewBox="0 0 16 16"> 580 <path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/> 581 </svg> 582 </a> 583 584 <ul class="second-level"> 585 586 <a title="Linha de Produtos" href="https://www.farmacam.com.br/linha-de-produtos">Ver Linha de Produtos</a> 587 588 589 <li > 590 591 <a title="Linha Farma Signature" href="https://www.farmacam.com.br/linha-farma-signature">Linha Farma Signature</a> 592 593 594 595 </li> 596 597 598 <li > 599 600 <a title="Linha Farma-Gym" href="https://www.farmacam.com.br/linha-farma-gym">Linha Farma-Gym</a> 601 602 603 604 </li> 605 606 607 <li > 608 609 <a title="Linha F-Beauty" href="https://www.farmacam.com.br/linha-f-beauty">Linha F-Beauty</a> 610 611 612 613 </li> 614 615 616 <li > 617 618 <a title="Linha FitoCam" href="https://www.farmacam.com.br/linha-fitocam">Linha FitoCam</a> 619 620 621 622 </li> 623 624 625 <li > 626 627 <a title="Linha Farma Vet" href="https://www.farmacam.com.br/linha-farma-vet">Linha Farma Vet</a> 628 629 630 631 </li> 632 633 634 <li class="sub" > 635 636 <a title="Linha HomeopatiCAM" href="https://www.farmacam.com.br/linha-homeopaticam">Linha HomeopatiCAM</a> 637 638 <ul class="third-level"> 639 <li> 640 <a title="Floral Thérapi" href="https://www.farmacam.com.br/floral-therapi">Floral Thérapi</a> 641 </li> 642 </ul> 643 644 645 </li> 646 647 648 <li class="sub" > 649 650 <a title="Linha F-CAM" href="https://www.farmacam.com.br/linha-f-cam">Linha F-CAM</a> 651 652 <ul class="third-level"> 653 <li> 654 <a title="Vitaminas" href="https://www.farmacam.com.br/vitaminas">Vitaminas</a> 655 </li> 656 <li> 657 <a title="Minerais" href="https://www.farmacam.com.br/minerais">Minerais</a> 658 </li> 659 <li> 660 <a title="Lactobacilos" href="https://www.farmacam.com.br/lactobacilos">Lactobacilos</a> 661 </li> 662 <li> 663 <a title="Fibras" href="https://www.farmacam.com.br/fibras">Fibras</a> 664 </li> 665 <li> 666 <a title="Esmaltes" href="https://www.farmacam.com.br/esmaltes">Esmaltes</a> 667 </li> 668 <li> 669 <a title="Cápsulas Oleosas" href="https://www.farmacam.com.br/capsulas-oleosas">Cápsulas Oleosas</a> 670 </li> 671 <li> 672 <a title="Aminoácidos" href="https://www.farmacam.com.br/aminoacidos">Aminoácidos</a> 673 </li> 674 <li> 675 <a title="Hormônios" href="https://www.farmacam.com.br/hormonio">Hormônios</a> 676 </li> 677 <li> 678 <a title="Enzimas" href="https://www.farmacam.com.br/enzimas">Enzimas</a> 679 </li> 680 </ul> 681 682 683 </li> 684 685 686 687 </ul> 688 689 </li> 690 691 692 <li class="sub" > 693 694 <a title="Objetivo" href="https://www.farmacam.com.br/uso-e-objetivo">Objetivo 695 696 697 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-down" viewB
697ox="0 0 16 16"> 698 <path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/> 699 </svg> 700 </a> 701 702 <ul class="second-level"> 703 704 <a title="Objetivo" href="https://www.farmacam.com.br/uso-e-objetivo">Ver Objetivo</a> 705 706 707 <li > 708 709 <a title="Anabolizantes" href="https://www.farmacam.com.br/anabolizantes">Anabolizantes</a> 710 711 712 713 </li> 714 715 716 <li > 717 718 <a title="Analgésicos" href="https://www.farmacam.com.br/analgesicos">Analgésicos</a> 719 720 721 722 </li> 723 724 725 <li > 726 727 <a title="Anestésicos" href="https://www.farmacam.com.br/anestesicos">Anestésicos</a> 728 729 730 731 </li> 732 733 734 <li > 735 736 <a title="Ansiolíticos" href="https://www.farmacam.com.br/ansioliticos">Ansiolíticos</a> 737 738 739 740 </li> 741 742 743 <li > 744 745 <a title="Anti-aging" href="https://www.farmacam.com.br/anti-aging">Anti-aging</a> 746 747 748 749 </li> 750 751 752 <li > 753 754 <a title="Antiagregantes" href="https://www.farmacam.com.br/antiagregantes">Antiagregantes</a> 755 756 757 758 </li> 759 760 761 <li > 762 763 <a title="Antialérgicos" href="https://www.farmacam.com.br/antialergicos">Antialérgicos</a> 764 765 766 767 </li> 768 769 770 <li > 771 772 <a title="Antidepressivos" href="https://www.farmacam.com.br/antidepressivos">Antidepressivos</a> 773 774 775 776 </li> 777 778 779 <li > 780 781 <a title="Anti-inflamatórios" href="https://www.farmacam.com.br/anti-inflamatorios">Anti-inflamatórios</a> 782 783 784 785 </li> 786 787 788 <li > 789 790 <a title="Antioxidantes" href="https://www.farmacam.com.br/antioxidantes">Antioxidantes</a> 791 792 793 794 </li> 795 796 797 <li > 798 799 <a title="Antissépticos" href="https://www.farmacam.com.br/antissepticos">Antissépticos</a> 800 801 802 803 </li> 804 805 806 <li > 807 808 <a title="Antitérmicos" href="https://www.farmacam.com.br/antitermicos">Antitérmicos</a> 809 810 811 812 </li> 813 814 815 <li > 816 817 <a title="Antivertiginosos" href="https://www.farmacam.com.br/antivertiginosos">Antivertiginosos</a> 818 819 820 821 </li> 822 823 824 <li > 825 826 <a title="Aumento do Apetite" href="https://www.farmacam.com.br/aumento-do-apetite">Aumento do Apetite</a> 827 828 829 830 </li> 831 832 833 <li > 834 835 <a title="Bactericidas" href="https://www.farmacam.com.br/bactericidas">Bactericidas</a> 836 837 838 839 </li> 840 841 842 <li > 843 844 <a title="Calmantes" href="https://www.farmacam.com.br/calmante">Calmantes</a> 845 846 847 848 </li> 849 850 851 <li > 852 853 <a title="Cicatrizantes" href="https://www.farmacam.com.br/cicatrizantes">Cicatrizantes</a> 854 855 856 857 </li> 858 859 860 <li > 861 862 <a title="Dermatológicos" href="https://www.farmacam.com.br/dermatologicos">Dermatológicos</a> 863 864 865 866 </li> 867 868 869 <li > 870 871 <a title="Desempenho Físico" href="https://www.farmacam.com.br/desempenho-fisico">Desempenho Físico</a> 872 873 874 875 </li> 876 877 878 <li > 879 880 <a title="Desempenho Imunológico" href="https://www.farmacam.com.br/desempenho-imunologico">Desempenho Imunológico</a> 881 882 883 884 </li> 885 886 887 <li > 888 889 <a title="Desempenho Mental" href="https://www.farmacam.com.br/desempenho-mental">Desempenho Mental</a> 890 891 892 893 </li> 894 895 896 <li > 897 898 <a title="Desempenho Sexual" href="https://www.farmacam.com.br/desempenho-sexual">Desempenho Sexual</a> 899 900 901 902 </li> 903 904 905 <li > 906 907 <a title="Despigmentantes" href="https://www.farmacam.com.br/despigmentantes">Despigmentantes</a> 908 909 910 911 </li> 912 913 914 <li > 915 916 <a title="Diuréticos" href="https://www.farmacam.com.br/diureticos">Diuréticos</a> 917 918 919 920 </li> 921 922 923 <li > 924 925 <a title="Emagrecimento" href="https://www.farmacam.com.br/emagrecimento">Emagrecimento</a> 926 927 928 929 </li> 930 931 932 <li > 933 934 <a title="Estimulantes" href="https://www.farmacam.com.br/estimulantes">Estimulantes</a> 935 936 937 938 </li> 939 940 941 <li > 942 943 <a title="Expectorantes" href="https://www.farmacam.com.br/expectorantes">Expectorantes</a> 944 945 946 947 </li> 948 949 950 <li > 951 952 <a title="Laxativos" href="https://www.farmacam.com.br/laxativos">Laxativos</a> 953 954 955 956 </li> 957 958 959 <li > 960 961 <a title="Proteção Solar" href="https://www.farmacam.com.br/protecao-solar">Proteção Solar</a> 962 963 964 965 </li> 966 967 968 <li > 969 970 <a title="Qualidade de Vida" href="https://www.farmacam.com.br/qualidade-de-vida">Qualidade de Vida</a> 971 972 973 974 </li> 975 976 977 <li > 978 979 <a title="Repelentes" href="https://www.farmacam.com.br/repelentes">Repelentes</a> 980 981 982 983 </li> 984 985 986 <li > 987 988 <a title="Saúde da Mulher" href="https://www.farmacam.com.br/saude-da-mulher">
988Saúde da Mulher</a> 989 990 991 992 </li> 993 994 995 <li > 996 997 <a title="Suplementação Nutricional" href="https://www.farmacam.com.br/suplementacao-nutricional">Suplementação Nutricional</a> 998 999 1000 1001 </li> 1002 1003 1004 <li > 1005 1006 <a title="Tratamento Cardiovascular" href="https://www.farmacam.com.br/tratamento-cardiaco">Tratamento Cardiovascular</a> 1007 1008 1009 1010 </li> 1011 1012 1013 <li > 1014 1015 <a title="Tratamento de Acne" href="https://www.farmacam.com.br/tratamento-de-acne">Tratamento de Acne</a> 1016 1017 1018 1019 </li> 1020 1021 1022 <li > 1023 1024 <a title="Tratamento de Unha e Cabelo" href="https://www.farmacam.com.br/tratamento-de-unha-e-cabelo">Tratamento de Unha e Cabelo</a> 1025 1026 1027 1028 </li> 1029 1030 1031 <li > 1032 1033 <a title="Tratamento Digestório" href="https://www.farmacam.com.br/tratamento-digestorio">Tratamento Digestório</a> 1034 1035 1036 1037 </li> 1038 1039 1040 <li > 1041 1042 <a title="Tratamento Endocrinológico" href="https://www.farmacam.com.br/tratamento-endocrinologico">Tratamento Endocrinológico</a> 1043 1044 1045 1046 </li> 1047 1048 1049 <li > 1050 1051 <a title="Tratamento Ginecológico" href="https://www.farmacam.com.br/tratamento-ginecologico">Tratamento Ginecológico</a> 1052 1053 1054 1055 </li> 1056 1057 1058 <li > 1059 1060 <a title="Tratamento Neurológico e Psiquiátrico" href="https://www.farmacam.com.br/tratamento-neurologico-e-psiquiatrico">Tratamento Neurológico e Psiquiátrico</a> 1061 1062 1063 1064 </li> 1065 1066 1067 <li > 1068 1069 <a title="Tratamento Oftálmico" href="https://www.farmacam.com.br/tratamento-oftalmico">Tratamento Oftálmico</a> 1070 1071 1072 1073 </li> 1074 1075 1076 <li > 1077 1078 <a title="Tratamento Ortopédico e Reumatológico" href="https://www.farmacam.com.br/tratamento-ortopedico-e-reumatologico">Tratamento Ortopédico e Reumatológico</a> 1079 1080 1081 1082 </li> 1083 1084 1085 <li > 1086 1087 <a title="Tratamento Otorrinolaringológico" href="https://www.farmacam.com.br/tratamento-otorrinolaringologico">Tratamento Otorrinolaringológico</a> 1088 1089 1090 1091 </li> 1092 1093 1094 <li > 1095 1096 <a title="Tratamento Proctológico" href="https://www.farmacam.com.br/tratamento-proctologico">Tratamento Proctológico</a> 1097 1098 1099 1100 </li> 1101 1102 1103 <li > 1104 1105 <a title="Tratamento Respiratório" href="https://www.farmacam.com.br/tratamento-respiratorio">Tratamento Respiratório</a> 1106 1107 1108 1109 </li> 1110 1111 1112 <li > 1113 1114 <a title="Tratamento Urinário" href="https://www.farmacam.com.br/tratamento-urinario">Tratamento Urinário</a> 1115 1116 1117 1118 </li> 1119 1120 1121 <li > 1122 1123 <a title="Tratamento Urológico" href="https://www.farmacam.com.br/tratamento-urologico">Tratamento Urológico</a> 1124 1125 1126 1127 </li> 1128 1129 1130 <li > 1131 1132 <a title="Uso em Procedimento" href="https://www.farmacam.com.br/uso-em-procedimento">Uso em Procedimento</a> 1133 1134 1135 1136 </li> 1137 1138 1139 1140 </ul> 1141 1142 </li> 1143 1144 1145 <li class="sub" > 1146 1147 <a title="Tipo de Venda" href="https://www.farmacam.com.br/tipo-venda">Tipo de Venda 1148 1149 1150 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-down" viewB
1150ox="0 0 16 16"> 1151 <path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/> 1152 </svg> 1153 </a> 1154 1155 <ul class="second-level"> 1156 1157 <a title="Tipo de Venda" href="https://www.farmacam.com.br/tipo-venda">Ver Tipo de Venda</a> 1158 1159 1160 <li > 1161 1162 <a title="Venda Livre" href="https://www.farmacam.com.br/tipo-venda/venda-livre">Venda Livre</a> 1163 1164 1165 1166 </li> 1167 1168 1169 <li > 1170 1171 <a title="Sob Prescrição" href="https://www.farmacam.com.br/tipo-venda/sob-prescricao">Sob Prescrição</a> 1172 1173 1174 1175 </li> 1176 1177 1178 <li > 1179 1180 <a title="Sob Prescrição com Retenção de Notificação de Receita" href="https://www.farmacam.com.br/tipo-venda/sob-prescricao-com-retencao-de-notificacao-de-receita">Sob Prescrição com Retenção de Notificação de Receita</a> 1181 1182 1183 1184 </li> 1185 1186 1187 1188 </ul> 1189 1190 </li> 1191 1192 1193 1194 </ul> 1195 </nav> 1196 </div> 1197 1198 <div class="account flex align-center"> 1199 1200 <!-- <i class="account-icon icon icon-login"></i> --> 1201 1202 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px; margin-right: 8px;" width="26" height="26" fill="currentColor" class="bi bi-person-circle" viewBox="0 0 16 16"> 1203 <path d="M11 6a3 3 0 1 1-6 0 3 3 0 0 1 6 0z"/> 1204 <path fill-rule="evenodd" d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm8-7a7 7 0 0 0-5.468 11.37C3.242 11.226 4.805 10 8 10s4.757 1.225 5.468 2.37A7 7 0 0 0 8 1z"/> 1205 </svg> 1206 1207 <div class="tray-hide" data-logged-user="false"> 1208 <span>Minha Conta</span> 1209 <div class="login-links"> 1210 <a href="/my-account/login" title="Entrar">Entrar</a> 1211 <span>/</span> 1212 <a href="/cadastro" title="Cadastrar">Cadastrar</a> 1213 </div> 1214 </div> 1215 1216 <div class="tray-hide" data-logged-user="true"> 1217 <span>Olá, <span data-customer="name"></span></span> 1218 <div class="login-links"> 1219 <a href="/central-do-cliente" title="Minha Conta">Minha conta</a> 1220 <span>/</span> 1221 <a href="/loja/logout.php?loja=1063102" title="Sair">Sair</a> 1222 </div> 1223 </div> 1224 1225 </div> 1226 1227</div> 1228 <header class="header"> 1229 <span class="quant-cart" data-cart="amount" style="display: none;"></span> 1230 1231 1232 <div class="barra-oferta barra-oferta-cabecalho"> 1233 <div class="container center barra-oferta-conteudo"> 1234 1235 <div class="barra-oferta-item barra-oferta-desc marquee"> 1236 1237 1238 <marquee> 1239 Compre sempre pelo Aplicativo da Farmacam e ganhe muito mais descontos! Use o cupom farmacamAPP 1240 </marquee> 1241 1242 </div> 1243 1244 </div> 1245 </div> 1246 1247 <div class="bg"> 1248 1249 <div class="container menu-horizontal"> 1250 1251 1252 <div class="menu-horizontal-item logo-menu-horizontal"> 1253 <a class="logo" href="https://www.farmacam.com.br" title="Farmacam"> 1254 <img src="https://images.tcdn.com.br/files/1063102/themes/2
125416/img/settings/farmacam_logomarca.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Farmacam" width="222" height="36"> 1255 1256 <h1 class="title-store">Farmacam</h1> 1257 </a> 1258 </div> 1259 1260 <div class="menu-horizontal-item icone-menu-lateral"> 1261 <span role="button" aria-label="Abrir menu lateral" tabindex="0"> 1262 <svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-align-left"><line x1="21" x2="3" y1="6" y2="6"/><line x1="15" x2="3" y1="12" y2="12"/><line x1="17" x2="3" y1="18" y2="18"/></svg> 1263 </span> 1264 </div> 1265 1266 <div class="menu-horizontal-item icone-menu-pesquisar"> 1267 <span role="button" aria-label="Abrir pesquisa" tabindex="0"> 1268 <svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg> 1269 </span> 1270 </div> 1271 1272 <div class="menu-horizontal-item logo-menu-horizontal-2"> 1273 <a class="logo" href="https://www.farmacam.com.br" title="Farmacam"> 1274 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/farmacam_logomarca.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Farmacam" width="222" height="36"> 1275 1276 <h1 class="title-store">Farmacam</h1> 1277 </a> 1278 </div> 1279 1280 <div class="menu-horizontal-item menu-menu-horizontal" data-teste="1"> 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298<nav class="nav one-column"> 1299 <div class="container"> 1300 <ul class="list flex justify-between align-center"> 1301 1302 1303 1304 1305 1306 1307 <li class="first-level sub"> 1308 1309 <a href="https://www.farmacam.com.br/tipo-de-produto" title="Tipo de Produto"> 1310 <div class="name"> 1311 1312 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/TipoDeProduto.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Ícone menu"> 1313 1314 1315 1316 1317 Tipo de Produto 1318 1319 </div> 1320 </a> 1321 1322 1323 <div class="sub-list second-level"> 1324 1325 <ul> 1326 <a href="https://www.farmacam.com.br/tipo-de-produto" title="Tipo de Produto">Tipo de Produto</a> 1327 1328 <div class="sub-list-columns"> 1329 1330 1331 <li > 1332 1333 <a href="https://www.farmacam.com.br/industrializados" title="Industrializados">Industrializados</a> 1334 1335 1336 1337 </li> 1338 1339 1340 <li > 1341 1342 <a href="https://www.farmacam.com.br/manipulados" title="Manipulados">Manipulados</a> 1343 1344 1345 1346 </li> 1347 1348 </div> 1349 </ul> 1350 1351 1352 <div class="categoria-produto menu-categoria-product-1"></div> 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 </div> 1370 1371 1372 1373 1374 </li> 1375 <li class="first-level sub"> 1376 1377 <a href="https://www.farmacam.com.br/uso" title="Uso"> 1378 <div class="name"> 1379 1380 <img src="https://images.tcdn.com.br/files/1063102/themes/2
138016/img/settings/uso.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Ícone menu"> 1381 1382 1383 1384 1385 Uso 1386 1387 </div> 1388 </a> 1389 1390 1391 <div class="sub-list second-level"> 1392 1393 <ul> 1394 <a href="https://www.farmacam.com.br/uso" title="Uso">Uso</a> 1395 1396 <div class="sub-list-columns"> 1397 1398 1399 <li > 1400 1401 <a href="https://www.farmacam.com.br/adulto" title="Adulto">Adulto</a> 1402 1403 1404 1405 </li> 1406 1407 1408 <li > 1409 1410 <a href="https://www.farmacam.com.br/pediatrico" title="Pediátrico">Pediátrico</a> 1411 1412 1413 1414 </li> 1415 1416 1417 <li class="sub" > 1418 1419 <a href="https://www.farmacam.com.br/veterinario" title="Veterinário">Veterinário</a> 1420 1421 <ul class="sub-list third-level"> 1422 <li> 1423 <a href="https://www.farmacam.com.br/caes" title="Cães">Cães</a> 1424 </li> 1425 <li> 1426 <a href="https://www.farmacam.com.br/felinos" title="Felinos">Felinos</a> 1427 </li> 1428 <li> 1429 <a href="https://www.farmacam.com.br/equinos" title="Equinos">Equinos</a> 1430 </li> 1431 <li> 1432 <a href="https://www.farmacam.com.br/repteis" title="Répteis">Répteis</a> 1433 </li> 1434 <li> 1435 <a href="https://www.farmacam.com.br/aves" title="Aves Silvestres">Aves Silvestres</a> 1436 </li> 1437 </ul> 1438 1439 1440 </li> 1441 1442 </div> 1443 </ul> 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 </div> 1461 1462 1463 1464 1465 </li> 1466 <li class="first-level sub"> 1467 1468 <a href="https://www.farmacam.com.br/promocoes" title="Promoções"> 1469 <div class="name"> 1470 1471 <img src="https://images.tcdn.com.br/files/1063102/themes/2
147116/img/settings/Promocoes.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Ícone menu"> 1472 1473 1474 1475 1476 Promoções 1477 1478 </div> 1479 </a> 1480 1481 1482 <div class="sub-list second-level"> 1483 1484 <ul> 1485 <a href="https://www.farmacam.com.br/promocoes" title="Promoções">Promoções</a> 1486 1487 <div class="sub-list-columns"> 1488 1489 1490 <li > 1491 1492 <a href="https://www.farmacam.com.br/promocoes-do-mes" title="Promoção do mês de Agosto">Promoção do mês de Agosto</a> 1493 1494 1495 1496 </li> 1497 1498 </div> 1499 </ul> 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 </div> 1517 1518 1519 1520 1521 </li> 1522 <li class="first-level sub"> 1523 1524 <a href="https://www.farmacam.com.br/linha-de-produtos" title="Linha de Produtos"> 1525 <div class="name"> 1526 1527 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/LinhaDeProdutos.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Ícone menu"> 1528 1529 1530 1531 1532 Linha de Produtos 1533 1534 </div> 1535 </a> 1536 1537 1538 <div class="sub-list second-level"> 1539 1540 <ul> 1541 <a href="https://www.farmacam.com.br/linha-de-produtos" title="Linha de Produtos">Linha de Produtos</a> 1542 1543 <div class="sub-list-columns"> 1544 1545 1546 <li > 1547 1548 <a href="https://www.farmacam.com.br/linha-farma-signature" title="Linha Farma Signature">Linha Farma Signature</a> 1549 1550 1551 1552 </li> 1553 1554 1555 <li > 1556 1557 <a href="https://www.farmacam.com.br/linha-farma-gym" title="Linha Farma-Gym">Linha Farma-Gym</a> 1558 1559 1560 1561 </li> 1562 1563 1564 <li > 1565 1566 <a href="https://www.farmacam.com.br/linha-f-beauty" title="Linha F-Beauty">Linha F-Beauty</a> 1567 1568 1569 1570 </li> 1571 1572 1573 <li > 1574 1575 <a href="https://www.farmacam.com.br/linha-fitocam" title="Linha FitoCam">Linha FitoCam</a> 1576 1577 1578 1579 </li> 1580 1581 1582 <li > 1583 1584 <a href="https://www.farmacam.com.br/linha-farma-vet" title="Linha Farma Vet">Linha Farma Vet</a> 1585 1586 1587 1588 </li> 1589 1590 1591 <li class="sub" > 1592 1593 <a href="https://www.farmacam.com.br/linha-homeopaticam" title="Linha HomeopatiCAM">Linha HomeopatiCAM</a> 1594 1595 <ul class="sub-list third-level"> 1596 <li> 1597 <a href="https://www.farmacam.com.br/floral-therapi" title="Floral Thérapi">Floral Thérapi</a> 1598 </li> 1599 </ul> 1600 1601 1602 </li> 1603 1604 1605 <li class="sub" > 1606 1607 <a href="https://www.farmacam.com.br/linha-f-cam" title="Linha F-CAM">Linha F-CAM</a> 1608 1609 <ul class="sub-list third-level"> 1610 <li> 1611 <a href="https://www.farmacam.com.br/vitaminas" title="Vitaminas">Vitaminas</a> 1612 </li> 1613 <li> 1614 <a href="https://www.farmacam.com.br/minerais" title="Minerais">Minerais</a> 1615 </li> 1616 <li> 1617 <a href="https://www.farmacam.com.br/lactobacilos" title="Lactobacilos">Lactobacilos</a> 1618 </li> 1619 <li> 1620 <a href="https://www.farmacam.com.br/fibras" title="Fibras">Fibras</a> 1621 </li> 1622 <li> 1623 <a href="https://www.farmacam.com.br/esmaltes" title="Esmaltes">Esmaltes</a> 1624 </li> 1625 <li> 1626 <a href="https://www.farmacam.com.br/capsulas-oleosas" title="Cápsulas Oleosas">Cápsulas Oleosas</a> 1627 </li> 1628 <li> 1629 <a href="https://www.farmacam.com.br/aminoacidos" title="Aminoácidos">Aminoácidos</a> 1630 </li> 1631 <li> 1632 <a href="https://www.farmacam.com.br/hormonio" title="Hormônios">Hormônios</a> 1633 </li> 1634 <li> 1635 <a href="https://www.farmacam.com.br/enzimas" title="Enzimas">Enzimas</a> 1636 </li> 1637 </ul> 1638 1639 1640 </li> 1641 1642 </div> 1643 </ul> 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 </div> 1661 1662 1663 1664 1665 </li> 1666 <li class="first-level sub"> 1667 1668 <a href="https://www.farmacam.com.br/uso-e-objetivo" title="Objetivo"> 1669 <div class="name"> 1670 1671 <img src="https://images.tcdn.com.br/files/1063102/themes/2
167116/img/settings/objetivo.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Ícone menu"> 1672 1673 1674 1675 1676 Objetivo 1677 1678 </div> 1679 </a> 1680 1681 1682 <div class="sub-list second-level"> 1683 1684 <ul> 1685 <a href="https://www.farmacam.com.br/uso-e-objetivo" title="Objetivo">Objetivo</a> 1686 1687 <div class="sub-list-columns"> 1688 1689 1690 <li > 1691 1692 <a href="https://www.farmacam.com.br/anabolizantes" title="Anabolizantes">Anabolizantes</a> 1693 1694 1695 1696 </li> 1697 1698 1699 <li > 1700 1701 <a href="https://www.farmacam.com.br/analgesicos" title="Analgésicos">Analgésicos</a> 1702 1703 1704 1705 </li> 1706 1707 1708 <li > 1709 1710 <a href="https://www.farmacam.com.br/anestesicos" title="Anestésicos">Anestésicos</a> 1711 1712 1713 1714 </li> 1715 1716 1717 <li > 1718 1719 <a href="https://www.farmacam.com.br/ansioliticos" title="Ansiolíticos">Ansiolíticos</a> 1720 1721 1722 1723 </li> 1724 1725 1726 <li > 1727 1728 <a href="https://www.farmacam.com.br/anti-aging" title="Anti-aging">Anti-aging</a> 1729 1730 1731 1732 </li> 1733 1734 1735 <li > 1736 1737 <a href="https://www.farmacam.com.br/antiagregantes" title="Antiagregantes">Antiagregantes</a> 1738 1739 1740 1741 </li> 1742 1743 1744 <li > 1745 1746 <a href="https://www.farmacam.com.br/antialergicos" title="Antialérgicos">Antialérgicos</a> 1747 1748 1749 1750 </li> 1751 1752 1753 <li > 1754 1755 <a href="https://www.farmacam.com.br/antidepressivos" title="Antidepressivos">Antidepressivos</a> 1756 1757 1758 1759 </li> 1760 1761 1762 <li > 1763 1764 <a href="https://www.farmacam.com.br/anti-inflamatorios" title="Anti-inflamatórios">Anti-inflamatórios</a> 1765 1766 1767 1768 </li> 1769 1770 1771 <li > 1772 1773 <a href="https://www.farmacam.com.br/antioxidantes" title="Antioxidantes">Antioxidantes</a> 1774 1775 1776 1777 </li> 1778 1779 1780 <li > 1781 1782 <a href="https://www.farmacam.com.br/antissepticos" title="Antissépticos">Antissépticos</a> 1783 1784 1785 1786 </li> 1787 1788 1789 <li > 1790 1791 <a href="https://www.farmacam.com.br/antitermicos" title="Antitérmicos">Antitérmicos</a> 1792 1793 1794 1795 </li> 1796 1797 1798 <li > 1799 1800 <a href="https://www.farmacam.com.br/antivertiginosos" title="Antivertiginosos">Antivertiginosos</a> 1801 1802 1803 1804 </li> 1805 1806 1807 <li > 1808 1809 <a href="https://www.farmacam.com.br/aumento-do-apetite" title="Aumento do Apetite">Aumento do Apetite</a> 1810 1811 1812 1813 </li> 1814 1815 1816 <li > 1817 1818 <a href="https://www.farmacam.com.br/bactericidas" title="Bactericidas">Bactericidas</a> 1819 1820 1821 1822 </li> 1823 1824 1825 <li > 1826 1827 <a href="https://www.farmacam.com.br/calmante" title="Calmantes">Calmantes</a> 1828 1829 1830 1831 </li> 1832 1833 1834 <li > 1835 1836 <a href="https://www.farmacam.com.br/cicatrizantes" title="Cicatrizantes">Cicatrizantes</a> 1837 1838 1839 1840 </li> 1841 1842 1843 <li > 1844 1845 <a href="https://www.farmacam.com.br/dermatologicos" title="Dermatológicos">Dermatológicos</a> 1846 1847 1848 1849 </li> 1850 1851 1852 <li > 1853 1854 <a href="https://www.farmacam.com.br/desempenho-fisico" title="Desempenho Físico">Desempenho Físico</a> 1855 1856 1857 1858 </li> 1859 1860 1861 <li > 1862 1863 <a href="https://www.farmacam.com.br/desempenho-imunologico" title="Desempenho Imunológico">Desempenho Imunológico</a> 1864 1865 1866 1867 </li> 1868 1869 1870 <li > 1871 1872 <a href="https://www.farmacam.com.br/desempenho-mental" title="Desempenho Mental">Desempenho Mental</a> 1873 1874 1875 1876 </li> 1877 1878 1879 <li > 1880 1881 <a href="https://www.farmacam.com.br/desempenho-sexual" title="Desempenho Sexual">Desempenho Sexual</a> 1882 1883 1884 1885 </li> 1886 1887 1888 <li > 1889 1890 <a href="https://www.farmacam.com.br/despigmentantes" title="Despigmentantes">Despigmentantes</a> 1891 1892 1893 1894 </li> 1895 1896 1897 <li > 1898 1899 <a href="https://www.farmacam.com.br/diureticos" title="Diuréticos">Diuréticos</a> 1900 1901 1902 1903 </li> 1904 1905 1906 <li > 1907 1908 <a href="https://www.farmacam.com.br/emagrecimento" title="Emagrecimento">Emagrecimento</a> 1909 1910 1911 1912 </li> 1913 1914 1915 <li > 1916 1917 <a href="https://www.farmacam.com.br/estimulantes" title="Estimulantes">Estimulantes</a> 1918 1919 1920 1921 </li> 1922 1923 1924 <li > 1925 1926 <a href="https://www.farmacam.com.br/expectorantes" title="Expectorantes">Expectorantes</a> 1927 1928 1929 1930 </li> 1931 1932 1933 <li > 1934 1935 <a href="https://www.farmacam.com.br/laxativos" title="Laxativos">Laxativos</a> 1936 1937 1938 1939 </li> 1940 1941 1942 <li > 1943 1944 <a href="https://www.farmacam.com.br/protecao-solar" title="Proteção Solar">Proteção Solar</a> 1945 1946 1947 1948 </li> 1949 1950 1951 <li > 1952 1953 <a href="https://www.farmacam.com.br/qualidade-de-vida" title="Qualidade de Vida">Qualidade de Vida</a> 1954 1955 1956 1957 </li> 1958 1959 1960 <li > 1961 1962 <a href="https://www.farmacam.com.br/repelentes" title="Repelentes">Repelentes</a> 1963 1964 1965 1966 </li> 1967 1968 1969 <li > 1970 1971 <a href="https://www.farmacam.com.br/saude-da-mulher" title="Saúde da Mulher">
1971Saúde da Mulher</a> 1972 1973 1974 1975 </li> 1976 1977 1978 <li > 1979 1980 <a href="https://www.farmacam.com.br/suplementacao-nutricional" title="Suplementação Nutricional">Suplementação Nutricional</a> 1981 1982 1983 1984 </li> 1985 1986 1987 <li > 1988 1989 <a href="https://www.farmacam.com.br/tratamento-cardiaco" title="Tratamento Cardiovascular">Tratamento Cardiovascular</a> 1990 1991 1992 1993 </li> 1994 1995 1996 <li > 1997 1998 <a href="https://www.farmacam.com.br/tratamento-de-acne" title="Tratamento de Acne">Tratamento de Acne</a> 1999 2000 2001 2002 </li> 2003 2004 2005 <li > 2006 2007 <a href="https://www.farmacam.com.br/tratamento-de-unha-e-cabelo" title="Tratamento de Unha e Cabelo">Tratamento de Unha e Cabelo</a> 2008 2009 2010 2011 </li> 2012 2013 2014 <li > 2015 2016 <a href="https://www.farmacam.com.br/tratamento-digestorio" title="Tratamento Digestório">Tratamento Digestório</a> 2017 2018 2019 2020 </li> 2021 2022 2023 <li > 2024 2025 <a href="https://www.farmacam.com.br/tratamento-endocrinologico" title="Tratamento Endocrinológico">Tratamento Endocrinológico</a> 2026 2027 2028 2029 </li> 2030 2031 2032 <li > 2033 2034 <a href="https://www.farmacam.com.br/tratamento-ginecologico" title="Tratamento Ginecológico">Tratamento Ginecológico</a> 2035 2036 2037 2038 </li> 2039 2040 2041 <li > 2042 2043 <a href="https://www.farmacam.com.br/tratamento-neurologico-e-psiquiatrico" title="Tratamento Neurológico e Psiquiátrico">Tratamento Neurológico e Psiquiátrico</a> 2044 2045 2046 2047 </li> 2048 2049 2050 <li > 2051 2052 <a href="https://www.farmacam.com.br/tratamento-oftalmico" title="Tratamento Oftálmico">Tratamento Oftálmico</a> 2053 2054 2055 2056 </li> 2057 2058 2059 <li > 2060 2061 <a href="https://www.farmacam.com.br/tratamento-ortopedico-e-reumatologico" title="Tratamento Ortopédico e Reumatológico">Tratamento Ortopédico e Reumatológico</a> 2062 2063 2064 2065 </li> 2066 2067 2068 <li > 2069 2070 <a href="https://www.farmacam.com.br/tratamento-otorrinolaringologico" title="Tratamento Otorrinolaringológico">Tratamento Otorrinolaringológico</a> 2071 2072 2073 2074 </li> 2075 2076 2077 <li > 2078 2079 <a href="https://www.farmacam.com.br/tratamento-proctologico" title="Tratamento Proctológico">Tratamento Proctológico</a> 2080 2081 2082 2083 </li> 2084 2085 2086 <li > 2087 2088 <a href="https://www.farmacam.com.br/tratamento-respiratorio" title="Tratamento Respiratório">Tratamento Respiratório</a> 2089 2090 2091 2092 </li> 2093 2094 2095 <li > 2096 2097 <a href="https://www.farmacam.com.br/tratamento-urinario" title="Tratamento Urinário">Tratamento Urinário</a> 2098 2099 2100 2101 </li> 2102 2103 2104 <li > 2105 2106 <a href="https://www.farmacam.com.br/tratamento-urologico" title="Tratamento Urológico">Tratamento Urológico</a> 2107 2108 2109 2110 </li> 2111 2112 2113 <li > 2114 2115 <a href="https://www.farmacam.com.br/uso-em-procedimento" title="Uso em Procedimento">Uso em Procedimento</a> 2116 2117 2118 2119 </li> 2120 2121 </div> 2122 </ul> 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 </div> 2140 2141 2142 2143 2144 </li> 2145 2146 2147 2148 2149 2150 2151 </ul> 2152 </div> 2153</nav> 2154 2155 </div> 2156 2157 <div class="menu-itens"> 2158 <div class="favoritos" title="Favoritos" role="button" aria-label="Ver favoritos" tabindex="0"> 2159 <svg xmlns="http://www.w3.org/2000/svg" height="25" style="margin-bottom: -2px;" fill="currentColor" class="bi bi-heart" viewBox="0 0 16 16"> 2160 <path d="m8 2.748-.717-.737C5.6.281 2.514.878 1.4 3.053c-.523 1.023-.641 2.5.314 4.385.92 1.815 2.834 3.989 6.286 6.357 3.452-2.368 5.365-4.542 6.286-6.357.955-1.886.838-3.362.314-4.385C13.486.878 10.4.28 8.717 2.01zM8 15C-7.333 4.868 3.279-3.04 7.824 1.143q.09.083.176.171a3 3 0 0 1 .176-.17C12.72-3.042 23.333 4.8
216067 8 15"/> 2161 </svg> 2162 <div class="favoritos-qtde">0</div> 2163 </div> 2164 </div> 2165 2166 2167 2168 2169 <div class="menu-horizontal-item rastreio-menu-horizontal item-menu login-user flex"> 2170 <a title="Rastreio"> 2171 <svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor" class="bi bi-box-seam" viewBox="0 0 16 16"> 2172 <path d="M8.186 1.113a.5.5 0 0 0-.372 0L1.846 3.5l2.404.961L10.404 2l-2.218-.887zm3.564 1.426L5.596 5 8 5.961 14.154 3.5l-2.404-.961zm3.25 1.7-6.5 2.6v7.922l6.5-2.6V4.24zM7.5 14.762V6.838L1 4.239v7.923l6.5 2.6zM7.443.184a1.5 1.5 0 0 1 1.114 0l7.129 2.852A.5.5 0 0 1 16 3.5v8.662a1 1 0 0 1-.629.928l-7.185 2.874a.5.5 0 0 1-.372 0L.63 13.09a1 1 0 0 1-.63-.928V3.5a.5.5 0 0 1 .314-.464L7.443.184z"/> 2173 </svg> 2174 </a> 2175 2176 <div class="item-menu-dropdown rastreio-dropdown"> 2177 <div class="texto-rastreio"> 2178 Rastreie seu pedido 2179 </div> 2180 2181 <div class="box-rastreio"> 2182 <form melhod="GET" action="https://www.linkcorreios.com.br" target="_blank"> 2183 <input type="text" name="id" maxlength="30" placeholder="Insira o código" required=""> 2184 <button type="submit" aria-label="Rastrear"> 2185 Rastrear 2186 </button> 2187 </form> 2188 </div> 2189 </div> 2190 </div> 2191 2192 <div class="menu-horizontal-item contato-menu-horizontal item-menu login-user flex"> 2193 <a title="Contato"> 2194 <svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-circle"><path d="m3 21 1.9-5.7a8.5 8.5 0 1 1 3.8 3.8z"/></svg> 2195 </a> 2196 2197 <div class="item-menu-dropdown contact-dropdown"> 2198 2199 <p> 2200 <svg style="margin-bottom: -2px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-telephone" viewBox="0 0 16 16"> 2201 <path d="M3.654 1.328a.678.678 0 0 0-1.015-.063L1.605 2.3c-.483.484-.661 1.169-.45 1.77a17.568 17.568 0 0 0 4.168 6.608 17.569 17.569 0 0 0 6.608 4.168c.601.211 1.286.033 1.77-.45l1.034-1.034a.678.678 0 0 0-.063-1.015l-2.307-1.794a.678.678 0 0 0-.58-.122l-2.19.547a1.745 1.745 0 0 1-1.657-.459L5.482 8.062a1.745 1.745 0 0 1-.46-1.657l.548-2.19a.678.678 0 0 0-.122-.58L3.654 1.328zM1.884.511a1.745 1.745 0 0 1 2.612.163L6.29 2.98c.329.423.445.974.315 1.494l-.547 2.19a.678.678 0 0 0 .178.643l2.457 2.457a.678.678 0 0 0 .644.178l2.189-.547a1.745 1.745 0 0 1 1.494.315l2.306 1.794c.829.645.905 1.87.163 2.611l-1.034 1.034c-.74.74-1.846 1.065-2.877.702a18.634 18.634 0 0 1-7.01-4.42 18.634 18.634 0 0 1-4.42-7.009c-.362-1.03-.037-2.137.703-2.877L1.885.511z"/> 2202 </svg> 2203 <strong>Telefone:</strong> <a title="(21) 2604-7350" href="tel:2126047350"> (21) 2604-7350</a> 2204 </p> 2205 2206 <div class="linha"></div> 2207 <p> 2208 2209 2210 <svg style="margin-bottom: -2px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-whatsapp" viewBox="0 0 16 16"> 2211 <path d="M13.601 2.326A7.854 7.854 0 0 0 7.994 0C3.627 0 .068 3.558.064 7.926c0 1.399.366 2.76 1.057 3.965L0 16l4.204-1.102a7.933 7.933 0 0 0 3.79.965h.004c4.368 0 7.926-3.558 7.93-7.93A7.898 7.898 0 0 0 13.6 2.326zM7.994 14.521a6.573 6.573 0 0 1-3.356-.92l-.24-.144-2.494.654.666-2.433-.156-.251a6.56 6.56 0 0 1-1.007-3.505c0-3.626 2.957-6.584 6.591-6.584a6.56 6.56 0 0 1 4.66 1.931 6.557 6.557 0 0 1 1.928 4.66c-.004 3.639-2.961 6.592-6.592 6.592zm3.615-4.934c-.197-.099-1.17-.578-1.353-.646-.182-.065-.315-.099-.445.099-.133.197-.513.646-.627.775-.114.133-.232.148-.43.05-.197-.1-.836-.308-1.592-.985-.59-.525-.985-1.175-1.103-1.372-.114-.198-.011-.304.088-.403.087-.088.197-.232.296-.346.1-.114.133-.198.198-.33.065-.134.034-.248-.015-.347-.05-.099-.445-1.076-.612-1.47-.16-.389-.323-.335-.445-.34-.114-.007-.247-.007-.38-.007a.729.729 0 0 0-.529.247c-.182.198-.691.677-.691 1.654 0 .977.71 1.916.81 2.049.098.133 1.394 2.132 3.383 2.992.47.205.84.326 1.129.418.475.152.904.129 1.246.08.38-.058
22111.171-.48 1.338-.943.164-.464.164-.86.114-.943-.049-.084-.182-.133-.38-.232z"/> 2212 </svg> 2213 <strong>WhatsApp:</strong> <a title="WhatsApp" aria-label="Falar no WhatsApp" href="https://api.whatsapp.com/send?phone=552126047350" rel="noreferrer" target="_blank">(21) 2604-7350</a> 2214 </p> 2215 2216 <div class="linha"></div> 2217 <p> 2218 <svg style="margin-bottom: -3px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-envelope" viewBox="0 0 16 16"> 2219 <path d="M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4Zm2-1a1 1 0 0 0-1 1v.217l7 4.2 7-4.2V4a1 1 0 0 0-1-1H2Zm13 2.383-4.708 2.825L15 11.105V5.383Zm-.034 6.876-5.64-3.471L8 9.583l-1.326-.795-5.64 3.47A1 1 0 0 0 2 13h12a1 1 0 0 0 .966-.741ZM1 11.105l4.708-2.897L1 5.383v5.722Z"/> 2220 </svg> 2221 2222 <strong>E-mail:</strong> <a title="[email protected]" href="mailto:[email protected]">[email protected]</a> 2223 </p> 2224 2225 <div class="linha"></div> 2226 <p> 2227 <svg style="margin-bottom: -3px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clock" viewBox="0 0 16 16"> 2228 <path d="M8 3.5a.5.5 0 0 0-1 0V9a.5.5 0 0 0 .252.434l3.5 2a.5.5 0 0 0 .496-.868L8 8.71V3.5z"/> 2229 <path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm7-8A7 7 0 1 1 1 8a7 7 0 0 1 14 0z"/> 2230 </svg> 2231 <strong>Horário de Atendimento</strong> <br /> 2232 Segunda a Sexta das 8hs as 17:30hs 2233 </p> 2234 2235 <div class="linha"></div> 2236 2237 <p> 2238 <a title="Fale Conosco" href="/contato"> 2239 <svg style="margin-bottom: -3px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chat-left" viewBox="0 0 16 16"> 2240 <path d="M14 1a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H4.414A2 2 0 0 0 3 11.586l-2 2V2a1 1 0 0 1 1-1h12zM2 0a2 2 0 0 0-2 2v12.793a.5.5 0 0 0 .854.353l2.853-2.853A1 1 0 0 1 4.414 12H14a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2z"/> 2241 </svg> 2242 <strong>Fale Conosco</strong> 2243 </a> 2244 </p> 2245 2246 </div> 2247 </div> 2248 2249 <div class="menu-horizontal-item minha-conta-menu-horizontal item-menu login-user flex"> 2250 <a href="/my-account/login" title="Minha Conta"> 2251 <svg xmlns="http://www.w3.org/2000/svg" width="35" height="35" viewBox="0 0 30 30" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-user-2"><path d="M21.25 10A6.25 6.25 0 0 1 15 16.25 6.25 6.25 0 0 1 8.75 10a6.25 6.25 0 0 1 12.5 0"/><path d="M25 26.25a10 10 0 1 0-20 0"/></svg> 2252 2253 <span class="tray-hide" data-logged-user="true"> 2254 Olá, <span data-customer="name"></span> 2255 </span> 2256 </a> 2257 2258 <div class="item-menu-dropdown login-dropdown"> 2259 2260 <div class="tray-hide" data-logged-user="true"> 2261 <p> 2262 <a href="/central-do-cliente" title="Minha Conta"> 2263 <svg style="margin-bottom: -3px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-list-ul" viewBox="0 0 16 16"> 2264 <path fill-rule="evenodd" d="M5 11.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm-3 1a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm0 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm0 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"/> 2265 </svg> 2266 Minha Conta 2267 </a> 2268 </p> 2269 2270 <p> 2271 <a title="Meus Pedidos" href="/loja/central_anteriores.php?loja=1063102"> 2272 <svg style="margin-bottom: -3px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-seam" viewBox="0 0 16 16"> 2273 <path d="M8.186 1.113a.5.5 0 0 0-.372 0L1.846 3.5l2.404.961L10.404 2l-2.218-.887zm3.564 1.426L5.596 5 8 5.961 14.154 3.5l-2.404-.961zm3.25 1.7-6.5 2.6v7.922l6.5-2.6V4.24zM7.5 14.762V6.838L1 4.239v7.923l6.5 2.6zM7.443.184a1.5 1.5 0 0 1 1.114 0l7.129 2.852A.5.5 0 0 1 16 3.5v8.662a1 1 0 0 1-.629.928l-7.185 2.874a.5.5 0 0 1-.372 0L.63 13.09a1 1 0 0 1-.63-.928V3.5a.5.5 0 0 1 .314-.464L7.443.184z"/> 2274 </svg> 2275 Meus Pedidos 2276 </a> 2277 </p> 2278 2279 <div class="linha"></div> 2280 2281 <div class="text-right"> 2282 <a title="Sair da Conta" href="/loja/logout.php?loja=1063102"> 2283 Sair 2284 <svg style="margin-bottom: -4px;" xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" class="bi bi-box-arrow-right" viewBox="0 0 16 16"> 2285 <path fill-rule="evenodd" d="M10 12.5a.5.5 0 0 1-.5.5h-8a.5.5 0 0 1-.5-.5v-9a.5.5 0 0 1 .5-.5h8a.5.5 0 0 1 .5.5v2a.5.5 0 0 0 1 0v-2A1.5 1.5 0 0 0 9.5 2h-8A1.5 1.5 0 0 0 0 3.5v9A1.5 1.5 0 0 0 1.5 14h8a1.5 1.5 0 0 0 1.5-1.5v-2a.5.5 0 0 0-1 0v2z"/> 2286 <path fill-rule="evenodd" d="M15.854 8.354a.5.5 0 0 0 0-.708l-3-3a.5.5 0 0 0-.708.708L14.293 7.5H5.5a.5.5 0 0 0 0 1h8.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3z"/> 2287 </svg> 2288 </a> 2289 </div> 2290 </div> 2291 2292 <div class="tray-hide" data-logged-user="false"> 2293 <p> 2294 <a title="Entrar na minha conta" href="/my-account/login"> 2295 <svg style="margin-left: -3px;" xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" class="bi bi-box-arrow-in-right" viewBox="0 0 16 16"> 2296 <path fill-rule="evenodd" d="M6 3.5a.5.5 0 0 1 .5-.5h8a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5h-8a.5.5 0 0 1-.5-.5v-2a.5.5 0 0 0-1 0v2A1.5 1.5 0 0 0 6.5 14h8a1.5 1.5 0 0 0 1.5-1.5v-9A1.5 1.5 0 0 0 14.5 2h-8A1.5 1.5 0 0 0 5 3.5v2a.5.5 0 0 0 1 0v-2z"/> 2297 <path fill-rule="evenodd" d="M11.854 8.354a.5.5 0 0 0 0-.708l-3-3a.5.5 0 1 0-.708.708L10.293 7.5H1.5a.5.5 0 0 0 0 1h8.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3z"/> 2298 </svg> 2299 Entrar Agora 2300 </a> 2301 </p> 2302 2303 <p> 2304 <a title="Meus Pedidos" href="/loja/central_anteriores.php?loja=1063102"> 2305 <svg style="margin-bottom: -3px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-seam" viewBox="0 0 16 16"> 2306 <path d="M8.186 1.113a.5.5 0 0 0-.372 0L1.846 3.5l2.404.961L10.404 2l-2.218-.887zm3.564 1.426L5.596 5 8 5.961 14.154 3.5l-2.404-.961zm3.25 1.7-6.5 2.6v7.922l6.5-2.6V4.24zM7.5 14.762V6.838L1 4.239v7.923l6.5 2.6zM7.443.184a1.5 1.5 0 0 1 1.114 0l7.129 2.852A.5.5 0 0 1 16 3.5v8.662a1 1 0 0 1-.629.928l-7.185 2.874a.5.5 0 0 1-.372 0L.63 13.09a1 1 0 0 1-.63-.928V3.5a.5.5 0 0 1 .314-.464L7.443.184z"/> 2307 </svg> 2308 Meus Pedidos 2309 </a> 2310 </p> 2311 2312 <div class="linha"></div> 2313 2314 <p> 2315 <a title="Criar Conta" href="/cadastro"> 2316 <svg style="margin-bottom: -3px;" xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" class="bi bi-pers
2316on-plus" viewBox="0 0 16 16"> 2317 <path d="M6 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm2-3a2 2 0 1 1-4 0 2 2 0 0 1 4 0zm4 8c0 1-1 1-1 1H1s-1 0-1-1 1-4 6-4 6 3 6 4zm-1-.004c-.001-.246-.154-.986-.832-1.664C9.516 10.68 8.289 10 6 10c-2.29 0-3.516.68-4.168 1.332-.678.678-.83 1.418-.832 1.664h10z"/> 2318 <path fill-rule="evenodd" d="M13.5 5a.5.5 0 0 1 .5.5V7h1.5a.5.5 0 0 1 0 1H14v1.5a.5.5 0 0 1-1 0V8h-1.5a.5.5 0 0 1 0-1H13V5.5a.5.5 0 0 1 .5-.5z"/> 2319 </svg> 2320 Criar Conta 2321 </a> 2322 </p> 2323 </div> 2324 </div> 2325 2326 </div> 2327 2328 <div class="meu-carrinho-menu-horizontal item-menu flex cart"> 2329 2330 <div class="carrinho-lateral-on" role="button" aria-label="Abrir carrinho" tabindex="0"> 2331 2332 <!-- Carrinho de compras --> 2333 <svg xmlns="http://www.w3.org/2000/svg" width="26" height="26" fill="currentColor" class="bi bi-cart3" viewBox="0 0 16 16"> 2334 <path d="M0 1.5A.5.5 0 0 1 .5 1H2a.5.5 0 0 1 .485.379L2.89 3H14.5a.5.5 0 0 1 .49.598l-1 5a.5.5 0 0 1-.465.401l-9.397.472L4.415 11H13a.5.5 0 0 1 0 1H4a.5.5 0 0 1-.491-.408L2.01 3.607 1.61 2H.5a.5.5 0 0 1-.5-.5zM3.102 4l.84 4.479 9.144-.459L13.89 4H3.102zM5 12a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm7 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm-7 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm7 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2z"/> 2335 </svg> 2336 2337 2338 2339 </div> 2340 2341 <div class="cart-quantity" data-cart="amount">0</div> 2342 2343 2344 </div> 2345 2346 2347 </div> 2348 2349 <div class="menu-horizontal-item menu-menu-horizontal-2"> 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367<nav class="nav one-column"> 2368 <div class="container"> 2369 <ul class="list flex justify-between align-center"> 2370 2371 2372 2373 2374 2375 2376 <li class="first-level sub"> 2377 2378 <a href="https://www.farmacam.com.br/tipo-de-produto" title="Tipo de Produto"> 2379 <div class="name"> 2380 2381 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/TipoDeProduto.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Ícone menu"> 2382 2383 2384 2385 2386 Tipo de Produto 2387 2388 </div> 2389 </a> 2390 2391 2392 <div class="sub-list second-level"> 2393 2394 <ul> 2395 <a href="https://www.farmacam.com.br/tipo-de-produto" title="Tipo de Produto">Tipo de Produto</a> 2396 2397 <div class="sub-list-columns"> 2398 2399 2400 <li > 2401 2402 <a href="https://www.farmacam.com.br/industrializados" title="Industrializados">Industrializados</a> 2403 2404 2405 2406 </li> 2407 2408 2409 <li > 2410 2411 <a href="https://www.farmacam.com.br/manipulados" title="Manipulados">Manipulados</a> 2412 2413 2414 2415 </li> 2416 2417 </div> 2418 </ul> 2419 2420 2421 <div class="categoria-produto menu-categoria-product-1"></div> 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 </div> 2439 2440 2441 2442 2443 </li> 2444 <li class="first-level sub"> 2445 2446 <a href="https://www.farmacam.com.br/uso" title="Uso"> 2447 <div class="name"> 2448 2449 <img src="https://images.tcdn.com.br/files/1063102/themes/2
244916/img/settings/uso.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Ícone menu"> 2450 2451 2452 2453 2454 Uso 2455 2456 </div> 2457 </a> 2458 2459 2460 <div class="sub-list second-level"> 2461 2462 <ul> 2463 <a href="https://www.farmacam.com.br/uso" title="Uso">Uso</a> 2464 2465 <div class="sub-list-columns"> 2466 2467 2468 <li > 2469 2470 <a href="https://www.farmacam.com.br/adulto" title="Adulto">Adulto</a> 2471 2472 2473 2474 </li> 2475 2476 2477 <li > 2478 2479 <a href="https://www.farmacam.com.br/pediatrico" title="Pediátrico">Pediátrico</a> 2480 2481 2482 2483 </li> 2484 2485 2486 <li class="sub" > 2487 2488 <a href="https://www.farmacam.com.br/veterinario" title="Veterinário">Veterinário</a> 2489 2490 <ul class="sub-list third-level"> 2491 <li> 2492 <a href="https://www.farmacam.com.br/caes" title="Cães">Cães</a> 2493 </li> 2494 <li> 2495 <a href="https://www.farmacam.com.br/felinos" title="Felinos">Felinos</a> 2496 </li> 2497 <li> 2498 <a href="https://www.farmacam.com.br/equinos" title="Equinos">Equinos</a> 2499 </li> 2500 <li> 2501 <a href="https://www.farmacam.com.br/repteis" title="Répteis">Répteis</a> 2502 </li> 2503 <li> 2504 <a href="https://www.farmacam.com.br/aves" title="Aves Silvestres">Aves Silvestres</a> 2505 </li> 2506 </ul> 2507 2508 2509 </li> 2510 2511 </div> 2512 </ul> 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 </div> 2530 2531 2532 2533 2534 </li> 2535 <li class="first-level sub"> 2536 2537 <a href="https://www.farmacam.com.br/promocoes" title="Promoções"> 2538 <div class="name"> 2539 2540 <img src="https://images.tcdn.com.br/files/1063102/themes/2
254016/img/settings/Promocoes.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Ícone menu"> 2541 2542 2543 2544 2545 Promoções 2546 2547 </div> 2548 </a> 2549 2550 2551 <div class="sub-list second-level"> 2552 2553 <ul> 2554 <a href="https://www.farmacam.com.br/promocoes" title="Promoções">Promoções</a> 2555 2556 <div class="sub-list-columns"> 2557 2558 2559 <li > 2560 2561 <a href="https://www.farmacam.com.br/promocoes-do-mes" title="Promoção do mês de Agosto">Promoção do mês de Agosto</a> 2562 2563 2564 2565 </li> 2566 2567 </div> 2568 </ul> 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 </div> 2586 2587 2588 2589 2590 </li> 2591 <li class="first-level sub"> 2592 2593 <a href="https://www.farmacam.com.br/linha-de-produtos" title="Linha de Produtos"> 2594 <div class="name"> 2595 2596 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/LinhaDeProdutos.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Ícone menu"> 2597 2598 2599 2600 2601 Linha de Produtos 2602 2603 </div> 2604 </a> 2605 2606 2607 <div class="sub-list second-level"> 2608 2609 <ul> 2610 <a href="https://www.farmacam.com.br/linha-de-produtos" title="Linha de Produtos">Linha de Produtos</a> 2611 2612 <div class="sub-list-columns"> 2613 2614 2615 <li > 2616 2617 <a href="https://www.farmacam.com.br/linha-farma-signature" title="Linha Farma Signature">Linha Farma Signature</a> 2618 2619 2620 2621 </li> 2622 2623 2624 <li > 2625 2626 <a href="https://www.farmacam.com.br/linha-farma-gym" title="Linha Farma-Gym">Linha Farma-Gym</a> 2627 2628 2629 2630 </li> 2631 2632 2633 <li > 2634 2635 <a href="https://www.farmacam.com.br/linha-f-beauty" title="Linha F-Beauty">Linha F-Beauty</a> 2636 2637 2638 2639 </li> 2640 2641 2642 <li > 2643 2644 <a href="https://www.farmacam.com.br/linha-fitocam" title="Linha FitoCam">Linha FitoCam</a> 2645 2646 2647 2648 </li> 2649 2650 2651 <li > 2652 2653 <a href="https://www.farmacam.com.br/linha-farma-vet" title="Linha Farma Vet">Linha Farma Vet</a> 2654 2655 2656 2657 </li> 2658 2659 2660 <li class="sub" > 2661 2662 <a href="https://www.farmacam.com.br/linha-homeopaticam" title="Linha HomeopatiCAM">Linha HomeopatiCAM</a> 2663 2664 <ul class="sub-list third-level"> 2665 <li> 2666 <a href="https://www.farmacam.com.br/floral-therapi" title="Floral Thérapi">Floral Thérapi</a> 2667 </li> 2668 </ul> 2669 2670 2671 </li> 2672 2673 2674 <li class="sub" > 2675 2676 <a href="https://www.farmacam.com.br/linha-f-cam" title="Linha F-CAM">Linha F-CAM</a> 2677 2678 <ul class="sub-list third-level"> 2679 <li> 2680 <a href="https://www.farmacam.com.br/vitaminas" title="Vitaminas">Vitaminas</a> 2681 </li> 2682 <li> 2683 <a href="https://www.farmacam.com.br/minerais" title="Minerais">Minerais</a> 2684 </li> 2685 <li> 2686 <a href="https://www.farmacam.com.br/lactobacilos" title="Lactobacilos">Lactobacilos</a> 2687 </li> 2688 <li> 2689 <a href="https://www.farmacam.com.br/fibras" title="Fibras">Fibras</a> 2690 </li> 2691 <li> 2692 <a href="https://www.farmacam.com.br/esmaltes" title="Esmaltes">Esmaltes</a> 2693 </li> 2694 <li> 2695 <a href="https://www.farmacam.com.br/capsulas-oleosas" title="Cápsulas Oleosas">Cápsulas Oleosas</a> 2696 </li> 2697 <li> 2698 <a href="https://www.farmacam.com.br/aminoacidos" title="Aminoácidos">Aminoácidos</a> 2699 </li> 2700 <li> 2701 <a href="https://www.farmacam.com.br/hormonio" title="Hormônios">Hormônios</a> 2702 </li> 2703 <li> 2704 <a href="https://www.farmacam.com.br/enzimas" title="Enzimas">Enzimas</a> 2705 </li> 2706 </ul> 2707 2708 2709 </li> 2710 2711 </div> 2712 </ul> 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 </div> 2730 2731 2732 2733 2734 </li> 2735 <li class="first-level sub"> 2736 2737 <a href="https://www.farmacam.com.br/uso-e-objetivo" title="Objetivo"> 2738 <div class="name"> 2739 2740 <img src="https://images.tcdn.com.br/files/1063102/themes/2
274016/img/settings/objetivo.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Ícone menu"> 2741 2742 2743 2744 2745 Objetivo 2746 2747 </div> 2748 </a> 2749 2750 2751 <div class="sub-list second-level"> 2752 2753 <ul> 2754 <a href="https://www.farmacam.com.br/uso-e-objetivo" title="Objetivo">Objetivo</a> 2755 2756 <div class="sub-list-columns"> 2757 2758 2759 <li > 2760 2761 <a href="https://www.farmacam.com.br/anabolizantes" title="Anabolizantes">Anabolizantes</a> 2762 2763 2764 2765 </li> 2766 2767 2768 <li > 2769 2770 <a href="https://www.farmacam.com.br/analgesicos" title="Analgésicos">Analgésicos</a> 2771 2772 2773 2774 </li> 2775 2776 2777 <li > 2778 2779 <a href="https://www.farmacam.com.br/anestesicos" title="Anestésicos">Anestésicos</a> 2780 2781 2782 2783 </li> 2784 2785 2786 <li > 2787 2788 <a href="https://www.farmacam.com.br/ansioliticos" title="Ansiolíticos">Ansiolíticos</a> 2789 2790 2791 2792 </li> 2793 2794 2795 <li > 2796 2797 <a href="https://www.farmacam.com.br/anti-aging" title="Anti-aging">Anti-aging</a> 2798 2799 2800 2801 </li> 2802 2803 2804 <li > 2805 2806 <a href="https://www.farmacam.com.br/antiagregantes" title="Antiagregantes">Antiagregantes</a> 2807 2808 2809 2810 </li> 2811 2812 2813 <li > 2814 2815 <a href="https://www.farmacam.com.br/antialergicos" title="Antialérgicos">Antialérgicos</a> 2816 2817 2818 2819 </li> 2820 2821 2822 <li > 2823 2824 <a href="https://www.farmacam.com.br/antidepressivos" title="Antidepressivos">Antidepressivos</a> 2825 2826 2827 2828 </li> 2829 2830 2831 <li > 2832 2833 <a href="https://www.farmacam.com.br/anti-inflamatorios" title="Anti-inflamatórios">Anti-inflamatórios</a> 2834 2835 2836 2837 </li> 2838 2839 2840 <li > 2841 2842 <a href="https://www.farmacam.com.br/antioxidantes" title="Antioxidantes">Antioxidantes</a> 2843 2844 2845 2846 </li> 2847 2848 2849 <li > 2850 2851 <a href="https://www.farmacam.com.br/antissepticos" title="Antissépticos">Antissépticos</a> 2852 2853 2854 2855 </li> 2856 2857 2858 <li > 2859 2860 <a href="https://www.farmacam.com.br/antitermicos" title="Antitérmicos">Antitérmicos</a> 2861 2862 2863 2864 </li> 2865 2866 2867 <li > 2868 2869 <a href="https://www.farmacam.com.br/antivertiginosos" title="Antivertiginosos">Antivertiginosos</a> 2870 2871 2872 2873 </li> 2874 2875 2876 <li > 2877 2878 <a href="https://www.farmacam.com.br/aumento-do-apetite" title="Aumento do Apetite">Aumento do Apetite</a> 2879 2880 2881 2882 </li> 2883 2884 2885 <li > 2886 2887 <a href="https://www.farmacam.com.br/bactericidas" title="Bactericidas">Bactericidas</a> 2888 2889 2890 2891 </li> 2892 2893 2894 <li > 2895 2896 <a href="https://www.farmacam.com.br/calmante" title="Calmantes">Calmantes</a> 2897 2898 2899 2900 </li> 2901 2902 2903 <li > 2904 2905 <a href="https://www.farmacam.com.br/cicatrizantes" title="Cicatrizantes">Cicatrizantes</a> 2906 2907 2908 2909 </li> 2910 2911 2912 <li > 2913 2914 <a href="https://www.farmacam.com.br/dermatologicos" title="Dermatológicos">Dermatológicos</a> 2915 2916 2917 2918 </li> 2919 2920 2921 <li > 2922 2923 <a href="https://www.farmacam.com.br/desempenho-fisico" title="Desempenho Físico">Desempenho Físico</a> 2924 2925 2926 2927 </li> 2928 2929 2930 <li > 2931 2932 <a href="https://www.farmacam.com.br/desempenho-imunologico" title="Desempenho Imunológico">Desempenho Imunológico</a> 2933 2934 2935 2936 </li> 2937 2938 2939 <li > 2940 2941 <a href="https://www.farmacam.com.br/desempenho-mental" title="Desempenho Mental">Desempenho Mental</a> 2942 2943 2944 2945 </li> 2946 2947 2948 <li > 2949 2950 <a href="https://www.farmacam.com.br/desempenho-sexual" title="Desempenho Sexual">Desempenho Sexual</a> 2951 2952 2953 2954 </li> 2955 2956 2957 <li > 2958 2959 <a href="https://www.farmacam.com.br/despigmentantes" title="Despigmentantes">Despigmentantes</a> 2960 2961 2962 2963 </li> 2964 2965 2966 <li > 2967 2968 <a href="https://www.farmacam.com.br/diureticos" title="Diuréticos">Diuréticos</a> 2969 2970 2971 2972 </li> 2973 2974 2975 <li > 2976 2977 <a href="https://www.farmacam.com.br/emagrecimento" title="Emagrecimento">Emagrecimento</a> 2978 2979 2980 2981 </li> 2982 2983 2984 <li > 2985 2986 <a href="https://www.farmacam.com.br/estimulantes" title="Estimulantes">Estimulantes</a> 2987 2988 2989 2990 </li> 2991 2992 2993 <li > 2994 2995 <a href="https://www.farmacam.com.br/expectorantes" title="Expectorantes">Expectorantes</a> 2996 2997 2998 2999 </li> 3000 3001 3002 <li > 3003 3004 <a href="https://www.farmacam.com.br/laxativos" title="Laxativos">Laxativos</a> 3005 3006 3007 3008 </li> 3009 3010 3011 <li > 3012 3013 <a href="https://www.farmacam.com.br/protecao-solar" title="Proteção Solar">Proteção Solar</a> 3014 3015 3016 3017 </li> 3018 3019 3020 <li > 3021 3022 <a href="https://www.farmacam.com.br/qualidade-de-vida" title="Qualidade de Vida">Qualidade de Vida</a> 3023 3024 3025 3026 </li> 3027 3028 3029 <li > 3030 3031 <a href="https://www.farmacam.com.br/repelentes" title="Repelentes">Repelentes</a> 3032 3033 3034 3035 </li> 3036 3037 3038 <li > 3039 3040 <a href="https://www.farmacam.com.br/saude-da-mulher" title="Saúde da Mulher">
3040Saúde da Mulher</a> 3041 3042 3043 3044 </li> 3045 3046 3047 <li > 3048 3049 <a href="https://www.farmacam.com.br/suplementacao-nutricional" title="Suplementação Nutricional">Suplementação Nutricional</a> 3050 3051 3052 3053 </li> 3054 3055 3056 <li > 3057 3058 <a href="https://www.farmacam.com.br/tratamento-cardiaco" title="Tratamento Cardiovascular">Tratamento Cardiovascular</a> 3059 3060 3061 3062 </li> 3063 3064 3065 <li > 3066 3067 <a href="https://www.farmacam.com.br/tratamento-de-acne" title="Tratamento de Acne">Tratamento de Acne</a> 3068 3069 3070 3071 </li> 3072 3073 3074 <li > 3075 3076 <a href="https://www.farmacam.com.br/tratamento-de-unha-e-cabelo" title="Tratamento de Unha e Cabelo">Tratamento de Unha e Cabelo</a> 3077 3078 3079 3080 </li> 3081 3082 3083 <li > 3084 3085 <a href="https://www.farmacam.com.br/tratamento-digestorio" title="Tratamento Digestório">Tratamento Digestório</a> 3086 3087 3088 3089 </li> 3090 3091 3092 <li > 3093 3094 <a href="https://www.farmacam.com.br/tratamento-endocrinologico" title="Tratamento Endocrinológico">Tratamento Endocrinológico</a> 3095 3096 3097 3098 </li> 3099 3100 3101 <li > 3102 3103 <a href="https://www.farmacam.com.br/tratamento-ginecologico" title="Tratamento Ginecológico">Tratamento Ginecológico</a> 3104 3105 3106 3107 </li> 3108 3109 3110 <li > 3111 3112 <a href="https://www.farmacam.com.br/tratamento-neurologico-e-psiquiatrico" title="Tratamento Neurológico e Psiquiátrico">Tratamento Neurológico e Psiquiátrico</a> 3113 3114 3115 3116 </li> 3117 3118 3119 <li > 3120 3121 <a href="https://www.farmacam.com.br/tratamento-oftalmico" title="Tratamento Oftálmico">Tratamento Oftálmico</a> 3122 3123 3124 3125 </li> 3126 3127 3128 <li > 3129 3130 <a href="https://www.farmacam.com.br/tratamento-ortopedico-e-reumatologico" title="Tratamento Ortopédico e Reumatológico">Tratamento Ortopédico e Reumatológico</a> 3131 3132 3133 3134 </li> 3135 3136 3137 <li > 3138 3139 <a href="https://www.farmacam.com.br/tratamento-otorrinolaringologico" title="Tratamento Otorrinolaringológico">Tratamento Otorrinolaringológico</a> 3140 3141 3142 3143 </li> 3144 3145 3146 <li > 3147 3148 <a href="https://www.farmacam.com.br/tratamento-proctologico" title="Tratamento Proctológico">Tratamento Proctológico</a> 3149 3150 3151 3152 </li> 3153 3154 3155 <li > 3156 3157 <a href="https://www.farmacam.com.br/tratamento-respiratorio" title="Tratamento Respiratório">Tratamento Respiratório</a> 3158 3159 3160 3161 </li> 3162 3163 3164 <li > 3165 3166 <a href="https://www.farmacam.com.br/tratamento-urinario" title="Tratamento Urinário">Tratamento Urinário</a> 3167 3168 3169 3170 </li> 3171 3172 3173 <li > 3174 3175 <a href="https://www.farmacam.com.br/tratamento-urologico" title="Tratamento Urológico">Tratamento Urológico</a> 3176 3177 3178 3179 </li> 3180 3181 3182 <li > 3183 3184 <a href="https://www.farmacam.com.br/uso-em-procedimento" title="Uso em Procedimento">Uso em Procedimento</a> 3185 3186 3187 3188 </li> 3189 3190 </div> 3191 </ul> 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 </div> 3209 3210 3211 3212 3213 </li> 3214 3215 3216 3217 3218 3219 3220 </ul> 3221 </div> 3222</nav> 3223 3224 </div> 3225 3226 <div class="container menu-horizontal-busca"> 3227 3228 <div class="header-search-wrapper"> 3229 3230 <div class="box-paginas-extras-cabecalho"> 3231 3232 3233 3234 </div> 3235 3236 <form action="/loja/busca.php?loja=1063102" method="get" data-search="suggestion"> 3237 <input type="hidden" name="loja" value="1063102"> 3238 <input class="input-search" placeholder=" Pesquise aqui " spellcheck="false" autocomplete="off" data-input="suggestion" type="text" name="palavra_busca"> 3239 <button class="button-search" aria-label="Buscar"> 3240 <i class="icon icon-search"></i> 3241 </button> 3242 <div class="suggestion is-hidden" data-container="suggestion"></div> 3243 </form> 3244 3245</div> 3246 3247 </div> 3248 3249 </div> 3250 3251</header> 3252 3253 <style> 3254 @media (min-width: 768px){ 3255 .cabecalho-mobile{ 3256 display: none; 3257 } 3258 } 3259 3260 .cabecalho-mobile{ 3261 position: fixed; 3262 width: 100%; 3263 bottom: 0; 3264 background-color: var(--color_header_bg); 3265 z-index: 18; 3266 max-height: 90px; 3267 box-shadow: 0px 0px 50px -10px rgba(0,0,0,0.1); 3268 opacity: 1; 3269 transition: max-height 0.5s ease-in-out; 3270 z-index: 9999; 3271 } 3272 3273 .cabecalho-mobile:not(.show){ 3274 max-height: 0; 3275 opacity: 0; 3276 } 3277 3278 .header-itens{ 3279 max-width: 100%; 3280 display: flex; 3281 align-items: flex-end; 3282 justify-content: space-between; 3283 margin: 10px 0; 3284 } 3285 3286 .header-item{ 3287 width: calc(100% / 6); 3288 padding: 2px; 3289 display: flex; 3290 flex-direction: column; 3291 align-items: center; 3292 justify-content: center; 3293 } 3294 3295 .h-texto{ 3296 font-size: 12px; 3297 font-weight: 400; 3298 } 3299
3300 .cabecalho-mobile .cart-quantity{ 3301 position: absolute; 3302 top: 12px; 3303 margin-right: -22px; 3304 border-radius: 50%; 3305 width: 16px; 3306 height: 16px; 3307 font-size: 9px; 3308 font-weight: 500; 3309 background-color: var(--color_header_cart_count); 3310 color: var(--color_header_bg); 3311 display: flex; 3312 justify-content: center; 3313 align-items: center; 3314 } 3315 3316 .h-search{ 3317 position: fixed; 3318 width: 100%; 3319 bottom: 0; 3320 display: none; 3321 box-shadow: 0px 0px 50px 5px rgba(0,0,0,0.1); 3322 } 3323 3324 .cabecalho-mobile .header-search-wrapper{ 3325 border-bottom: 1px solid var(--color_gray_medium); 3326 } 3327 3328 .cabecalho-mobile svg{ 3329 color: var(--color_header_highlight); 3330 } 3331 3332 .h-texto{ 3333 color: var(--menu_texto_mobile); 3334 } 3335 3336 .cabecalho-mobile .header-search-wrapper form{ 3337 position: relative; 3338 } 3339 3340 .cabecalho-mobile .header-search-wrapper form .suggestion{ 3341 /* top: -192px; */ 3342 top: calc(100% - 510px); 3343 position: absolute; 3344 left: 50%; 3345 transform: translate(-50%, 0); 3346 } 3347</style> 3348 3349<header class="cabecalho-mobile"> 3350 <div class="h-search"> 3351 <div class="header-search-wrapper"> 3352 3353 <div class="box-paginas-extras-cabecalho"> 3354 3355 3356 3357 </div> 3358 3359 <form action="/loja/busca.php?loja=1063102" method="get" data-search="suggestion"> 3360 <input type="hidden" name="loja" value="1063102"> 3361 <input class="input-search" placeholder=" Pesquise aqui " spellcheck="false" autocomplete="off" data-input="suggestion" type="text" name="palavra_busca"> 3362 <button class="button-search" aria-label="Buscar"> 3363 <i class="icon icon-search"></i> 3364 </button> 3365 <div class="suggestion is-hidden" data-container="suggestion"></div> 3366 </form> 3367 3368</div> 3369 </div> 3370 3371 3372 <div class="header-itens"> 3373 <a class="header-item h-menu" title="Abrir menu" aria-label="Abrir menu" tabindex="0" data-toggle="overlay-shadow" data-target="#menu-lateral"> 3374 <div class="h-icone"> 3375 <svg style="margin-bottom: -5px;" xmlns="http://www.w3.org/2000/svg" width="30" height="30" fill="currentColor" class="bi bi-list" viewBox="0 0 16 16"> 3376 <path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/> 3377 </svg> 3378 </div> 3379 3380 <div class="h-texto"> 3381 Menu 3382 </div> 3383 </a> 3384 3385 <a class="header-item h-busca" title="Buscar" aria-label="Buscar"> 3386 <div class="h-icone"> 3387 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-search" viewBox="0 0 16 16"> 3388 <path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"/> 3389 </svg> 3390 </div> 3391 3392 <div class="h-texto"> 3393 Buscar 3394 </div> 3395 </a> 3396 3397 <a href="#" title="Favoritos" aria-label="Ver favoritos" class="header-item h-pedidos"> 3398 <div class="h-icone"> 3399 <div class="menu-itens"> 3400 <div class="favoritos" title="Favoritos"> 3401 <svg xmlns="http://www.w3.org/2000/svg" height="25" style="margin-bottom: -2px;" fill="currentColor" class="bi bi-heart" viewBox="0 0 16 16"> 3402 <path d="m8 2.748-.717-.737C5.6.281 2.514.878 1.4 3.053c-.523 1.023-.641 2.5.314 4.385.92 1.815 2.834 3.989 6.286 6.357 3.452-2.368 5.365-4.542 6.286-6.357.955-1.886.838-3.362.314-4.385C13.486.878 10.4.28 8.717 2.01zM8 15C-7.333 4.868 3.279-3.04 7.824 1.143q.09.083.176.171a3 3 0 0 1 .176-.17C12.72-3.042 23.333 4.8
340267 8 15"/> 3403 </svg> 3404 <div class="favoritos-qtde">0</div> 3405 </div> 3406 </div> 3407 </div> 3408 <div class="h-texto"> 3409 Favoritos 3410 </div> 3411 </a> 3412 3413 <a title="Meus Pedidos" href="/loja/central_anteriores.php?loja=1063102" class="header-item h-pedidos"> 3414 <div class="h-icone"> 3415 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-box-seam" viewBox="0 0 16 16"> 3416 <path d="M8.186 1.113a.5.5 0 0 0-.372 0L1.846 3.5l2.404.961L10.404 2l-2.218-.887zm3.564 1.426L5.596 5 8 5.961 14.154 3.5l-2.404-.961zm3.25 1.7-6.5 2.6v7.922l6.5-2.6V4.24zM7.5 14.762V6.838L1 4.239v7.923l6.5 2.6zM7.443.184a1.5 1.5 0 0 1 1.114 0l7.129 2.852A.5.5 0 0 1 16 3.5v8.662a1 1 0 0 1-.629.928l-7.185 2.874a.5.5 0 0 1-.372 0L.63 13.09a1 1 0 0 1-.63-.928V3.5a.5.5 0 0 1 .314-.464L7.443.184z"/> 3417 </svg> 3418 </div> 3419 3420 <div class="h-texto"> 3421 Pedidos 3422 </div> 3423 </a> 3424 3425 <a title="Minha Conta" href="/central-do-cliente" class="header-item h-conta"> 3426 <div class="h-icone"> 3427 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-person-circle" viewBox="0 0 16 16"> 3428 <path d="M11 6a3 3 0 1 1-6 0 3 3 0 0 1 6 0z"/> 3429 <path fill-rule="evenodd" d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm8-7a7 7 0 0 0-5.468 11.37C3.242 11.226 4.805 10 8 10s4.757 1.225 5.468 2.37A7 7 0 0 0 8 1z"/> 3430 </svg> 3431 </div> 3432 3433 <div class="h-texto"> 3434 Conta 3435 </div> 3436 </a> 3437 3438 <a title="Ofertas" href="/loja/busca.php?loja=1063102&somente_oferta=1&avancada=1" class="header-item h-ofertas"> 3439 <div class="h-icone"> 3440 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-tag" viewBox="0 0 16 16"> 3441 <path d="M6 4.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm-1 0a.5.5 0 1 0-1 0 .5.5 0 0 0 1 0z"/> 3442 <path d="M2 1h4.586a1 1 0 0 1 .707.293l7 7a1 1 0 0 1 0 1.414l-4.586 4.586a1 1 0 0 1-1.414 0l-7-7A1 1 0 0 1 1 6.586V2a1 1 0 0 1 1-1zm0 5.586 7 7L13.586 9l-7-7H2v4.586z"/> 3443 </svg> 3444 </div> 3445 3446 <div class="h-texto"> 3447 Ofertas 3448 </div> 3449 </a> 3450 3451 <div class="header-item h-carrinho carrinho-lateral-on" role="button" aria-label="Abrir carrinho" tabindex="0"> 3452 3453 <div class="cart-quantity" data-cart="amount">0</div> 3454 3455 <div class="h-icone"> 3456 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-cart2" viewBox="0 0 16 16"> 3457 <path d="M0 2.5A.5.5 0 0 1 .5 2H2a.5.5 0 0 1 .485.379L2.89 4H14.5a.5.5 0 0 1 .485.621l-1.5 6A.5.5 0 0 1 13 11H4a.5.5 0 0 1-.485-.379L1.61 3H.5a.5.5 0 0 1-.5-.5zM3.14 5l1.25 5h8.22l1.25-5H3.14zM5 13a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-2 1a2 2 0 1 1 4 0 2 2 0 0 1-4 0zm9-1a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-2 1a2 2 0 1 1 4 0 2 2 0 0 1-4 0z"/> 3458 </svg> 3459 </div> 3460 3461 <div class="h-texto"> 3462 Carrinho 3463 </div> 3464 3465 </div> 3466 </div> 3467</header> 3468 3469<div id="menu-lateral" class="menu-lateral"> 3470 3471 <div class="menu-lateral-cabecalho"> 3472 <div class="menu-lateral-cabecalho-item menu-lateral-logo"> 3473 3474 </div> 3475 <div class="menu-lateral-cabecalho-item menu-lateral-fechar" role="button" aria-label="Fechar menu" tabindex="0"> 3476 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -3px;" width="18" height="18" fill="currentColor" class="bi bi-x-lg" viewBox="0 0 16 16"> 3477 <path d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"/> 3478 </svg> 3479 </div> 3480 </div> 3481 3482 <div class="menu-lateral-busca"> 3483 3484 <form action="/loja/busca.php?loja=1063102" method="get" data-search="suggestion"> 3485 <input type="hidden" name="loja" value="1063102"> 3486 <input class="input-search" placeholder=" Pesquise aqui " spellcheck="false" autocomplete="off" data-input="suggestion" type="text" name="palavra_busca"> 3487 <button class="button-search" aria-label="Buscar"> 3488 <i class="icon icon-search"></i> 3489 </button> 3490 <div class="suggestion is-hidden" data-container="suggestion"></div> 3491 </form> 3492 3493 </div> 3494 3495 <div class="menu-lateral-corpo"> 3496 3497 <div class="menu-lateral-corpo-item"> 3498 3499 <div class="menu-lateral-corpo-item-nome"> 3500 <div class="menu-lateral-desc"> 3501 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -3px;
3501" width="18" height="18" fill="currentColor" class="bi bi-person-circle" viewBox="0 0 16 16"> 3502 <path d="M11 6a3 3 0 1 1-6 0 3 3 0 0 1 6 0z"/> 3503 <path fill-rule="evenodd" d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm8-7a7 7 0 0 0-5.468 11.37C3.242 11.226 4.805 10 8 10s4.757 1.225 5.468 2.37A7 7 0 0 0 8 1z"/> 3504 </svg> 3505 3506 <div class="tray-hide" data-logged-user="true"> 3507 Olá, seja bem-vindo(a) 3508 <strong> 3509 <span data-customer="name"></span> 3510 </strong> 3511 </div> 3512 3513 <div class="tray-hide" data-logged-user="false"> 3514 <strong>Entrar</strong> ou <strong>Cadastrar</strong> 3515 </div> 3516 </div> 3517 <div class="menu-lateral-icone"> 3518 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-down" viewBox="0 0 16 16"> 3519 <path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/> 3520 </svg> 3521 </div> 3522 </div> 3523 3524 <div class="menu-lateral-corpo-item-opcoes"> 3525 3526 <div class="tray-hide" data-logged-user="true"> 3527 <p> 3528 <a href="/central-do-cliente" title="Minha Conta"> 3529 <svg style="margin-bottom: -3px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-list-ul" viewBox="0 0 16 16"> 3530 <path fill-rule="evenodd" d="M5 11.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm-3 1a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm0 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm0 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"/> 3531 </svg> 3532 Minha Conta 3533 </a> 3534 </p> 3535 3536 <p> 3537 <a title="Meus Pedidos" href="/loja/central_anteriores.php?loja=1063102"> 3538 <svg style="margin-bottom: -3px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-seam" viewBox="0 0 16 16"> 3539 <path d="M8.186 1.113a.5.5 0 0 0-.372 0L1.846 3.5l2.404.961L10.404 2l-2.218-.887zm3.564 1.426L5.596 5 8 5.961 14.154 3.5l-2.404-.961zm3.25 1.7-6.5 2.6v7.922l6.5-2.6V4.24zM7.5 14.762V6.838L1 4.239v7.923l6.5 2.6zM7.443.184a1.5 1.5 0 0 1 1.114 0l7.129 2.852A.5.5 0 0 1 16 3.5v8.662a1 1 0 0 1-.629.928l-7.185 2.874a.5.5 0 0 1-.372 0L.63 13.09a1 1 0 0 1-.63-.928V3.5a.5.5 0 0 1 .314-.464L7.443.184z"/> 3540 </svg> 3541 Meus Pedidos 3542 </a> 3543 </p> 3544 3545 <div class="linha"></div> 3546 3547 <div class="text-right"> 3548 <a href="/loja/logout.php?loja=1063102" title="Sair"> 3549 Sair 3550 <svg style="margin-bottom: -4px;" xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" class="bi bi-box-arrow-right" viewBox="0 0 16 16"> 3551 <path fill-rule="evenodd" d="M10 12.5a.5.5 0 0 1-.5.5h-8a.5.5 0 0 1-.5-.5v-9a.5.5 0 0 1 .5-.5h8a.5.5 0 0 1 .5.5v2a.5.5 0 0 0 1 0v-2A1.5 1.5 0 0 0 9.5 2h-8A1.5 1.5 0 0 0 0 3.5v9A1.5 1.5 0 0 0 1.5 14h8a1.5 1.5 0 0 0 1.5-1.5v-2a.5.5 0 0 0-1 0v2z"/> 3552 <path fill-rule="evenodd" d="M15.854 8.354a.5.5 0 0 0 0-.708l-3-3a.5.5 0 0 0-.708.708L14.293 7.5H5.5a.5.5 0 0 0 0 1h8.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3z"/> 3553 </svg> 3554 </a> 3555 </div> 3556 3557 </div> 3558 3559 <div class="tray-hide" data-logged-user="false"> 3560 <p> 3561 <a title="Fazer o Login" href="/my-account/login"> 3562 <svg style="margin-bottom: -4px; margin-left: -3px;" xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" class="bi bi-box-arrow-in-right" viewBox="0 0 16 16"> 3563 <path fill-rule="evenodd" d="M6 3.5a.5.5 0 0 1 .5-.5h8a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5h-8a.5.5 0 0 1-.5-.5v-2a.5.5 0 0 0-1 0v2A1.5 1.5 0 0 0 6.5 14h8a1.5 1.5 0 0 0 1.5-1.5v-9A1.5 1.5 0 0 0 14.5 2h-8A1.5 1.5 0 0 0 5 3.5v2a.5.5 0 0 0 1 0v-2z"/> 3564 <path fill-rule="evenodd" d="M11.854 8.354a.5.5 0 0 0 0-.708l-3-3a.5.5 0 1 0-.708.708L10.293 7.5H1.5a.5.5 0 0 0 0 1h8.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3z"/> 3565 </svg> 3566 Entrar Agora 3567 </a> 3568 </p> 3569 3570 <p> 3571 <a title="Meus Pedidos" href="/loja/central_anteriores.php?loja=1063102"> 3572 <svg style="margin-bottom: -3px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-seam" viewBox="0 0 16 16"> 3573 <path d="M8.186 1.113a.5.5 0 0 0-.372 0L1.846 3.5l2.404.961L10.404 2l-2.218-.887zm3.564 1.426L5.596 5 8 5.961 14.154 3.5l-2.404-.961zm3.25 1.7-6.5 2.6v7.922l6.5-2.6V4.24zM7.5 14.762V6.838L1 4.239v7.923l6.5 2.6zM7.443.184a1.5 1.5 0 0 1 1.114 0l7.129 2.852A.5.5 0 0 1 16 3.5v8.662a1 1 0 0 1-.629.928l-7.185 2.874a.5.5 0 0 1-.372 0L.63 13.09a1 1 0 0 1-.63-.928V3.5a.5.5 0 0 1 .314-.464L7.443.184z"/> 3574 </svg> 3575 Meus Pedidos 3576 </a> 3577 </p> 3578 3579 <div class="linha"></div> 3580 <p> 3581 <a title="Criar Conta" href="/cadastro"> 3582 <svg style="margin-bottom: -3px;" xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" class="bi bi-pers
3582on-plus" viewBox="0 0 16 16"> 3583 <path d="M6 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm2-3a2 2 0 1 1-4 0 2 2 0 0 1 4 0zm4 8c0 1-1 1-1 1H1s-1 0-1-1 1-4 6-4 6 3 6 4zm-1-.004c-.001-.246-.154-.986-.832-1.664C9.516 10.68 8.289 10 6 10c-2.29 0-3.516.68-4.168 1.332-.678.678-.83 1.418-.832 1.664h10z"/> 3584 <path fill-rule="evenodd" d="M13.5 5a.5.5 0 0 1 .5.5V7h1.5a.5.5 0 0 1 0 1H14v1.5a.5.5 0 0 1-1 0V8h-1.5a.5.5 0 0 1 0-1H13V5.5a.5.5 0 0 1 .5-.5z"/> 3585 </svg> 3586 Criar Conta 3587 </a> 3588 </p> 3589 3590 </div> 3591 </div> 3592 3593 </div> 3594 3595 <div class="menu-lateral-corpo-item"> 3596 3597 <div class="menu-lateral-corpo-item-nome"> 3598 <div class="menu-lateral-desc item-contact"> 3599 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -3px;" width="18" height="18" fill="currentColor" class="bi bi-chat" viewBox="0 0 16 16"> 3600 <path d="M2.678 11.894a1 1 0 0 1 .287.801 10.97 10.97 0 0 1-.398 2c1.395-.323 2.247-.697 2.634-.893a1 1 0 0 1 .71-.074A8.06 8.06 0 0 0 8 14c3.996 0 7-2.807 7-6 0-3.192-3.004-6-7-6S1 4.808 1 8c0 1.468.617 2.83 1.678 3.894zm-.493 3.905a21.682 21.682 0 0 1-.713.129c-.2.032-.352-.176-.273-.362a9.68 9.68 0 0 0 .244-.637l.003-.01c.248-.72.45-1.548.524-2.319C.743 11.37 0 9.76 0 8c0-3.866 3.582-7 8-7s8 3.134 8 7-3.582 7-8 7a9.06 9.06 0 0 1-2.347-.306c-.52.263-1.639.742-3.468 1.105z"/> 3601 </svg> 3602 Nossos <strong>Contatos</strong> 3603 </div> 3604 <div class="menu-lateral-icone"> 3605 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-down" viewBox="0 0 16 16"> 3606 <path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/> 3607 </svg> 3608 </div> 3609 </div> 3610 3611 <div class="menu-lateral-corpo-item-opcoes"> 3612 3613 <p> 3614 <svg style="margin-bottom: -2px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-telephone" viewBox="0 0 16 16"> 3615 <path d="M3.654 1.328a.678.678 0 0 0-1.015-.063L1.605 2.3c-.483.484-.661 1.169-.45 1.77a17.568 17.568 0 0 0 4.168 6.608 17.569 17.569 0 0 0 6.608 4.168c.601.211 1.286.033 1.77-.45l1.034-1.034a.678.678 0 0 0-.063-1.015l-2.307-1.794a.678.678 0 0 0-.58-.122l-2.19.547a1.745 1.745 0 0 1-1.657-.459L5.482 8.062a1.745 1.745 0 0 1-.46-1.657l.548-2.19a.678.678 0 0 0-.122-.58L3.654 1.328zM1.884.511a1.745 1.745 0 0 1 2.612.163L6.29 2.98c.329.423.445.974.315 1.494l-.547 2.19a.678.678 0 0 0 .178.643l2.457 2.457a.678.678 0 0 0 .644.178l2.189-.547a1.745 1.745 0 0 1 1.494.315l2.306 1.794c.829.645.905 1.87.163 2.611l-1.034 1.034c-.74.74-1.846 1.065-2.877.702a18.634 18.634 0 0 1-7.01-4.42 18.634 18.634 0 0 1-4.42-7.009c-.362-1.03-.037-2.137.703-2.877L1.885.511z"/> 3616 </svg> 3617 <strong>Telefone:</strong> <a title="(21) 2604-7350" href="tel:2126047350"> (21) 2604-7350</a> 3618 </p> 3619 3620 <div class="linha"></div> 3621 <p> 3622 3623 3624 <svg style="margin-bottom: -2px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-whatsapp" viewBox="0 0 16 16"> 3625 <path d="M13.601 2.326A7.854 7.854 0 0 0 7.994 0C3.627 0 .068 3.558.064 7.926c0 1.399.366 2.76 1.057 3.965L0 16l4.204-1.102a7.933 7.933 0 0 0 3.79.965h.004c4.368 0 7.926-3.558 7.93-7.93A7.898 7.898 0 0 0 13.6 2.326zM7.994 14.521a6.573 6.573 0 0 1-3.356-.92l-.24-.144-2.494.654.666-2.433-.156-.251a6.56 6.56 0 0 1-1.007-3.505c0-3.626 2.957-6.584 6.591-6.584a6.56 6.56 0 0 1 4.66 1.931 6.557 6.557 0 0 1 1.928 4.66c-.004 3.639-2.961 6.592-6.592 6.592zm3.615-4.934c-.197-.099-1.17-.578-1.353-.646-.182-.065-.315-.099-.445.099-.133.197-.513.646-.627.775-.114.133-.232.148-.43.05-.197-.1-.836-.308-1.592-.985-.59-.525-.985-1.175-1.103-1.372-.114-.198-.011-.304.088-.403.087-.088.197-.232.296-.346.1-.114.133-.198.198-.33.065-.134.034-.248-.015-.347-.05-.099-.445-1.076-.612-1.47-.16-.389-.323-.335-.445-.34-.114-.007-.247-.007-.38-.007a.729.729 0 0 0-.529.247c-.182.198-.691.677-.691 1.654 0 .977.71 1.916.81 2.049.098.133 1.394 2.132 3.383 2.992.47.205.84.326 1.129.418.475.152.904.129 1.246.08.38-.058
36251.171-.48 1.338-.943.164-.464.164-.86.114-.943-.049-.084-.182-.133-.38-.232z"/> 3626 </svg> 3627 <strong>WhatsApp:</strong> <a title="WhatsApp" aria-label="Falar no WhatsApp" href="https://api.whatsapp.com/send?phone=552126047350" rel="noreferrer" target="_blank">(21) 2604-7350</a> 3628 </p> 3629 3630 <div class="linha"></div> 3631 <p> 3632 <svg style="margin-bottom: -3px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-envelope" viewBox="0 0 16 16"> 3633 <path d="M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4Zm2-1a1 1 0 0 0-1 1v.217l7 4.2 7-4.2V4a1 1 0 0 0-1-1H2Zm13 2.383-4.708 2.825L15 11.105V5.383Zm-.034 6.876-5.64-3.471L8 9.583l-1.326-.795-5.64 3.47A1 1 0 0 0 2 13h12a1 1 0 0 0 .966-.741ZM1 11.105l4.708-2.897L1 5.383v5.722Z"/> 3634 </svg> 3635 3636 <strong>E-mail:</strong> <a title="[email protected]" href="mailto:[email protected]">[email protected]</a> 3637 </p> 3638 3639 <div class="linha"></div> 3640 <p> 3641 <svg style="margin-bottom: -3px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clock" viewBox="0 0 16 16"> 3642 <path d="M8 3.5a.5.5 0 0 0-1 0V9a.5.5 0 0 0 .252.434l3.5 2a.5.5 0 0 0 .496-.868L8 8.71V3.5z"/> 3643 <path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm7-8A7 7 0 1 1 1 8a7 7 0 0 1 14 0z"/> 3644 </svg> 3645 <strong>Horário de Atendimento</strong> <br /> 3646 Segunda a Sexta das 8hs as 17:30hs 3647 </p> 3648 3649 <div class="linha"></div> 3650 3651 <p> 3652 <a title="Fale Conosco" href="/contato"> 3653 <svg style="margin-bottom: -3px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chat-left" viewBox="0 0 16 16"> 3654 <path d="M14 1a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H4.414A2 2 0 0 0 3 11.586l-2 2V2a1 1 0 0 1 1-1h12zM2 0a2 2 0 0 0-2 2v12.793a.5.5 0 0 0 .854.353l2.853-2.853A1 1 0 0 1 4.414 12H14a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2z"/> 3655 </svg> 3656 <strong>Fale Conosco</strong> 3657 </a> 3658 </p> 3659 3660 </div> 3661 3662 </div> 3663 3664 <div class="menu-lateral-corpo-item"> 3665 3666 <div class="menu-lateral-corpo-item-nome"> 3667 3668 <div class="menu-lateral-desc item-prom"> 3669 3670 <!-- Porcentagem --> 3671 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -3px;" width="18" height="18" fill="currentColor" class="bi bi-percent" viewBox="0 0 16 16"> 3672 <path d="M13.442 2.558a.625.625 0 0 1 0 .884l-10 10a.625.625 0 1 1-.884-.884l10-10a.625.625 0 0 1 .884 0zM4.5 6a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm0 1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zm7 6a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm0 1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z"/> 3673 </svg> 3674 3675 As melhores <strong>Promoções</strong> 3676 </div> 3677 3678 <div class="menu-lateral-icone"> 3679 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-down" viewBox="0 0 16 16"> 3680 <path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/> 3681 </svg> 3682 </div> 3683 3684 </div> 3685 3686 <div class="menu-lateral-corpo-item-opcoes"> 3687 3688 <p> 3689 <a title="Promoções" href="/loja/busca.php?loja=1063102&somente_oferta=1&avancada=1"> 3690 <svg style="margin-bottom: -3px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-percent" viewBox="0 0 16 16"> 3691 <path d="M13.442 2.558a.625.625 0 0 1 0 .884l-10 10a.625.625 0 1 1-.884-.884l10-10a.625.625 0 0 1 .884 0zM4.5 6a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm0 1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zm7 6a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm0 1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z"/> 3692 </svg> 3693 Promoções </a> 3694 </p> 3695 3696 <p> 3697 <a title="Lançamento" href="/loja/busca.php?loja=1063102&somente_destaque=1&avancada=1"> 3698 <svg style="margin-bottom: -3px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 3699 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 3700 </svg> 3701 Lançamentos </a> 3702 </p> 3703 3704 <p> 3705 <a title="Novidades" href="/loja/busca.php?loja=1063102&somente_lancamento=1&avancada=1"> 3706 <svg style="margin-bottom: -3px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-fire" viewBox="0 0 16 16"> 3707 <path d="M8 16c3.314 0 6-2 6-5.5 0-1.5-.5-4-2.5-6 .25 1.5-1.25 2-1.25 2C11 4 9 .5 6 0c.357 2 .5 4-2 6-1.25 1-2 2.729-2 4.5C2 14 4.686 16 8 16Zm0-1c-1.657 0-3-1-3-2.75 0-.75.25-2 1.25-3C6.125 10 7 10.5 7 10.5c-.375-1.25.5-3.25 2-3.5-.179 1-.25 2 1 3 .625.5 1 1.364 1 2.25C11 14 9.657 15 8 15Z"/> 3708 </svg> 3709 Novidades </a> 3710 </p> 3711 3712 </div> 3713 </div> 3714 3715 3716 3717 <div class="menu-lateral-corpo-itens mt-2"> 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733<ul class="list"> 3734 3735 3736 3737 3738 3739 3740 3741 <li class="first-level sub"> 3742 3743 3744 <div class="first-level-name-icone"> 3745 3746 <div class="first-level-name"> 3747 3748 <a href="https://www.farmacam.com.br/tipo-de-produto" title="Tipo de Produto"> 3749 3750 <div class="name"> 3751 3752 <img src="https://images.tcdn.com.br/files/1063102/themes/2
375216/img/settings/TipoDeProduto.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Ícone menu"> 3753 3754 Tipo de Produto 3755 3756 </div> 3757 3758 </a> 3759 3760 </div> 3761 3762 <div class="first-level-icone"> 3763 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-down" viewBox="0 0 16 16"> 3764 <path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/> 3765 </svg> 3766 </div> 3767 3768 </div> 3769 3770 3771 3772 3773 <div class="sub-list second-level"> 3774 3775 <ul> 3776 3777 <a href="https://www.farmacam.com.br/tipo-de-produto" title="Tipo de Produto">Tipo de Produto</a> 3778 3779 3780 <li > 3781 3782 <a href="https://www.farmacam.com.br/industrializados" title="Industrializados">Industrializados</a> 3783 3784 3785 3786 </li> 3787 3788 3789 <li > 3790 3791 <a href="https://www.farmacam.com.br/manipulados" title="Manipulados">Manipulados</a> 3792 3793 3794 3795 </li> 3796 3797 3798 3799 </ul> 3800 3801 </div> 3802 3803 3804 3805 3806 </li> 3807 <li class="first-level sub"> 3808 3809 3810 <div class="first-level-name-icone"> 3811 3812 <div class="first-level-name"> 3813 3814 <a href="https://www.farmacam.com.br/uso" title="Uso"> 3815 3816 <div class="name"> 3817 3818 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/uso.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Ícone menu"> 3819 3820 Uso 3821 3822 </div> 3823 3824 </a> 3825 3826 </div> 3827 3828 <div class="first-level-icone"> 3829 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-down" viewBox="0 0 16 16"> 3830 <path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/> 3831 </svg> 3832 </div> 3833 3834 </div> 3835 3836 3837 3838 3839 <div class="sub-list second-level"> 3840 3841 <ul> 3842 3843 <a href="https://www.farmacam.com.br/uso" title="Uso">Uso</a> 3844 3845 3846 <li > 3847 3848 <a href="https://www.farmacam.com.br/adulto" title="Adulto">Adulto</a> 3849 3850 3851 3852 </li> 3853 3854 3855 <li > 3856 3857 <a href="https://www.farmacam.com.br/pediatrico" title="Pediátrico">Pediátrico</a> 3858 3859 3860 3861 </li> 3862 3863 3864 <li class="sub" > 3865 3866 <a href="https://www.farmacam.com.br/veterinario" title="Veterinário">Veterinário</a> 3867 3868 <ul class="sub-list third-level"> 3869 <li> 3870 <a href="https://www.farmacam.com.br/caes" title="Cães">Cães</a> 3871 3872 3873 </li> 3874 <li> 3875 <a href="https://www.farmacam.com.br/felinos" title="Felinos">Felinos</a> 3876 3877 3878 </li> 3879 <li> 3880 <a href="https://www.farmacam.com.br/equinos" title="Equinos">Equinos</a> 3881 3882 3883 </li> 3884 <li> 3885 <a href="https://www.farmacam.com.br/repteis" title="Répteis">Répteis</a> 3886 3887 3888 </li> 3889 <li> 3890 <a href="https://www.farmacam.com.br/aves" title="Aves Silvestres">Aves Silvestres</a> 3891 3892 3893 </li> 3894 </ul> 3895 3896 3897 </li> 3898 3899 3900 3901 </ul> 3902 3903 </div> 3904 3905 3906 3907 3908 </li> 3909 <li class="first-level sub"> 3910 3911 3912 <div class="first-level-name-icone"> 3913 3914 <div class="first-level-name"> 3915 3916 <a href="https://www.farmacam.com.br/promocoes" title="Promoções"> 3917 3918 <div class="name"> 3919 3920 <img src="https://images.tcdn.com.br/files/1063102/themes/2
392016/img/settings/Promocoes.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Ícone menu"> 3921 3922 Promoções 3923 3924 </div> 3925 3926 </a> 3927 3928 </div> 3929 3930 <div class="first-level-icone"> 3931 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-down" viewBox="0 0 16 16"> 3932 <path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/> 3933 </svg> 3934 </div> 3935 3936 </div> 3937 3938 3939 3940 3941 <div class="sub-list second-level"> 3942 3943 <ul> 3944 3945 <a href="https://www.farmacam.com.br/promocoes" title="Promoções">Promoções</a> 3946 3947 3948 <li > 3949 3950 <a href="https://www.farmacam.com.br/promocoes-do-mes" title="Promoção do mês de Agosto">Promoção do mês de Agosto</a> 3951 3952 3953 3954 </li> 3955 3956 3957 3958 </ul> 3959 3960 </div> 3961 3962 3963 3964 3965 </li> 3966 <li class="first-level sub"> 3967 3968 3969 <div class="first-level-name-icone"> 3970 3971 <div class="first-level-name"> 3972 3973 <a href="https://www.farmacam.com.br/linha-de-produtos" title="Linha de Produtos"> 3974 3975 <div class="name"> 3976 3977 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/LinhaDeProdutos.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Ícone menu"> 3978 3979 Linha de Produtos 3980 3981 </div> 3982 3983 </a> 3984 3985 </div> 3986 3987 <div class="first-level-icone"> 3988 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-down" viewBox="0 0 16 16"> 3989 <path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/> 3990 </svg> 3991 </div> 3992 3993 </div> 3994 3995 3996 3997 3998 <div class="sub-list second-level"> 3999 4000 <ul> 4001 4002 <a href="https://www.farmacam.com.br/linha-de-produtos" title="Linha de Produtos">Linha de Produtos</a> 4003 4004 4005 <li > 4006 4007 <a href="https://www.farmacam.com.br/linha-farma-signature" title="Linha Farma Signature">Linha Farma Signature</a> 4008 4009 4010 4011 </li> 4012 4013 4014 <li > 4015 4016 <a href="https://www.farmacam.com.br/linha-farma-gym" title="Linha Farma-Gym">Linha Farma-Gym</a> 4017 4018 4019 4020 </li> 4021 4022 4023 <li > 4024 4025 <a href="https://www.farmacam.com.br/linha-f-beauty" title="Linha F-Beauty">Linha F-Beauty</a> 4026 4027 4028 4029 </li> 4030 4031 4032 <li > 4033 4034 <a href="https://www.farmacam.com.br/linha-fitocam" title="Linha FitoCam">Linha FitoCam</a> 4035 4036 4037 4038 </li> 4039 4040 4041 <li > 4042 4043 <a href="https://www.farmacam.com.br/linha-farma-vet" title="Linha Farma Vet">Linha Farma Vet</a> 4044 4045 4046 4047 </li> 4048 4049 4050 <li class="sub" > 4051 4052 <a href="https://www.farmacam.com.br/linha-homeopaticam" title="Linha HomeopatiCAM">Linha HomeopatiCAM</a> 4053 4054 <ul class="sub-list third-level"> 4055 <li> 4056 <a href="https://www.farmacam.com.br/floral-therapi" title="Floral Thérapi">Floral Thérapi</a> 4057 4058 4059 </li> 4060 </ul> 4061 4062 4063 </li> 4064 4065 4066 <li class="sub" > 4067 4068 <a href="https://www.farmacam.com.br/linha-f-cam" title="Linha F-CAM">Linha F-CAM</a> 4069 4070 <ul class="sub-list third-level"> 4071 <li> 4072 <a href="https://www.farmacam.com.br/vitaminas" title="Vitaminas">Vitaminas</a> 4073 4074 4075 </li> 4076 <li> 4077 <a href="https://www.farmacam.com.br/minerais" title="Minerais">Minerais</a> 4078 4079 4080 </li> 4081 <li> 4082 <a href="https://www.farmacam.com.br/lactobacilos" title="Lactobacilos">Lactobacilos</a> 4083 4084 4085 </li> 4086 <li> 4087 <a href="https://www.farmacam.com.br/fibras" title="Fibras">Fibras</a> 4088 4089 4090 </li> 4091 <li> 4092 <a href="https://www.farmacam.com.br/esmaltes" title="Esmaltes">Esmaltes</a> 4093 4094 4095 </li> 4096 <li> 4097 <a href="https://www.farmacam.com.br/capsulas-oleosas" title="Cápsulas Oleosas">Cápsulas Oleosas</a> 4098 4099 4100 </li> 4101 <li> 4102 <a href="https://www.farmacam.com.br/aminoacidos" title="Aminoácidos">Aminoácidos</a> 4103 4104 4105 </li> 4106 <li> 4107 <a href="https://www.farmacam.com.br/hormonio" title="Hormônios">Hormônios</a> 4108 4109 4110 </li> 4111 <li> 4112 <a href="https://www.farmacam.com.br/enzimas" title="Enzimas">Enzimas</a> 4113 4114 4115 </li> 4116 </ul> 4117 4118 4119 </li> 4120 4121 4122 4123 </ul> 4124 4125 </div> 4126 4127 4128 4129 4130 </li> 4131 <li class="first-level sub"> 4132 4133 4134 <div class="first-level-name-icone"> 4135 4136 <div class="first-level-name"> 4137 4138 <a href="https://www.farmacam.com.br/uso-e-objetivo" title="Objetivo"> 4139 4140 <div class="name"> 4141 4142 <img src="https://images.tcdn.com.br/files/1063102/themes/2
414216/img/settings/objetivo.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Ícone menu"> 4143 4144 Objetivo 4145 4146 </div> 4147 4148 </a> 4149 4150 </div> 4151 4152 <div class="first-level-icone"> 4153 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-down" viewBox="0 0 16 16"> 4154 <path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/> 4155 </svg> 4156 </div> 4157 4158 </div> 4159 4160 4161 4162 4163 <div class="sub-list second-level"> 4164 4165 <ul> 4166 4167 <a href="https://www.farmacam.com.br/uso-e-objetivo" title="Objetivo">Objetivo</a> 4168 4169 4170 <li > 4171 4172 <a href="https://www.farmacam.com.br/anabolizantes" title="Anabolizantes">Anabolizantes</a> 4173 4174 4175 4176 </li> 4177 4178 4179 <li > 4180 4181 <a href="https://www.farmacam.com.br/analgesicos" title="Analgésicos">Analgésicos</a> 4182 4183 4184 4185 </li> 4186 4187 4188 <li > 4189 4190 <a href="https://www.farmacam.com.br/anestesicos" title="Anestésicos">Anestésicos</a> 4191 4192 4193 4194 </li> 4195 4196 4197 <li > 4198 4199 <a href="https://www.farmacam.com.br/ansioliticos" title="Ansiolíticos">Ansiolíticos</a> 4200 4201 4202 4203 </li> 4204 4205 4206 <li > 4207 4208 <a href="https://www.farmacam.com.br/anti-aging" title="Anti-aging">Anti-aging</a> 4209 4210 4211 4212 </li> 4213 4214 4215 <li > 4216 4217 <a href="https://www.farmacam.com.br/antiagregantes" title="Antiagregantes">Antiagregantes</a> 4218 4219 4220 4221 </li> 4222 4223 4224 <li > 4225 4226 <a href="https://www.farmacam.com.br/antialergicos" title="Antialérgicos">Antialérgicos</a> 4227 4228 4229 4230 </li> 4231 4232 4233 <li > 4234 4235 <a href="https://www.farmacam.com.br/antidepressivos" title="Antidepressivos">Antidepressivos</a> 4236 4237 4238 4239 </li> 4240 4241 4242 <li > 4243 4244 <a href="https://www.farmacam.com.br/anti-inflamatorios" title="Anti-inflamatórios">Anti-inflamatórios</a> 4245 4246 4247 4248 </li> 4249 4250 4251 <li > 4252 4253 <a href="https://www.farmacam.com.br/antioxidantes" title="Antioxidantes">Antioxidantes</a> 4254 4255 4256 4257 </li> 4258 4259 4260 <li > 4261 4262 <a href="https://www.farmacam.com.br/antissepticos" title="Antissépticos">Antissépticos</a> 4263 4264 4265 4266 </li> 4267 4268 4269 <li > 4270 4271 <a href="https://www.farmacam.com.br/antitermicos" title="Antitérmicos">Antitérmicos</a> 4272 4273 4274 4275 </li> 4276 4277 4278 <li > 4279 4280 <a href="https://www.farmacam.com.br/antivertiginosos" title="Antivertiginosos">Antivertiginosos</a> 4281 4282 4283 4284 </li> 4285 4286 4287 <li > 4288 4289 <a href="https://www.farmacam.com.br/aumento-do-apetite" title="Aumento do Apetite">Aumento do Apetite</a> 4290 4291 4292 4293 </li> 4294 4295 4296 <li > 4297 4298 <a href="https://www.farmacam.com.br/bactericidas" title="Bactericidas">Bactericidas</a> 4299 4300 4301 4302 </li> 4303 4304 4305 <li > 4306 4307 <a href="https://www.farmacam.com.br/calmante" title="Calmantes">Calmantes</a> 4308 4309 4310 4311 </li> 4312 4313 4314 <li > 4315 4316 <a href="https://www.farmacam.com.br/cicatrizantes" title="Cicatrizantes">Cicatrizantes</a> 4317 4318 4319 4320 </li> 4321 4322 4323 <li > 4324 4325 <a href="https://www.farmacam.com.br/dermatologicos" title="Dermatológicos">Dermatológicos</a> 4326 4327 4328 4329 </li> 4330 4331 4332 <li > 4333 4334 <a href="https://www.farmacam.com.br/desempenho-fisico" title="Desempenho Físico">Desempenho Físico</a> 4335 4336 4337 4338 </li> 4339 4340 4341 <li > 4342 4343 <a href="https://www.farmacam.com.br/desempenho-imunologico" title="Desempenho Imunológico">Desempenho Imunológico</a> 4344 4345 4346 4347 </li> 4348 4349 4350 <li > 4351 4352 <a href="https://www.farmacam.com.br/desempenho-mental" title="Desempenho Mental">Desempenho Mental</a> 4353 4354 4355 4356 </li> 4357 4358 4359 <li > 4360 4361 <a href="https://www.farmacam.com.br/desempenho-sexual" title="Desempenho Sexual">Desempenho Sexual</a> 4362 4363 4364 4365 </li> 4366 4367 4368 <li > 4369 4370 <a href="https://www.farmacam.com.br/despigmentantes" title="Despigmentantes">Despigmentantes</a> 4371 4372 4373 4374 </li> 4375 4376 4377 <li > 4378 4379 <a href="https://www.farmacam.com.br/diureticos" title="Diuréticos">Diuréticos</a> 4380 4381 4382 4383 </li> 4384 4385 4386 <li > 4387 4388 <a href="https://www.farmacam.com.br/emagrecimento" title="Emagrecimento">Emagrecimento</a> 4389 4390 4391 4392 </li> 4393 4394 4395 <li > 4396 4397 <a href="https://www.farmacam.com.br/estimulantes" title="Estimulantes">Estimulantes</a> 4398 4399 4400 4401 </li> 4402 4403 4404 <li > 4405 4406 <a href="https://www.farmacam.com.br/expectorantes" title="Expectorantes">Expectorantes</a> 4407 4408 4409 4410 </li> 4411 4412 4413 <li > 4414 4415 <a href="https://www.farmacam.com.br/laxativos" title="Laxativos">Laxativos</a> 4416 4417 4418 4419 </li> 4420 4421 4422 <li > 4423 4424 <a href="https://www.farmacam.com.br/protecao-solar" title="Proteção Solar">Proteção Solar</a> 4425 4426 4427 4428 </li> 4429 4430 4431 <li > 4432 4433 <a href="https://www.farmacam.com.br/qualidade-de-vida" title="Qualidade de Vida">Qualidade de Vida</a> 4434 4435 4436 4437 </li> 4438 4439 4440 <li > 4441 4442 <a href="https://www.farmacam.com.br/repelentes" title="Repelentes">Repelentes</a> 4443 4444 4445 4446 </li> 4447 4448 4449 <li > 4450 4451 <a href="https://www.farmacam.com.br/saude-da-mulher" title="Saúde da Mulher">
4451Saúde da Mulher</a> 4452 4453 4454 4455 </li> 4456 4457 4458 <li > 4459 4460 <a href="https://www.farmacam.com.br/suplementacao-nutricional" title="Suplementação Nutricional">Suplementação Nutricional</a> 4461 4462 4463 4464 </li> 4465 4466 4467 <li > 4468 4469 <a href="https://www.farmacam.com.br/tratamento-cardiaco" title="Tratamento Cardiovascular">Tratamento Cardiovascular</a> 4470 4471 4472 4473 </li> 4474 4475 4476 <li > 4477 4478 <a href="https://www.farmacam.com.br/tratamento-de-acne" title="Tratamento de Acne">Tratamento de Acne</a> 4479 4480 4481 4482 </li> 4483 4484 4485 <li > 4486 4487 <a href="https://www.farmacam.com.br/tratamento-de-unha-e-cabelo" title="Tratamento de Unha e Cabelo">Tratamento de Unha e Cabelo</a> 4488 4489 4490 4491 </li> 4492 4493 4494 <li > 4495 4496 <a href="https://www.farmacam.com.br/tratamento-digestorio" title="Tratamento Digestório">Tratamento Digestório</a> 4497 4498 4499 4500 </li> 4501 4502 4503 <li > 4504 4505 <a href="https://www.farmacam.com.br/tratamento-endocrinologico" title="Tratamento Endocrinológico">Tratamento Endocrinológico</a> 4506 4507 4508 4509 </li> 4510 4511 4512 <li > 4513 4514 <a href="https://www.farmacam.com.br/tratamento-ginecologico" title="Tratamento Ginecológico">Tratamento Ginecológico</a> 4515 4516 4517 4518 </li> 4519 4520 4521 <li > 4522 4523 <a href="https://www.farmacam.com.br/tratamento-neurologico-e-psiquiatrico" title="Tratamento Neurológico e Psiquiátrico">Tratamento Neurológico e Psiquiátrico</a> 4524 4525 4526 4527 </li> 4528 4529 4530 <li > 4531 4532 <a href="https://www.farmacam.com.br/tratamento-oftalmico" title="Tratamento Oftálmico">Tratamento Oftálmico</a> 4533 4534 4535 4536 </li> 4537 4538 4539 <li > 4540 4541 <a href="https://www.farmacam.com.br/tratamento-ortopedico-e-reumatologico" title="Tratamento Ortopédico e Reumatológico">Tratamento Ortopédico e Reumatológico</a> 4542 4543 4544 4545 </li> 4546 4547 4548 <li > 4549 4550 <a href="https://www.farmacam.com.br/tratamento-otorrinolaringologico" title="Tratamento Otorrinolaringológico">Tratamento Otorrinolaringológico</a> 4551 4552 4553 4554 </li> 4555 4556 4557 <li > 4558 4559 <a href="https://www.farmacam.com.br/tratamento-proctologico" title="Tratamento Proctológico">Tratamento Proctológico</a> 4560 4561 4562 4563 </li> 4564 4565 4566 <li > 4567 4568 <a href="https://www.farmacam.com.br/tratamento-respiratorio" title="Tratamento Respiratório">Tratamento Respiratório</a> 4569 4570 4571 4572 </li> 4573 4574 4575 <li > 4576 4577 <a href="https://www.farmacam.com.br/tratamento-urinario" title="Tratamento Urinário">Tratamento Urinário</a> 4578 4579 4580 4581 </li> 4582 4583 4584 <li > 4585 4586 <a href="https://www.farmacam.com.br/tratamento-urologico" title="Tratamento Urológico">Tratamento Urológico</a> 4587 4588 4589 4590 </li> 4591 4592 4593 <li > 4594 4595 <a href="https://www.farmacam.com.br/uso-em-procedimento" title="Uso em Procedimento">Uso em Procedimento</a> 4596 4597 4598 4599 </li> 4600 4601 4602 4603 </ul> 4604 4605 </div> 4606 4607 4608 4609 4610 </li> 4611 4612 <li class="first-level sub more-categ-lateral"> 4613 4614 <div class="first-level-name-icone"> 4615 4616 <div class="first-level-name"> 4617
4618 <span role="button" title="Departamentos" aria-label="Ver mais categorias" tabindex="0"> 4619 <div class="name"> 4620 <svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" style="margin-right: 8px;" fill="currentColor" class="bi bi-list" viewBox="0 0 16 16"> 4621 <path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/> 4622 </svg> 4623 Ver Mais 4624 </div> 4625 </span> 4626 4627 </div> 4628 4629 <div class="first-level-icone"> 4630 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-down" viewBox="0 0 16 16"> 4631 <path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/> 4632 </svg> 4633 </div> 4634 4635 </div> 4636 4637 <div class="sub-list second-level"> 4638 4639 <ul> 4640 4641 <li> 4642 <a href="https://www.farmacam.com.br/tipo-venda" title="Tipo de Venda">Tipo de Venda</a> 4643 </li> 4644 4645 <ul class="sub-list third-level"> 4646 <li class="third-more-categories"> 4647 <a href="https://www.farmacam.com.br/tipo-venda/venda-livre" title="Venda Livre">Venda Livre</a> 4648 4649 </li> 4650 <li class="third-more-categories"> 4651 <a href="https://www.farmacam.com.br/tipo-venda/sob-prescricao" title="Sob Prescrição">Sob Prescrição</a> 4652 4653 </li> 4654 <li class="third-more-categories"> 4655 <a href="https://www.farmacam.com.br/tipo-venda/sob-prescricao-com-retencao-de-notificacao-de-receita" title="Sob Prescrição com Retenção de Notificação de Receita">Sob Prescrição com Retenção de Notificação de Receita</a> 4656 4657 </li> 4658 </ul> 4659 4660 </ul> 4661 4662 </div> 4663 4664 </li> 4665 4666 4667 4668 4669 4670</ul> 4671 4672 </div> 4673 4674 4675 4676 4677 4678 <div class="menu-horizontal-midias-sociais mt-2"> 4679 4680 <a href="https://www.facebook.com/Farmacam" title="Facebook" aria-label="Facebook" target="_blank" rel="noopener noreferrer"> 4681 <i class="icon icon-facebook v-align-middle"></i> 4682 </a> 4683 4684 <a href="https://www.instagram.com/farmacam/" title="Instagram" aria-label="Instagram" target="_blank" rel="noopener noreferrer"> 4685 <i class="icon icon-instagram v-align-middle"></i> 4686 </a> 4687 4688 <a href="https://tiktok.com/@farmacam" title="TikTok" aria-label="TikTok" target="_blank" rel="noopener noreferrer"> 4689 <i class="icon icon-tiktok v-align-middle"></i> 4690 </a> 4691 4692 <a href="https://twitter.com/farmacam" title="X" aria-label="X" target="_blank" rel="noopener noreferrer" style="position: relative; top: 7px;"> 4693 <svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 19 19"><path d="M8.486.069C5.149.418 2.166 2.615.81 5.726a9.56 9.56 0 0 0-.399 6.447c.767 2.653 2.748 4.895 5.313 6.016a9.56 9.56 0 0 0 6.448.399c3.185-.919 5.693-3.534 6.517-6.783C19.975 6.714 16.821 1.507 11.716.292a9.3 9.3 0 0 0-3.23-.221m.126 5.883c.81 1.076 1.494 1.964 1.52 1.964s.868-.886 1.862-1.964l1.818-1.964h1.033l-.221.235c-.126.132-.95 1.026-1.831 1.982a161 161 0 0 1-1.914 2.058l-.304.323 2.375 3.161c1.304 1.741 2.375 3.185 2.375 3.211 0 .031-.779.05-1.723.05l-1.727-.007-1.608-2.154c-1.109-1.489-1.627-2.128-1.679-2.09-.038.031-.938 1.001-2.002 2.154L4.655 15.01h-.488c-.272 0-.494-.013-.494-.031s1.007-1.121 2.235-2.444a308 308 0 0 0 2.249-2.451c.007-.026-1-1.4-2.235-3.053A262 262 0 0 1 3.673 4.01c0-.012.779-.019 1.736-.019h1.735Zm0 0" style="stroke:none;fill-rule:nonzero;
4693fill:var(--menu-lt-icon-social);fill-opacity:1"/><path d="M5.238 4.838c.026.045 1.621 2.185 3.534 4.743l3.484 4.662.779.007c.482 0 .773-.026.76-.064-.006-.031-1.596-2.172-3.521-4.75L6.764 4.75h-.785c-.652 0-.786.013-.741.088m0 0" style="stroke:none;fill-rule:nonzero;fill:var(--menu-lt-icon-social);fill-opacity:1"/></svg> 4694 </a> 4695 4696 <a href="https://www.youtube.com/@farmacam2239" title="Youtube" aria-label="Youtube" target="_blank" rel="noopener noreferrer"> 4697 <i class="icon icon-youtube v-align-middle"></i> 4698 </a> 4699 4700 <a href="https://br.pinterest.com/farmacam_oficial/_shop/" title="Pinterest" aria-label="Pinterest" target="_blank" rel="noopener noreferrer"> 4701 <i class="icon icon-pinterest v-align-middle"></i> 4702 </a> 4703 4704 <a href="https://www.instagram.com/farmacam/" title="Linkedin" aria-label="Linkedin" target="_blank" rel="noopener noreferrer"> 4705 <i class="icon icon-linkedin v-align-middle"></i> 4706 </a> 4707 4708 </div> 4709 4710 </div> 4711 4712</div> 4713 4714 <main class="site-main"> 4715 4716 4717 4718 4719 4720 4721<style> 4722 @media (min-width: 768px) { 4723 .banner-home { 4724 position: relative !important; 4725 width: 100% !important; 4726 height: 25vw !important; 4727 max-height: none !important; 4728 overflow: hidden !important; 4729 } 4730 4731 .banner-home .swiper-container, 4732 .banner-home .swiper-wrapper, 4733 .banner-home .swiper-slide, 4734 .banner-home .item, 4735 .banner-home .item a { 4736 width: 100% !important; 4737 height: 100% !important; 4738 max-height: none !important; 4739 } 4740 4741 .banner-home .item a { 4742 display: block !important; 4743 } 4744 4745 .banner-home .item img, 4746 .banner-home img { 4747 display: block !important; 4748 width: 100% !important; 4749 height: 100% !important; 4750 max-width: none !important; 4751 max-height: none !important; 4752 object-fit: fill !important; 4753 object-position: center center !important; 4754 opacity: 1 !important; 4755 visibility: visible !important; 4756 } 4757 4758 .banner-home .swiper-container .dots { 4759 position: absolute !important; 4760 left: 0 !important; 4761 right: 0 !important; 4762 bottom: 14px !important; 4763 margin-top: 0 !important; 4764 z-index: 5 !important; 4765 } 4766 } 4767</style> 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 <div class="banner-home swiper" data-settings="{"stopOnHover":true,"timer":10000,"isMobile":false,"navigation":true}"> 4847 4848 <div class="swiper-container"> 4849 <div class="swiper-wrapper"> 4850 4851 4852 <div class="swiper-slide item"> 4853 <a title="" href="foco-concentracao-e-memoria"> 4854 4855 <img 4856 src="https://images.tcdn.com.br/files/1063102/themes/2
485616/img/settings/UM.png?40911a9f4d7a99b6eef6b4ae366be082" 4857 alt="" 4858 loading="eager" 4859 fetchpriority="high" 4860 decoding="async" 4861 > 4862 4863 </a> 4864 </div> 4865 4866 <div class="swiper-slide item"> 4867 <a title="" href="booster-capilar-drops"> 4868 4869 <img 4870 src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/DOIS.png?40911a9f4d7a99b6eef6b4ae366be082" 4871 alt="" 4872 loading="lazy" 4873 decoding="async" 4874 > 4875 4876 </a> 4877 </div> 4878 4879 <div class="swiper-slide item"> 4880 <a title="" href="promocoes"> 4881 4882 <img 4883 src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/TRES.png?40911a9f4d7a99b6eef6b4ae366be082" 4884 alt="" 4885 loading="lazy" 4886 decoding="async" 4887 > 4888 4889 </a> 4890 </div> 4891 4892 <div class="swiper-slide item"> 4893 <a title="" href="https://api.whatsapp.com/send/?phone=%2B552126047350&text=Ol%C3%A1%21+Estou+vindo+do+site+e+gostaria+de+fazer+or%C3%A7amento+de+uma+f%C3%B3rmula+personalizada%21&type=phone_number&app_absent=0"> 4894 4895 <img 4896 src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/QUATRO.png?40911a9f4d7a99b6eef6b4ae366be082" 4897 alt="" 4898 loading="lazy" 4899 decoding="async" 4900 > 4901 4902 </a> 4903 </div> 4904 4905 <div class="swiper-slide item"> 4906 <a title="" href="https://play.google.com/store/apps/details?id=com.mcommerce.tray.farmacam"> 4907 4908 <img 4909 src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/CINCO.png?40911a9f4d7a99b6eef6b4ae366be082" 4910 alt="" 4911 loading="lazy" 4912 decoding="async" 4913 > 4914 4915 </a> 4916 </div> 4917 4918 <div class="swiper-slide item"> 4919 <a title="" href="https://apps.apple.com/gb/app/farmacam/id6474616003?uo=2"> 4920 4921 <img 4922 src="https://images.tcdn.com.br/files/1063102/themes/2
492216/img/settings/SEIS.png?40911a9f4d7a99b6eef6b4ae366be082" 4923 alt="" 4924 loading="lazy" 4925 decoding="async" 4926 > 4927 4928 </a> 4929 </div> 4930 4931 </div> 4932 4933 <div class="swiper-button-prev" role="button" aria-label="Slide anterior" tabindex="0"></div> 4934 <div class="swiper-button-next" role="button" aria-label="Próximo slide" tabindex="0"></div> 4935 4936 <div class="dots"> 4937 <div 4938 class="dot dot-active" 4939 role="button" 4940 aria-label="Slide 1" 4941 tabindex="0" 4942 ></div> 4943 <div 4944 class="dot " 4945 role="button" 4946 aria-label="Slide 2" 4947 tabindex="0" 4948 ></div> 4949 <div 4950 class="dot " 4951 role="button" 4952 aria-label="Slide 3" 4953 tabindex="0" 4954 ></div> 4955 <div 4956 class="dot " 4957 role="button" 4958 aria-label="Slide 4" 4959 tabindex="0" 4960 ></div> 4961 <div 4962 class="dot " 4963 role="button" 4964 aria-label="Slide 5" 4965 tabindex="0" 4966 ></div> 4967 <div 4968 class="dot " 4969 role="button" 4970 aria-label="Slide 6" 4971 tabindex="0" 4972 ></div> 4973 </div> 4974 </div> 4975 4976 </div> 4977 4978 4979 4980 4981 4982 <div class="barra-oferta barra-oferta-full-banners swiper"> 4983 4984 <div class="container center swiper-container"> 4985 4986 <div class="swiper-wrapper"> 4987 4988 4989 <div class="swiper-slide"> 4990 A melhor Farmácia de Manipulação do Brasil! Compre on-line e parcele em até 12x sem juros! 4991 </div> 4992 4993 <div class="swiper-slide"> 4994 Produtos de Altíssima Qualidade. Receba suas fórmulas em sua residência. Entrega em todo o Brasil. 4995 </div> 4996 4997 <div class="swiper-slide"> 4998 <a title="Se precisar de orçamento de fórmula personalizada, é só chamar a Farmacam no WhatsApp!" href="https://wa.me/552126047350?text=Quero%20uma%20f%C3%B3rmula%20personalizada.%20Pode%20cotar%20para%20mim%3F"> 4999 Se precisar de orçamento de fórmula personalizada, é só chamar a Farmacam no WhatsApp! 5000 </a> 5001 </div> 5002 5003 </div> 5004 5005 <div class="dots"> 5006 <div class="dot dot-active" 5007 role="button" aria-label="Slide 1" tabindex="0"></div> 5008 <div class="dot " 5009 role="button" aria-label="Slide 2" tabindex="0"></div> 5010 <div class="dot " 5011 role="button" aria-label="Slide 3" tabindex="0"></div> 5012 </div> 5013 5014 </div> 5015 5016 </div> 5017 5018<div class="banner-tarja" style="padding-top: 2rem; padding-bottom: 2rem;"> 5019 5020 5021 5022 5023 5024 <div class="container box-banners mt-2 banner-tarja-swiper swiper"> 5025 5026 <div class="banner-tarja-personalizado swiper-container"> 5027 5028 <div class="swiper-wrapper"> 5029 5030 5031 5032 5033 <div class="swiper-slide"> 5034 5035 <div class="banner-personalizado-item"> 5036 5037 <div class="banner-personalizado-item-imagem"> 5038 <img src="https://images.tcdn.com.br/files/1063102/themes/2
503816/img/settings/100_farmacam_desconto.svg?40911a9f4d7a99b6eef6b4ae366be082" alt="DESCONTOS ESPECIAIS"> 5039 </div> 5040 5041 <div class="banner-personalizado-item-conteudo"> 5042 <div class="banner-personalizado-item-titulo"> 5043 DESCONTOS ESPECIAIS 5044 </div> 5045 <div class="banner-personalizado-item-subtitulo"> 5046 Cupons para produtos manipulados 5047 </div> 5048 </div> 5049 </div> 5050 5051 </div> 5052 5053 5054 5055 <div class="swiper-slide"> 5056 5057 <div class="banner-personalizado-item"> 5058 5059 <div class="banner-personalizado-item-imagem"> 5060 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/100_farmacam_seguro.svg?40911a9f4d7a99b6eef6b4ae366be082" alt="COMPRA SEGURA"> 5061 </div> 5062 5063 <div class="banner-personalizado-item-conteudo"> 5064 <div class="banner-personalizado-item-titulo"> 5065 COMPRA SEGURA 5066 </div> 5067 <div class="banner-personalizado-item-subtitulo"> 5068 Servidores em ambiente protegido 5069 </div> 5070 </div> 5071 </div> 5072 5073 </div> 5074 5075 5076 5077 <div class="swiper-slide"> 5078 5079 <div class="banner-personalizado-item"> 5080 5081 <div class="banner-personalizado-item-imagem"> 5082 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/100_farmcam_frete.svg?40911a9f4d7a99b6eef6b4ae366be082" alt="ENTREGA EXPRESSA"> 5083 </div> 5084 5085 <div class="banner-personalizado-item-conteudo"> 5086 <div class="banner-personalizado-item-titulo"> 5087 ENTREGA EXPRESSA 5088 </div> 5089 <div class="banner-personalizado-item-subtitulo"> 5090 Envios com frete grátis* para todo o Brasil 5091 </div> 5092 </div> 5093 </div> 5094 5095 </div> 5096 5097 5098 5099 <div class="swiper-slide"> 5100 5101 <div class="banner-personalizado-item"> 5102 5103 <div class="banner-personalizado-item-imagem"> 5104 <img src="https://images.tcdn.com.br/files/1063102/themes/2
510416/img/settings/100_farmacam_medalha.svg?40911a9f4d7a99b6eef6b4ae366be082" alt="LOJA ESPECIALIZADA"> 5105 </div> 5106 5107 <div class="banner-personalizado-item-conteudo"> 5108 <div class="banner-personalizado-item-titulo"> 5109 LOJA ESPECIALIZADA 5110 </div> 5111 <div class="banner-personalizado-item-subtitulo"> 5112 Manipulando qualidade há mais de 28 anos 5113 </div> 5114 </div> 5115 </div> 5116 5117 </div> 5118 5119 5120 5121 <div class="swiper-slide"> 5122 5123 <div class="banner-personalizado-item"> 5124 5125 <div class="banner-personalizado-item-imagem"> 5126 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/100_farmacam_pagamento_facilitado.svg?40911a9f4d7a99b6eef6b4ae366be082" alt="PARCELE EM ATÉ 12X CRÉDITO"> 5127 </div> 5128 5129 <div class="banner-personalizado-item-conteudo"> 5130 <div class="banner-personalizado-item-titulo"> 5131 PARCELE EM ATÉ 12X CRÉDITO 5132 </div> 5133 <div class="banner-personalizado-item-subtitulo"> 5134 PIX e boleto com descontos 5135 </div> 5136 </div> 5137 </div> 5138 5139 </div> 5140 5141 5142 5143 <div class="swiper-slide"> 5144 5145 <div class="banner-personalizado-item"> 5146 5147 <div class="banner-personalizado-item-imagem"> 5148 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/100_farmacam_atendimento_humanizado.svg?40911a9f4d7a99b6eef6b4ae366be082" alt="ATENDIMENTO HUMANIZADO"> 5149 </div> 5150 5151 <div class="banner-personalizado-item-conteudo"> 5152 <div class="banner-personalizado-item-titulo"> 5153 ATENDIMENTO HUMANIZADO 5154 </div> 5155 <div class="banner-personalizado-item-subtitulo"> 5156 Fale com nossos atendentes 5157 </div> 5158 </div> 5159 </div> 5160 5161 </div> 5162 5163 </div> 5164 5165 <div class="swiper-button-prev" role="button" aria-label="Slide anterior" tabindex="0"></div> 5166 <div class="swiper-button-next" role="button" aria-label="Próximo slide" tabindex="0"></div> 5167 <div class="dots"></div> 5168 5169 </div> 5170 5171 </div> 5172 5173</div> 5174 5175 5176 5177 <div class="section section-categorias"> 5178 <div class="container"> 5179 <div class="section-header"> 5180 <h2 class="title-section"> 5181 5182 Nossas Principais Categorias 5183 </h2> 5184 </div> 5185 </div> 5186 <div class="container categorias-content swiper"> 5187 5188 <div class="swiper-container"> 5189 5190 <div class="swiper-wrapper"> 5191 5192 5193 5194 5195 <div class="swiper-slide"> 5196 <a title="Desempenho Sexual" href="https://www.farmacam.com.br/desempenho-sexual"> 5197 <img src="https://images.tcdn.com.br/files/1063102/themes/2
519716/img/settings/Desempenho-Sexual-SETE.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Desempenho Sexual" class="lazyload" width="200"> 5198 <strong>Desempenho Sexual</strong> 5199 </a> 5200 </div> 5201 5202 5203 5204 <div class="swiper-slide"> 5205 <a title="Unha e Cabelo" href="https://www.farmacam.com.br/tratamento-de-unha-e-cabelo"> 5206 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Unha-e-Cabelo-QUINZE.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Unha e Cabelo" class="lazyload" width="200"> 5207 <strong>Unha e Cabelo</strong> 5208 </a> 5209 </div> 5210 5211 5212 5213 <div class="swiper-slide"> 5214 <a title="Emagrecimento" href="https://www.farmacam.com.br/emagrecimento"> 5215 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Emagrecimento-OITO.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Emagrecimento" class="lazyload" width="200"> 5216 <strong>Emagrecimento</strong> 5217 </a> 5218 </div> 5219 5220 5221 5222 <div class="swiper-slide"> 5223 <a title="Qualidade de Vida" href="https://www.farmacam.com.br/qualidade-de-vida"> 5224 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Qualidade-de-Vida-DEZ.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Qualidade de Vida" class="lazyload" width="200"> 5225 <strong>Qualidade de Vida</strong> 5226 </a> 5227 </div> 5228 5229 5230 5231 <div class="swiper-slide"> 5232 <a title="Saúde da Mulher" href="https://www.farmacam.com.br/saude-da-mulher"> 5233 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Saude-da-Mulher-DOZE.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Saúde da Mulher" class="lazyload" width="200"> 5234 <strong>Saúde da Mulher</strong> 5235 </a> 5236 </div> 5237 5238 5239 5240 <div class="swiper-slide"> 5241 <a title="Suplementação" href="https://www.farmacam.com.br/suplementacao-nutricional"> 5242 <img src="https://images.tcdn.com.br/files/1063102/themes/2
524216/img/settings/Suplementacao-TREZE.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Suplementação" class="lazyload" width="200"> 5243 <strong>Suplementação</strong> 5244 </a> 5245 </div> 5246 5247 5248 5249 <div class="swiper-slide"> 5250 <a title="Desempenho Mental" href="https://www.farmacam.com.br/desempenho-mental"> 5251 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Desempenho-Mental-SEIS.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Desempenho Mental" class="lazyload" width="200"> 5252 <strong>Desempenho Mental</strong> 5253 </a> 5254 </div> 5255 5256 5257 5258 <div class="swiper-slide"> 5259 <a title="Repelentes" href="https://www.farmacam.com.br/repelentes"> 5260 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Repelentes-ONZE.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Repelentes" class="lazyload" width="200"> 5261 <strong>Repelentes</strong> 5262 </a> 5263 </div> 5264 5265 5266 5267 <div class="swiper-slide"> 5268 <a title="Estimulantes" href="https://www.farmacam.com.br/estimulantes"> 5269 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Estimulantes-NOVE.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Estimulantes" class="lazyload" width="200"> 5270 <strong>Estimulantes</strong> 5271 </a> 5272 </div> 5273 5274 5275 5276 <div class="swiper-slide"> 5277 <a title="Antioxidantes" href="https://www.farmacam.com.br/antioxidante"> 5278 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Antioxidantes-TRES.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Antioxidantes" class="lazyload" width="200"> 5279 <strong>Antioxidantes</strong> 5280 </a> 5281 </div> 5282 5283 5284 5285 <div class="swiper-slide"> 5286 <a title="Tratamento
5286Endocrinológico" href="https://www.farmacam.com.br/tratamento-endocrinologico"> 5287 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Tratamento-Endocrinologico-QUATORZE.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Tratamento Endocrinológico" class="lazyload" width="200"> 5288 <strong>Tratamento Endocrinológico</strong> 5289 </a> 5290 </div> 5291 5292 5293 5294 <div class="swiper-slide"> 5295 <a title="Dermatológico" href="https://www.farmacam.com.br/dermatologicos"> 5296 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Dermatologico-CINCO.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Dermatológico" class="lazyload" width="200"> 5297 <strong>Dermatológico</strong> 5298 </a> 5299 </div> 5300 5301 5302 5303 <div class="swiper-slide"> 5304 <a title="Anestésicos" href="https://www.farmacam.com.br/anestesico"> 5305 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Anestesicos-DOIS.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Anestésicos" class="lazyload" width="200"> 5306 <strong>Anestésicos</strong> 5307 </a> 5308 </div> 5309 5310 5311 5312 <div class="swiper-slide"> 5313 <a title="Anabolizantes" href="https://www.farmacam.com.br/anabolismo"> 5314 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Anabolizantes-UM.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Anabolizantes" class="lazyload" width="200"> 5315 <strong>Anabolizantes</strong> 5316 </a> 5317 </div> 5318 5319 5320 5321 <div class="swiper-slide"> 5322 <a title="Calmantes" href="https://www.farmacam.com.br/calmante"> 5323 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Calmantes-QUATRO.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Calmantes" class="lazyload" width="200"> 5324 <strong>Calmantes</strong> 5325 </a> 5326 </div> 5327 5328 </div> 5329 5330 <!-- If we need navigation buttons --> 5331 <div class="swiper-button-prev" role="button" aria-label="Slide anterior" tabindex="0"></div> 5332 <div class="swiper-button-next" role="button" aria-label="Próximo slide" tabindex="0"></div> 5333 <div class="dots"></div> 5334 5335 </div> 5336 5337 </div> 5338 5339 </div> 5340 5341 5342 5343 <style> 5344 .filtro-categorias, .filtro-categorias .title-section{ 5345 background-color: #3b8d4a; 5346 } 5347 .filtro-categorias .title-section, .filtro-categorias .section-header, 5348 .filtro-categorias .titulo-filtro-campo{ 5349 color: #ffffff !important; 5350 } 5351 .filtro-categorias .btn-filtro{ 5352 color: #ffffff; 5353 background-color: ; 5354 } 5355 </style> 5356 5357 <section class="filtro-categorias mt-1 pt-3 pb-3" categorias-ocultas=""> 5358 5359 <div class="container"> 5360 5361 <div class="section-header"> 5362 <h2 class="title-section"> 5363 Encontre o melhor para sua Saúde 5364 </h2> 5365 <p>
5365Busque de forma rápida os nossos produtos!</p> 5366 </div> 5367 5368 <div class="box-filtro"> 5369 5370 <div class="box-filtro-item" ar> 5371 <div class="titulo-filtro-campo" id="labelSelect1">Produto Procurado</div> 5372 <select class="text" id="filtro-1" aria-labelledby="labelSelect1"> 5373 <option value="">Selecione</option> 5374 </select class="text"> 5375 </div> 5376 5377 <div class="box-filtro-item"> 5378 <div class="titulo-filtro-campo" id="labelSelect2">Mais Detalhes</div> 5379 <select class="text" id="filtro-2" aria-labelledby="labelSelect2"> 5380 <option value="">Selecione</option> 5381 </select class="text"> 5382 </div> 5383 5384 5385 <div class="box-filtro-item-btn"> 5386 <div class="btn-filtro"> 5387 <svg height="24" xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-search" width="22" height="22" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> 5388 <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> 5389 <path d="M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0"></path> 5390 <path d="M21 21l-6 -6"></path> 5391 </svg> 5392 <span> 5393 Pesquisar 5394 </span> 5395 </div> 5396 </div> 5397 5398 </div> 5399 5400 </div> 5401 5402 </section> 5403 5404 5405<!-- Promocao em Destaque --> 5406 5407 5408 5409 <div id="vitrine-personalizada" class="vitrine-personalizada fix-vitrine-banner " data-quantidade-produtos="5"> 5410 <div class="container produtos-content"> 5411 5412 <div class="section-header"> 5413 5414 <div class="vitrine-personalizada-titulo"> 5415 5416 <h2 class="title-section"> 5417 Produtos para Unhas e Cabelos 5418 </h2> 5419 5420 5421 </div> 5422 5423 </div> 5424 5425 5426 <div class="swiper vt-produtos"> 5427 <div class="swiper-container"> 5428 <div class="swiper-wrapper"></div> 5429 <div class="swiper-button-prev"></div> 5430 <div class="swiper-button-next"></div> 5431 <div class="swiper-pagination"></div> 5432 </div> 5433 </div> 5434 5435 5436 5437 </div> 5438 </div> 5439 5440 5441 5442 5443 5444 <div class="vitrine-banners"> 5445 <div class="container"> 5446 <div class="banners-grid banners-grid-2 flex justify-between"> 5447 <div class="item box-banners"> 5448 <a title="Banner Vitrine 1" href="linha-farma-gym"> 5449 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/PRIMEIRA-VITRINE-ESQUERDA.png?40911a9f4d7a99b6eef6b4ae366be082" class="lazyload" alt="Banner Vitrine 1"> 5450 </a> 5451 5452 </div> 5453 <div class="item box-banners"> 5454 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/PRIMEIRA-VITRINE-DIREITA.png?40911a9f4d7a99b6eef6b4ae366be082" class="lazyload" alt="Banner Vitrine 2"> 5455 5456 </div> 5457 </div> 5458 </div> 5459 </div> 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473<div class="section-showcase "> 5474 <div class="container"> 5475 5476 <div class="section-header"> 5477 <h2 class="title-section"> 5478 5479 5480Confira nossas Novidades </h2> 5481 5482 <div class="showcase-line"></div> 5483 5484 </div> 5485 5486 <div id="showcase2" class="list-product swiper showcase-slide loop-infinito"> 5487 5488 5489 5490 <div class="swiper-container"> 5491 <div class="swiper-wrapper"> 5492 5493 <div 5494 class="swiper-slide fixWidthBoxProduct item"> 5495 5496 5497 5498 5499<div class="product animate open_cart" 5500 data-id="125245726" 5501 data-farmacam-related-categories="," 5502 data-ga4-id="125245726" 5503 data-ga4-name="Mesoporosil" 5504 data-ga4-price="55.00" 5505 data-ga4-brand="Farmacam" 5506 data-ga4-category="Tipo de Produto;Manipulados;" 5507 > 5508 5509 <div class="product-header"> 5510 5511 <div class="w-100"> 5512 5513 5514 5515 5516 5517 5518 5519 <div class="product-tags-circle"> 5520 5521 5522 <div class="tag-circle discount tag-icone tag-icone1"> 5523 <svg fill="none" height="16" stroke="currentColor" stroke-width="1.5" viewB
5523ox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 5524 <path stroke-linecap="round" stroke-linejoin="round" d="M15.362 5.214A8.252 8.252 0 0112 21 8.25 8.25 0 016.038 7.048 8.287 8.287 0 009 9.6a8.983 8.983 0 013.361-6.867 8.21 8.21 0 003 2.48z"></path> 5525 <path stroke-linecap="round" stroke-linejoin="round" d="M12 18a3.75 3.75 0 00.495-7.467 5.99 5.99 0 00-1.925 3.546 5.974 5.974 0 01-2.133-1A3.75 3.75 0 0012 18z"></path> 5526 </svg> 5527 <span>Lançamento</span> 5528 </div> 5529 5530 5531 </div> 5532 5533 5534 5535 <div class="product-tags " data-tags-count="1"> 5536 5537 5538 5539 5540 5541 </div> 5542 5543 5544 5545 <div class="image "> 5546 5547 <a title="Mesoporosil" href="https://www.farmacam.com.br/manipulados/mesoporosil" class="space-image"> 5548 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/mesoporosil_1_20260904155453_5d5caa6e9aa7.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/mesoporosil_1_20260904155453_5d5caa6e9aa7.png" alt="Mesoporosil"> 5549 </a> 5550 5551 </div> 5552 5553 5554 5555 5556 5557 </div> 5558 5559 </div> 5560 5561 <div class="product-body"> 5562 5563 <a title="Mesoporosil" class="product-info" href="https://www.farmacam.com.br/manipulados/mesoporosil"> 5564 5565 <div class="product-info-dados"> 5566 5567 5568 5569 5570 5571 5572 <div class="product-name"> 5573 Mesoporosil 5574 </div> 5575 5576 5577 5578 <div class="product-price"> 5579 5580 5581 5582 5583 5584 <span class="product-has-variants text-center"> 5585 A partir de 5586 </span> 5587 5588<div class="price display-cash"> 5589 5590 5591 <span class="current-price "> 5592 R$ 55,00 5593 5594 </span> 5595 5596 <span class="product-installments"> 5597 5598 </span> 5599 5600</div> 5601 </div> 5602 5603 </div> 5604 5605 </a> 5606 5607 </div> 5608 5609 5610 <div class="product-footer"> 5611 5612 5613 <div class="w-100"> 5614 5615 5616 5617<div class="product-rating-catalog"> 5618 5619 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 5620 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 5621 </svg> 5622 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 5623 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 5624 </svg> 5625 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 5626 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 5627 </svg> 5628 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 5629 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 5630 </svg> 5631 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 5632 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 5633 </svg> 5634 5635 5636 <a title="Ver avaliações de Mesoporosil" href="https://www.farmacam.com.br/manipulados/mesoporosil#comments" class="total"> 5637 Seja o primeiro 5638 </a> 5639 5640 </div> 5641 5642 5643 5644 <div class="config-variacoes-compra"> 5645 5646 5647 5648 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245726"> 5649 <input type="hidden" name="product_id" value="125245726"> 5650 <input type="hidden" name="without_stock_sale" value=""> 5651 5652 <input type="hidden" name="variacao" id="selectedVariant" value=""> 5653 <input type="hidden" name="estoque" value=""> 5654 5655 5656 5657 <ul class="paleta-cores"> 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936
5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 </ul> 6169 <!-- Fim Paleta de Cores --> 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 6190 <option disabled="disabled" value=""> 6191 Selecione 6192 </option> 6193 6194 6195 <option value="30796" produto="125245726" estoque="10000">50 mg - 30 doses</option> 6196 6197 6198 6199 6200 <option value="30798" produto="125245726" estoque="10000">50 mg - 60 doses</option> 6201 6202 6203 6204 6205 <option value="30800" produto="125245726" estoque="10000">100 mg - 30 doses</option> 6206 6207 6208 6209 6210 <option value="30802" produto="125245726" estoque="10000">100 mg - 60 doses</option> 6211 6212 6213 </select> 6214 6215 6216 <select class="select-cor" style="display: none;" title="Campo Cor"> 6217
6217 </select> 6218 6219 6220 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 6221 <div class="alerta-estoque"></div> 6222 <div class="alerta-adicionado"></div> 6223 6224 <div class="acao-compra"> 6225 6226 <div class="quantidade-box"> 6227 <div class="quantidade-box-input"> 6228 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
6228stoque="40000" /> 6229 </div> 6230 <div class="quantidade-box-controles"> 6231 <div class="quantidade-box-controles-itens" data-item="mais"> 6232 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 6233 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 6234 </svg> 6235 </div> 6236 <div class="quantidade-box-controles-itens" data-item="menus"> 6237 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 6238 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 6239 </svg> 6240 </div> 6241 </div> 6242 </div> 6243 6244 6245 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245726"> 6246 6247 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 6248 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 6249 6250 6251 6252 6253 6254 6255 <!-- Cesta de Compras --> 6256 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 6257 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 6258 </svg> 6259 6260 6261 6262 Comprar 6263 6264 6265 </button> 6266 <!-- </form> --> 6267 6268 </div> 6269 6270</div> 6271 6272 6273 </div> 6274 6275 </div> 6276 6277 6278</div> 6279
6280<script> 6281(function (window, document) { 6282 'use strict'; 6283 6284 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 6285 6286 if (window[GLOBAL_KEY]) { 6287 return; 6288 } 6289 6290 if (!window.Map || !window.WeakMap || !window.Promise) { 6291 return; 6292 } 6293 6294 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 6295 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 6296 '#vitrine-personalizada .product[data-id]'; 6297 var BADGE_CLASS = 'farmacam-prescription-badge'; 6298 var HOST_CLASS = 'farmacam-prescription-badge-host'; 6299 var MAX_CONCURRENT_REQUESTS = 6; 6300 var REQUEST_TIMEOUT_MS = 12000; 6301 6302 var rules = { 6303 '294': { 6304 level: '294', 6305 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 6306 }, 6307 '296': { 6308 level: '296', 6309 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 6310 }, 6311 '298': { 6312 level: '298', 6313 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 6314 } 6315 }; 6316 6317 var cache = new Map(); 6318 var pending = new Map(); 6319 var cardStates = new WeakMap(); 6320 var queue = []; 6321 var activeRequests = 0; 6322 var trayAjaxHooked = false; 6323 6324 function injectStyles() { 6325 if (document.getElementById('farmacam-prescription-cards-style')) { 6326 return; 6327 } 6328 6329 var style = document.createElement('style'); 6330 style.id = 'farmacam-prescription-cards-style'; 6331 style.textContent = [ 6332 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 6333 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 6334 'position:absolute!important;', 6335 'top:52px!important;', 6336 'left:10px!important;', 6337 'z-index:999!important;', 6338 'display:block!important;', 6339 'max-width:calc(100% - 20px)!important;', 6340 'box-sizing:border-box!important;', 6341 'padding:8px 12px!important;', 6342 'color:#fff!important;', 6343 'font-family:inherit!important;', 6344 'font-size:13px!important;', 6345 'font-weight:900!important;', 6346 'line-height:1.15!important;', 6347 'text-align:center!important;', 6348 'text-transform:uppercase!important;', 6349 'letter-spacing:.3px!important;', 6350 'white-space:normal!important;', 6351 'overflow-wrap:break-word!important;', 6352 'border-radius:3px!important;', 6353 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 6354 'pointer-events:none!important;', 6355 '}', 6356 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 6357 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 6358 'background:#d70008!important;', 6359 '}', 6360 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 6361 'background:#000!important;', 6362 '}', 6363 '@media (max-width:767px){', 6364 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 6365 'top:42px!important;', 6366 'left:6px!important;', 6367 'max-width:calc(100% - 12px)!important;', 6368 'padding:6px 8px!important;', 6369 'font-size:10px!important;', 6370 '}', 6371 '}' 6372 ].join(''); 6373 6374 (document.head || document.documentElement).appendChild(style); 6375 } 6376 6377 function normalizeProductId(value) { 6378 var id = String(value == null ? '' : value).trim(); 6379 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 6380 } 6381 6382 function classifyRelatedCategories(relatedCategories) { 6383 var found = { 6384 '292': false, 6385 '294': false, 6386 '296': false, 6387 '298': false 6388 }; 6389 6390 function inspect(value, depth) { 6391 var index; 6392 var normalized; 6393 6394 if (value == null || depth > 8) { 6395 return; 6396 } 6397 6398 if (Array.isArray(value)) { 6399 for (index = 0; index < value.length; index += 1) { 6400 inspect(value[index], depth + 1); 6401 } 6402 return; 6403 } 6404 6405 if (typeof value === 'object') { 6406 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 6407 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 6408 inspect(value.id, depth + 1); 6409 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 6410 inspect(value.category_id, depth + 1); 6411 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 6412 inspect(value.Category, depth + 1); 6413 } 6414 return; 6415 } 6416 6417 if (typeof value !== 'string' && typeof value !== 'number') { 6418 return; 6419 } 6420 normalized = normalizeProductId(value); 6421 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 6422 found[normalized] = true; 6423 } 6424 } 6425 6426 inspect(relatedCategories, 0); 6427 6428 if (found['298']) { 6429 return rules['298']; 6430 } 6431 if (found['296']) { 6432 return rules['296']; 6433 } 6434 if (found['294']) { 6435 return rules['294']; 6436 } 6437 6438 // 292 e qualquer classificacao desconhecida ficam sem tarja. 6439 return null; 6440 } 6441 6442 function ruleFromPayload(payload, productId) { 6443 var product = payload && payload.Product; 6444 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 6445 return null; 6446 } 6447 return classifyRelatedCategories(product && product.related_categories); 6448 } 6449 6450 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 6451 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 6452 function attachTrayAjaxCache() { 6453 var jq = window.jQuery; 6454 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 6455 return; 6456 } 6457
6458 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 6459 var url; 6460 var match; 6461 var productId; 6462 var payload; 6463 try { 6464 url = new URL(settings.url, window.location.href); 6465 if (url.origin !== window.location.origin) { 6466 return; 6467 } 6468 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 6469 if (!match) { 6470 return; 6471 } 6472 productId = normalizeProductId(match[1]); 6473 if (!cache.has(productId) && !pending.has(productId)) { 6474 payload = data || xhr.responseJSON; 6475 if (typeof payload === 'string') { 6476 payload = JSON.parse(payload); 6477 } 6478 if (!payload || !payload.Product || 6479 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 6480 return; 6481 } 6482 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 6483 return; 6484 } 6485 cache.set(productId, ruleFromPayload(payload, productId)); 6486 } 6487 } catch (error) { 6488 // Respostas de outras integracoes nao interferem nas tarjas. 6489 } 6490 }); 6491 6492 trayAjaxHooked = true; 6493 document.removeEventListener('load', onTrayScriptLoad, true); 6494 } 6495 6496 function onTrayScriptLoad(event) { 6497 if (event.target && event.target.tagName === 'SCRIPT') { 6498 attachTrayAjaxCache(); 6499 } 6500 } 6501 6502 function requestRule(productId) { 6503 var controller = null; 6504 var timeoutId = null; 6505 var options = { 6506 credentials: 'same-origin', 6507 headers: { 6508 'Accept': 'application/json' 6509 } 6510 }; 6511 var request; 6512 6513 if (typeof window.fetch !== 'function') { 6514 return Promise.resolve(null); 6515 } 6516 6517 if (typeof window.AbortController === 'function') { 6518 controller = new window.AbortController(); 6519 options.signal = controller.signal; 6520 timeoutId = window.setTimeout(function () { 6521 controller.abort(); 6522 }, REQUEST_TIMEOUT_MS); 6523 } 6524 6525 try { 6526 request = window.fetch( 6527 '/web_api/products/' + encodeURIComponent(productId), 6528 options 6529 ); 6530 } catch (error) { 6531 if (timeoutId !== null) { 6532 window.clearTimeout(timeoutId); 6533 } 6534 return Promise.resolve(null); 6535 } 6536 6537 return request.then(function (response) { 6538 if (!response.ok) { 6539 throw new Error('HTTP ' + response.status); 6540 } 6541 return response.json(); 6542 }).then(function (payload) { 6543 return ruleFromPayload(payload, productId); 6544 }).then(function (rule) { 6545 if (timeoutId !== null) { 6546 window.clearTimeout(timeoutId); 6547 } 6548 return rule; 6549 }, function () { 6550 if (timeoutId !== null) { 6551 window.clearTimeout(timeoutId); 6552 } 6553 6554 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 6555 return null; 6556 }); 6557 } 6558 6559 function finishJob(job, rule) { 6560 cache.set(job.productId, rule); 6561 pending.delete(job.productId); 6562 activeRequests -= 1; 6563 job.resolve(rule); 6564 pumpQueue(); 6565 } 6566 6567 function pumpQueue() { 6568 var job; 6569 6570 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 6571 job = queue.shift(); 6572 activeRequests += 1; 6573 6574 (function (currentJob) { 6575 requestRule(currentJob.productId).then(function (rule) { 6576 finishJob(currentJob, rule); 6577 }, function () { 6578 finishJob(currentJob, null); 6579 }); 6580 }(job)); 6581 } 6582 } 6583 6584 function getRule(productId) { 6585 var resolver; 6586 var promise; 6587 6588 if (cache.has(productId)) { 6589 return Promise.resolve(cache.get(productId)); 6590 } 6591 6592 if (pending.has(productId)) { 6593 return pending.get(productId); 6594 } 6595 6596 promise = new Promise(function (resolve) { 6597 resolver = resolve; 6598 }); 6599 6600 pending.set(productId, promise); 6601 queue.push({ 6602 productId: productId, 6603 resolve: resolver 6604 }); 6605 pumpQueue(); 6606 6607 return promise; 6608 } 6609 6610 function findBadge(card) { 6611 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 6612 } 6613 6614 function clearBadge(card) { 6615 var badge = findBadge(card); 6616 var image = card.querySelector('.product-header > .w-100 > .image'); 6617 6618 if (badge && badge.parentNode) { 6619 badge.parentNode.removeChild(badge); 6620 } 6621 6622 if (image) { 6623 image.classList.remove(HOST_CLASS); 6624 } 6625 6626 card.removeAttribute('data-farmacam-prescription-level'); 6627 } 6628 6629 function applyBadge(card, productId, rule) { 6630 var image; 6631 var badge; 6632 6633 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 6634 return false;
6635 } 6636 6637 clearBadge(card); 6638 6639 if (!rule) { 6640 return true; 6641 } 6642 6643 image = card.querySelector('.product-header > .w-100 > .image'); 6644 if (!image) { 6645 return false; 6646 } 6647 6648 badge = document.createElement('span'); 6649 badge.className = BADGE_CLASS; 6650 badge.setAttribute('data-farmacam-generated', 'true'); 6651 badge.setAttribute('data-farmacam-prescription-level', rule.level); 6652 badge.setAttribute('role', 'note'); 6653 badge.textContent = rule.text; 6654 6655 image.classList.add(HOST_CLASS); 6656 image.insertBefore(badge, image.firstChild); 6657 card.setAttribute('data-farmacam-prescription-level', rule.level); 6658 6659 return true; 6660 } 6661 6662 function processCard(card) { 6663 var productId; 6664 var previousState; 6665 var currentState; 6666 6667 if (!card || card.nodeType !== 1) { 6668 return; 6669 } 6670 6671 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 6672 return; 6673 } 6674 6675 productId = normalizeProductId(card.getAttribute('data-id')); 6676 previousState = cardStates.get(card); 6677 6678 if (!productId) { 6679 clearBadge(card); 6680 cardStates.delete(card); 6681 return; 6682 } 6683 6684 if ( 6685 previousState && 6686 previousState.productId === productId && 6687 previousState.status === 'loading' 6688 ) { 6689 return; 6690 } 6691 6692 if ( 6693 previousState && 6694 previousState.productId === productId && 6695 previousState.status === 'processed' 6696 ) { 6697 if (!previousState.rule || findBadge(card)) { 6698 return; 6699 } 6700 } 6701 6702 if (!previousState || previousState.productId !== productId) { 6703 clearBadge(card); 6704 } 6705 6706 currentState = { 6707 productId: productId, 6708 status: 'loading', 6709 rule: null 6710 }; 6711 cardStates.set(card, currentState); 6712 6713 getRule(productId).then(function (rule) { 6714 var applied; 6715 6716 if ( 6717 cardStates.get(card) !== currentState || 6718 normalizeProductId(card.getAttribute('data-id')) !== productId 6719 ) { 6720 return; 6721 } 6722 6723 applied = applyBadge(card, productId, rule); 6724 currentState.rule = rule; 6725 currentState.status = applied ? 'processed' : 'waiting-image'; 6726 }); 6727 } 6728 6729 function scan(root) { 6730 var cards; 6731 var index; 6732 6733 if (!root) { 6734 return; 6735 } 6736 6737 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 6738 processCard(root); 6739 } 6740 6741 if (!root.querySelectorAll) { 6742 return; 6743 } 6744 6745 cards = root.querySelectorAll(CARD_SELECTOR); 6746 for (index = 0; index < cards.length; index += 1) { 6747 processCard(cards[index]); 6748 } 6749 } 6750 6751 function startObserver() { 6752 var observer; 6753 6754 if (!window.MutationObserver || !document.documentElement) { 6755 return; 6756 } 6757 6758 observer = new MutationObserver(function (mutations) { 6759 var mutationIndex; 6760 var nodeIndex; 6761 var mutation; 6762 var node; 6763 var ownerCard; 6764 6765 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 6766 mutation = mutations[mutationIndex]; 6767 6768 if (mutation.type === 'attributes') { 6769 processCard(mutation.target); 6770 continue; 6771 } 6772 6773 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 6774 node = mutation.addedNodes[nodeIndex]; 6775 if (node.nodeType !== 1) { 6776 continue; 6777 } 6778 6779 scan(node); 6780 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 6781 if (ownerCard) { 6782 processCard(ownerCard); 6783 } 6784 } 6785 } 6786 }); 6787 6788 observer.observe(document.documentElement, { 6789 childList: true, 6790 subtree: true, 6791 attributes: true, 6792 attributeFilter: ['data-id'] 6793 }); 6794 6795 window[GLOBAL_KEY].observer = observer; 6796 } 6797 6798 window[GLOBAL_KEY] = { 6799 version: '1.1.0', 6800 cache: cache, 6801 pending: pending, 6802 cardStates: cardStates, 6803 scan: scan, 6804 processCard: processCard, 6805 observer: null 6806 }; 6807 6808 document.addEventListener('load', onTrayScriptLoad, true); 6809 attachTrayAjaxCache(); 6810 injectStyles(); 6811 scan(document); 6812 startObserver(); 6813 6814 if (document.readyState === 'loading') { 6815 document.addEventListener('DOMContentLoaded', function () { 6816 attachTrayAjaxCache(); 6817 scan(document); 6818 }); 6819 } 6820}(window, document)); 6821</script>
6821 6822 </div> 6823 <div 6824 class="swiper-slide fixWidthBoxProduct item"> 6825 6826 6827 6828 6829<div class="product animate open_cart" 6830 data-id="125245724" 6831 data-farmacam-related-categories="," 6832 data-ga4-id="125245724" 6833 data-ga4-name="BloomEase - Saúde da Mulher" 6834 data-ga4-price="141.00" 6835 data-ga4-brand="Farmacam" 6836 data-ga4-category="Tipo de Produto;Manipulados;" 6837 > 6838 6839 <div class="product-header"> 6840 6841 <div class="w-100"> 6842 6843 6844 6845 6846 6847 6848 6849 <div class="product-tags-circle"> 6850 6851 6852 <div class="tag-circle discount tag-icone tag-icone1"> 6853 <svg fill="none" height="16" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 6854 <path stroke-linecap="round" stroke-linejoin="round" d="M15.362 5.214A8.252 8.252 0 0112 21 8.25 8.25 0 016.038 7.048 8.287 8.287 0 009 9.6a8.983 8.983 0 013.361-6.867 8.21 8.21 0 003 2.48z"></path> 6855 <path stroke-linecap="round" stroke-linejoin="round" d="M12 18a3.75 3.75 0 00.495-7.467 5.99 5.99 0 00-1.925 3.546 5.974 5.974 0 01-2.133-1A3.75 3.75 0 0012 18z"></path> 6856 </svg> 6857 <span>Lançamento</span> 6858 </div> 6859 6860 6861 </div> 6862 6863 6864 6865 <div class="product-tags " data-tags-count="1"> 6866 6867 6868 6869 6870 6871 </div> 6872 6873 6874 6875 <div class="image "> 6876 6877 <a title="BloomEase - Saúde da Mulher" href="https://www.farmacam.com.br/manipulados/bloomease-saude-da-mulher" class="space-image"> 6878 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/bloomease_sade_da_mulher_1_20260904160559_30b600fac34a.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/bloomease_sade_da_mulher_1_20260904160559_30b600fac34a.png" alt="BloomEase - Saúde da Mulher"> 6879 </a> 6880 6881 </div> 6882 6883 6884 6885 6886 6887 </div> 6888 6889 </div> 6890 6891 <div class="product-body"> 6892 6893 <a title="BloomEase - Saúde da Mulher" class="product-info" href="https://www.farmacam.com.br/manipulados/bloomease-saude-da-mulher"> 6894 6895 <div class="product-info-dados"> 6896 6897 6898 6899 6900 6901 6902 <div class="product-name"> 6903 BloomEase - Saúde da Mulher 6904 </div> 6905 6906 6907 6908 <div class="product-price"> 6909 6910 6911 6912 6913 6914 <span class="product-has-variants text-center"> 6915 A partir de 6916 </span> 6917 6918<div class="price display-cash"> 6919 6920 6921 <span class="current-price "> 6922 R$ 141,00 6923 6924 </span> 6925 6926 <span class="product-installments"> 6927 6928 </span> 6929 6930</div> 6931 </div> 6932 6933 </div> 6934 6935 </a> 6936 6937 </div> 6938 6939 6940 <div class="product-footer"> 6941 6942 6943 <div class="w-100"> 6944 6945 6946 6947<div class="product-rating-catalog"> 6948 6949 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 6950 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 6951 </svg> 6952 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 6953 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 6954 </svg> 6955 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 6956 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 6957 </svg> 6958 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 6959 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 6960 </svg> 6961 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 6962 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 6963 </svg> 6964 6965 6966 <a title="Ver avaliações de BloomEase - Saúde da Mulher" href="https://www.farmacam.com.br/manipulados/bloomease-saude-da-mulher#comments" class="total"> 6967 Seja o primeiro 6968 </a> 6969 6970 </div> 6971 6972 6973 6974 <div class="config-variacoes-compra"> 6975 6976 6977 6978 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245724"> 6979 <input type="hidden" name="product_id" value="125245724"> 6980 <input type="hidden" name="without_stock_sale" value=""> 6981 6982 <input type="hidden" name="variacao" id="selectedVariant" value=""> 6983 <input type="hidden" name="estoque" value=""> 6984 6985 6986 6987 <ul class="paleta-cores"> 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242
7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 </ul> 7407 <!-- Fim Paleta de Cores --> 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 7424 <option disabled="disabled" value=""> 7425 Selecione 7426 </option> 7427 7428 7429 <option value="30790" produto="125245724" estoque="10000">520 mg - 30 Doses</option> 7430 7431 7432 7433 7434 <option value="30792" produto="125245724" estoque="10000">520 mg - 60 Doses</option> 7435 7436 7437 7438 7439 <option value="30794" produto="125245724" estoque="10000">520 mg - 90 Doses</option> 7440 7441 7442 </select> 7443 7444 7445 <select class="select-cor" style="display: none;" title="Campo Cor"> 7446
7446 </select> 7447 7448 7449 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 7450 <div class="alerta-estoque"></div> 7451 <div class="alerta-adicionado"></div> 7452 7453 <div class="acao-compra"> 7454 7455 <div class="quantidade-box"> 7456 <div class="quantidade-box-input"> 7457 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
7457stoque="30000" /> 7458 </div> 7459 <div class="quantidade-box-controles"> 7460 <div class="quantidade-box-controles-itens" data-item="mais"> 7461 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 7462 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 7463 </svg> 7464 </div> 7465 <div class="quantidade-box-controles-itens" data-item="menus"> 7466 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 7467 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 7468 </svg> 7469 </div> 7470 </div> 7471 </div> 7472 7473 7474 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245724"> 7475 7476 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 7477 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 7478 7479 7480 7481 7482 7483 7484 <!-- Cesta de Compras --> 7485 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 7486 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 7487 </svg> 7488 7489 7490 7491 Comprar 7492 7493 7494 </button> 7495 <!-- </form> --> 7496 7497 </div> 7498 7499</div> 7500 7501 7502 </div> 7503 7504 </div> 7505 7506 7507</div> 7508
7509<script> 7510(function (window, document) { 7511 'use strict'; 7512 7513 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 7514 7515 if (window[GLOBAL_KEY]) { 7516 return; 7517 } 7518 7519 if (!window.Map || !window.WeakMap || !window.Promise) { 7520 return; 7521 } 7522 7523 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 7524 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 7525 '#vitrine-personalizada .product[data-id]'; 7526 var BADGE_CLASS = 'farmacam-prescription-badge'; 7527 var HOST_CLASS = 'farmacam-prescription-badge-host'; 7528 var MAX_CONCURRENT_REQUESTS = 6; 7529 var REQUEST_TIMEOUT_MS = 12000; 7530 7531 var rules = { 7532 '294': { 7533 level: '294', 7534 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 7535 }, 7536 '296': { 7537 level: '296', 7538 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 7539 }, 7540 '298': { 7541 level: '298', 7542 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 7543 } 7544 }; 7545 7546 var cache = new Map(); 7547 var pending = new Map(); 7548 var cardStates = new WeakMap(); 7549 var queue = []; 7550 var activeRequests = 0; 7551 var trayAjaxHooked = false; 7552 7553 function injectStyles() { 7554 if (document.getElementById('farmacam-prescription-cards-style')) { 7555 return; 7556 } 7557 7558 var style = document.createElement('style'); 7559 style.id = 'farmacam-prescription-cards-style'; 7560 style.textContent = [ 7561 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 7562 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 7563 'position:absolute!important;', 7564 'top:52px!important;', 7565 'left:10px!important;', 7566 'z-index:999!important;', 7567 'display:block!important;', 7568 'max-width:calc(100% - 20px)!important;', 7569 'box-sizing:border-box!important;', 7570 'padding:8px 12px!important;', 7571 'color:#fff!important;', 7572 'font-family:inherit!important;', 7573 'font-size:13px!important;', 7574 'font-weight:900!important;', 7575 'line-height:1.15!important;', 7576 'text-align:center!important;', 7577 'text-transform:uppercase!important;', 7578 'letter-spacing:.3px!important;', 7579 'white-space:normal!important;', 7580 'overflow-wrap:break-word!important;', 7581 'border-radius:3px!important;', 7582 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 7583 'pointer-events:none!important;', 7584 '}', 7585 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 7586 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 7587 'background:#d70008!important;', 7588 '}', 7589 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 7590 'background:#000!important;', 7591 '}', 7592 '@media (max-width:767px){', 7593 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 7594 'top:42px!important;', 7595 'left:6px!important;', 7596 'max-width:calc(100% - 12px)!important;', 7597 'padding:6px 8px!important;', 7598 'font-size:10px!important;', 7599 '}', 7600 '}' 7601 ].join(''); 7602 7603 (document.head || document.documentElement).appendChild(style); 7604 } 7605 7606 function normalizeProductId(value) { 7607 var id = String(value == null ? '' : value).trim(); 7608 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 7609 } 7610 7611 function classifyRelatedCategories(relatedCategories) { 7612 var found = { 7613 '292': false, 7614 '294': false, 7615 '296': false, 7616 '298': false 7617 }; 7618 7619 function inspect(value, depth) { 7620 var index; 7621 var normalized; 7622 7623 if (value == null || depth > 8) { 7624 return; 7625 } 7626 7627 if (Array.isArray(value)) { 7628 for (index = 0; index < value.length; index += 1) { 7629 inspect(value[index], depth + 1); 7630 } 7631 return; 7632 } 7633 7634 if (typeof value === 'object') { 7635 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 7636 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 7637 inspect(value.id, depth + 1); 7638 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 7639 inspect(value.category_id, depth + 1); 7640 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 7641 inspect(value.Category, depth + 1); 7642 } 7643 return; 7644 } 7645 7646 if (typeof value !== 'string' && typeof value !== 'number') { 7647 return; 7648 } 7649 normalized = normalizeProductId(value); 7650 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 7651 found[normalized] = true; 7652 } 7653 } 7654 7655 inspect(relatedCategories, 0); 7656 7657 if (found['298']) { 7658 return rules['298']; 7659 } 7660 if (found['296']) { 7661 return rules['296']; 7662 } 7663 if (found['294']) { 7664 return rules['294']; 7665 } 7666 7667 // 292 e qualquer classificacao desconhecida ficam sem tarja. 7668 return null; 7669 } 7670 7671 function ruleFromPayload(payload, productId) { 7672 var product = payload && payload.Product; 7673 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 7674 return null; 7675 } 7676 return classifyRelatedCategories(product && product.related_categories); 7677 } 7678 7679 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 7680 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 7681 function attachTrayAjaxCache() { 7682 var jq = window.jQuery; 7683 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 7684 return; 7685 } 7686
7687 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 7688 var url; 7689 var match; 7690 var productId; 7691 var payload; 7692 try { 7693 url = new URL(settings.url, window.location.href); 7694 if (url.origin !== window.location.origin) { 7695 return; 7696 } 7697 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 7698 if (!match) { 7699 return; 7700 } 7701 productId = normalizeProductId(match[1]); 7702 if (!cache.has(productId) && !pending.has(productId)) { 7703 payload = data || xhr.responseJSON; 7704 if (typeof payload === 'string') { 7705 payload = JSON.parse(payload); 7706 } 7707 if (!payload || !payload.Product || 7708 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 7709 return; 7710 } 7711 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 7712 return; 7713 } 7714 cache.set(productId, ruleFromPayload(payload, productId)); 7715 } 7716 } catch (error) { 7717 // Respostas de outras integracoes nao interferem nas tarjas. 7718 } 7719 }); 7720 7721 trayAjaxHooked = true; 7722 document.removeEventListener('load', onTrayScriptLoad, true); 7723 } 7724 7725 function onTrayScriptLoad(event) { 7726 if (event.target && event.target.tagName === 'SCRIPT') { 7727 attachTrayAjaxCache(); 7728 } 7729 } 7730 7731 function requestRule(productId) { 7732 var controller = null; 7733 var timeoutId = null; 7734 var options = { 7735 credentials: 'same-origin', 7736 headers: { 7737 'Accept': 'application/json' 7738 } 7739 }; 7740 var request; 7741 7742 if (typeof window.fetch !== 'function') { 7743 return Promise.resolve(null); 7744 } 7745 7746 if (typeof window.AbortController === 'function') { 7747 controller = new window.AbortController(); 7748 options.signal = controller.signal; 7749 timeoutId = window.setTimeout(function () { 7750 controller.abort(); 7751 }, REQUEST_TIMEOUT_MS); 7752 } 7753 7754 try { 7755 request = window.fetch( 7756 '/web_api/products/' + encodeURIComponent(productId), 7757 options 7758 ); 7759 } catch (error) { 7760 if (timeoutId !== null) { 7761 window.clearTimeout(timeoutId); 7762 } 7763 return Promise.resolve(null); 7764 } 7765 7766 return request.then(function (response) { 7767 if (!response.ok) { 7768 throw new Error('HTTP ' + response.status); 7769 } 7770 return response.json(); 7771 }).then(function (payload) { 7772 return ruleFromPayload(payload, productId); 7773 }).then(function (rule) { 7774 if (timeoutId !== null) { 7775 window.clearTimeout(timeoutId); 7776 } 7777 return rule; 7778 }, function () { 7779 if (timeoutId !== null) { 7780 window.clearTimeout(timeoutId); 7781 } 7782 7783 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 7784 return null; 7785 }); 7786 } 7787 7788 function finishJob(job, rule) { 7789 cache.set(job.productId, rule); 7790 pending.delete(job.productId); 7791 activeRequests -= 1; 7792 job.resolve(rule); 7793 pumpQueue(); 7794 } 7795 7796 function pumpQueue() { 7797 var job; 7798 7799 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 7800 job = queue.shift(); 7801 activeRequests += 1; 7802 7803 (function (currentJob) { 7804 requestRule(currentJob.productId).then(function (rule) { 7805 finishJob(currentJob, rule); 7806 }, function () { 7807 finishJob(currentJob, null); 7808 }); 7809 }(job)); 7810 } 7811 } 7812 7813 function getRule(productId) { 7814 var resolver; 7815 var promise; 7816 7817 if (cache.has(productId)) { 7818 return Promise.resolve(cache.get(productId)); 7819 } 7820 7821 if (pending.has(productId)) { 7822 return pending.get(productId); 7823 } 7824 7825 promise = new Promise(function (resolve) { 7826 resolver = resolve; 7827 }); 7828 7829 pending.set(productId, promise); 7830 queue.push({ 7831 productId: productId, 7832 resolve: resolver 7833 }); 7834 pumpQueue(); 7835 7836 return promise; 7837 } 7838 7839 function findBadge(card) { 7840 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 7841 } 7842 7843 function clearBadge(card) { 7844 var badge = findBadge(card); 7845 var image = card.querySelector('.product-header > .w-100 > .image'); 7846 7847 if (badge && badge.parentNode) { 7848 badge.parentNode.removeChild(badge); 7849 } 7850 7851 if (image) { 7852 image.classList.remove(HOST_CLASS); 7853 } 7854 7855 card.removeAttribute('data-farmacam-prescription-level'); 7856 } 7857 7858 function applyBadge(card, productId, rule) { 7859 var image; 7860 var badge; 7861 7862 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 7863 return false;
7864 } 7865 7866 clearBadge(card); 7867 7868 if (!rule) { 7869 return true; 7870 } 7871 7872 image = card.querySelector('.product-header > .w-100 > .image'); 7873 if (!image) { 7874 return false; 7875 } 7876 7877 badge = document.createElement('span'); 7878 badge.className = BADGE_CLASS; 7879 badge.setAttribute('data-farmacam-generated', 'true'); 7880 badge.setAttribute('data-farmacam-prescription-level', rule.level); 7881 badge.setAttribute('role', 'note'); 7882 badge.textContent = rule.text; 7883 7884 image.classList.add(HOST_CLASS); 7885 image.insertBefore(badge, image.firstChild); 7886 card.setAttribute('data-farmacam-prescription-level', rule.level); 7887 7888 return true; 7889 } 7890 7891 function processCard(card) { 7892 var productId; 7893 var previousState; 7894 var currentState; 7895 7896 if (!card || card.nodeType !== 1) { 7897 return; 7898 } 7899 7900 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 7901 return; 7902 } 7903 7904 productId = normalizeProductId(card.getAttribute('data-id')); 7905 previousState = cardStates.get(card); 7906 7907 if (!productId) { 7908 clearBadge(card); 7909 cardStates.delete(card); 7910 return; 7911 } 7912 7913 if ( 7914 previousState && 7915 previousState.productId === productId && 7916 previousState.status === 'loading' 7917 ) { 7918 return; 7919 } 7920 7921 if ( 7922 previousState && 7923 previousState.productId === productId && 7924 previousState.status === 'processed' 7925 ) { 7926 if (!previousState.rule || findBadge(card)) { 7927 return; 7928 } 7929 } 7930 7931 if (!previousState || previousState.productId !== productId) { 7932 clearBadge(card); 7933 } 7934 7935 currentState = { 7936 productId: productId, 7937 status: 'loading', 7938 rule: null 7939 }; 7940 cardStates.set(card, currentState); 7941 7942 getRule(productId).then(function (rule) { 7943 var applied; 7944 7945 if ( 7946 cardStates.get(card) !== currentState || 7947 normalizeProductId(card.getAttribute('data-id')) !== productId 7948 ) { 7949 return; 7950 } 7951 7952 applied = applyBadge(card, productId, rule); 7953 currentState.rule = rule; 7954 currentState.status = applied ? 'processed' : 'waiting-image'; 7955 }); 7956 } 7957 7958 function scan(root) { 7959 var cards; 7960 var index; 7961 7962 if (!root) { 7963 return; 7964 } 7965 7966 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 7967 processCard(root); 7968 } 7969 7970 if (!root.querySelectorAll) { 7971 return; 7972 } 7973 7974 cards = root.querySelectorAll(CARD_SELECTOR); 7975 for (index = 0; index < cards.length; index += 1) { 7976 processCard(cards[index]); 7977 } 7978 } 7979 7980 function startObserver() { 7981 var observer; 7982 7983 if (!window.MutationObserver || !document.documentElement) { 7984 return; 7985 } 7986 7987 observer = new MutationObserver(function (mutations) { 7988 var mutationIndex; 7989 var nodeIndex; 7990 var mutation; 7991 var node; 7992 var ownerCard; 7993 7994 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 7995 mutation = mutations[mutationIndex]; 7996 7997 if (mutation.type === 'attributes') { 7998 processCard(mutation.target); 7999 continue; 8000 } 8001 8002 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 8003 node = mutation.addedNodes[nodeIndex]; 8004 if (node.nodeType !== 1) { 8005 continue; 8006 } 8007 8008 scan(node); 8009 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 8010 if (ownerCard) { 8011 processCard(ownerCard); 8012 } 8013 } 8014 } 8015 }); 8016 8017 observer.observe(document.documentElement, { 8018 childList: true, 8019 subtree: true, 8020 attributes: true, 8021 attributeFilter: ['data-id'] 8022 }); 8023 8024 window[GLOBAL_KEY].observer = observer; 8025 } 8026 8027 window[GLOBAL_KEY] = { 8028 version: '1.1.0', 8029 cache: cache, 8030 pending: pending, 8031 cardStates: cardStates, 8032 scan: scan, 8033 processCard: processCard, 8034 observer: null 8035 }; 8036 8037 document.addEventListener('load', onTrayScriptLoad, true); 8038 attachTrayAjaxCache(); 8039 injectStyles(); 8040 scan(document); 8041 startObserver(); 8042 8043 if (document.readyState === 'loading') { 8044 document.addEventListener('DOMContentLoaded', function () { 8045 attachTrayAjaxCache(); 8046 scan(document); 8047 }); 8048 } 8049}(window, document)); 8050</script>
8050 8051 </div> 8052 <div 8053 class="swiper-slide fixWidthBoxProduct item"> 8054 8055 8056 8057 8058<div class="product animate open_cart" 8059 data-id="125245604" 8060 data-farmacam-related-categories="," 8061 data-ga4-id="125245604" 8062 data-ga4-name="Senomat" 8063 data-ga4-price="69.00" 8064 data-ga4-brand="Farmacam" 8065 data-ga4-category="Tipo de Produto;Manipulados;" 8066 > 8067 8068 <div class="product-header"> 8069 8070 <div class="w-100"> 8071 8072 8073 8074 8075 8076 8077 8078 <div class="product-tags-circle"> 8079 8080 8081 <div class="tag-circle discount tag-icone tag-icone1"> 8082 <svg fill="none" height="16" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 8083 <path stroke-linecap="round" stroke-linejoin="round" d="M15.362 5.214A8.252 8.252 0 0112 21 8.25 8.25 0 016.038 7.048 8.287 8.287 0 009 9.6a8.983 8.983 0 013.361-6.867 8.21 8.21 0 003 2.48z"></path> 8084 <path stroke-linecap="round" stroke-linejoin="round" d="M12 18a3.75 3.75 0 00.495-7.467 5.99 5.99 0 00-1.925 3.546 5.974 5.974 0 01-2.133-1A3.75 3.75 0 0012 18z"></path> 8085 </svg> 8086 <span>Lançamento</span> 8087 </div> 8088 8089 8090 </div> 8091 8092 8093 8094 <div class="product-tags " data-tags-count="1"> 8095 8096 8097 8098 8099 8100 </div> 8101 8102 8103 8104 <div class="image has-image "> 8105 8106 <a title="Senomat" href="https://www.farmacam.com.br/senomat" class="space-image"> 8107 <img class="hori-quad imagem-produto-1 " src="https://images.tcdn.com.br/img/img_prod/1063102/senomat_1_20260722102502_76f78ba30c8c.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/senomat_1_20260722102502_76f78ba30c8c.png" alt="Senomat"> 8108 <img class="imagem-produto-2" src="https://images.tcdn.com.br/img/img_prod/1063102/senomat_2_20260722102502_85675acbc317.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/senomat_2_20260722102502_85675acbc317.png" alt="Senomat"> 8109 </a> 8110 8111 </div> 8112 8113 8114 8115 8116 8117 </div> 8118 8119 </div> 8120 8121 <div class="product-body"> 8122 8123 <a title="Senomat" class="product-info" href="https://www.farmacam.com.br/senomat"> 8124 8125 <div class="product-info-dados"> 8126 8127 8128 8129 8130 8131 8132 <div class="product-name"> 8133 Senomat 8134 </div> 8135 8136 8137 8138 <div class="product-price"> 8139 8140 <span class="product-message"> 8141 Esse acabou :( 8142 <span class="notify-me"> 8143 Avise-me quando chegar 8144 <i class="icon icon-arrow-right"></i> 8145 </span> 8146</span> 8147 </div> 8148 8149 </div> 8150 8151 </a> 8152 8153 </div> 8154 8155 8156 <div class="product-footer"> 8157 8158 8159 </div> 8160 8161 8162</div> 8163
8164<script> 8165(function (window, document) { 8166 'use strict'; 8167 8168 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 8169 8170 if (window[GLOBAL_KEY]) { 8171 return; 8172 } 8173 8174 if (!window.Map || !window.WeakMap || !window.Promise) { 8175 return; 8176 } 8177 8178 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 8179 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 8180 '#vitrine-personalizada .product[data-id]'; 8181 var BADGE_CLASS = 'farmacam-prescription-badge'; 8182 var HOST_CLASS = 'farmacam-prescription-badge-host'; 8183 var MAX_CONCURRENT_REQUESTS = 6; 8184 var REQUEST_TIMEOUT_MS = 12000; 8185 8186 var rules = { 8187 '294': { 8188 level: '294', 8189 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 8190 }, 8191 '296': { 8192 level: '296', 8193 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 8194 }, 8195 '298': { 8196 level: '298', 8197 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 8198 } 8199 }; 8200 8201 var cache = new Map(); 8202 var pending = new Map(); 8203 var cardStates = new WeakMap(); 8204 var queue = []; 8205 var activeRequests = 0; 8206 var trayAjaxHooked = false; 8207 8208 function injectStyles() { 8209 if (document.getElementById('farmacam-prescription-cards-style')) { 8210 return; 8211 } 8212 8213 var style = document.createElement('style'); 8214 style.id = 'farmacam-prescription-cards-style'; 8215 style.textContent = [ 8216 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 8217 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 8218 'position:absolute!important;', 8219 'top:52px!important;', 8220 'left:10px!important;', 8221 'z-index:999!important;', 8222 'display:block!important;', 8223 'max-width:calc(100% - 20px)!important;', 8224 'box-sizing:border-box!important;', 8225 'padding:8px 12px!important;', 8226 'color:#fff!important;', 8227 'font-family:inherit!important;', 8228 'font-size:13px!important;', 8229 'font-weight:900!important;', 8230 'line-height:1.15!important;', 8231 'text-align:center!important;', 8232 'text-transform:uppercase!important;', 8233 'letter-spacing:.3px!important;', 8234 'white-space:normal!important;', 8235 'overflow-wrap:break-word!important;', 8236 'border-radius:3px!important;', 8237 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 8238 'pointer-events:none!important;', 8239 '}', 8240 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 8241 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 8242 'background:#d70008!important;', 8243 '}', 8244 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 8245 'background:#000!important;', 8246 '}', 8247 '@media (max-width:767px){', 8248 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 8249 'top:42px!important;', 8250 'left:6px!important;', 8251 'max-width:calc(100% - 12px)!important;', 8252 'padding:6px 8px!important;', 8253 'font-size:10px!important;', 8254 '}', 8255 '}' 8256 ].join(''); 8257 8258 (document.head || document.documentElement).appendChild(style); 8259 } 8260 8261 function normalizeProductId(value) { 8262 var id = String(value == null ? '' : value).trim(); 8263 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 8264 } 8265 8266 function classifyRelatedCategories(relatedCategories) { 8267 var found = { 8268 '292': false, 8269 '294': false, 8270 '296': false, 8271 '298': false 8272 }; 8273 8274 function inspect(value, depth) { 8275 var index; 8276 var normalized; 8277 8278 if (value == null || depth > 8) { 8279 return; 8280 } 8281 8282 if (Array.isArray(value)) { 8283 for (index = 0; index < value.length; index += 1) { 8284 inspect(value[index], depth + 1); 8285 } 8286 return; 8287 } 8288 8289 if (typeof value === 'object') { 8290 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 8291 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 8292 inspect(value.id, depth + 1); 8293 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 8294 inspect(value.category_id, depth + 1); 8295 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 8296 inspect(value.Category, depth + 1); 8297 } 8298 return; 8299 } 8300 8301 if (typeof value !== 'string' && typeof value !== 'number') { 8302 return; 8303 } 8304 normalized = normalizeProductId(value); 8305 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 8306 found[normalized] = true; 8307 } 8308 } 8309 8310 inspect(relatedCategories, 0); 8311 8312 if (found['298']) { 8313 return rules['298']; 8314 } 8315 if (found['296']) { 8316 return rules['296']; 8317 } 8318 if (found['294']) { 8319 return rules['294']; 8320 } 8321 8322 // 292 e qualquer classificacao desconhecida ficam sem tarja. 8323 return null; 8324 } 8325 8326 function ruleFromPayload(payload, productId) { 8327 var product = payload && payload.Product; 8328 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 8329 return null; 8330 } 8331 return classifyRelatedCategories(product && product.related_categories); 8332 } 8333 8334 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 8335 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 8336 function attachTrayAjaxCache() { 8337 var jq = window.jQuery; 8338 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 8339 return; 8340 } 8341
8342 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 8343 var url; 8344 var match; 8345 var productId; 8346 var payload; 8347 try { 8348 url = new URL(settings.url, window.location.href); 8349 if (url.origin !== window.location.origin) { 8350 return; 8351 } 8352 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 8353 if (!match) { 8354 return; 8355 } 8356 productId = normalizeProductId(match[1]); 8357 if (!cache.has(productId) && !pending.has(productId)) { 8358 payload = data || xhr.responseJSON; 8359 if (typeof payload === 'string') { 8360 payload = JSON.parse(payload); 8361 } 8362 if (!payload || !payload.Product || 8363 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 8364 return; 8365 } 8366 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 8367 return; 8368 } 8369 cache.set(productId, ruleFromPayload(payload, productId)); 8370 } 8371 } catch (error) { 8372 // Respostas de outras integracoes nao interferem nas tarjas. 8373 } 8374 }); 8375 8376 trayAjaxHooked = true; 8377 document.removeEventListener('load', onTrayScriptLoad, true); 8378 } 8379 8380 function onTrayScriptLoad(event) { 8381 if (event.target && event.target.tagName === 'SCRIPT') { 8382 attachTrayAjaxCache(); 8383 } 8384 } 8385 8386 function requestRule(productId) { 8387 var controller = null; 8388 var timeoutId = null; 8389 var options = { 8390 credentials: 'same-origin', 8391 headers: { 8392 'Accept': 'application/json' 8393 } 8394 }; 8395 var request; 8396 8397 if (typeof window.fetch !== 'function') { 8398 return Promise.resolve(null); 8399 } 8400 8401 if (typeof window.AbortController === 'function') { 8402 controller = new window.AbortController(); 8403 options.signal = controller.signal; 8404 timeoutId = window.setTimeout(function () { 8405 controller.abort(); 8406 }, REQUEST_TIMEOUT_MS); 8407 } 8408 8409 try { 8410 request = window.fetch( 8411 '/web_api/products/' + encodeURIComponent(productId), 8412 options 8413 ); 8414 } catch (error) { 8415 if (timeoutId !== null) { 8416 window.clearTimeout(timeoutId); 8417 } 8418 return Promise.resolve(null); 8419 } 8420 8421 return request.then(function (response) { 8422 if (!response.ok) { 8423 throw new Error('HTTP ' + response.status); 8424 } 8425 return response.json(); 8426 }).then(function (payload) { 8427 return ruleFromPayload(payload, productId); 8428 }).then(function (rule) { 8429 if (timeoutId !== null) { 8430 window.clearTimeout(timeoutId); 8431 } 8432 return rule; 8433 }, function () { 8434 if (timeoutId !== null) { 8435 window.clearTimeout(timeoutId); 8436 } 8437 8438 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 8439 return null; 8440 }); 8441 } 8442 8443 function finishJob(job, rule) { 8444 cache.set(job.productId, rule); 8445 pending.delete(job.productId); 8446 activeRequests -= 1; 8447 job.resolve(rule); 8448 pumpQueue(); 8449 } 8450 8451 function pumpQueue() { 8452 var job; 8453 8454 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 8455 job = queue.shift(); 8456 activeRequests += 1; 8457 8458 (function (currentJob) { 8459 requestRule(currentJob.productId).then(function (rule) { 8460 finishJob(currentJob, rule); 8461 }, function () { 8462 finishJob(currentJob, null); 8463 }); 8464 }(job)); 8465 } 8466 } 8467 8468 function getRule(productId) { 8469 var resolver; 8470 var promise; 8471 8472 if (cache.has(productId)) { 8473 return Promise.resolve(cache.get(productId)); 8474 } 8475 8476 if (pending.has(productId)) { 8477 return pending.get(productId); 8478 } 8479 8480 promise = new Promise(function (resolve) { 8481 resolver = resolve; 8482 }); 8483 8484 pending.set(productId, promise); 8485 queue.push({ 8486 productId: productId, 8487 resolve: resolver 8488 }); 8489 pumpQueue(); 8490 8491 return promise; 8492 } 8493 8494 function findBadge(card) { 8495 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 8496 } 8497 8498 function clearBadge(card) { 8499 var badge = findBadge(card); 8500 var image = card.querySelector('.product-header > .w-100 > .image'); 8501 8502 if (badge && badge.parentNode) { 8503 badge.parentNode.removeChild(badge); 8504 } 8505 8506 if (image) { 8507 image.classList.remove(HOST_CLASS); 8508 } 8509 8510 card.removeAttribute('data-farmacam-prescription-level'); 8511 } 8512 8513 function applyBadge(card, productId, rule) { 8514 var image; 8515 var badge; 8516 8517 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 8518 return false;
8519 } 8520 8521 clearBadge(card); 8522 8523 if (!rule) { 8524 return true; 8525 } 8526 8527 image = card.querySelector('.product-header > .w-100 > .image'); 8528 if (!image) { 8529 return false; 8530 } 8531 8532 badge = document.createElement('span'); 8533 badge.className = BADGE_CLASS; 8534 badge.setAttribute('data-farmacam-generated', 'true'); 8535 badge.setAttribute('data-farmacam-prescription-level', rule.level); 8536 badge.setAttribute('role', 'note'); 8537 badge.textContent = rule.text; 8538 8539 image.classList.add(HOST_CLASS); 8540 image.insertBefore(badge, image.firstChild); 8541 card.setAttribute('data-farmacam-prescription-level', rule.level); 8542 8543 return true; 8544 } 8545 8546 function processCard(card) { 8547 var productId; 8548 var previousState; 8549 var currentState; 8550 8551 if (!card || card.nodeType !== 1) { 8552 return; 8553 } 8554 8555 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 8556 return; 8557 } 8558 8559 productId = normalizeProductId(card.getAttribute('data-id')); 8560 previousState = cardStates.get(card); 8561 8562 if (!productId) { 8563 clearBadge(card); 8564 cardStates.delete(card); 8565 return; 8566 } 8567 8568 if ( 8569 previousState && 8570 previousState.productId === productId && 8571 previousState.status === 'loading' 8572 ) { 8573 return; 8574 } 8575 8576 if ( 8577 previousState && 8578 previousState.productId === productId && 8579 previousState.status === 'processed' 8580 ) { 8581 if (!previousState.rule || findBadge(card)) { 8582 return; 8583 } 8584 } 8585 8586 if (!previousState || previousState.productId !== productId) { 8587 clearBadge(card); 8588 } 8589 8590 currentState = { 8591 productId: productId, 8592 status: 'loading', 8593 rule: null 8594 }; 8595 cardStates.set(card, currentState); 8596 8597 getRule(productId).then(function (rule) { 8598 var applied; 8599 8600 if ( 8601 cardStates.get(card) !== currentState || 8602 normalizeProductId(card.getAttribute('data-id')) !== productId 8603 ) { 8604 return; 8605 } 8606 8607 applied = applyBadge(card, productId, rule); 8608 currentState.rule = rule; 8609 currentState.status = applied ? 'processed' : 'waiting-image'; 8610 }); 8611 } 8612 8613 function scan(root) { 8614 var cards; 8615 var index; 8616 8617 if (!root) { 8618 return; 8619 } 8620 8621 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 8622 processCard(root); 8623 } 8624 8625 if (!root.querySelectorAll) { 8626 return; 8627 } 8628 8629 cards = root.querySelectorAll(CARD_SELECTOR); 8630 for (index = 0; index < cards.length; index += 1) { 8631 processCard(cards[index]); 8632 } 8633 } 8634 8635 function startObserver() { 8636 var observer; 8637 8638 if (!window.MutationObserver || !document.documentElement) { 8639 return; 8640 } 8641 8642 observer = new MutationObserver(function (mutations) { 8643 var mutationIndex; 8644 var nodeIndex; 8645 var mutation; 8646 var node; 8647 var ownerCard; 8648 8649 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 8650 mutation = mutations[mutationIndex]; 8651 8652 if (mutation.type === 'attributes') { 8653 processCard(mutation.target); 8654 continue; 8655 } 8656 8657 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 8658 node = mutation.addedNodes[nodeIndex]; 8659 if (node.nodeType !== 1) { 8660 continue; 8661 } 8662 8663 scan(node); 8664 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 8665 if (ownerCard) { 8666 processCard(ownerCard); 8667 } 8668 } 8669 } 8670 }); 8671 8672 observer.observe(document.documentElement, { 8673 childList: true, 8674 subtree: true, 8675 attributes: true, 8676 attributeFilter: ['data-id'] 8677 }); 8678 8679 window[GLOBAL_KEY].observer = observer; 8680 } 8681 8682 window[GLOBAL_KEY] = { 8683 version: '1.1.0', 8684 cache: cache, 8685 pending: pending, 8686 cardStates: cardStates, 8687 scan: scan, 8688 processCard: processCard, 8689 observer: null 8690 }; 8691 8692 document.addEventListener('load', onTrayScriptLoad, true); 8693 attachTrayAjaxCache(); 8694 injectStyles(); 8695 scan(document); 8696 startObserver(); 8697 8698 if (document.readyState === 'loading') { 8699 document.addEventListener('DOMContentLoaded', function () { 8700 attachTrayAjaxCache(); 8701 scan(document); 8702 }); 8703 } 8704}(window, document)); 8705</script>
8705 8706 </div> 8707 <div 8708 class="swiper-slide fixWidthBoxProduct item"> 8709 8710 8711 8712 8713<div class="product animate open_cart" 8714 data-id="125245730" 8715 data-farmacam-related-categories="," 8716 data-ga4-id="125245730" 8717 data-ga4-name="Curcumicel 185x - Líquida" 8718 data-ga4-price="250.00" 8719 data-ga4-brand="Farmacam" 8720 data-ga4-category="Tipo de Produto;Manipulados;" 8721 > 8722 8723 <div class="product-header"> 8724 8725 <div class="w-100"> 8726 8727 8728 8729 8730 8731 8732 8733 <div class="product-tags-circle"> 8734 8735 8736 <div class="tag-circle discount tag-icone tag-icone1"> 8737 <svg fill="none" height="16" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 8738 <path stroke-linecap="round" stroke-linejoin="round" d="M15.362 5.214A8.252 8.252 0 0112 21 8.25 8.25 0 016.038 7.048 8.287 8.287 0 009 9.6a8.983 8.983 0 013.361-6.867 8.21 8.21 0 003 2.48z"></path> 8739 <path stroke-linecap="round" stroke-linejoin="round" d="M12 18a3.75 3.75 0 00.495-7.467 5.99 5.99 0 00-1.925 3.546 5.974 5.974 0 01-2.133-1A3.75 3.75 0 0012 18z"></path> 8740 </svg> 8741 <span>Lançamento</span> 8742 </div> 8743 8744 8745 </div> 8746 8747 8748 8749 <div class="product-tags " data-tags-count="1"> 8750 8751 8752 8753 8754 8755 </div> 8756 8757 8758 8759 <div class="image "> 8760 8761 <a title="Curcumicel 185x - Líquida" href="https://www.farmacam.com.br/manipulados/curcumicel-185x-liquida" class="space-image"> 8762 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/curcumicel_185x_lquida_1_20260904162411_790defb88625.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/curcumicel_185x_lquida_1_20260904162411_790defb88625.png" alt="Curcumicel 185x - Líquida"> 8763 </a> 8764 8765 </div> 8766 8767 8768 8769 8770 8771 </div> 8772 8773 </div> 8774 8775 <div class="product-body"> 8776 8777 <a title="Curcumicel 185x - Líquida" class="product-info" href="https://www.farmacam.com.br/manipulados/curcumicel-185x-liquida"> 8778 8779 <div class="product-info-dados"> 8780 8781 8782 8783 8784 8785 8786 <div class="product-name"> 8787 Curcumicel 185x - Líquida 8788 </div> 8789 8790 8791 8792 <div class="product-price"> 8793 8794 8795 8796 8797 8798 <span class="product-has-variants text-center"> 8799 A partir de 8800 </span> 8801 8802<div class="price display-cash"> 8803 8804 8805 <span class="current-price "> 8806 R$ 250,00 8807 8808 </span> 8809 8810 <span class="product-installments"> 8811 8812 </span> 8813 8814</div> 8815 </div> 8816 8817 </div> 8818 8819 </a> 8820 8821 </div> 8822 8823 8824 <div class="product-footer"> 8825 8826 8827 <div class="w-100"> 8828 8829 8830 8831<div class="product-rating-catalog"> 8832 8833 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 8834 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 8835 </svg> 8836 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 8837 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 8838 </svg> 8839 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 8840 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 8841 </svg> 8842 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 8843 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 8844 </svg> 8845 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 8846 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 8847 </svg> 8848 8849 8850 <a title="Ver avaliações de Curcumicel 185x - Líquida" href="https://www.farmacam.com.br/manipulados/curcumicel-185x-liquid
8850a#comments" class="total"> 8851 Seja o primeiro 8852 </a> 8853 8854 </div> 8855 8856 8857 8858 <div class="config-variacoes-compra"> 8859 8860 8861 8862 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245730"> 8863 <input type="hidden" name="product_id" value="125245730"> 8864 <input type="hidden" name="without_stock_sale" value=""> 8865 8866 <input type="hidden" name="variacao" id="selectedVariant" value=""> 8867 <input type="hidden" name="estoque" value=""> 8868 8869 8870 8871 <ul class="paleta-cores"> 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 8947 8948 8949 8950 8951 8952 8953 8954 8955 8956 8957 8958 8959 8960 8961 8962 8963 8964 8965 8966 8967 8968 8969 8970 8971 8972 8973 8974 8975 8976 8977 8978 8979 8980 8981 8982 8983 8984 8985 8986 8987 8988 8989 8990 8991 8992 8993 8994 8995 8996 8997 8998 8999 9000 9001 9002 9003 9004 9005 9006 9007 9008 9009 9010 9011 9012 9013 9014 9015 9016 9017 9018 9019 9020 9021 9022 9023 9024 9025 9026 9027 9028 9029 9030 9031 9032 9033 9034 9035 9036 9037 9038 9039 9040 9041 9042 9043 9044 9045 9046 9047 9048 9049 9050 9051 9052 9053 9054 9055 9056 9057 9058 9059 9060 9061 9062 9063 9064 9065 9066 9067 9068 9069 9070 9071 9072 9073 9074 9075 9076 9077 9078 9079 9080 9081 9082 9083 9084 9085 9086 9087 9088 9089 9090 9091 9092 9093 9094 9095 9096 9097 9098 9099 9100 9101 9102 9103 9104 9105 9106 9107 9108 9109 9110 9111 9112 9113 9114 9115 9116 9117 9118 9119 9120 9121 9122 9123 9124 9125 9126 9127 9128 9129 9130 9131 9132 9133 9134 9135 9136 9137 9138 9139 9140 9141 9142 9143 9144 9145 9146 9147 9148 9149 9150 9151 9152 9153 9154 9155 9156 9157 9158 9159 9160 9161 9162 9163 9164 9165 9166 9167 9168 9169 9170 9171 9172 9173 9174 9175 9176 9177 9178 9179 9180 9181 9182 9183 9184 9185 9186 9187 9188 9189 9190 9191 9192 9193 9194 9195 9196 9197 9198 9199 9200 9201 9202 9203 9204 9205 9206 9207 9208 9209 9210 9211 9212 9213 9214 9215 9216 9217 9218 9219 9220 9221 9222 9223 9224 9225 9226 9227 9228 9229 9230 9231 9232 9233 9234 9235 9236 9237 9238 9239 9240 9241 9242 9243 9244 9245 9246 9247 9248 9249 9250 9251 9252 9253 9254 9255 9256 9257 9258 9259 9260 9261 9262 9263 9264 9265 9266 9267 9268 9269 9270 9271 9272 9273 9274 9275 9276 9277 9278 9279 9280 9281 9282 9283 9284 9285 9286 9287 9288 9289 9290 </ul> 9291 <!-- Fim Paleta de Cores --> 9292 9293 9294 9295 9296 9297 9298 9299 9300 9301 9302 9303 9304 9305 9306
9306 9307 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 9308 <option disabled="disabled" value=""> 9309 Selecione 9310 </option> 9311 9312 9313 <option value="30810" produto="125245730" estoque="10000">20 ml</option> 9314 9315 9316 9317 9318 <option value="30812" produto="125245730" estoque="10000">30 ml</option> 9319 9320 9321 9322 9323 <option value="30814" produto="125245730" estoque="10000">40 ml</option> 9324 9325 9326 </select> 9327 9328 9329 <select class="select-cor" style="display: none;" title="Campo Cor"> 9330 </select> 9331 9332 9333 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 9334 <div class="alerta-estoque"></div> 9335 <div class="alerta-adicionado"></div> 9336 9337 <div class="acao-compra"> 9338 9339 <div class="quantidade-box"> 9340 <div class="quantidade-box-input"> 9341 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
9341stoque="30000" /> 9342 </div> 9343 <div class="quantidade-box-controles"> 9344 <div class="quantidade-box-controles-itens" data-item="mais"> 9345 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 9346 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 9347 </svg> 9348 </div> 9349 <div class="quantidade-box-controles-itens" data-item="menus"> 9350 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 9351 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 9352 </svg> 9353 </div> 9354 </div> 9355 </div> 9356 9357 9358 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245730"> 9359 9360 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 9361 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 9362 9363 9364 9365 9366 9367 9368 <!-- Cesta de Compras --> 9369 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 9370 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 9371 </svg> 9372 9373 9374 9375 Comprar 9376 9377 9378 </button> 9379 <!-- </form> --> 9380 9381 </div> 9382 9383</div> 9384 9385 9386 </div> 9387 9388 </div> 9389 9390 9391</div> 9392
9393<script> 9394(function (window, document) { 9395 'use strict'; 9396 9397 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 9398 9399 if (window[GLOBAL_KEY]) { 9400 return; 9401 } 9402 9403 if (!window.Map || !window.WeakMap || !window.Promise) { 9404 return; 9405 } 9406 9407 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 9408 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 9409 '#vitrine-personalizada .product[data-id]'; 9410 var BADGE_CLASS = 'farmacam-prescription-badge'; 9411 var HOST_CLASS = 'farmacam-prescription-badge-host'; 9412 var MAX_CONCURRENT_REQUESTS = 6; 9413 var REQUEST_TIMEOUT_MS = 12000; 9414 9415 var rules = { 9416 '294': { 9417 level: '294', 9418 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 9419 }, 9420 '296': { 9421 level: '296', 9422 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 9423 }, 9424 '298': { 9425 level: '298', 9426 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 9427 } 9428 }; 9429 9430 var cache = new Map(); 9431 var pending = new Map(); 9432 var cardStates = new WeakMap(); 9433 var queue = []; 9434 var activeRequests = 0; 9435 var trayAjaxHooked = false; 9436 9437 function injectStyles() { 9438 if (document.getElementById('farmacam-prescription-cards-style')) { 9439 return; 9440 } 9441 9442 var style = document.createElement('style'); 9443 style.id = 'farmacam-prescription-cards-style'; 9444 style.textContent = [ 9445 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 9446 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 9447 'position:absolute!important;', 9448 'top:52px!important;', 9449 'left:10px!important;', 9450 'z-index:999!important;', 9451 'display:block!important;', 9452 'max-width:calc(100% - 20px)!important;', 9453 'box-sizing:border-box!important;', 9454 'padding:8px 12px!important;', 9455 'color:#fff!important;', 9456 'font-family:inherit!important;', 9457 'font-size:13px!important;', 9458 'font-weight:900!important;', 9459 'line-height:1.15!important;', 9460 'text-align:center!important;', 9461 'text-transform:uppercase!important;', 9462 'letter-spacing:.3px!important;', 9463 'white-space:normal!important;', 9464 'overflow-wrap:break-word!important;', 9465 'border-radius:3px!important;', 9466 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 9467 'pointer-events:none!important;', 9468 '}', 9469 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 9470 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 9471 'background:#d70008!important;', 9472 '}', 9473 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 9474 'background:#000!important;', 9475 '}', 9476 '@media (max-width:767px){', 9477 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 9478 'top:42px!important;', 9479 'left:6px!important;', 9480 'max-width:calc(100% - 12px)!important;', 9481 'padding:6px 8px!important;', 9482 'font-size:10px!important;', 9483 '}', 9484 '}' 9485 ].join(''); 9486 9487 (document.head || document.documentElement).appendChild(style); 9488 } 9489 9490 function normalizeProductId(value) { 9491 var id = String(value == null ? '' : value).trim(); 9492 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 9493 } 9494 9495 function classifyRelatedCategories(relatedCategories) { 9496 var found = { 9497 '292': false, 9498 '294': false, 9499 '296': false, 9500 '298': false 9501 }; 9502 9503 function inspect(value, depth) { 9504 var index; 9505 var normalized; 9506 9507 if (value == null || depth > 8) { 9508 return; 9509 } 9510 9511 if (Array.isArray(value)) { 9512 for (index = 0; index < value.length; index += 1) { 9513 inspect(value[index], depth + 1); 9514 } 9515 return; 9516 } 9517 9518 if (typeof value === 'object') { 9519 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 9520 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 9521 inspect(value.id, depth + 1); 9522 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 9523 inspect(value.category_id, depth + 1); 9524 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 9525 inspect(value.Category, depth + 1); 9526 } 9527 return; 9528 } 9529 9530 if (typeof value !== 'string' && typeof value !== 'number') { 9531 return; 9532 } 9533 normalized = normalizeProductId(value); 9534 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 9535 found[normalized] = true; 9536 } 9537 } 9538 9539 inspect(relatedCategories, 0); 9540 9541 if (found['298']) { 9542 return rules['298']; 9543 } 9544 if (found['296']) { 9545 return rules['296']; 9546 } 9547 if (found['294']) { 9548 return rules['294']; 9549 } 9550 9551 // 292 e qualquer classificacao desconhecida ficam sem tarja. 9552 return null; 9553 } 9554 9555 function ruleFromPayload(payload, productId) { 9556 var product = payload && payload.Product; 9557 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 9558 return null; 9559 } 9560 return classifyRelatedCategories(product && product.related_categories); 9561 } 9562 9563 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 9564 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 9565 function attachTrayAjaxCache() { 9566 var jq = window.jQuery; 9567 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 9568 return; 9569 } 9570
9571 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 9572 var url; 9573 var match; 9574 var productId; 9575 var payload; 9576 try { 9577 url = new URL(settings.url, window.location.href); 9578 if (url.origin !== window.location.origin) { 9579 return; 9580 } 9581 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 9582 if (!match) { 9583 return; 9584 } 9585 productId = normalizeProductId(match[1]); 9586 if (!cache.has(productId) && !pending.has(productId)) { 9587 payload = data || xhr.responseJSON; 9588 if (typeof payload === 'string') { 9589 payload = JSON.parse(payload); 9590 } 9591 if (!payload || !payload.Product || 9592 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 9593 return; 9594 } 9595 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 9596 return; 9597 } 9598 cache.set(productId, ruleFromPayload(payload, productId)); 9599 } 9600 } catch (error) { 9601 // Respostas de outras integracoes nao interferem nas tarjas. 9602 } 9603 }); 9604 9605 trayAjaxHooked = true; 9606 document.removeEventListener('load', onTrayScriptLoad, true); 9607 } 9608 9609 function onTrayScriptLoad(event) { 9610 if (event.target && event.target.tagName === 'SCRIPT') { 9611 attachTrayAjaxCache(); 9612 } 9613 } 9614 9615 function requestRule(productId) { 9616 var controller = null; 9617 var timeoutId = null; 9618 var options = { 9619 credentials: 'same-origin', 9620 headers: { 9621 'Accept': 'application/json' 9622 } 9623 }; 9624 var request; 9625 9626 if (typeof window.fetch !== 'function') { 9627 return Promise.resolve(null); 9628 } 9629 9630 if (typeof window.AbortController === 'function') { 9631 controller = new window.AbortController(); 9632 options.signal = controller.signal; 9633 timeoutId = window.setTimeout(function () { 9634 controller.abort(); 9635 }, REQUEST_TIMEOUT_MS); 9636 } 9637 9638 try { 9639 request = window.fetch( 9640 '/web_api/products/' + encodeURIComponent(productId), 9641 options 9642 ); 9643 } catch (error) { 9644 if (timeoutId !== null) { 9645 window.clearTimeout(timeoutId); 9646 } 9647 return Promise.resolve(null); 9648 } 9649 9650 return request.then(function (response) { 9651 if (!response.ok) { 9652 throw new Error('HTTP ' + response.status); 9653 } 9654 return response.json(); 9655 }).then(function (payload) { 9656 return ruleFromPayload(payload, productId); 9657 }).then(function (rule) { 9658 if (timeoutId !== null) { 9659 window.clearTimeout(timeoutId); 9660 } 9661 return rule; 9662 }, function () { 9663 if (timeoutId !== null) { 9664 window.clearTimeout(timeoutId); 9665 } 9666 9667 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 9668 return null; 9669 }); 9670 } 9671 9672 function finishJob(job, rule) { 9673 cache.set(job.productId, rule); 9674 pending.delete(job.productId); 9675 activeRequests -= 1; 9676 job.resolve(rule); 9677 pumpQueue(); 9678 } 9679 9680 function pumpQueue() { 9681 var job; 9682 9683 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 9684 job = queue.shift(); 9685 activeRequests += 1; 9686 9687 (function (currentJob) { 9688 requestRule(currentJob.productId).then(function (rule) { 9689 finishJob(currentJob, rule); 9690 }, function () { 9691 finishJob(currentJob, null); 9692 }); 9693 }(job)); 9694 } 9695 } 9696 9697 function getRule(productId) { 9698 var resolver; 9699 var promise; 9700 9701 if (cache.has(productId)) { 9702 return Promise.resolve(cache.get(productId)); 9703 } 9704 9705 if (pending.has(productId)) { 9706 return pending.get(productId); 9707 } 9708 9709 promise = new Promise(function (resolve) { 9710 resolver = resolve; 9711 }); 9712 9713 pending.set(productId, promise); 9714 queue.push({ 9715 productId: productId, 9716 resolve: resolver 9717 }); 9718 pumpQueue(); 9719 9720 return promise; 9721 } 9722 9723 function findBadge(card) { 9724 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 9725 } 9726 9727 function clearBadge(card) { 9728 var badge = findBadge(card); 9729 var image = card.querySelector('.product-header > .w-100 > .image'); 9730 9731 if (badge && badge.parentNode) { 9732 badge.parentNode.removeChild(badge); 9733 } 9734 9735 if (image) { 9736 image.classList.remove(HOST_CLASS); 9737 } 9738 9739 card.removeAttribute('data-farmacam-prescription-level'); 9740 } 9741 9742 function applyBadge(card, productId, rule) { 9743 var image; 9744 var badge; 9745 9746 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 9747 return false;
9748 } 9749 9750 clearBadge(card); 9751 9752 if (!rule) { 9753 return true; 9754 } 9755 9756 image = card.querySelector('.product-header > .w-100 > .image'); 9757 if (!image) { 9758 return false; 9759 } 9760 9761 badge = document.createElement('span'); 9762 badge.className = BADGE_CLASS; 9763 badge.setAttribute('data-farmacam-generated', 'true'); 9764 badge.setAttribute('data-farmacam-prescription-level', rule.level); 9765 badge.setAttribute('role', 'note'); 9766 badge.textContent = rule.text; 9767 9768 image.classList.add(HOST_CLASS); 9769 image.insertBefore(badge, image.firstChild); 9770 card.setAttribute('data-farmacam-prescription-level', rule.level); 9771 9772 return true; 9773 } 9774 9775 function processCard(card) { 9776 var productId; 9777 var previousState; 9778 var currentState; 9779 9780 if (!card || card.nodeType !== 1) { 9781 return; 9782 } 9783 9784 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 9785 return; 9786 } 9787 9788 productId = normalizeProductId(card.getAttribute('data-id')); 9789 previousState = cardStates.get(card); 9790 9791 if (!productId) { 9792 clearBadge(card); 9793 cardStates.delete(card); 9794 return; 9795 } 9796 9797 if ( 9798 previousState && 9799 previousState.productId === productId && 9800 previousState.status === 'loading' 9801 ) { 9802 return; 9803 } 9804 9805 if ( 9806 previousState && 9807 previousState.productId === productId && 9808 previousState.status === 'processed' 9809 ) { 9810 if (!previousState.rule || findBadge(card)) { 9811 return; 9812 } 9813 } 9814 9815 if (!previousState || previousState.productId !== productId) { 9816 clearBadge(card); 9817 } 9818 9819 currentState = { 9820 productId: productId, 9821 status: 'loading', 9822 rule: null 9823 }; 9824 cardStates.set(card, currentState); 9825 9826 getRule(productId).then(function (rule) { 9827 var applied; 9828 9829 if ( 9830 cardStates.get(card) !== currentState || 9831 normalizeProductId(card.getAttribute('data-id')) !== productId 9832 ) { 9833 return; 9834 } 9835 9836 applied = applyBadge(card, productId, rule); 9837 currentState.rule = rule; 9838 currentState.status = applied ? 'processed' : 'waiting-image'; 9839 }); 9840 } 9841 9842 function scan(root) { 9843 var cards; 9844 var index; 9845 9846 if (!root) { 9847 return; 9848 } 9849 9850 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 9851 processCard(root); 9852 } 9853 9854 if (!root.querySelectorAll) { 9855 return; 9856 } 9857 9858 cards = root.querySelectorAll(CARD_SELECTOR); 9859 for (index = 0; index < cards.length; index += 1) { 9860 processCard(cards[index]); 9861 } 9862 } 9863 9864 function startObserver() { 9865 var observer; 9866 9867 if (!window.MutationObserver || !document.documentElement) { 9868 return; 9869 } 9870 9871 observer = new MutationObserver(function (mutations) { 9872 var mutationIndex; 9873 var nodeIndex; 9874 var mutation; 9875 var node; 9876 var ownerCard; 9877 9878 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 9879 mutation = mutations[mutationIndex]; 9880 9881 if (mutation.type === 'attributes') { 9882 processCard(mutation.target); 9883 continue; 9884 } 9885 9886 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 9887 node = mutation.addedNodes[nodeIndex]; 9888 if (node.nodeType !== 1) { 9889 continue; 9890 } 9891 9892 scan(node); 9893 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 9894 if (ownerCard) { 9895 processCard(ownerCard); 9896 } 9897 } 9898 } 9899 }); 9900 9901 observer.observe(document.documentElement, { 9902 childList: true, 9903 subtree: true, 9904 attributes: true, 9905 attributeFilter: ['data-id'] 9906 }); 9907 9908 window[GLOBAL_KEY].observer = observer; 9909 } 9910 9911 window[GLOBAL_KEY] = { 9912 version: '1.1.0', 9913 cache: cache, 9914 pending: pending, 9915 cardStates: cardStates, 9916 scan: scan, 9917 processCard: processCard, 9918 observer: null 9919 }; 9920 9921 document.addEventListener('load', onTrayScriptLoad, true); 9922 attachTrayAjaxCache(); 9923 injectStyles(); 9924 scan(document); 9925 startObserver(); 9926 9927 if (document.readyState === 'loading') { 9928 document.addEventListener('DOMContentLoaded', function () { 9929 attachTrayAjaxCache(); 9930 scan(document); 9931 }); 9932 } 9933}(window, document)); 9934</script>
9934 9935 </div> 9936 <div 9937 class="swiper-slide fixWidthBoxProduct item"> 9938 9939 9940 9941 9942<div class="product animate open_cart" 9943 data-id="125245708" 9944 data-farmacam-related-categories="," 9945 data-ga4-id="125245708" 9946 data-ga4-name="Modulação Do Receptor De Glutamato -NMDA Com Magtein (Selo)" 9947 data-ga4-price="155.00" 9948 data-ga4-brand="Farmacam" 9949 data-ga4-category="Tipo de Produto;Manipulados;" 9950 > 9951 9952 <div class="product-header"> 9953 9954 <div class="w-100"> 9955 9956 9957 9958 9959 9960 9961 9962 <div class="product-tags-circle"> 9963 9964 9965 <div class="tag-circle discount tag-icone tag-icone1"> 9966 <svg fill="none" height="16" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 9967 <path stroke-linecap="round" stroke-linejoin="round" d="M15.362 5.214A8.252 8.252 0 0112 21 8.25 8.25 0 016.038 7.048 8.287 8.287 0 009 9.6a8.983 8.983 0 013.361-6.867 8.21 8.21 0 003 2.48z"></path> 9968 <path stroke-linecap="round" stroke-linejoin="round" d="M12 18a3.75 3.75 0 00.495-7.467 5.99 5.99 0 00-1.925 3.546 5.974 5.974 0 01-2.133-1A3.75 3.75 0 0012 18z"></path> 9969 </svg> 9970 <span>Lançamento</span> 9971 </div> 9972 9973 9974 </div> 9975 9976 9977 9978 <div class="product-tags " data-tags-count="1"> 9979 9980 9981 9982 9983 9984 </div> 9985 9986 9987 9988 <div class="image "> 9989 9990 <a title="Modulação Do Receptor De Glutamato -NMDA Com Magtein (Selo)" href="https://www.farmacam.com.br/manipulados/modulacao-do-receptor-de-glutamato-nmda-com-magtein-selo" class="space-image"> 9991 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/modulao_do_receptor_de_glutamato_nmda_com_magtein_1_20260901162301_4ea9f8b671c2.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/modulao_do_receptor_de_glutamato_nmda_com_magtein_1_20260901162301_4ea9f8b671c2.png" alt="Modulação Do Receptor De Glutamato -NMDA Com Magtein (Selo)"> 9992 </a> 9993 9994 </div> 9995 9996 9997 9998 9999 10000 </div> 10001 10002 </div> 10003 10004 <div class="product-body"> 10005 10006 <a title="Modulação Do Receptor De Glutamato -NMDA Com Magtein (Selo)" class="product-info" href="https://www.farmacam.com.br/manipulados/modulacao-do-receptor-de-glutamato-nmda-com-magtein-selo"> 10007 10008 <div class="product-info-dados"> 10009 10010 10011 10012 10013 10014 10015 <div class="product-name"> 10016 Modulação Do Receptor De Glutamato -NMDA Com Magtein (Selo) 10017 </div> 10018 10019 10020 10021 <div class="product-price"> 10022 10023 10024 10025 10026 10027 <span class="product-has-variants text-center"> 10028 A partir de 10029 </span> 10030 10031<div class="price display-cash"> 10032 10033 10034 <span class="current-price "> 10035 R$ 155,00 10036 10037 </span> 10038 10039 <span class="product-installments"> 10040 10041 </span> 10042 10043</div> 10044 </div> 10045 10046 </div> 10047 10048 </a> 10049 10050 </div> 10051 10052 10053 <div class="product-footer"> 10054 10055 10056 <div class="w-100"> 10057 10058 10059 10060<div class="product-rating-catalog"> 10061 10062 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 10063 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 10064 </svg> 10065 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 10066 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 10067 </svg> 10068 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 10069 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 10070 </svg> 10071 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 10072 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 10073 </svg> 10074 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 10075 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 10076 </svg> 10077 10078 10079 <a title="Ver avaliações de Modulação Do Receptor De Glutamato -NMDA Com Magtein (Selo)" href="https://www.farmacam.com.br/manipulados/modulacao-do-receptor-de-glutamato-nmda-com-magtein-selo#comments" class="total"> 10080 Seja o primeiro 10081 </a> 10082 10083 </div> 10084 10085 10086 10087 <div class="config-variacoes-compra"> 10088 10089 10090 10091 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245708"> 10092 <input type="hidden" name="product_id" value="125245708"> 10093 <input type="hidden" name="without_stock_sale" value=""> 10094 10095 <input type="hidden" name="variacao" id="selectedVariant" value=""> 10096 <input type="hidden" name="estoque" value=""> 10097 10098 10099 10100 <ul class="paleta-cores"> 10101 10102 10103 10104 10105 10106 10107 10108 10109 10110 10111 10112 10113 10114 10115 10116 10117 10118 10119 10120 10121 10122 10123 10124 10125 10126 10127 10128 10129 10130 10131 10132 10133 10134 10135 10136 10137 10138 10139 10140 10141 10142 10143 10144 10145 10146 10147 10148 10149 10150 10151 10152 10153 10154 10155 10156 10157 10158 10159 10160 10161 10162 10163 10164 10165 10166 10167 10168 10169 10170 10171 10172 10173 10174 10175 10176 10177 10178 10179 10180 10181 10182 10183 10184 10185 10186 10187 10188 10189 10190 10191 10192 10193 10194 10195 10196 10197 10198 10199 10200 10201 10202 10203 10204 10205 10206 10207 10208 10209 10210 10211 10212 10213 10214 10215 10216 10217 10218 10219 10220 10221 10222 10223 10224 10225 10226 10227 10228 10229 10230 10231 10232 10233 10234 10235 10236 10237 10238 10239 10240 10241 10242 10243 10244 10245 10246 10247 10248 10249 10250 10251 10252 10253 10254 10255 10256 10257 10258 10259 10260 10261 10262 10263 10264 10265 10266 10267 10268 10269 10270 10271 10272 10273 10274 10275 10276 10277 10278 10279 10280 10281 10282 10283 10284 10285 10286 10287 10288 10289 10290 10291 10292 10293 10294 10295 10296 10297 10298 10299 10300 10301 10302 10303 10304 10305 10306 10307 10308 10309 10310 10311 10312 10313 10314 10315 10316 10317 10318 10319 10320 10321 10322 10323 10324 10325 10326 10327 10328 10329 10330 10331 10332 10333 10334 10335 10336 10337 10338 10339 10340 10341 10342 10343 10344 10345
10345 10346 10347 10348 10349 10350 10351 10352 10353 10354 10355 10356 10357 10358 10359 10360 10361 10362 10363 10364 10365 10366 10367 10368 10369 10370 10371 10372 10373 10374 10375 10376 10377 10378 10379 10380 10381 10382 10383 10384 10385 10386 10387 10388 10389 10390 10391 10392 10393 10394 10395 10396 10397 10398 10399 10400 10401 10402 10403 10404 10405 10406 10407 10408 10409 10410 10411 10412 10413 10414 10415 10416 10417 10418 10419 10420 10421 10422 10423 10424 10425 10426 10427 10428 10429 10430 10431 10432 10433 10434 10435 10436 10437 10438 10439 10440 10441 10442 10443 10444 10445 10446 10447 10448 10449 10450 10451 10452 10453 10454 10455 10456 10457 10458 10459 10460 10461 10462 10463 10464 10465 10466 10467 10468 10469 10470 10471 10472 10473 10474 10475 10476 10477 10478 10479 10480 10481 10482 10483 10484 10485 10486 10487 10488 10489 10490 10491 10492 10493 10494 10495 10496 10497 10498 10499 10500 10501 10502 10503 10504 10505 10506 10507 10508 10509 10510 10511 10512 10513 10514 10515 10516 10517 10518 10519 10520 10521 10522 10523 10524 10525 10526 10527 10528 10529 10530 10531 10532 10533 10534 10535 10536 10537 10538 10539 10540 10541 10542 10543 10544 10545 10546 10547 10548 10549 10550 10551 10552 10553 10554 10555 10556 10557 10558 10559 10560 10561 10562 10563 10564 10565 10566 10567 10568 10569 10570 10571 10572 10573 10574 10575 10576 10577 10578 10579 10580 10581 10582 10583 10584 10585 10586 10587 10588 10589 10590 10591 10592 10593 10594 10595 10596 10597 10598 10599 10600 10601 10602 10603 10604 10605 10606 10607 10608 10609 10610 10611 </ul> 10612 <!-- Fim Paleta de Cores --> 10613 10614 10615 10616 10617 10618 10619 10620 10621 10622 10623 10624 10625 10626 10627 10628 10629 10630 10631 10632 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 10633 <option disabled="disabled" value=""> 10634 Selecione 10635 </option> 10636 10637 10638 <option value="30728" produto="125245708" estoque="10000">30 Doses</option> 10639 10640 10641 10642 10643 <option value="30730" produto="125245708" estoque="10000">60 Doses</option> 10644 10645 10646 10647 10648 <option value="30732" produto="125245708" estoque="10000">90 Doses</option> 10649 10650 10651 10652 10653 <option value="30734" produto="125245708" estoque="10000">120 Doses</option> 10654 10655 10656 </sele
10656ct> 10657 10658 10659 <select class="select-cor" style="display: none;" title="Campo Cor"> 10660 </select> 10661 10662 10663 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 10664 <div class="alerta-estoque"></div> 10665 <div class="alerta-adicionado"></div> 10666 10667 <div class="acao-compra"> 10668 10669 <div class="quantidade-box"> 10670 <div class="quantidade-box-input"> 10671 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
10671stoque="40000" /> 10672 </div> 10673 <div class="quantidade-box-controles"> 10674 <div class="quantidade-box-controles-itens" data-item="mais"> 10675 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 10676 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 10677 </svg> 10678 </div> 10679 <div class="quantidade-box-controles-itens" data-item="menus"> 10680 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 10681 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 10682 </svg> 10683 </div> 10684 </div> 10685 </div> 10686 10687 10688 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245708"> 10689 10690 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 10691 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 10692 10693 10694 10695 10696 10697 10698 <!-- Cesta de Compras --> 10699 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 10700 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 10701 </svg> 10702 10703 10704 10705 Comprar 10706 10707 10708 </button> 10709 <!-- </form> --> 10710 10711 </div> 10712 10713</div> 10714 10715 10716 </div> 10717 10718 </div> 10719 10720 10721</div> 10722
10723<script> 10724(function (window, document) { 10725 'use strict'; 10726 10727 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 10728 10729 if (window[GLOBAL_KEY]) { 10730 return; 10731 } 10732 10733 if (!window.Map || !window.WeakMap || !window.Promise) { 10734 return; 10735 } 10736 10737 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 10738 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 10739 '#vitrine-personalizada .product[data-id]'; 10740 var BADGE_CLASS = 'farmacam-prescription-badge'; 10741 var HOST_CLASS = 'farmacam-prescription-badge-host'; 10742 var MAX_CONCURRENT_REQUESTS = 6; 10743 var REQUEST_TIMEOUT_MS = 12000; 10744 10745 var rules = { 10746 '294': { 10747 level: '294', 10748 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 10749 }, 10750 '296': { 10751 level: '296', 10752 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 10753 }, 10754 '298': { 10755 level: '298', 10756 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 10757 } 10758 }; 10759 10760 var cache = new Map(); 10761 var pending = new Map(); 10762 var cardStates = new WeakMap(); 10763 var queue = []; 10764 var activeRequests = 0; 10765 var trayAjaxHooked = false; 10766 10767 function injectStyles() { 10768 if (document.getElementById('farmacam-prescription-cards-style')) { 10769 return; 10770 } 10771 10772 var style = document.createElement('style'); 10773 style.id = 'farmacam-prescription-cards-style'; 10774 style.textContent = [ 10775 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 10776 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 10777 'position:absolute!important;', 10778 'top:52px!important;', 10779 'left:10px!important;', 10780 'z-index:999!important;', 10781 'display:block!important;', 10782 'max-width:calc(100% - 20px)!important;', 10783 'box-sizing:border-box!important;', 10784 'padding:8px 12px!important;', 10785 'color:#fff!important;', 10786 'font-family:inherit!important;', 10787 'font-size:13px!important;', 10788 'font-weight:900!important;', 10789 'line-height:1.15!important;', 10790 'text-align:center!important;', 10791 'text-transform:uppercase!important;', 10792 'letter-spacing:.3px!important;', 10793 'white-space:normal!important;', 10794 'overflow-wrap:break-word!important;', 10795 'border-radius:3px!important;', 10796 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 10797 'pointer-events:none!important;', 10798 '}', 10799 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 10800 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 10801 'background:#d70008!important;', 10802 '}', 10803 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 10804 'background:#000!important;', 10805 '}', 10806 '@media (max-width:767px){', 10807 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 10808 'top:42px!important;', 10809 'left:6px!important;', 10810 'max-width:calc(100% - 12px)!important;', 10811 'padding:6px 8px!important;', 10812 'font-size:10px!important;', 10813 '}', 10814 '}' 10815 ].join(''); 10816 10817 (document.head || document.documentElement).appendChild(style); 10818 } 10819 10820 function normalizeProductId(value) { 10821 var id = String(value == null ? '' : value).trim(); 10822 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 10823 } 10824 10825 function classifyRelatedCategories(relatedCategories) { 10826 var found = { 10827 '292': false, 10828 '294': false, 10829 '296': false, 10830 '298': false 10831 }; 10832 10833 function inspect(value, depth) { 10834 var index; 10835 var normalized; 10836 10837 if (value == null || depth > 8) { 10838 return; 10839 } 10840 10841 if (Array.isArray(value)) { 10842 for (index = 0; index < value.length; index += 1) { 10843 inspect(value[index], depth + 1); 10844 } 10845 return; 10846 } 10847 10848 if (typeof value === 'object') { 10849 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 10850 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 10851 inspect(value.id, depth + 1); 10852 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 10853 inspect(value.category_id, depth + 1); 10854 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 10855 inspect(value.Category, depth + 1); 10856 } 10857 return; 10858 } 10859 10860 if (typeof value !== 'string' && typeof value !== 'number') { 10861 return; 10862 } 10863 normalized = normalizeProductId(value); 10864 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 10865 found[normalized] = true; 10866 } 10867 } 10868 10869 inspect(relatedCategories, 0); 10870 10871 if (found['298']) { 10872 return rules['298']; 10873 } 10874 if (found['296']) { 10875 return rules['296']; 10876 } 10877 if (found['294']) { 10878 return rules['294']; 10879 } 10880 10881 // 292 e qualquer classificacao desconhecida ficam sem tarja. 10882 return null; 10883 } 10884 10885 function ruleFromPayload(payload, productId) { 10886 var product = payload && payload.Product; 10887 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 10888 return null; 10889 } 10890 return classifyRelatedCategories(product && product.related_categories); 10891 } 10892 10893 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 10894 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 10895 function attachTrayAjaxCache() { 10896 var jq = window.jQuery; 10897 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 10898 return; 10899 } 10900
10901 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 10902 var url; 10903 var match; 10904 var productId; 10905 var payload; 10906 try { 10907 url = new URL(settings.url, window.location.href); 10908 if (url.origin !== window.location.origin) { 10909 return; 10910 } 10911 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 10912 if (!match) { 10913 return; 10914 } 10915 productId = normalizeProductId(match[1]); 10916 if (!cache.has(productId) && !pending.has(productId)) { 10917 payload = data || xhr.responseJSON; 10918 if (typeof payload === 'string') { 10919 payload = JSON.parse(payload); 10920 } 10921 if (!payload || !payload.Product || 10922 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 10923 return; 10924 } 10925 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 10926 return; 10927 } 10928 cache.set(productId, ruleFromPayload(payload, productId)); 10929 } 10930 } catch (error) { 10931 // Respostas de outras integracoes nao interferem nas tarjas. 10932 } 10933 }); 10934 10935 trayAjaxHooked = true; 10936 document.removeEventListener('load', onTrayScriptLoad, true); 10937 } 10938 10939 function onTrayScriptLoad(event) { 10940 if (event.target && event.target.tagName === 'SCRIPT') { 10941 attachTrayAjaxCache(); 10942 } 10943 } 10944 10945 function requestRule(productId) { 10946 var controller = null; 10947 var timeoutId = null; 10948 var options = { 10949 credentials: 'same-origin', 10950 headers: { 10951 'Accept': 'application/json' 10952 } 10953 }; 10954 var request; 10955 10956 if (typeof window.fetch !== 'function') { 10957 return Promise.resolve(null); 10958 } 10959 10960 if (typeof window.AbortController === 'function') { 10961 controller = new window.AbortController(); 10962 options.signal = controller.signal; 10963 timeoutId = window.setTimeout(function () { 10964 controller.abort(); 10965 }, REQUEST_TIMEOUT_MS); 10966 } 10967 10968 try { 10969 request = window.fetch( 10970 '/web_api/products/' + encodeURIComponent(productId), 10971 options 10972 ); 10973 } catch (error) { 10974 if (timeoutId !== null) { 10975 window.clearTimeout(timeoutId); 10976 } 10977 return Promise.resolve(null); 10978 } 10979 10980 return request.then(function (response) { 10981 if (!response.ok) { 10982 throw new Error('HTTP ' + response.status); 10983 } 10984 return response.json(); 10985 }).then(function (payload) { 10986 return ruleFromPayload(payload, productId); 10987 }).then(function (rule) { 10988 if (timeoutId !== null) { 10989 window.clearTimeout(timeoutId); 10990 } 10991 return rule; 10992 }, function () { 10993 if (timeoutId !== null) { 10994 window.clearTimeout(timeoutId); 10995 } 10996 10997 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 10998 return null; 10999 }); 11000 } 11001 11002 function finishJob(job, rule) { 11003 cache.set(job.productId, rule); 11004 pending.delete(job.productId); 11005 activeRequests -= 1; 11006 job.resolve(rule); 11007 pumpQueue(); 11008 } 11009 11010 function pumpQueue() { 11011 var job; 11012 11013 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 11014 job = queue.shift(); 11015 activeRequests += 1; 11016 11017 (function (currentJob) { 11018 requestRule(currentJob.productId).then(function (rule) { 11019 finishJob(currentJob, rule); 11020 }, function () { 11021 finishJob(currentJob, null); 11022 }); 11023 }(job)); 11024 } 11025 } 11026 11027 function getRule(productId) { 11028 var resolver; 11029 var promise; 11030 11031 if (cache.has(productId)) { 11032 return Promise.resolve(cache.get(productId)); 11033 } 11034 11035 if (pending.has(productId)) { 11036 return pending.get(productId); 11037 } 11038 11039 promise = new Promise(function (resolve) { 11040 resolver = resolve; 11041 }); 11042 11043 pending.set(productId, promise); 11044 queue.push({ 11045 productId: productId, 11046 resolve: resolver 11047 }); 11048 pumpQueue(); 11049 11050 return promise; 11051 } 11052 11053 function findBadge(card) { 11054 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 11055 } 11056 11057 function clearBadge(card) { 11058 var badge = findBadge(card); 11059 var image = card.querySelector('.product-header > .w-100 > .image'); 11060 11061 if (badge && badge.parentNode) { 11062 badge.parentNode.removeChild(badge); 11063 } 11064 11065 if (image) { 11066 image.classList.remove(HOST_CLASS); 11067 } 11068 11069 card.removeAttribute('data-farmacam-prescription-level'); 11070 } 11071 11072 function applyBadge(card, productId, rule) { 11073 var image; 11074 var badge; 11075 11076 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 11077 return false;
11078 } 11079 11080 clearBadge(card); 11081 11082 if (!rule) { 11083 return true; 11084 } 11085 11086 image = card.querySelector('.product-header > .w-100 > .image'); 11087 if (!image) { 11088 return false; 11089 } 11090 11091 badge = document.createElement('span'); 11092 badge.className = BADGE_CLASS; 11093 badge.setAttribute('data-farmacam-generated', 'true'); 11094 badge.setAttribute('data-farmacam-prescription-level', rule.level); 11095 badge.setAttribute('role', 'note'); 11096 badge.textContent = rule.text; 11097 11098 image.classList.add(HOST_CLASS); 11099 image.insertBefore(badge, image.firstChild); 11100 card.setAttribute('data-farmacam-prescription-level', rule.level); 11101 11102 return true; 11103 } 11104 11105 function processCard(card) { 11106 var productId; 11107 var previousState; 11108 var currentState; 11109 11110 if (!card || card.nodeType !== 1) { 11111 return; 11112 } 11113 11114 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 11115 return; 11116 } 11117 11118 productId = normalizeProductId(card.getAttribute('data-id')); 11119 previousState = cardStates.get(card); 11120 11121 if (!productId) { 11122 clearBadge(card); 11123 cardStates.delete(card); 11124 return; 11125 } 11126 11127 if ( 11128 previousState && 11129 previousState.productId === productId && 11130 previousState.status === 'loading' 11131 ) { 11132 return; 11133 } 11134 11135 if ( 11136 previousState && 11137 previousState.productId === productId && 11138 previousState.status === 'processed' 11139 ) { 11140 if (!previousState.rule || findBadge(card)) { 11141 return; 11142 } 11143 } 11144 11145 if (!previousState || previousState.productId !== productId) { 11146 clearBadge(card); 11147 } 11148 11149 currentState = { 11150 productId: productId, 11151 status: 'loading', 11152 rule: null 11153 }; 11154 cardStates.set(card, currentState); 11155 11156 getRule(productId).then(function (rule) { 11157 var applied; 11158 11159 if ( 11160 cardStates.get(card) !== currentState || 11161 normalizeProductId(card.getAttribute('data-id')) !== productId 11162 ) { 11163 return; 11164 } 11165 11166 applied = applyBadge(card, productId, rule); 11167 currentState.rule = rule; 11168 currentState.status = applied ? 'processed' : 'waiting-image'; 11169 }); 11170 } 11171 11172 function scan(root) { 11173 var cards; 11174 var index; 11175 11176 if (!root) { 11177 return; 11178 } 11179 11180 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 11181 processCard(root); 11182 } 11183 11184 if (!root.querySelectorAll) { 11185 return; 11186 } 11187 11188 cards = root.querySelectorAll(CARD_SELECTOR); 11189 for (index = 0; index < cards.length; index += 1) { 11190 processCard(cards[index]); 11191 } 11192 } 11193 11194 function startObserver() { 11195 var observer; 11196 11197 if (!window.MutationObserver || !document.documentElement) { 11198 return; 11199 } 11200 11201 observer = new MutationObserver(function (mutations) { 11202 var mutationIndex; 11203 var nodeIndex; 11204 var mutation; 11205 var node; 11206 var ownerCard; 11207 11208 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 11209 mutation = mutations[mutationIndex]; 11210 11211 if (mutation.type === 'attributes') { 11212 processCard(mutation.target); 11213 continue; 11214 } 11215 11216 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 11217 node = mutation.addedNodes[nodeIndex]; 11218 if (node.nodeType !== 1) { 11219 continue; 11220 } 11221 11222 scan(node); 11223 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 11224 if (ownerCard) { 11225 processCard(ownerCard); 11226 } 11227 } 11228 } 11229 }); 11230 11231 observer.observe(document.documentElement, { 11232 childList: true, 11233 subtree: true, 11234 attributes: true, 11235 attributeFilter: ['data-id'] 11236 }); 11237 11238 window[GLOBAL_KEY].observer = observer; 11239 } 11240 11241 window[GLOBAL_KEY] = { 11242 version: '1.1.0', 11243 cache: cache, 11244 pending: pending, 11245 cardStates: cardStates, 11246 scan: scan, 11247 processCard: processCard, 11248 observer: null 11249 }; 11250 11251 document.addEventListener('load', onTrayScriptLoad, true); 11252 attachTrayAjaxCache(); 11253 injectStyles(); 11254 scan(document); 11255 startObserver(); 11256 11257 if (document.readyState === 'loading') { 11258 document.addEventListener('DOMContentLoaded', function () { 11259 attachTrayAjaxCache(); 11260 scan(document); 11261 }); 11262 } 11263}(window, document)); 11264</script>
11264 11265 </div> 11266 <div 11267 class="swiper-slide fixWidthBoxProduct item"> 11268 11269 11270 11271 11272<div class="product animate open_cart" 11273 data-id="125245752" 11274 data-farmacam-related-categories="," 11275 data-ga4-id="125245752" 11276 data-ga4-name="Evans 5% - Creme Vaginal" 11277 data-ga4-price="110.00" 11278 data-ga4-brand="Farmacam" 11279 data-ga4-category="Tipo de Produto;Manipulados;" 11280 > 11281 11282 <div class="product-header"> 11283 11284 <div class="w-100"> 11285 11286 11287 11288 11289 11290 11291 11292 <div class="product-tags-circle"> 11293 11294 11295 <div class="tag-circle discount tag-icone tag-icone1"> 11296 <svg fill="none" height="16" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 11297 <path stroke-linecap="round" stroke-linejoin="round" d="M15.362 5.214A8.252 8.252 0 0112 21 8.25 8.25 0 016.038 7.048 8.287 8.287 0 009 9.6a8.983 8.983 0 013.361-6.867 8.21 8.21 0 003 2.48z"></path> 11298 <path stroke-linecap="round" stroke-linejoin="round" d="M12 18a3.75 3.75 0 00.495-7.467 5.99 5.99 0 00-1.925 3.546 5.974 5.974 0 01-2.133-1A3.75 3.75 0 0012 18z"></path> 11299 </svg> 11300 <span>Lançamento</span> 11301 </div> 11302 11303 11304 </div> 11305 11306 11307 11308 <div class="product-tags " data-tags-count="1"> 11309 11310 11311 11312 11313 11314 </div> 11315 11316 11317 11318 <div class="image "> 11319 11320 <a title="Evans 5% - Creme Vaginal" href="https://www.farmacam.com.br/manipulados/evans-5-creme-vaginal" class="space-image"> 11321 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/evans_5_creme_vaginal_1_20260904175755_6fa660e574d3.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/evans_5_creme_vaginal_1_20260904175755_6fa660e574d3.png" alt="Evans 5% - Creme Vaginal"> 11322 </a> 11323 11324 </div> 11325 11326 11327 11328 11329 11330 </div> 11331 11332 </div> 11333 11334 <div class="product-body"> 11335 11336 <a title="Evans 5% - Creme Vaginal" class="product-info" href="https://www.farmacam.com.br/manipulados/evans-5-creme-vaginal"> 11337 11338 <div class="product-info-dados"> 11339 11340 11341 11342 11343 11344 11345 <div class="product-name"> 11346 Evans 5% - Creme Vaginal 11347 </div> 11348 11349 11350 11351 <div class="product-price"> 11352 11353 <span class="product-message"> 11354 Esse acabou :( 11355 <span class="notify-me"> 11356 Avise-me quando chegar 11357 <i class="icon icon-arrow-right"></i> 11358 </span> 11359</span> 11360 </div> 11361 11362 </div> 11363 11364 </a> 11365 11366 </div> 11367 11368 11369 <div class="product-footer"> 11370 11371 11372 </div> 11373 11374 11375</div> 11376
11377<script> 11378(function (window, document) { 11379 'use strict'; 11380 11381 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 11382 11383 if (window[GLOBAL_KEY]) { 11384 return; 11385 } 11386 11387 if (!window.Map || !window.WeakMap || !window.Promise) { 11388 return; 11389 } 11390 11391 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 11392 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 11393 '#vitrine-personalizada .product[data-id]'; 11394 var BADGE_CLASS = 'farmacam-prescription-badge'; 11395 var HOST_CLASS = 'farmacam-prescription-badge-host'; 11396 var MAX_CONCURRENT_REQUESTS = 6; 11397 var REQUEST_TIMEOUT_MS = 12000; 11398 11399 var rules = { 11400 '294': { 11401 level: '294', 11402 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 11403 }, 11404 '296': { 11405 level: '296', 11406 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 11407 }, 11408 '298': { 11409 level: '298', 11410 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 11411 } 11412 }; 11413 11414 var cache = new Map(); 11415 var pending = new Map(); 11416 var cardStates = new WeakMap(); 11417 var queue = []; 11418 var activeRequests = 0; 11419 var trayAjaxHooked = false; 11420 11421 function injectStyles() { 11422 if (document.getElementById('farmacam-prescription-cards-style')) { 11423 return; 11424 } 11425 11426 var style = document.createElement('style'); 11427 style.id = 'farmacam-prescription-cards-style'; 11428 style.textContent = [ 11429 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 11430 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 11431 'position:absolute!important;', 11432 'top:52px!important;', 11433 'left:10px!important;', 11434 'z-index:999!important;', 11435 'display:block!important;', 11436 'max-width:calc(100% - 20px)!important;', 11437 'box-sizing:border-box!important;', 11438 'padding:8px 12px!important;', 11439 'color:#fff!important;', 11440 'font-family:inherit!important;', 11441 'font-size:13px!important;', 11442 'font-weight:900!important;', 11443 'line-height:1.15!important;', 11444 'text-align:center!important;', 11445 'text-transform:uppercase!important;', 11446 'letter-spacing:.3px!important;', 11447 'white-space:normal!important;', 11448 'overflow-wrap:break-word!important;', 11449 'border-radius:3px!important;', 11450 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 11451 'pointer-events:none!important;', 11452 '}', 11453 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 11454 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 11455 'background:#d70008!important;', 11456 '}', 11457 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 11458 'background:#000!important;', 11459 '}', 11460 '@media (max-width:767px){', 11461 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 11462 'top:42px!important;', 11463 'left:6px!important;', 11464 'max-width:calc(100% - 12px)!important;', 11465 'padding:6px 8px!important;', 11466 'font-size:10px!important;', 11467 '}', 11468 '}' 11469 ].join(''); 11470 11471 (document.head || document.documentElement).appendChild(style); 11472 } 11473 11474 function normalizeProductId(value) { 11475 var id = String(value == null ? '' : value).trim(); 11476 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 11477 } 11478 11479 function classifyRelatedCategories(relatedCategories) { 11480 var found = { 11481 '292': false, 11482 '294': false, 11483 '296': false, 11484 '298': false 11485 }; 11486 11487 function inspect(value, depth) { 11488 var index; 11489 var normalized; 11490 11491 if (value == null || depth > 8) { 11492 return; 11493 } 11494 11495 if (Array.isArray(value)) { 11496 for (index = 0; index < value.length; index += 1) { 11497 inspect(value[index], depth + 1); 11498 } 11499 return; 11500 } 11501 11502 if (typeof value === 'object') { 11503 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 11504 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 11505 inspect(value.id, depth + 1); 11506 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 11507 inspect(value.category_id, depth + 1); 11508 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 11509 inspect(value.Category, depth + 1); 11510 } 11511 return; 11512 } 11513 11514 if (typeof value !== 'string' && typeof value !== 'number') { 11515 return; 11516 } 11517 normalized = normalizeProductId(value); 11518 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 11519 found[normalized] = true; 11520 } 11521 } 11522 11523 inspect(relatedCategories, 0); 11524 11525 if (found['298']) { 11526 return rules['298']; 11527 } 11528 if (found['296']) { 11529 return rules['296']; 11530 } 11531 if (found['294']) { 11532 return rules['294']; 11533 } 11534 11535 // 292 e qualquer classificacao desconhecida ficam sem tarja. 11536 return null; 11537 } 11538 11539 function ruleFromPayload(payload, productId) { 11540 var product = payload && payload.Product; 11541 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 11542 return null; 11543 } 11544 return classifyRelatedCategories(product && product.related_categories); 11545 } 11546 11547 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 11548 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 11549 function attachTrayAjaxCache() { 11550 var jq = window.jQuery; 11551 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 11552 return; 11553 } 11554
11555 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 11556 var url; 11557 var match; 11558 var productId; 11559 var payload; 11560 try { 11561 url = new URL(settings.url, window.location.href); 11562 if (url.origin !== window.location.origin) { 11563 return; 11564 } 11565 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 11566 if (!match) { 11567 return; 11568 } 11569 productId = normalizeProductId(match[1]); 11570 if (!cache.has(productId) && !pending.has(productId)) { 11571 payload = data || xhr.responseJSON; 11572 if (typeof payload === 'string') { 11573 payload = JSON.parse(payload); 11574 } 11575 if (!payload || !payload.Product || 11576 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 11577 return; 11578 } 11579 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 11580 return; 11581 } 11582 cache.set(productId, ruleFromPayload(payload, productId)); 11583 } 11584 } catch (error) { 11585 // Respostas de outras integracoes nao interferem nas tarjas. 11586 } 11587 }); 11588 11589 trayAjaxHooked = true; 11590 document.removeEventListener('load', onTrayScriptLoad, true); 11591 } 11592 11593 function onTrayScriptLoad(event) { 11594 if (event.target && event.target.tagName === 'SCRIPT') { 11595 attachTrayAjaxCache(); 11596 } 11597 } 11598 11599 function requestRule(productId) { 11600 var controller = null; 11601 var timeoutId = null; 11602 var options = { 11603 credentials: 'same-origin', 11604 headers: { 11605 'Accept': 'application/json' 11606 } 11607 }; 11608 var request; 11609 11610 if (typeof window.fetch !== 'function') { 11611 return Promise.resolve(null); 11612 } 11613 11614 if (typeof window.AbortController === 'function') { 11615 controller = new window.AbortController(); 11616 options.signal = controller.signal; 11617 timeoutId = window.setTimeout(function () { 11618 controller.abort(); 11619 }, REQUEST_TIMEOUT_MS); 11620 } 11621 11622 try { 11623 request = window.fetch( 11624 '/web_api/products/' + encodeURIComponent(productId), 11625 options 11626 ); 11627 } catch (error) { 11628 if (timeoutId !== null) { 11629 window.clearTimeout(timeoutId); 11630 } 11631 return Promise.resolve(null); 11632 } 11633 11634 return request.then(function (response) { 11635 if (!response.ok) { 11636 throw new Error('HTTP ' + response.status); 11637 } 11638 return response.json(); 11639 }).then(function (payload) { 11640 return ruleFromPayload(payload, productId); 11641 }).then(function (rule) { 11642 if (timeoutId !== null) { 11643 window.clearTimeout(timeoutId); 11644 } 11645 return rule; 11646 }, function () { 11647 if (timeoutId !== null) { 11648 window.clearTimeout(timeoutId); 11649 } 11650 11651 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 11652 return null; 11653 }); 11654 } 11655 11656 function finishJob(job, rule) { 11657 cache.set(job.productId, rule); 11658 pending.delete(job.productId); 11659 activeRequests -= 1; 11660 job.resolve(rule); 11661 pumpQueue(); 11662 } 11663 11664 function pumpQueue() { 11665 var job; 11666 11667 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 11668 job = queue.shift(); 11669 activeRequests += 1; 11670 11671 (function (currentJob) { 11672 requestRule(currentJob.productId).then(function (rule) { 11673 finishJob(currentJob, rule); 11674 }, function () { 11675 finishJob(currentJob, null); 11676 }); 11677 }(job)); 11678 } 11679 } 11680 11681 function getRule(productId) { 11682 var resolver; 11683 var promise; 11684 11685 if (cache.has(productId)) { 11686 return Promise.resolve(cache.get(productId)); 11687 } 11688 11689 if (pending.has(productId)) { 11690 return pending.get(productId); 11691 } 11692 11693 promise = new Promise(function (resolve) { 11694 resolver = resolve; 11695 }); 11696 11697 pending.set(productId, promise); 11698 queue.push({ 11699 productId: productId, 11700 resolve: resolver 11701 }); 11702 pumpQueue(); 11703 11704 return promise; 11705 } 11706 11707 function findBadge(card) { 11708 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 11709 } 11710 11711 function clearBadge(card) { 11712 var badge = findBadge(card); 11713 var image = card.querySelector('.product-header > .w-100 > .image'); 11714 11715 if (badge && badge.parentNode) { 11716 badge.parentNode.removeChild(badge); 11717 } 11718 11719 if (image) { 11720 image.classList.remove(HOST_CLASS); 11721 } 11722 11723 card.removeAttribute('data-farmacam-prescription-level'); 11724 } 11725 11726 function applyBadge(card, productId, rule) { 11727 var image; 11728 var badge; 11729 11730 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 11731 return false;
11732 } 11733 11734 clearBadge(card); 11735 11736 if (!rule) { 11737 return true; 11738 } 11739 11740 image = card.querySelector('.product-header > .w-100 > .image'); 11741 if (!image) { 11742 return false; 11743 } 11744 11745 badge = document.createElement('span'); 11746 badge.className = BADGE_CLASS; 11747 badge.setAttribute('data-farmacam-generated', 'true'); 11748 badge.setAttribute('data-farmacam-prescription-level', rule.level); 11749 badge.setAttribute('role', 'note'); 11750 badge.textContent = rule.text; 11751 11752 image.classList.add(HOST_CLASS); 11753 image.insertBefore(badge, image.firstChild); 11754 card.setAttribute('data-farmacam-prescription-level', rule.level); 11755 11756 return true; 11757 } 11758 11759 function processCard(card) { 11760 var productId; 11761 var previousState; 11762 var currentState; 11763 11764 if (!card || card.nodeType !== 1) { 11765 return; 11766 } 11767 11768 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 11769 return; 11770 } 11771 11772 productId = normalizeProductId(card.getAttribute('data-id')); 11773 previousState = cardStates.get(card); 11774 11775 if (!productId) { 11776 clearBadge(card); 11777 cardStates.delete(card); 11778 return; 11779 } 11780 11781 if ( 11782 previousState && 11783 previousState.productId === productId && 11784 previousState.status === 'loading' 11785 ) { 11786 return; 11787 } 11788 11789 if ( 11790 previousState && 11791 previousState.productId === productId && 11792 previousState.status === 'processed' 11793 ) { 11794 if (!previousState.rule || findBadge(card)) { 11795 return; 11796 } 11797 } 11798 11799 if (!previousState || previousState.productId !== productId) { 11800 clearBadge(card); 11801 } 11802 11803 currentState = { 11804 productId: productId, 11805 status: 'loading', 11806 rule: null 11807 }; 11808 cardStates.set(card, currentState); 11809 11810 getRule(productId).then(function (rule) { 11811 var applied; 11812 11813 if ( 11814 cardStates.get(card) !== currentState || 11815 normalizeProductId(card.getAttribute('data-id')) !== productId 11816 ) { 11817 return; 11818 } 11819 11820 applied = applyBadge(card, productId, rule); 11821 currentState.rule = rule; 11822 currentState.status = applied ? 'processed' : 'waiting-image'; 11823 }); 11824 } 11825 11826 function scan(root) { 11827 var cards; 11828 var index; 11829 11830 if (!root) { 11831 return; 11832 } 11833 11834 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 11835 processCard(root); 11836 } 11837 11838 if (!root.querySelectorAll) { 11839 return; 11840 } 11841 11842 cards = root.querySelectorAll(CARD_SELECTOR); 11843 for (index = 0; index < cards.length; index += 1) { 11844 processCard(cards[index]); 11845 } 11846 } 11847 11848 function startObserver() { 11849 var observer; 11850 11851 if (!window.MutationObserver || !document.documentElement) { 11852 return; 11853 } 11854 11855 observer = new MutationObserver(function (mutations) { 11856 var mutationIndex; 11857 var nodeIndex; 11858 var mutation; 11859 var node; 11860 var ownerCard; 11861 11862 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 11863 mutation = mutations[mutationIndex]; 11864 11865 if (mutation.type === 'attributes') { 11866 processCard(mutation.target); 11867 continue; 11868 } 11869 11870 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 11871 node = mutation.addedNodes[nodeIndex]; 11872 if (node.nodeType !== 1) { 11873 continue; 11874 } 11875 11876 scan(node); 11877 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 11878 if (ownerCard) { 11879 processCard(ownerCard); 11880 } 11881 } 11882 } 11883 }); 11884 11885 observer.observe(document.documentElement, { 11886 childList: true, 11887 subtree: true, 11888 attributes: true, 11889 attributeFilter: ['data-id'] 11890 }); 11891 11892 window[GLOBAL_KEY].observer = observer; 11893 } 11894 11895 window[GLOBAL_KEY] = { 11896 version: '1.1.0', 11897 cache: cache, 11898 pending: pending, 11899 cardStates: cardStates, 11900 scan: scan, 11901 processCard: processCard, 11902 observer: null 11903 }; 11904 11905 document.addEventListener('load', onTrayScriptLoad, true); 11906 attachTrayAjaxCache(); 11907 injectStyles(); 11908 scan(document); 11909 startObserver(); 11910 11911 if (document.readyState === 'loading') { 11912 document.addEventListener('DOMContentLoaded', function () { 11913 attachTrayAjaxCache(); 11914 scan(document); 11915 }); 11916 } 11917}(window, document)); 11918</script>
11918 11919 </div> 11920 <div 11921 class="swiper-slide fixWidthBoxProduct item"> 11922 11923 11924 11925 11926<div class="product animate open_cart" 11927 data-id="125245716" 11928 data-farmacam-related-categories="," 11929 data-ga4-id="125245716" 11930 data-ga4-name="Cavaberine - Berberina Com Tecnologia Cavamax" 11931 data-ga4-price="90.00" 11932 data-ga4-brand="Farmacam" 11933 data-ga4-category="Tipo de Produto;Manipulados;" 11934 > 11935 11936 <div class="product-header"> 11937 11938 <div class="w-100"> 11939 11940 11941 11942 11943 11944 11945 11946 <div class="product-tags-circle"> 11947 11948 11949 <div class="tag-circle discount tag-icone tag-icone1"> 11950 <svg fill="none" height="16" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 11951 <path stroke-linecap="round" stroke-linejoin="round" d="M15.362 5.214A8.252 8.252 0 0112 21 8.25 8.25 0 016.038 7.048 8.287 8.287 0 009 9.6a8.983 8.983 0 013.361-6.867 8.21 8.21 0 003 2.48z"></path> 11952 <path stroke-linecap="round" stroke-linejoin="round" d="M12 18a3.75 3.75 0 00.495-7.467 5.99 5.99 0 00-1.925 3.546 5.974 5.974 0 01-2.133-1A3.75 3.75 0 0012 18z"></path> 11953 </svg> 11954 <span>Lançamento</span> 11955 </div> 11956 11957 11958 </div> 11959 11960 11961 11962 <div class="product-tags " data-tags-count="1"> 11963 11964 11965 11966 11967 11968 </div> 11969 11970 11971 11972 <div class="image "> 11973 11974 <a title="Cavaberine - Berberina Com Tecnologia Cavamax" href="https://www.farmacam.com.br/manipulados/cavaberine-berberina-com-tecnologia-cavamax" class="space-image"> 11975 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/cavaberine_berberina_com_tecnologia_cavamax_1_20260902110632_e107428f69d0.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/cavaberine_berberina_com_tecnologia_cavamax_1_20260902110632_e107428f69d0.png" alt="Cavaberine - Berberina Com Tecnologia Cavamax"> 11976 </a> 11977 11978 </div> 11979 11980 11981 11982 11983 11984 </div> 11985 11986 </div> 11987 11988 <div class="product-body"> 11989 11990 <a title="Cavaberine - Berberina Com Tecnologia Cavamax" class="product-info" href="https://www.farmacam.com.br/manipulados/cavaberine-berberina-com-tecnologia-cavamax"> 11991 11992 <div class="product-info-dados"> 11993 11994 11995 11996 11997 11998 11999 <div class="product-name"> 12000 Cavaberine - Berberina Com Tecnologia Cavamax 12001 </div> 12002 12003 12004 12005 <div class="product-price"> 12006 12007 <span class="product-message"> 12008 Esse acabou :( 12009 <span class="notify-me"> 12010 Avise-me quando chegar 12011 <i class="icon icon-arrow-right"></i> 12012 </span> 12013</span> 12014 </div> 12015 12016 </div> 12017 12018 </a> 12019 12020 </div> 12021 12022 12023 <div class="product-footer"> 12024 12025 12026 </div> 12027 12028 12029</div> 12030
12031<script> 12032(function (window, document) { 12033 'use strict'; 12034 12035 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 12036 12037 if (window[GLOBAL_KEY]) { 12038 return; 12039 } 12040 12041 if (!window.Map || !window.WeakMap || !window.Promise) { 12042 return; 12043 } 12044 12045 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 12046 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 12047 '#vitrine-personalizada .product[data-id]'; 12048 var BADGE_CLASS = 'farmacam-prescription-badge'; 12049 var HOST_CLASS = 'farmacam-prescription-badge-host'; 12050 var MAX_CONCURRENT_REQUESTS = 6; 12051 var REQUEST_TIMEOUT_MS = 12000; 12052 12053 var rules = { 12054 '294': { 12055 level: '294', 12056 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 12057 }, 12058 '296': { 12059 level: '296', 12060 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 12061 }, 12062 '298': { 12063 level: '298', 12064 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 12065 } 12066 }; 12067 12068 var cache = new Map(); 12069 var pending = new Map(); 12070 var cardStates = new WeakMap(); 12071 var queue = []; 12072 var activeRequests = 0; 12073 var trayAjaxHooked = false; 12074 12075 function injectStyles() { 12076 if (document.getElementById('farmacam-prescription-cards-style')) { 12077 return; 12078 } 12079 12080 var style = document.createElement('style'); 12081 style.id = 'farmacam-prescription-cards-style'; 12082 style.textContent = [ 12083 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 12084 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 12085 'position:absolute!important;', 12086 'top:52px!important;', 12087 'left:10px!important;', 12088 'z-index:999!important;', 12089 'display:block!important;', 12090 'max-width:calc(100% - 20px)!important;', 12091 'box-sizing:border-box!important;', 12092 'padding:8px 12px!important;', 12093 'color:#fff!important;', 12094 'font-family:inherit!important;', 12095 'font-size:13px!important;', 12096 'font-weight:900!important;', 12097 'line-height:1.15!important;', 12098 'text-align:center!important;', 12099 'text-transform:uppercase!important;', 12100 'letter-spacing:.3px!important;', 12101 'white-space:normal!important;', 12102 'overflow-wrap:break-word!important;', 12103 'border-radius:3px!important;', 12104 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 12105 'pointer-events:none!important;', 12106 '}', 12107 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 12108 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 12109 'background:#d70008!important;', 12110 '}', 12111 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 12112 'background:#000!important;', 12113 '}', 12114 '@media (max-width:767px){', 12115 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 12116 'top:42px!important;', 12117 'left:6px!important;', 12118 'max-width:calc(100% - 12px)!important;', 12119 'padding:6px 8px!important;', 12120 'font-size:10px!important;', 12121 '}', 12122 '}' 12123 ].join(''); 12124 12125 (document.head || document.documentElement).appendChild(style); 12126 } 12127 12128 function normalizeProductId(value) { 12129 var id = String(value == null ? '' : value).trim(); 12130 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 12131 } 12132 12133 function classifyRelatedCategories(relatedCategories) { 12134 var found = { 12135 '292': false, 12136 '294': false, 12137 '296': false, 12138 '298': false 12139 }; 12140 12141 function inspect(value, depth) { 12142 var index; 12143 var normalized; 12144 12145 if (value == null || depth > 8) { 12146 return; 12147 } 12148 12149 if (Array.isArray(value)) { 12150 for (index = 0; index < value.length; index += 1) { 12151 inspect(value[index], depth + 1); 12152 } 12153 return; 12154 } 12155 12156 if (typeof value === 'object') { 12157 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 12158 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 12159 inspect(value.id, depth + 1); 12160 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 12161 inspect(value.category_id, depth + 1); 12162 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 12163 inspect(value.Category, depth + 1); 12164 } 12165 return; 12166 } 12167 12168 if (typeof value !== 'string' && typeof value !== 'number') { 12169 return; 12170 } 12171 normalized = normalizeProductId(value); 12172 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 12173 found[normalized] = true; 12174 } 12175 } 12176 12177 inspect(relatedCategories, 0); 12178 12179 if (found['298']) { 12180 return rules['298']; 12181 } 12182 if (found['296']) { 12183 return rules['296']; 12184 } 12185 if (found['294']) { 12186 return rules['294']; 12187 } 12188 12189 // 292 e qualquer classificacao desconhecida ficam sem tarja. 12190 return null; 12191 } 12192 12193 function ruleFromPayload(payload, productId) { 12194 var product = payload && payload.Product; 12195 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 12196 return null; 12197 } 12198 return classifyRelatedCategories(product && product.related_categories); 12199 } 12200 12201 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 12202 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 12203 function attachTrayAjaxCache() { 12204 var jq = window.jQuery; 12205 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 12206 return; 12207 } 12208
12209 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 12210 var url; 12211 var match; 12212 var productId; 12213 var payload; 12214 try { 12215 url = new URL(settings.url, window.location.href); 12216 if (url.origin !== window.location.origin) { 12217 return; 12218 } 12219 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 12220 if (!match) { 12221 return; 12222 } 12223 productId = normalizeProductId(match[1]); 12224 if (!cache.has(productId) && !pending.has(productId)) { 12225 payload = data || xhr.responseJSON; 12226 if (typeof payload === 'string') { 12227 payload = JSON.parse(payload); 12228 } 12229 if (!payload || !payload.Product || 12230 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 12231 return; 12232 } 12233 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 12234 return; 12235 } 12236 cache.set(productId, ruleFromPayload(payload, productId)); 12237 } 12238 } catch (error) { 12239 // Respostas de outras integracoes nao interferem nas tarjas. 12240 } 12241 }); 12242 12243 trayAjaxHooked = true; 12244 document.removeEventListener('load', onTrayScriptLoad, true); 12245 } 12246 12247 function onTrayScriptLoad(event) { 12248 if (event.target && event.target.tagName === 'SCRIPT') { 12249 attachTrayAjaxCache(); 12250 } 12251 } 12252 12253 function requestRule(productId) { 12254 var controller = null; 12255 var timeoutId = null; 12256 var options = { 12257 credentials: 'same-origin', 12258 headers: { 12259 'Accept': 'application/json' 12260 } 12261 }; 12262 var request; 12263 12264 if (typeof window.fetch !== 'function') { 12265 return Promise.resolve(null); 12266 } 12267 12268 if (typeof window.AbortController === 'function') { 12269 controller = new window.AbortController(); 12270 options.signal = controller.signal; 12271 timeoutId = window.setTimeout(function () { 12272 controller.abort(); 12273 }, REQUEST_TIMEOUT_MS); 12274 } 12275 12276 try { 12277 request = window.fetch( 12278 '/web_api/products/' + encodeURIComponent(productId), 12279 options 12280 ); 12281 } catch (error) { 12282 if (timeoutId !== null) { 12283 window.clearTimeout(timeoutId); 12284 } 12285 return Promise.resolve(null); 12286 } 12287 12288 return request.then(function (response) { 12289 if (!response.ok) { 12290 throw new Error('HTTP ' + response.status); 12291 } 12292 return response.json(); 12293 }).then(function (payload) { 12294 return ruleFromPayload(payload, productId); 12295 }).then(function (rule) { 12296 if (timeoutId !== null) { 12297 window.clearTimeout(timeoutId); 12298 } 12299 return rule; 12300 }, function () { 12301 if (timeoutId !== null) { 12302 window.clearTimeout(timeoutId); 12303 } 12304 12305 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 12306 return null; 12307 }); 12308 } 12309 12310 function finishJob(job, rule) { 12311 cache.set(job.productId, rule); 12312 pending.delete(job.productId); 12313 activeRequests -= 1; 12314 job.resolve(rule); 12315 pumpQueue(); 12316 } 12317 12318 function pumpQueue() { 12319 var job; 12320 12321 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 12322 job = queue.shift(); 12323 activeRequests += 1; 12324 12325 (function (currentJob) { 12326 requestRule(currentJob.productId).then(function (rule) { 12327 finishJob(currentJob, rule); 12328 }, function () { 12329 finishJob(currentJob, null); 12330 }); 12331 }(job)); 12332 } 12333 } 12334 12335 function getRule(productId) { 12336 var resolver; 12337 var promise; 12338 12339 if (cache.has(productId)) { 12340 return Promise.resolve(cache.get(productId)); 12341 } 12342 12343 if (pending.has(productId)) { 12344 return pending.get(productId); 12345 } 12346 12347 promise = new Promise(function (resolve) { 12348 resolver = resolve; 12349 }); 12350 12351 pending.set(productId, promise); 12352 queue.push({ 12353 productId: productId, 12354 resolve: resolver 12355 }); 12356 pumpQueue(); 12357 12358 return promise; 12359 } 12360 12361 function findBadge(card) { 12362 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 12363 } 12364 12365 function clearBadge(card) { 12366 var badge = findBadge(card); 12367 var image = card.querySelector('.product-header > .w-100 > .image'); 12368 12369 if (badge && badge.parentNode) { 12370 badge.parentNode.removeChild(badge); 12371 } 12372 12373 if (image) { 12374 image.classList.remove(HOST_CLASS); 12375 } 12376 12377 card.removeAttribute('data-farmacam-prescription-level'); 12378 } 12379 12380 function applyBadge(card, productId, rule) { 12381 var image; 12382 var badge; 12383 12384 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 12385 return false;
12386 } 12387 12388 clearBadge(card); 12389 12390 if (!rule) { 12391 return true; 12392 } 12393 12394 image = card.querySelector('.product-header > .w-100 > .image'); 12395 if (!image) { 12396 return false; 12397 } 12398 12399 badge = document.createElement('span'); 12400 badge.className = BADGE_CLASS; 12401 badge.setAttribute('data-farmacam-generated', 'true'); 12402 badge.setAttribute('data-farmacam-prescription-level', rule.level); 12403 badge.setAttribute('role', 'note'); 12404 badge.textContent = rule.text; 12405 12406 image.classList.add(HOST_CLASS); 12407 image.insertBefore(badge, image.firstChild); 12408 card.setAttribute('data-farmacam-prescription-level', rule.level); 12409 12410 return true; 12411 } 12412 12413 function processCard(card) { 12414 var productId; 12415 var previousState; 12416 var currentState; 12417 12418 if (!card || card.nodeType !== 1) { 12419 return; 12420 } 12421 12422 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 12423 return; 12424 } 12425 12426 productId = normalizeProductId(card.getAttribute('data-id')); 12427 previousState = cardStates.get(card); 12428 12429 if (!productId) { 12430 clearBadge(card); 12431 cardStates.delete(card); 12432 return; 12433 } 12434 12435 if ( 12436 previousState && 12437 previousState.productId === productId && 12438 previousState.status === 'loading' 12439 ) { 12440 return; 12441 } 12442 12443 if ( 12444 previousState && 12445 previousState.productId === productId && 12446 previousState.status === 'processed' 12447 ) { 12448 if (!previousState.rule || findBadge(card)) { 12449 return; 12450 } 12451 } 12452 12453 if (!previousState || previousState.productId !== productId) { 12454 clearBadge(card); 12455 } 12456 12457 currentState = { 12458 productId: productId, 12459 status: 'loading', 12460 rule: null 12461 }; 12462 cardStates.set(card, currentState); 12463 12464 getRule(productId).then(function (rule) { 12465 var applied; 12466 12467 if ( 12468 cardStates.get(card) !== currentState || 12469 normalizeProductId(card.getAttribute('data-id')) !== productId 12470 ) { 12471 return; 12472 } 12473 12474 applied = applyBadge(card, productId, rule); 12475 currentState.rule = rule; 12476 currentState.status = applied ? 'processed' : 'waiting-image'; 12477 }); 12478 } 12479 12480 function scan(root) { 12481 var cards; 12482 var index; 12483 12484 if (!root) { 12485 return; 12486 } 12487 12488 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 12489 processCard(root); 12490 } 12491 12492 if (!root.querySelectorAll) { 12493 return; 12494 } 12495 12496 cards = root.querySelectorAll(CARD_SELECTOR); 12497 for (index = 0; index < cards.length; index += 1) { 12498 processCard(cards[index]); 12499 } 12500 } 12501 12502 function startObserver() { 12503 var observer; 12504 12505 if (!window.MutationObserver || !document.documentElement) { 12506 return; 12507 } 12508 12509 observer = new MutationObserver(function (mutations) { 12510 var mutationIndex; 12511 var nodeIndex; 12512 var mutation; 12513 var node; 12514 var ownerCard; 12515 12516 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 12517 mutation = mutations[mutationIndex]; 12518 12519 if (mutation.type === 'attributes') { 12520 processCard(mutation.target); 12521 continue; 12522 } 12523 12524 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 12525 node = mutation.addedNodes[nodeIndex]; 12526 if (node.nodeType !== 1) { 12527 continue; 12528 } 12529 12530 scan(node); 12531 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 12532 if (ownerCard) { 12533 processCard(ownerCard); 12534 } 12535 } 12536 } 12537 }); 12538 12539 observer.observe(document.documentElement, { 12540 childList: true, 12541 subtree: true, 12542 attributes: true, 12543 attributeFilter: ['data-id'] 12544 }); 12545 12546 window[GLOBAL_KEY].observer = observer; 12547 } 12548 12549 window[GLOBAL_KEY] = { 12550 version: '1.1.0', 12551 cache: cache, 12552 pending: pending, 12553 cardStates: cardStates, 12554 scan: scan, 12555 processCard: processCard, 12556 observer: null 12557 }; 12558 12559 document.addEventListener('load', onTrayScriptLoad, true); 12560 attachTrayAjaxCache(); 12561 injectStyles(); 12562 scan(document); 12563 startObserver(); 12564 12565 if (document.readyState === 'loading') { 12566 document.addEventListener('DOMContentLoaded', function () { 12567 attachTrayAjaxCache(); 12568 scan(document); 12569 }); 12570 } 12571}(window, document)); 12572</script>
12572 12573 </div> 12574 <div 12575 class="swiper-slide fixWidthBoxProduct item"> 12576 12577 12578 12579 12580<div class="product animate open_cart" 12581 data-id="125245702" 12582 data-farmacam-related-categories="," 12583 data-ga4-id="125245702" 12584 data-ga4-name="Saúde Óssea Com Mesoporosil" 12585 data-ga4-price="159.00" 12586 data-ga4-brand="Farmacam" 12587 data-ga4-category="Tipo de Produto;Manipulados;" 12588 > 12589 12590 <div class="product-header"> 12591 12592 <div class="w-100"> 12593 12594 12595 12596 12597 12598 12599 12600 <div class="product-tags-circle"> 12601 12602 12603 <div class="tag-circle discount tag-icone tag-icone1"> 12604 <svg fill="none" height="16" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 12605 <path stroke-linecap="round" stroke-linejoin="round" d="M15.362 5.214A8.252 8.252 0 0112 21 8.25 8.25 0 016.038 7.048 8.287 8.287 0 009 9.6a8.983 8.983 0 013.361-6.867 8.21 8.21 0 003 2.48z"></path> 12606 <path stroke-linecap="round" stroke-linejoin="round" d="M12 18a3.75 3.75 0 00.495-7.467 5.99 5.99 0 00-1.925 3.546 5.974 5.974 0 01-2.133-1A3.75 3.75 0 0012 18z"></path> 12607 </svg> 12608 <span>Lançamento</span> 12609 </div> 12610 12611 12612 </div> 12613 12614 12615 12616 <div class="product-tags " data-tags-count="1"> 12617 12618 12619 12620 12621 12622 </div> 12623 12624 12625 12626 <div class="image "> 12627 12628 <a title="Saúde Óssea Com Mesoporosil" href="https://www.farmacam.com.br/manipulados/saude-ossea-com-mesoporosil" class="space-image"> 12629 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/sade_ssea_com_mesoporosil_1_20260901131231_79619d175ffe.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/sade_ssea_com_mesoporosil_1_20260901131231_79619d175ffe.png" alt="Saúde Óssea Com Mesoporosil"> 12630 </a> 12631 12632 </div> 12633 12634 12635 12636 12637 12638 </div> 12639 12640 </div> 12641 12642 <div class="product-body"> 12643 12644 <a title="Saúde Óssea Com Mesoporosil" class="product-info" href="https://www.farmacam.com.br/manipulados/saude-ossea-com-mesoporosil"> 12645 12646 <div class="product-info-dados"> 12647 12648 12649 12650 12651 12652 12653 <div class="product-name"> 12654 Saúde Óssea Com Mesoporosil 12655 </div> 12656 12657 12658 12659 <div class="product-price"> 12660 12661 12662 12663 12664 12665 <span class="product-has-variants text-center"> 12666 A partir de 12667 </span> 12668 12669<div class="price display-cash"> 12670 12671 12672 <span class="current-price "> 12673 R$ 159,00 12674 12675 </span> 12676 12677 <span class="product-installments"> 12678 12679 </span> 12680 12681</div> 12682 </div> 12683 12684 </div> 12685 12686 </a> 12687 12688 </div> 12689 12690 12691 <div class="product-footer"> 12692 12693 12694 <div class="w-100"> 12695 12696 12697 12698<div class="product-rating-catalog"> 12699 12700 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 12701 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 12702 </svg> 12703 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 12704 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 12705 </svg> 12706 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 12707 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 12708 </svg> 12709 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 12710 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 12711 </svg> 12712 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 12713 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 12714 </svg> 12715 12716 12717 <a title="Ver avaliações de Saúde Óssea Com Mesoporosil" href="https://www.farmacam.com.br/manipulados/saude-ossea-com-mesoporosil#comments" class="total"> 12718 Seja o primeiro 12719 </a> 12720 12721 </div> 12722 12723 12724 12725 <div class="config-variacoes-compra"> 12726 12727 12728 12729 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245702"> 12730 <input type="hidden" name="product_id" value="125245702"> 12731 <input type="hidden" name="without_stock_sale" value=""> 12732 12733 <input type="hidden" name="variacao" id="selectedVariant" value=""> 12734 <input type="hidden" name="estoque" value=""> 12735 12736 12737 12738 <ul class="paleta-cores"> 12739 12740 12741 12742 12743 12744 12745 12746 12747 12748 12749 12750 12751 12752 12753 12754 12755 12756 12757 12758 12759 12760 12761 12762 12763 12764 12765 12766 12767 12768 12769 12770 12771 12772 12773 12774 12775 12776 12777 12778 12779 12780 12781 12782 12783 12784 12785 12786 12787 12788 12789 12790 12791 12792 12793 12794 12795 12796 12797 12798 12799 12800 12801 12802 12803 12804 12805 12806 12807 12808 12809 12810 12811 12812 12813 12814 12815 12816 12817 12818 12819 12820 12821 12822 12823 12824 12825 12826 12827 12828 12829 12830 12831 12832 12833 12834 12835 12836 12837 12838 12839 12840 12841 12842 12843 12844 12845 12846 12847 12848 12849 12850 12851 12852 12853 12854 12855 12856 12857 12858 12859 12860 12861 12862 12863 12864 12865 12866 12867 12868 12869 12870 12871 12872 12873 12874 12875 12876 12877 12878 12879 12880 12881 12882 12883 12884 12885 12886 12887 12888 12889 12890 12891 12892 12893 12894 12895 12896 12897 12898 12899 12900 12901 12902 12903 12904 12905 12906 12907 12908 12909 12910 12911 12912 12913 12914 12915 12916 12917 12918 12919 12920 12921 12922 12923 12924 12925 12926 12927 12928 12929 12930 12931 12932 12933 12934 12935 12936 12937 12938 12939 12940 12941 12942 12943 12944 12945 12946 12947 12948 12949 12950 12951 12952 12953 12954 12955 12956 12957 12958 12959 12960 12961 12962 12963 12964 12965 12966 12967 12968 12969 12970 12971 12972 12973 12974 12975 12976 12977 12978 12979 12980 12981 12982 12983 12984 12985 12986 12987 12988 12989 12990 12991 12992
12992 12993 12994 12995 12996 12997 12998 12999 13000 13001 13002 13003 13004 13005 13006 13007 13008 13009 13010 13011 13012 13013 13014 13015 13016 13017 13018 13019 13020 13021 13022 13023 13024 13025 13026 13027 13028 13029 13030 13031 13032 13033 13034 13035 13036 13037 13038 13039 13040 13041 13042 13043 13044 13045 13046 13047 13048 13049 13050 13051 13052 13053 13054 13055 13056 13057 13058 13059 13060 13061 13062 13063 13064 13065 13066 13067 13068 13069 13070 13071 13072 13073 13074 13075 13076 13077 13078 13079 13080 13081 13082 13083 13084 13085 13086 13087 13088 13089 13090 13091 13092 13093 13094 13095 13096 13097 13098 13099 13100 13101 13102 13103 13104 13105 13106 13107 13108 13109 13110 13111 13112 13113 13114 13115 13116 13117 13118 13119 13120 13121 13122 13123 13124 13125 13126 13127 13128 13129 13130 13131 13132 13133 13134 13135 13136 13137 13138 13139 13140 13141 13142 13143 13144 13145 13146 13147 13148 13149 13150 13151 13152 13153 13154 13155 13156 13157 </ul> 13158 <!-- Fim Paleta de Cores --> 13159 13160 13161 13162 13163 13164 13165 13166 13167 13168 13169 13170 13171 13172 13173 13174 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 13175 <option disabled="disabled" value=""> 13176 Selecione 13177 </option> 13178 13179 13180 <option value="30710" produto="125245702" estoque="10000">30 Sachês</option> 13181 13182 13183 13184 13185 <option value="30712" produto="125245702" estoque="10000">60 Sachês</option> 13186 13187 13188 13189 13190 <option value="30714" produto="125245702" estoque="10000">90 Sachês</option> 13191 13192 13193 </select> 13194 13195 13196 <select class="select-cor" style="display: none;" title="Campo Cor"> 13197
13197 </select> 13198 13199 13200 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 13201 <div class="alerta-estoque"></div> 13202 <div class="alerta-adicionado"></div> 13203 13204 <div class="acao-compra"> 13205 13206 <div class="quantidade-box"> 13207 <div class="quantidade-box-input"> 13208 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
13208stoque="30000" /> 13209 </div> 13210 <div class="quantidade-box-controles"> 13211 <div class="quantidade-box-controles-itens" data-item="mais"> 13212 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 13213 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 13214 </svg> 13215 </div> 13216 <div class="quantidade-box-controles-itens" data-item="menus"> 13217 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 13218 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 13219 </svg> 13220 </div> 13221 </div> 13222 </div> 13223 13224 13225 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245702"> 13226 13227 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 13228 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 13229 13230 13231 13232 13233 13234 13235 <!-- Cesta de Compras --> 13236 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 13237 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 13238 </svg> 13239 13240 13241 13242 Comprar 13243 13244 13245 </button> 13246 <!-- </form> --> 13247 13248 </div> 13249 13250</div> 13251 13252 13253 </div> 13254 13255 </div> 13256 13257 13258</div> 13259
13260<script> 13261(function (window, document) { 13262 'use strict'; 13263 13264 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 13265 13266 if (window[GLOBAL_KEY]) { 13267 return; 13268 } 13269 13270 if (!window.Map || !window.WeakMap || !window.Promise) { 13271 return; 13272 } 13273 13274 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 13275 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 13276 '#vitrine-personalizada .product[data-id]'; 13277 var BADGE_CLASS = 'farmacam-prescription-badge'; 13278 var HOST_CLASS = 'farmacam-prescription-badge-host'; 13279 var MAX_CONCURRENT_REQUESTS = 6; 13280 var REQUEST_TIMEOUT_MS = 12000; 13281 13282 var rules = { 13283 '294': { 13284 level: '294', 13285 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 13286 }, 13287 '296': { 13288 level: '296', 13289 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 13290 }, 13291 '298': { 13292 level: '298', 13293 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 13294 } 13295 }; 13296 13297 var cache = new Map(); 13298 var pending = new Map(); 13299 var cardStates = new WeakMap(); 13300 var queue = []; 13301 var activeRequests = 0; 13302 var trayAjaxHooked = false; 13303 13304 function injectStyles() { 13305 if (document.getElementById('farmacam-prescription-cards-style')) { 13306 return; 13307 } 13308 13309 var style = document.createElement('style'); 13310 style.id = 'farmacam-prescription-cards-style'; 13311 style.textContent = [ 13312 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 13313 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 13314 'position:absolute!important;', 13315 'top:52px!important;', 13316 'left:10px!important;', 13317 'z-index:999!important;', 13318 'display:block!important;', 13319 'max-width:calc(100% - 20px)!important;', 13320 'box-sizing:border-box!important;', 13321 'padding:8px 12px!important;', 13322 'color:#fff!important;', 13323 'font-family:inherit!important;', 13324 'font-size:13px!important;', 13325 'font-weight:900!important;', 13326 'line-height:1.15!important;', 13327 'text-align:center!important;', 13328 'text-transform:uppercase!important;', 13329 'letter-spacing:.3px!important;', 13330 'white-space:normal!important;', 13331 'overflow-wrap:break-word!important;', 13332 'border-radius:3px!important;', 13333 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 13334 'pointer-events:none!important;', 13335 '}', 13336 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 13337 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 13338 'background:#d70008!important;', 13339 '}', 13340 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 13341 'background:#000!important;', 13342 '}', 13343 '@media (max-width:767px){', 13344 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 13345 'top:42px!important;', 13346 'left:6px!important;', 13347 'max-width:calc(100% - 12px)!important;', 13348 'padding:6px 8px!important;', 13349 'font-size:10px!important;', 13350 '}', 13351 '}' 13352 ].join(''); 13353 13354 (document.head || document.documentElement).appendChild(style); 13355 } 13356 13357 function normalizeProductId(value) { 13358 var id = String(value == null ? '' : value).trim(); 13359 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 13360 } 13361 13362 function classifyRelatedCategories(relatedCategories) { 13363 var found = { 13364 '292': false, 13365 '294': false, 13366 '296': false, 13367 '298': false 13368 }; 13369 13370 function inspect(value, depth) { 13371 var index; 13372 var normalized; 13373 13374 if (value == null || depth > 8) { 13375 return; 13376 } 13377 13378 if (Array.isArray(value)) { 13379 for (index = 0; index < value.length; index += 1) { 13380 inspect(value[index], depth + 1); 13381 } 13382 return; 13383 } 13384 13385 if (typeof value === 'object') { 13386 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 13387 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 13388 inspect(value.id, depth + 1); 13389 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 13390 inspect(value.category_id, depth + 1); 13391 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 13392 inspect(value.Category, depth + 1); 13393 } 13394 return; 13395 } 13396 13397 if (typeof value !== 'string' && typeof value !== 'number') { 13398 return; 13399 } 13400 normalized = normalizeProductId(value); 13401 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 13402 found[normalized] = true; 13403 } 13404 } 13405 13406 inspect(relatedCategories, 0); 13407 13408 if (found['298']) { 13409 return rules['298']; 13410 } 13411 if (found['296']) { 13412 return rules['296']; 13413 } 13414 if (found['294']) { 13415 return rules['294']; 13416 } 13417 13418 // 292 e qualquer classificacao desconhecida ficam sem tarja. 13419 return null; 13420 } 13421 13422 function ruleFromPayload(payload, productId) { 13423 var product = payload && payload.Product; 13424 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 13425 return null; 13426 } 13427 return classifyRelatedCategories(product && product.related_categories); 13428 } 13429 13430 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 13431 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 13432 function attachTrayAjaxCache() { 13433 var jq = window.jQuery; 13434 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 13435 return; 13436 } 13437
13438 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 13439 var url; 13440 var match; 13441 var productId; 13442 var payload; 13443 try { 13444 url = new URL(settings.url, window.location.href); 13445 if (url.origin !== window.location.origin) { 13446 return; 13447 } 13448 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 13449 if (!match) { 13450 return; 13451 } 13452 productId = normalizeProductId(match[1]); 13453 if (!cache.has(productId) && !pending.has(productId)) { 13454 payload = data || xhr.responseJSON; 13455 if (typeof payload === 'string') { 13456 payload = JSON.parse(payload); 13457 } 13458 if (!payload || !payload.Product || 13459 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 13460 return; 13461 } 13462 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 13463 return; 13464 } 13465 cache.set(productId, ruleFromPayload(payload, productId)); 13466 } 13467 } catch (error) { 13468 // Respostas de outras integracoes nao interferem nas tarjas. 13469 } 13470 }); 13471 13472 trayAjaxHooked = true; 13473 document.removeEventListener('load', onTrayScriptLoad, true); 13474 } 13475 13476 function onTrayScriptLoad(event) { 13477 if (event.target && event.target.tagName === 'SCRIPT') { 13478 attachTrayAjaxCache(); 13479 } 13480 } 13481 13482 function requestRule(productId) { 13483 var controller = null; 13484 var timeoutId = null; 13485 var options = { 13486 credentials: 'same-origin', 13487 headers: { 13488 'Accept': 'application/json' 13489 } 13490 }; 13491 var request; 13492 13493 if (typeof window.fetch !== 'function') { 13494 return Promise.resolve(null); 13495 } 13496 13497 if (typeof window.AbortController === 'function') { 13498 controller = new window.AbortController(); 13499 options.signal = controller.signal; 13500 timeoutId = window.setTimeout(function () { 13501 controller.abort(); 13502 }, REQUEST_TIMEOUT_MS); 13503 } 13504 13505 try { 13506 request = window.fetch( 13507 '/web_api/products/' + encodeURIComponent(productId), 13508 options 13509 ); 13510 } catch (error) { 13511 if (timeoutId !== null) { 13512 window.clearTimeout(timeoutId); 13513 } 13514 return Promise.resolve(null); 13515 } 13516 13517 return request.then(function (response) { 13518 if (!response.ok) { 13519 throw new Error('HTTP ' + response.status); 13520 } 13521 return response.json(); 13522 }).then(function (payload) { 13523 return ruleFromPayload(payload, productId); 13524 }).then(function (rule) { 13525 if (timeoutId !== null) { 13526 window.clearTimeout(timeoutId); 13527 } 13528 return rule; 13529 }, function () { 13530 if (timeoutId !== null) { 13531 window.clearTimeout(timeoutId); 13532 } 13533 13534 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 13535 return null; 13536 }); 13537 } 13538 13539 function finishJob(job, rule) { 13540 cache.set(job.productId, rule); 13541 pending.delete(job.productId); 13542 activeRequests -= 1; 13543 job.resolve(rule); 13544 pumpQueue(); 13545 } 13546 13547 function pumpQueue() { 13548 var job; 13549 13550 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 13551 job = queue.shift(); 13552 activeRequests += 1; 13553 13554 (function (currentJob) { 13555 requestRule(currentJob.productId).then(function (rule) { 13556 finishJob(currentJob, rule); 13557 }, function () { 13558 finishJob(currentJob, null); 13559 }); 13560 }(job)); 13561 } 13562 } 13563 13564 function getRule(productId) { 13565 var resolver; 13566 var promise; 13567 13568 if (cache.has(productId)) { 13569 return Promise.resolve(cache.get(productId)); 13570 } 13571 13572 if (pending.has(productId)) { 13573 return pending.get(productId); 13574 } 13575 13576 promise = new Promise(function (resolve) { 13577 resolver = resolve; 13578 }); 13579 13580 pending.set(productId, promise); 13581 queue.push({ 13582 productId: productId, 13583 resolve: resolver 13584 }); 13585 pumpQueue(); 13586 13587 return promise; 13588 } 13589 13590 function findBadge(card) { 13591 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 13592 } 13593 13594 function clearBadge(card) { 13595 var badge = findBadge(card); 13596 var image = card.querySelector('.product-header > .w-100 > .image'); 13597 13598 if (badge && badge.parentNode) { 13599 badge.parentNode.removeChild(badge); 13600 } 13601 13602 if (image) { 13603 image.classList.remove(HOST_CLASS); 13604 } 13605 13606 card.removeAttribute('data-farmacam-prescription-level'); 13607 } 13608 13609 function applyBadge(card, productId, rule) { 13610 var image; 13611 var badge; 13612 13613 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 13614 return false;
13615 } 13616 13617 clearBadge(card); 13618 13619 if (!rule) { 13620 return true; 13621 } 13622 13623 image = card.querySelector('.product-header > .w-100 > .image'); 13624 if (!image) { 13625 return false; 13626 } 13627 13628 badge = document.createElement('span'); 13629 badge.className = BADGE_CLASS; 13630 badge.setAttribute('data-farmacam-generated', 'true'); 13631 badge.setAttribute('data-farmacam-prescription-level', rule.level); 13632 badge.setAttribute('role', 'note'); 13633 badge.textContent = rule.text; 13634 13635 image.classList.add(HOST_CLASS); 13636 image.insertBefore(badge, image.firstChild); 13637 card.setAttribute('data-farmacam-prescription-level', rule.level); 13638 13639 return true; 13640 } 13641 13642 function processCard(card) { 13643 var productId; 13644 var previousState; 13645 var currentState; 13646 13647 if (!card || card.nodeType !== 1) { 13648 return; 13649 } 13650 13651 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 13652 return; 13653 } 13654 13655 productId = normalizeProductId(card.getAttribute('data-id')); 13656 previousState = cardStates.get(card); 13657 13658 if (!productId) { 13659 clearBadge(card); 13660 cardStates.delete(card); 13661 return; 13662 } 13663 13664 if ( 13665 previousState && 13666 previousState.productId === productId && 13667 previousState.status === 'loading' 13668 ) { 13669 return; 13670 } 13671 13672 if ( 13673 previousState && 13674 previousState.productId === productId && 13675 previousState.status === 'processed' 13676 ) { 13677 if (!previousState.rule || findBadge(card)) { 13678 return; 13679 } 13680 } 13681 13682 if (!previousState || previousState.productId !== productId) { 13683 clearBadge(card); 13684 } 13685 13686 currentState = { 13687 productId: productId, 13688 status: 'loading', 13689 rule: null 13690 }; 13691 cardStates.set(card, currentState); 13692 13693 getRule(productId).then(function (rule) { 13694 var applied; 13695 13696 if ( 13697 cardStates.get(card) !== currentState || 13698 normalizeProductId(card.getAttribute('data-id')) !== productId 13699 ) { 13700 return; 13701 } 13702 13703 applied = applyBadge(card, productId, rule); 13704 currentState.rule = rule; 13705 currentState.status = applied ? 'processed' : 'waiting-image'; 13706 }); 13707 } 13708 13709 function scan(root) { 13710 var cards; 13711 var index; 13712 13713 if (!root) { 13714 return; 13715 } 13716 13717 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 13718 processCard(root); 13719 } 13720 13721 if (!root.querySelectorAll) { 13722 return; 13723 } 13724 13725 cards = root.querySelectorAll(CARD_SELECTOR); 13726 for (index = 0; index < cards.length; index += 1) { 13727 processCard(cards[index]); 13728 } 13729 } 13730 13731 function startObserver() { 13732 var observer; 13733 13734 if (!window.MutationObserver || !document.documentElement) { 13735 return; 13736 } 13737 13738 observer = new MutationObserver(function (mutations) { 13739 var mutationIndex; 13740 var nodeIndex; 13741 var mutation; 13742 var node; 13743 var ownerCard; 13744 13745 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 13746 mutation = mutations[mutationIndex]; 13747 13748 if (mutation.type === 'attributes') { 13749 processCard(mutation.target); 13750 continue; 13751 } 13752 13753 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 13754 node = mutation.addedNodes[nodeIndex]; 13755 if (node.nodeType !== 1) { 13756 continue; 13757 } 13758 13759 scan(node); 13760 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 13761 if (ownerCard) { 13762 processCard(ownerCard); 13763 } 13764 } 13765 } 13766 }); 13767 13768 observer.observe(document.documentElement, { 13769 childList: true, 13770 subtree: true, 13771 attributes: true, 13772 attributeFilter: ['data-id'] 13773 }); 13774 13775 window[GLOBAL_KEY].observer = observer; 13776 } 13777 13778 window[GLOBAL_KEY] = { 13779 version: '1.1.0', 13780 cache: cache, 13781 pending: pending, 13782 cardStates: cardStates, 13783 scan: scan, 13784 processCard: processCard, 13785 observer: null 13786 }; 13787 13788 document.addEventListener('load', onTrayScriptLoad, true); 13789 attachTrayAjaxCache(); 13790 injectStyles(); 13791 scan(document); 13792 startObserver(); 13793 13794 if (document.readyState === 'loading') { 13795 document.addEventListener('DOMContentLoaded', function () { 13796 attachTrayAjaxCache(); 13797 scan(document); 13798 }); 13799 } 13800}(window, document)); 13801</script>
13801 13802 </div> 13803 <div 13804 class="swiper-slide fixWidthBoxProduct item"> 13805 13806 13807 13808 13809<div class="product animate open_cart" 13810 data-id="125245718" 13811 data-farmacam-related-categories="," 13812 data-ga4-id="125245718" 13813 data-ga4-name="Blunad - Longevidade Celular - Energia, Vitalidade E Resiliência" 13814 data-ga4-price="157.00" 13815 data-ga4-brand="Farmacam" 13816 data-ga4-category="Tipo de Produto;Manipulados;" 13817 > 13818 13819 <div class="product-header"> 13820 13821 <div class="w-100"> 13822 13823 13824 13825 13826 13827 13828 13829 <div class="product-tags-circle"> 13830 13831 13832 <div class="tag-circle discount tag-icone tag-icone1"> 13833 <svg fill="none" height="16" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 13834 <path stroke-linecap="round" stroke-linejoin="round" d="M15.362 5.214A8.252 8.252 0 0112 21 8.25 8.25 0 016.038 7.048 8.287 8.287 0 009 9.6a8.983 8.983 0 013.361-6.867 8.21 8.21 0 003 2.48z"></path> 13835 <path stroke-linecap="round" stroke-linejoin="round" d="M12 18a3.75 3.75 0 00.495-7.467 5.99 5.99 0 00-1.925 3.546 5.974 5.974 0 01-2.133-1A3.75 3.75 0 0012 18z"></path> 13836 </svg> 13837 <span>Lançamento</span> 13838 </div> 13839 13840 13841 </div> 13842 13843 13844 13845 <div class="product-tags " data-tags-count="1"> 13846 13847 13848 13849 13850 13851 </div> 13852 13853 13854 13855 <div class="image "> 13856 13857 <a title="Blunad - Longevidade Celular - Energia, Vitalidade E Resiliência" href="https://www.farmacam.com.br/manipulados/blunad-longevidade-celular-energia-vitalidade-e-resiliencia" class="space-image"> 13858 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/blunad_longevidade_celular_energia_vitalidade_1_20260902114116_c4e21b8d06f0.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/blunad_longevidade_celular_energia_vitalidade_1_20260902114116_c4e21b8d06f0.png" alt="Blunad - Longevidade Celular - Energia, Vitalidade E Resiliência"> 13859 </a> 13860 13861 </div> 13862 13863 13864 13865 13866 13867 </div> 13868 13869 </div> 13870 13871 <div class="product-body"> 13872 13873 <a title="Blunad - Longevidade Celular - Energia, Vitalidade E Resiliência" class="product-info" href="https://www.farmacam.com.br/manipulados/blunad-longevidade-celular-energia-vitalidade-e-resiliencia"> 13874 13875 <div class="product-info-dados"> 13876 13877 13878 13879 13880 13881 13882 <div class="product-name"> 13883 Blunad - Longevidade Celular - Energia, Vitalidade E Resiliência 13884 </div> 13885 13886 13887 13888 <div class="product-price"> 13889 13890 13891 13892 13893 13894 <span class="product-has-variants text-center"> 13895 A partir de 13896 </span> 13897 13898<div class="price display-cash"> 13899 13900 13901 <span class="current-price "> 13902 R$ 157,00 13903 13904 </span> 13905 13906 <span class="product-installments"> 13907 13908 </span> 13909 13910</div> 13911 </div> 13912 13913 </div> 13914 13915 </a> 13916 13917 </div> 13918 13919 13920 <div class="product-footer"> 13921 13922 13923 <div class="w-100"> 13924 13925 13926 13927<div class="product-rating-catalog"> 13928 13929 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 13930 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 13931 </svg> 13932 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 13933 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 13934 </svg> 13935 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 13936 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 13937 </svg> 13938 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 13939 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 13940 </svg> 13941 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 13942 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 13943 </svg> 13944 13945 13946 <a title="Ver avaliaçõ
13946es de Blunad - Longevidade Celular - Energia, Vitalidade E Resiliência" href="https://www.farmacam.com.br/manipulados/blunad-longevidade-celular-energia-vitalidade-e-resiliencia#comments" class="total"> 13947 Seja o primeiro 13948 </a> 13949 13950 </div> 13951 13952 13953 13954 <div class="config-variacoes-compra"> 13955 13956 13957 13958 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245718"> 13959 <input type="hidden" name="product_id" value="125245718"> 13960 <input type="hidden" name="without_stock_sale" value=""> 13961 13962 <input type="hidden" name="variacao" id="selectedVariant" value=""> 13963 <input type="hidden" name="estoque" value=""> 13964 13965 13966 13967 <ul class="paleta-cores"> 13968 13969 13970 13971 13972 13973 13974 13975 13976 13977 13978 13979 13980 13981 13982 13983 13984 13985 13986 13987 13988 13989 13990 13991 13992 13993 13994 13995 13996 13997 13998 13999 14000 14001 14002 14003 14004 14005 14006 14007 14008 14009 14010 14011 14012 14013 14014 14015 14016 14017 14018 14019 14020 14021 14022 14023 14024 14025 14026 14027 14028 14029 14030 14031 14032 14033 14034 14035 14036 14037 14038 14039 14040 14041 14042 14043 14044 14045 14046 14047 14048 14049 14050 14051 14052 14053 14054 14055 14056 14057 14058 14059 14060 14061 14062 14063 14064 14065 14066 14067 14068 14069 14070 14071 14072 14073 14074 14075 14076 14077 14078 14079 14080 14081 14082 14083 14084 14085 14086 14087 14088 14089 14090 14091 14092 14093 14094 14095 14096 14097 14098 14099 14100 14101 14102 14103 14104 14105 14106 14107 14108 14109 14110 14111 14112 14113 14114 14115 14116 14117 14118 14119 14120 14121 14122 14123 14124 14125 14126 14127 14128 14129 14130 14131 14132 14133 14134 14135 14136 14137 14138 14139 14140 14141 14142 14143 14144 14145 14146 14147 14148 14149 14150 14151 14152 14153 14154 14155 14156 14157 14158 14159 14160 14161 14162 14163 14164 14165 14166 14167 14168 14169 14170 14171 14172 14173 14174 14175 14176 14177 14178 14179 14180 14181 14182 14183 14184 14185 14186 14187 14188 14189 14190 14191 14192 14193 14194 14195 14196 14197 14198 14199 14200 14201 14202 14203 14204 14205 14206 14207 14208 14209 14210 14211 14212 14213 14214 14215 14216 14217 14218 14219 14220 14221 14222 14223 14224 14225 14226 14227 14228 14229 14230 14231 14232 14233 14234 14235 14236 14237 14238 14239 14240 14241 14242 14243 14244 14245 14246 14247 14248 14249 14250 14251 14252 14253 14254 14255 14256 14257 14258 14259 14260 14261 14262 14263 14264 14265 14266 14267 14268 14269 14270 14271 14272 14273 14274 14275 14276 14277 14278 14279 14280 14281 14282 14283 14284 14285 14286 14287 14288 14289 14290 14291 14292 14293 14294 14295 14296 14297 14298 14299 14300 14301 14302 14303 14304 14305 14306 14307 14308 14309 14310 14311 14312 14313 14314 14315 14316 14317 14318 14319 14320 14321 14322 14323 14324 14325 14326 14327 14328 14329 14330 14331 14332 14333 14334 14335 14336 14337 14338 14339 14340 14341 14342 14343 14344 14345 14346 14347 14348 14349 14350 14351 14352 14353 14354 14355 14356 14357 14358 14359 14360 14361 14362 14363 14364 14365 14366 14367 14368 14369 14370 14371 14372 14373 14374 14375 14376 14377 14378 14379 14380 14381 14382 14383 14384 14385 14386 14387 14388 14389 14390 14391 14392 14393 14394 14395 14396 14397 14398 14399 14400 14401 14402 14403 14404 14405 14406 14407 14408 14409
14409 14410 14411 14412 14413 14414 14415 14416 14417 14418 14419 14420 14421 14422 14423 14424 14425 14426 14427 14428 14429 14430 14431 14432 14433 14434 14435 14436 14437 14438 14439 14440 14441 14442 14443 14444 14445 14446 14447 14448 14449 14450 14451 14452 14453 14454 14455 14456 14457 14458 14459 14460 14461 14462 14463 14464 14465 14466 14467 14468 14469 14470 14471 14472 14473 14474 14475 14476 14477 14478 </ul> 14479 <!-- Fim Paleta de Cores --> 14480 14481 14482 14483 14484 14485 14486 14487 14488 14489 14490 14491 14492 14493 14494 14495 14496 14497 14498 14499 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 14500 <option disabled="disabled" value=""> 14501 Selecione 14502 </option> 14503 14504 14505 <option value="30768" produto="125245718" estoque="10000">250 mg - 30 doses</option> 14506 14507 14508 14509 14510 <option value="30770" produto="125245718" estoque="10000">250 mg - 60 doses</option> 14511 14512 14513 14514 14515 <option value="30772" produto="125245718" estoque="10000">500 mg - 30 doses</option> 14516 14517 14518 14519 14520 <option value="30774" produto="125245718" estoque="10000">500 mg - 60 doses</option> 14521 14522 14523 </select> 14524 14525 14526 <select class="select-cor" style="display: none;" title="Campo Cor"> 14527
14527 </select> 14528 14529 14530 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 14531 <div class="alerta-estoque"></div> 14532 <div class="alerta-adicionado"></div> 14533 14534 <div class="acao-compra"> 14535 14536 <div class="quantidade-box"> 14537 <div class="quantidade-box-input"> 14538 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-estoque="40000" /> 14539 </div> 14540 <div class="quantidade-box-controles"> 14541 <div class="quantidade-box-controles-itens" data-item="mais"> 14542 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 14543 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 14544 </svg> 14545 </div> 14546 <div class="quantidade-box-controles-itens" data-item="menus"> 14547 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 14548 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 14549 </svg> 14550 </div> 14551 </div> 14552 </div> 14553 14554 14555 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245718"> 14556 14557 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 14558 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 14559 14560 14561 14562 14563 14564 14565 <!-- Cesta de Compras --> 14566 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 14567 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 14568 </svg> 14569 14570 14571 14572 Comprar 14573 14574 14575 </button> 14576 <!-- </form> --> 14577 14578 </div> 14579 14580</div> 14581 14582 14583 </div> 14584 14585 </div> 14586 14587 14588</div> 14589
14590<script> 14591(function (window, document) { 14592 'use strict'; 14593 14594 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 14595 14596 if (window[GLOBAL_KEY]) { 14597 return; 14598 } 14599 14600 if (!window.Map || !window.WeakMap || !window.Promise) { 14601 return; 14602 } 14603 14604 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 14605 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 14606 '#vitrine-personalizada .product[data-id]'; 14607 var BADGE_CLASS = 'farmacam-prescription-badge'; 14608 var HOST_CLASS = 'farmacam-prescription-badge-host'; 14609 var MAX_CONCURRENT_REQUESTS = 6; 14610 var REQUEST_TIMEOUT_MS = 12000; 14611 14612 var rules = { 14613 '294': { 14614 level: '294', 14615 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 14616 }, 14617 '296': { 14618 level: '296', 14619 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 14620 }, 14621 '298': { 14622 level: '298', 14623 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 14624 } 14625 }; 14626 14627 var cache = new Map(); 14628 var pending = new Map(); 14629 var cardStates = new WeakMap(); 14630 var queue = []; 14631 var activeRequests = 0; 14632 var trayAjaxHooked = false; 14633 14634 function injectStyles() { 14635 if (document.getElementById('farmacam-prescription-cards-style')) { 14636 return; 14637 } 14638 14639 var style = document.createElement('style'); 14640 style.id = 'farmacam-prescription-cards-style'; 14641 style.textContent = [ 14642 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 14643 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 14644 'position:absolute!important;', 14645 'top:52px!important;', 14646 'left:10px!important;', 14647 'z-index:999!important;', 14648 'display:block!important;', 14649 'max-width:calc(100% - 20px)!important;', 14650 'box-sizing:border-box!important;', 14651 'padding:8px 12px!important;', 14652 'color:#fff!important;', 14653 'font-family:inherit!important;', 14654 'font-size:13px!important;', 14655 'font-weight:900!important;', 14656 'line-height:1.15!important;', 14657 'text-align:center!important;', 14658 'text-transform:uppercase!important;', 14659 'letter-spacing:.3px!important;', 14660 'white-space:normal!important;', 14661 'overflow-wrap:break-word!important;', 14662 'border-radius:3px!important;', 14663 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 14664 'pointer-events:none!important;', 14665 '}', 14666 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 14667 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 14668 'background:#d70008!important;', 14669 '}', 14670 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 14671 'background:#000!important;', 14672 '}', 14673 '@media (max-width:767px){', 14674 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 14675 'top:42px!important;', 14676 'left:6px!important;', 14677 'max-width:calc(100% - 12px)!important;', 14678 'padding:6px 8px!important;', 14679 'font-size:10px!important;', 14680 '}', 14681 '}' 14682 ].join(''); 14683 14684 (document.head || document.documentElement).appendChild(style); 14685 } 14686 14687 function normalizeProductId(value) { 14688 var id = String(value == null ? '' : value).trim(); 14689 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 14690 } 14691 14692 function classifyRelatedCategories(relatedCategories) { 14693 var found = { 14694 '292': false, 14695 '294': false, 14696 '296': false, 14697 '298': false 14698 }; 14699 14700 function inspect(value, depth) { 14701 var index; 14702 var normalized; 14703 14704 if (value == null || depth > 8) { 14705 return; 14706 } 14707 14708 if (Array.isArray(value)) { 14709 for (index = 0; index < value.length; index += 1) { 14710 inspect(value[index], depth + 1); 14711 } 14712 return; 14713 } 14714 14715 if (typeof value === 'object') { 14716 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 14717 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 14718 inspect(value.id, depth + 1); 14719 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 14720 inspect(value.category_id, depth + 1); 14721 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 14722 inspect(value.Category, depth + 1); 14723 } 14724 return; 14725 } 14726 14727 if (typeof value !== 'string' && typeof value !== 'number') { 14728 return; 14729 } 14730 normalized = normalizeProductId(value); 14731 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 14732 found[normalized] = true; 14733 } 14734 } 14735 14736 inspect(relatedCategories, 0); 14737 14738 if (found['298']) { 14739 return rules['298']; 14740 } 14741 if (found['296']) { 14742 return rules['296']; 14743 } 14744 if (found['294']) { 14745 return rules['294']; 14746 } 14747 14748 // 292 e qualquer classificacao desconhecida ficam sem tarja. 14749 return null; 14750 } 14751 14752 function ruleFromPayload(payload, productId) { 14753 var product = payload && payload.Product; 14754 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 14755 return null; 14756 } 14757 return classifyRelatedCategories(product && product.related_categories); 14758 } 14759 14760 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 14761 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 14762 function attachTrayAjaxCache() { 14763 var jq = window.jQuery; 14764 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 14765 return; 14766 } 14767
14768 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 14769 var url; 14770 var match; 14771 var productId; 14772 var payload; 14773 try { 14774 url = new URL(settings.url, window.location.href); 14775 if (url.origin !== window.location.origin) { 14776 return; 14777 } 14778 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 14779 if (!match) { 14780 return; 14781 } 14782 productId = normalizeProductId(match[1]); 14783 if (!cache.has(productId) && !pending.has(productId)) { 14784 payload = data || xhr.responseJSON; 14785 if (typeof payload === 'string') { 14786 payload = JSON.parse(payload); 14787 } 14788 if (!payload || !payload.Product || 14789 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 14790 return; 14791 } 14792 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 14793 return; 14794 } 14795 cache.set(productId, ruleFromPayload(payload, productId)); 14796 } 14797 } catch (error) { 14798 // Respostas de outras integracoes nao interferem nas tarjas. 14799 } 14800 }); 14801 14802 trayAjaxHooked = true; 14803 document.removeEventListener('load', onTrayScriptLoad, true); 14804 } 14805 14806 function onTrayScriptLoad(event) { 14807 if (event.target && event.target.tagName === 'SCRIPT') { 14808 attachTrayAjaxCache(); 14809 } 14810 } 14811 14812 function requestRule(productId) { 14813 var controller = null; 14814 var timeoutId = null; 14815 var options = { 14816 credentials: 'same-origin', 14817 headers: { 14818 'Accept': 'application/json' 14819 } 14820 }; 14821 var request; 14822 14823 if (typeof window.fetch !== 'function') { 14824 return Promise.resolve(null); 14825 } 14826 14827 if (typeof window.AbortController === 'function') { 14828 controller = new window.AbortController(); 14829 options.signal = controller.signal; 14830 timeoutId = window.setTimeout(function () { 14831 controller.abort(); 14832 }, REQUEST_TIMEOUT_MS); 14833 } 14834 14835 try { 14836 request = window.fetch( 14837 '/web_api/products/' + encodeURIComponent(productId), 14838 options 14839 ); 14840 } catch (error) { 14841 if (timeoutId !== null) { 14842 window.clearTimeout(timeoutId); 14843 } 14844 return Promise.resolve(null); 14845 } 14846 14847 return request.then(function (response) { 14848 if (!response.ok) { 14849 throw new Error('HTTP ' + response.status); 14850 } 14851 return response.json(); 14852 }).then(function (payload) { 14853 return ruleFromPayload(payload, productId); 14854 }).then(function (rule) { 14855 if (timeoutId !== null) { 14856 window.clearTimeout(timeoutId); 14857 } 14858 return rule; 14859 }, function () { 14860 if (timeoutId !== null) { 14861 window.clearTimeout(timeoutId); 14862 } 14863 14864 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 14865 return null; 14866 }); 14867 } 14868 14869 function finishJob(job, rule) { 14870 cache.set(job.productId, rule); 14871 pending.delete(job.productId); 14872 activeRequests -= 1; 14873 job.resolve(rule); 14874 pumpQueue(); 14875 } 14876 14877 function pumpQueue() { 14878 var job; 14879 14880 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 14881 job = queue.shift(); 14882 activeRequests += 1; 14883 14884 (function (currentJob) { 14885 requestRule(currentJob.productId).then(function (rule) { 14886 finishJob(currentJob, rule); 14887 }, function () { 14888 finishJob(currentJob, null); 14889 }); 14890 }(job)); 14891 } 14892 } 14893 14894 function getRule(productId) { 14895 var resolver; 14896 var promise; 14897 14898 if (cache.has(productId)) { 14899 return Promise.resolve(cache.get(productId)); 14900 } 14901 14902 if (pending.has(productId)) { 14903 return pending.get(productId); 14904 } 14905 14906 promise = new Promise(function (resolve) { 14907 resolver = resolve; 14908 }); 14909 14910 pending.set(productId, promise); 14911 queue.push({ 14912 productId: productId, 14913 resolve: resolver 14914 }); 14915 pumpQueue(); 14916 14917 return promise; 14918 } 14919 14920 function findBadge(card) { 14921 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 14922 } 14923 14924 function clearBadge(card) { 14925 var badge = findBadge(card); 14926 var image = card.querySelector('.product-header > .w-100 > .image'); 14927 14928 if (badge && badge.parentNode) { 14929 badge.parentNode.removeChild(badge); 14930 } 14931 14932 if (image) { 14933 image.classList.remove(HOST_CLASS); 14934 } 14935 14936 card.removeAttribute('data-farmacam-prescription-level'); 14937 } 14938 14939 function applyBadge(card, productId, rule) { 14940 var image; 14941 var badge; 14942 14943 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 14944 return false;
14945 } 14946 14947 clearBadge(card); 14948 14949 if (!rule) { 14950 return true; 14951 } 14952 14953 image = card.querySelector('.product-header > .w-100 > .image'); 14954 if (!image) { 14955 return false; 14956 } 14957 14958 badge = document.createElement('span'); 14959 badge.className = BADGE_CLASS; 14960 badge.setAttribute('data-farmacam-generated', 'true'); 14961 badge.setAttribute('data-farmacam-prescription-level', rule.level); 14962 badge.setAttribute('role', 'note'); 14963 badge.textContent = rule.text; 14964 14965 image.classList.add(HOST_CLASS); 14966 image.insertBefore(badge, image.firstChild); 14967 card.setAttribute('data-farmacam-prescription-level', rule.level); 14968 14969 return true; 14970 } 14971 14972 function processCard(card) { 14973 var productId; 14974 var previousState; 14975 var currentState; 14976 14977 if (!card || card.nodeType !== 1) { 14978 return; 14979 } 14980 14981 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 14982 return; 14983 } 14984 14985 productId = normalizeProductId(card.getAttribute('data-id')); 14986 previousState = cardStates.get(card); 14987 14988 if (!productId) { 14989 clearBadge(card); 14990 cardStates.delete(card); 14991 return; 14992 } 14993 14994 if ( 14995 previousState && 14996 previousState.productId === productId && 14997 previousState.status === 'loading' 14998 ) { 14999 return; 15000 } 15001 15002 if ( 15003 previousState && 15004 previousState.productId === productId && 15005 previousState.status === 'processed' 15006 ) { 15007 if (!previousState.rule || findBadge(card)) { 15008 return; 15009 } 15010 } 15011 15012 if (!previousState || previousState.productId !== productId) { 15013 clearBadge(card); 15014 } 15015 15016 currentState = { 15017 productId: productId, 15018 status: 'loading', 15019 rule: null 15020 }; 15021 cardStates.set(card, currentState); 15022 15023 getRule(productId).then(function (rule) { 15024 var applied; 15025 15026 if ( 15027 cardStates.get(card) !== currentState || 15028 normalizeProductId(card.getAttribute('data-id')) !== productId 15029 ) { 15030 return; 15031 } 15032 15033 applied = applyBadge(card, productId, rule); 15034 currentState.rule = rule; 15035 currentState.status = applied ? 'processed' : 'waiting-image'; 15036 }); 15037 } 15038 15039 function scan(root) { 15040 var cards; 15041 var index; 15042 15043 if (!root) { 15044 return; 15045 } 15046 15047 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 15048 processCard(root); 15049 } 15050 15051 if (!root.querySelectorAll) { 15052 return; 15053 } 15054 15055 cards = root.querySelectorAll(CARD_SELECTOR); 15056 for (index = 0; index < cards.length; index += 1) { 15057 processCard(cards[index]); 15058 } 15059 } 15060 15061 function startObserver() { 15062 var observer; 15063 15064 if (!window.MutationObserver || !document.documentElement) { 15065 return; 15066 } 15067 15068 observer = new MutationObserver(function (mutations) { 15069 var mutationIndex; 15070 var nodeIndex; 15071 var mutation; 15072 var node; 15073 var ownerCard; 15074 15075 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 15076 mutation = mutations[mutationIndex]; 15077 15078 if (mutation.type === 'attributes') { 15079 processCard(mutation.target); 15080 continue; 15081 } 15082 15083 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 15084 node = mutation.addedNodes[nodeIndex]; 15085 if (node.nodeType !== 1) { 15086 continue; 15087 } 15088 15089 scan(node); 15090 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 15091 if (ownerCard) { 15092 processCard(ownerCard); 15093 } 15094 } 15095 } 15096 }); 15097 15098 observer.observe(document.documentElement, { 15099 childList: true, 15100 subtree: true, 15101 attributes: true, 15102 attributeFilter: ['data-id'] 15103 }); 15104 15105 window[GLOBAL_KEY].observer = observer; 15106 } 15107 15108 window[GLOBAL_KEY] = { 15109 version: '1.1.0', 15110 cache: cache, 15111 pending: pending, 15112 cardStates: cardStates, 15113 scan: scan, 15114 processCard: processCard, 15115 observer: null 15116 }; 15117 15118 document.addEventListener('load', onTrayScriptLoad, true); 15119 attachTrayAjaxCache(); 15120 injectStyles(); 15121 scan(document); 15122 startObserver(); 15123 15124 if (document.readyState === 'loading') { 15125 document.addEventListener('DOMContentLoaded', function () { 15126 attachTrayAjaxCache(); 15127 scan(document); 15128 }); 15129 } 15130}(window, document)); 15131</script>
15131 15132 </div> 15133 <div 15134 class="swiper-slide fixWidthBoxProduct item"> 15135 15136 15137 15138 15139<div class="product animate open_cart" 15140 data-id="125245728" 15141 data-farmacam-related-categories="," 15142 data-ga4-id="125245728" 15143 data-ga4-name="Curcumicel 185x" 15144 data-ga4-price="279.00" 15145 data-ga4-brand="Farmacam" 15146 data-ga4-category="Tipo de Produto;Manipulados;" 15147 > 15148 15149 <div class="product-header"> 15150 15151 <div class="w-100"> 15152 15153 15154 15155 15156 15157 15158 15159 <div class="product-tags-circle"> 15160 15161 15162 <div class="tag-circle discount tag-icone tag-icone1"> 15163 <svg fill="none" height="16" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 15164 <path stroke-linecap="round" stroke-linejoin="round" d="M15.362 5.214A8.252 8.252 0 0112 21 8.25 8.25 0 016.038 7.048 8.287 8.287 0 009 9.6a8.983 8.983 0 013.361-6.867 8.21 8.21 0 003 2.48z"></path> 15165 <path stroke-linecap="round" stroke-linejoin="round" d="M12 18a3.75 3.75 0 00.495-7.467 5.99 5.99 0 00-1.925 3.546 5.974 5.974 0 01-2.133-1A3.75 3.75 0 0012 18z"></path> 15166 </svg> 15167 <span>Lançamento</span> 15168 </div> 15169 15170 15171 </div> 15172 15173 15174 15175 <div class="product-tags " data-tags-count="1"> 15176 15177 15178 15179 15180 15181 </div> 15182 15183 15184 15185 <div class="image "> 15186 15187 <a title="Curcumicel 185x" href="https://www.farmacam.com.br/manipulados/curcumicel-185x" class="space-image"> 15188 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/curcumicel_185x_1_20260904161203_f3e69168b5d5.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/curcumicel_185x_1_20260904161203_f3e69168b5d5.png" alt="Curcumicel 185x"> 15189 </a> 15190 15191 </div> 15192 15193 15194 15195 15196 15197 </div> 15198 15199 </div> 15200 15201 <div class="product-body"> 15202 15203 <a title="Curcumicel 185x" class="product-info" href="https://www.farmacam.com.br/manipulados/curcumicel-185x"> 15204 15205 <div class="product-info-dados"> 15206 15207 15208 15209 15210 15211 15212 <div class="product-name"> 15213 Curcumicel 185x 15214 </div> 15215 15216 15217 15218 <div class="product-price"> 15219 15220 15221 15222 15223 15224 <span class="product-has-variants text-center"> 15225 A partir de 15226 </span> 15227 15228<div class="price display-cash"> 15229 15230 15231 <span class="current-price "> 15232 R$ 279,00 15233 15234 </span> 15235 15236 <span class="product-installments"> 15237 15238 </span> 15239 15240</div> 15241 </div> 15242 15243 </div> 15244 15245 </a> 15246 15247 </div> 15248 15249 15250 <div class="product-footer"> 15251 15252 15253 <div class="w-100"> 15254 15255 15256 15257<div class="product-rating-catalog"> 15258 15259 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 15260 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 15261 </svg> 15262 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 15263 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 15264 </svg> 15265 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 15266 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 15267 </svg> 15268 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 15269 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 15270 </svg> 15271 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 15272 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 15273 </svg> 15274 15275 15276 <a title="Ver avaliações de Curcumicel 185x" href="https://www.farmacam.com.br/manipulados/curcumicel-185x#comments" class="total"> 15277 Seja o primeiro 15278 </a> 15279 15280 </div> 15281 15282 15283 15284 <div class="config-variacoes-compra"> 15285 15286 15287 15288 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245728"> 15289 <input type="hidden" name="product_id" value="125245728"> 15290 <input type="hidden" name="without_stock_sale" value=""> 15291 15292 <input type="hidden" name="variacao" id="selectedVariant" value=""> 15293 <input type="hidden" name="estoque" value=""> 15294 15295 15296 15297 <ul class="paleta-cores"> 15298 15299 15300 15301 15302 15303 15304 15305 15306 15307 15308 15309 15310 15311 15312 15313 15314 15315 15316 15317 15318 15319 15320 15321 15322 15323 15324 15325 15326 15327 15328 15329 15330 15331 15332 15333 15334 15335 15336 15337 15338 15339 15340 15341 15342 15343 15344 15345 15346 15347 15348 15349 15350 15351 15352 15353 15354 15355 15356 15357 15358 15359 15360 15361 15362 15363 15364 15365 15366 15367 15368 15369 15370 15371 15372 15373 15374 15375 15376 15377 15378 15379 15380 15381 15382 15383 15384 15385 15386 15387 15388 15389 15390 15391 15392 15393 15394 15395 15396 15397 15398 15399 15400 15401 15402 15403 15404 15405 15406 15407 15408 15409 15410 15411 15412 15413 15414 15415 15416 15417 15418 15419 15420 15421 15422 15423 15424 15425 15426 15427 15428 15429 15430 15431 15432 15433 15434 15435 15436 15437 15438 15439 15440 15441 15442 15443 15444 15445 15446 15447 15448 15449 15450 15451 15452 15453 15454 15455 15456 15457 15458 15459 15460 15461 15462 15463 15464 15465 15466 15467 15468 15469 15470 15471 15472 15473 15474 15475 15476 15477 15478 15479 15480 15481 15482 15483 15484 15485 15486 15487 15488 15489 15490 15491 15492 15493 15494 15495 15496 15497 15498 15499 15500 15501 15502 15503 15504 15505 15506 15507 15508 15509 15510 15511 15512 15513 15514 15515 15516 15517 15518 15519 15520 15521 15522 15523 15524 15525 15526 15527 15528 15529 15530 15531 15532 15533 15534 15535 15536 15537 15538 15539 15540 15541 15542 15543 15544 15545 15546 15547 15548 15549 15550 15551 15552 15553 15554
15554 15555 15556 15557 15558 15559 15560 15561 15562 15563 15564 15565 15566 15567 15568 15569 15570 15571 15572 15573 15574 15575 15576 15577 15578 15579 15580 15581 15582 15583 15584 15585 15586 15587 15588 15589 15590 15591 15592 15593 15594 15595 15596 15597 15598 15599 15600 15601 15602 15603 15604 15605 15606 15607 15608 15609 15610 15611 15612 15613 15614 15615 15616 15617 15618 15619 15620 15621 15622 15623 15624 15625 15626 15627 15628 15629 15630 15631 15632 15633 15634 15635 15636 15637 15638 15639 15640 15641 15642 15643 15644 15645 15646 15647 15648 15649 15650 15651 15652 15653 15654 15655 15656 15657 15658 15659 15660 15661 15662 15663 15664 15665 15666 15667 15668 15669 15670 15671 15672 15673 15674 15675 15676 15677 15678 15679 15680 15681 15682 15683 15684 15685 15686 15687 15688 15689 15690 15691 15692 15693 15694 15695 15696 15697 15698 15699 15700 15701 15702 15703 15704 15705 15706 15707 15708 15709 15710 15711 15712 15713 15714 15715 15716 </ul> 15717 <!-- Fim Paleta de Cores --> 15718 15719 15720 15721 15722 15723 15724 15725 15726 15727 15728 15729 15730 15731 15732 15733 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 15734 <option disabled="disabled" value=""> 15735 Selecione 15736 </option> 15737 15738 15739 <option value="30804" produto="125245728" estoque="10000">500 mg - 30 doses</option> 15740 15741 15742 15743 15744 <option value="30806" produto="125245728" estoque="10000">500 mg - 60 doses</option> 15745 15746 15747 15748 15749 <option value="30808" produto="125245728" estoque="10000">500 mg - 90 doses</option> 15750 15751 15752 </select> 15753 15754 15755 <select class="select-cor" style="display: none;" title="Campo Cor"> 15756
15756 </select> 15757 15758 15759 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 15760 <div class="alerta-estoque"></div> 15761 <div class="alerta-adicionado"></div> 15762 15763 <div class="acao-compra"> 15764 15765 <div class="quantidade-box"> 15766 <div class="quantidade-box-input"> 15767 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
15767stoque="30000" /> 15768 </div> 15769 <div class="quantidade-box-controles"> 15770 <div class="quantidade-box-controles-itens" data-item="mais"> 15771 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 15772 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 15773 </svg> 15774 </div> 15775 <div class="quantidade-box-controles-itens" data-item="menus"> 15776 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 15777 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 15778 </svg> 15779 </div> 15780 </div> 15781 </div> 15782 15783 15784 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245728"> 15785 15786 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 15787 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 15788 15789 15790 15791 15792 15793 15794 <!-- Cesta de Compras --> 15795 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 15796 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 15797 </svg> 15798 15799 15800 15801 Comprar 15802 15803 15804 </button> 15805 <!-- </form> --> 15806 15807 </div> 15808 15809</div> 15810 15811 15812 </div> 15813 15814 </div> 15815 15816 15817</div> 15818
15819<script> 15820(function (window, document) { 15821 'use strict'; 15822 15823 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 15824 15825 if (window[GLOBAL_KEY]) { 15826 return; 15827 } 15828 15829 if (!window.Map || !window.WeakMap || !window.Promise) { 15830 return; 15831 } 15832 15833 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 15834 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 15835 '#vitrine-personalizada .product[data-id]'; 15836 var BADGE_CLASS = 'farmacam-prescription-badge'; 15837 var HOST_CLASS = 'farmacam-prescription-badge-host'; 15838 var MAX_CONCURRENT_REQUESTS = 6; 15839 var REQUEST_TIMEOUT_MS = 12000; 15840 15841 var rules = { 15842 '294': { 15843 level: '294', 15844 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 15845 }, 15846 '296': { 15847 level: '296', 15848 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 15849 }, 15850 '298': { 15851 level: '298', 15852 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 15853 } 15854 }; 15855 15856 var cache = new Map(); 15857 var pending = new Map(); 15858 var cardStates = new WeakMap(); 15859 var queue = []; 15860 var activeRequests = 0; 15861 var trayAjaxHooked = false; 15862 15863 function injectStyles() { 15864 if (document.getElementById('farmacam-prescription-cards-style')) { 15865 return; 15866 } 15867 15868 var style = document.createElement('style'); 15869 style.id = 'farmacam-prescription-cards-style'; 15870 style.textContent = [ 15871 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 15872 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 15873 'position:absolute!important;', 15874 'top:52px!important;', 15875 'left:10px!important;', 15876 'z-index:999!important;', 15877 'display:block!important;', 15878 'max-width:calc(100% - 20px)!important;', 15879 'box-sizing:border-box!important;', 15880 'padding:8px 12px!important;', 15881 'color:#fff!important;', 15882 'font-family:inherit!important;', 15883 'font-size:13px!important;', 15884 'font-weight:900!important;', 15885 'line-height:1.15!important;', 15886 'text-align:center!important;', 15887 'text-transform:uppercase!important;', 15888 'letter-spacing:.3px!important;', 15889 'white-space:normal!important;', 15890 'overflow-wrap:break-word!important;', 15891 'border-radius:3px!important;', 15892 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 15893 'pointer-events:none!important;', 15894 '}', 15895 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 15896 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 15897 'background:#d70008!important;', 15898 '}', 15899 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 15900 'background:#000!important;', 15901 '}', 15902 '@media (max-width:767px){', 15903 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 15904 'top:42px!important;', 15905 'left:6px!important;', 15906 'max-width:calc(100% - 12px)!important;', 15907 'padding:6px 8px!important;', 15908 'font-size:10px!important;', 15909 '}', 15910 '}' 15911 ].join(''); 15912 15913 (document.head || document.documentElement).appendChild(style); 15914 } 15915 15916 function normalizeProductId(value) { 15917 var id = String(value == null ? '' : value).trim(); 15918 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 15919 } 15920 15921 function classifyRelatedCategories(relatedCategories) { 15922 var found = { 15923 '292': false, 15924 '294': false, 15925 '296': false, 15926 '298': false 15927 }; 15928 15929 function inspect(value, depth) { 15930 var index; 15931 var normalized; 15932 15933 if (value == null || depth > 8) { 15934 return; 15935 } 15936 15937 if (Array.isArray(value)) { 15938 for (index = 0; index < value.length; index += 1) { 15939 inspect(value[index], depth + 1); 15940 } 15941 return; 15942 } 15943 15944 if (typeof value === 'object') { 15945 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 15946 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 15947 inspect(value.id, depth + 1); 15948 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 15949 inspect(value.category_id, depth + 1); 15950 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 15951 inspect(value.Category, depth + 1); 15952 } 15953 return; 15954 } 15955 15956 if (typeof value !== 'string' && typeof value !== 'number') { 15957 return; 15958 } 15959 normalized = normalizeProductId(value); 15960 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 15961 found[normalized] = true; 15962 } 15963 } 15964 15965 inspect(relatedCategories, 0); 15966 15967 if (found['298']) { 15968 return rules['298']; 15969 } 15970 if (found['296']) { 15971 return rules['296']; 15972 } 15973 if (found['294']) { 15974 return rules['294']; 15975 } 15976 15977 // 292 e qualquer classificacao desconhecida ficam sem tarja. 15978 return null; 15979 } 15980 15981 function ruleFromPayload(payload, productId) { 15982 var product = payload && payload.Product; 15983 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 15984 return null; 15985 } 15986 return classifyRelatedCategories(product && product.related_categories); 15987 } 15988 15989 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 15990 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 15991 function attachTrayAjaxCache() { 15992 var jq = window.jQuery; 15993 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 15994 return; 15995 } 15996
15997 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 15998 var url; 15999 var match; 16000 var productId; 16001 var payload; 16002 try { 16003 url = new URL(settings.url, window.location.href); 16004 if (url.origin !== window.location.origin) { 16005 return; 16006 } 16007 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 16008 if (!match) { 16009 return; 16010 } 16011 productId = normalizeProductId(match[1]); 16012 if (!cache.has(productId) && !pending.has(productId)) { 16013 payload = data || xhr.responseJSON; 16014 if (typeof payload === 'string') { 16015 payload = JSON.parse(payload); 16016 } 16017 if (!payload || !payload.Product || 16018 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 16019 return; 16020 } 16021 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 16022 return; 16023 } 16024 cache.set(productId, ruleFromPayload(payload, productId)); 16025 } 16026 } catch (error) { 16027 // Respostas de outras integracoes nao interferem nas tarjas. 16028 } 16029 }); 16030 16031 trayAjaxHooked = true; 16032 document.removeEventListener('load', onTrayScriptLoad, true); 16033 } 16034 16035 function onTrayScriptLoad(event) { 16036 if (event.target && event.target.tagName === 'SCRIPT') { 16037 attachTrayAjaxCache(); 16038 } 16039 } 16040 16041 function requestRule(productId) { 16042 var controller = null; 16043 var timeoutId = null; 16044 var options = { 16045 credentials: 'same-origin', 16046 headers: { 16047 'Accept': 'application/json' 16048 } 16049 }; 16050 var request; 16051 16052 if (typeof window.fetch !== 'function') { 16053 return Promise.resolve(null); 16054 } 16055 16056 if (typeof window.AbortController === 'function') { 16057 controller = new window.AbortController(); 16058 options.signal = controller.signal; 16059 timeoutId = window.setTimeout(function () { 16060 controller.abort(); 16061 }, REQUEST_TIMEOUT_MS); 16062 } 16063 16064 try { 16065 request = window.fetch( 16066 '/web_api/products/' + encodeURIComponent(productId), 16067 options 16068 ); 16069 } catch (error) { 16070 if (timeoutId !== null) { 16071 window.clearTimeout(timeoutId); 16072 } 16073 return Promise.resolve(null); 16074 } 16075 16076 return request.then(function (response) { 16077 if (!response.ok) { 16078 throw new Error('HTTP ' + response.status); 16079 } 16080 return response.json(); 16081 }).then(function (payload) { 16082 return ruleFromPayload(payload, productId); 16083 }).then(function (rule) { 16084 if (timeoutId !== null) { 16085 window.clearTimeout(timeoutId); 16086 } 16087 return rule; 16088 }, function () { 16089 if (timeoutId !== null) { 16090 window.clearTimeout(timeoutId); 16091 } 16092 16093 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 16094 return null; 16095 }); 16096 } 16097 16098 function finishJob(job, rule) { 16099 cache.set(job.productId, rule); 16100 pending.delete(job.productId); 16101 activeRequests -= 1; 16102 job.resolve(rule); 16103 pumpQueue(); 16104 } 16105 16106 function pumpQueue() { 16107 var job; 16108 16109 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 16110 job = queue.shift(); 16111 activeRequests += 1; 16112 16113 (function (currentJob) { 16114 requestRule(currentJob.productId).then(function (rule) { 16115 finishJob(currentJob, rule); 16116 }, function () { 16117 finishJob(currentJob, null); 16118 }); 16119 }(job)); 16120 } 16121 } 16122 16123 function getRule(productId) { 16124 var resolver; 16125 var promise; 16126 16127 if (cache.has(productId)) { 16128 return Promise.resolve(cache.get(productId)); 16129 } 16130 16131 if (pending.has(productId)) { 16132 return pending.get(productId); 16133 } 16134 16135 promise = new Promise(function (resolve) { 16136 resolver = resolve; 16137 }); 16138 16139 pending.set(productId, promise); 16140 queue.push({ 16141 productId: productId, 16142 resolve: resolver 16143 }); 16144 pumpQueue(); 16145 16146 return promise; 16147 } 16148 16149 function findBadge(card) { 16150 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 16151 } 16152 16153 function clearBadge(card) { 16154 var badge = findBadge(card); 16155 var image = card.querySelector('.product-header > .w-100 > .image'); 16156 16157 if (badge && badge.parentNode) { 16158 badge.parentNode.removeChild(badge); 16159 } 16160 16161 if (image) { 16162 image.classList.remove(HOST_CLASS); 16163 } 16164 16165 card.removeAttribute('data-farmacam-prescription-level'); 16166 } 16167 16168 function applyBadge(card, productId, rule) { 16169 var image; 16170 var badge; 16171 16172 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 16173 return false;
16174 } 16175 16176 clearBadge(card); 16177 16178 if (!rule) { 16179 return true; 16180 } 16181 16182 image = card.querySelector('.product-header > .w-100 > .image'); 16183 if (!image) { 16184 return false; 16185 } 16186 16187 badge = document.createElement('span'); 16188 badge.className = BADGE_CLASS; 16189 badge.setAttribute('data-farmacam-generated', 'true'); 16190 badge.setAttribute('data-farmacam-prescription-level', rule.level); 16191 badge.setAttribute('role', 'note'); 16192 badge.textContent = rule.text; 16193 16194 image.classList.add(HOST_CLASS); 16195 image.insertBefore(badge, image.firstChild); 16196 card.setAttribute('data-farmacam-prescription-level', rule.level); 16197 16198 return true; 16199 } 16200 16201 function processCard(card) { 16202 var productId; 16203 var previousState; 16204 var currentState; 16205 16206 if (!card || card.nodeType !== 1) { 16207 return; 16208 } 16209 16210 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 16211 return; 16212 } 16213 16214 productId = normalizeProductId(card.getAttribute('data-id')); 16215 previousState = cardStates.get(card); 16216 16217 if (!productId) { 16218 clearBadge(card); 16219 cardStates.delete(card); 16220 return; 16221 } 16222 16223 if ( 16224 previousState && 16225 previousState.productId === productId && 16226 previousState.status === 'loading' 16227 ) { 16228 return; 16229 } 16230 16231 if ( 16232 previousState && 16233 previousState.productId === productId && 16234 previousState.status === 'processed' 16235 ) { 16236 if (!previousState.rule || findBadge(card)) { 16237 return; 16238 } 16239 } 16240 16241 if (!previousState || previousState.productId !== productId) { 16242 clearBadge(card); 16243 } 16244 16245 currentState = { 16246 productId: productId, 16247 status: 'loading', 16248 rule: null 16249 }; 16250 cardStates.set(card, currentState); 16251 16252 getRule(productId).then(function (rule) { 16253 var applied; 16254 16255 if ( 16256 cardStates.get(card) !== currentState || 16257 normalizeProductId(card.getAttribute('data-id')) !== productId 16258 ) { 16259 return; 16260 } 16261 16262 applied = applyBadge(card, productId, rule); 16263 currentState.rule = rule; 16264 currentState.status = applied ? 'processed' : 'waiting-image'; 16265 }); 16266 } 16267 16268 function scan(root) { 16269 var cards; 16270 var index; 16271 16272 if (!root) { 16273 return; 16274 } 16275 16276 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 16277 processCard(root); 16278 } 16279 16280 if (!root.querySelectorAll) { 16281 return; 16282 } 16283 16284 cards = root.querySelectorAll(CARD_SELECTOR); 16285 for (index = 0; index < cards.length; index += 1) { 16286 processCard(cards[index]); 16287 } 16288 } 16289 16290 function startObserver() { 16291 var observer; 16292 16293 if (!window.MutationObserver || !document.documentElement) { 16294 return; 16295 } 16296 16297 observer = new MutationObserver(function (mutations) { 16298 var mutationIndex; 16299 var nodeIndex; 16300 var mutation; 16301 var node; 16302 var ownerCard; 16303 16304 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 16305 mutation = mutations[mutationIndex]; 16306 16307 if (mutation.type === 'attributes') { 16308 processCard(mutation.target); 16309 continue; 16310 } 16311 16312 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 16313 node = mutation.addedNodes[nodeIndex]; 16314 if (node.nodeType !== 1) { 16315 continue; 16316 } 16317 16318 scan(node); 16319 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 16320 if (ownerCard) { 16321 processCard(ownerCard); 16322 } 16323 } 16324 } 16325 }); 16326 16327 observer.observe(document.documentElement, { 16328 childList: true, 16329 subtree: true, 16330 attributes: true, 16331 attributeFilter: ['data-id'] 16332 }); 16333 16334 window[GLOBAL_KEY].observer = observer; 16335 } 16336 16337 window[GLOBAL_KEY] = { 16338 version: '1.1.0', 16339 cache: cache, 16340 pending: pending, 16341 cardStates: cardStates, 16342 scan: scan, 16343 processCard: processCard, 16344 observer: null 16345 }; 16346 16347 document.addEventListener('load', onTrayScriptLoad, true); 16348 attachTrayAjaxCache(); 16349 injectStyles(); 16350 scan(document); 16351 startObserver(); 16352 16353 if (document.readyState === 'loading') { 16354 document.addEventListener('DOMContentLoaded', function () { 16355 attachTrayAjaxCache(); 16356 scan(document); 16357 }); 16358 } 16359}(window, document)); 16360</script>
16360 16361 </div> 16362 <div 16363 class="swiper-slide fixWidthBoxProduct item"> 16364 16365 16366 16367 16368<div class="product animate open_cart" 16369 data-id="125245712" 16370 data-farmacam-related-categories="," 16371 data-ga4-id="125245712" 16372 data-ga4-name="Gerenciamento De Peso Com Reducose" 16373 data-ga4-price="240.00" 16374 data-ga4-brand="Farmacam" 16375 data-ga4-category="Tipo de Produto;Manipulados;" 16376 > 16377 16378 <div class="product-header"> 16379 16380 <div class="w-100"> 16381 16382 16383 16384 16385 16386 16387 16388 <div class="product-tags-circle"> 16389 16390 16391 <div class="tag-circle discount tag-icone tag-icone1"> 16392 <svg fill="none" height="16" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 16393 <path stroke-linecap="round" stroke-linejoin="round" d="M15.362 5.214A8.252 8.252 0 0112 21 8.25 8.25 0 016.038 7.048 8.287 8.287 0 009 9.6a8.983 8.983 0 013.361-6.867 8.21 8.21 0 003 2.48z"></path> 16394 <path stroke-linecap="round" stroke-linejoin="round" d="M12 18a3.75 3.75 0 00.495-7.467 5.99 5.99 0 00-1.925 3.546 5.974 5.974 0 01-2.133-1A3.75 3.75 0 0012 18z"></path> 16395 </svg> 16396 <span>Lançamento</span> 16397 </div> 16398 16399 16400 </div> 16401 16402 16403 16404 <div class="product-tags " data-tags-count="1"> 16405 16406 16407 16408 16409 16410 </div> 16411 16412 16413 16414 <div class="image "> 16415 16416 <a title="Gerenciamento De Peso Com Reducose" href="https://www.farmacam.com.br/manipulados/gerenciamento-de-peso-com-reducose" class="space-image"> 16417 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/gerenciamento_de_peso_com_reducose_1_20260901173023_d6ed72d14773.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/gerenciamento_de_peso_com_reducose_1_20260901173023_d6ed72d14773.png" alt="Gerenciamento De Peso Com Reducose"> 16418 </a> 16419 16420 </div> 16421 16422 16423 16424 16425 16426 </div> 16427 16428 </div> 16429 16430 <div class="product-body"> 16431 16432 <a title="Gerenciamento De Peso Com Reducose" class="product-info" href="https://www.farmacam.com.br/manipulados/gerenciamento-de-peso-com-reducose"> 16433 16434 <div class="product-info-dados"> 16435 16436 16437 16438 16439 16440 16441 <div class="product-name"> 16442 Gerenciamento De Peso Com Reducose 16443 </div> 16444 16445 16446 16447 <div class="product-price"> 16448 16449 16450 16451 16452 16453 <span class="product-has-variants text-center"> 16454 A partir de 16455 </span> 16456 16457<div class="price display-cash"> 16458 16459 16460 <span class="current-price "> 16461 R$ 240,00 16462 16463 </span> 16464 16465 <span class="product-installments"> 16466 16467 </span> 16468 16469</div> 16470 </div> 16471 16472 </div> 16473 16474 </a> 16475 16476 </div> 16477 16478 16479 <div class="product-footer"> 16480 16481 16482 <div class="w-100"> 16483 16484 16485 16486<div class="product-rating-catalog"> 16487 16488 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 16489 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 16490 </svg> 16491 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 16492 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 16493 </svg> 16494 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 16495 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 16496 </svg> 16497 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 16498 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 16499 </svg> 16500 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 16501 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 16502 </svg> 16503 16504 16505 <a title="Ver avaliações de Gerenciamento De Peso Com Reducose" href="https://www.farmacam.com.br/manipulados/gerenciamento-de-peso-com-reducose#comments" class="total"> 16506 Seja o primeiro 16507 </a> 16508 16509 </div> 16510 16511 16512 16513 <div class="config-variacoes-compra"> 16514 16515 16516 16517 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245712"> 16518 <input type="hidden" name="product_id" value="125245712"> 16519 <input type="hidden" name="without_stock_sale" value=""> 16520 16521 <input type="hidden" name="variacao" id="selectedVariant" value=""> 16522 <input type="hidden" name="estoque" value=""> 16523 16524 16525 16526 <ul class="paleta-cores"> 16527 16528 16529 16530 16531 16532 16533 16534 16535 16536 16537 16538 16539 16540 16541 16542 16543 16544 16545 16546 16547 16548 16549 16550 16551 16552 16553 16554 16555 16556 16557 16558 16559 16560 16561 16562 16563 16564 16565 16566 16567 16568 16569 16570 16571 16572 16573 16574 16575 16576 16577 16578 16579 16580 16581 16582 16583 16584 16585 16586 16587 16588 16589 16590 16591 16592 16593 16594 16595 16596 16597 16598 16599 16600 16601 16602 16603 16604 16605 16606 16607 16608 16609 16610 16611 16612 16613 16614 16615 16616 16617 16618 16619 16620 16621 16622 16623 16624 16625 16626 16627 16628 16629 16630 16631 16632 16633 16634 16635 16636 16637 16638 16639 16640 16641 16642 16643 16644 16645 16646 16647 16648 16649 16650 16651 16652 16653 16654 16655 16656 16657 16658 16659 16660 16661 16662 16663 16664 16665 16666 16667 16668 16669 16670 16671 16672 16673 16674 16675 16676 16677 16678 16679 16680 16681 16682 16683 16684 16685 16686 16687 16688 16689 16690 16691 16692 16693 16694 16695 16696 16697 16698 16699 16700 16701 16702 16703 16704 16705 16706 16707 16708 16709 16710 16711 16712 16713 16714 16715 16716 16717 16718 16719 16720 16721 16722 16723 16724 16725 16726 16727 16728 16729 16730 16731 16732 16733 16734 16735 16736 16737 16738 16739 16740 16741 16742 16743 16744 16745 16746 16747 16748 16749 16750 16751 16752 16753 16754 16755 16756 16757 16758 16759 16760 16761 16762 16763 16764 16765 16766 16767 16768 16769 16770 16771 16772 16773 16774 16775 16776 16777 16778
16778 16779 16780 16781 16782 16783 16784 16785 16786 16787 16788 16789 16790 16791 16792 16793 16794 16795 16796 16797 16798 16799 16800 16801 16802 16803 16804 16805 16806 16807 16808 16809 16810 16811 16812 16813 16814 16815 16816 16817 16818 16819 16820 16821 16822 16823 16824 16825 16826 16827 16828 16829 16830 16831 16832 16833 16834 16835 16836 16837 16838 16839 16840 16841 16842 16843 16844 16845 16846 16847 16848 16849 16850 16851 16852 16853 16854 16855 16856 16857 16858 16859 16860 16861 16862 16863 16864 16865 16866 16867 16868 16869 16870 16871 16872 16873 16874 16875 16876 16877 16878 16879 16880 16881 16882 16883 16884 16885 16886 16887 16888 16889 16890 16891 16892 16893 16894 16895 16896 16897 16898 16899 16900 16901 16902 16903 16904 16905 16906 16907 16908 16909 16910 16911 16912 16913 16914 16915 16916 16917 16918 16919 16920 16921 16922 16923 16924 16925 16926 16927 16928 16929 16930 16931 16932 16933 16934 16935 16936 16937 16938 16939 16940 16941 16942 16943 16944 16945 </ul> 16946 <!-- Fim Paleta de Cores --> 16947 16948 16949 16950 16951 16952 16953 16954 16955 16956 16957 16958 16959 16960 16961 16962 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 16963 <option disabled="disabled" value=""> 16964 Selecione 16965 </option> 16966 16967 16968 <option value="30742" produto="125245712" estoque="10000">30 Doses</option> 16969 16970 16971 16972 16973 <option value="30744" produto="125245712" estoque="10000">60 Doses</option> 16974 16975 16976 16977 16978 <option value="30746" produto="125245712" estoque="10000">90 Doses</option> 16979 16980 16981 </select> 16982 16983 16984 <select class="select-cor" style="display: none;" title="Campo Cor"> 16985
16985 </select> 16986 16987 16988 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 16989 <div class="alerta-estoque"></div> 16990 <div class="alerta-adicionado"></div> 16991 16992 <div class="acao-compra"> 16993 16994 <div class="quantidade-box"> 16995 <div class="quantidade-box-input"> 16996 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
16996stoque="30000" /> 16997 </div> 16998 <div class="quantidade-box-controles"> 16999 <div class="quantidade-box-controles-itens" data-item="mais"> 17000 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 17001 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 17002 </svg> 17003 </div> 17004 <div class="quantidade-box-controles-itens" data-item="menus"> 17005 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 17006 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 17007 </svg> 17008 </div> 17009 </div> 17010 </div> 17011 17012 17013 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245712"> 17014 17015 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 17016 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 17017 17018 17019 17020 17021 17022 17023 <!-- Cesta de Compras --> 17024 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 17025 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 17026 </svg> 17027 17028 17029 17030 Comprar 17031 17032 17033 </button> 17034 <!-- </form> --> 17035 17036 </div> 17037 17038</div> 17039 17040 17041 </div> 17042 17043 </div> 17044 17045 17046</div> 17047
17048<script> 17049(function (window, document) { 17050 'use strict'; 17051 17052 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 17053 17054 if (window[GLOBAL_KEY]) { 17055 return; 17056 } 17057 17058 if (!window.Map || !window.WeakMap || !window.Promise) { 17059 return; 17060 } 17061 17062 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 17063 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 17064 '#vitrine-personalizada .product[data-id]'; 17065 var BADGE_CLASS = 'farmacam-prescription-badge'; 17066 var HOST_CLASS = 'farmacam-prescription-badge-host'; 17067 var MAX_CONCURRENT_REQUESTS = 6; 17068 var REQUEST_TIMEOUT_MS = 12000; 17069 17070 var rules = { 17071 '294': { 17072 level: '294', 17073 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 17074 }, 17075 '296': { 17076 level: '296', 17077 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 17078 }, 17079 '298': { 17080 level: '298', 17081 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 17082 } 17083 }; 17084 17085 var cache = new Map(); 17086 var pending = new Map(); 17087 var cardStates = new WeakMap(); 17088 var queue = []; 17089 var activeRequests = 0; 17090 var trayAjaxHooked = false; 17091 17092 function injectStyles() { 17093 if (document.getElementById('farmacam-prescription-cards-style')) { 17094 return; 17095 } 17096 17097 var style = document.createElement('style'); 17098 style.id = 'farmacam-prescription-cards-style'; 17099 style.textContent = [ 17100 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 17101 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 17102 'position:absolute!important;', 17103 'top:52px!important;', 17104 'left:10px!important;', 17105 'z-index:999!important;', 17106 'display:block!important;', 17107 'max-width:calc(100% - 20px)!important;', 17108 'box-sizing:border-box!important;', 17109 'padding:8px 12px!important;', 17110 'color:#fff!important;', 17111 'font-family:inherit!important;', 17112 'font-size:13px!important;', 17113 'font-weight:900!important;', 17114 'line-height:1.15!important;', 17115 'text-align:center!important;', 17116 'text-transform:uppercase!important;', 17117 'letter-spacing:.3px!important;', 17118 'white-space:normal!important;', 17119 'overflow-wrap:break-word!important;', 17120 'border-radius:3px!important;', 17121 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 17122 'pointer-events:none!important;', 17123 '}', 17124 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 17125 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 17126 'background:#d70008!important;', 17127 '}', 17128 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 17129 'background:#000!important;', 17130 '}', 17131 '@media (max-width:767px){', 17132 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 17133 'top:42px!important;', 17134 'left:6px!important;', 17135 'max-width:calc(100% - 12px)!important;', 17136 'padding:6px 8px!important;', 17137 'font-size:10px!important;', 17138 '}', 17139 '}' 17140 ].join(''); 17141 17142 (document.head || document.documentElement).appendChild(style); 17143 } 17144 17145 function normalizeProductId(value) { 17146 var id = String(value == null ? '' : value).trim(); 17147 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 17148 } 17149 17150 function classifyRelatedCategories(relatedCategories) { 17151 var found = { 17152 '292': false, 17153 '294': false, 17154 '296': false, 17155 '298': false 17156 }; 17157 17158 function inspect(value, depth) { 17159 var index; 17160 var normalized; 17161 17162 if (value == null || depth > 8) { 17163 return; 17164 } 17165 17166 if (Array.isArray(value)) { 17167 for (index = 0; index < value.length; index += 1) { 17168 inspect(value[index], depth + 1); 17169 } 17170 return; 17171 } 17172 17173 if (typeof value === 'object') { 17174 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 17175 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 17176 inspect(value.id, depth + 1); 17177 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 17178 inspect(value.category_id, depth + 1); 17179 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 17180 inspect(value.Category, depth + 1); 17181 } 17182 return; 17183 } 17184 17185 if (typeof value !== 'string' && typeof value !== 'number') { 17186 return; 17187 } 17188 normalized = normalizeProductId(value); 17189 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 17190 found[normalized] = true; 17191 } 17192 } 17193 17194 inspect(relatedCategories, 0); 17195 17196 if (found['298']) { 17197 return rules['298']; 17198 } 17199 if (found['296']) { 17200 return rules['296']; 17201 } 17202 if (found['294']) { 17203 return rules['294']; 17204 } 17205 17206 // 292 e qualquer classificacao desconhecida ficam sem tarja. 17207 return null; 17208 } 17209 17210 function ruleFromPayload(payload, productId) { 17211 var product = payload && payload.Product; 17212 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 17213 return null; 17214 } 17215 return classifyRelatedCategories(product && product.related_categories); 17216 } 17217 17218 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 17219 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 17220 function attachTrayAjaxCache() { 17221 var jq = window.jQuery; 17222 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 17223 return; 17224 } 17225
17226 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 17227 var url; 17228 var match; 17229 var productId; 17230 var payload; 17231 try { 17232 url = new URL(settings.url, window.location.href); 17233 if (url.origin !== window.location.origin) { 17234 return; 17235 } 17236 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 17237 if (!match) { 17238 return; 17239 } 17240 productId = normalizeProductId(match[1]); 17241 if (!cache.has(productId) && !pending.has(productId)) { 17242 payload = data || xhr.responseJSON; 17243 if (typeof payload === 'string') { 17244 payload = JSON.parse(payload); 17245 } 17246 if (!payload || !payload.Product || 17247 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 17248 return; 17249 } 17250 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 17251 return; 17252 } 17253 cache.set(productId, ruleFromPayload(payload, productId)); 17254 } 17255 } catch (error) { 17256 // Respostas de outras integracoes nao interferem nas tarjas. 17257 } 17258 }); 17259 17260 trayAjaxHooked = true; 17261 document.removeEventListener('load', onTrayScriptLoad, true); 17262 } 17263 17264 function onTrayScriptLoad(event) { 17265 if (event.target && event.target.tagName === 'SCRIPT') { 17266 attachTrayAjaxCache(); 17267 } 17268 } 17269 17270 function requestRule(productId) { 17271 var controller = null; 17272 var timeoutId = null; 17273 var options = { 17274 credentials: 'same-origin', 17275 headers: { 17276 'Accept': 'application/json' 17277 } 17278 }; 17279 var request; 17280 17281 if (typeof window.fetch !== 'function') { 17282 return Promise.resolve(null); 17283 } 17284 17285 if (typeof window.AbortController === 'function') { 17286 controller = new window.AbortController(); 17287 options.signal = controller.signal; 17288 timeoutId = window.setTimeout(function () { 17289 controller.abort(); 17290 }, REQUEST_TIMEOUT_MS); 17291 } 17292 17293 try { 17294 request = window.fetch( 17295 '/web_api/products/' + encodeURIComponent(productId), 17296 options 17297 ); 17298 } catch (error) { 17299 if (timeoutId !== null) { 17300 window.clearTimeout(timeoutId); 17301 } 17302 return Promise.resolve(null); 17303 } 17304 17305 return request.then(function (response) { 17306 if (!response.ok) { 17307 throw new Error('HTTP ' + response.status); 17308 } 17309 return response.json(); 17310 }).then(function (payload) { 17311 return ruleFromPayload(payload, productId); 17312 }).then(function (rule) { 17313 if (timeoutId !== null) { 17314 window.clearTimeout(timeoutId); 17315 } 17316 return rule; 17317 }, function () { 17318 if (timeoutId !== null) { 17319 window.clearTimeout(timeoutId); 17320 } 17321 17322 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 17323 return null; 17324 }); 17325 } 17326 17327 function finishJob(job, rule) { 17328 cache.set(job.productId, rule); 17329 pending.delete(job.productId); 17330 activeRequests -= 1; 17331 job.resolve(rule); 17332 pumpQueue(); 17333 } 17334 17335 function pumpQueue() { 17336 var job; 17337 17338 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 17339 job = queue.shift(); 17340 activeRequests += 1; 17341 17342 (function (currentJob) { 17343 requestRule(currentJob.productId).then(function (rule) { 17344 finishJob(currentJob, rule); 17345 }, function () { 17346 finishJob(currentJob, null); 17347 }); 17348 }(job)); 17349 } 17350 } 17351 17352 function getRule(productId) { 17353 var resolver; 17354 var promise; 17355 17356 if (cache.has(productId)) { 17357 return Promise.resolve(cache.get(productId)); 17358 } 17359 17360 if (pending.has(productId)) { 17361 return pending.get(productId); 17362 } 17363 17364 promise = new Promise(function (resolve) { 17365 resolver = resolve; 17366 }); 17367 17368 pending.set(productId, promise); 17369 queue.push({ 17370 productId: productId, 17371 resolve: resolver 17372 }); 17373 pumpQueue(); 17374 17375 return promise; 17376 } 17377 17378 function findBadge(card) { 17379 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 17380 } 17381 17382 function clearBadge(card) { 17383 var badge = findBadge(card); 17384 var image = card.querySelector('.product-header > .w-100 > .image'); 17385 17386 if (badge && badge.parentNode) { 17387 badge.parentNode.removeChild(badge); 17388 } 17389 17390 if (image) { 17391 image.classList.remove(HOST_CLASS); 17392 } 17393 17394 card.removeAttribute('data-farmacam-prescription-level'); 17395 } 17396 17397 function applyBadge(card, productId, rule) { 17398 var image; 17399 var badge; 17400 17401 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 17402 return false;
17403 } 17404 17405 clearBadge(card); 17406 17407 if (!rule) { 17408 return true; 17409 } 17410 17411 image = card.querySelector('.product-header > .w-100 > .image'); 17412 if (!image) { 17413 return false; 17414 } 17415 17416 badge = document.createElement('span'); 17417 badge.className = BADGE_CLASS; 17418 badge.setAttribute('data-farmacam-generated', 'true'); 17419 badge.setAttribute('data-farmacam-prescription-level', rule.level); 17420 badge.setAttribute('role', 'note'); 17421 badge.textContent = rule.text; 17422 17423 image.classList.add(HOST_CLASS); 17424 image.insertBefore(badge, image.firstChild); 17425 card.setAttribute('data-farmacam-prescription-level', rule.level); 17426 17427 return true; 17428 } 17429 17430 function processCard(card) { 17431 var productId; 17432 var previousState; 17433 var currentState; 17434 17435 if (!card || card.nodeType !== 1) { 17436 return; 17437 } 17438 17439 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 17440 return; 17441 } 17442 17443 productId = normalizeProductId(card.getAttribute('data-id')); 17444 previousState = cardStates.get(card); 17445 17446 if (!productId) { 17447 clearBadge(card); 17448 cardStates.delete(card); 17449 return; 17450 } 17451 17452 if ( 17453 previousState && 17454 previousState.productId === productId && 17455 previousState.status === 'loading' 17456 ) { 17457 return; 17458 } 17459 17460 if ( 17461 previousState && 17462 previousState.productId === productId && 17463 previousState.status === 'processed' 17464 ) { 17465 if (!previousState.rule || findBadge(card)) { 17466 return; 17467 } 17468 } 17469 17470 if (!previousState || previousState.productId !== productId) { 17471 clearBadge(card); 17472 } 17473 17474 currentState = { 17475 productId: productId, 17476 status: 'loading', 17477 rule: null 17478 }; 17479 cardStates.set(card, currentState); 17480 17481 getRule(productId).then(function (rule) { 17482 var applied; 17483 17484 if ( 17485 cardStates.get(card) !== currentState || 17486 normalizeProductId(card.getAttribute('data-id')) !== productId 17487 ) { 17488 return; 17489 } 17490 17491 applied = applyBadge(card, productId, rule); 17492 currentState.rule = rule; 17493 currentState.status = applied ? 'processed' : 'waiting-image'; 17494 }); 17495 } 17496 17497 function scan(root) { 17498 var cards; 17499 var index; 17500 17501 if (!root) { 17502 return; 17503 } 17504 17505 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 17506 processCard(root); 17507 } 17508 17509 if (!root.querySelectorAll) { 17510 return; 17511 } 17512 17513 cards = root.querySelectorAll(CARD_SELECTOR); 17514 for (index = 0; index < cards.length; index += 1) { 17515 processCard(cards[index]); 17516 } 17517 } 17518 17519 function startObserver() { 17520 var observer; 17521 17522 if (!window.MutationObserver || !document.documentElement) { 17523 return; 17524 } 17525 17526 observer = new MutationObserver(function (mutations) { 17527 var mutationIndex; 17528 var nodeIndex; 17529 var mutation; 17530 var node; 17531 var ownerCard; 17532 17533 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 17534 mutation = mutations[mutationIndex]; 17535 17536 if (mutation.type === 'attributes') { 17537 processCard(mutation.target); 17538 continue; 17539 } 17540 17541 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 17542 node = mutation.addedNodes[nodeIndex]; 17543 if (node.nodeType !== 1) { 17544 continue; 17545 } 17546 17547 scan(node); 17548 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 17549 if (ownerCard) { 17550 processCard(ownerCard); 17551 } 17552 } 17553 } 17554 }); 17555 17556 observer.observe(document.documentElement, { 17557 childList: true, 17558 subtree: true, 17559 attributes: true, 17560 attributeFilter: ['data-id'] 17561 }); 17562 17563 window[GLOBAL_KEY].observer = observer; 17564 } 17565 17566 window[GLOBAL_KEY] = { 17567 version: '1.1.0', 17568 cache: cache, 17569 pending: pending, 17570 cardStates: cardStates, 17571 scan: scan, 17572 processCard: processCard, 17573 observer: null 17574 }; 17575 17576 document.addEventListener('load', onTrayScriptLoad, true); 17577 attachTrayAjaxCache(); 17578 injectStyles(); 17579 scan(document); 17580 startObserver(); 17581 17582 if (document.readyState === 'loading') { 17583 document.addEventListener('DOMContentLoaded', function () { 17584 attachTrayAjaxCache(); 17585 scan(document); 17586 }); 17587 } 17588}(window, document)); 17589</script>
17589 17590 </div> 17591 <div 17592 class="swiper-slide fixWidthBoxProduct item"> 17593 17594 17595 17596 17597<div class="product animate open_cart" 17598 data-id="125245710" 17599 data-farmacam-related-categories="," 17600 data-ga4-id="125245710" 17601 data-ga4-name="Equilibrio Metabolico Com Reducose" 17602 data-ga4-price="259.00" 17603 data-ga4-brand="Farmacam" 17604 data-ga4-category="Tipo de Produto;Manipulados;" 17605 > 17606 17607 <div class="product-header"> 17608 17609 <div class="w-100"> 17610 17611 17612 17613 17614 17615 17616 17617 <div class="product-tags-circle"> 17618 17619 17620 <div class="tag-circle discount tag-icone tag-icone1"> 17621 <svg fill="none" height="16" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 17622 <path stroke-linecap="round" stroke-linejoin="round" d="M15.362 5.214A8.252 8.252 0 0112 21 8.25 8.25 0 016.038 7.048 8.287 8.287 0 009 9.6a8.983 8.983 0 013.361-6.867 8.21 8.21 0 003 2.48z"></path> 17623 <path stroke-linecap="round" stroke-linejoin="round" d="M12 18a3.75 3.75 0 00.495-7.467 5.99 5.99 0 00-1.925 3.546 5.974 5.974 0 01-2.133-1A3.75 3.75 0 0012 18z"></path> 17624 </svg> 17625 <span>Lançamento</span> 17626 </div> 17627 17628 17629 </div> 17630 17631 17632 17633 <div class="product-tags " data-tags-count="1"> 17634 17635 17636 17637 17638 17639 </div> 17640 17641 17642 17643 <div class="image "> 17644 17645 <a title="Equilibrio Metabolico Com Reducose" href="https://www.farmacam.com.br/manipulados/equilibrio-metabolico-com-reducose" class="space-image"> 17646 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/equilibrio_metabolico_com_reducose_1_20260901172525_77e0768986e7.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/equilibrio_metabolico_com_reducose_1_20260901172525_77e0768986e7.png" alt="Equilibrio Metabolico Com Reducose"> 17647 </a> 17648 17649 </div> 17650 17651 17652 17653 17654 17655 </div> 17656 17657 </div> 17658 17659 <div class="product-body"> 17660 17661 <a title="Equilibrio Metabolico Com Reducose" class="product-info" href="https://www.farmacam.com.br/manipulados/equilibrio-metabolico-com-reducose"> 17662 17663 <div class="product-info-dados"> 17664 17665 17666 17667 17668 17669 17670 <div class="product-name"> 17671 Equilibrio Metabolico Com Reducose 17672 </div> 17673 17674 17675 17676 <div class="product-price"> 17677 17678 17679 17680 17681 17682 <span class="product-has-variants text-center"> 17683 A partir de 17684 </span> 17685 17686<div class="price display-cash"> 17687 17688 17689 <span class="current-price "> 17690 R$ 259,00 17691 17692 </span> 17693 17694 <span class="product-installments"> 17695 17696 </span> 17697 17698</div> 17699 </div> 17700 17701 </div> 17702 17703 </a> 17704 17705 </div> 17706 17707 17708 <div class="product-footer"> 17709 17710 17711 <div class="w-100"> 17712 17713 17714 17715<div class="product-rating-catalog"> 17716 17717 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 17718 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 17719 </svg> 17720 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 17721 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 17722 </svg> 17723 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 17724 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 17725 </svg> 17726 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 17727 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 17728 </svg> 17729 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 17730 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 17731 </svg> 17732 17733 17734 <a title="Ver avaliaçõ
17734es de Equilibrio Metabolico Com Reducose" href="https://www.farmacam.com.br/manipulados/equilibrio-metabolico-com-reducose#comments" class="total"> 17735 Seja o primeiro 17736 </a> 17737 17738 </div> 17739 17740 17741 17742 <div class="config-variacoes-compra"> 17743 17744 17745 17746 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245710"> 17747 <input type="hidden" name="product_id" value="125245710"> 17748 <input type="hidden" name="without_stock_sale" value=""> 17749 17750 <input type="hidden" name="variacao" id="selectedVariant" value=""> 17751 <input type="hidden" name="estoque" value=""> 17752 17753 17754 17755 <ul class="paleta-cores"> 17756 17757 17758 17759 17760 17761 17762 17763 17764 17765 17766 17767 17768 17769 17770 17771 17772 17773 17774 17775 17776 17777 17778 17779 17780 17781 17782 17783 17784 17785 17786 17787 17788 17789 17790 17791 17792 17793 17794 17795 17796 17797 17798 17799 17800 17801 17802 17803 17804 17805 17806 17807 17808 17809 17810 17811 17812 17813 17814 17815 17816 17817 17818 17819 17820 17821 17822 17823 17824 17825 17826 17827 17828 17829 17830 17831 17832 17833 17834 17835 17836 17837 17838 17839 17840 17841 17842 17843 17844 17845 17846 17847 17848 17849 17850 17851 17852 17853 17854 17855 17856 17857 17858 17859 17860 17861 17862 17863 17864 17865 17866 17867 17868 17869 17870 17871 17872 17873 17874 17875 17876 17877 17878 17879 17880 17881 17882 17883 17884 17885 17886 17887 17888 17889 17890 17891 17892 17893 17894 17895 17896 17897 17898 17899 17900 17901 17902 17903 17904 17905 17906 17907 17908 17909 17910 17911 17912 17913 17914 17915 17916 17917 17918 17919 17920 17921 17922 17923 17924 17925 17926 17927 17928 17929 17930 17931 17932 17933 17934 17935 17936 17937 17938 17939 17940 17941 17942 17943 17944 17945 17946 17947 17948 17949 17950 17951 17952 17953 17954 17955 17956 17957 17958 17959 17960 17961 17962 17963 17964 17965 17966 17967 17968 17969 17970 17971 17972 17973 17974 17975 17976 17977 17978 17979 17980 17981 17982 17983 17984 17985 17986 17987 17988 17989 17990 17991 17992 17993 17994 17995 17996 17997 17998 17999 18000 18001 18002 18003 18004 18005 18006 18007 18008 18009 18010 18011 18012 18013 18014 18015 18016 18017 18018 18019 18020 18021 18022 18023 18024 18025 18026 18027 18028 18029 18030 18031 18032 18033 18034 18035 18036 18037 18038 18039 18040 18041 18042 18043 18044 18045 18046 18047 18048 18049 18050 18051 18052 18053 18054 18055 18056 18057 18058 18059 18060 18061 18062 18063 18064 18065 18066 18067 18068 18069 18070 18071 18072 18073 18074 18075 18076 18077 18078 18079 18080 18081 18082 18083 18084 18085 18086 18087 18088 18089 18090 18091 18092 18093 18094 18095 18096 18097 18098 18099 18100 18101 18102 18103 18104 18105 18106 18107 18108 18109 18110 18111 18112 18113 18114 18115 18116 18117 18118 18119 18120 18121 18122 18123 18124 18125 18126 18127 18128 18129 18130 18131 18132 18133 18134 18135 18136 18137 18138 18139 18140 18141 18142 18143 18144 18145 18146 18147 18148 18149 18150 18151 18152 18153 18154 18155 18156 18157 18158 18159 18160 18161 18162 18163 18164 18165 18166 18167 18168 18169 18170 18171 18172 18173 18174 </ul> 18175 <!-- Fim Paleta de Cores --> 18176 18177 18178 18179 18180 18181 18182 18183 18184 18185 18186 18187 18188 18189 18190
18190 18191 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 18192 <option disabled="disabled" value=""> 18193 Selecione 18194 </option> 18195 18196 18197 <option value="30736" produto="125245710" estoque="10000">30 Doses</option> 18198 18199 18200 18201 18202 <option value="30738" produto="125245710" estoque="10000">60 Doses</option> 18203 18204 18205 18206 18207 <option value="30740" produto="125245710" estoque="10000">90 Doses</option> 18208 18209 18210 </select> 18211 18212 18213 <select class="select-cor" style="display: none;" title="Campo Cor"> 18214 </select> 18215 18216 18217 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 18218 <div class="alerta-estoque"></div> 18219 <div class="alerta-adicionado"></div> 18220 18221 <div class="acao-compra"> 18222 18223 <div class="quantidade-box"> 18224 <div class="quantidade-box-input"> 18225 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
18225stoque="30000" /> 18226 </div> 18227 <div class="quantidade-box-controles"> 18228 <div class="quantidade-box-controles-itens" data-item="mais"> 18229 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 18230 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 18231 </svg> 18232 </div> 18233 <div class="quantidade-box-controles-itens" data-item="menus"> 18234 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 18235 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 18236 </svg> 18237 </div> 18238 </div> 18239 </div> 18240 18241 18242 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245710"> 18243 18244 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 18245 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 18246 18247 18248 18249 18250 18251 18252 <!-- Cesta de Compras --> 18253 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 18254 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 18255 </svg> 18256 18257 18258 18259 Comprar 18260 18261 18262 </button> 18263 <!-- </form> --> 18264 18265 </div> 18266 18267</div> 18268 18269 18270 </div> 18271 18272 </div> 18273 18274 18275</div> 18276
18277<script> 18278(function (window, document) { 18279 'use strict'; 18280 18281 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 18282 18283 if (window[GLOBAL_KEY]) { 18284 return; 18285 } 18286 18287 if (!window.Map || !window.WeakMap || !window.Promise) { 18288 return; 18289 } 18290 18291 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 18292 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 18293 '#vitrine-personalizada .product[data-id]'; 18294 var BADGE_CLASS = 'farmacam-prescription-badge'; 18295 var HOST_CLASS = 'farmacam-prescription-badge-host'; 18296 var MAX_CONCURRENT_REQUESTS = 6; 18297 var REQUEST_TIMEOUT_MS = 12000; 18298 18299 var rules = { 18300 '294': { 18301 level: '294', 18302 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 18303 }, 18304 '296': { 18305 level: '296', 18306 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 18307 }, 18308 '298': { 18309 level: '298', 18310 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 18311 } 18312 }; 18313 18314 var cache = new Map(); 18315 var pending = new Map(); 18316 var cardStates = new WeakMap(); 18317 var queue = []; 18318 var activeRequests = 0; 18319 var trayAjaxHooked = false; 18320 18321 function injectStyles() { 18322 if (document.getElementById('farmacam-prescription-cards-style')) { 18323 return; 18324 } 18325 18326 var style = document.createElement('style'); 18327 style.id = 'farmacam-prescription-cards-style'; 18328 style.textContent = [ 18329 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 18330 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 18331 'position:absolute!important;', 18332 'top:52px!important;', 18333 'left:10px!important;', 18334 'z-index:999!important;', 18335 'display:block!important;', 18336 'max-width:calc(100% - 20px)!important;', 18337 'box-sizing:border-box!important;', 18338 'padding:8px 12px!important;', 18339 'color:#fff!important;', 18340 'font-family:inherit!important;', 18341 'font-size:13px!important;', 18342 'font-weight:900!important;', 18343 'line-height:1.15!important;', 18344 'text-align:center!important;', 18345 'text-transform:uppercase!important;', 18346 'letter-spacing:.3px!important;', 18347 'white-space:normal!important;', 18348 'overflow-wrap:break-word!important;', 18349 'border-radius:3px!important;', 18350 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 18351 'pointer-events:none!important;', 18352 '}', 18353 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 18354 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 18355 'background:#d70008!important;', 18356 '}', 18357 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 18358 'background:#000!important;', 18359 '}', 18360 '@media (max-width:767px){', 18361 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 18362 'top:42px!important;', 18363 'left:6px!important;', 18364 'max-width:calc(100% - 12px)!important;', 18365 'padding:6px 8px!important;', 18366 'font-size:10px!important;', 18367 '}', 18368 '}' 18369 ].join(''); 18370 18371 (document.head || document.documentElement).appendChild(style); 18372 } 18373 18374 function normalizeProductId(value) { 18375 var id = String(value == null ? '' : value).trim(); 18376 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 18377 } 18378 18379 function classifyRelatedCategories(relatedCategories) { 18380 var found = { 18381 '292': false, 18382 '294': false, 18383 '296': false, 18384 '298': false 18385 }; 18386 18387 function inspect(value, depth) { 18388 var index; 18389 var normalized; 18390 18391 if (value == null || depth > 8) { 18392 return; 18393 } 18394 18395 if (Array.isArray(value)) { 18396 for (index = 0; index < value.length; index += 1) { 18397 inspect(value[index], depth + 1); 18398 } 18399 return; 18400 } 18401 18402 if (typeof value === 'object') { 18403 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 18404 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 18405 inspect(value.id, depth + 1); 18406 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 18407 inspect(value.category_id, depth + 1); 18408 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 18409 inspect(value.Category, depth + 1); 18410 } 18411 return; 18412 } 18413 18414 if (typeof value !== 'string' && typeof value !== 'number') { 18415 return; 18416 } 18417 normalized = normalizeProductId(value); 18418 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 18419 found[normalized] = true; 18420 } 18421 } 18422 18423 inspect(relatedCategories, 0); 18424 18425 if (found['298']) { 18426 return rules['298']; 18427 } 18428 if (found['296']) { 18429 return rules['296']; 18430 } 18431 if (found['294']) { 18432 return rules['294']; 18433 } 18434 18435 // 292 e qualquer classificacao desconhecida ficam sem tarja. 18436 return null; 18437 } 18438 18439 function ruleFromPayload(payload, productId) { 18440 var product = payload && payload.Product; 18441 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 18442 return null; 18443 } 18444 return classifyRelatedCategories(product && product.related_categories); 18445 } 18446 18447 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 18448 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 18449 function attachTrayAjaxCache() { 18450 var jq = window.jQuery; 18451 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 18452 return; 18453 } 18454
18455 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 18456 var url; 18457 var match; 18458 var productId; 18459 var payload; 18460 try { 18461 url = new URL(settings.url, window.location.href); 18462 if (url.origin !== window.location.origin) { 18463 return; 18464 } 18465 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 18466 if (!match) { 18467 return; 18468 } 18469 productId = normalizeProductId(match[1]); 18470 if (!cache.has(productId) && !pending.has(productId)) { 18471 payload = data || xhr.responseJSON; 18472 if (typeof payload === 'string') { 18473 payload = JSON.parse(payload); 18474 } 18475 if (!payload || !payload.Product || 18476 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 18477 return; 18478 } 18479 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 18480 return; 18481 } 18482 cache.set(productId, ruleFromPayload(payload, productId)); 18483 } 18484 } catch (error) { 18485 // Respostas de outras integracoes nao interferem nas tarjas. 18486 } 18487 }); 18488 18489 trayAjaxHooked = true; 18490 document.removeEventListener('load', onTrayScriptLoad, true); 18491 } 18492 18493 function onTrayScriptLoad(event) { 18494 if (event.target && event.target.tagName === 'SCRIPT') { 18495 attachTrayAjaxCache(); 18496 } 18497 } 18498 18499 function requestRule(productId) { 18500 var controller = null; 18501 var timeoutId = null; 18502 var options = { 18503 credentials: 'same-origin', 18504 headers: { 18505 'Accept': 'application/json' 18506 } 18507 }; 18508 var request; 18509 18510 if (typeof window.fetch !== 'function') { 18511 return Promise.resolve(null); 18512 } 18513 18514 if (typeof window.AbortController === 'function') { 18515 controller = new window.AbortController(); 18516 options.signal = controller.signal; 18517 timeoutId = window.setTimeout(function () { 18518 controller.abort(); 18519 }, REQUEST_TIMEOUT_MS); 18520 } 18521 18522 try { 18523 request = window.fetch( 18524 '/web_api/products/' + encodeURIComponent(productId), 18525 options 18526 ); 18527 } catch (error) { 18528 if (timeoutId !== null) { 18529 window.clearTimeout(timeoutId); 18530 } 18531 return Promise.resolve(null); 18532 } 18533 18534 return request.then(function (response) { 18535 if (!response.ok) { 18536 throw new Error('HTTP ' + response.status); 18537 } 18538 return response.json(); 18539 }).then(function (payload) { 18540 return ruleFromPayload(payload, productId); 18541 }).then(function (rule) { 18542 if (timeoutId !== null) { 18543 window.clearTimeout(timeoutId); 18544 } 18545 return rule; 18546 }, function () { 18547 if (timeoutId !== null) { 18548 window.clearTimeout(timeoutId); 18549 } 18550 18551 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 18552 return null; 18553 }); 18554 } 18555 18556 function finishJob(job, rule) { 18557 cache.set(job.productId, rule); 18558 pending.delete(job.productId); 18559 activeRequests -= 1; 18560 job.resolve(rule); 18561 pumpQueue(); 18562 } 18563 18564 function pumpQueue() { 18565 var job; 18566 18567 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 18568 job = queue.shift(); 18569 activeRequests += 1; 18570 18571 (function (currentJob) { 18572 requestRule(currentJob.productId).then(function (rule) { 18573 finishJob(currentJob, rule); 18574 }, function () { 18575 finishJob(currentJob, null); 18576 }); 18577 }(job)); 18578 } 18579 } 18580 18581 function getRule(productId) { 18582 var resolver; 18583 var promise; 18584 18585 if (cache.has(productId)) { 18586 return Promise.resolve(cache.get(productId)); 18587 } 18588 18589 if (pending.has(productId)) { 18590 return pending.get(productId); 18591 } 18592 18593 promise = new Promise(function (resolve) { 18594 resolver = resolve; 18595 }); 18596 18597 pending.set(productId, promise); 18598 queue.push({ 18599 productId: productId, 18600 resolve: resolver 18601 }); 18602 pumpQueue(); 18603 18604 return promise; 18605 } 18606 18607 function findBadge(card) { 18608 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 18609 } 18610 18611 function clearBadge(card) { 18612 var badge = findBadge(card); 18613 var image = card.querySelector('.product-header > .w-100 > .image'); 18614 18615 if (badge && badge.parentNode) { 18616 badge.parentNode.removeChild(badge); 18617 } 18618 18619 if (image) { 18620 image.classList.remove(HOST_CLASS); 18621 } 18622 18623 card.removeAttribute('data-farmacam-prescription-level'); 18624 } 18625 18626 function applyBadge(card, productId, rule) { 18627 var image; 18628 var badge; 18629 18630 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 18631 return false;
18632 } 18633 18634 clearBadge(card); 18635 18636 if (!rule) { 18637 return true; 18638 } 18639 18640 image = card.querySelector('.product-header > .w-100 > .image'); 18641 if (!image) { 18642 return false; 18643 } 18644 18645 badge = document.createElement('span'); 18646 badge.className = BADGE_CLASS; 18647 badge.setAttribute('data-farmacam-generated', 'true'); 18648 badge.setAttribute('data-farmacam-prescription-level', rule.level); 18649 badge.setAttribute('role', 'note'); 18650 badge.textContent = rule.text; 18651 18652 image.classList.add(HOST_CLASS); 18653 image.insertBefore(badge, image.firstChild); 18654 card.setAttribute('data-farmacam-prescription-level', rule.level); 18655 18656 return true; 18657 } 18658 18659 function processCard(card) { 18660 var productId; 18661 var previousState; 18662 var currentState; 18663 18664 if (!card || card.nodeType !== 1) { 18665 return; 18666 } 18667 18668 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 18669 return; 18670 } 18671 18672 productId = normalizeProductId(card.getAttribute('data-id')); 18673 previousState = cardStates.get(card); 18674 18675 if (!productId) { 18676 clearBadge(card); 18677 cardStates.delete(card); 18678 return; 18679 } 18680 18681 if ( 18682 previousState && 18683 previousState.productId === productId && 18684 previousState.status === 'loading' 18685 ) { 18686 return; 18687 } 18688 18689 if ( 18690 previousState && 18691 previousState.productId === productId && 18692 previousState.status === 'processed' 18693 ) { 18694 if (!previousState.rule || findBadge(card)) { 18695 return; 18696 } 18697 } 18698 18699 if (!previousState || previousState.productId !== productId) { 18700 clearBadge(card); 18701 } 18702 18703 currentState = { 18704 productId: productId, 18705 status: 'loading', 18706 rule: null 18707 }; 18708 cardStates.set(card, currentState); 18709 18710 getRule(productId).then(function (rule) { 18711 var applied; 18712 18713 if ( 18714 cardStates.get(card) !== currentState || 18715 normalizeProductId(card.getAttribute('data-id')) !== productId 18716 ) { 18717 return; 18718 } 18719 18720 applied = applyBadge(card, productId, rule); 18721 currentState.rule = rule; 18722 currentState.status = applied ? 'processed' : 'waiting-image'; 18723 }); 18724 } 18725 18726 function scan(root) { 18727 var cards; 18728 var index; 18729 18730 if (!root) { 18731 return; 18732 } 18733 18734 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 18735 processCard(root); 18736 } 18737 18738 if (!root.querySelectorAll) { 18739 return; 18740 } 18741 18742 cards = root.querySelectorAll(CARD_SELECTOR); 18743 for (index = 0; index < cards.length; index += 1) { 18744 processCard(cards[index]); 18745 } 18746 } 18747 18748 function startObserver() { 18749 var observer; 18750 18751 if (!window.MutationObserver || !document.documentElement) { 18752 return; 18753 } 18754 18755 observer = new MutationObserver(function (mutations) { 18756 var mutationIndex; 18757 var nodeIndex; 18758 var mutation; 18759 var node; 18760 var ownerCard; 18761 18762 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 18763 mutation = mutations[mutationIndex]; 18764 18765 if (mutation.type === 'attributes') { 18766 processCard(mutation.target); 18767 continue; 18768 } 18769 18770 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 18771 node = mutation.addedNodes[nodeIndex]; 18772 if (node.nodeType !== 1) { 18773 continue; 18774 } 18775 18776 scan(node); 18777 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 18778 if (ownerCard) { 18779 processCard(ownerCard); 18780 } 18781 } 18782 } 18783 }); 18784 18785 observer.observe(document.documentElement, { 18786 childList: true, 18787 subtree: true, 18788 attributes: true, 18789 attributeFilter: ['data-id'] 18790 }); 18791 18792 window[GLOBAL_KEY].observer = observer; 18793 } 18794 18795 window[GLOBAL_KEY] = { 18796 version: '1.1.0', 18797 cache: cache, 18798 pending: pending, 18799 cardStates: cardStates, 18800 scan: scan, 18801 processCard: processCard, 18802 observer: null 18803 }; 18804 18805 document.addEventListener('load', onTrayScriptLoad, true); 18806 attachTrayAjaxCache(); 18807 injectStyles(); 18808 scan(document); 18809 startObserver(); 18810 18811 if (document.readyState === 'loading') { 18812 document.addEventListener('DOMContentLoaded', function () { 18813 attachTrayAjaxCache(); 18814 scan(document); 18815 }); 18816 } 18817}(window, document)); 18818</script>
18818 18819 </div> 18820 <div 18821 class="swiper-slide fixWidthBoxProduct item"> 18822 18823 18824 18825 18826<div class="product animate open_cart" 18827 data-id="125245720" 18828 data-farmacam-related-categories="," 18829 data-ga4-id="125245720" 18830 data-ga4-name="Springer Proteissimo 102 - Aporte Proteico Diário" 18831 data-ga4-price="299.00" 18832 data-ga4-brand="Farmacam" 18833 data-ga4-category="Tipo de Produto;Manipulados;" 18834 > 18835 18836 <div class="product-header"> 18837 18838 <div class="w-100"> 18839 18840 18841 18842 18843 18844 18845 18846 <div class="product-tags-circle"> 18847 18848 18849 <div class="tag-circle discount tag-icone tag-icone1"> 18850 <svg fill="none" height="16" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 18851 <path stroke-linecap="round" stroke-linejoin="round" d="M15.362 5.214A8.252 8.252 0 0112 21 8.25 8.25 0 016.038 7.048 8.287 8.287 0 009 9.6a8.983 8.983 0 013.361-6.867 8.21 8.21 0 003 2.48z"></path> 18852 <path stroke-linecap="round" stroke-linejoin="round" d="M12 18a3.75 3.75 0 00.495-7.467 5.99 5.99 0 00-1.925 3.546 5.974 5.974 0 01-2.133-1A3.75 3.75 0 0012 18z"></path> 18853 </svg> 18854 <span>Lançamento</span> 18855 </div> 18856 18857 18858 </div> 18859 18860 18861 18862 <div class="product-tags " data-tags-count="1"> 18863 18864 18865 18866 18867 18868 </div> 18869 18870 18871 18872 <div class="image has-image "> 18873 18874 <a title="Springer Proteissimo 102 - Aporte Proteico Diário" href="https://www.farmacam.com.br/manipulados/springer-proteissimo-102-aporte-proteico-diario" class="space-image"> 18875 <img class="hori-quad imagem-produto-1 " src="https://images.tcdn.com.br/img/img_prod/1063102/springer_proteissimo_102_aporte_proteico_dirio_1_20260902133419_2c13987b692c.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/springer_proteissimo_102_aporte_proteico_dirio_1_20260902133419_2c13987b692c.png" alt="Springer Proteissimo 102 - Aporte Proteico Diário"> 18876 <img class="imagem-produto-2" src="https://images.tcdn.com.br/img/img_prod/1063102/springer_proteissimo_102_aporte_proteico_dirio_2_20260902133419_0cb5d8e31b61.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/springer_proteissimo_102_aporte_proteico_dirio_2_20260902133419_0cb5d8e31b61.png" alt="Springer Proteissimo 102 - Aporte Proteico Diário"> 18877 </a> 18878 18879 </div> 18880 18881 18882 18883 18884 18885 </div> 18886 18887 </div> 18888 18889 <div class="product-body"> 18890 18891 <a title="Springer Proteissimo 102 - Aporte Proteico Diário" class="product-info" href="https://www.farmacam.com.br/manipulados/springer-proteissimo-102-aporte-proteico-diario"> 18892 18893 <div class="product-info-dados"> 18894 18895 18896 18897 18898 18899 18900 <div class="product-name"> 18901 Springer Proteissimo 102 - Aporte Proteico Diário 18902 </div> 18903 18904 18905 18906 <div class="product-price"> 18907 18908 18909 18910 18911 18912 <span class="product-has-variants text-center"> 18913 A partir de 18914 </span> 18915 18916<div class="price display-cash"> 18917 18918 18919 <span class="current-price "> 18920 R$ 299,00 18921 18922 </span> 18923 18924 <span class="product-installments"> 18925 18926 </span> 18927 18928</div> 18929 </div> 18930 18931 </div> 18932 18933 </a> 18934 18935 </div> 18936 18937 18938 <div class="product-footer"> 18939 18940 18941 <div class="w-100"> 18942 18943 18944 18945<div class="product-rating-catalog"> 18946 18947 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 18948 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 18949 </svg> 18950 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 18951 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 18952 </svg> 18953 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 18954 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 18955 </svg> 18956 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 18957 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 18958 </svg> 18959 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 18960 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 18961 </svg> 18962 18963 18964 <a title="Ver avaliações de Springer Proteissimo 102 - Aporte Proteico Diário" href="https://www.farmacam.com.br/manipulados/springer-proteissimo-102-aporte-proteico-diario#comments" class="total"> 18965 Seja o primeiro 18966 </a> 18967 18968 </div> 18969 18970 18971 18972 <div class="config-variacoes-compra"> 18973 18974 18975 18976 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245720"> 18977 <input type="hidden" name="product_id" value="125245720"> 18978 <input type="hidden" name="without_stock_sale" value=""> 18979 18980 <input type="hidden" name="variacao" id="selectedVariant" value=""> 18981 <input type="hidden" name="estoque" value=""> 18982 18983 18984 18985 <ul class="paleta-cores"> 18986 18987 18988 18989 18990 18991 18992 18993 18994 18995 18996 18997 18998 18999 19000 19001 19002 19003 19004 19005 19006 19007 19008 19009 19010 19011 19012 19013 19014 19015 19016 19017 19018 19019 19020 19021 19022 19023 19024 19025 19026 19027 19028 19029 19030 19031 19032 19033 19034 19035 19036 19037 19038 19039 19040 19041 19042 19043 19044 19045 19046 19047 19048 19049 19050 19051 19052 19053 19054 19055 19056 19057 19058 19059 19060 19061 19062 19063 19064 19065 19066 19067 19068 19069 19070 19071 19072 19073 19074 19075 19076 19077 19078 19079 19080 19081 19082 19083 19084 19085 19086 19087 19088 19089 19090 19091 19092 19093 19094 19095 19096 19097 19098 19099 19100 19101 19102 19103 19104 19105 19106 19107 19108 19109 19110 19111 19112 19113 19114 19115 19116 19117 19118 19119 19120 19121 19122 19123 19124 19125 19126 19127 19128 19129 19130 19131 19132 19133 19134 19135 19136 19137 19138 19139 19140 19141 19142 19143 19144 19145 19146 19147 19148 19149 19150 19151 19152 19153 19154 19155 19156 19157 19158 19159 19160 19161 19162 19163 19164 19165 19166 19167 19168 19169 19170 19171 19172 19173 19174 19175 19176 19177 19178 19179 19180 19181 19182 19183 19184 19185 19186 19187 19188 19189 19190 19191 19192 19193 19194 19195 19196 19197 19198 19199 19200 19201 19202 19203 19204 19205 19206 19207 19208 19209 19210 19211 19212 19213 19214 19215 19216 19217 19218 19219 19220 19221 19222 19223 19224
19224 19225 19226 19227 19228 19229 19230 19231 19232 19233 19234 19235 19236 19237 19238 19239 19240 19241 19242 19243 19244 19245 19246 19247 19248 19249 19250 19251 19252 19253 19254 19255 19256 19257 19258 19259 19260 19261 19262 19263 19264 19265 19266 19267 19268 19269 19270 19271 19272 19273 19274 19275 19276 19277 19278 19279 19280 19281 19282 19283 19284 19285 19286 19287 19288 19289 19290 19291 19292 19293 19294 19295 19296 19297 19298 19299 19300 19301 19302 19303 19304 19305 19306 19307 19308 19309 19310 19311 19312 19313 19314 19315 19316 19317 19318 19319 19320 19321 19322 19323 19324 19325 19326 19327 19328 19329 19330 19331 19332 19333 19334 19335 19336 19337 19338 19339 19340 19341 19342 19343 19344 19345 19346 19347 19348 19349 19350 19351 19352 19353 19354 19355 19356 19357 19358 19359 19360 19361 19362 19363 19364 19365 19366 19367 19368 19369 19370 19371 19372 19373 19374 19375 19376 19377 19378 19379 19380 19381 19382 19383 19384 19385 19386 19387 19388 19389 19390 19391 19392 19393 19394 19395 19396 19397 19398 19399 19400 19401 19402 19403 19404 19405 19406 </ul> 19407 <!-- Fim Paleta de Cores --> 19408 19409 19410 19411 19412 19413 19414 19415 19416 19417 19418 19419 19420 19421 19422 19423 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 19424 <option disabled="disabled" value=""> 19425 Selecione 19426 </option> 19427 19428 19429 <option value="30776" produto="125245720" estoque="10000">10 g - 30 Sachês</option> 19430 19431 19432 19433 19434 <option value="30778" produto="125245720" estoque="10000">10 g - 60 Sachês</option> 19435 19436 19437 19438 19439 <option value="30780" produto="125245720" estoque="10000">300 g</option> 19440 19441 19442 </select> 19443 19444 19445 <select class="select-cor" style="display: none;" title="Campo Cor"> 19446
19446 </select> 19447 19448 19449 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 19450 <div class="alerta-estoque"></div> 19451 <div class="alerta-adicionado"></div> 19452 19453 <div class="acao-compra"> 19454 19455 <div class="quantidade-box"> 19456 <div class="quantidade-box-input"> 19457 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
19457stoque="30000" /> 19458 </div> 19459 <div class="quantidade-box-controles"> 19460 <div class="quantidade-box-controles-itens" data-item="mais"> 19461 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 19462 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 19463 </svg> 19464 </div> 19465 <div class="quantidade-box-controles-itens" data-item="menus"> 19466 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 19467 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 19468 </svg> 19469 </div> 19470 </div> 19471 </div> 19472 19473 19474 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245720"> 19475 19476 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 19477 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 19478 19479 19480 19481 19482 19483 19484 <!-- Cesta de Compras --> 19485 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 19486 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 19487 </svg> 19488 19489 19490 19491 Comprar 19492 19493 19494 </button> 19495 <!-- </form> --> 19496 19497 </div> 19498 19499</div> 19500 19501 19502 </div> 19503 19504 </div> 19505 19506 19507</div> 19508
19509<script> 19510(function (window, document) { 19511 'use strict'; 19512 19513 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 19514 19515 if (window[GLOBAL_KEY]) { 19516 return; 19517 } 19518 19519 if (!window.Map || !window.WeakMap || !window.Promise) { 19520 return; 19521 } 19522 19523 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 19524 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 19525 '#vitrine-personalizada .product[data-id]'; 19526 var BADGE_CLASS = 'farmacam-prescription-badge'; 19527 var HOST_CLASS = 'farmacam-prescription-badge-host'; 19528 var MAX_CONCURRENT_REQUESTS = 6; 19529 var REQUEST_TIMEOUT_MS = 12000; 19530 19531 var rules = { 19532 '294': { 19533 level: '294', 19534 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 19535 }, 19536 '296': { 19537 level: '296', 19538 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 19539 }, 19540 '298': { 19541 level: '298', 19542 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 19543 } 19544 }; 19545 19546 var cache = new Map(); 19547 var pending = new Map(); 19548 var cardStates = new WeakMap(); 19549 var queue = []; 19550 var activeRequests = 0; 19551 var trayAjaxHooked = false; 19552 19553 function injectStyles() { 19554 if (document.getElementById('farmacam-prescription-cards-style')) { 19555 return; 19556 } 19557 19558 var style = document.createElement('style'); 19559 style.id = 'farmacam-prescription-cards-style'; 19560 style.textContent = [ 19561 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 19562 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 19563 'position:absolute!important;', 19564 'top:52px!important;', 19565 'left:10px!important;', 19566 'z-index:999!important;', 19567 'display:block!important;', 19568 'max-width:calc(100% - 20px)!important;', 19569 'box-sizing:border-box!important;', 19570 'padding:8px 12px!important;', 19571 'color:#fff!important;', 19572 'font-family:inherit!important;', 19573 'font-size:13px!important;', 19574 'font-weight:900!important;', 19575 'line-height:1.15!important;', 19576 'text-align:center!important;', 19577 'text-transform:uppercase!important;', 19578 'letter-spacing:.3px!important;', 19579 'white-space:normal!important;', 19580 'overflow-wrap:break-word!important;', 19581 'border-radius:3px!important;', 19582 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 19583 'pointer-events:none!important;', 19584 '}', 19585 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 19586 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 19587 'background:#d70008!important;', 19588 '}', 19589 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 19590 'background:#000!important;', 19591 '}', 19592 '@media (max-width:767px){', 19593 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 19594 'top:42px!important;', 19595 'left:6px!important;', 19596 'max-width:calc(100% - 12px)!important;', 19597 'padding:6px 8px!important;', 19598 'font-size:10px!important;', 19599 '}', 19600 '}' 19601 ].join(''); 19602 19603 (document.head || document.documentElement).appendChild(style); 19604 } 19605 19606 function normalizeProductId(value) { 19607 var id = String(value == null ? '' : value).trim(); 19608 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 19609 } 19610 19611 function classifyRelatedCategories(relatedCategories) { 19612 var found = { 19613 '292': false, 19614 '294': false, 19615 '296': false, 19616 '298': false 19617 }; 19618 19619 function inspect(value, depth) { 19620 var index; 19621 var normalized; 19622 19623 if (value == null || depth > 8) { 19624 return; 19625 } 19626 19627 if (Array.isArray(value)) { 19628 for (index = 0; index < value.length; index += 1) { 19629 inspect(value[index], depth + 1); 19630 } 19631 return; 19632 } 19633 19634 if (typeof value === 'object') { 19635 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 19636 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 19637 inspect(value.id, depth + 1); 19638 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 19639 inspect(value.category_id, depth + 1); 19640 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 19641 inspect(value.Category, depth + 1); 19642 } 19643 return; 19644 } 19645 19646 if (typeof value !== 'string' && typeof value !== 'number') { 19647 return; 19648 } 19649 normalized = normalizeProductId(value); 19650 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 19651 found[normalized] = true; 19652 } 19653 } 19654 19655 inspect(relatedCategories, 0); 19656 19657 if (found['298']) { 19658 return rules['298']; 19659 } 19660 if (found['296']) { 19661 return rules['296']; 19662 } 19663 if (found['294']) { 19664 return rules['294']; 19665 } 19666 19667 // 292 e qualquer classificacao desconhecida ficam sem tarja. 19668 return null; 19669 } 19670 19671 function ruleFromPayload(payload, productId) { 19672 var product = payload && payload.Product; 19673 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 19674 return null; 19675 } 19676 return classifyRelatedCategories(product && product.related_categories); 19677 } 19678 19679 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 19680 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 19681 function attachTrayAjaxCache() { 19682 var jq = window.jQuery; 19683 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 19684 return; 19685 } 19686
19687 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 19688 var url; 19689 var match; 19690 var productId; 19691 var payload; 19692 try { 19693 url = new URL(settings.url, window.location.href); 19694 if (url.origin !== window.location.origin) { 19695 return; 19696 } 19697 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 19698 if (!match) { 19699 return; 19700 } 19701 productId = normalizeProductId(match[1]); 19702 if (!cache.has(productId) && !pending.has(productId)) { 19703 payload = data || xhr.responseJSON; 19704 if (typeof payload === 'string') { 19705 payload = JSON.parse(payload); 19706 } 19707 if (!payload || !payload.Product || 19708 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 19709 return; 19710 } 19711 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 19712 return; 19713 } 19714 cache.set(productId, ruleFromPayload(payload, productId)); 19715 } 19716 } catch (error) { 19717 // Respostas de outras integracoes nao interferem nas tarjas. 19718 } 19719 }); 19720 19721 trayAjaxHooked = true; 19722 document.removeEventListener('load', onTrayScriptLoad, true); 19723 } 19724 19725 function onTrayScriptLoad(event) { 19726 if (event.target && event.target.tagName === 'SCRIPT') { 19727 attachTrayAjaxCache(); 19728 } 19729 } 19730 19731 function requestRule(productId) { 19732 var controller = null; 19733 var timeoutId = null; 19734 var options = { 19735 credentials: 'same-origin', 19736 headers: { 19737 'Accept': 'application/json' 19738 } 19739 }; 19740 var request; 19741 19742 if (typeof window.fetch !== 'function') { 19743 return Promise.resolve(null); 19744 } 19745 19746 if (typeof window.AbortController === 'function') { 19747 controller = new window.AbortController(); 19748 options.signal = controller.signal; 19749 timeoutId = window.setTimeout(function () { 19750 controller.abort(); 19751 }, REQUEST_TIMEOUT_MS); 19752 } 19753 19754 try { 19755 request = window.fetch( 19756 '/web_api/products/' + encodeURIComponent(productId), 19757 options 19758 ); 19759 } catch (error) { 19760 if (timeoutId !== null) { 19761 window.clearTimeout(timeoutId); 19762 } 19763 return Promise.resolve(null); 19764 } 19765 19766 return request.then(function (response) { 19767 if (!response.ok) { 19768 throw new Error('HTTP ' + response.status); 19769 } 19770 return response.json(); 19771 }).then(function (payload) { 19772 return ruleFromPayload(payload, productId); 19773 }).then(function (rule) { 19774 if (timeoutId !== null) { 19775 window.clearTimeout(timeoutId); 19776 } 19777 return rule; 19778 }, function () { 19779 if (timeoutId !== null) { 19780 window.clearTimeout(timeoutId); 19781 } 19782 19783 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 19784 return null; 19785 }); 19786 } 19787 19788 function finishJob(job, rule) { 19789 cache.set(job.productId, rule); 19790 pending.delete(job.productId); 19791 activeRequests -= 1; 19792 job.resolve(rule); 19793 pumpQueue(); 19794 } 19795 19796 function pumpQueue() { 19797 var job; 19798 19799 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 19800 job = queue.shift(); 19801 activeRequests += 1; 19802 19803 (function (currentJob) { 19804 requestRule(currentJob.productId).then(function (rule) { 19805 finishJob(currentJob, rule); 19806 }, function () { 19807 finishJob(currentJob, null); 19808 }); 19809 }(job)); 19810 } 19811 } 19812 19813 function getRule(productId) { 19814 var resolver; 19815 var promise; 19816 19817 if (cache.has(productId)) { 19818 return Promise.resolve(cache.get(productId)); 19819 } 19820 19821 if (pending.has(productId)) { 19822 return pending.get(productId); 19823 } 19824 19825 promise = new Promise(function (resolve) { 19826 resolver = resolve; 19827 }); 19828 19829 pending.set(productId, promise); 19830 queue.push({ 19831 productId: productId, 19832 resolve: resolver 19833 }); 19834 pumpQueue(); 19835 19836 return promise; 19837 } 19838 19839 function findBadge(card) { 19840 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 19841 } 19842 19843 function clearBadge(card) { 19844 var badge = findBadge(card); 19845 var image = card.querySelector('.product-header > .w-100 > .image'); 19846 19847 if (badge && badge.parentNode) { 19848 badge.parentNode.removeChild(badge); 19849 } 19850 19851 if (image) { 19852 image.classList.remove(HOST_CLASS); 19853 } 19854 19855 card.removeAttribute('data-farmacam-prescription-level'); 19856 } 19857 19858 function applyBadge(card, productId, rule) { 19859 var image; 19860 var badge; 19861 19862 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 19863 return false;
19864 } 19865 19866 clearBadge(card); 19867 19868 if (!rule) { 19869 return true; 19870 } 19871 19872 image = card.querySelector('.product-header > .w-100 > .image'); 19873 if (!image) { 19874 return false; 19875 } 19876 19877 badge = document.createElement('span'); 19878 badge.className = BADGE_CLASS; 19879 badge.setAttribute('data-farmacam-generated', 'true'); 19880 badge.setAttribute('data-farmacam-prescription-level', rule.level); 19881 badge.setAttribute('role', 'note'); 19882 badge.textContent = rule.text; 19883 19884 image.classList.add(HOST_CLASS); 19885 image.insertBefore(badge, image.firstChild); 19886 card.setAttribute('data-farmacam-prescription-level', rule.level); 19887 19888 return true; 19889 } 19890 19891 function processCard(card) { 19892 var productId; 19893 var previousState; 19894 var currentState; 19895 19896 if (!card || card.nodeType !== 1) { 19897 return; 19898 } 19899 19900 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 19901 return; 19902 } 19903 19904 productId = normalizeProductId(card.getAttribute('data-id')); 19905 previousState = cardStates.get(card); 19906 19907 if (!productId) { 19908 clearBadge(card); 19909 cardStates.delete(card); 19910 return; 19911 } 19912 19913 if ( 19914 previousState && 19915 previousState.productId === productId && 19916 previousState.status === 'loading' 19917 ) { 19918 return; 19919 } 19920 19921 if ( 19922 previousState && 19923 previousState.productId === productId && 19924 previousState.status === 'processed' 19925 ) { 19926 if (!previousState.rule || findBadge(card)) { 19927 return; 19928 } 19929 } 19930 19931 if (!previousState || previousState.productId !== productId) { 19932 clearBadge(card); 19933 } 19934 19935 currentState = { 19936 productId: productId, 19937 status: 'loading', 19938 rule: null 19939 }; 19940 cardStates.set(card, currentState); 19941 19942 getRule(productId).then(function (rule) { 19943 var applied; 19944 19945 if ( 19946 cardStates.get(card) !== currentState || 19947 normalizeProductId(card.getAttribute('data-id')) !== productId 19948 ) { 19949 return; 19950 } 19951 19952 applied = applyBadge(card, productId, rule); 19953 currentState.rule = rule; 19954 currentState.status = applied ? 'processed' : 'waiting-image'; 19955 }); 19956 } 19957 19958 function scan(root) { 19959 var cards; 19960 var index; 19961 19962 if (!root) { 19963 return; 19964 } 19965 19966 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 19967 processCard(root); 19968 } 19969 19970 if (!root.querySelectorAll) { 19971 return; 19972 } 19973 19974 cards = root.querySelectorAll(CARD_SELECTOR); 19975 for (index = 0; index < cards.length; index += 1) { 19976 processCard(cards[index]); 19977 } 19978 } 19979 19980 function startObserver() { 19981 var observer; 19982 19983 if (!window.MutationObserver || !document.documentElement) { 19984 return; 19985 } 19986 19987 observer = new MutationObserver(function (mutations) { 19988 var mutationIndex; 19989 var nodeIndex; 19990 var mutation; 19991 var node; 19992 var ownerCard; 19993 19994 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 19995 mutation = mutations[mutationIndex]; 19996 19997 if (mutation.type === 'attributes') { 19998 processCard(mutation.target); 19999 continue; 20000 } 20001 20002 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 20003 node = mutation.addedNodes[nodeIndex]; 20004 if (node.nodeType !== 1) { 20005 continue; 20006 } 20007 20008 scan(node); 20009 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 20010 if (ownerCard) { 20011 processCard(ownerCard); 20012 } 20013 } 20014 } 20015 }); 20016 20017 observer.observe(document.documentElement, { 20018 childList: true, 20019 subtree: true, 20020 attributes: true, 20021 attributeFilter: ['data-id'] 20022 }); 20023 20024 window[GLOBAL_KEY].observer = observer; 20025 } 20026 20027 window[GLOBAL_KEY] = { 20028 version: '1.1.0', 20029 cache: cache, 20030 pending: pending, 20031 cardStates: cardStates, 20032 scan: scan, 20033 processCard: processCard, 20034 observer: null 20035 }; 20036 20037 document.addEventListener('load', onTrayScriptLoad, true); 20038 attachTrayAjaxCache(); 20039 injectStyles(); 20040 scan(document); 20041 startObserver(); 20042 20043 if (document.readyState === 'loading') { 20044 document.addEventListener('DOMContentLoaded', function () { 20045 attachTrayAjaxCache(); 20046 scan(document); 20047 }); 20048 } 20049}(window, document)); 20050</script>
20050 20051 </div> 20052 <div 20053 class="swiper-slide fixWidthBoxProduct item"> 20054 20055 20056 20057 20058<div class="product animate open_cart" 20059 data-id="125245706" 20060 data-farmacam-related-categories="," 20061 data-ga4-id="125245706" 20062 data-ga4-name="Saúde Endotelial Com Mesoporosil E Sodmax" 20063 data-ga4-price="199.00" 20064 data-ga4-brand="Farmacam" 20065 data-ga4-category="Tipo de Produto;Manipulados;" 20066 > 20067 20068 <div class="product-header"> 20069 20070 <div class="w-100"> 20071 20072 20073 20074 20075 20076 20077 20078 <div class="product-tags-circle"> 20079 20080 20081 <div class="tag-circle discount tag-icone tag-icone1"> 20082 <svg fill="none" height="16" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 20083 <path stroke-linecap="round" stroke-linejoin="round" d="M15.362 5.214A8.252 8.252 0 0112 21 8.25 8.25 0 016.038 7.048 8.287 8.287 0 009 9.6a8.983 8.983 0 013.361-6.867 8.21 8.21 0 003 2.48z"></path> 20084 <path stroke-linecap="round" stroke-linejoin="round" d="M12 18a3.75 3.75 0 00.495-7.467 5.99 5.99 0 00-1.925 3.546 5.974 5.974 0 01-2.133-1A3.75 3.75 0 0012 18z"></path> 20085 </svg> 20086 <span>Lançamento</span> 20087 </div> 20088 20089 20090 </div> 20091 20092 20093 20094 <div class="product-tags " data-tags-count="1"> 20095 20096 20097 20098 20099 20100 </div> 20101 20102 20103 20104 <div class="image "> 20105 20106 <a title="Saúde Endotelial Com Mesoporosil E Sodmax" href="https://www.farmacam.com.br/manipulados/saude-endotelial-com-mesoporosil-e-sodmax" class="space-image"> 20107 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/sade_endotelial_com_mesoporosil_e_sodmax_1_20260901162520_1121a879c74f.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/sade_endotelial_com_mesoporosil_e_sodmax_1_20260901162520_1121a879c74f.png" alt="Saúde Endotelial Com Mesoporosil E Sodmax"> 20108 </a> 20109 20110 </div> 20111 20112 20113 20114 20115 20116 </div> 20117 20118 </div> 20119 20120 <div class="product-body"> 20121 20122 <a title="Saúde Endotelial Com Mesoporosil E Sodmax" class="product-info" href="https://www.farmacam.com.br/manipulados/saude-endotelial-com-mesoporosil-e-sodmax"> 20123 20124 <div class="product-info-dados"> 20125 20126 20127 20128 20129 20130 20131 <div class="product-name"> 20132 Saúde Endotelial Com Mesoporosil E Sodmax 20133 </div> 20134 20135 20136 20137 <div class="product-price"> 20138 20139 20140 20141 20142 20143 <span class="product-has-variants text-center"> 20144 A partir de 20145 </span> 20146 20147<div class="price display-cash"> 20148 20149 20150 <span class="current-price "> 20151 R$ 199,00 20152 20153 </span> 20154 20155 <span class="product-installments"> 20156 20157 </span> 20158 20159</div> 20160 </div> 20161 20162 </div> 20163 20164 </a> 20165 20166 </div> 20167 20168 20169 <div class="product-footer"> 20170 20171 20172 <div class="w-100"> 20173 20174 20175 20176<div class="product-rating-catalog"> 20177 20178 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 20179 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 20180 </svg> 20181 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 20182 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 20183 </svg> 20184 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 20185 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 20186 </svg> 20187 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 20188 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 20189 </svg> 20190 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 20191 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 20192 </svg> 20193 20194 20195 <a title="Ver avaliações de Saúde Endotelial Com Mesoporosil E Sodmax" href="https://www.farmacam.com.br/manipulados/saude-endotelial-com-mesoporosil-e-sodmax#comments" class="total"> 20196 Seja o primeiro 20197 </a> 20198 20199 </div> 20200 20201 20202 20203 <div class="config-variacoes-compra"> 20204 20205 20206 20207 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245706"> 20208 <input type="hidden" name="product_id" value="125245706"> 20209 <input type="hidden" name="without_stock_sale" value=""> 20210 20211 <input type="hidden" name="variacao" id="selectedVariant" value=""> 20212 <input type="hidden" name="estoque" value=""> 20213 20214 20215 20216 <ul class="paleta-cores"> 20217 20218 20219 20220 20221 20222 20223 20224 20225 20226 20227 20228 20229 20230 20231 20232 20233 20234 20235 20236 20237 20238 20239 20240 20241 20242 20243 20244 20245 20246 20247 20248 20249 20250 20251 20252 20253 20254 20255 20256 20257 20258 20259 20260 20261 20262 20263 20264 20265 20266 20267 20268 20269 20270 20271 20272 20273 20274 20275 20276 20277 20278 20279 20280 20281 20282 20283 20284 20285 20286 20287 20288 20289 20290 20291 20292 20293 20294 20295 20296 20297 20298 20299 20300 20301 20302 20303 20304 20305 20306 20307 20308 20309 20310 20311 20312 20313 20314 20315 20316 20317 20318 20319 20320 20321 20322 20323 20324 20325 20326 20327 20328 20329 20330 20331 20332 20333 20334 20335 20336 20337 20338 20339 20340 20341 20342 20343 20344 20345 20346 20347 20348 20349 20350 20351 20352 20353 20354 20355 20356 20357 20358 20359 20360 20361 20362 20363 20364 20365 20366 20367 20368 20369 20370 20371 20372 20373 20374 20375 20376 20377 20378 20379 20380 20381 20382 20383 20384 20385 20386 20387 20388 20389 20390 20391 20392 20393 20394 20395 20396 20397 20398 20399 20400 20401 20402 20403 20404 20405 20406 20407 20408 20409 20410 20411 20412 20413 20414 20415 20416 20417 20418 20419 20420 20421 20422 20423 20424 20425 20426 20427 20428 20429 20430 20431 20432 20433 20434 20435 20436 20437 20438 20439 20440 20441 20442 20443 20444 20445 20446 20447 20448 20449 20450 20451 20452 20453 20454 20455 20456 20457 20458 20459 20460 20461 20462 20463 20464 20465 20466 20467
20467 20468 20469 20470 20471 20472 20473 20474 20475 20476 20477 20478 20479 20480 20481 20482 20483 20484 20485 20486 20487 20488 20489 20490 20491 20492 20493 20494 20495 20496 20497 20498 20499 20500 20501 20502 20503 20504 20505 20506 20507 20508 20509 20510 20511 20512 20513 20514 20515 20516 20517 20518 20519 20520 20521 20522 20523 20524 20525 20526 20527 20528 20529 20530 20531 20532 20533 20534 20535 20536 20537 20538 20539 20540 20541 20542 20543 20544 20545 20546 20547 20548 20549 20550 20551 20552 20553 20554 20555 20556 20557 20558 20559 20560 20561 20562 20563 20564 20565 20566 20567 20568 20569 20570 20571 20572 20573 20574 20575 20576 20577 20578 20579 20580 20581 20582 20583 20584 20585 20586 20587 20588 20589 20590 20591 20592 20593 20594 20595 20596 20597 20598 20599 20600 20601 20602 20603 20604 20605 20606 20607 20608 20609 20610 20611 20612 20613 20614 20615 20616 20617 20618 20619 20620 20621 20622 20623 20624 20625 20626 20627 20628 20629 20630 20631 20632 20633 20634 20635 </ul> 20636 <!-- Fim Paleta de Cores --> 20637 20638 20639 20640 20641 20642 20643 20644 20645 20646 20647 20648 20649 20650 20651 20652 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 20653 <option disabled="disabled" value=""> 20654 Selecione 20655 </option> 20656 20657 20658 <option value="30722" produto="125245706" estoque="10000">30 Sachês</option> 20659 20660 20661 20662 20663 <option value="30724" produto="125245706" estoque="10000">60 Sachês</option> 20664 20665 20666 20667 20668 <option value="30726" produto="125245706" estoque="10000">90 Sachês</option> 20669 20670 20671 </select> 20672 20673 20674 <select class="select-cor" style="display: none;" title="Campo Cor"> 20675
20675 </select> 20676 20677 20678 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 20679 <div class="alerta-estoque"></div> 20680 <div class="alerta-adicionado"></div> 20681 20682 <div class="acao-compra"> 20683 20684 <div class="quantidade-box"> 20685 <div class="quantidade-box-input"> 20686 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
20686stoque="30000" /> 20687 </div> 20688 <div class="quantidade-box-controles"> 20689 <div class="quantidade-box-controles-itens" data-item="mais"> 20690 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 20691 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 20692 </svg> 20693 </div> 20694 <div class="quantidade-box-controles-itens" data-item="menus"> 20695 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 20696 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 20697 </svg> 20698 </div> 20699 </div> 20700 </div> 20701 20702 20703 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245706"> 20704 20705 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 20706 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 20707 20708 20709 20710 20711 20712 20713 <!-- Cesta de Compras --> 20714 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 20715 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 20716 </svg> 20717 20718 20719 20720 Comprar 20721 20722 20723 </button> 20724 <!-- </form> --> 20725 20726 </div> 20727 20728</div> 20729 20730 20731 </div> 20732 20733 </div> 20734 20735 20736</div> 20737
20738<script> 20739(function (window, document) { 20740 'use strict'; 20741 20742 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 20743 20744 if (window[GLOBAL_KEY]) { 20745 return; 20746 } 20747 20748 if (!window.Map || !window.WeakMap || !window.Promise) { 20749 return; 20750 } 20751 20752 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 20753 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 20754 '#vitrine-personalizada .product[data-id]'; 20755 var BADGE_CLASS = 'farmacam-prescription-badge'; 20756 var HOST_CLASS = 'farmacam-prescription-badge-host'; 20757 var MAX_CONCURRENT_REQUESTS = 6; 20758 var REQUEST_TIMEOUT_MS = 12000; 20759 20760 var rules = { 20761 '294': { 20762 level: '294', 20763 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 20764 }, 20765 '296': { 20766 level: '296', 20767 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 20768 }, 20769 '298': { 20770 level: '298', 20771 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 20772 } 20773 }; 20774 20775 var cache = new Map(); 20776 var pending = new Map(); 20777 var cardStates = new WeakMap(); 20778 var queue = []; 20779 var activeRequests = 0; 20780 var trayAjaxHooked = false; 20781 20782 function injectStyles() { 20783 if (document.getElementById('farmacam-prescription-cards-style')) { 20784 return; 20785 } 20786 20787 var style = document.createElement('style'); 20788 style.id = 'farmacam-prescription-cards-style'; 20789 style.textContent = [ 20790 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 20791 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 20792 'position:absolute!important;', 20793 'top:52px!important;', 20794 'left:10px!important;', 20795 'z-index:999!important;', 20796 'display:block!important;', 20797 'max-width:calc(100% - 20px)!important;', 20798 'box-sizing:border-box!important;', 20799 'padding:8px 12px!important;', 20800 'color:#fff!important;', 20801 'font-family:inherit!important;', 20802 'font-size:13px!important;', 20803 'font-weight:900!important;', 20804 'line-height:1.15!important;', 20805 'text-align:center!important;', 20806 'text-transform:uppercase!important;', 20807 'letter-spacing:.3px!important;', 20808 'white-space:normal!important;', 20809 'overflow-wrap:break-word!important;', 20810 'border-radius:3px!important;', 20811 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 20812 'pointer-events:none!important;', 20813 '}', 20814 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 20815 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 20816 'background:#d70008!important;', 20817 '}', 20818 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 20819 'background:#000!important;', 20820 '}', 20821 '@media (max-width:767px){', 20822 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 20823 'top:42px!important;', 20824 'left:6px!important;', 20825 'max-width:calc(100% - 12px)!important;', 20826 'padding:6px 8px!important;', 20827 'font-size:10px!important;', 20828 '}', 20829 '}' 20830 ].join(''); 20831 20832 (document.head || document.documentElement).appendChild(style); 20833 } 20834 20835 function normalizeProductId(value) { 20836 var id = String(value == null ? '' : value).trim(); 20837 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 20838 } 20839 20840 function classifyRelatedCategories(relatedCategories) { 20841 var found = { 20842 '292': false, 20843 '294': false, 20844 '296': false, 20845 '298': false 20846 }; 20847 20848 function inspect(value, depth) { 20849 var index; 20850 var normalized; 20851 20852 if (value == null || depth > 8) { 20853 return; 20854 } 20855 20856 if (Array.isArray(value)) { 20857 for (index = 0; index < value.length; index += 1) { 20858 inspect(value[index], depth + 1); 20859 } 20860 return; 20861 } 20862 20863 if (typeof value === 'object') { 20864 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 20865 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 20866 inspect(value.id, depth + 1); 20867 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 20868 inspect(value.category_id, depth + 1); 20869 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 20870 inspect(value.Category, depth + 1); 20871 } 20872 return; 20873 } 20874 20875 if (typeof value !== 'string' && typeof value !== 'number') { 20876 return; 20877 } 20878 normalized = normalizeProductId(value); 20879 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 20880 found[normalized] = true; 20881 } 20882 } 20883 20884 inspect(relatedCategories, 0); 20885 20886 if (found['298']) { 20887 return rules['298']; 20888 } 20889 if (found['296']) { 20890 return rules['296']; 20891 } 20892 if (found['294']) { 20893 return rules['294']; 20894 } 20895 20896 // 292 e qualquer classificacao desconhecida ficam sem tarja. 20897 return null; 20898 } 20899 20900 function ruleFromPayload(payload, productId) { 20901 var product = payload && payload.Product; 20902 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 20903 return null; 20904 } 20905 return classifyRelatedCategories(product && product.related_categories); 20906 } 20907 20908 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 20909 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 20910 function attachTrayAjaxCache() { 20911 var jq = window.jQuery; 20912 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 20913 return; 20914 } 20915
20916 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 20917 var url; 20918 var match; 20919 var productId; 20920 var payload; 20921 try { 20922 url = new URL(settings.url, window.location.href); 20923 if (url.origin !== window.location.origin) { 20924 return; 20925 } 20926 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 20927 if (!match) { 20928 return; 20929 } 20930 productId = normalizeProductId(match[1]); 20931 if (!cache.has(productId) && !pending.has(productId)) { 20932 payload = data || xhr.responseJSON; 20933 if (typeof payload === 'string') { 20934 payload = JSON.parse(payload); 20935 } 20936 if (!payload || !payload.Product || 20937 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 20938 return; 20939 } 20940 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 20941 return; 20942 } 20943 cache.set(productId, ruleFromPayload(payload, productId)); 20944 } 20945 } catch (error) { 20946 // Respostas de outras integracoes nao interferem nas tarjas. 20947 } 20948 }); 20949 20950 trayAjaxHooked = true; 20951 document.removeEventListener('load', onTrayScriptLoad, true); 20952 } 20953 20954 function onTrayScriptLoad(event) { 20955 if (event.target && event.target.tagName === 'SCRIPT') { 20956 attachTrayAjaxCache(); 20957 } 20958 } 20959 20960 function requestRule(productId) { 20961 var controller = null; 20962 var timeoutId = null; 20963 var options = { 20964 credentials: 'same-origin', 20965 headers: { 20966 'Accept': 'application/json' 20967 } 20968 }; 20969 var request; 20970 20971 if (typeof window.fetch !== 'function') { 20972 return Promise.resolve(null); 20973 } 20974 20975 if (typeof window.AbortController === 'function') { 20976 controller = new window.AbortController(); 20977 options.signal = controller.signal; 20978 timeoutId = window.setTimeout(function () { 20979 controller.abort(); 20980 }, REQUEST_TIMEOUT_MS); 20981 } 20982 20983 try { 20984 request = window.fetch( 20985 '/web_api/products/' + encodeURIComponent(productId), 20986 options 20987 ); 20988 } catch (error) { 20989 if (timeoutId !== null) { 20990 window.clearTimeout(timeoutId); 20991 } 20992 return Promise.resolve(null); 20993 } 20994 20995 return request.then(function (response) { 20996 if (!response.ok) { 20997 throw new Error('HTTP ' + response.status); 20998 } 20999 return response.json(); 21000 }).then(function (payload) { 21001 return ruleFromPayload(payload, productId); 21002 }).then(function (rule) { 21003 if (timeoutId !== null) { 21004 window.clearTimeout(timeoutId); 21005 } 21006 return rule; 21007 }, function () { 21008 if (timeoutId !== null) { 21009 window.clearTimeout(timeoutId); 21010 } 21011 21012 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 21013 return null; 21014 }); 21015 } 21016 21017 function finishJob(job, rule) { 21018 cache.set(job.productId, rule); 21019 pending.delete(job.productId); 21020 activeRequests -= 1; 21021 job.resolve(rule); 21022 pumpQueue(); 21023 } 21024 21025 function pumpQueue() { 21026 var job; 21027 21028 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 21029 job = queue.shift(); 21030 activeRequests += 1; 21031 21032 (function (currentJob) { 21033 requestRule(currentJob.productId).then(function (rule) { 21034 finishJob(currentJob, rule); 21035 }, function () { 21036 finishJob(currentJob, null); 21037 }); 21038 }(job)); 21039 } 21040 } 21041 21042 function getRule(productId) { 21043 var resolver; 21044 var promise; 21045 21046 if (cache.has(productId)) { 21047 return Promise.resolve(cache.get(productId)); 21048 } 21049 21050 if (pending.has(productId)) { 21051 return pending.get(productId); 21052 } 21053 21054 promise = new Promise(function (resolve) { 21055 resolver = resolve; 21056 }); 21057 21058 pending.set(productId, promise); 21059 queue.push({ 21060 productId: productId, 21061 resolve: resolver 21062 }); 21063 pumpQueue(); 21064 21065 return promise; 21066 } 21067 21068 function findBadge(card) { 21069 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 21070 } 21071 21072 function clearBadge(card) { 21073 var badge = findBadge(card); 21074 var image = card.querySelector('.product-header > .w-100 > .image'); 21075 21076 if (badge && badge.parentNode) { 21077 badge.parentNode.removeChild(badge); 21078 } 21079 21080 if (image) { 21081 image.classList.remove(HOST_CLASS); 21082 } 21083 21084 card.removeAttribute('data-farmacam-prescription-level'); 21085 } 21086 21087 function applyBadge(card, productId, rule) { 21088 var image; 21089 var badge; 21090 21091 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 21092 return false;
21093 } 21094 21095 clearBadge(card); 21096 21097 if (!rule) { 21098 return true; 21099 } 21100 21101 image = card.querySelector('.product-header > .w-100 > .image'); 21102 if (!image) { 21103 return false; 21104 } 21105 21106 badge = document.createElement('span'); 21107 badge.className = BADGE_CLASS; 21108 badge.setAttribute('data-farmacam-generated', 'true'); 21109 badge.setAttribute('data-farmacam-prescription-level', rule.level); 21110 badge.setAttribute('role', 'note'); 21111 badge.textContent = rule.text; 21112 21113 image.classList.add(HOST_CLASS); 21114 image.insertBefore(badge, image.firstChild); 21115 card.setAttribute('data-farmacam-prescription-level', rule.level); 21116 21117 return true; 21118 } 21119 21120 function processCard(card) { 21121 var productId; 21122 var previousState; 21123 var currentState; 21124 21125 if (!card || card.nodeType !== 1) { 21126 return; 21127 } 21128 21129 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 21130 return; 21131 } 21132 21133 productId = normalizeProductId(card.getAttribute('data-id')); 21134 previousState = cardStates.get(card); 21135 21136 if (!productId) { 21137 clearBadge(card); 21138 cardStates.delete(card); 21139 return; 21140 } 21141 21142 if ( 21143 previousState && 21144 previousState.productId === productId && 21145 previousState.status === 'loading' 21146 ) { 21147 return; 21148 } 21149 21150 if ( 21151 previousState && 21152 previousState.productId === productId && 21153 previousState.status === 'processed' 21154 ) { 21155 if (!previousState.rule || findBadge(card)) { 21156 return; 21157 } 21158 } 21159 21160 if (!previousState || previousState.productId !== productId) { 21161 clearBadge(card); 21162 } 21163 21164 currentState = { 21165 productId: productId, 21166 status: 'loading', 21167 rule: null 21168 }; 21169 cardStates.set(card, currentState); 21170 21171 getRule(productId).then(function (rule) { 21172 var applied; 21173 21174 if ( 21175 cardStates.get(card) !== currentState || 21176 normalizeProductId(card.getAttribute('data-id')) !== productId 21177 ) { 21178 return; 21179 } 21180 21181 applied = applyBadge(card, productId, rule); 21182 currentState.rule = rule; 21183 currentState.status = applied ? 'processed' : 'waiting-image'; 21184 }); 21185 } 21186 21187 function scan(root) { 21188 var cards; 21189 var index; 21190 21191 if (!root) { 21192 return; 21193 } 21194 21195 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 21196 processCard(root); 21197 } 21198 21199 if (!root.querySelectorAll) { 21200 return; 21201 } 21202 21203 cards = root.querySelectorAll(CARD_SELECTOR); 21204 for (index = 0; index < cards.length; index += 1) { 21205 processCard(cards[index]); 21206 } 21207 } 21208 21209 function startObserver() { 21210 var observer; 21211 21212 if (!window.MutationObserver || !document.documentElement) { 21213 return; 21214 } 21215 21216 observer = new MutationObserver(function (mutations) { 21217 var mutationIndex; 21218 var nodeIndex; 21219 var mutation; 21220 var node; 21221 var ownerCard; 21222 21223 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 21224 mutation = mutations[mutationIndex]; 21225 21226 if (mutation.type === 'attributes') { 21227 processCard(mutation.target); 21228 continue; 21229 } 21230 21231 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 21232 node = mutation.addedNodes[nodeIndex]; 21233 if (node.nodeType !== 1) { 21234 continue; 21235 } 21236 21237 scan(node); 21238 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 21239 if (ownerCard) { 21240 processCard(ownerCard); 21241 } 21242 } 21243 } 21244 }); 21245 21246 observer.observe(document.documentElement, { 21247 childList: true, 21248 subtree: true, 21249 attributes: true, 21250 attributeFilter: ['data-id'] 21251 }); 21252 21253 window[GLOBAL_KEY].observer = observer; 21254 } 21255 21256 window[GLOBAL_KEY] = { 21257 version: '1.1.0', 21258 cache: cache, 21259 pending: pending, 21260 cardStates: cardStates, 21261 scan: scan, 21262 processCard: processCard, 21263 observer: null 21264 }; 21265 21266 document.addEventListener('load', onTrayScriptLoad, true); 21267 attachTrayAjaxCache(); 21268 injectStyles(); 21269 scan(document); 21270 startObserver(); 21271 21272 if (document.readyState === 'loading') { 21273 document.addEventListener('DOMContentLoaded', function () { 21274 attachTrayAjaxCache(); 21275 scan(document); 21276 }); 21277 } 21278}(window, document)); 21279</script>
21279 21280 </div> 21281 <div 21282 class="swiper-slide fixWidthBoxProduct item"> 21283 21284 21285 21286 21287<div class="product animate open_cart" 21288 data-id="125245704" 21289 data-farmacam-related-categories="," 21290 data-ga4-id="125245704" 21291 data-ga4-name="Prevenção Neurocognitiva Com Mesoporosil" 21292 data-ga4-price="218.00" 21293 data-ga4-brand="Farmacam" 21294 data-ga4-category="Tipo de Produto;Manipulados;" 21295 > 21296 21297 <div class="product-header"> 21298 21299 <div class="w-100"> 21300 21301 21302 21303 21304 21305 21306 21307 <div class="product-tags-circle"> 21308 21309 21310 <div class="tag-circle discount tag-icone tag-icone1"> 21311 <svg fill="none" height="16" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 21312 <path stroke-linecap="round" stroke-linejoin="round" d="M15.362 5.214A8.252 8.252 0 0112 21 8.25 8.25 0 016.038 7.048 8.287 8.287 0 009 9.6a8.983 8.983 0 013.361-6.867 8.21 8.21 0 003 2.48z"></path> 21313 <path stroke-linecap="round" stroke-linejoin="round" d="M12 18a3.75 3.75 0 00.495-7.467 5.99 5.99 0 00-1.925 3.546 5.974 5.974 0 01-2.133-1A3.75 3.75 0 0012 18z"></path> 21314 </svg> 21315 <span>Lançamento</span> 21316 </div> 21317 21318 21319 </div> 21320 21321 21322 21323 <div class="product-tags " data-tags-count="1"> 21324 21325 21326 21327 21328 21329 </div> 21330 21331 21332 21333 <div class="image "> 21334 21335 <a title="Prevenção Neurocognitiva Com Mesoporosil" href="https://www.farmacam.com.br/manipulados/prevencao-neurocognitiva-com-mesoporosil" class="space-image"> 21336 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/preveno_neurocognitiva_com_mesoporosil_1_20260901155155_211be4166d49.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/preveno_neurocognitiva_com_mesoporosil_1_20260901155155_211be4166d49.png" alt="Prevenção Neurocognitiva Com Mesoporosil"> 21337 </a> 21338 21339 </div> 21340 21341 21342 21343 21344 21345 </div> 21346 21347 </div> 21348 21349 <div class="product-body"> 21350 21351 <a title="Prevenção Neurocognitiva Com Mesoporosil" class="product-info" href="https://www.farmacam.com.br/manipulados/prevencao-neurocognitiva-com-mesoporosil"> 21352 21353 <div class="product-info-dados"> 21354 21355 21356 21357 21358 21359 21360 <div class="product-name"> 21361 Prevenção Neurocognitiva Com Mesoporosil 21362 </div> 21363 21364 21365 21366 <div class="product-price"> 21367 21368 21369 21370 21371 21372 <span class="product-has-variants text-center"> 21373 A partir de 21374 </span> 21375 21376<div class="price display-cash"> 21377 21378 21379 <span class="current-price "> 21380 R$ 218,00 21381 21382 </span> 21383 21384 <span class="product-installments"> 21385 21386 </span> 21387 21388</div> 21389 </div> 21390 21391 </div> 21392 21393 </a> 21394 21395 </div> 21396 21397 21398 <div class="product-footer"> 21399 21400 21401 <div class="w-100"> 21402 21403 21404 21405<div class="product-rating-catalog"> 21406 21407 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 21408 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 21409 </svg> 21410 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 21411 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 21412 </svg> 21413 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 21414 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 21415 </svg> 21416 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 21417 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 21418 </svg> 21419 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 21420 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 21421 </svg> 21422 21423 21424 <a title="Ver avaliações de Prevenção Neurocognitiva Com Mesoporosil" href="https://www.farmacam.com.br/manipulados/prevencao-neurocognitiva-com-mesoporosil#comments" class="total"> 21425 Seja o primeiro 21426 </a> 21427 21428 </div> 21429 21430 21431 21432 <div class="config-variacoes-compra"> 21433 21434 21435 21436 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245704"> 21437 <input type="hidden" name="product_id" value="125245704"> 21438 <input type="hidden" name="without_stock_sale" value=""> 21439 21440 <input type="hidden" name="variacao" id="selectedVariant" value=""> 21441 <input type="hidden" name="estoque" value=""> 21442 21443 21444 21445 <ul class="paleta-cores"> 21446 21447 21448 21449 21450 21451 21452 21453 21454 21455 21456 21457 21458 21459 21460 21461 21462 21463 21464 21465 21466 21467 21468 21469 21470 21471 21472 21473 21474 21475 21476 21477 21478 21479 21480 21481 21482 21483 21484 21485 21486 21487 21488 21489 21490 21491 21492 21493 21494 21495 21496 21497 21498 21499 21500 21501 21502 21503 21504 21505 21506 21507 21508 21509 21510 21511 21512 21513 21514 21515 21516 21517 21518 21519 21520 21521 21522 21523 21524 21525 21526 21527 21528 21529 21530 21531 21532 21533 21534 21535 21536 21537 21538 21539 21540 21541 21542 21543 21544 21545 21546 21547 21548 21549 21550 21551 21552 21553 21554 21555 21556 21557 21558 21559 21560 21561 21562 21563 21564 21565 21566 21567 21568 21569 21570 21571 21572 21573 21574 21575 21576 21577 21578 21579 21580 21581 21582 21583 21584 21585 21586 21587 21588 21589 21590 21591 21592 21593 21594 21595 21596 21597 21598 21599 21600 21601 21602 21603 21604 21605 21606 21607 21608 21609 21610 21611 21612 21613 21614 21615 21616 21617 21618 21619 21620 21621 21622 21623 21624 21625 21626 21627 21628 21629 21630 21631 21632 21633 21634 21635 21636 21637 21638 21639 21640 21641 21642 21643 21644 21645 21646 21647 21648 21649 21650 21651 21652 21653 21654 21655 21656 21657 21658 21659 21660 21661 21662 21663 21664 21665 21666 21667 21668 21669 21670 21671 21672 21673 21674 21675 21676 21677 21678 21679 21680 21681 21682 21683 21684 21685 21686 21687 21688 21689 21690 21691 21692 21693 21694 21695 21696
21696 21697 21698 21699 21700 21701 21702 21703 21704 21705 21706 21707 21708 21709 21710 21711 21712 21713 21714 21715 21716 21717 21718 21719 21720 21721 21722 21723 21724 21725 21726 21727 21728 21729 21730 21731 21732 21733 21734 21735 21736 21737 21738 21739 21740 21741 21742 21743 21744 21745 21746 21747 21748 21749 21750 21751 21752 21753 21754 21755 21756 21757 21758 21759 21760 21761 21762 21763 21764 21765 21766 21767 21768 21769 21770 21771 21772 21773 21774 21775 21776 21777 21778 21779 21780 21781 21782 21783 21784 21785 21786 21787 21788 21789 21790 21791 21792 21793 21794 21795 21796 21797 21798 21799 21800 21801 21802 21803 21804 21805 21806 21807 21808 21809 21810 21811 21812 21813 21814 21815 21816 21817 21818 21819 21820 21821 21822 21823 21824 21825 21826 21827 21828 21829 21830 21831 21832 21833 21834 21835 21836 21837 21838 21839 21840 21841 21842 21843 21844 21845 21846 21847 21848 21849 21850 21851 21852 21853 21854 21855 21856 21857 21858 21859 21860 21861 21862 21863 21864 </ul> 21865 <!-- Fim Paleta de Cores --> 21866 21867 21868 21869 21870 21871 21872 21873 21874 21875 21876 21877 21878 21879 21880 21881 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 21882 <option disabled="disabled" value=""> 21883 Selecione 21884 </option> 21885 21886 21887 <option value="30716" produto="125245704" estoque="10000">30 Doses</option> 21888 21889 21890 21891 21892 <option value="30718" produto="125245704" estoque="10000">60 Doses</option> 21893 21894 21895 21896 21897 <option value="30720" produto="125245704" estoque="10000">90 Doses</option> 21898 21899 21900 </select> 21901 21902 21903 <select class="select-cor" style="display: none;" title="Campo Cor"> 21904
21904 </select> 21905 21906 21907 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 21908 <div class="alerta-estoque"></div> 21909 <div class="alerta-adicionado"></div> 21910 21911 <div class="acao-compra"> 21912 21913 <div class="quantidade-box"> 21914 <div class="quantidade-box-input"> 21915 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
21915stoque="30000" /> 21916 </div> 21917 <div class="quantidade-box-controles"> 21918 <div class="quantidade-box-controles-itens" data-item="mais"> 21919 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 21920 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 21921 </svg> 21922 </div> 21923 <div class="quantidade-box-controles-itens" data-item="menus"> 21924 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 21925 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 21926 </svg> 21927 </div> 21928 </div> 21929 </div> 21930 21931 21932 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245704"> 21933 21934 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 21935 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 21936 21937 21938 21939 21940 21941 21942 <!-- Cesta de Compras --> 21943 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 21944 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 21945 </svg> 21946 21947 21948 21949 Comprar 21950 21951 21952 </button> 21953 <!-- </form> --> 21954 21955 </div> 21956 21957</div> 21958 21959 21960 </div> 21961 21962 </div> 21963 21964 21965</div> 21966
21967<script> 21968(function (window, document) { 21969 'use strict'; 21970 21971 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 21972 21973 if (window[GLOBAL_KEY]) { 21974 return; 21975 } 21976 21977 if (!window.Map || !window.WeakMap || !window.Promise) { 21978 return; 21979 } 21980 21981 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 21982 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 21983 '#vitrine-personalizada .product[data-id]'; 21984 var BADGE_CLASS = 'farmacam-prescription-badge'; 21985 var HOST_CLASS = 'farmacam-prescription-badge-host'; 21986 var MAX_CONCURRENT_REQUESTS = 6; 21987 var REQUEST_TIMEOUT_MS = 12000; 21988 21989 var rules = { 21990 '294': { 21991 level: '294', 21992 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 21993 }, 21994 '296': { 21995 level: '296', 21996 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 21997 }, 21998 '298': { 21999 level: '298', 22000 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 22001 } 22002 }; 22003 22004 var cache = new Map(); 22005 var pending = new Map(); 22006 var cardStates = new WeakMap(); 22007 var queue = []; 22008 var activeRequests = 0; 22009 var trayAjaxHooked = false; 22010 22011 function injectStyles() { 22012 if (document.getElementById('farmacam-prescription-cards-style')) { 22013 return; 22014 } 22015 22016 var style = document.createElement('style'); 22017 style.id = 'farmacam-prescription-cards-style'; 22018 style.textContent = [ 22019 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 22020 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 22021 'position:absolute!important;', 22022 'top:52px!important;', 22023 'left:10px!important;', 22024 'z-index:999!important;', 22025 'display:block!important;', 22026 'max-width:calc(100% - 20px)!important;', 22027 'box-sizing:border-box!important;', 22028 'padding:8px 12px!important;', 22029 'color:#fff!important;', 22030 'font-family:inherit!important;', 22031 'font-size:13px!important;', 22032 'font-weight:900!important;', 22033 'line-height:1.15!important;', 22034 'text-align:center!important;', 22035 'text-transform:uppercase!important;', 22036 'letter-spacing:.3px!important;', 22037 'white-space:normal!important;', 22038 'overflow-wrap:break-word!important;', 22039 'border-radius:3px!important;', 22040 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 22041 'pointer-events:none!important;', 22042 '}', 22043 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 22044 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 22045 'background:#d70008!important;', 22046 '}', 22047 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 22048 'background:#000!important;', 22049 '}', 22050 '@media (max-width:767px){', 22051 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 22052 'top:42px!important;', 22053 'left:6px!important;', 22054 'max-width:calc(100% - 12px)!important;', 22055 'padding:6px 8px!important;', 22056 'font-size:10px!important;', 22057 '}', 22058 '}' 22059 ].join(''); 22060 22061 (document.head || document.documentElement).appendChild(style); 22062 } 22063 22064 function normalizeProductId(value) { 22065 var id = String(value == null ? '' : value).trim(); 22066 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 22067 } 22068 22069 function classifyRelatedCategories(relatedCategories) { 22070 var found = { 22071 '292': false, 22072 '294': false, 22073 '296': false, 22074 '298': false 22075 }; 22076 22077 function inspect(value, depth) { 22078 var index; 22079 var normalized; 22080 22081 if (value == null || depth > 8) { 22082 return; 22083 } 22084 22085 if (Array.isArray(value)) { 22086 for (index = 0; index < value.length; index += 1) { 22087 inspect(value[index], depth + 1); 22088 } 22089 return; 22090 } 22091 22092 if (typeof value === 'object') { 22093 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 22094 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 22095 inspect(value.id, depth + 1); 22096 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 22097 inspect(value.category_id, depth + 1); 22098 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 22099 inspect(value.Category, depth + 1); 22100 } 22101 return; 22102 } 22103 22104 if (typeof value !== 'string' && typeof value !== 'number') { 22105 return; 22106 } 22107 normalized = normalizeProductId(value); 22108 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 22109 found[normalized] = true; 22110 } 22111 } 22112 22113 inspect(relatedCategories, 0); 22114 22115 if (found['298']) { 22116 return rules['298']; 22117 } 22118 if (found['296']) { 22119 return rules['296']; 22120 } 22121 if (found['294']) { 22122 return rules['294']; 22123 } 22124 22125 // 292 e qualquer classificacao desconhecida ficam sem tarja. 22126 return null; 22127 } 22128 22129 function ruleFromPayload(payload, productId) { 22130 var product = payload && payload.Product; 22131 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 22132 return null; 22133 } 22134 return classifyRelatedCategories(product && product.related_categories); 22135 } 22136 22137 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 22138 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 22139 function attachTrayAjaxCache() { 22140 var jq = window.jQuery; 22141 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 22142 return; 22143 } 22144
22145 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 22146 var url; 22147 var match; 22148 var productId; 22149 var payload; 22150 try { 22151 url = new URL(settings.url, window.location.href); 22152 if (url.origin !== window.location.origin) { 22153 return; 22154 } 22155 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 22156 if (!match) { 22157 return; 22158 } 22159 productId = normalizeProductId(match[1]); 22160 if (!cache.has(productId) && !pending.has(productId)) { 22161 payload = data || xhr.responseJSON; 22162 if (typeof payload === 'string') { 22163 payload = JSON.parse(payload); 22164 } 22165 if (!payload || !payload.Product || 22166 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 22167 return; 22168 } 22169 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 22170 return; 22171 } 22172 cache.set(productId, ruleFromPayload(payload, productId)); 22173 } 22174 } catch (error) { 22175 // Respostas de outras integracoes nao interferem nas tarjas. 22176 } 22177 }); 22178 22179 trayAjaxHooked = true; 22180 document.removeEventListener('load', onTrayScriptLoad, true); 22181 } 22182 22183 function onTrayScriptLoad(event) { 22184 if (event.target && event.target.tagName === 'SCRIPT') { 22185 attachTrayAjaxCache(); 22186 } 22187 } 22188 22189 function requestRule(productId) { 22190 var controller = null; 22191 var timeoutId = null; 22192 var options = { 22193 credentials: 'same-origin', 22194 headers: { 22195 'Accept': 'application/json' 22196 } 22197 }; 22198 var request; 22199 22200 if (typeof window.fetch !== 'function') { 22201 return Promise.resolve(null); 22202 } 22203 22204 if (typeof window.AbortController === 'function') { 22205 controller = new window.AbortController(); 22206 options.signal = controller.signal; 22207 timeoutId = window.setTimeout(function () { 22208 controller.abort(); 22209 }, REQUEST_TIMEOUT_MS); 22210 } 22211 22212 try { 22213 request = window.fetch( 22214 '/web_api/products/' + encodeURIComponent(productId), 22215 options 22216 ); 22217 } catch (error) { 22218 if (timeoutId !== null) { 22219 window.clearTimeout(timeoutId); 22220 } 22221 return Promise.resolve(null); 22222 } 22223 22224 return request.then(function (response) { 22225 if (!response.ok) { 22226 throw new Error('HTTP ' + response.status); 22227 } 22228 return response.json(); 22229 }).then(function (payload) { 22230 return ruleFromPayload(payload, productId); 22231 }).then(function (rule) { 22232 if (timeoutId !== null) { 22233 window.clearTimeout(timeoutId); 22234 } 22235 return rule; 22236 }, function () { 22237 if (timeoutId !== null) { 22238 window.clearTimeout(timeoutId); 22239 } 22240 22241 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 22242 return null; 22243 }); 22244 } 22245 22246 function finishJob(job, rule) { 22247 cache.set(job.productId, rule); 22248 pending.delete(job.productId); 22249 activeRequests -= 1; 22250 job.resolve(rule); 22251 pumpQueue(); 22252 } 22253 22254 function pumpQueue() { 22255 var job; 22256 22257 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 22258 job = queue.shift(); 22259 activeRequests += 1; 22260 22261 (function (currentJob) { 22262 requestRule(currentJob.productId).then(function (rule) { 22263 finishJob(currentJob, rule); 22264 }, function () { 22265 finishJob(currentJob, null); 22266 }); 22267 }(job)); 22268 } 22269 } 22270 22271 function getRule(productId) { 22272 var resolver; 22273 var promise; 22274 22275 if (cache.has(productId)) { 22276 return Promise.resolve(cache.get(productId)); 22277 } 22278 22279 if (pending.has(productId)) { 22280 return pending.get(productId); 22281 } 22282 22283 promise = new Promise(function (resolve) { 22284 resolver = resolve; 22285 }); 22286 22287 pending.set(productId, promise); 22288 queue.push({ 22289 productId: productId, 22290 resolve: resolver 22291 }); 22292 pumpQueue(); 22293 22294 return promise; 22295 } 22296 22297 function findBadge(card) { 22298 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 22299 } 22300 22301 function clearBadge(card) { 22302 var badge = findBadge(card); 22303 var image = card.querySelector('.product-header > .w-100 > .image'); 22304 22305 if (badge && badge.parentNode) { 22306 badge.parentNode.removeChild(badge); 22307 } 22308 22309 if (image) { 22310 image.classList.remove(HOST_CLASS); 22311 } 22312 22313 card.removeAttribute('data-farmacam-prescription-level'); 22314 } 22315 22316 function applyBadge(card, productId, rule) { 22317 var image; 22318 var badge; 22319 22320 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 22321 return false;
22322 } 22323 22324 clearBadge(card); 22325 22326 if (!rule) { 22327 return true; 22328 } 22329 22330 image = card.querySelector('.product-header > .w-100 > .image'); 22331 if (!image) { 22332 return false; 22333 } 22334 22335 badge = document.createElement('span'); 22336 badge.className = BADGE_CLASS; 22337 badge.setAttribute('data-farmacam-generated', 'true'); 22338 badge.setAttribute('data-farmacam-prescription-level', rule.level); 22339 badge.setAttribute('role', 'note'); 22340 badge.textContent = rule.text; 22341 22342 image.classList.add(HOST_CLASS); 22343 image.insertBefore(badge, image.firstChild); 22344 card.setAttribute('data-farmacam-prescription-level', rule.level); 22345 22346 return true; 22347 } 22348 22349 function processCard(card) { 22350 var productId; 22351 var previousState; 22352 var currentState; 22353 22354 if (!card || card.nodeType !== 1) { 22355 return; 22356 } 22357 22358 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 22359 return; 22360 } 22361 22362 productId = normalizeProductId(card.getAttribute('data-id')); 22363 previousState = cardStates.get(card); 22364 22365 if (!productId) { 22366 clearBadge(card); 22367 cardStates.delete(card); 22368 return; 22369 } 22370 22371 if ( 22372 previousState && 22373 previousState.productId === productId && 22374 previousState.status === 'loading' 22375 ) { 22376 return; 22377 } 22378 22379 if ( 22380 previousState && 22381 previousState.productId === productId && 22382 previousState.status === 'processed' 22383 ) { 22384 if (!previousState.rule || findBadge(card)) { 22385 return; 22386 } 22387 } 22388 22389 if (!previousState || previousState.productId !== productId) { 22390 clearBadge(card); 22391 } 22392 22393 currentState = { 22394 productId: productId, 22395 status: 'loading', 22396 rule: null 22397 }; 22398 cardStates.set(card, currentState); 22399 22400 getRule(productId).then(function (rule) { 22401 var applied; 22402 22403 if ( 22404 cardStates.get(card) !== currentState || 22405 normalizeProductId(card.getAttribute('data-id')) !== productId 22406 ) { 22407 return; 22408 } 22409 22410 applied = applyBadge(card, productId, rule); 22411 currentState.rule = rule; 22412 currentState.status = applied ? 'processed' : 'waiting-image'; 22413 }); 22414 } 22415 22416 function scan(root) { 22417 var cards; 22418 var index; 22419 22420 if (!root) { 22421 return; 22422 } 22423 22424 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 22425 processCard(root); 22426 } 22427 22428 if (!root.querySelectorAll) { 22429 return; 22430 } 22431 22432 cards = root.querySelectorAll(CARD_SELECTOR); 22433 for (index = 0; index < cards.length; index += 1) { 22434 processCard(cards[index]); 22435 } 22436 } 22437 22438 function startObserver() { 22439 var observer; 22440 22441 if (!window.MutationObserver || !document.documentElement) { 22442 return; 22443 } 22444 22445 observer = new MutationObserver(function (mutations) { 22446 var mutationIndex; 22447 var nodeIndex; 22448 var mutation; 22449 var node; 22450 var ownerCard; 22451 22452 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 22453 mutation = mutations[mutationIndex]; 22454 22455 if (mutation.type === 'attributes') { 22456 processCard(mutation.target); 22457 continue; 22458 } 22459 22460 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 22461 node = mutation.addedNodes[nodeIndex]; 22462 if (node.nodeType !== 1) { 22463 continue; 22464 } 22465 22466 scan(node); 22467 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 22468 if (ownerCard) { 22469 processCard(ownerCard); 22470 } 22471 } 22472 } 22473 }); 22474 22475 observer.observe(document.documentElement, { 22476 childList: true, 22477 subtree: true, 22478 attributes: true, 22479 attributeFilter: ['data-id'] 22480 }); 22481 22482 window[GLOBAL_KEY].observer = observer; 22483 } 22484 22485 window[GLOBAL_KEY] = { 22486 version: '1.1.0', 22487 cache: cache, 22488 pending: pending, 22489 cardStates: cardStates, 22490 scan: scan, 22491 processCard: processCard, 22492 observer: null 22493 }; 22494 22495 document.addEventListener('load', onTrayScriptLoad, true); 22496 attachTrayAjaxCache(); 22497 injectStyles(); 22498 scan(document); 22499 startObserver(); 22500 22501 if (document.readyState === 'loading') { 22502 document.addEventListener('DOMContentLoaded', function () { 22503 attachTrayAjaxCache(); 22504 scan(document); 22505 }); 22506 } 22507}(window, document)); 22508</script>
22508 22509 </div> 22510 </div> 22511 <div class="swiper-button-prev"></div> 22512 <div class="swiper-button-next"></div> 22513 <div class="swiper-pagination"></div> 22514 </div> 22515 22516 </div> 22517 22518 22519 22520 </div> 22521</div> 22522 22523 22524 22525 22526 22527 <div class="vitrine-banners"> 22528 <div class="container box-banners mt-0"> 22529 <a title="Banner Vitrine" href="emagrecimento"> 22530 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/SEGUNDA-VITRINE.png?40911a9f4d7a99b6eef6b4ae366be082" class="lazyload" alt="Banner Vitrine"> 22531 </a> 22532 22533 </div> 22534 </div> 22535 22536 22537 22538 22539 22540 22541 22542 22543 22544 22545 22546 22547<div class="section-showcase "> 22548 <div class="container"> 22549 22550 <div class="section-header"> 22551 <h2 class="title-section"> 22552 22553 22554Estes produtos estão com frete grátis! </h2> 22555 22556 <div class="showcase-line"></div> 22557 22558 </div> 22559 22560 <div id="showcase3" class="list-product swiper showcase-slide loop-infinito"> 22561 22562 22563 22564 <div class="swiper-container"> 22565 <div class="swiper-wrapper"> 22566 22567 <div 22568 class="swiper-slide fixWidthBoxProduct item"> 22569 22570 22571 22572 22573<div class="product animate open_cart" 22574 data-id="125242908" 22575 data-farmacam-related-categories="," 22576 data-ga4-id="125242908" 22577 data-ga4-name="Kit Natural Emagrecimento com Treino - Com duração de 90 dias" 22578 data-ga4-price="539.00" 22579 data-ga4-brand="Farmacam" 22580 data-ga4-category="Tipo de Produto;Manipulados;" 22581 > 22582 22583 <div class="product-header"> 22584 22585 <div class="w-100"> 22586 22587 22588 22589 22590 22591 22592 22593 <div class="product-tags-circle"> 22594 22595 <div class="tag-circle discount"> 22596 <span>Frete Grátis</span> 22597 </div> 22598 22599 22600 22601 </div> 22602 22603 22604 22605 <div class="product-tags has-free-shipping-tag" data-tags-count="0"> 22606 22607 22608 22609 22610 22611 </div> 22612 22613 22614 22615 <div class="image "> 22616 22617 <a title="Kit Natural Emagrecimento com Treino - Com duração de 90 dias" href="https://www.farmacam.com.br/kit-natural-emagrecimento-com-treino-com-duracao-de-90-dias" class="space-image"> 22618 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/kit_natural_emagrecimento_com_treino_com_duracao_de_90_dias_125242908_1_eae9e0561720e70c5f8c608734238774.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/kit_natural_emagrecimento_com_treino_com_duracao_de_90_dias_125242908_1_eae9e0561720e70c5f8c608734238774.png" alt="Kit Natural Emagrecimento com Treino - Com duração de 90 dias"> 22619 </a> 22620 22621 </div> 22622 22623 22624 22625 22626 22627 </div> 22628 22629 </div> 22630 22631 <div class="product-body"> 22632 22633 <a title="Kit Natural Emagrecimento com Treino - Com duração de 90 dias" class="product-info" href="https://www.farmacam.com.br/kit-natural-emagrecimento-com-treino-com-duracao-de-90-dias"> 22634 22635 <div class="product-info-dados"> 22636 22637 22638 22639 22640 22641 22642 <div class="product-name"> 22643 Kit Natural Emagrecimento com Treino - Com duração de 90 dias 22644 </div> 22645 22646 22647 22648 <div class="product-price"> 22649 22650 22651 22652 22653 22654 22655<div class="price display-cash"> 22656 22657 22658 <span class="current-price "> 22659 R$ 539,00 22660 22661 </span> 22662
22663 <span class="product-installments"> 22664 22665 </span> 22666 22667</div> 22668 </div> 22669 22670 </div> 22671 22672 </a> 22673 22674 </div> 22675 22676 22677 <div class="product-footer"> 22678 22679 22680 <div class="w-100"> 22681 22682 22683 22684<div class="product-rating-catalog"> 22685 22686 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 22687 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 22688 </svg> 22689 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 22690 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 22691 </svg> 22692 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 22693 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 22694 </svg> 22695 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 22696 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 22697 </svg> 22698 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 22699 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 22700 </svg> 22701 22702 22703 <a title="Ver avaliações de Kit Natural Emagrecimento com Treino - Com duração de 90 dias" href="https://www.farmacam.com.br/kit-natural-emagrecimento-com-treino-com-duracao-de-90-dias#
22703comments" class="total"> 22704 Seja o primeiro 22705 </a> 22706 22707 </div> 22708 22709 22710 22711 <div class="config-variacoes-compra"> 22712 22713 22714 22715 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125242908"> 22716 <input type="hidden" name="product_id" value="125242908"> 22717 <input type="hidden" name="without_stock_sale" value=""> 22718 22719 <input type="hidden" name="estoque" value="10000"> 22720 22721 22722 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 22723 <div class="alerta-estoque"></div> 22724 <div class="alerta-adicionado"></div> 22725 22726 <div class="acao-compra"> 22727 22728 <div class="quantidade-box"> 22729 <div class="quantidade-box-input"> 22730 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-estoque="10000" /> 22731 </div> 22732 <div class="quantidade-box-controles"> 22733 <div class="quantidade-box-controles-itens" data-item="mais"> 22734 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 22735 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 22736 </svg> 22737 </div> 22738 <div class="quantidade-box-controles-itens" data-item="menus"> 22739 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 22740 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 22741 </svg> 22742 </div> 22743 </div> 22744 </div> 22745 22746 22747 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125242908"> 22748 22749 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="" style="width: 100%;"> --> 22750 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 22751 22752 22753 22754 22755 22756 22757 <!-- Cesta de Compras --> 22758 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 22759 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 22760 </svg> 22761 22762 22763 22764 Comprar 22765 22766 22767 </button> 22768 <!-- </form> --> 22769 22770 </div> 22771 22772</div> 22773 22774 22775 </div> 22776 22777 </div> 22778 22779 22780</div> 22781
22782<script> 22783(function (window, document) { 22784 'use strict'; 22785 22786 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 22787 22788 if (window[GLOBAL_KEY]) { 22789 return; 22790 } 22791 22792 if (!window.Map || !window.WeakMap || !window.Promise) { 22793 return; 22794 } 22795 22796 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 22797 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 22798 '#vitrine-personalizada .product[data-id]'; 22799 var BADGE_CLASS = 'farmacam-prescription-badge'; 22800 var HOST_CLASS = 'farmacam-prescription-badge-host'; 22801 var MAX_CONCURRENT_REQUESTS = 6; 22802 var REQUEST_TIMEOUT_MS = 12000; 22803 22804 var rules = { 22805 '294': { 22806 level: '294', 22807 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 22808 }, 22809 '296': { 22810 level: '296', 22811 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 22812 }, 22813 '298': { 22814 level: '298', 22815 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 22816 } 22817 }; 22818 22819 var cache = new Map(); 22820 var pending = new Map(); 22821 var cardStates = new WeakMap(); 22822 var queue = []; 22823 var activeRequests = 0; 22824 var trayAjaxHooked = false; 22825 22826 function injectStyles() { 22827 if (document.getElementById('farmacam-prescription-cards-style')) { 22828 return; 22829 } 22830 22831 var style = document.createElement('style'); 22832 style.id = 'farmacam-prescription-cards-style'; 22833 style.textContent = [ 22834 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 22835 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 22836 'position:absolute!important;', 22837 'top:52px!important;', 22838 'left:10px!important;', 22839 'z-index:999!important;', 22840 'display:block!important;', 22841 'max-width:calc(100% - 20px)!important;', 22842 'box-sizing:border-box!important;', 22843 'padding:8px 12px!important;', 22844 'color:#fff!important;', 22845 'font-family:inherit!important;', 22846 'font-size:13px!important;', 22847 'font-weight:900!important;', 22848 'line-height:1.15!important;', 22849 'text-align:center!important;', 22850 'text-transform:uppercase!important;', 22851 'letter-spacing:.3px!important;', 22852 'white-space:normal!important;', 22853 'overflow-wrap:break-word!important;', 22854 'border-radius:3px!important;', 22855 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 22856 'pointer-events:none!important;', 22857 '}', 22858 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 22859 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 22860 'background:#d70008!important;', 22861 '}', 22862 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 22863 'background:#000!important;', 22864 '}', 22865 '@media (max-width:767px){', 22866 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 22867 'top:42px!important;', 22868 'left:6px!important;', 22869 'max-width:calc(100% - 12px)!important;', 22870 'padding:6px 8px!important;', 22871 'font-size:10px!important;', 22872 '}', 22873 '}' 22874 ].join(''); 22875 22876 (document.head || document.documentElement).appendChild(style); 22877 } 22878 22879 function normalizeProductId(value) { 22880 var id = String(value == null ? '' : value).trim(); 22881 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 22882 } 22883 22884 function classifyRelatedCategories(relatedCategories) { 22885 var found = { 22886 '292': false, 22887 '294': false, 22888 '296': false, 22889 '298': false 22890 }; 22891 22892 function inspect(value, depth) { 22893 var index; 22894 var normalized; 22895 22896 if (value == null || depth > 8) { 22897 return; 22898 } 22899 22900 if (Array.isArray(value)) { 22901 for (index = 0; index < value.length; index += 1) { 22902 inspect(value[index], depth + 1); 22903 } 22904 return; 22905 } 22906 22907 if (typeof value === 'object') { 22908 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 22909 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 22910 inspect(value.id, depth + 1); 22911 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 22912 inspect(value.category_id, depth + 1); 22913 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 22914 inspect(value.Category, depth + 1); 22915 } 22916 return; 22917 } 22918 22919 if (typeof value !== 'string' && typeof value !== 'number') { 22920 return; 22921 } 22922 normalized = normalizeProductId(value); 22923 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 22924 found[normalized] = true; 22925 } 22926 } 22927 22928 inspect(relatedCategories, 0); 22929 22930 if (found['298']) { 22931 return rules['298']; 22932 } 22933 if (found['296']) { 22934 return rules['296']; 22935 } 22936 if (found['294']) { 22937 return rules['294']; 22938 } 22939 22940 // 292 e qualquer classificacao desconhecida ficam sem tarja. 22941 return null; 22942 } 22943 22944 function ruleFromPayload(payload, productId) { 22945 var product = payload && payload.Product; 22946 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 22947 return null; 22948 } 22949 return classifyRelatedCategories(product && product.related_categories); 22950 } 22951 22952 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 22953 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 22954 function attachTrayAjaxCache() { 22955 var jq = window.jQuery; 22956 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 22957 return; 22958 } 22959
22960 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 22961 var url; 22962 var match; 22963 var productId; 22964 var payload; 22965 try { 22966 url = new URL(settings.url, window.location.href); 22967 if (url.origin !== window.location.origin) { 22968 return; 22969 } 22970 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 22971 if (!match) { 22972 return; 22973 } 22974 productId = normalizeProductId(match[1]); 22975 if (!cache.has(productId) && !pending.has(productId)) { 22976 payload = data || xhr.responseJSON; 22977 if (typeof payload === 'string') { 22978 payload = JSON.parse(payload); 22979 } 22980 if (!payload || !payload.Product || 22981 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 22982 return; 22983 } 22984 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 22985 return; 22986 } 22987 cache.set(productId, ruleFromPayload(payload, productId)); 22988 } 22989 } catch (error) { 22990 // Respostas de outras integracoes nao interferem nas tarjas. 22991 } 22992 }); 22993 22994 trayAjaxHooked = true; 22995 document.removeEventListener('load', onTrayScriptLoad, true); 22996 } 22997 22998 function onTrayScriptLoad(event) { 22999 if (event.target && event.target.tagName === 'SCRIPT') { 23000 attachTrayAjaxCache(); 23001 } 23002 } 23003 23004 function requestRule(productId) { 23005 var controller = null; 23006 var timeoutId = null; 23007 var options = { 23008 credentials: 'same-origin', 23009 headers: { 23010 'Accept': 'application/json' 23011 } 23012 }; 23013 var request; 23014 23015 if (typeof window.fetch !== 'function') { 23016 return Promise.resolve(null); 23017 } 23018 23019 if (typeof window.AbortController === 'function') { 23020 controller = new window.AbortController(); 23021 options.signal = controller.signal; 23022 timeoutId = window.setTimeout(function () { 23023 controller.abort(); 23024 }, REQUEST_TIMEOUT_MS); 23025 } 23026 23027 try { 23028 request = window.fetch( 23029 '/web_api/products/' + encodeURIComponent(productId), 23030 options 23031 ); 23032 } catch (error) { 23033 if (timeoutId !== null) { 23034 window.clearTimeout(timeoutId); 23035 } 23036 return Promise.resolve(null); 23037 } 23038 23039 return request.then(function (response) { 23040 if (!response.ok) { 23041 throw new Error('HTTP ' + response.status); 23042 } 23043 return response.json(); 23044 }).then(function (payload) { 23045 return ruleFromPayload(payload, productId); 23046 }).then(function (rule) { 23047 if (timeoutId !== null) { 23048 window.clearTimeout(timeoutId); 23049 } 23050 return rule; 23051 }, function () { 23052 if (timeoutId !== null) { 23053 window.clearTimeout(timeoutId); 23054 } 23055 23056 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 23057 return null; 23058 }); 23059 } 23060 23061 function finishJob(job, rule) { 23062 cache.set(job.productId, rule); 23063 pending.delete(job.productId); 23064 activeRequests -= 1; 23065 job.resolve(rule); 23066 pumpQueue(); 23067 } 23068 23069 function pumpQueue() { 23070 var job; 23071 23072 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 23073 job = queue.shift(); 23074 activeRequests += 1; 23075 23076 (function (currentJob) { 23077 requestRule(currentJob.productId).then(function (rule) { 23078 finishJob(currentJob, rule); 23079 }, function () { 23080 finishJob(currentJob, null); 23081 }); 23082 }(job)); 23083 } 23084 } 23085 23086 function getRule(productId) { 23087 var resolver; 23088 var promise; 23089 23090 if (cache.has(productId)) { 23091 return Promise.resolve(cache.get(productId)); 23092 } 23093 23094 if (pending.has(productId)) { 23095 return pending.get(productId); 23096 } 23097 23098 promise = new Promise(function (resolve) { 23099 resolver = resolve; 23100 }); 23101 23102 pending.set(productId, promise); 23103 queue.push({ 23104 productId: productId, 23105 resolve: resolver 23106 }); 23107 pumpQueue(); 23108 23109 return promise; 23110 } 23111 23112 function findBadge(card) { 23113 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 23114 } 23115 23116 function clearBadge(card) { 23117 var badge = findBadge(card); 23118 var image = card.querySelector('.product-header > .w-100 > .image'); 23119 23120 if (badge && badge.parentNode) { 23121 badge.parentNode.removeChild(badge); 23122 } 23123 23124 if (image) { 23125 image.classList.remove(HOST_CLASS); 23126 } 23127 23128 card.removeAttribute('data-farmacam-prescription-level'); 23129 } 23130 23131 function applyBadge(card, productId, rule) { 23132 var image; 23133 var badge; 23134 23135 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 23136 return false;
23137 } 23138 23139 clearBadge(card); 23140 23141 if (!rule) { 23142 return true; 23143 } 23144 23145 image = card.querySelector('.product-header > .w-100 > .image'); 23146 if (!image) { 23147 return false; 23148 } 23149 23150 badge = document.createElement('span'); 23151 badge.className = BADGE_CLASS; 23152 badge.setAttribute('data-farmacam-generated', 'true'); 23153 badge.setAttribute('data-farmacam-prescription-level', rule.level); 23154 badge.setAttribute('role', 'note'); 23155 badge.textContent = rule.text; 23156 23157 image.classList.add(HOST_CLASS); 23158 image.insertBefore(badge, image.firstChild); 23159 card.setAttribute('data-farmacam-prescription-level', rule.level); 23160 23161 return true; 23162 } 23163 23164 function processCard(card) { 23165 var productId; 23166 var previousState; 23167 var currentState; 23168 23169 if (!card || card.nodeType !== 1) { 23170 return; 23171 } 23172 23173 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 23174 return; 23175 } 23176 23177 productId = normalizeProductId(card.getAttribute('data-id')); 23178 previousState = cardStates.get(card); 23179 23180 if (!productId) { 23181 clearBadge(card); 23182 cardStates.delete(card); 23183 return; 23184 } 23185 23186 if ( 23187 previousState && 23188 previousState.productId === productId && 23189 previousState.status === 'loading' 23190 ) { 23191 return; 23192 } 23193 23194 if ( 23195 previousState && 23196 previousState.productId === productId && 23197 previousState.status === 'processed' 23198 ) { 23199 if (!previousState.rule || findBadge(card)) { 23200 return; 23201 } 23202 } 23203 23204 if (!previousState || previousState.productId !== productId) { 23205 clearBadge(card); 23206 } 23207 23208 currentState = { 23209 productId: productId, 23210 status: 'loading', 23211 rule: null 23212 }; 23213 cardStates.set(card, currentState); 23214 23215 getRule(productId).then(function (rule) { 23216 var applied; 23217 23218 if ( 23219 cardStates.get(card) !== currentState || 23220 normalizeProductId(card.getAttribute('data-id')) !== productId 23221 ) { 23222 return; 23223 } 23224 23225 applied = applyBadge(card, productId, rule); 23226 currentState.rule = rule; 23227 currentState.status = applied ? 'processed' : 'waiting-image'; 23228 }); 23229 } 23230 23231 function scan(root) { 23232 var cards; 23233 var index; 23234 23235 if (!root) { 23236 return; 23237 } 23238 23239 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 23240 processCard(root); 23241 } 23242 23243 if (!root.querySelectorAll) { 23244 return; 23245 } 23246 23247 cards = root.querySelectorAll(CARD_SELECTOR); 23248 for (index = 0; index < cards.length; index += 1) { 23249 processCard(cards[index]); 23250 } 23251 } 23252 23253 function startObserver() { 23254 var observer; 23255 23256 if (!window.MutationObserver || !document.documentElement) { 23257 return; 23258 } 23259 23260 observer = new MutationObserver(function (mutations) { 23261 var mutationIndex; 23262 var nodeIndex; 23263 var mutation; 23264 var node; 23265 var ownerCard; 23266 23267 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 23268 mutation = mutations[mutationIndex]; 23269 23270 if (mutation.type === 'attributes') { 23271 processCard(mutation.target); 23272 continue; 23273 } 23274 23275 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 23276 node = mutation.addedNodes[nodeIndex]; 23277 if (node.nodeType !== 1) { 23278 continue; 23279 } 23280 23281 scan(node); 23282 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 23283 if (ownerCard) { 23284 processCard(ownerCard); 23285 } 23286 } 23287 } 23288 }); 23289 23290 observer.observe(document.documentElement, { 23291 childList: true, 23292 subtree: true, 23293 attributes: true, 23294 attributeFilter: ['data-id'] 23295 }); 23296 23297 window[GLOBAL_KEY].observer = observer; 23298 } 23299 23300 window[GLOBAL_KEY] = { 23301 version: '1.1.0', 23302 cache: cache, 23303 pending: pending, 23304 cardStates: cardStates, 23305 scan: scan, 23306 processCard: processCard, 23307 observer: null 23308 }; 23309 23310 document.addEventListener('load', onTrayScriptLoad, true); 23311 attachTrayAjaxCache(); 23312 injectStyles(); 23313 scan(document); 23314 startObserver(); 23315 23316 if (document.readyState === 'loading') { 23317 document.addEventListener('DOMContentLoaded', function () { 23318 attachTrayAjaxCache(); 23319 scan(document); 23320 }); 23321 } 23322}(window, document)); 23323</script>
23323 23324 </div> 23325 <div 23326 class="swiper-slide fixWidthBoxProduct item"> 23327 23328 23329 23330 23331<div class="product animate open_cart" 23332 data-id="125240758" 23333 data-farmacam-related-categories="," 23334 data-ga4-id="125240758" 23335 data-ga4-name="Kit força muscular - Whey protein chocolate + Creatina" 23336 data-ga4-price="501.00" 23337 data-ga4-brand="Farmacam" 23338 data-ga4-category="Tipo de Produto;Manipulados;" 23339 > 23340 23341 <div class="product-header"> 23342 23343 <div class="w-100"> 23344 23345 23346 23347 23348 23349 23350 23351 23352 23353 23354 <div class="image "> 23355 23356 <a title="Kit força muscular - Whey protein chocolate + Creatina" href="https://www.farmacam.com.br/kit-forca-muscular-whey-protein-chocolate-creatina" class="space-image"> 23357 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/kit_forca_muscular_whey_protein_chocolate_creatina_125240758_1_fbe08feaaaaa0f2eadec11cd4af2ca26.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/kit_forca_muscular_whey_protein_chocolate_creatina_125240758_1_fbe08feaaaaa0f2eadec11cd4af2ca26.png" alt="Kit força muscular - Whey protein chocolate + Creatina"> 23358 </a> 23359 23360 </div> 23361 23362 23363 23364 23365 23366 </div> 23367 23368 </div> 23369 23370 <div class="product-body"> 23371 23372 <a title="Kit força muscular - Whey protein chocolate + Creatina" class="product-info" href="https://www.farmacam.com.br/kit-forca-muscular-whey-protein-chocolate-creatina"> 23373 23374 <div class="product-info-dados"> 23375 23376 23377 23378 23379 23380 23381 <div class="product-name"> 23382 Kit força muscular - Whey protein chocolate + Creatina 23383 </div> 23384 23385 23386 23387 <div class="product-price"> 23388 23389 <span class="product-message"> 23390 Esse acabou :( 23391 <span class="notify-me"> 23392 Avise-me quando chegar 23393 <i class="icon icon-arrow-right"></i> 23394 </span> 23395</span> 23396 </div> 23397 23398 </div> 23399 23400 </a> 23401 23402 </div> 23403 23404 23405 <div class="product-footer"> 23406 23407 23408 </div> 23409 23410 23411</div> 23412
23413<script> 23414(function (window, document) { 23415 'use strict'; 23416 23417 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 23418 23419 if (window[GLOBAL_KEY]) { 23420 return; 23421 } 23422 23423 if (!window.Map || !window.WeakMap || !window.Promise) { 23424 return; 23425 } 23426 23427 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 23428 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 23429 '#vitrine-personalizada .product[data-id]'; 23430 var BADGE_CLASS = 'farmacam-prescription-badge'; 23431 var HOST_CLASS = 'farmacam-prescription-badge-host'; 23432 var MAX_CONCURRENT_REQUESTS = 6; 23433 var REQUEST_TIMEOUT_MS = 12000; 23434 23435 var rules = { 23436 '294': { 23437 level: '294', 23438 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 23439 }, 23440 '296': { 23441 level: '296', 23442 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 23443 }, 23444 '298': { 23445 level: '298', 23446 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 23447 } 23448 }; 23449 23450 var cache = new Map(); 23451 var pending = new Map(); 23452 var cardStates = new WeakMap(); 23453 var queue = []; 23454 var activeRequests = 0; 23455 var trayAjaxHooked = false; 23456 23457 function injectStyles() { 23458 if (document.getElementById('farmacam-prescription-cards-style')) { 23459 return; 23460 } 23461 23462 var style = document.createElement('style'); 23463 style.id = 'farmacam-prescription-cards-style'; 23464 style.textContent = [ 23465 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 23466 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 23467 'position:absolute!important;', 23468 'top:52px!important;', 23469 'left:10px!important;', 23470 'z-index:999!important;', 23471 'display:block!important;', 23472 'max-width:calc(100% - 20px)!important;', 23473 'box-sizing:border-box!important;', 23474 'padding:8px 12px!important;', 23475 'color:#fff!important;', 23476 'font-family:inherit!important;', 23477 'font-size:13px!important;', 23478 'font-weight:900!important;', 23479 'line-height:1.15!important;', 23480 'text-align:center!important;', 23481 'text-transform:uppercase!important;', 23482 'letter-spacing:.3px!important;', 23483 'white-space:normal!important;', 23484 'overflow-wrap:break-word!important;', 23485 'border-radius:3px!important;', 23486 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 23487 'pointer-events:none!important;', 23488 '}', 23489 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 23490 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 23491 'background:#d70008!important;', 23492 '}', 23493 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 23494 'background:#000!important;', 23495 '}', 23496 '@media (max-width:767px){', 23497 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 23498 'top:42px!important;', 23499 'left:6px!important;', 23500 'max-width:calc(100% - 12px)!important;', 23501 'padding:6px 8px!important;', 23502 'font-size:10px!important;', 23503 '}', 23504 '}' 23505 ].join(''); 23506 23507 (document.head || document.documentElement).appendChild(style); 23508 } 23509 23510 function normalizeProductId(value) { 23511 var id = String(value == null ? '' : value).trim(); 23512 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 23513 } 23514 23515 function classifyRelatedCategories(relatedCategories) { 23516 var found = { 23517 '292': false, 23518 '294': false, 23519 '296': false, 23520 '298': false 23521 }; 23522 23523 function inspect(value, depth) { 23524 var index; 23525 var normalized; 23526 23527 if (value == null || depth > 8) { 23528 return; 23529 } 23530 23531 if (Array.isArray(value)) { 23532 for (index = 0; index < value.length; index += 1) { 23533 inspect(value[index], depth + 1); 23534 } 23535 return; 23536 } 23537 23538 if (typeof value === 'object') { 23539 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 23540 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 23541 inspect(value.id, depth + 1); 23542 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 23543 inspect(value.category_id, depth + 1); 23544 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 23545 inspect(value.Category, depth + 1); 23546 } 23547 return; 23548 } 23549 23550 if (typeof value !== 'string' && typeof value !== 'number') { 23551 return; 23552 } 23553 normalized = normalizeProductId(value); 23554 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 23555 found[normalized] = true; 23556 } 23557 } 23558 23559 inspect(relatedCategories, 0); 23560 23561 if (found['298']) { 23562 return rules['298']; 23563 } 23564 if (found['296']) { 23565 return rules['296']; 23566 } 23567 if (found['294']) { 23568 return rules['294']; 23569 } 23570 23571 // 292 e qualquer classificacao desconhecida ficam sem tarja. 23572 return null; 23573 } 23574 23575 function ruleFromPayload(payload, productId) { 23576 var product = payload && payload.Product; 23577 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 23578 return null; 23579 } 23580 return classifyRelatedCategories(product && product.related_categories); 23581 } 23582 23583 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 23584 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 23585 function attachTrayAjaxCache() { 23586 var jq = window.jQuery; 23587 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 23588 return; 23589 } 23590
23591 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 23592 var url; 23593 var match; 23594 var productId; 23595 var payload; 23596 try { 23597 url = new URL(settings.url, window.location.href); 23598 if (url.origin !== window.location.origin) { 23599 return; 23600 } 23601 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 23602 if (!match) { 23603 return; 23604 } 23605 productId = normalizeProductId(match[1]); 23606 if (!cache.has(productId) && !pending.has(productId)) { 23607 payload = data || xhr.responseJSON; 23608 if (typeof payload === 'string') { 23609 payload = JSON.parse(payload); 23610 } 23611 if (!payload || !payload.Product || 23612 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 23613 return; 23614 } 23615 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 23616 return; 23617 } 23618 cache.set(productId, ruleFromPayload(payload, productId)); 23619 } 23620 } catch (error) { 23621 // Respostas de outras integracoes nao interferem nas tarjas. 23622 } 23623 }); 23624 23625 trayAjaxHooked = true; 23626 document.removeEventListener('load', onTrayScriptLoad, true); 23627 } 23628 23629 function onTrayScriptLoad(event) { 23630 if (event.target && event.target.tagName === 'SCRIPT') { 23631 attachTrayAjaxCache(); 23632 } 23633 } 23634 23635 function requestRule(productId) { 23636 var controller = null; 23637 var timeoutId = null; 23638 var options = { 23639 credentials: 'same-origin', 23640 headers: { 23641 'Accept': 'application/json' 23642 } 23643 }; 23644 var request; 23645 23646 if (typeof window.fetch !== 'function') { 23647 return Promise.resolve(null); 23648 } 23649 23650 if (typeof window.AbortController === 'function') { 23651 controller = new window.AbortController(); 23652 options.signal = controller.signal; 23653 timeoutId = window.setTimeout(function () { 23654 controller.abort(); 23655 }, REQUEST_TIMEOUT_MS); 23656 } 23657 23658 try { 23659 request = window.fetch( 23660 '/web_api/products/' + encodeURIComponent(productId), 23661 options 23662 ); 23663 } catch (error) { 23664 if (timeoutId !== null) { 23665 window.clearTimeout(timeoutId); 23666 } 23667 return Promise.resolve(null); 23668 } 23669 23670 return request.then(function (response) { 23671 if (!response.ok) { 23672 throw new Error('HTTP ' + response.status); 23673 } 23674 return response.json(); 23675 }).then(function (payload) { 23676 return ruleFromPayload(payload, productId); 23677 }).then(function (rule) { 23678 if (timeoutId !== null) { 23679 window.clearTimeout(timeoutId); 23680 } 23681 return rule; 23682 }, function () { 23683 if (timeoutId !== null) { 23684 window.clearTimeout(timeoutId); 23685 } 23686 23687 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 23688 return null; 23689 }); 23690 } 23691 23692 function finishJob(job, rule) { 23693 cache.set(job.productId, rule); 23694 pending.delete(job.productId); 23695 activeRequests -= 1; 23696 job.resolve(rule); 23697 pumpQueue(); 23698 } 23699 23700 function pumpQueue() { 23701 var job; 23702 23703 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 23704 job = queue.shift(); 23705 activeRequests += 1; 23706 23707 (function (currentJob) { 23708 requestRule(currentJob.productId).then(function (rule) { 23709 finishJob(currentJob, rule); 23710 }, function () { 23711 finishJob(currentJob, null); 23712 }); 23713 }(job)); 23714 } 23715 } 23716 23717 function getRule(productId) { 23718 var resolver; 23719 var promise; 23720 23721 if (cache.has(productId)) { 23722 return Promise.resolve(cache.get(productId)); 23723 } 23724 23725 if (pending.has(productId)) { 23726 return pending.get(productId); 23727 } 23728 23729 promise = new Promise(function (resolve) { 23730 resolver = resolve; 23731 }); 23732 23733 pending.set(productId, promise); 23734 queue.push({ 23735 productId: productId, 23736 resolve: resolver 23737 }); 23738 pumpQueue(); 23739 23740 return promise; 23741 } 23742 23743 function findBadge(card) { 23744 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 23745 } 23746 23747 function clearBadge(card) { 23748 var badge = findBadge(card); 23749 var image = card.querySelector('.product-header > .w-100 > .image'); 23750 23751 if (badge && badge.parentNode) { 23752 badge.parentNode.removeChild(badge); 23753 } 23754 23755 if (image) { 23756 image.classList.remove(HOST_CLASS); 23757 } 23758 23759 card.removeAttribute('data-farmacam-prescription-level'); 23760 } 23761 23762 function applyBadge(card, productId, rule) { 23763 var image; 23764 var badge; 23765 23766 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 23767 return false;
23768 } 23769 23770 clearBadge(card); 23771 23772 if (!rule) { 23773 return true; 23774 } 23775 23776 image = card.querySelector('.product-header > .w-100 > .image'); 23777 if (!image) { 23778 return false; 23779 } 23780 23781 badge = document.createElement('span'); 23782 badge.className = BADGE_CLASS; 23783 badge.setAttribute('data-farmacam-generated', 'true'); 23784 badge.setAttribute('data-farmacam-prescription-level', rule.level); 23785 badge.setAttribute('role', 'note'); 23786 badge.textContent = rule.text; 23787 23788 image.classList.add(HOST_CLASS); 23789 image.insertBefore(badge, image.firstChild); 23790 card.setAttribute('data-farmacam-prescription-level', rule.level); 23791 23792 return true; 23793 } 23794 23795 function processCard(card) { 23796 var productId; 23797 var previousState; 23798 var currentState; 23799 23800 if (!card || card.nodeType !== 1) { 23801 return; 23802 } 23803 23804 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 23805 return; 23806 } 23807 23808 productId = normalizeProductId(card.getAttribute('data-id')); 23809 previousState = cardStates.get(card); 23810 23811 if (!productId) { 23812 clearBadge(card); 23813 cardStates.delete(card); 23814 return; 23815 } 23816 23817 if ( 23818 previousState && 23819 previousState.productId === productId && 23820 previousState.status === 'loading' 23821 ) { 23822 return; 23823 } 23824 23825 if ( 23826 previousState && 23827 previousState.productId === productId && 23828 previousState.status === 'processed' 23829 ) { 23830 if (!previousState.rule || findBadge(card)) { 23831 return; 23832 } 23833 } 23834 23835 if (!previousState || previousState.productId !== productId) { 23836 clearBadge(card); 23837 } 23838 23839 currentState = { 23840 productId: productId, 23841 status: 'loading', 23842 rule: null 23843 }; 23844 cardStates.set(card, currentState); 23845 23846 getRule(productId).then(function (rule) { 23847 var applied; 23848 23849 if ( 23850 cardStates.get(card) !== currentState || 23851 normalizeProductId(card.getAttribute('data-id')) !== productId 23852 ) { 23853 return; 23854 } 23855 23856 applied = applyBadge(card, productId, rule); 23857 currentState.rule = rule; 23858 currentState.status = applied ? 'processed' : 'waiting-image'; 23859 }); 23860 } 23861 23862 function scan(root) { 23863 var cards; 23864 var index; 23865 23866 if (!root) { 23867 return; 23868 } 23869 23870 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 23871 processCard(root); 23872 } 23873 23874 if (!root.querySelectorAll) { 23875 return; 23876 } 23877 23878 cards = root.querySelectorAll(CARD_SELECTOR); 23879 for (index = 0; index < cards.length; index += 1) { 23880 processCard(cards[index]); 23881 } 23882 } 23883 23884 function startObserver() { 23885 var observer; 23886 23887 if (!window.MutationObserver || !document.documentElement) { 23888 return; 23889 } 23890 23891 observer = new MutationObserver(function (mutations) { 23892 var mutationIndex; 23893 var nodeIndex; 23894 var mutation; 23895 var node; 23896 var ownerCard; 23897 23898 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 23899 mutation = mutations[mutationIndex]; 23900 23901 if (mutation.type === 'attributes') { 23902 processCard(mutation.target); 23903 continue; 23904 } 23905 23906 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 23907 node = mutation.addedNodes[nodeIndex]; 23908 if (node.nodeType !== 1) { 23909 continue; 23910 } 23911 23912 scan(node); 23913 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 23914 if (ownerCard) { 23915 processCard(ownerCard); 23916 } 23917 } 23918 } 23919 }); 23920 23921 observer.observe(document.documentElement, { 23922 childList: true, 23923 subtree: true, 23924 attributes: true, 23925 attributeFilter: ['data-id'] 23926 }); 23927 23928 window[GLOBAL_KEY].observer = observer; 23929 } 23930 23931 window[GLOBAL_KEY] = { 23932 version: '1.1.0', 23933 cache: cache, 23934 pending: pending, 23935 cardStates: cardStates, 23936 scan: scan, 23937 processCard: processCard, 23938 observer: null 23939 }; 23940 23941 document.addEventListener('load', onTrayScriptLoad, true); 23942 attachTrayAjaxCache(); 23943 injectStyles(); 23944 scan(document); 23945 startObserver(); 23946 23947 if (document.readyState === 'loading') { 23948 document.addEventListener('DOMContentLoaded', function () { 23949 attachTrayAjaxCache(); 23950 scan(document); 23951 }); 23952 } 23953}(window, document)); 23954</script>
23954 23955 </div> 23956 <div 23957 class="swiper-slide fixWidthBoxProduct item"> 23958 23959 23960 23961 23962<div class="product animate open_cart" 23963 data-id="125237501" 23964 data-farmacam-related-categories="," 23965 data-ga4-id="125237501" 23966 data-ga4-name="Fórmula Manipulada para Desempenho Físico X" 23967 data-ga4-price="501.00" 23968 data-ga4-brand="Farmacam" 23969 data-ga4-category="Tipo de Produto;Manipulados;" 23970 > 23971 23972 <div class="product-header"> 23973 23974 <div class="w-100"> 23975 23976 23977 23978 23979 23980 23981 23982 <div class="product-tags-circle"> 23983 23984 <div class="tag-circle discount"> 23985 <span>Frete Grátis</span> 23986 </div> 23987 23988 23989 23990 </div> 23991 23992 23993 23994 <div class="product-tags has-free-shipping-tag" data-tags-count="0"> 23995 23996 23997 23998 23999 24000 </div> 24001 24002 24003 24004 <div class="image "> 24005 24006 <a title="Fórmula Manipulada para Desempenho Físico X" href="https://www.farmacam.com.br/formula-manipulada-para-desempenho-fisico-x" class="space-image"> 24007 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/formula_manipulada_para_desempenho_fisico_x_125237501_1_031c7146b1e4202f9733aa199e826d7f.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/formula_manipulada_para_desempenho_fisico_x_125237501_1_031c7146b1e4202f9733aa199e826d7f.png" alt="Fórmula Manipulada para Desempenho Físico X"> 24008 </a> 24009 24010 </div> 24011 24012 24013 24014 24015 24016 </div> 24017 24018 </div> 24019 24020 <div class="product-body"> 24021 24022 <a title="Fórmula Manipulada para Desempenho Físico X" class="product-info" href="https://www.farmacam.com.br/formula-manipulada-para-desempenho-fisico-x"> 24023 24024 <div class="product-info-dados"> 24025 24026 24027 24028 24029 24030 24031 <div class="product-name"> 24032 Fórmula Manipulada para Desempenho Físico X 24033 </div> 24034 24035 24036 24037 <div class="product-price"> 24038 24039 24040 24041 24042 24043 <span class="product-has-variants text-center"> 24044 A partir de 24045 </span> 24046 24047<div class="price display-cash"> 24048 24049 24050 <span class="current-price "> 24051 R$ 501,00 24052 24053 </span> 24054 24055 <span class="product-installments"> 24056 24057 </span> 24058 24059</div> 24060 </div> 24061 24062 </div> 24063 24064 </a> 24065 24066 </div> 24067 24068 24069 <div class="product-footer"> 24070 24071 24072 <div class="w-100"> 24073 24074 24075 24076<div class="product-rating-catalog"> 24077 24078 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 24079 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 24080 </svg> 24081 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 24082 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 24083 </svg> 24084 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 24085 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 24086 </svg> 24087 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 24088 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 24089 </svg> 24090 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 24091 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 24092 </svg> 24093 24094 24095 <a title="Ver avaliações de Fórmula Manipulada para Desempenho Físico X" href="https://www.farmacam.com.br/formula-manipulada-para-desempenho-fisico-x#comments" class="total"> 24096 Seja o primeiro 24097 </a> 24098 24099 </div> 24100 24101 24102 24103 <div class="config-variacoes-compra"> 24104 24105 24106 24107 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125237501"> 24108 <input type="hidden" name="product_id" value="125237501"> 24109 <input type="hidden" name="without_stock_sale" value=""> 24110 24111 <input type="hidden" name="variacao" id="selectedVariant" value=""> 24112 <input type="hidden" name="estoque" value=""> 24113 24114 24115 24116 <ul class="paleta-cores"> 24117 24118 24119 24120 24121 24122 24123 24124 24125 24126 24127 24128 24129 24130 24131 24132 24133 24134 24135 24136 24137 24138 24139 24140 24141 24142 24143 24144 24145 24146 24147 24148 24149 24150 24151 24152 24153 24154 24155 24156 24157 24158 24159 24160 24161 24162 24163 24164 24165 24166 24167 24168 24169 24170 24171 24172 24173 24174 24175 24176 24177 24178 24179 24180 24181 24182 24183 24184 24185 24186 24187 24188 24189 24190 24191 24192 24193 24194 24195 24196 24197 24198 24199 24200 24201 24202 24203 24204 24205 24206 24207 24208 24209 24210 24211 24212 24213 24214 24215 24216 24217 24218 24219 24220 24221 24222 24223 24224 24225 24226 24227 24228 24229 24230 24231 24232 24233 24234 24235 24236 24237 24238 24239 24240 24241 24242 24243 24244 24245 24246 24247 24248 24249 24250 24251 24252 24253 24254 24255 24256 24257 24258 24259 24260 24261 24262 24263 24264 24265 24266 24267 24268 24269 24270 24271 24272 24273 24274 24275 24276 24277 24278 24279 24280 24281 24282 24283 24284 24285 24286 24287 24288 24289 24290 24291 24292 24293 24294 24295 24296 24297 24298 24299 24300 24301 24302 24303 24304 24305 24306 24307 24308 24309 24310 24311 24312 24313 24314 24315 24316 24317 24318 24319 24320 24321 24322 24323 24324 24325 24326 24327 24328 24329 24330 24331 24332 24333 24334 24335 24336 24337 24338 24339 24340 24341 24342 24343 24344 24345 24346 24347 24348 24349 24350 24351 24352 24353 24354 24355 24356 24357 24358 24359 24360 24361 24362 24363 24364 24365 24366 24367 24368 24369 24370 24371 24372 24373 24374 24375 24376 24377 24378 24379 24380 24381 24382 24383
24383 24384 24385 24386 24387 24388 24389 24390 24391 24392 24393 24394 24395 24396 24397 24398 24399 24400 24401 24402 24403 24404 24405 24406 24407 24408 24409 24410 24411 24412 24413 24414 24415 24416 24417 24418 24419 24420 24421 24422 24423 24424 24425 24426 24427 24428 24429 24430 24431 24432 24433 24434 24435 24436 24437 24438 24439 24440 24441 24442 24443 24444 24445 </ul> 24446 <!-- Fim Paleta de Cores --> 24447 24448 24449 24450 24451 24452 24453 24454 24455 24456 24457 24458 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 24459 <option disabled="disabled" value=""> 24460 Selecione 24461 </option> 24462 24463 24464 <option value="11503" produto="125237501" estoque="10000">30 Doses</option> 24465 24466 24467 24468 24469 <option value="11505" produto="125237501" estoque="10000">60 Doses</option> 24470 24471 24472 </select> 24473 24474 24475 <select class="select-cor" style="display: none;" title="Campo Cor"> 24476 </select> 24477 24478 24479 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 24480 <div class="alerta-estoque"></div> 24481 <div class="alerta-adicionado"></div> 24482 24483 <div class="acao-compra"> 24484 24485 <div class="quantidade-box"> 24486 <div class="quantidade-box-input"> 24487 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
24487stoque="20000" /> 24488 </div> 24489 <div class="quantidade-box-controles"> 24490 <div class="quantidade-box-controles-itens" data-item="mais"> 24491 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 24492 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 24493 </svg> 24494 </div> 24495 <div class="quantidade-box-controles-itens" data-item="menus"> 24496 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 24497 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 24498 </svg> 24499 </div> 24500 </div> 24501 </div> 24502 24503 24504 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125237501"> 24505 24506 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 24507 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 24508 24509 24510 24511 24512 24513 24514 <!-- Cesta de Compras --> 24515 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 24516 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 24517 </svg> 24518 24519 24520 24521 Comprar 24522 24523 24524 </button> 24525 <!-- </form> --> 24526 24527 </div> 24528 24529</div> 24530 24531 24532 </div> 24533 24534 </div> 24535 24536 24537</div> 24538
24539<script> 24540(function (window, document) { 24541 'use strict'; 24542 24543 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 24544 24545 if (window[GLOBAL_KEY]) { 24546 return; 24547 } 24548 24549 if (!window.Map || !window.WeakMap || !window.Promise) { 24550 return; 24551 } 24552 24553 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 24554 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 24555 '#vitrine-personalizada .product[data-id]'; 24556 var BADGE_CLASS = 'farmacam-prescription-badge'; 24557 var HOST_CLASS = 'farmacam-prescription-badge-host'; 24558 var MAX_CONCURRENT_REQUESTS = 6; 24559 var REQUEST_TIMEOUT_MS = 12000; 24560 24561 var rules = { 24562 '294': { 24563 level: '294', 24564 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 24565 }, 24566 '296': { 24567 level: '296', 24568 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 24569 }, 24570 '298': { 24571 level: '298', 24572 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 24573 } 24574 }; 24575 24576 var cache = new Map(); 24577 var pending = new Map(); 24578 var cardStates = new WeakMap(); 24579 var queue = []; 24580 var activeRequests = 0; 24581 var trayAjaxHooked = false; 24582 24583 function injectStyles() { 24584 if (document.getElementById('farmacam-prescription-cards-style')) { 24585 return; 24586 } 24587 24588 var style = document.createElement('style'); 24589 style.id = 'farmacam-prescription-cards-style'; 24590 style.textContent = [ 24591 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 24592 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 24593 'position:absolute!important;', 24594 'top:52px!important;', 24595 'left:10px!important;', 24596 'z-index:999!important;', 24597 'display:block!important;', 24598 'max-width:calc(100% - 20px)!important;', 24599 'box-sizing:border-box!important;', 24600 'padding:8px 12px!important;', 24601 'color:#fff!important;', 24602 'font-family:inherit!important;', 24603 'font-size:13px!important;', 24604 'font-weight:900!important;', 24605 'line-height:1.15!important;', 24606 'text-align:center!important;', 24607 'text-transform:uppercase!important;', 24608 'letter-spacing:.3px!important;', 24609 'white-space:normal!important;', 24610 'overflow-wrap:break-word!important;', 24611 'border-radius:3px!important;', 24612 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 24613 'pointer-events:none!important;', 24614 '}', 24615 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 24616 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 24617 'background:#d70008!important;', 24618 '}', 24619 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 24620 'background:#000!important;', 24621 '}', 24622 '@media (max-width:767px){', 24623 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 24624 'top:42px!important;', 24625 'left:6px!important;', 24626 'max-width:calc(100% - 12px)!important;', 24627 'padding:6px 8px!important;', 24628 'font-size:10px!important;', 24629 '}', 24630 '}' 24631 ].join(''); 24632 24633 (document.head || document.documentElement).appendChild(style); 24634 } 24635 24636 function normalizeProductId(value) { 24637 var id = String(value == null ? '' : value).trim(); 24638 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 24639 } 24640 24641 function classifyRelatedCategories(relatedCategories) { 24642 var found = { 24643 '292': false, 24644 '294': false, 24645 '296': false, 24646 '298': false 24647 }; 24648 24649 function inspect(value, depth) { 24650 var index; 24651 var normalized; 24652 24653 if (value == null || depth > 8) { 24654 return; 24655 } 24656 24657 if (Array.isArray(value)) { 24658 for (index = 0; index < value.length; index += 1) { 24659 inspect(value[index], depth + 1); 24660 } 24661 return; 24662 } 24663 24664 if (typeof value === 'object') { 24665 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 24666 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 24667 inspect(value.id, depth + 1); 24668 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 24669 inspect(value.category_id, depth + 1); 24670 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 24671 inspect(value.Category, depth + 1); 24672 } 24673 return; 24674 } 24675 24676 if (typeof value !== 'string' && typeof value !== 'number') { 24677 return; 24678 } 24679 normalized = normalizeProductId(value); 24680 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 24681 found[normalized] = true; 24682 } 24683 } 24684 24685 inspect(relatedCategories, 0); 24686 24687 if (found['298']) { 24688 return rules['298']; 24689 } 24690 if (found['296']) { 24691 return rules['296']; 24692 } 24693 if (found['294']) { 24694 return rules['294']; 24695 } 24696 24697 // 292 e qualquer classificacao desconhecida ficam sem tarja. 24698 return null; 24699 } 24700 24701 function ruleFromPayload(payload, productId) { 24702 var product = payload && payload.Product; 24703 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 24704 return null; 24705 } 24706 return classifyRelatedCategories(product && product.related_categories); 24707 } 24708 24709 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 24710 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 24711 function attachTrayAjaxCache() { 24712 var jq = window.jQuery; 24713 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 24714 return; 24715 } 24716
24717 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 24718 var url; 24719 var match; 24720 var productId; 24721 var payload; 24722 try { 24723 url = new URL(settings.url, window.location.href); 24724 if (url.origin !== window.location.origin) { 24725 return; 24726 } 24727 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 24728 if (!match) { 24729 return; 24730 } 24731 productId = normalizeProductId(match[1]); 24732 if (!cache.has(productId) && !pending.has(productId)) { 24733 payload = data || xhr.responseJSON; 24734 if (typeof payload === 'string') { 24735 payload = JSON.parse(payload); 24736 } 24737 if (!payload || !payload.Product || 24738 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 24739 return; 24740 } 24741 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 24742 return; 24743 } 24744 cache.set(productId, ruleFromPayload(payload, productId)); 24745 } 24746 } catch (error) { 24747 // Respostas de outras integracoes nao interferem nas tarjas. 24748 } 24749 }); 24750 24751 trayAjaxHooked = true; 24752 document.removeEventListener('load', onTrayScriptLoad, true); 24753 } 24754 24755 function onTrayScriptLoad(event) { 24756 if (event.target && event.target.tagName === 'SCRIPT') { 24757 attachTrayAjaxCache(); 24758 } 24759 } 24760 24761 function requestRule(productId) { 24762 var controller = null; 24763 var timeoutId = null; 24764 var options = { 24765 credentials: 'same-origin', 24766 headers: { 24767 'Accept': 'application/json' 24768 } 24769 }; 24770 var request; 24771 24772 if (typeof window.fetch !== 'function') { 24773 return Promise.resolve(null); 24774 } 24775 24776 if (typeof window.AbortController === 'function') { 24777 controller = new window.AbortController(); 24778 options.signal = controller.signal; 24779 timeoutId = window.setTimeout(function () { 24780 controller.abort(); 24781 }, REQUEST_TIMEOUT_MS); 24782 } 24783 24784 try { 24785 request = window.fetch( 24786 '/web_api/products/' + encodeURIComponent(productId), 24787 options 24788 ); 24789 } catch (error) { 24790 if (timeoutId !== null) { 24791 window.clearTimeout(timeoutId); 24792 } 24793 return Promise.resolve(null); 24794 } 24795 24796 return request.then(function (response) { 24797 if (!response.ok) { 24798 throw new Error('HTTP ' + response.status); 24799 } 24800 return response.json(); 24801 }).then(function (payload) { 24802 return ruleFromPayload(payload, productId); 24803 }).then(function (rule) { 24804 if (timeoutId !== null) { 24805 window.clearTimeout(timeoutId); 24806 } 24807 return rule; 24808 }, function () { 24809 if (timeoutId !== null) { 24810 window.clearTimeout(timeoutId); 24811 } 24812 24813 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 24814 return null; 24815 }); 24816 } 24817 24818 function finishJob(job, rule) { 24819 cache.set(job.productId, rule); 24820 pending.delete(job.productId); 24821 activeRequests -= 1; 24822 job.resolve(rule); 24823 pumpQueue(); 24824 } 24825 24826 function pumpQueue() { 24827 var job; 24828 24829 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 24830 job = queue.shift(); 24831 activeRequests += 1; 24832 24833 (function (currentJob) { 24834 requestRule(currentJob.productId).then(function (rule) { 24835 finishJob(currentJob, rule); 24836 }, function () { 24837 finishJob(currentJob, null); 24838 }); 24839 }(job)); 24840 } 24841 } 24842 24843 function getRule(productId) { 24844 var resolver; 24845 var promise; 24846 24847 if (cache.has(productId)) { 24848 return Promise.resolve(cache.get(productId)); 24849 } 24850 24851 if (pending.has(productId)) { 24852 return pending.get(productId); 24853 } 24854 24855 promise = new Promise(function (resolve) { 24856 resolver = resolve; 24857 }); 24858 24859 pending.set(productId, promise); 24860 queue.push({ 24861 productId: productId, 24862 resolve: resolver 24863 }); 24864 pumpQueue(); 24865 24866 return promise; 24867 } 24868 24869 function findBadge(card) { 24870 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 24871 } 24872 24873 function clearBadge(card) { 24874 var badge = findBadge(card); 24875 var image = card.querySelector('.product-header > .w-100 > .image'); 24876 24877 if (badge && badge.parentNode) { 24878 badge.parentNode.removeChild(badge); 24879 } 24880 24881 if (image) { 24882 image.classList.remove(HOST_CLASS); 24883 } 24884 24885 card.removeAttribute('data-farmacam-prescription-level'); 24886 } 24887 24888 function applyBadge(card, productId, rule) { 24889 var image; 24890 var badge; 24891 24892 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 24893 return false;
24894 } 24895 24896 clearBadge(card); 24897 24898 if (!rule) { 24899 return true; 24900 } 24901 24902 image = card.querySelector('.product-header > .w-100 > .image'); 24903 if (!image) { 24904 return false; 24905 } 24906 24907 badge = document.createElement('span'); 24908 badge.className = BADGE_CLASS; 24909 badge.setAttribute('data-farmacam-generated', 'true'); 24910 badge.setAttribute('data-farmacam-prescription-level', rule.level); 24911 badge.setAttribute('role', 'note'); 24912 badge.textContent = rule.text; 24913 24914 image.classList.add(HOST_CLASS); 24915 image.insertBefore(badge, image.firstChild); 24916 card.setAttribute('data-farmacam-prescription-level', rule.level); 24917 24918 return true; 24919 } 24920 24921 function processCard(card) { 24922 var productId; 24923 var previousState; 24924 var currentState; 24925 24926 if (!card || card.nodeType !== 1) { 24927 return; 24928 } 24929 24930 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 24931 return; 24932 } 24933 24934 productId = normalizeProductId(card.getAttribute('data-id')); 24935 previousState = cardStates.get(card); 24936 24937 if (!productId) { 24938 clearBadge(card); 24939 cardStates.delete(card); 24940 return; 24941 } 24942 24943 if ( 24944 previousState && 24945 previousState.productId === productId && 24946 previousState.status === 'loading' 24947 ) { 24948 return; 24949 } 24950 24951 if ( 24952 previousState && 24953 previousState.productId === productId && 24954 previousState.status === 'processed' 24955 ) { 24956 if (!previousState.rule || findBadge(card)) { 24957 return; 24958 } 24959 } 24960 24961 if (!previousState || previousState.productId !== productId) { 24962 clearBadge(card); 24963 } 24964 24965 currentState = { 24966 productId: productId, 24967 status: 'loading', 24968 rule: null 24969 }; 24970 cardStates.set(card, currentState); 24971 24972 getRule(productId).then(function (rule) { 24973 var applied; 24974 24975 if ( 24976 cardStates.get(card) !== currentState || 24977 normalizeProductId(card.getAttribute('data-id')) !== productId 24978 ) { 24979 return; 24980 } 24981 24982 applied = applyBadge(card, productId, rule); 24983 currentState.rule = rule; 24984 currentState.status = applied ? 'processed' : 'waiting-image'; 24985 }); 24986 } 24987 24988 function scan(root) { 24989 var cards; 24990 var index; 24991 24992 if (!root) { 24993 return; 24994 } 24995 24996 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 24997 processCard(root); 24998 } 24999 25000 if (!root.querySelectorAll) { 25001 return; 25002 } 25003 25004 cards = root.querySelectorAll(CARD_SELECTOR); 25005 for (index = 0; index < cards.length; index += 1) { 25006 processCard(cards[index]); 25007 } 25008 } 25009 25010 function startObserver() { 25011 var observer; 25012 25013 if (!window.MutationObserver || !document.documentElement) { 25014 return; 25015 } 25016 25017 observer = new MutationObserver(function (mutations) { 25018 var mutationIndex; 25019 var nodeIndex; 25020 var mutation; 25021 var node; 25022 var ownerCard; 25023 25024 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 25025 mutation = mutations[mutationIndex]; 25026 25027 if (mutation.type === 'attributes') { 25028 processCard(mutation.target); 25029 continue; 25030 } 25031 25032 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 25033 node = mutation.addedNodes[nodeIndex]; 25034 if (node.nodeType !== 1) { 25035 continue; 25036 } 25037 25038 scan(node); 25039 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 25040 if (ownerCard) { 25041 processCard(ownerCard); 25042 } 25043 } 25044 } 25045 }); 25046 25047 observer.observe(document.documentElement, { 25048 childList: true, 25049 subtree: true, 25050 attributes: true, 25051 attributeFilter: ['data-id'] 25052 }); 25053 25054 window[GLOBAL_KEY].observer = observer; 25055 } 25056 25057 window[GLOBAL_KEY] = { 25058 version: '1.1.0', 25059 cache: cache, 25060 pending: pending, 25061 cardStates: cardStates, 25062 scan: scan, 25063 processCard: processCard, 25064 observer: null 25065 }; 25066 25067 document.addEventListener('load', onTrayScriptLoad, true); 25068 attachTrayAjaxCache(); 25069 injectStyles(); 25070 scan(document); 25071 startObserver(); 25072 25073 if (document.readyState === 'loading') { 25074 document.addEventListener('DOMContentLoaded', function () { 25075 attachTrayAjaxCache(); 25076 scan(document); 25077 }); 25078 } 25079}(window, document)); 25080</script>
25080 25081 </div> 25082 <div 25083 class="swiper-slide fixWidthBoxProduct item"> 25084 25085 25086 25087 25088<div class="product animate open_cart" 25089 data-id="125245406" 25090 data-farmacam-related-categories="," 25091 data-ga4-id="125245406" 25092 data-ga4-name="Clascoterona - Solução Capilar" 25093 data-ga4-price="695.00" 25094 data-ga4-brand="Farmacam" 25095 data-ga4-category="Tipo de Produto;Manipulados;" 25096 > 25097 25098 <div class="product-header"> 25099 25100 <div class="w-100"> 25101 25102 25103 25104 25105 25106 25107 25108 <div class="product-tags-circle"> 25109 25110 <div class="tag-circle discount"> 25111 <span>Frete Grátis</span> 25112 </div> 25113 25114 25115 25116 </div> 25117 25118 25119 25120 <div class="product-tags has-free-shipping-tag" data-tags-count="0"> 25121 25122 25123 25124 25125 25126 </div> 25127 25128 25129 25130 <div class="image has-image "> 25131 25132 <a title="Clascoterona - Solução Capilar" href="https://www.farmacam.com.br/clascoterona-solucao-capilar" class="space-image"> 25133 <img class="hori-quad imagem-produto-1 " src="https://images.tcdn.com.br/img/img_prod/1063102/clascoterona_solucao_capilar_125245406_1_aedb3e22630ebf775798651bd65edcd0.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/clascoterona_solucao_capilar_125245406_1_aedb3e22630ebf775798651bd65edcd0.png" alt="Clascoterona - Solução Capilar"> 25134 <img class="imagem-produto-2" src="https://images.tcdn.com.br/img/img_prod/1063102/clascoterona_soluo_capilar_2_20260202090420_6a5c3fd808b9.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/clascoterona_soluo_capilar_2_20260202090420_6a5c3fd808b9.png" alt="Clascoterona - Solução Capilar"> 25135 </a> 25136 25137 </div> 25138 25139 25140 25141 25142 25143 </div> 25144 25145 </div> 25146 25147 <div class="product-body"> 25148 25149 <a title="Clascoterona - Solução Capilar" class="product-info" href="https://www.farmacam.com.br/clascoterona-solucao-capilar"> 25150 25151 <div class="product-info-dados"> 25152 25153 25154 25155 25156 25157 25158 <div class="product-name"> 25159 Clascoterona - Solução Capilar 25160 </div> 25161 25162 25163 25164 <div class="product-price"> 25165 25166 25167 25168 25169 25170 <span class="product-has-variants text-center"> 25171 A partir de 25172 </span> 25173 25174<div class="price display-cash"> 25175 25176 25177 <span class="current-price "> 25178 R$ 695,00 25179 25180 </span> 25181 25182 <span class="product-installments"> 25183 25184 </span> 25185 25186</div> 25187 </div> 25188 25189 </div> 25190 25191 </a> 25192 25193 </div> 25194 25195 25196 <div class="product-footer"> 25197 25198 25199 <div class="w-100"> 25200 25201 25202 25203<div class="product-rating-catalog"> 25204 25205 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 25206 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 25207 </svg> 25208 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 25209 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 25210 </svg> 25211 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 25212 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 25213 </svg> 25214 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 25215 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 25216 </svg> 25217 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 25218 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 25219 </svg> 25220 25221 25222 <a title="Ver avaliações de Clascoterona - Solução Capilar" href="https://www.farmacam.com.br/clascoterona-solucao-capilar#comments" class="total"> 25223 Seja o primeiro 25224 </a> 25225 25226 </div> 25227 25228 25229 25230 <div class="config-variacoes-compra"> 25231 25232 25233 25234 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245406"> 25235 <input type="hidden" name="product_id" value="125245406"> 25236 <input type="hidden" name="without_stock_sale" value=""> 25237 25238 <input type="hidden" name="variacao" id="selectedVariant" value=""> 25239 <input type="hidden" name="estoque" value=""> 25240 25241 25242 25243 <ul class="paleta-cores"> 25244 25245 25246 25247 25248 25249 25250 25251 25252 25253 25254 25255 25256 25257 25258 25259 25260 25261 25262 25263 25264 25265 25266 25267 25268 25269 25270 25271 25272 25273 25274 25275 25276 25277 25278 25279 25280 25281 25282 25283 25284 25285 25286 25287 25288 25289 25290 25291 25292 25293 25294 25295 25296 25297 25298 25299 25300 25301 25302 25303 25304 25305 25306 25307 25308 25309 25310 25311 25312 25313 25314 25315 25316 25317 25318 25319 25320 25321 25322 25323 25324 25325 25326 25327 25328 25329 25330 25331 25332 25333 25334 25335 25336 25337 25338 25339 25340 25341 25342 25343 25344 25345 25346 25347 25348 25349 25350 25351 25352 25353 25354 25355 25356 25357 25358 25359 25360 25361 25362 25363 25364 25365 25366 25367 25368 25369 25370 25371 25372 25373 25374 25375 25376 25377 25378 25379 25380 25381 25382 25383 25384 25385 25386 25387 25388 25389 25390 25391 25392 25393 25394 25395 25396 25397 25398 25399 25400 25401 25402 25403 25404 25405 25406 25407 25408 25409 25410 25411 25412 25413 25414 25415 25416 25417 25418 25419 25420 25421 25422 25423 25424 25425 25426 25427 25428 25429 25430 25431 25432 25433 25434 25435 25436 25437 25438 25439 25440 25441 25442 25443 25444 25445 25446 25447 25448 25449 25450 25451 25452 25453 25454 25455 25456 25457 25458 25459 25460 25461 25462 25463 25464 25465 25466 25467 25468 25469 25470 25471 25472 25473 25474 25475 25476 25477 25478 25479 25480 25481 25482 25483 25484 25485 25486 25487 25488 25489 25490 25491 25492 25493 25494 25495 25496 25497 25498 25499 25500 25501 25502 25503 25504 25505 25506 25507 25508
25508 25509 25510 25511 25512 25513 25514 25515 25516 25517 25518 25519 25520 25521 25522 25523 25524 25525 25526 25527 25528 25529 25530 25531 25532 25533 25534 25535 25536 25537 25538 25539 25540 25541 25542 25543 25544 25545 25546 25547 25548 25549 25550 25551 25552 25553 25554 25555 25556 25557 25558 25559 25560 25561 25562 25563 25564 25565 25566 25567 25568 25569 25570 25571 25572 25573 25574 25575 25576 25577 25578 25579 25580 25581 25582 25583 25584 25585 25586 25587 25588 25589 25590 25591 25592 25593 25594 25595 25596 25597 25598 25599 25600 25601 25602 25603 25604 25605 25606 25607 25608 25609 25610 25611 25612 25613 25614 25615 25616 25617 25618 25619 25620 25621 25622 25623 25624 25625 25626 25627 25628 25629 25630 25631 25632 25633 25634 25635 25636 25637 25638 25639 25640 25641 25642 25643 25644 25645 25646 25647 25648 25649 25650 25651 25652 25653 25654 25655 25656 25657 25658 25659 25660 25661 25662 25663 25664 25665 25666 25667 25668 25669 25670 25671 25672 25673 25674 25675 25676 25677 25678 25679 25680 25681 25682 25683 25684 25685 25686 25687 25688 25689 25690 25691 25692 25693 25694 25695 25696 25697 25698 25699 25700 25701 25702 25703 25704 25705 25706 25707 25708 25709 25710 25711 25712 25713 25714 25715 25716 25717 25718 25719 25720 25721 25722 25723 25724 </ul> 25725 <!-- Fim Paleta de Cores --> 25726 25727 25728 25729 25730 25731 25732 25733 25734 25735 25736 25737 25738 25739 25740 25741 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 25742 <option disabled="disabled" value=""> 25743 Selecione 25744 </option> 25745 25746 25747 <option value="28966" produto="125245406" estoque="9996">5% - Solução Capilar - 20 ml</option> 25748 25749 25750 25751 25752 <option value="28968" produto="125245406" estoque="9978">5% - Solução Capilar - 30 ml</option> 25753 25754 25755 25756 25757 <option value="28970" produto="125245406" estoque="9996">5% - Solução Capilar - 50 ml</option> 25758 25759 25760 </select> 25761 25762 25763 <select class="select-cor" style="display: none;" title="Campo Cor"> 25764
25764 </select> 25765 25766 25767 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 25768 <div class="alerta-estoque"></div> 25769 <div class="alerta-adicionado"></div> 25770 25771 <div class="acao-compra"> 25772 25773 <div class="quantidade-box"> 25774 <div class="quantidade-box-input"> 25775 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
25775stoque="29970" /> 25776 </div> 25777 <div class="quantidade-box-controles"> 25778 <div class="quantidade-box-controles-itens" data-item="mais"> 25779 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 25780 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 25781 </svg> 25782 </div> 25783 <div class="quantidade-box-controles-itens" data-item="menus"> 25784 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 25785 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 25786 </svg> 25787 </div> 25788 </div> 25789 </div> 25790 25791 25792 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245406"> 25793 25794 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 25795 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 25796 25797 25798 25799 25800 25801 25802 <!-- Cesta de Compras --> 25803 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 25804 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 25805 </svg> 25806 25807 25808 25809 Comprar 25810 25811 25812 </button> 25813 <!-- </form> --> 25814 25815 </div> 25816 25817</div> 25818 25819 25820 </div> 25821 25822 </div> 25823 25824 25825</div> 25826
25827<script> 25828(function (window, document) { 25829 'use strict'; 25830 25831 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 25832 25833 if (window[GLOBAL_KEY]) { 25834 return; 25835 } 25836 25837 if (!window.Map || !window.WeakMap || !window.Promise) { 25838 return; 25839 } 25840 25841 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 25842 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 25843 '#vitrine-personalizada .product[data-id]'; 25844 var BADGE_CLASS = 'farmacam-prescription-badge'; 25845 var HOST_CLASS = 'farmacam-prescription-badge-host'; 25846 var MAX_CONCURRENT_REQUESTS = 6; 25847 var REQUEST_TIMEOUT_MS = 12000; 25848 25849 var rules = { 25850 '294': { 25851 level: '294', 25852 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 25853 }, 25854 '296': { 25855 level: '296', 25856 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 25857 }, 25858 '298': { 25859 level: '298', 25860 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 25861 } 25862 }; 25863 25864 var cache = new Map(); 25865 var pending = new Map(); 25866 var cardStates = new WeakMap(); 25867 var queue = []; 25868 var activeRequests = 0; 25869 var trayAjaxHooked = false; 25870 25871 function injectStyles() { 25872 if (document.getElementById('farmacam-prescription-cards-style')) { 25873 return; 25874 } 25875 25876 var style = document.createElement('style'); 25877 style.id = 'farmacam-prescription-cards-style'; 25878 style.textContent = [ 25879 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 25880 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 25881 'position:absolute!important;', 25882 'top:52px!important;', 25883 'left:10px!important;', 25884 'z-index:999!important;', 25885 'display:block!important;', 25886 'max-width:calc(100% - 20px)!important;', 25887 'box-sizing:border-box!important;', 25888 'padding:8px 12px!important;', 25889 'color:#fff!important;', 25890 'font-family:inherit!important;', 25891 'font-size:13px!important;', 25892 'font-weight:900!important;', 25893 'line-height:1.15!important;', 25894 'text-align:center!important;', 25895 'text-transform:uppercase!important;', 25896 'letter-spacing:.3px!important;', 25897 'white-space:normal!important;', 25898 'overflow-wrap:break-word!important;', 25899 'border-radius:3px!important;', 25900 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 25901 'pointer-events:none!important;', 25902 '}', 25903 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 25904 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 25905 'background:#d70008!important;', 25906 '}', 25907 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 25908 'background:#000!important;', 25909 '}', 25910 '@media (max-width:767px){', 25911 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 25912 'top:42px!important;', 25913 'left:6px!important;', 25914 'max-width:calc(100% - 12px)!important;', 25915 'padding:6px 8px!important;', 25916 'font-size:10px!important;', 25917 '}', 25918 '}' 25919 ].join(''); 25920 25921 (document.head || document.documentElement).appendChild(style); 25922 } 25923 25924 function normalizeProductId(value) { 25925 var id = String(value == null ? '' : value).trim(); 25926 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 25927 } 25928 25929 function classifyRelatedCategories(relatedCategories) { 25930 var found = { 25931 '292': false, 25932 '294': false, 25933 '296': false, 25934 '298': false 25935 }; 25936 25937 function inspect(value, depth) { 25938 var index; 25939 var normalized; 25940 25941 if (value == null || depth > 8) { 25942 return; 25943 } 25944 25945 if (Array.isArray(value)) { 25946 for (index = 0; index < value.length; index += 1) { 25947 inspect(value[index], depth + 1); 25948 } 25949 return; 25950 } 25951 25952 if (typeof value === 'object') { 25953 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 25954 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 25955 inspect(value.id, depth + 1); 25956 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 25957 inspect(value.category_id, depth + 1); 25958 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 25959 inspect(value.Category, depth + 1); 25960 } 25961 return; 25962 } 25963 25964 if (typeof value !== 'string' && typeof value !== 'number') { 25965 return; 25966 } 25967 normalized = normalizeProductId(value); 25968 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 25969 found[normalized] = true; 25970 } 25971 } 25972 25973 inspect(relatedCategories, 0); 25974 25975 if (found['298']) { 25976 return rules['298']; 25977 } 25978 if (found['296']) { 25979 return rules['296']; 25980 } 25981 if (found['294']) { 25982 return rules['294']; 25983 } 25984 25985 // 292 e qualquer classificacao desconhecida ficam sem tarja. 25986 return null; 25987 } 25988 25989 function ruleFromPayload(payload, productId) { 25990 var product = payload && payload.Product; 25991 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 25992 return null; 25993 } 25994 return classifyRelatedCategories(product && product.related_categories); 25995 } 25996 25997 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 25998 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 25999 function attachTrayAjaxCache() { 26000 var jq = window.jQuery; 26001 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 26002 return; 26003 } 26004
26005 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 26006 var url; 26007 var match; 26008 var productId; 26009 var payload; 26010 try { 26011 url = new URL(settings.url, window.location.href); 26012 if (url.origin !== window.location.origin) { 26013 return; 26014 } 26015 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 26016 if (!match) { 26017 return; 26018 } 26019 productId = normalizeProductId(match[1]); 26020 if (!cache.has(productId) && !pending.has(productId)) { 26021 payload = data || xhr.responseJSON; 26022 if (typeof payload === 'string') { 26023 payload = JSON.parse(payload); 26024 } 26025 if (!payload || !payload.Product || 26026 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 26027 return; 26028 } 26029 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 26030 return; 26031 } 26032 cache.set(productId, ruleFromPayload(payload, productId)); 26033 } 26034 } catch (error) { 26035 // Respostas de outras integracoes nao interferem nas tarjas. 26036 } 26037 }); 26038 26039 trayAjaxHooked = true; 26040 document.removeEventListener('load', onTrayScriptLoad, true); 26041 } 26042 26043 function onTrayScriptLoad(event) { 26044 if (event.target && event.target.tagName === 'SCRIPT') { 26045 attachTrayAjaxCache(); 26046 } 26047 } 26048 26049 function requestRule(productId) { 26050 var controller = null; 26051 var timeoutId = null; 26052 var options = { 26053 credentials: 'same-origin', 26054 headers: { 26055 'Accept': 'application/json' 26056 } 26057 }; 26058 var request; 26059 26060 if (typeof window.fetch !== 'function') { 26061 return Promise.resolve(null); 26062 } 26063 26064 if (typeof window.AbortController === 'function') { 26065 controller = new window.AbortController(); 26066 options.signal = controller.signal; 26067 timeoutId = window.setTimeout(function () { 26068 controller.abort(); 26069 }, REQUEST_TIMEOUT_MS); 26070 } 26071 26072 try { 26073 request = window.fetch( 26074 '/web_api/products/' + encodeURIComponent(productId), 26075 options 26076 ); 26077 } catch (error) { 26078 if (timeoutId !== null) { 26079 window.clearTimeout(timeoutId); 26080 } 26081 return Promise.resolve(null); 26082 } 26083 26084 return request.then(function (response) { 26085 if (!response.ok) { 26086 throw new Error('HTTP ' + response.status); 26087 } 26088 return response.json(); 26089 }).then(function (payload) { 26090 return ruleFromPayload(payload, productId); 26091 }).then(function (rule) { 26092 if (timeoutId !== null) { 26093 window.clearTimeout(timeoutId); 26094 } 26095 return rule; 26096 }, function () { 26097 if (timeoutId !== null) { 26098 window.clearTimeout(timeoutId); 26099 } 26100 26101 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 26102 return null; 26103 }); 26104 } 26105 26106 function finishJob(job, rule) { 26107 cache.set(job.productId, rule); 26108 pending.delete(job.productId); 26109 activeRequests -= 1; 26110 job.resolve(rule); 26111 pumpQueue(); 26112 } 26113 26114 function pumpQueue() { 26115 var job; 26116 26117 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 26118 job = queue.shift(); 26119 activeRequests += 1; 26120 26121 (function (currentJob) { 26122 requestRule(currentJob.productId).then(function (rule) { 26123 finishJob(currentJob, rule); 26124 }, function () { 26125 finishJob(currentJob, null); 26126 }); 26127 }(job)); 26128 } 26129 } 26130 26131 function getRule(productId) { 26132 var resolver; 26133 var promise; 26134 26135 if (cache.has(productId)) { 26136 return Promise.resolve(cache.get(productId)); 26137 } 26138 26139 if (pending.has(productId)) { 26140 return pending.get(productId); 26141 } 26142 26143 promise = new Promise(function (resolve) { 26144 resolver = resolve; 26145 }); 26146 26147 pending.set(productId, promise); 26148 queue.push({ 26149 productId: productId, 26150 resolve: resolver 26151 }); 26152 pumpQueue(); 26153 26154 return promise; 26155 } 26156 26157 function findBadge(card) { 26158 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 26159 } 26160 26161 function clearBadge(card) { 26162 var badge = findBadge(card); 26163 var image = card.querySelector('.product-header > .w-100 > .image'); 26164 26165 if (badge && badge.parentNode) { 26166 badge.parentNode.removeChild(badge); 26167 } 26168 26169 if (image) { 26170 image.classList.remove(HOST_CLASS); 26171 } 26172 26173 card.removeAttribute('data-farmacam-prescription-level'); 26174 } 26175 26176 function applyBadge(card, productId, rule) { 26177 var image; 26178 var badge; 26179 26180 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 26181 return false;
26182 } 26183 26184 clearBadge(card); 26185 26186 if (!rule) { 26187 return true; 26188 } 26189 26190 image = card.querySelector('.product-header > .w-100 > .image'); 26191 if (!image) { 26192 return false; 26193 } 26194 26195 badge = document.createElement('span'); 26196 badge.className = BADGE_CLASS; 26197 badge.setAttribute('data-farmacam-generated', 'true'); 26198 badge.setAttribute('data-farmacam-prescription-level', rule.level); 26199 badge.setAttribute('role', 'note'); 26200 badge.textContent = rule.text; 26201 26202 image.classList.add(HOST_CLASS); 26203 image.insertBefore(badge, image.firstChild); 26204 card.setAttribute('data-farmacam-prescription-level', rule.level); 26205 26206 return true; 26207 } 26208 26209 function processCard(card) { 26210 var productId; 26211 var previousState; 26212 var currentState; 26213 26214 if (!card || card.nodeType !== 1) { 26215 return; 26216 } 26217 26218 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 26219 return; 26220 } 26221 26222 productId = normalizeProductId(card.getAttribute('data-id')); 26223 previousState = cardStates.get(card); 26224 26225 if (!productId) { 26226 clearBadge(card); 26227 cardStates.delete(card); 26228 return; 26229 } 26230 26231 if ( 26232 previousState && 26233 previousState.productId === productId && 26234 previousState.status === 'loading' 26235 ) { 26236 return; 26237 } 26238 26239 if ( 26240 previousState && 26241 previousState.productId === productId && 26242 previousState.status === 'processed' 26243 ) { 26244 if (!previousState.rule || findBadge(card)) { 26245 return; 26246 } 26247 } 26248 26249 if (!previousState || previousState.productId !== productId) { 26250 clearBadge(card); 26251 } 26252 26253 currentState = { 26254 productId: productId, 26255 status: 'loading', 26256 rule: null 26257 }; 26258 cardStates.set(card, currentState); 26259 26260 getRule(productId).then(function (rule) { 26261 var applied; 26262 26263 if ( 26264 cardStates.get(card) !== currentState || 26265 normalizeProductId(card.getAttribute('data-id')) !== productId 26266 ) { 26267 return; 26268 } 26269 26270 applied = applyBadge(card, productId, rule); 26271 currentState.rule = rule; 26272 currentState.status = applied ? 'processed' : 'waiting-image'; 26273 }); 26274 } 26275 26276 function scan(root) { 26277 var cards; 26278 var index; 26279 26280 if (!root) { 26281 return; 26282 } 26283 26284 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 26285 processCard(root); 26286 } 26287 26288 if (!root.querySelectorAll) { 26289 return; 26290 } 26291 26292 cards = root.querySelectorAll(CARD_SELECTOR); 26293 for (index = 0; index < cards.length; index += 1) { 26294 processCard(cards[index]); 26295 } 26296 } 26297 26298 function startObserver() { 26299 var observer; 26300 26301 if (!window.MutationObserver || !document.documentElement) { 26302 return; 26303 } 26304 26305 observer = new MutationObserver(function (mutations) { 26306 var mutationIndex; 26307 var nodeIndex; 26308 var mutation; 26309 var node; 26310 var ownerCard; 26311 26312 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 26313 mutation = mutations[mutationIndex]; 26314 26315 if (mutation.type === 'attributes') { 26316 processCard(mutation.target); 26317 continue; 26318 } 26319 26320 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 26321 node = mutation.addedNodes[nodeIndex]; 26322 if (node.nodeType !== 1) { 26323 continue; 26324 } 26325 26326 scan(node); 26327 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 26328 if (ownerCard) { 26329 processCard(ownerCard); 26330 } 26331 } 26332 } 26333 }); 26334 26335 observer.observe(document.documentElement, { 26336 childList: true, 26337 subtree: true, 26338 attributes: true, 26339 attributeFilter: ['data-id'] 26340 }); 26341 26342 window[GLOBAL_KEY].observer = observer; 26343 } 26344 26345 window[GLOBAL_KEY] = { 26346 version: '1.1.0', 26347 cache: cache, 26348 pending: pending, 26349 cardStates: cardStates, 26350 scan: scan, 26351 processCard: processCard, 26352 observer: null 26353 }; 26354 26355 document.addEventListener('load', onTrayScriptLoad, true); 26356 attachTrayAjaxCache(); 26357 injectStyles(); 26358 scan(document); 26359 startObserver(); 26360 26361 if (document.readyState === 'loading') { 26362 document.addEventListener('DOMContentLoaded', function () { 26363 attachTrayAjaxCache(); 26364 scan(document); 26365 }); 26366 } 26367}(window, document)); 26368</script>
26368 26369 </div> 26370 <div 26371 class="swiper-slide fixWidthBoxProduct item"> 26372 26373 26374 26375 26376<div class="product animate open_cart" 26377 data-id="125236373" 26378 data-farmacam-related-categories="," 26379 data-ga4-id="125236373" 26380 data-ga4-name="Alprostadil - Saúde masculina" 26381 data-ga4-price="902.00" 26382 data-ga4-brand="Farmacam" 26383 data-ga4-category="Tipo de Produto;Manipulados;" 26384 > 26385 26386 <div class="product-header"> 26387 26388 <div class="w-100"> 26389 26390 26391 26392 26393 26394 26395 26396 <div class="product-tags-circle"> 26397 26398 <div class="tag-circle discount"> 26399 <span>Frete Grátis</span> 26400 </div> 26401 26402 26403 26404 </div> 26405 26406 26407 26408 <div class="product-tags has-free-shipping-tag" data-tags-count="0"> 26409 26410 26411 26412 26413 26414 </div> 26415 26416 26417 26418 <div class="image "> 26419 26420 <a title="Alprostadil - Saúde masculina" href="https://www.farmacam.com.br/alprostadil-saude-masculina" class="space-image"> 26421 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/alprostadil_saude_masculina_125236373_1_395a0f412be8aefc6c4420e65b19169f.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/alprostadil_saude_masculina_125236373_1_395a0f412be8aefc6c4420e65b19169f.png" alt="Alprostadil - Saúde masculina"> 26422 </a> 26423 26424 </div> 26425 26426 26427 26428 26429 26430 </div> 26431 26432 </div> 26433 26434 <div class="product-body"> 26435 26436 <a title="Alprostadil - Saúde masculina" class="product-info" href="https://www.farmacam.com.br/alprostadil-saude-masculina"> 26437 26438 <div class="product-info-dados"> 26439 26440 26441 26442 26443 26444 26445 <div class="product-name"> 26446 Alprostadil - Saúde masculina 26447 </div> 26448 26449 26450 26451 <div class="product-price"> 26452 26453 26454 26455 26456 26457 26458<div class="price display-cash"> 26459 26460 26461 <span class="current-price "> 26462 R$ 902,00 26463 26464 </span> 26465 26466 <span class="product-installments"> 26467 26468 </span> 26469 26470</div> 26471 </div> 26472 26473 </div> 26474 26475 </a> 26476 26477 </div> 26478 26479 26480 <div class="product-footer"> 26481 26482 26483 <div class="w-100"> 26484 26485 26486 26487<div class="product-rating-catalog"> 26488 26489 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 26490 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 26491 </svg> 26492 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 26493 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 26494 </svg> 26495 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 26496 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 26497 </svg> 26498 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 26499 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 26500 </svg> 26501 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 26502 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 26503 </svg> 26504 26505 26506 <a title="Ver avaliações de Alprostadil - Saúde masculina" href="https://www.farmacam.com.br/alprostadil-saude-masculina#comments" class="total"> 26507 Seja o primeiro 26508 </a> 26509 26510 </div> 26511 26512 26513 26514 <div class="config-variacoes-compra"> 26515 26516 26517 26518 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125236373"> 26519 <input type="hidden" name="product_id" value="125236373"> 26520 <input type="hidden" name="without_stock_sale" value=""> 26521 26522 <input type="hidden" name="variacao" id="selectedVariant" value=""> 26523 <input type="hidden" name="estoque" value=""> 26524 26525 26526 26527 <ul class="paleta-cores"> 26528 26529 26530 26531 26532 26533 26534 26535 26536 26537 26538 26539 26540 26541 26542 26543 26544 26545 26546 26547 26548 26549 26550 26551 26552 26553 26554 26555 26556 26557 26558 26559 26560 26561 26562 26563 26564 26565 26566 26567 26568 26569 26570 26571 26572 26573 26574 26575 26576 26577 26578 26579 26580 26581 26582 26583 26584 26585 26586 26587 26588 26589 26590 26591 26592 26593 26594 26595 26596 26597 26598 26599 26600 26601 26602 26603 26604 26605 26606 26607 26608 26609 26610 26611 26612 26613 26614 26615 26616 26617 26618 26619 26620 26621 26622 26623 26624 26625 26626 26627 26628 26629 26630 26631 26632 26633 26634 26635 26636 26637 26638 26639 26640 26641 26642 26643 26644 26645 26646 26647 26648 26649 26650 26651 26652 26653 26654 26655 26656 26657 26658 26659 26660 26661 26662 26663 26664 26665 26666 26667 26668 26669 26670 26671 26672 26673 26674 26675 26676 26677 26678 26679 26680 26681 26682 26683 26684 26685 26686 26687 26688 26689 26690 26691 26692 26693 26694 26695 26696 26697 26698 26699 26700 26701 26702 26703 26704 26705 26706 26707 26708 26709 26710 26711 26712 26713 26714 26715 26716 26717 26718 26719 26720 26721 26722 26723 26724 26725 26726 26727 26728 26729 26730 26731 26732 26733 26734 26735 26736 26737 26738 26739 26740 26741 26742 26743 26744 26745 26746 26747 26748 26749 26750 26751 26752 26753 26754 26755 26756 26757 26758 26759 26760 26761 26762 26763 26764 </ul> 26765 <!-- Fim Paleta de Cores --> 26766 26767 26768 26769 26770 26771 26772 26773 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 26774 <option disabled="disabled" value=""> 26775 Selecione 26776 </option> 26777
26777 26778 26779 <option value="7101" produto="125236373" estoque="10000">100 mcg / 0,02 g - pentravan - 1 g</option> 26780 26781 26782 </select> 26783 26784 26785 <select class="select-cor" style="display: none;" title="Campo Cor"> 26786 </select> 26787 26788 26789 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 26790 <div class="alerta-estoque"></div> 26791 <div class="alerta-adicionado"></div> 26792 26793 <div class="acao-compra"> 26794 26795 <div class="quantidade-box"> 26796 <div class="quantidade-box-input"> 26797 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
26797stoque="10000" /> 26798 </div> 26799 <div class="quantidade-box-controles"> 26800 <div class="quantidade-box-controles-itens" data-item="mais"> 26801 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 26802 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 26803 </svg> 26804 </div> 26805 <div class="quantidade-box-controles-itens" data-item="menus"> 26806 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 26807 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 26808 </svg> 26809 </div> 26810 </div> 26811 </div> 26812 26813 26814 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125236373"> 26815 26816 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 26817 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 26818 26819 26820 26821 26822 26823 26824 <!-- Cesta de Compras --> 26825 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 26826 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 26827 </svg> 26828 26829 26830 26831 Comprar 26832 26833 26834 </button> 26835 <!-- </form> --> 26836 26837 </div> 26838 26839</div> 26840 26841 26842 </div> 26843 26844 </div> 26845 26846 26847</div> 26848
26849<script> 26850(function (window, document) { 26851 'use strict'; 26852 26853 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 26854 26855 if (window[GLOBAL_KEY]) { 26856 return; 26857 } 26858 26859 if (!window.Map || !window.WeakMap || !window.Promise) { 26860 return; 26861 } 26862 26863 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 26864 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 26865 '#vitrine-personalizada .product[data-id]'; 26866 var BADGE_CLASS = 'farmacam-prescription-badge'; 26867 var HOST_CLASS = 'farmacam-prescription-badge-host'; 26868 var MAX_CONCURRENT_REQUESTS = 6; 26869 var REQUEST_TIMEOUT_MS = 12000; 26870 26871 var rules = { 26872 '294': { 26873 level: '294', 26874 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 26875 }, 26876 '296': { 26877 level: '296', 26878 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 26879 }, 26880 '298': { 26881 level: '298', 26882 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 26883 } 26884 }; 26885 26886 var cache = new Map(); 26887 var pending = new Map(); 26888 var cardStates = new WeakMap(); 26889 var queue = []; 26890 var activeRequests = 0; 26891 var trayAjaxHooked = false; 26892 26893 function injectStyles() { 26894 if (document.getElementById('farmacam-prescription-cards-style')) { 26895 return; 26896 } 26897 26898 var style = document.createElement('style'); 26899 style.id = 'farmacam-prescription-cards-style'; 26900 style.textContent = [ 26901 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 26902 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 26903 'position:absolute!important;', 26904 'top:52px!important;', 26905 'left:10px!important;', 26906 'z-index:999!important;', 26907 'display:block!important;', 26908 'max-width:calc(100% - 20px)!important;', 26909 'box-sizing:border-box!important;', 26910 'padding:8px 12px!important;', 26911 'color:#fff!important;', 26912 'font-family:inherit!important;', 26913 'font-size:13px!important;', 26914 'font-weight:900!important;', 26915 'line-height:1.15!important;', 26916 'text-align:center!important;', 26917 'text-transform:uppercase!important;', 26918 'letter-spacing:.3px!important;', 26919 'white-space:normal!important;', 26920 'overflow-wrap:break-word!important;', 26921 'border-radius:3px!important;', 26922 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 26923 'pointer-events:none!important;', 26924 '}', 26925 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 26926 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 26927 'background:#d70008!important;', 26928 '}', 26929 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 26930 'background:#000!important;', 26931 '}', 26932 '@media (max-width:767px){', 26933 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 26934 'top:42px!important;', 26935 'left:6px!important;', 26936 'max-width:calc(100% - 12px)!important;', 26937 'padding:6px 8px!important;', 26938 'font-size:10px!important;', 26939 '}', 26940 '}' 26941 ].join(''); 26942 26943 (document.head || document.documentElement).appendChild(style); 26944 } 26945 26946 function normalizeProductId(value) { 26947 var id = String(value == null ? '' : value).trim(); 26948 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 26949 } 26950 26951 function classifyRelatedCategories(relatedCategories) { 26952 var found = { 26953 '292': false, 26954 '294': false, 26955 '296': false, 26956 '298': false 26957 }; 26958 26959 function inspect(value, depth) { 26960 var index; 26961 var normalized; 26962 26963 if (value == null || depth > 8) { 26964 return; 26965 } 26966 26967 if (Array.isArray(value)) { 26968 for (index = 0; index < value.length; index += 1) { 26969 inspect(value[index], depth + 1); 26970 } 26971 return; 26972 } 26973 26974 if (typeof value === 'object') { 26975 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 26976 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 26977 inspect(value.id, depth + 1); 26978 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 26979 inspect(value.category_id, depth + 1); 26980 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 26981 inspect(value.Category, depth + 1); 26982 } 26983 return; 26984 } 26985 26986 if (typeof value !== 'string' && typeof value !== 'number') { 26987 return; 26988 } 26989 normalized = normalizeProductId(value); 26990 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 26991 found[normalized] = true; 26992 } 26993 } 26994 26995 inspect(relatedCategories, 0); 26996 26997 if (found['298']) { 26998 return rules['298']; 26999 } 27000 if (found['296']) { 27001 return rules['296']; 27002 } 27003 if (found['294']) { 27004 return rules['294']; 27005 } 27006 27007 // 292 e qualquer classificacao desconhecida ficam sem tarja. 27008 return null; 27009 } 27010 27011 function ruleFromPayload(payload, productId) { 27012 var product = payload && payload.Product; 27013 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 27014 return null; 27015 } 27016 return classifyRelatedCategories(product && product.related_categories); 27017 } 27018 27019 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 27020 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 27021 function attachTrayAjaxCache() { 27022 var jq = window.jQuery; 27023 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 27024 return; 27025 } 27026
27027 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 27028 var url; 27029 var match; 27030 var productId; 27031 var payload; 27032 try { 27033 url = new URL(settings.url, window.location.href); 27034 if (url.origin !== window.location.origin) { 27035 return; 27036 } 27037 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 27038 if (!match) { 27039 return; 27040 } 27041 productId = normalizeProductId(match[1]); 27042 if (!cache.has(productId) && !pending.has(productId)) { 27043 payload = data || xhr.responseJSON; 27044 if (typeof payload === 'string') { 27045 payload = JSON.parse(payload); 27046 } 27047 if (!payload || !payload.Product || 27048 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 27049 return; 27050 } 27051 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 27052 return; 27053 } 27054 cache.set(productId, ruleFromPayload(payload, productId)); 27055 } 27056 } catch (error) { 27057 // Respostas de outras integracoes nao interferem nas tarjas. 27058 } 27059 }); 27060 27061 trayAjaxHooked = true; 27062 document.removeEventListener('load', onTrayScriptLoad, true); 27063 } 27064 27065 function onTrayScriptLoad(event) { 27066 if (event.target && event.target.tagName === 'SCRIPT') { 27067 attachTrayAjaxCache(); 27068 } 27069 } 27070 27071 function requestRule(productId) { 27072 var controller = null; 27073 var timeoutId = null; 27074 var options = { 27075 credentials: 'same-origin', 27076 headers: { 27077 'Accept': 'application/json' 27078 } 27079 }; 27080 var request; 27081 27082 if (typeof window.fetch !== 'function') { 27083 return Promise.resolve(null); 27084 } 27085 27086 if (typeof window.AbortController === 'function') { 27087 controller = new window.AbortController(); 27088 options.signal = controller.signal; 27089 timeoutId = window.setTimeout(function () { 27090 controller.abort(); 27091 }, REQUEST_TIMEOUT_MS); 27092 } 27093 27094 try { 27095 request = window.fetch( 27096 '/web_api/products/' + encodeURIComponent(productId), 27097 options 27098 ); 27099 } catch (error) { 27100 if (timeoutId !== null) { 27101 window.clearTimeout(timeoutId); 27102 } 27103 return Promise.resolve(null); 27104 } 27105 27106 return request.then(function (response) { 27107 if (!response.ok) { 27108 throw new Error('HTTP ' + response.status); 27109 } 27110 return response.json(); 27111 }).then(function (payload) { 27112 return ruleFromPayload(payload, productId); 27113 }).then(function (rule) { 27114 if (timeoutId !== null) { 27115 window.clearTimeout(timeoutId); 27116 } 27117 return rule; 27118 }, function () { 27119 if (timeoutId !== null) { 27120 window.clearTimeout(timeoutId); 27121 } 27122 27123 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 27124 return null; 27125 }); 27126 } 27127 27128 function finishJob(job, rule) { 27129 cache.set(job.productId, rule); 27130 pending.delete(job.productId); 27131 activeRequests -= 1; 27132 job.resolve(rule); 27133 pumpQueue(); 27134 } 27135 27136 function pumpQueue() { 27137 var job; 27138 27139 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 27140 job = queue.shift(); 27141 activeRequests += 1; 27142 27143 (function (currentJob) { 27144 requestRule(currentJob.productId).then(function (rule) { 27145 finishJob(currentJob, rule); 27146 }, function () { 27147 finishJob(currentJob, null); 27148 }); 27149 }(job)); 27150 } 27151 } 27152 27153 function getRule(productId) { 27154 var resolver; 27155 var promise; 27156 27157 if (cache.has(productId)) { 27158 return Promise.resolve(cache.get(productId)); 27159 } 27160 27161 if (pending.has(productId)) { 27162 return pending.get(productId); 27163 } 27164 27165 promise = new Promise(function (resolve) { 27166 resolver = resolve; 27167 }); 27168 27169 pending.set(productId, promise); 27170 queue.push({ 27171 productId: productId, 27172 resolve: resolver 27173 }); 27174 pumpQueue(); 27175 27176 return promise; 27177 } 27178 27179 function findBadge(card) { 27180 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 27181 } 27182 27183 function clearBadge(card) { 27184 var badge = findBadge(card); 27185 var image = card.querySelector('.product-header > .w-100 > .image'); 27186 27187 if (badge && badge.parentNode) { 27188 badge.parentNode.removeChild(badge); 27189 } 27190 27191 if (image) { 27192 image.classList.remove(HOST_CLASS); 27193 } 27194 27195 card.removeAttribute('data-farmacam-prescription-level'); 27196 } 27197 27198 function applyBadge(card, productId, rule) { 27199 var image; 27200 var badge; 27201 27202 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 27203 return false;
27204 } 27205 27206 clearBadge(card); 27207 27208 if (!rule) { 27209 return true; 27210 } 27211 27212 image = card.querySelector('.product-header > .w-100 > .image'); 27213 if (!image) { 27214 return false; 27215 } 27216 27217 badge = document.createElement('span'); 27218 badge.className = BADGE_CLASS; 27219 badge.setAttribute('data-farmacam-generated', 'true'); 27220 badge.setAttribute('data-farmacam-prescription-level', rule.level); 27221 badge.setAttribute('role', 'note'); 27222 badge.textContent = rule.text; 27223 27224 image.classList.add(HOST_CLASS); 27225 image.insertBefore(badge, image.firstChild); 27226 card.setAttribute('data-farmacam-prescription-level', rule.level); 27227 27228 return true; 27229 } 27230 27231 function processCard(card) { 27232 var productId; 27233 var previousState; 27234 var currentState; 27235 27236 if (!card || card.nodeType !== 1) { 27237 return; 27238 } 27239 27240 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 27241 return; 27242 } 27243 27244 productId = normalizeProductId(card.getAttribute('data-id')); 27245 previousState = cardStates.get(card); 27246 27247 if (!productId) { 27248 clearBadge(card); 27249 cardStates.delete(card); 27250 return; 27251 } 27252 27253 if ( 27254 previousState && 27255 previousState.productId === productId && 27256 previousState.status === 'loading' 27257 ) { 27258 return; 27259 } 27260 27261 if ( 27262 previousState && 27263 previousState.productId === productId && 27264 previousState.status === 'processed' 27265 ) { 27266 if (!previousState.rule || findBadge(card)) { 27267 return; 27268 } 27269 } 27270 27271 if (!previousState || previousState.productId !== productId) { 27272 clearBadge(card); 27273 } 27274 27275 currentState = { 27276 productId: productId, 27277 status: 'loading', 27278 rule: null 27279 }; 27280 cardStates.set(card, currentState); 27281 27282 getRule(productId).then(function (rule) { 27283 var applied; 27284 27285 if ( 27286 cardStates.get(card) !== currentState || 27287 normalizeProductId(card.getAttribute('data-id')) !== productId 27288 ) { 27289 return; 27290 } 27291 27292 applied = applyBadge(card, productId, rule); 27293 currentState.rule = rule; 27294 currentState.status = applied ? 'processed' : 'waiting-image'; 27295 }); 27296 } 27297 27298 function scan(root) { 27299 var cards; 27300 var index; 27301 27302 if (!root) { 27303 return; 27304 } 27305 27306 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 27307 processCard(root); 27308 } 27309 27310 if (!root.querySelectorAll) { 27311 return; 27312 } 27313 27314 cards = root.querySelectorAll(CARD_SELECTOR); 27315 for (index = 0; index < cards.length; index += 1) { 27316 processCard(cards[index]); 27317 } 27318 } 27319 27320 function startObserver() { 27321 var observer; 27322 27323 if (!window.MutationObserver || !document.documentElement) { 27324 return; 27325 } 27326 27327 observer = new MutationObserver(function (mutations) { 27328 var mutationIndex; 27329 var nodeIndex; 27330 var mutation; 27331 var node; 27332 var ownerCard; 27333 27334 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 27335 mutation = mutations[mutationIndex]; 27336 27337 if (mutation.type === 'attributes') { 27338 processCard(mutation.target); 27339 continue; 27340 } 27341 27342 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 27343 node = mutation.addedNodes[nodeIndex]; 27344 if (node.nodeType !== 1) { 27345 continue; 27346 } 27347 27348 scan(node); 27349 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 27350 if (ownerCard) { 27351 processCard(ownerCard); 27352 } 27353 } 27354 } 27355 }); 27356 27357 observer.observe(document.documentElement, { 27358 childList: true, 27359 subtree: true, 27360 attributes: true, 27361 attributeFilter: ['data-id'] 27362 }); 27363 27364 window[GLOBAL_KEY].observer = observer; 27365 } 27366 27367 window[GLOBAL_KEY] = { 27368 version: '1.1.0', 27369 cache: cache, 27370 pending: pending, 27371 cardStates: cardStates, 27372 scan: scan, 27373 processCard: processCard, 27374 observer: null 27375 }; 27376 27377 document.addEventListener('load', onTrayScriptLoad, true); 27378 attachTrayAjaxCache(); 27379 injectStyles(); 27380 scan(document); 27381 startObserver(); 27382 27383 if (document.readyState === 'loading') { 27384 document.addEventListener('DOMContentLoaded', function () { 27385 attachTrayAjaxCache(); 27386 scan(document); 27387 }); 27388 } 27389}(window, document)); 27390</script>
27390 27391 </div> 27392 <div 27393 class="swiper-slide fixWidthBoxProduct item"> 27394 27395 27396 27397 27398<div class="product animate open_cart" 27399 data-id="125242046" 27400 data-farmacam-related-categories="," 27401 data-ga4-id="125242046" 27402 data-ga4-name="Composto para Saúde Óssea e Articular" 27403 data-ga4-price="529.00" 27404 data-ga4-brand="Farmacam" 27405 data-ga4-category="Tipo de Produto;Manipulados;" 27406 > 27407 27408 <div class="product-header"> 27409 27410 <div class="w-100"> 27411 27412 27413 27414 27415 27416 27417 27418 <div class="product-tags-circle"> 27419 27420 <div class="tag-circle discount"> 27421 <span>Frete Grátis</span> 27422 </div> 27423 27424 27425 27426 </div> 27427 27428 27429 27430 <div class="product-tags has-free-shipping-tag" data-tags-count="0"> 27431 27432 27433 27434 27435 27436 </div> 27437 27438 27439 27440 <div class="image "> 27441 27442 <a title="Composto para Saúde Óssea e Articular" href="https://www.farmacam.com.br/composto-para-saude-ossea-e-articular" class="space-image"> 27443 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/composto_para_saude_ossea_e_articular_125242046_1_dcdbd8caff9cf96d7c5ca65faba0dd0c.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/composto_para_saude_ossea_e_articular_125242046_1_dcdbd8caff9cf96d7c5ca65faba0dd0c.png" alt="Composto para Saúde Óssea e Articular"> 27444 </a> 27445 27446 </div> 27447 27448 27449 27450 27451 27452 </div> 27453 27454 </div> 27455 27456 <div class="product-body"> 27457 27458 <a title="Composto para Saúde Óssea e Articular" class="product-info" href="https://www.farmacam.com.br/composto-para-saude-ossea-e-articular"> 27459 27460 <div class="product-info-dados"> 27461 27462 27463 27464 27465 27466 27467 <div class="product-name"> 27468 Composto para Saúde Óssea e Articular 27469 </div> 27470 27471 27472 27473 <div class="product-price"> 27474 27475 27476 27477 27478 27479 <span class="product-has-variants text-center"> 27480 A partir de 27481 </span> 27482 27483<div class="price display-cash"> 27484 27485 27486 <span class="current-price "> 27487 R$ 529,00 27488 27489 </span> 27490 27491 <span class="product-installments"> 27492 27493 </span> 27494 27495</div> 27496 </div> 27497 27498 </div> 27499 27500 </a> 27501 27502 </div> 27503 27504 27505 <div class="product-footer"> 27506 27507 27508 <div class="w-100"> 27509 27510 27511 27512<div class="product-rating-catalog"> 27513 27514 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 27515 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 27516 </svg> 27517 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 27518 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 27519 </svg> 27520 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 27521 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 27522 </svg> 27523 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 27524 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 27525 </svg> 27526 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 27527 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 27528 </svg> 27529 27530 27531 <a title="Ver avaliações de Composto para Saúde Óssea e Articular" href="https://www.farmacam.com.br/composto-para-saude-ossea-e-articular#comments" class="total"> 27532 Seja o primeiro 27533 </a> 27534 27535 </div> 27536 27537 27538 27539 <div class="config-variacoes-compra"> 27540 27541 27542 27543 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125242046"> 27544 <input type="hidden" name="product_id" value="125242046"> 27545 <input type="hidden" name="without_stock_sale" value=""> 27546 27547 <input type="hidden" name="variacao" id="selectedVariant" value=""> 27548 <input type="hidden" name="estoque" value=""> 27549 27550 27551 27552 <ul class="paleta-cores"> 27553 27554 27555 27556 27557 27558 27559 27560 27561 27562 27563 27564 27565 27566 27567 27568 27569 27570 27571 27572 27573 27574 27575 27576 27577 27578 27579 27580 27581 27582 27583 27584 27585 27586 27587 27588 27589 27590 27591 27592 27593 27594 27595 27596 27597 27598 27599 27600 27601 27602 27603 27604 27605 27606 27607 27608 27609 27610 27611 27612 27613 27614 27615 27616 27617 27618 27619 27620 27621 27622 27623 27624 27625 27626 27627 27628 27629 27630 27631 27632 27633 27634 27635 27636 27637 27638 27639 27640 27641 27642 27643 27644 27645 27646 27647 27648 27649 27650 27651 27652 27653 27654 27655 27656 27657 27658 27659 27660 27661 27662 27663 27664 27665 27666 27667 27668 27669 27670 27671 27672 27673 27674 27675 27676 27677 27678 27679 27680 27681 27682 27683 27684 27685 27686 27687 27688 27689 27690 27691 27692 27693 27694 27695 27696 27697 27698 27699 27700 27701 27702 27703 27704 27705 27706 27707 27708 27709 27710 27711 27712 27713 27714 27715 27716 27717 27718 27719 27720 27721 27722 27723 27724 27725 27726 27727 27728 27729 27730 27731 27732 27733 27734 27735 27736 27737 27738 27739 27740 27741 27742 27743 27744 27745 27746 27747 27748 27749 27750 27751 27752 27753 27754 27755 27756 27757 27758 27759 27760 27761 27762 27763 27764 27765 27766 27767 27768 27769 27770 27771 27772 27773 27774 27775 27776 27777 27778 27779 27780 27781 27782 27783 27784 27785 27786 27787 27788 27789 27790 27791 27792 27793 27794 27795 27796 27797 27798 27799 27800 27801 27802 27803 27804 27805 27806 27807 27808 27809 27810 27811 27812 27813 27814 27815 27816 27817 27818 27819 27820
27820 27821 27822 27823 27824 27825 27826 27827 27828 27829 27830 27831 27832 27833 27834 27835 27836 27837 27838 27839 27840 27841 27842 27843 27844 27845 27846 27847 27848 27849 27850 27851 27852 27853 27854 27855 27856 27857 27858 27859 27860 27861 27862 27863 27864 27865 27866 27867 27868 27869 27870 27871 27872 27873 27874 27875 27876 27877 27878 27879 27880 27881 </ul> 27882 <!-- Fim Paleta de Cores --> 27883 27884 27885 27886 27887 27888 27889 27890 27891 27892 27893 27894 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 27895 <option disabled="disabled" value=""> 27896 Selecione 27897 </option> 27898 27899 27900 <option value="22996" produto="125242046" estoque="10000">30 Sachês</option> 27901 27902 27903 27904 27905 <option value="22998" produto="125242046" estoque="10000">60 Sachês</option> 27906 27907 27908 </select> 27909 27910 27911 <select class="select-cor" style="display: none;" title="Campo Cor"> 27912 </select> 27913 27914 27915 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 27916 <div class="alerta-estoque"></div> 27917 <div class="alerta-adicionado"></div> 27918 27919 <div class="acao-compra"> 27920 27921 <div class="quantidade-box"> 27922 <div class="quantidade-box-input"> 27923 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
27923stoque="20000" /> 27924 </div> 27925 <div class="quantidade-box-controles"> 27926 <div class="quantidade-box-controles-itens" data-item="mais"> 27927 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 27928 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 27929 </svg> 27930 </div> 27931 <div class="quantidade-box-controles-itens" data-item="menus"> 27932 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 27933 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 27934 </svg> 27935 </div> 27936 </div> 27937 </div> 27938 27939 27940 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125242046"> 27941 27942 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 27943 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 27944 27945 27946 27947 27948 27949 27950 <!-- Cesta de Compras --> 27951 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 27952 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 27953 </svg> 27954 27955 27956 27957 Comprar 27958 27959 27960 </button> 27961 <!-- </form> --> 27962 27963 </div> 27964 27965</div> 27966 27967 27968 </div> 27969 27970 </div> 27971 27972 27973</div> 27974
27975<script> 27976(function (window, document) { 27977 'use strict'; 27978 27979 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 27980 27981 if (window[GLOBAL_KEY]) { 27982 return; 27983 } 27984 27985 if (!window.Map || !window.WeakMap || !window.Promise) { 27986 return; 27987 } 27988 27989 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 27990 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 27991 '#vitrine-personalizada .product[data-id]'; 27992 var BADGE_CLASS = 'farmacam-prescription-badge'; 27993 var HOST_CLASS = 'farmacam-prescription-badge-host'; 27994 var MAX_CONCURRENT_REQUESTS = 6; 27995 var REQUEST_TIMEOUT_MS = 12000; 27996 27997 var rules = { 27998 '294': { 27999 level: '294', 28000 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 28001 }, 28002 '296': { 28003 level: '296', 28004 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 28005 }, 28006 '298': { 28007 level: '298', 28008 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 28009 } 28010 }; 28011 28012 var cache = new Map(); 28013 var pending = new Map(); 28014 var cardStates = new WeakMap(); 28015 var queue = []; 28016 var activeRequests = 0; 28017 var trayAjaxHooked = false; 28018 28019 function injectStyles() { 28020 if (document.getElementById('farmacam-prescription-cards-style')) { 28021 return; 28022 } 28023 28024 var style = document.createElement('style'); 28025 style.id = 'farmacam-prescription-cards-style'; 28026 style.textContent = [ 28027 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 28028 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 28029 'position:absolute!important;', 28030 'top:52px!important;', 28031 'left:10px!important;', 28032 'z-index:999!important;', 28033 'display:block!important;', 28034 'max-width:calc(100% - 20px)!important;', 28035 'box-sizing:border-box!important;', 28036 'padding:8px 12px!important;', 28037 'color:#fff!important;', 28038 'font-family:inherit!important;', 28039 'font-size:13px!important;', 28040 'font-weight:900!important;', 28041 'line-height:1.15!important;', 28042 'text-align:center!important;', 28043 'text-transform:uppercase!important;', 28044 'letter-spacing:.3px!important;', 28045 'white-space:normal!important;', 28046 'overflow-wrap:break-word!important;', 28047 'border-radius:3px!important;', 28048 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 28049 'pointer-events:none!important;', 28050 '}', 28051 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 28052 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 28053 'background:#d70008!important;', 28054 '}', 28055 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 28056 'background:#000!important;', 28057 '}', 28058 '@media (max-width:767px){', 28059 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 28060 'top:42px!important;', 28061 'left:6px!important;', 28062 'max-width:calc(100% - 12px)!important;', 28063 'padding:6px 8px!important;', 28064 'font-size:10px!important;', 28065 '}', 28066 '}' 28067 ].join(''); 28068 28069 (document.head || document.documentElement).appendChild(style); 28070 } 28071 28072 function normalizeProductId(value) { 28073 var id = String(value == null ? '' : value).trim(); 28074 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 28075 } 28076 28077 function classifyRelatedCategories(relatedCategories) { 28078 var found = { 28079 '292': false, 28080 '294': false, 28081 '296': false, 28082 '298': false 28083 }; 28084 28085 function inspect(value, depth) { 28086 var index; 28087 var normalized; 28088 28089 if (value == null || depth > 8) { 28090 return; 28091 } 28092 28093 if (Array.isArray(value)) { 28094 for (index = 0; index < value.length; index += 1) { 28095 inspect(value[index], depth + 1); 28096 } 28097 return; 28098 } 28099 28100 if (typeof value === 'object') { 28101 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 28102 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 28103 inspect(value.id, depth + 1); 28104 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 28105 inspect(value.category_id, depth + 1); 28106 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 28107 inspect(value.Category, depth + 1); 28108 } 28109 return; 28110 } 28111 28112 if (typeof value !== 'string' && typeof value !== 'number') { 28113 return; 28114 } 28115 normalized = normalizeProductId(value); 28116 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 28117 found[normalized] = true; 28118 } 28119 } 28120 28121 inspect(relatedCategories, 0); 28122 28123 if (found['298']) { 28124 return rules['298']; 28125 } 28126 if (found['296']) { 28127 return rules['296']; 28128 } 28129 if (found['294']) { 28130 return rules['294']; 28131 } 28132 28133 // 292 e qualquer classificacao desconhecida ficam sem tarja. 28134 return null; 28135 } 28136 28137 function ruleFromPayload(payload, productId) { 28138 var product = payload && payload.Product; 28139 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 28140 return null; 28141 } 28142 return classifyRelatedCategories(product && product.related_categories); 28143 } 28144 28145 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 28146 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 28147 function attachTrayAjaxCache() { 28148 var jq = window.jQuery; 28149 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 28150 return; 28151 } 28152
28153 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 28154 var url; 28155 var match; 28156 var productId; 28157 var payload; 28158 try { 28159 url = new URL(settings.url, window.location.href); 28160 if (url.origin !== window.location.origin) { 28161 return; 28162 } 28163 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 28164 if (!match) { 28165 return; 28166 } 28167 productId = normalizeProductId(match[1]); 28168 if (!cache.has(productId) && !pending.has(productId)) { 28169 payload = data || xhr.responseJSON; 28170 if (typeof payload === 'string') { 28171 payload = JSON.parse(payload); 28172 } 28173 if (!payload || !payload.Product || 28174 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 28175 return; 28176 } 28177 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 28178 return; 28179 } 28180 cache.set(productId, ruleFromPayload(payload, productId)); 28181 } 28182 } catch (error) { 28183 // Respostas de outras integracoes nao interferem nas tarjas. 28184 } 28185 }); 28186 28187 trayAjaxHooked = true; 28188 document.removeEventListener('load', onTrayScriptLoad, true); 28189 } 28190 28191 function onTrayScriptLoad(event) { 28192 if (event.target && event.target.tagName === 'SCRIPT') { 28193 attachTrayAjaxCache(); 28194 } 28195 } 28196 28197 function requestRule(productId) { 28198 var controller = null; 28199 var timeoutId = null; 28200 var options = { 28201 credentials: 'same-origin', 28202 headers: { 28203 'Accept': 'application/json' 28204 } 28205 }; 28206 var request; 28207 28208 if (typeof window.fetch !== 'function') { 28209 return Promise.resolve(null); 28210 } 28211 28212 if (typeof window.AbortController === 'function') { 28213 controller = new window.AbortController(); 28214 options.signal = controller.signal; 28215 timeoutId = window.setTimeout(function () { 28216 controller.abort(); 28217 }, REQUEST_TIMEOUT_MS); 28218 } 28219 28220 try { 28221 request = window.fetch( 28222 '/web_api/products/' + encodeURIComponent(productId), 28223 options 28224 ); 28225 } catch (error) { 28226 if (timeoutId !== null) { 28227 window.clearTimeout(timeoutId); 28228 } 28229 return Promise.resolve(null); 28230 } 28231 28232 return request.then(function (response) { 28233 if (!response.ok) { 28234 throw new Error('HTTP ' + response.status); 28235 } 28236 return response.json(); 28237 }).then(function (payload) { 28238 return ruleFromPayload(payload, productId); 28239 }).then(function (rule) { 28240 if (timeoutId !== null) { 28241 window.clearTimeout(timeoutId); 28242 } 28243 return rule; 28244 }, function () { 28245 if (timeoutId !== null) { 28246 window.clearTimeout(timeoutId); 28247 } 28248 28249 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 28250 return null; 28251 }); 28252 } 28253 28254 function finishJob(job, rule) { 28255 cache.set(job.productId, rule); 28256 pending.delete(job.productId); 28257 activeRequests -= 1; 28258 job.resolve(rule); 28259 pumpQueue(); 28260 } 28261 28262 function pumpQueue() { 28263 var job; 28264 28265 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 28266 job = queue.shift(); 28267 activeRequests += 1; 28268 28269 (function (currentJob) { 28270 requestRule(currentJob.productId).then(function (rule) { 28271 finishJob(currentJob, rule); 28272 }, function () { 28273 finishJob(currentJob, null); 28274 }); 28275 }(job)); 28276 } 28277 } 28278 28279 function getRule(productId) { 28280 var resolver; 28281 var promise; 28282 28283 if (cache.has(productId)) { 28284 return Promise.resolve(cache.get(productId)); 28285 } 28286 28287 if (pending.has(productId)) { 28288 return pending.get(productId); 28289 } 28290 28291 promise = new Promise(function (resolve) { 28292 resolver = resolve; 28293 }); 28294 28295 pending.set(productId, promise); 28296 queue.push({ 28297 productId: productId, 28298 resolve: resolver 28299 }); 28300 pumpQueue(); 28301 28302 return promise; 28303 } 28304 28305 function findBadge(card) { 28306 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 28307 } 28308 28309 function clearBadge(card) { 28310 var badge = findBadge(card); 28311 var image = card.querySelector('.product-header > .w-100 > .image'); 28312 28313 if (badge && badge.parentNode) { 28314 badge.parentNode.removeChild(badge); 28315 } 28316 28317 if (image) { 28318 image.classList.remove(HOST_CLASS); 28319 } 28320 28321 card.removeAttribute('data-farmacam-prescription-level'); 28322 } 28323 28324 function applyBadge(card, productId, rule) { 28325 var image; 28326 var badge; 28327 28328 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 28329 return false;
28330 } 28331 28332 clearBadge(card); 28333 28334 if (!rule) { 28335 return true; 28336 } 28337 28338 image = card.querySelector('.product-header > .w-100 > .image'); 28339 if (!image) { 28340 return false; 28341 } 28342 28343 badge = document.createElement('span'); 28344 badge.className = BADGE_CLASS; 28345 badge.setAttribute('data-farmacam-generated', 'true'); 28346 badge.setAttribute('data-farmacam-prescription-level', rule.level); 28347 badge.setAttribute('role', 'note'); 28348 badge.textContent = rule.text; 28349 28350 image.classList.add(HOST_CLASS); 28351 image.insertBefore(badge, image.firstChild); 28352 card.setAttribute('data-farmacam-prescription-level', rule.level); 28353 28354 return true; 28355 } 28356 28357 function processCard(card) { 28358 var productId; 28359 var previousState; 28360 var currentState; 28361 28362 if (!card || card.nodeType !== 1) { 28363 return; 28364 } 28365 28366 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 28367 return; 28368 } 28369 28370 productId = normalizeProductId(card.getAttribute('data-id')); 28371 previousState = cardStates.get(card); 28372 28373 if (!productId) { 28374 clearBadge(card); 28375 cardStates.delete(card); 28376 return; 28377 } 28378 28379 if ( 28380 previousState && 28381 previousState.productId === productId && 28382 previousState.status === 'loading' 28383 ) { 28384 return; 28385 } 28386 28387 if ( 28388 previousState && 28389 previousState.productId === productId && 28390 previousState.status === 'processed' 28391 ) { 28392 if (!previousState.rule || findBadge(card)) { 28393 return; 28394 } 28395 } 28396 28397 if (!previousState || previousState.productId !== productId) { 28398 clearBadge(card); 28399 } 28400 28401 currentState = { 28402 productId: productId, 28403 status: 'loading', 28404 rule: null 28405 }; 28406 cardStates.set(card, currentState); 28407 28408 getRule(productId).then(function (rule) { 28409 var applied; 28410 28411 if ( 28412 cardStates.get(card) !== currentState || 28413 normalizeProductId(card.getAttribute('data-id')) !== productId 28414 ) { 28415 return; 28416 } 28417 28418 applied = applyBadge(card, productId, rule); 28419 currentState.rule = rule; 28420 currentState.status = applied ? 'processed' : 'waiting-image'; 28421 }); 28422 } 28423 28424 function scan(root) { 28425 var cards; 28426 var index; 28427 28428 if (!root) { 28429 return; 28430 } 28431 28432 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 28433 processCard(root); 28434 } 28435 28436 if (!root.querySelectorAll) { 28437 return; 28438 } 28439 28440 cards = root.querySelectorAll(CARD_SELECTOR); 28441 for (index = 0; index < cards.length; index += 1) { 28442 processCard(cards[index]); 28443 } 28444 } 28445 28446 function startObserver() { 28447 var observer; 28448 28449 if (!window.MutationObserver || !document.documentElement) { 28450 return; 28451 } 28452 28453 observer = new MutationObserver(function (mutations) { 28454 var mutationIndex; 28455 var nodeIndex; 28456 var mutation; 28457 var node; 28458 var ownerCard; 28459 28460 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 28461 mutation = mutations[mutationIndex]; 28462 28463 if (mutation.type === 'attributes') { 28464 processCard(mutation.target); 28465 continue; 28466 } 28467 28468 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 28469 node = mutation.addedNodes[nodeIndex]; 28470 if (node.nodeType !== 1) { 28471 continue; 28472 } 28473 28474 scan(node); 28475 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 28476 if (ownerCard) { 28477 processCard(ownerCard); 28478 } 28479 } 28480 } 28481 }); 28482 28483 observer.observe(document.documentElement, { 28484 childList: true, 28485 subtree: true, 28486 attributes: true, 28487 attributeFilter: ['data-id'] 28488 }); 28489 28490 window[GLOBAL_KEY].observer = observer; 28491 } 28492 28493 window[GLOBAL_KEY] = { 28494 version: '1.1.0', 28495 cache: cache, 28496 pending: pending, 28497 cardStates: cardStates, 28498 scan: scan, 28499 processCard: processCard, 28500 observer: null 28501 }; 28502 28503 document.addEventListener('load', onTrayScriptLoad, true); 28504 attachTrayAjaxCache(); 28505 injectStyles(); 28506 scan(document); 28507 startObserver(); 28508 28509 if (document.readyState === 'loading') { 28510 document.addEventListener('DOMContentLoaded', function () { 28511 attachTrayAjaxCache(); 28512 scan(document); 28513 }); 28514 } 28515}(window, document)); 28516</script>
28516 28517 </div> 28518 <div 28519 class="swiper-slide fixWidthBoxProduct item"> 28520 28521 28522 28523 28524<div class="product animate open_cart" 28525 data-id="125245458" 28526 data-farmacam-related-categories="," 28527 data-ga4-id="125245458" 28528 data-ga4-name="Clascoterona 5% - Solução Capilar - com TrichoSol" 28529 data-ga4-price="749.00" 28530 data-ga4-brand="Farmacam" 28531 data-ga4-category="Tipo de Produto;Manipulados;" 28532 > 28533 28534 <div class="product-header"> 28535 28536 <div class="w-100"> 28537 28538 28539 28540 28541 28542 28543 28544 <div class="product-tags-circle"> 28545 28546 <div class="tag-circle discount"> 28547 <span>Frete Grátis</span> 28548 </div> 28549 28550 28551 <div class="tag-circle discount tag-icone tag-icone2"> 28552 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 28553 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 28554 </svg> 28555 <span>Destaque</span> 28556 </div> 28557 28558 </div> 28559 28560 28561 28562 <div class="product-tags has-free-shipping-tag" data-tags-count="1"> 28563 28564 28565 28566 28567 28568 </div> 28569 28570 28571 28572 <div class="image has-image "> 28573 28574 <a title="Clascoterona 5% - Solução Capilar - com TrichoSol" href="https://www.farmacam.com.br/clascoterona-5-com-trichosol" class="space-image"> 28575 <img class="hori-quad imagem-produto-1 " src="https://images.tcdn.com.br/img/img_prod/1063102/clascoterona_5_solucao_capilar_com_trichosol_125245458_1_aedb3e22630ebf775798651bd65edcd0.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/clascoterona_5_solucao_capilar_com_trichosol_125245458_1_aedb3e22630ebf775798651bd65edcd0.png" alt="Clascoterona 5% - Solução Capilar - com TrichoSol"> 28576 <img class="imagem-produto-2" src="https://images.tcdn.com.br/img/img_prod/1063102/clascoterona_5_soluo_capilar_com_trichosol_2_20260202090522_2126d2f78531.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/clascoterona_5_soluo_capilar_com_trichosol_2_20260202090522_2126d2f78531.png" alt="Clascoterona 5% - Solução Capilar - com TrichoSol"> 28577 </a> 28578 28579 </div> 28580 28581 28582 28583 28584 28585 </div> 28586 28587 </div> 28588 28589 <div class="product-body"> 28590 28591 <a title="Clascoterona 5% - Solução Capilar - com TrichoSol" class="product-info" href="https://www.farmacam.com.br/clascoterona-5-com-trichosol"> 28592 28593 <div class="product-info-dados"> 28594 28595 28596 28597 28598 28599 28600 <div class="product-name"> 28601 Clascoterona 5% - Solução Capilar - com TrichoSol 28602 </div> 28603 28604 28605 28606 <div class="product-price"> 28607 28608 28609 28610 28611 28612 <span class="product-has-variants text-center"> 28613 A partir de 28614 </span> 28615 28616<div class="price display-cash"> 28617 28618 28619 <span class="current-price "> 28620 R$ 749,00 28621 28622 </span> 28623 28624 <span class="product-installments"> 28625 28626 </span> 28627 28628</div> 28629 </div> 28630 28631 </div> 28632 28633 </a> 28634 28635 </div> 28636 28637 28638 <div class="product-footer"> 28639 28640 28641 <div class="w-100"> 28642 28643 28644 28645<div class="product-rating-catalog"> 28646 28647 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 28648 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 28649 </svg> 28650 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 28651 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 28652 </svg> 28653 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 28654 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 28655 </svg> 28656 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 28657 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 28658 </svg> 28659 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 28660 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 28661 </svg> 28662 28663 28664 <a title="Ver avaliações de Clascoterona 5% - Solução Capilar - com TrichoSol" href="https://www.farmacam.com.br/clascoterona-5-com-trichosol#comments" class="total"> 28665 Seja o primeiro 28666 </a> 28667 28668 </div> 28669 28670 28671 28672 <div class="config-variacoes-compra"> 28673 28674 28675 28676 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245458"> 28677 <input type="hidden" name="product_id" value="125245458"> 28678 <input type="hidden" name="without_stock_sale" value=""> 28679 28680 <input type="hidden" name="variacao" id="selectedVariant" value=""> 28681 <input type="hidden" name="estoque" value=""> 28682 28683 28684 28685 <ul class="paleta-cores"> 28686 28687 28688 28689 28690 28691 28692 28693 28694 28695 28696 28697 28698 28699 28700 28701 28702 28703 28704 28705 28706 28707 28708 28709 28710 28711 28712 28713 28714 28715 28716 28717 28718 28719 28720 28721 28722 28723 28724 28725 28726 28727 28728 28729 28730 28731 28732 28733 28734 28735 28736 28737 28738 28739 28740 28741 28742 28743 28744 28745 28746 28747 28748 28749 28750 28751 28752 28753 28754 28755 28756 28757 28758 28759 28760 28761 28762 28763 28764 28765 28766 28767 28768 28769 28770 28771 28772 28773 28774 28775 28776 28777 28778 28779 28780 28781 28782 28783 28784 28785 28786 28787 28788 28789 28790 28791 28792 28793 28794 28795 28796 28797 28798 28799 28800 28801 28802 28803 28804 28805 28806 28807 28808 28809 28810 28811 28812 28813 28814 28815 28816 28817 28818 28819 28820 28821 28822 28823 28824 28825 28826 28827 28828 28829 28830 28831 28832 28833 28834 28835 28836 28837 28838 28839 28840 28841 28842 28843 28844 28845 28846 28847 28848 28849 28850 28851 28852 28853 28854 28855 28856 28857 28858 28859 28860 28861 28862 28863 28864 28865 28866 28867 28868 28869 28870 28871 28872 28873 28874 28875 28876 28877 28878 28879 28880 28881 28882 28883 28884 28885 28886 28887 28888 28889 28890 28891 28892 28893 28894 28895 28896 28897 28898 28899 28900 28901 28902 28903 28904 28905 28906 28907 28908 28909 28910 28911 28912 28913 28914 28915 28916 28917 28918 28919 28920 28921 28922 28923 28924
28924 28925 28926 28927 28928 28929 28930 28931 28932 28933 28934 28935 28936 28937 28938 28939 28940 28941 28942 28943 28944 28945 28946 28947 28948 28949 28950 28951 28952 28953 28954 28955 28956 28957 28958 28959 28960 28961 28962 28963 28964 28965 28966 28967 28968 28969 28970 28971 28972 28973 28974 28975 28976 28977 28978 28979 28980 28981 28982 28983 28984 28985 28986 28987 28988 28989 28990 28991 28992 28993 28994 28995 28996 28997 28998 28999 29000 29001 29002 29003 29004 29005 29006 29007 29008 29009 29010 29011 29012 29013 29014 29015 29016 29017 29018 29019 29020 29021 29022 29023 29024 29025 29026 29027 29028 29029 29030 29031 29032 29033 29034 29035 29036 29037 29038 29039 29040 29041 29042 29043 29044 29045 29046 29047 29048 29049 29050 29051 29052 29053 29054 29055 29056 29057 29058 29059 29060 29061 29062 29063 29064 29065 29066 29067 29068 29069 29070 29071 29072 29073 29074 29075 29076 29077 29078 29079 29080 29081 29082 29083 29084 29085 29086 29087 29088 29089 29090 29091 29092 29093 29094 29095 29096 29097 29098 29099 29100 29101 29102 29103 29104 29105 29106 29107 29108 29109 29110 29111 29112 </ul> 29113 <!-- Fim Paleta de Cores --> 29114 29115 29116 29117 29118 29119 29120 29121 29122 29123 29124 29125 29126 29127 29128 29129 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 29130 <option disabled="disabled" value=""> 29131 Selecione 29132 </option> 29133 29134 29135 <option value="29118" produto="125245458" estoque="9990">20 ml</option> 29136 29137 29138 29139 29140 <option value="29120" produto="125245458" estoque="9998">30 ml</option> 29141 29142 29143 29144 29145 <option value="29122" produto="125245458" estoque="9992">50 ml</option> 29146 29147 29148 </select> 29149 29150 29151 <select class="select-cor" style="display: none;" title="Campo Cor"> 29152
29152 </select> 29153 29154 29155 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 29156 <div class="alerta-estoque"></div> 29157 <div class="alerta-adicionado"></div> 29158 29159 <div class="acao-compra"> 29160 29161 <div class="quantidade-box"> 29162 <div class="quantidade-box-input"> 29163 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
29163stoque="29980" /> 29164 </div> 29165 <div class="quantidade-box-controles"> 29166 <div class="quantidade-box-controles-itens" data-item="mais"> 29167 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 29168 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 29169 </svg> 29170 </div> 29171 <div class="quantidade-box-controles-itens" data-item="menus"> 29172 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 29173 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 29174 </svg> 29175 </div> 29176 </div> 29177 </div> 29178 29179 29180 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245458"> 29181 29182 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 29183 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 29184 29185 29186 29187 29188 29189 29190 <!-- Cesta de Compras --> 29191 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 29192 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 29193 </svg> 29194 29195 29196 29197 Comprar 29198 29199 29200 </button> 29201 <!-- </form> --> 29202 29203 </div> 29204 29205</div> 29206 29207 29208 </div> 29209 29210 </div> 29211 29212 29213</div> 29214
29215<script> 29216(function (window, document) { 29217 'use strict'; 29218 29219 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 29220 29221 if (window[GLOBAL_KEY]) { 29222 return; 29223 } 29224 29225 if (!window.Map || !window.WeakMap || !window.Promise) { 29226 return; 29227 } 29228 29229 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 29230 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 29231 '#vitrine-personalizada .product[data-id]'; 29232 var BADGE_CLASS = 'farmacam-prescription-badge'; 29233 var HOST_CLASS = 'farmacam-prescription-badge-host'; 29234 var MAX_CONCURRENT_REQUESTS = 6; 29235 var REQUEST_TIMEOUT_MS = 12000; 29236 29237 var rules = { 29238 '294': { 29239 level: '294', 29240 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 29241 }, 29242 '296': { 29243 level: '296', 29244 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 29245 }, 29246 '298': { 29247 level: '298', 29248 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 29249 } 29250 }; 29251 29252 var cache = new Map(); 29253 var pending = new Map(); 29254 var cardStates = new WeakMap(); 29255 var queue = []; 29256 var activeRequests = 0; 29257 var trayAjaxHooked = false; 29258 29259 function injectStyles() { 29260 if (document.getElementById('farmacam-prescription-cards-style')) { 29261 return; 29262 } 29263 29264 var style = document.createElement('style'); 29265 style.id = 'farmacam-prescription-cards-style'; 29266 style.textContent = [ 29267 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 29268 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 29269 'position:absolute!important;', 29270 'top:52px!important;', 29271 'left:10px!important;', 29272 'z-index:999!important;', 29273 'display:block!important;', 29274 'max-width:calc(100% - 20px)!important;', 29275 'box-sizing:border-box!important;', 29276 'padding:8px 12px!important;', 29277 'color:#fff!important;', 29278 'font-family:inherit!important;', 29279 'font-size:13px!important;', 29280 'font-weight:900!important;', 29281 'line-height:1.15!important;', 29282 'text-align:center!important;', 29283 'text-transform:uppercase!important;', 29284 'letter-spacing:.3px!important;', 29285 'white-space:normal!important;', 29286 'overflow-wrap:break-word!important;', 29287 'border-radius:3px!important;', 29288 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 29289 'pointer-events:none!important;', 29290 '}', 29291 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 29292 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 29293 'background:#d70008!important;', 29294 '}', 29295 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 29296 'background:#000!important;', 29297 '}', 29298 '@media (max-width:767px){', 29299 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 29300 'top:42px!important;', 29301 'left:6px!important;', 29302 'max-width:calc(100% - 12px)!important;', 29303 'padding:6px 8px!important;', 29304 'font-size:10px!important;', 29305 '}', 29306 '}' 29307 ].join(''); 29308 29309 (document.head || document.documentElement).appendChild(style); 29310 } 29311 29312 function normalizeProductId(value) { 29313 var id = String(value == null ? '' : value).trim(); 29314 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 29315 } 29316 29317 function classifyRelatedCategories(relatedCategories) { 29318 var found = { 29319 '292': false, 29320 '294': false, 29321 '296': false, 29322 '298': false 29323 }; 29324 29325 function inspect(value, depth) { 29326 var index; 29327 var normalized; 29328 29329 if (value == null || depth > 8) { 29330 return; 29331 } 29332 29333 if (Array.isArray(value)) { 29334 for (index = 0; index < value.length; index += 1) { 29335 inspect(value[index], depth + 1); 29336 } 29337 return; 29338 } 29339 29340 if (typeof value === 'object') { 29341 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 29342 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 29343 inspect(value.id, depth + 1); 29344 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 29345 inspect(value.category_id, depth + 1); 29346 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 29347 inspect(value.Category, depth + 1); 29348 } 29349 return; 29350 } 29351 29352 if (typeof value !== 'string' && typeof value !== 'number') { 29353 return; 29354 } 29355 normalized = normalizeProductId(value); 29356 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 29357 found[normalized] = true; 29358 } 29359 } 29360 29361 inspect(relatedCategories, 0); 29362 29363 if (found['298']) { 29364 return rules['298']; 29365 } 29366 if (found['296']) { 29367 return rules['296']; 29368 } 29369 if (found['294']) { 29370 return rules['294']; 29371 } 29372 29373 // 292 e qualquer classificacao desconhecida ficam sem tarja. 29374 return null; 29375 } 29376 29377 function ruleFromPayload(payload, productId) { 29378 var product = payload && payload.Product; 29379 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 29380 return null; 29381 } 29382 return classifyRelatedCategories(product && product.related_categories); 29383 } 29384 29385 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 29386 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 29387 function attachTrayAjaxCache() { 29388 var jq = window.jQuery; 29389 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 29390 return; 29391 } 29392
29393 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 29394 var url; 29395 var match; 29396 var productId; 29397 var payload; 29398 try { 29399 url = new URL(settings.url, window.location.href); 29400 if (url.origin !== window.location.origin) { 29401 return; 29402 } 29403 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 29404 if (!match) { 29405 return; 29406 } 29407 productId = normalizeProductId(match[1]); 29408 if (!cache.has(productId) && !pending.has(productId)) { 29409 payload = data || xhr.responseJSON; 29410 if (typeof payload === 'string') { 29411 payload = JSON.parse(payload); 29412 } 29413 if (!payload || !payload.Product || 29414 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 29415 return; 29416 } 29417 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 29418 return; 29419 } 29420 cache.set(productId, ruleFromPayload(payload, productId)); 29421 } 29422 } catch (error) { 29423 // Respostas de outras integracoes nao interferem nas tarjas. 29424 } 29425 }); 29426 29427 trayAjaxHooked = true; 29428 document.removeEventListener('load', onTrayScriptLoad, true); 29429 } 29430 29431 function onTrayScriptLoad(event) { 29432 if (event.target && event.target.tagName === 'SCRIPT') { 29433 attachTrayAjaxCache(); 29434 } 29435 } 29436 29437 function requestRule(productId) { 29438 var controller = null; 29439 var timeoutId = null; 29440 var options = { 29441 credentials: 'same-origin', 29442 headers: { 29443 'Accept': 'application/json' 29444 } 29445 }; 29446 var request; 29447 29448 if (typeof window.fetch !== 'function') { 29449 return Promise.resolve(null); 29450 } 29451 29452 if (typeof window.AbortController === 'function') { 29453 controller = new window.AbortController(); 29454 options.signal = controller.signal; 29455 timeoutId = window.setTimeout(function () { 29456 controller.abort(); 29457 }, REQUEST_TIMEOUT_MS); 29458 } 29459 29460 try { 29461 request = window.fetch( 29462 '/web_api/products/' + encodeURIComponent(productId), 29463 options 29464 ); 29465 } catch (error) { 29466 if (timeoutId !== null) { 29467 window.clearTimeout(timeoutId); 29468 } 29469 return Promise.resolve(null); 29470 } 29471 29472 return request.then(function (response) { 29473 if (!response.ok) { 29474 throw new Error('HTTP ' + response.status); 29475 } 29476 return response.json(); 29477 }).then(function (payload) { 29478 return ruleFromPayload(payload, productId); 29479 }).then(function (rule) { 29480 if (timeoutId !== null) { 29481 window.clearTimeout(timeoutId); 29482 } 29483 return rule; 29484 }, function () { 29485 if (timeoutId !== null) { 29486 window.clearTimeout(timeoutId); 29487 } 29488 29489 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 29490 return null; 29491 }); 29492 } 29493 29494 function finishJob(job, rule) { 29495 cache.set(job.productId, rule); 29496 pending.delete(job.productId); 29497 activeRequests -= 1; 29498 job.resolve(rule); 29499 pumpQueue(); 29500 } 29501 29502 function pumpQueue() { 29503 var job; 29504 29505 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 29506 job = queue.shift(); 29507 activeRequests += 1; 29508 29509 (function (currentJob) { 29510 requestRule(currentJob.productId).then(function (rule) { 29511 finishJob(currentJob, rule); 29512 }, function () { 29513 finishJob(currentJob, null); 29514 }); 29515 }(job)); 29516 } 29517 } 29518 29519 function getRule(productId) { 29520 var resolver; 29521 var promise; 29522 29523 if (cache.has(productId)) { 29524 return Promise.resolve(cache.get(productId)); 29525 } 29526 29527 if (pending.has(productId)) { 29528 return pending.get(productId); 29529 } 29530 29531 promise = new Promise(function (resolve) { 29532 resolver = resolve; 29533 }); 29534 29535 pending.set(productId, promise); 29536 queue.push({ 29537 productId: productId, 29538 resolve: resolver 29539 }); 29540 pumpQueue(); 29541 29542 return promise; 29543 } 29544 29545 function findBadge(card) { 29546 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 29547 } 29548 29549 function clearBadge(card) { 29550 var badge = findBadge(card); 29551 var image = card.querySelector('.product-header > .w-100 > .image'); 29552 29553 if (badge && badge.parentNode) { 29554 badge.parentNode.removeChild(badge); 29555 } 29556 29557 if (image) { 29558 image.classList.remove(HOST_CLASS); 29559 } 29560 29561 card.removeAttribute('data-farmacam-prescription-level'); 29562 } 29563 29564 function applyBadge(card, productId, rule) { 29565 var image; 29566 var badge; 29567 29568 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 29569 return false;
29570 } 29571 29572 clearBadge(card); 29573 29574 if (!rule) { 29575 return true; 29576 } 29577 29578 image = card.querySelector('.product-header > .w-100 > .image'); 29579 if (!image) { 29580 return false; 29581 } 29582 29583 badge = document.createElement('span'); 29584 badge.className = BADGE_CLASS; 29585 badge.setAttribute('data-farmacam-generated', 'true'); 29586 badge.setAttribute('data-farmacam-prescription-level', rule.level); 29587 badge.setAttribute('role', 'note'); 29588 badge.textContent = rule.text; 29589 29590 image.classList.add(HOST_CLASS); 29591 image.insertBefore(badge, image.firstChild); 29592 card.setAttribute('data-farmacam-prescription-level', rule.level); 29593 29594 return true; 29595 } 29596 29597 function processCard(card) { 29598 var productId; 29599 var previousState; 29600 var currentState; 29601 29602 if (!card || card.nodeType !== 1) { 29603 return; 29604 } 29605 29606 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 29607 return; 29608 } 29609 29610 productId = normalizeProductId(card.getAttribute('data-id')); 29611 previousState = cardStates.get(card); 29612 29613 if (!productId) { 29614 clearBadge(card); 29615 cardStates.delete(card); 29616 return; 29617 } 29618 29619 if ( 29620 previousState && 29621 previousState.productId === productId && 29622 previousState.status === 'loading' 29623 ) { 29624 return; 29625 } 29626 29627 if ( 29628 previousState && 29629 previousState.productId === productId && 29630 previousState.status === 'processed' 29631 ) { 29632 if (!previousState.rule || findBadge(card)) { 29633 return; 29634 } 29635 } 29636 29637 if (!previousState || previousState.productId !== productId) { 29638 clearBadge(card); 29639 } 29640 29641 currentState = { 29642 productId: productId, 29643 status: 'loading', 29644 rule: null 29645 }; 29646 cardStates.set(card, currentState); 29647 29648 getRule(productId).then(function (rule) { 29649 var applied; 29650 29651 if ( 29652 cardStates.get(card) !== currentState || 29653 normalizeProductId(card.getAttribute('data-id')) !== productId 29654 ) { 29655 return; 29656 } 29657 29658 applied = applyBadge(card, productId, rule); 29659 currentState.rule = rule; 29660 currentState.status = applied ? 'processed' : 'waiting-image'; 29661 }); 29662 } 29663 29664 function scan(root) { 29665 var cards; 29666 var index; 29667 29668 if (!root) { 29669 return; 29670 } 29671 29672 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 29673 processCard(root); 29674 } 29675 29676 if (!root.querySelectorAll) { 29677 return; 29678 } 29679 29680 cards = root.querySelectorAll(CARD_SELECTOR); 29681 for (index = 0; index < cards.length; index += 1) { 29682 processCard(cards[index]); 29683 } 29684 } 29685 29686 function startObserver() { 29687 var observer; 29688 29689 if (!window.MutationObserver || !document.documentElement) { 29690 return; 29691 } 29692 29693 observer = new MutationObserver(function (mutations) { 29694 var mutationIndex; 29695 var nodeIndex; 29696 var mutation; 29697 var node; 29698 var ownerCard; 29699 29700 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 29701 mutation = mutations[mutationIndex]; 29702 29703 if (mutation.type === 'attributes') { 29704 processCard(mutation.target); 29705 continue; 29706 } 29707 29708 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 29709 node = mutation.addedNodes[nodeIndex]; 29710 if (node.nodeType !== 1) { 29711 continue; 29712 } 29713 29714 scan(node); 29715 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 29716 if (ownerCard) { 29717 processCard(ownerCard); 29718 } 29719 } 29720 } 29721 }); 29722 29723 observer.observe(document.documentElement, { 29724 childList: true, 29725 subtree: true, 29726 attributes: true, 29727 attributeFilter: ['data-id'] 29728 }); 29729 29730 window[GLOBAL_KEY].observer = observer; 29731 } 29732 29733 window[GLOBAL_KEY] = { 29734 version: '1.1.0', 29735 cache: cache, 29736 pending: pending, 29737 cardStates: cardStates, 29738 scan: scan, 29739 processCard: processCard, 29740 observer: null 29741 }; 29742 29743 document.addEventListener('load', onTrayScriptLoad, true); 29744 attachTrayAjaxCache(); 29745 injectStyles(); 29746 scan(document); 29747 startObserver(); 29748 29749 if (document.readyState === 'loading') { 29750 document.addEventListener('DOMContentLoaded', function () { 29751 attachTrayAjaxCache(); 29752 scan(document); 29753 }); 29754 } 29755}(window, document)); 29756</script>
29756 29757 </div> 29758 <div 29759 class="swiper-slide fixWidthBoxProduct item"> 29760 29761 29762 29763 29764<div class="product animate open_cart" 29765 data-id="125240762" 29766 data-farmacam-related-categories="," 29767 data-ga4-id="125240762" 29768 data-ga4-name="Kit força muscular - Whey protein mochaccino + Creatina" 29769 data-ga4-price="501.00" 29770 data-ga4-brand="Farmacam" 29771 data-ga4-category="Tipo de Produto;Manipulados;" 29772 > 29773 29774 <div class="product-header"> 29775 29776 <div class="w-100"> 29777 29778 29779 29780 29781 29782 29783 29784 29785 29786 29787 <div class="image "> 29788 29789 <a title="Kit força muscular - Whey protein mochaccino + Creatina" href="https://www.farmacam.com.br/kit-forca-muscular-whey-protein-mochaccino-creatina" class="space-image"> 29790 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/kit_forca_muscular_whey_protein_mochaccino_creatina_125240762_1_df3beb8f2fb5173ea1e486a1f7bb93aa.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/kit_forca_muscular_whey_protein_mochaccino_creatina_125240762_1_df3beb8f2fb5173ea1e486a1f7bb93aa.png" alt="Kit força muscular - Whey protein mochaccino + Creatina"> 29791 </a> 29792 29793 </div> 29794 29795 29796 29797 29798 29799 </div> 29800 29801 </div> 29802 29803 <div class="product-body"> 29804 29805 <a title="Kit força muscular - Whey protein mochaccino + Creatina" class="product-info" href="https://www.farmacam.com.br/kit-forca-muscular-whey-protein-mochaccino-creatina"> 29806 29807 <div class="product-info-dados"> 29808 29809 29810 29811 29812 29813 29814 <div class="product-name"> 29815 Kit força muscular - Whey protein mochaccino + Creatina 29816 </div> 29817 29818 29819 29820 <div class="product-price"> 29821 29822 <span class="product-message"> 29823 Esse acabou :( 29824 <span class="notify-me"> 29825 Avise-me quando chegar 29826 <i class="icon icon-arrow-right"></i> 29827 </span> 29828</span> 29829 </div> 29830 29831 </div> 29832 29833 </a> 29834 29835 </div> 29836 29837 29838 <div class="product-footer"> 29839 29840 29841 </div> 29842 29843 29844</div> 29845
29846<script> 29847(function (window, document) { 29848 'use strict'; 29849 29850 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 29851 29852 if (window[GLOBAL_KEY]) { 29853 return; 29854 } 29855 29856 if (!window.Map || !window.WeakMap || !window.Promise) { 29857 return; 29858 } 29859 29860 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 29861 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 29862 '#vitrine-personalizada .product[data-id]'; 29863 var BADGE_CLASS = 'farmacam-prescription-badge'; 29864 var HOST_CLASS = 'farmacam-prescription-badge-host'; 29865 var MAX_CONCURRENT_REQUESTS = 6; 29866 var REQUEST_TIMEOUT_MS = 12000; 29867 29868 var rules = { 29869 '294': { 29870 level: '294', 29871 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 29872 }, 29873 '296': { 29874 level: '296', 29875 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 29876 }, 29877 '298': { 29878 level: '298', 29879 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 29880 } 29881 }; 29882 29883 var cache = new Map(); 29884 var pending = new Map(); 29885 var cardStates = new WeakMap(); 29886 var queue = []; 29887 var activeRequests = 0; 29888 var trayAjaxHooked = false; 29889 29890 function injectStyles() { 29891 if (document.getElementById('farmacam-prescription-cards-style')) { 29892 return; 29893 } 29894 29895 var style = document.createElement('style'); 29896 style.id = 'farmacam-prescription-cards-style'; 29897 style.textContent = [ 29898 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 29899 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 29900 'position:absolute!important;', 29901 'top:52px!important;', 29902 'left:10px!important;', 29903 'z-index:999!important;', 29904 'display:block!important;', 29905 'max-width:calc(100% - 20px)!important;', 29906 'box-sizing:border-box!important;', 29907 'padding:8px 12px!important;', 29908 'color:#fff!important;', 29909 'font-family:inherit!important;', 29910 'font-size:13px!important;', 29911 'font-weight:900!important;', 29912 'line-height:1.15!important;', 29913 'text-align:center!important;', 29914 'text-transform:uppercase!important;', 29915 'letter-spacing:.3px!important;', 29916 'white-space:normal!important;', 29917 'overflow-wrap:break-word!important;', 29918 'border-radius:3px!important;', 29919 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 29920 'pointer-events:none!important;', 29921 '}', 29922 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 29923 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 29924 'background:#d70008!important;', 29925 '}', 29926 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 29927 'background:#000!important;', 29928 '}', 29929 '@media (max-width:767px){', 29930 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 29931 'top:42px!important;', 29932 'left:6px!important;', 29933 'max-width:calc(100% - 12px)!important;', 29934 'padding:6px 8px!important;', 29935 'font-size:10px!important;', 29936 '}', 29937 '}' 29938 ].join(''); 29939 29940 (document.head || document.documentElement).appendChild(style); 29941 } 29942 29943 function normalizeProductId(value) { 29944 var id = String(value == null ? '' : value).trim(); 29945 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 29946 } 29947 29948 function classifyRelatedCategories(relatedCategories) { 29949 var found = { 29950 '292': false, 29951 '294': false, 29952 '296': false, 29953 '298': false 29954 }; 29955 29956 function inspect(value, depth) { 29957 var index; 29958 var normalized; 29959 29960 if (value == null || depth > 8) { 29961 return; 29962 } 29963 29964 if (Array.isArray(value)) { 29965 for (index = 0; index < value.length; index += 1) { 29966 inspect(value[index], depth + 1); 29967 } 29968 return; 29969 } 29970 29971 if (typeof value === 'object') { 29972 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 29973 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 29974 inspect(value.id, depth + 1); 29975 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 29976 inspect(value.category_id, depth + 1); 29977 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 29978 inspect(value.Category, depth + 1); 29979 } 29980 return; 29981 } 29982 29983 if (typeof value !== 'string' && typeof value !== 'number') { 29984 return; 29985 } 29986 normalized = normalizeProductId(value); 29987 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 29988 found[normalized] = true; 29989 } 29990 } 29991 29992 inspect(relatedCategories, 0); 29993 29994 if (found['298']) { 29995 return rules['298']; 29996 } 29997 if (found['296']) { 29998 return rules['296']; 29999 } 30000 if (found['294']) { 30001 return rules['294']; 30002 } 30003 30004 // 292 e qualquer classificacao desconhecida ficam sem tarja. 30005 return null; 30006 } 30007 30008 function ruleFromPayload(payload, productId) { 30009 var product = payload && payload.Product; 30010 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 30011 return null; 30012 } 30013 return classifyRelatedCategories(product && product.related_categories); 30014 } 30015 30016 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 30017 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 30018 function attachTrayAjaxCache() { 30019 var jq = window.jQuery; 30020 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 30021 return; 30022 } 30023
30024 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 30025 var url; 30026 var match; 30027 var productId; 30028 var payload; 30029 try { 30030 url = new URL(settings.url, window.location.href); 30031 if (url.origin !== window.location.origin) { 30032 return; 30033 } 30034 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 30035 if (!match) { 30036 return; 30037 } 30038 productId = normalizeProductId(match[1]); 30039 if (!cache.has(productId) && !pending.has(productId)) { 30040 payload = data || xhr.responseJSON; 30041 if (typeof payload === 'string') { 30042 payload = JSON.parse(payload); 30043 } 30044 if (!payload || !payload.Product || 30045 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 30046 return; 30047 } 30048 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 30049 return; 30050 } 30051 cache.set(productId, ruleFromPayload(payload, productId)); 30052 } 30053 } catch (error) { 30054 // Respostas de outras integracoes nao interferem nas tarjas. 30055 } 30056 }); 30057 30058 trayAjaxHooked = true; 30059 document.removeEventListener('load', onTrayScriptLoad, true); 30060 } 30061 30062 function onTrayScriptLoad(event) { 30063 if (event.target && event.target.tagName === 'SCRIPT') { 30064 attachTrayAjaxCache(); 30065 } 30066 } 30067 30068 function requestRule(productId) { 30069 var controller = null; 30070 var timeoutId = null; 30071 var options = { 30072 credentials: 'same-origin', 30073 headers: { 30074 'Accept': 'application/json' 30075 } 30076 }; 30077 var request; 30078 30079 if (typeof window.fetch !== 'function') { 30080 return Promise.resolve(null); 30081 } 30082 30083 if (typeof window.AbortController === 'function') { 30084 controller = new window.AbortController(); 30085 options.signal = controller.signal; 30086 timeoutId = window.setTimeout(function () { 30087 controller.abort(); 30088 }, REQUEST_TIMEOUT_MS); 30089 } 30090 30091 try { 30092 request = window.fetch( 30093 '/web_api/products/' + encodeURIComponent(productId), 30094 options 30095 ); 30096 } catch (error) { 30097 if (timeoutId !== null) { 30098 window.clearTimeout(timeoutId); 30099 } 30100 return Promise.resolve(null); 30101 } 30102 30103 return request.then(function (response) { 30104 if (!response.ok) { 30105 throw new Error('HTTP ' + response.status); 30106 } 30107 return response.json(); 30108 }).then(function (payload) { 30109 return ruleFromPayload(payload, productId); 30110 }).then(function (rule) { 30111 if (timeoutId !== null) { 30112 window.clearTimeout(timeoutId); 30113 } 30114 return rule; 30115 }, function () { 30116 if (timeoutId !== null) { 30117 window.clearTimeout(timeoutId); 30118 } 30119 30120 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 30121 return null; 30122 }); 30123 } 30124 30125 function finishJob(job, rule) { 30126 cache.set(job.productId, rule); 30127 pending.delete(job.productId); 30128 activeRequests -= 1; 30129 job.resolve(rule); 30130 pumpQueue(); 30131 } 30132 30133 function pumpQueue() { 30134 var job; 30135 30136 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 30137 job = queue.shift(); 30138 activeRequests += 1; 30139 30140 (function (currentJob) { 30141 requestRule(currentJob.productId).then(function (rule) { 30142 finishJob(currentJob, rule); 30143 }, function () { 30144 finishJob(currentJob, null); 30145 }); 30146 }(job)); 30147 } 30148 } 30149 30150 function getRule(productId) { 30151 var resolver; 30152 var promise; 30153 30154 if (cache.has(productId)) { 30155 return Promise.resolve(cache.get(productId)); 30156 } 30157 30158 if (pending.has(productId)) { 30159 return pending.get(productId); 30160 } 30161 30162 promise = new Promise(function (resolve) { 30163 resolver = resolve; 30164 }); 30165 30166 pending.set(productId, promise); 30167 queue.push({ 30168 productId: productId, 30169 resolve: resolver 30170 }); 30171 pumpQueue(); 30172 30173 return promise; 30174 } 30175 30176 function findBadge(card) { 30177 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 30178 } 30179 30180 function clearBadge(card) { 30181 var badge = findBadge(card); 30182 var image = card.querySelector('.product-header > .w-100 > .image'); 30183 30184 if (badge && badge.parentNode) { 30185 badge.parentNode.removeChild(badge); 30186 } 30187 30188 if (image) { 30189 image.classList.remove(HOST_CLASS); 30190 } 30191 30192 card.removeAttribute('data-farmacam-prescription-level'); 30193 } 30194 30195 function applyBadge(card, productId, rule) { 30196 var image; 30197 var badge; 30198 30199 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 30200 return false;
30201 } 30202 30203 clearBadge(card); 30204 30205 if (!rule) { 30206 return true; 30207 } 30208 30209 image = card.querySelector('.product-header > .w-100 > .image'); 30210 if (!image) { 30211 return false; 30212 } 30213 30214 badge = document.createElement('span'); 30215 badge.className = BADGE_CLASS; 30216 badge.setAttribute('data-farmacam-generated', 'true'); 30217 badge.setAttribute('data-farmacam-prescription-level', rule.level); 30218 badge.setAttribute('role', 'note'); 30219 badge.textContent = rule.text; 30220 30221 image.classList.add(HOST_CLASS); 30222 image.insertBefore(badge, image.firstChild); 30223 card.setAttribute('data-farmacam-prescription-level', rule.level); 30224 30225 return true; 30226 } 30227 30228 function processCard(card) { 30229 var productId; 30230 var previousState; 30231 var currentState; 30232 30233 if (!card || card.nodeType !== 1) { 30234 return; 30235 } 30236 30237 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 30238 return; 30239 } 30240 30241 productId = normalizeProductId(card.getAttribute('data-id')); 30242 previousState = cardStates.get(card); 30243 30244 if (!productId) { 30245 clearBadge(card); 30246 cardStates.delete(card); 30247 return; 30248 } 30249 30250 if ( 30251 previousState && 30252 previousState.productId === productId && 30253 previousState.status === 'loading' 30254 ) { 30255 return; 30256 } 30257 30258 if ( 30259 previousState && 30260 previousState.productId === productId && 30261 previousState.status === 'processed' 30262 ) { 30263 if (!previousState.rule || findBadge(card)) { 30264 return; 30265 } 30266 } 30267 30268 if (!previousState || previousState.productId !== productId) { 30269 clearBadge(card); 30270 } 30271 30272 currentState = { 30273 productId: productId, 30274 status: 'loading', 30275 rule: null 30276 }; 30277 cardStates.set(card, currentState); 30278 30279 getRule(productId).then(function (rule) { 30280 var applied; 30281 30282 if ( 30283 cardStates.get(card) !== currentState || 30284 normalizeProductId(card.getAttribute('data-id')) !== productId 30285 ) { 30286 return; 30287 } 30288 30289 applied = applyBadge(card, productId, rule); 30290 currentState.rule = rule; 30291 currentState.status = applied ? 'processed' : 'waiting-image'; 30292 }); 30293 } 30294 30295 function scan(root) { 30296 var cards; 30297 var index; 30298 30299 if (!root) { 30300 return; 30301 } 30302 30303 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 30304 processCard(root); 30305 } 30306 30307 if (!root.querySelectorAll) { 30308 return; 30309 } 30310 30311 cards = root.querySelectorAll(CARD_SELECTOR); 30312 for (index = 0; index < cards.length; index += 1) { 30313 processCard(cards[index]); 30314 } 30315 } 30316 30317 function startObserver() { 30318 var observer; 30319 30320 if (!window.MutationObserver || !document.documentElement) { 30321 return; 30322 } 30323 30324 observer = new MutationObserver(function (mutations) { 30325 var mutationIndex; 30326 var nodeIndex; 30327 var mutation; 30328 var node; 30329 var ownerCard; 30330 30331 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 30332 mutation = mutations[mutationIndex]; 30333 30334 if (mutation.type === 'attributes') { 30335 processCard(mutation.target); 30336 continue; 30337 } 30338 30339 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 30340 node = mutation.addedNodes[nodeIndex]; 30341 if (node.nodeType !== 1) { 30342 continue; 30343 } 30344 30345 scan(node); 30346 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 30347 if (ownerCard) { 30348 processCard(ownerCard); 30349 } 30350 } 30351 } 30352 }); 30353 30354 observer.observe(document.documentElement, { 30355 childList: true, 30356 subtree: true, 30357 attributes: true, 30358 attributeFilter: ['data-id'] 30359 }); 30360 30361 window[GLOBAL_KEY].observer = observer; 30362 } 30363 30364 window[GLOBAL_KEY] = { 30365 version: '1.1.0', 30366 cache: cache, 30367 pending: pending, 30368 cardStates: cardStates, 30369 scan: scan, 30370 processCard: processCard, 30371 observer: null 30372 }; 30373 30374 document.addEventListener('load', onTrayScriptLoad, true); 30375 attachTrayAjaxCache(); 30376 injectStyles(); 30377 scan(document); 30378 startObserver(); 30379 30380 if (document.readyState === 'loading') { 30381 document.addEventListener('DOMContentLoaded', function () { 30382 attachTrayAjaxCache(); 30383 scan(document); 30384 }); 30385 } 30386}(window, document)); 30387</script>
30387 30388 </div> 30389 <div 30390 class="swiper-slide fixWidthBoxProduct item"> 30391 30392 30393 30394 30395<div class="product animate open_cart" 30396 data-id="125240760" 30397 data-farmacam-related-categories="," 30398 data-ga4-id="125240760" 30399 data-ga4-name="Kit força muscular - Whey protein frutas vermelhas + Creatina" 30400 data-ga4-price="501.00" 30401 data-ga4-brand="Farmacam" 30402 data-ga4-category="Tipo de Produto;Manipulados;" 30403 > 30404 30405 <div class="product-header"> 30406 30407 <div class="w-100"> 30408 30409 30410 30411 30412 30413 30414 30415 30416 30417 30418 <div class="image "> 30419 30420 <a title="Kit força muscular - Whey protein frutas vermelhas + Creatina" href="https://www.farmacam.com.br/kit-forca-muscular-whey-protein-frutas-vermelhas-creatina" class="space-image"> 30421 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/kit_forca_muscular_whey_protein_frutas_vermelhas_creatina_125240760_1_64fa6aa644b5e6eb0e086e8548e5b326.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/kit_forca_muscular_whey_protein_frutas_vermelhas_creatina_125240760_1_64fa6aa644b5e6eb0e086e8548e5b326.png" alt="Kit força muscular - Whey protein frutas vermelhas + Creatina"> 30422 </a> 30423 30424 </div> 30425 30426 30427 30428 30429 30430 </div> 30431 30432 </div> 30433 30434 <div class="product-body"> 30435 30436 <a title="Kit força muscular - Whey protein frutas vermelhas + Creatina" class="product-info" href="https://www.farmacam.com.br/kit-forca-muscular-whey-protein-frutas-vermelhas-creatina"> 30437 30438 <div class="product-info-dados"> 30439 30440 30441 30442 30443 30444 30445 <div class="product-name"> 30446 Kit força muscular - Whey protein frutas vermelhas + Creatina 30447 </div> 30448 30449 30450 30451 <div class="product-price"> 30452 30453 <span class="product-message"> 30454 Esse acabou :( 30455 <span class="notify-me"> 30456 Avise-me quando chegar 30457 <i class="icon icon-arrow-right"></i> 30458 </span> 30459</span> 30460 </div> 30461 30462 </div> 30463 30464 </a> 30465 30466 </div> 30467 30468 30469 <div class="product-footer"> 30470 30471 30472 </div> 30473 30474 30475</div> 30476
30477<script> 30478(function (window, document) { 30479 'use strict'; 30480 30481 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 30482 30483 if (window[GLOBAL_KEY]) { 30484 return; 30485 } 30486 30487 if (!window.Map || !window.WeakMap || !window.Promise) { 30488 return; 30489 } 30490 30491 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 30492 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 30493 '#vitrine-personalizada .product[data-id]'; 30494 var BADGE_CLASS = 'farmacam-prescription-badge'; 30495 var HOST_CLASS = 'farmacam-prescription-badge-host'; 30496 var MAX_CONCURRENT_REQUESTS = 6; 30497 var REQUEST_TIMEOUT_MS = 12000; 30498 30499 var rules = { 30500 '294': { 30501 level: '294', 30502 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 30503 }, 30504 '296': { 30505 level: '296', 30506 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 30507 }, 30508 '298': { 30509 level: '298', 30510 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 30511 } 30512 }; 30513 30514 var cache = new Map(); 30515 var pending = new Map(); 30516 var cardStates = new WeakMap(); 30517 var queue = []; 30518 var activeRequests = 0; 30519 var trayAjaxHooked = false; 30520 30521 function injectStyles() { 30522 if (document.getElementById('farmacam-prescription-cards-style')) { 30523 return; 30524 } 30525 30526 var style = document.createElement('style'); 30527 style.id = 'farmacam-prescription-cards-style'; 30528 style.textContent = [ 30529 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 30530 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 30531 'position:absolute!important;', 30532 'top:52px!important;', 30533 'left:10px!important;', 30534 'z-index:999!important;', 30535 'display:block!important;', 30536 'max-width:calc(100% - 20px)!important;', 30537 'box-sizing:border-box!important;', 30538 'padding:8px 12px!important;', 30539 'color:#fff!important;', 30540 'font-family:inherit!important;', 30541 'font-size:13px!important;', 30542 'font-weight:900!important;', 30543 'line-height:1.15!important;', 30544 'text-align:center!important;', 30545 'text-transform:uppercase!important;', 30546 'letter-spacing:.3px!important;', 30547 'white-space:normal!important;', 30548 'overflow-wrap:break-word!important;', 30549 'border-radius:3px!important;', 30550 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 30551 'pointer-events:none!important;', 30552 '}', 30553 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 30554 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 30555 'background:#d70008!important;', 30556 '}', 30557 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 30558 'background:#000!important;', 30559 '}', 30560 '@media (max-width:767px){', 30561 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 30562 'top:42px!important;', 30563 'left:6px!important;', 30564 'max-width:calc(100% - 12px)!important;', 30565 'padding:6px 8px!important;', 30566 'font-size:10px!important;', 30567 '}', 30568 '}' 30569 ].join(''); 30570 30571 (document.head || document.documentElement).appendChild(style); 30572 } 30573 30574 function normalizeProductId(value) { 30575 var id = String(value == null ? '' : value).trim(); 30576 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 30577 } 30578 30579 function classifyRelatedCategories(relatedCategories) { 30580 var found = { 30581 '292': false, 30582 '294': false, 30583 '296': false, 30584 '298': false 30585 }; 30586 30587 function inspect(value, depth) { 30588 var index; 30589 var normalized; 30590 30591 if (value == null || depth > 8) { 30592 return; 30593 } 30594 30595 if (Array.isArray(value)) { 30596 for (index = 0; index < value.length; index += 1) { 30597 inspect(value[index], depth + 1); 30598 } 30599 return; 30600 } 30601 30602 if (typeof value === 'object') { 30603 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 30604 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 30605 inspect(value.id, depth + 1); 30606 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 30607 inspect(value.category_id, depth + 1); 30608 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 30609 inspect(value.Category, depth + 1); 30610 } 30611 return; 30612 } 30613 30614 if (typeof value !== 'string' && typeof value !== 'number') { 30615 return; 30616 } 30617 normalized = normalizeProductId(value); 30618 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 30619 found[normalized] = true; 30620 } 30621 } 30622 30623 inspect(relatedCategories, 0); 30624 30625 if (found['298']) { 30626 return rules['298']; 30627 } 30628 if (found['296']) { 30629 return rules['296']; 30630 } 30631 if (found['294']) { 30632 return rules['294']; 30633 } 30634 30635 // 292 e qualquer classificacao desconhecida ficam sem tarja. 30636 return null; 30637 } 30638 30639 function ruleFromPayload(payload, productId) { 30640 var product = payload && payload.Product; 30641 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 30642 return null; 30643 } 30644 return classifyRelatedCategories(product && product.related_categories); 30645 } 30646 30647 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 30648 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 30649 function attachTrayAjaxCache() { 30650 var jq = window.jQuery; 30651 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 30652 return; 30653 } 30654
30655 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 30656 var url; 30657 var match; 30658 var productId; 30659 var payload; 30660 try { 30661 url = new URL(settings.url, window.location.href); 30662 if (url.origin !== window.location.origin) { 30663 return; 30664 } 30665 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 30666 if (!match) { 30667 return; 30668 } 30669 productId = normalizeProductId(match[1]); 30670 if (!cache.has(productId) && !pending.has(productId)) { 30671 payload = data || xhr.responseJSON; 30672 if (typeof payload === 'string') { 30673 payload = JSON.parse(payload); 30674 } 30675 if (!payload || !payload.Product || 30676 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 30677 return; 30678 } 30679 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 30680 return; 30681 } 30682 cache.set(productId, ruleFromPayload(payload, productId)); 30683 } 30684 } catch (error) { 30685 // Respostas de outras integracoes nao interferem nas tarjas. 30686 } 30687 }); 30688 30689 trayAjaxHooked = true; 30690 document.removeEventListener('load', onTrayScriptLoad, true); 30691 } 30692 30693 function onTrayScriptLoad(event) { 30694 if (event.target && event.target.tagName === 'SCRIPT') { 30695 attachTrayAjaxCache(); 30696 } 30697 } 30698 30699 function requestRule(productId) { 30700 var controller = null; 30701 var timeoutId = null; 30702 var options = { 30703 credentials: 'same-origin', 30704 headers: { 30705 'Accept': 'application/json' 30706 } 30707 }; 30708 var request; 30709 30710 if (typeof window.fetch !== 'function') { 30711 return Promise.resolve(null); 30712 } 30713 30714 if (typeof window.AbortController === 'function') { 30715 controller = new window.AbortController(); 30716 options.signal = controller.signal; 30717 timeoutId = window.setTimeout(function () { 30718 controller.abort(); 30719 }, REQUEST_TIMEOUT_MS); 30720 } 30721 30722 try { 30723 request = window.fetch( 30724 '/web_api/products/' + encodeURIComponent(productId), 30725 options 30726 ); 30727 } catch (error) { 30728 if (timeoutId !== null) { 30729 window.clearTimeout(timeoutId); 30730 } 30731 return Promise.resolve(null); 30732 } 30733 30734 return request.then(function (response) { 30735 if (!response.ok) { 30736 throw new Error('HTTP ' + response.status); 30737 } 30738 return response.json(); 30739 }).then(function (payload) { 30740 return ruleFromPayload(payload, productId); 30741 }).then(function (rule) { 30742 if (timeoutId !== null) { 30743 window.clearTimeout(timeoutId); 30744 } 30745 return rule; 30746 }, function () { 30747 if (timeoutId !== null) { 30748 window.clearTimeout(timeoutId); 30749 } 30750 30751 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 30752 return null; 30753 }); 30754 } 30755 30756 function finishJob(job, rule) { 30757 cache.set(job.productId, rule); 30758 pending.delete(job.productId); 30759 activeRequests -= 1; 30760 job.resolve(rule); 30761 pumpQueue(); 30762 } 30763 30764 function pumpQueue() { 30765 var job; 30766 30767 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 30768 job = queue.shift(); 30769 activeRequests += 1; 30770 30771 (function (currentJob) { 30772 requestRule(currentJob.productId).then(function (rule) { 30773 finishJob(currentJob, rule); 30774 }, function () { 30775 finishJob(currentJob, null); 30776 }); 30777 }(job)); 30778 } 30779 } 30780 30781 function getRule(productId) { 30782 var resolver; 30783 var promise; 30784 30785 if (cache.has(productId)) { 30786 return Promise.resolve(cache.get(productId)); 30787 } 30788 30789 if (pending.has(productId)) { 30790 return pending.get(productId); 30791 } 30792 30793 promise = new Promise(function (resolve) { 30794 resolver = resolve; 30795 }); 30796 30797 pending.set(productId, promise); 30798 queue.push({ 30799 productId: productId, 30800 resolve: resolver 30801 }); 30802 pumpQueue(); 30803 30804 return promise; 30805 } 30806 30807 function findBadge(card) { 30808 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 30809 } 30810 30811 function clearBadge(card) { 30812 var badge = findBadge(card); 30813 var image = card.querySelector('.product-header > .w-100 > .image'); 30814 30815 if (badge && badge.parentNode) { 30816 badge.parentNode.removeChild(badge); 30817 } 30818 30819 if (image) { 30820 image.classList.remove(HOST_CLASS); 30821 } 30822 30823 card.removeAttribute('data-farmacam-prescription-level'); 30824 } 30825 30826 function applyBadge(card, productId, rule) { 30827 var image; 30828 var badge; 30829 30830 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 30831 return false;
30832 } 30833 30834 clearBadge(card); 30835 30836 if (!rule) { 30837 return true; 30838 } 30839 30840 image = card.querySelector('.product-header > .w-100 > .image'); 30841 if (!image) { 30842 return false; 30843 } 30844 30845 badge = document.createElement('span'); 30846 badge.className = BADGE_CLASS; 30847 badge.setAttribute('data-farmacam-generated', 'true'); 30848 badge.setAttribute('data-farmacam-prescription-level', rule.level); 30849 badge.setAttribute('role', 'note'); 30850 badge.textContent = rule.text; 30851 30852 image.classList.add(HOST_CLASS); 30853 image.insertBefore(badge, image.firstChild); 30854 card.setAttribute('data-farmacam-prescription-level', rule.level); 30855 30856 return true; 30857 } 30858 30859 function processCard(card) { 30860 var productId; 30861 var previousState; 30862 var currentState; 30863 30864 if (!card || card.nodeType !== 1) { 30865 return; 30866 } 30867 30868 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 30869 return; 30870 } 30871 30872 productId = normalizeProductId(card.getAttribute('data-id')); 30873 previousState = cardStates.get(card); 30874 30875 if (!productId) { 30876 clearBadge(card); 30877 cardStates.delete(card); 30878 return; 30879 } 30880 30881 if ( 30882 previousState && 30883 previousState.productId === productId && 30884 previousState.status === 'loading' 30885 ) { 30886 return; 30887 } 30888 30889 if ( 30890 previousState && 30891 previousState.productId === productId && 30892 previousState.status === 'processed' 30893 ) { 30894 if (!previousState.rule || findBadge(card)) { 30895 return; 30896 } 30897 } 30898 30899 if (!previousState || previousState.productId !== productId) { 30900 clearBadge(card); 30901 } 30902 30903 currentState = { 30904 productId: productId, 30905 status: 'loading', 30906 rule: null 30907 }; 30908 cardStates.set(card, currentState); 30909 30910 getRule(productId).then(function (rule) { 30911 var applied; 30912 30913 if ( 30914 cardStates.get(card) !== currentState || 30915 normalizeProductId(card.getAttribute('data-id')) !== productId 30916 ) { 30917 return; 30918 } 30919 30920 applied = applyBadge(card, productId, rule); 30921 currentState.rule = rule; 30922 currentState.status = applied ? 'processed' : 'waiting-image'; 30923 }); 30924 } 30925 30926 function scan(root) { 30927 var cards; 30928 var index; 30929 30930 if (!root) { 30931 return; 30932 } 30933 30934 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 30935 processCard(root); 30936 } 30937 30938 if (!root.querySelectorAll) { 30939 return; 30940 } 30941 30942 cards = root.querySelectorAll(CARD_SELECTOR); 30943 for (index = 0; index < cards.length; index += 1) { 30944 processCard(cards[index]); 30945 } 30946 } 30947 30948 function startObserver() { 30949 var observer; 30950 30951 if (!window.MutationObserver || !document.documentElement) { 30952 return; 30953 } 30954 30955 observer = new MutationObserver(function (mutations) { 30956 var mutationIndex; 30957 var nodeIndex; 30958 var mutation; 30959 var node; 30960 var ownerCard; 30961 30962 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 30963 mutation = mutations[mutationIndex]; 30964 30965 if (mutation.type === 'attributes') { 30966 processCard(mutation.target); 30967 continue; 30968 } 30969 30970 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 30971 node = mutation.addedNodes[nodeIndex]; 30972 if (node.nodeType !== 1) { 30973 continue; 30974 } 30975 30976 scan(node); 30977 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 30978 if (ownerCard) { 30979 processCard(ownerCard); 30980 } 30981 } 30982 } 30983 }); 30984 30985 observer.observe(document.documentElement, { 30986 childList: true, 30987 subtree: true, 30988 attributes: true, 30989 attributeFilter: ['data-id'] 30990 }); 30991 30992 window[GLOBAL_KEY].observer = observer; 30993 } 30994 30995 window[GLOBAL_KEY] = { 30996 version: '1.1.0', 30997 cache: cache, 30998 pending: pending, 30999 cardStates: cardStates, 31000 scan: scan, 31001 processCard: processCard, 31002 observer: null 31003 }; 31004 31005 document.addEventListener('load', onTrayScriptLoad, true); 31006 attachTrayAjaxCache(); 31007 injectStyles(); 31008 scan(document); 31009 startObserver(); 31010 31011 if (document.readyState === 'loading') { 31012 document.addEventListener('DOMContentLoaded', function () { 31013 attachTrayAjaxCache(); 31014 scan(document); 31015 }); 31016 } 31017}(window, document)); 31018</script>
31018 31019 </div> 31020 <div 31021 class="swiper-slide fixWidthBoxProduct item"> 31022 31023 31024 31025 31026<div class="product animate open_cart" 31027 data-id="125245488" 31028 data-farmacam-related-categories="," 31029 data-ga4-id="125245488" 31030 data-ga4-name="Kit 3 Magnésio L-Treonato (Magtein) 300mg 60 doses" 31031 data-ga4-price="689.00" 31032 data-ga4-brand="Farmacam" 31033 data-ga4-category="Tipo de Produto;Manipulados;" 31034 > 31035 31036 <div class="product-header"> 31037 31038 <div class="w-100"> 31039 31040 31041 31042 31043 31044 31045 31046 <div class="product-tags-circle"> 31047 31048 <div class="tag-circle discount"> 31049 <span>Frete Grátis</span> 31050 </div> 31051 31052 31053 31054 </div> 31055 31056 31057 31058 <div class="product-tags has-free-shipping-tag" data-tags-count="0"> 31059 31060 31061 31062 31063 31064 </div> 31065 31066 31067 31068 <div class="image "> 31069 31070 <a title="Kit 3 Magnésio L-Treonato (Magtein) 300mg 60 doses" href="https://www.farmacam.com.br/kit-3-magnesio-l-treonato-magtein-300mg-60-doses" class="space-image"> 31071 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/kit_3_magnesio_l_treonato_magtein_300mg_60_doses_125245488_1_3fd4d866af67fe7fed0ab26eb3867e29.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/kit_3_magnesio_l_treonato_magtein_300mg_60_doses_125245488_1_3fd4d866af67fe7fed0ab26eb3867e29.png" alt="Kit 3 Magnésio L-Treonato (Magtein) 300mg 60 doses"> 31072 </a> 31073 31074 </div> 31075 31076 31077 31078 31079 31080 </div> 31081 31082 </div> 31083 31084 <div class="product-body"> 31085 31086 <a title="Kit 3 Magnésio L-Treonato (Magtein) 300mg 60 doses" class="product-info" href="https://www.farmacam.com.br/kit-3-magnesio-l-treonato-magtein-300mg-60-doses"> 31087 31088 <div class="product-info-dados"> 31089 31090 31091 31092 31093 31094 31095 <div class="product-name"> 31096 Kit 3 Magnésio L-Treonato (Magtein) 300mg 60 doses 31097 </div> 31098 31099 31100 31101 <div class="product-price"> 31102 31103 31104 31105 31106 31107 31108<div class="price display-cash"> 31109 31110 31111 <span class="current-price "> 31112 R$ 689,00 31113 31114 </span> 31115 31116 <span class="product-installments"> 31117 31118 </span> 31119 31120</div> 31121 </div> 31122 31123 </div> 31124 31125 </a> 31126 31127 </div> 31128 31129 31130 <div class="product-footer"> 31131 31132 31133 <div class="w-100"> 31134 31135 31136 31137<div class="product-rating-catalog"> 31138 31139 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 31140 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 31141 </svg> 31142 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 31143 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 31144 </svg> 31145 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 31146 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 31147 </svg> 31148 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 31149 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 31150 </svg> 31151 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 31152 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 31153 </svg> 31154 31155 31156 <a title="Ver avaliações de Kit 3 Magnésio L-Treonato (Magtein) 300mg 60 doses" href="https://www.farmacam.com.br/kit-3-magnesio-l-treonato-magtein-300mg-60-doses#comments" class="total"> 31157 Seja o primeiro 31158 </a> 31159 31160 </div> 31161 31162 31163 31164 <div class="config-variacoes-compra"> 31165 31166 31167 31168 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245488"> 31169 <input type="hidden" name="product_id" value="125245488"> 31170 <input type="hidden" name="without_stock_sale" value=""> 31171 31172 <input type="hidden" name="estoque" value="10000"> 31173 31174 31175 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 31176 <div class="alerta-estoque"></div> 31177 <div class="alerta-adicionado"></div> 31178 31179 <div class="acao-compra"> 31180 31181 <div class="quantidade-box"> 31182 <div class="quantidade-box-input"> 31183 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
31183stoque="10000" /> 31184 </div> 31185 <div class="quantidade-box-controles"> 31186 <div class="quantidade-box-controles-itens" data-item="mais"> 31187 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 31188 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 31189 </svg> 31190 </div> 31191 <div class="quantidade-box-controles-itens" data-item="menus"> 31192 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 31193 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 31194 </svg> 31195 </div> 31196 </div> 31197 </div> 31198 31199 31200 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245488"> 31201 31202 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="" style="width: 100%;"> --> 31203 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 31204 31205 31206 31207 31208 31209 31210 <!-- Cesta de Compras --> 31211 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 31212 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 31213 </svg> 31214 31215 31216 31217 Comprar 31218 31219 31220 </button> 31221 <!-- </form> --> 31222 31223 </div> 31224 31225</div> 31226 31227 31228 </div> 31229 31230 </div> 31231 31232 31233</div> 31234
31235<script> 31236(function (window, document) { 31237 'use strict'; 31238 31239 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 31240 31241 if (window[GLOBAL_KEY]) { 31242 return; 31243 } 31244 31245 if (!window.Map || !window.WeakMap || !window.Promise) { 31246 return; 31247 } 31248 31249 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 31250 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 31251 '#vitrine-personalizada .product[data-id]'; 31252 var BADGE_CLASS = 'farmacam-prescription-badge'; 31253 var HOST_CLASS = 'farmacam-prescription-badge-host'; 31254 var MAX_CONCURRENT_REQUESTS = 6; 31255 var REQUEST_TIMEOUT_MS = 12000; 31256 31257 var rules = { 31258 '294': { 31259 level: '294', 31260 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 31261 }, 31262 '296': { 31263 level: '296', 31264 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 31265 }, 31266 '298': { 31267 level: '298', 31268 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 31269 } 31270 }; 31271 31272 var cache = new Map(); 31273 var pending = new Map(); 31274 var cardStates = new WeakMap(); 31275 var queue = []; 31276 var activeRequests = 0; 31277 var trayAjaxHooked = false; 31278 31279 function injectStyles() { 31280 if (document.getElementById('farmacam-prescription-cards-style')) { 31281 return; 31282 } 31283 31284 var style = document.createElement('style'); 31285 style.id = 'farmacam-prescription-cards-style'; 31286 style.textContent = [ 31287 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 31288 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 31289 'position:absolute!important;', 31290 'top:52px!important;', 31291 'left:10px!important;', 31292 'z-index:999!important;', 31293 'display:block!important;', 31294 'max-width:calc(100% - 20px)!important;', 31295 'box-sizing:border-box!important;', 31296 'padding:8px 12px!important;', 31297 'color:#fff!important;', 31298 'font-family:inherit!important;', 31299 'font-size:13px!important;', 31300 'font-weight:900!important;', 31301 'line-height:1.15!important;', 31302 'text-align:center!important;', 31303 'text-transform:uppercase!important;', 31304 'letter-spacing:.3px!important;', 31305 'white-space:normal!important;', 31306 'overflow-wrap:break-word!important;', 31307 'border-radius:3px!important;', 31308 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 31309 'pointer-events:none!important;', 31310 '}', 31311 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 31312 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 31313 'background:#d70008!important;', 31314 '}', 31315 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 31316 'background:#000!important;', 31317 '}', 31318 '@media (max-width:767px){', 31319 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 31320 'top:42px!important;', 31321 'left:6px!important;', 31322 'max-width:calc(100% - 12px)!important;', 31323 'padding:6px 8px!important;', 31324 'font-size:10px!important;', 31325 '}', 31326 '}' 31327 ].join(''); 31328 31329 (document.head || document.documentElement).appendChild(style); 31330 } 31331 31332 function normalizeProductId(value) { 31333 var id = String(value == null ? '' : value).trim(); 31334 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 31335 } 31336 31337 function classifyRelatedCategories(relatedCategories) { 31338 var found = { 31339 '292': false, 31340 '294': false, 31341 '296': false, 31342 '298': false 31343 }; 31344 31345 function inspect(value, depth) { 31346 var index; 31347 var normalized; 31348 31349 if (value == null || depth > 8) { 31350 return; 31351 } 31352 31353 if (Array.isArray(value)) { 31354 for (index = 0; index < value.length; index += 1) { 31355 inspect(value[index], depth + 1); 31356 } 31357 return; 31358 } 31359 31360 if (typeof value === 'object') { 31361 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 31362 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 31363 inspect(value.id, depth + 1); 31364 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 31365 inspect(value.category_id, depth + 1); 31366 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 31367 inspect(value.Category, depth + 1); 31368 } 31369 return; 31370 } 31371 31372 if (typeof value !== 'string' && typeof value !== 'number') { 31373 return; 31374 } 31375 normalized = normalizeProductId(value); 31376 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 31377 found[normalized] = true; 31378 } 31379 } 31380 31381 inspect(relatedCategories, 0); 31382 31383 if (found['298']) { 31384 return rules['298']; 31385 } 31386 if (found['296']) { 31387 return rules['296']; 31388 } 31389 if (found['294']) { 31390 return rules['294']; 31391 } 31392 31393 // 292 e qualquer classificacao desconhecida ficam sem tarja. 31394 return null; 31395 } 31396 31397 function ruleFromPayload(payload, productId) { 31398 var product = payload && payload.Product; 31399 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 31400 return null; 31401 } 31402 return classifyRelatedCategories(product && product.related_categories); 31403 } 31404 31405 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 31406 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 31407 function attachTrayAjaxCache() { 31408 var jq = window.jQuery; 31409 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 31410 return; 31411 } 31412
31413 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 31414 var url; 31415 var match; 31416 var productId; 31417 var payload; 31418 try { 31419 url = new URL(settings.url, window.location.href); 31420 if (url.origin !== window.location.origin) { 31421 return; 31422 } 31423 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 31424 if (!match) { 31425 return; 31426 } 31427 productId = normalizeProductId(match[1]); 31428 if (!cache.has(productId) && !pending.has(productId)) { 31429 payload = data || xhr.responseJSON; 31430 if (typeof payload === 'string') { 31431 payload = JSON.parse(payload); 31432 } 31433 if (!payload || !payload.Product || 31434 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 31435 return; 31436 } 31437 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 31438 return; 31439 } 31440 cache.set(productId, ruleFromPayload(payload, productId)); 31441 } 31442 } catch (error) { 31443 // Respostas de outras integracoes nao interferem nas tarjas. 31444 } 31445 }); 31446 31447 trayAjaxHooked = true; 31448 document.removeEventListener('load', onTrayScriptLoad, true); 31449 } 31450 31451 function onTrayScriptLoad(event) { 31452 if (event.target && event.target.tagName === 'SCRIPT') { 31453 attachTrayAjaxCache(); 31454 } 31455 } 31456 31457 function requestRule(productId) { 31458 var controller = null; 31459 var timeoutId = null; 31460 var options = { 31461 credentials: 'same-origin', 31462 headers: { 31463 'Accept': 'application/json' 31464 } 31465 }; 31466 var request; 31467 31468 if (typeof window.fetch !== 'function') { 31469 return Promise.resolve(null); 31470 } 31471 31472 if (typeof window.AbortController === 'function') { 31473 controller = new window.AbortController(); 31474 options.signal = controller.signal; 31475 timeoutId = window.setTimeout(function () { 31476 controller.abort(); 31477 }, REQUEST_TIMEOUT_MS); 31478 } 31479 31480 try { 31481 request = window.fetch( 31482 '/web_api/products/' + encodeURIComponent(productId), 31483 options 31484 ); 31485 } catch (error) { 31486 if (timeoutId !== null) { 31487 window.clearTimeout(timeoutId); 31488 } 31489 return Promise.resolve(null); 31490 } 31491 31492 return request.then(function (response) { 31493 if (!response.ok) { 31494 throw new Error('HTTP ' + response.status); 31495 } 31496 return response.json(); 31497 }).then(function (payload) { 31498 return ruleFromPayload(payload, productId); 31499 }).then(function (rule) { 31500 if (timeoutId !== null) { 31501 window.clearTimeout(timeoutId); 31502 } 31503 return rule; 31504 }, function () { 31505 if (timeoutId !== null) { 31506 window.clearTimeout(timeoutId); 31507 } 31508 31509 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 31510 return null; 31511 }); 31512 } 31513 31514 function finishJob(job, rule) { 31515 cache.set(job.productId, rule); 31516 pending.delete(job.productId); 31517 activeRequests -= 1; 31518 job.resolve(rule); 31519 pumpQueue(); 31520 } 31521 31522 function pumpQueue() { 31523 var job; 31524 31525 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 31526 job = queue.shift(); 31527 activeRequests += 1; 31528 31529 (function (currentJob) { 31530 requestRule(currentJob.productId).then(function (rule) { 31531 finishJob(currentJob, rule); 31532 }, function () { 31533 finishJob(currentJob, null); 31534 }); 31535 }(job)); 31536 } 31537 } 31538 31539 function getRule(productId) { 31540 var resolver; 31541 var promise; 31542 31543 if (cache.has(productId)) { 31544 return Promise.resolve(cache.get(productId)); 31545 } 31546 31547 if (pending.has(productId)) { 31548 return pending.get(productId); 31549 } 31550 31551 promise = new Promise(function (resolve) { 31552 resolver = resolve; 31553 }); 31554 31555 pending.set(productId, promise); 31556 queue.push({ 31557 productId: productId, 31558 resolve: resolver 31559 }); 31560 pumpQueue(); 31561 31562 return promise; 31563 } 31564 31565 function findBadge(card) { 31566 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 31567 } 31568 31569 function clearBadge(card) { 31570 var badge = findBadge(card); 31571 var image = card.querySelector('.product-header > .w-100 > .image'); 31572 31573 if (badge && badge.parentNode) { 31574 badge.parentNode.removeChild(badge); 31575 } 31576 31577 if (image) { 31578 image.classList.remove(HOST_CLASS); 31579 } 31580 31581 card.removeAttribute('data-farmacam-prescription-level'); 31582 } 31583 31584 function applyBadge(card, productId, rule) { 31585 var image; 31586 var badge; 31587 31588 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 31589 return false;
31590 } 31591 31592 clearBadge(card); 31593 31594 if (!rule) { 31595 return true; 31596 } 31597 31598 image = card.querySelector('.product-header > .w-100 > .image'); 31599 if (!image) { 31600 return false; 31601 } 31602 31603 badge = document.createElement('span'); 31604 badge.className = BADGE_CLASS; 31605 badge.setAttribute('data-farmacam-generated', 'true'); 31606 badge.setAttribute('data-farmacam-prescription-level', rule.level); 31607 badge.setAttribute('role', 'note'); 31608 badge.textContent = rule.text; 31609 31610 image.classList.add(HOST_CLASS); 31611 image.insertBefore(badge, image.firstChild); 31612 card.setAttribute('data-farmacam-prescription-level', rule.level); 31613 31614 return true; 31615 } 31616 31617 function processCard(card) { 31618 var productId; 31619 var previousState; 31620 var currentState; 31621 31622 if (!card || card.nodeType !== 1) { 31623 return; 31624 } 31625 31626 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 31627 return; 31628 } 31629 31630 productId = normalizeProductId(card.getAttribute('data-id')); 31631 previousState = cardStates.get(card); 31632 31633 if (!productId) { 31634 clearBadge(card); 31635 cardStates.delete(card); 31636 return; 31637 } 31638 31639 if ( 31640 previousState && 31641 previousState.productId === productId && 31642 previousState.status === 'loading' 31643 ) { 31644 return; 31645 } 31646 31647 if ( 31648 previousState && 31649 previousState.productId === productId && 31650 previousState.status === 'processed' 31651 ) { 31652 if (!previousState.rule || findBadge(card)) { 31653 return; 31654 } 31655 } 31656 31657 if (!previousState || previousState.productId !== productId) { 31658 clearBadge(card); 31659 } 31660 31661 currentState = { 31662 productId: productId, 31663 status: 'loading', 31664 rule: null 31665 }; 31666 cardStates.set(card, currentState); 31667 31668 getRule(productId).then(function (rule) { 31669 var applied; 31670 31671 if ( 31672 cardStates.get(card) !== currentState || 31673 normalizeProductId(card.getAttribute('data-id')) !== productId 31674 ) { 31675 return; 31676 } 31677 31678 applied = applyBadge(card, productId, rule); 31679 currentState.rule = rule; 31680 currentState.status = applied ? 'processed' : 'waiting-image'; 31681 }); 31682 } 31683 31684 function scan(root) { 31685 var cards; 31686 var index; 31687 31688 if (!root) { 31689 return; 31690 } 31691 31692 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 31693 processCard(root); 31694 } 31695 31696 if (!root.querySelectorAll) { 31697 return; 31698 } 31699 31700 cards = root.querySelectorAll(CARD_SELECTOR); 31701 for (index = 0; index < cards.length; index += 1) { 31702 processCard(cards[index]); 31703 } 31704 } 31705 31706 function startObserver() { 31707 var observer; 31708 31709 if (!window.MutationObserver || !document.documentElement) { 31710 return; 31711 } 31712 31713 observer = new MutationObserver(function (mutations) { 31714 var mutationIndex; 31715 var nodeIndex; 31716 var mutation; 31717 var node; 31718 var ownerCard; 31719 31720 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 31721 mutation = mutations[mutationIndex]; 31722 31723 if (mutation.type === 'attributes') { 31724 processCard(mutation.target); 31725 continue; 31726 } 31727 31728 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 31729 node = mutation.addedNodes[nodeIndex]; 31730 if (node.nodeType !== 1) { 31731 continue; 31732 } 31733 31734 scan(node); 31735 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 31736 if (ownerCard) { 31737 processCard(ownerCard); 31738 } 31739 } 31740 } 31741 }); 31742 31743 observer.observe(document.documentElement, { 31744 childList: true, 31745 subtree: true, 31746 attributes: true, 31747 attributeFilter: ['data-id'] 31748 }); 31749 31750 window[GLOBAL_KEY].observer = observer; 31751 } 31752 31753 window[GLOBAL_KEY] = { 31754 version: '1.1.0', 31755 cache: cache, 31756 pending: pending, 31757 cardStates: cardStates, 31758 scan: scan, 31759 processCard: processCard, 31760 observer: null 31761 }; 31762 31763 document.addEventListener('load', onTrayScriptLoad, true); 31764 attachTrayAjaxCache(); 31765 injectStyles(); 31766 scan(document); 31767 startObserver(); 31768 31769 if (document.readyState === 'loading') { 31770 document.addEventListener('DOMContentLoaded', function () { 31771 attachTrayAjaxCache(); 31772 scan(document); 31773 }); 31774 } 31775}(window, document)); 31776</script>
31776 31777 </div> 31778 <div 31779 class="swiper-slide fixWidthBoxProduct item"> 31780 31781 31782 31783 31784<div class="product animate open_cart" 31785 data-id="125237489" 31786 data-farmacam-related-categories="," 31787 data-ga4-id="125237489" 31788 data-ga4-name="Fórmula Manipulada para Desempenho Físico IV" 31789 data-ga4-price="501.00" 31790 data-ga4-brand="Farmacam" 31791 data-ga4-category="Tipo de Produto;Manipulados;" 31792 > 31793 31794 <div class="product-header"> 31795 31796 <div class="w-100"> 31797 31798 31799 31800 31801 31802 31803 31804 <div class="product-tags-circle"> 31805 31806 <div class="tag-circle discount"> 31807 <span>Frete Grátis</span> 31808 </div> 31809 31810 31811 31812 </div> 31813 31814 31815 31816 <div class="product-tags has-free-shipping-tag" data-tags-count="0"> 31817 31818 31819 31820 31821 31822 </div> 31823 31824 31825 31826 <div class="image "> 31827 31828 <a title="Fórmula Manipulada para Desempenho Físico IV" href="https://www.farmacam.com.br/formula-manipulada-para-desempenho-fisico-iv" class="space-image"> 31829 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/formula_manipulada_para_desempenho_fisico_iv_125237489_1_f5caa6a117cf2573269f85b0df4d24a7.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/formula_manipulada_para_desempenho_fisico_iv_125237489_1_f5caa6a117cf2573269f85b0df4d24a7.png" alt="Fórmula Manipulada para Desempenho Físico IV"> 31830 </a> 31831 31832 </div> 31833 31834 31835 31836 31837 31838 </div> 31839 31840 </div> 31841 31842 <div class="product-body"> 31843 31844 <a title="Fórmula Manipulada para Desempenho Físico IV" class="product-info" href="https://www.farmacam.com.br/formula-manipulada-para-desempenho-fisico-iv"> 31845 31846 <div class="product-info-dados"> 31847 31848 31849 31850 31851 31852 31853 <div class="product-name"> 31854 Fórmula Manipulada para Desempenho Físico IV 31855 </div> 31856 31857 31858 31859 <div class="product-price"> 31860 31861 31862 31863 31864 31865 <span class="product-has-variants text-center"> 31866 A partir de 31867 </span> 31868 31869<div class="price display-cash"> 31870 31871 31872 <span class="current-price "> 31873 R$ 501,00 31874 31875 </span> 31876 31877 <span class="product-installments"> 31878 31879 </span> 31880 31881</div> 31882 </div> 31883 31884 </div> 31885 31886 </a> 31887 31888 </div> 31889 31890 31891 <div class="product-footer"> 31892 31893 31894 <div class="w-100"> 31895 31896 31897 31898<div class="product-rating-catalog"> 31899 31900 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 31901 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 31902 </svg> 31903 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 31904 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 31905 </svg> 31906 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 31907 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 31908 </svg> 31909 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 31910 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 31911 </svg> 31912 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 31913 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 31914 </svg> 31915 31916 31917 <a title="Ver avaliações de Fórmula Manipulada para Desempenho Físico IV" href="https://www.farmacam.com.br/formula-manipulada-para-desempenho-fisico-iv#comments" class="total"> 31918 Seja o primeiro 31919 </a> 31920 31921 </div> 31922 31923 31924 31925 <div class="config-variacoes-compra"> 31926 31927 31928 31929 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125237489"> 31930 <input type="hidden" name="product_id" value="125237489"> 31931 <input type="hidden" name="without_stock_sale" value=""> 31932 31933 <input type="hidden" name="variacao" id="selectedVariant" value=""> 31934 <input type="hidden" name="estoque" value=""> 31935 31936 31937 31938 <ul class="paleta-cores"> 31939 31940 31941 31942 31943 31944 31945 31946 31947 31948 31949 31950 31951 31952 31953 31954 31955 31956 31957 31958 31959 31960 31961 31962 31963 31964 31965 31966 31967 31968 31969 31970 31971 31972 31973 31974 31975 31976 31977 31978 31979 31980 31981 31982 31983 31984 31985 31986 31987 31988 31989 31990 31991 31992 31993 31994 31995 31996 31997 31998 31999 32000 32001 32002 32003 32004 32005 32006 32007 32008 32009 32010 32011 32012 32013 32014 32015 32016 32017 32018 32019 32020 32021 32022 32023 32024 32025 32026 32027 32028 32029 32030 32031 32032 32033 32034 32035 32036 32037 32038 32039 32040 32041 32042 32043 32044 32045 32046 32047 32048 32049 32050 32051 32052 32053 32054 32055 32056 32057 32058 32059 32060 32061 32062 32063 32064 32065 32066 32067 32068 32069 32070 32071 32072 32073 32074 32075 32076 32077 32078 32079 32080 32081 32082 32083 32084 32085 32086 32087 32088 32089 32090 32091 32092 32093 32094 32095 32096 32097 32098 32099 32100 32101 32102 32103 32104 32105 32106 32107 32108 32109 32110 32111 32112 32113 32114 32115 32116 32117 32118 32119 32120 32121 32122 32123 32124 32125 32126 32127 32128 32129 32130 32131 32132 32133 32134 32135 32136 32137 32138 32139 32140 32141 32142 32143 32144 32145 32146 32147 32148 32149 32150 32151 32152 32153 32154 32155 32156 32157 32158 32159 32160 32161 32162 32163 32164 32165 32166 32167 32168 32169 32170 32171 32172 32173 32174 32175 32176 32177 32178 32179 32180 32181 32182 32183 32184 32185 32186 32187 32188 32189 32190 32191 32192 32193 32194 32195 32196 32197 32198 32199 32200 32201 32202 32203 32204
32204 32205 32206 32207 32208 32209 32210 32211 32212 32213 32214 32215 32216 32217 32218 32219 32220 32221 32222 32223 32224 32225 32226 32227 32228 32229 32230 32231 32232 32233 32234 32235 32236 32237 32238 32239 32240 32241 32242 32243 32244 32245 32246 32247 32248 32249 32250 32251 32252 32253 32254 32255 32256 32257 32258 32259 32260 32261 32262 32263 32264 32265 32266 32267 </ul> 32268 <!-- Fim Paleta de Cores --> 32269 32270 32271 32272 32273 32274 32275 32276 32277 32278 32279 32280 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 32281 <option disabled="disabled" value=""> 32282 Selecione 32283 </option> 32284 32285 32286 <option value="11479" produto="125237489" estoque="10000">30 Doses</option> 32287 32288 32289 32290 32291 <option value="11481" produto="125237489" estoque="10000">60 Doses</option> 32292 32293 32294 </select> 32295 32296 32297 <select class="select-cor" style="display: none;" title="Campo Cor"> 32298 </select> 32299 32300 32301 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 32302 <div class="alerta-estoque"></div> 32303 <div class="alerta-adicionado"></div> 32304 32305 <div class="acao-compra"> 32306 32307 <div class="quantidade-box"> 32308 <div class="quantidade-box-input"> 32309 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
32309stoque="20000" /> 32310 </div> 32311 <div class="quantidade-box-controles"> 32312 <div class="quantidade-box-controles-itens" data-item="mais"> 32313 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 32314 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 32315 </svg> 32316 </div> 32317 <div class="quantidade-box-controles-itens" data-item="menus"> 32318 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 32319 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 32320 </svg> 32321 </div> 32322 </div> 32323 </div> 32324 32325 32326 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125237489"> 32327 32328 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 32329 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 32330 32331 32332 32333 32334 32335 32336 <!-- Cesta de Compras --> 32337 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 32338 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 32339 </svg> 32340 32341 32342 32343 Comprar 32344 32345 32346 </button> 32347 <!-- </form> --> 32348 32349 </div> 32350 32351</div> 32352 32353 32354 </div> 32355 32356 </div> 32357 32358 32359</div> 32360
32361<script> 32362(function (window, document) { 32363 'use strict'; 32364 32365 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 32366 32367 if (window[GLOBAL_KEY]) { 32368 return; 32369 } 32370 32371 if (!window.Map || !window.WeakMap || !window.Promise) { 32372 return; 32373 } 32374 32375 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 32376 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 32377 '#vitrine-personalizada .product[data-id]'; 32378 var BADGE_CLASS = 'farmacam-prescription-badge'; 32379 var HOST_CLASS = 'farmacam-prescription-badge-host'; 32380 var MAX_CONCURRENT_REQUESTS = 6; 32381 var REQUEST_TIMEOUT_MS = 12000; 32382 32383 var rules = { 32384 '294': { 32385 level: '294', 32386 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 32387 }, 32388 '296': { 32389 level: '296', 32390 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 32391 }, 32392 '298': { 32393 level: '298', 32394 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 32395 } 32396 }; 32397 32398 var cache = new Map(); 32399 var pending = new Map(); 32400 var cardStates = new WeakMap(); 32401 var queue = []; 32402 var activeRequests = 0; 32403 var trayAjaxHooked = false; 32404 32405 function injectStyles() { 32406 if (document.getElementById('farmacam-prescription-cards-style')) { 32407 return; 32408 } 32409 32410 var style = document.createElement('style'); 32411 style.id = 'farmacam-prescription-cards-style'; 32412 style.textContent = [ 32413 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 32414 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 32415 'position:absolute!important;', 32416 'top:52px!important;', 32417 'left:10px!important;', 32418 'z-index:999!important;', 32419 'display:block!important;', 32420 'max-width:calc(100% - 20px)!important;', 32421 'box-sizing:border-box!important;', 32422 'padding:8px 12px!important;', 32423 'color:#fff!important;', 32424 'font-family:inherit!important;', 32425 'font-size:13px!important;', 32426 'font-weight:900!important;', 32427 'line-height:1.15!important;', 32428 'text-align:center!important;', 32429 'text-transform:uppercase!important;', 32430 'letter-spacing:.3px!important;', 32431 'white-space:normal!important;', 32432 'overflow-wrap:break-word!important;', 32433 'border-radius:3px!important;', 32434 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 32435 'pointer-events:none!important;', 32436 '}', 32437 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 32438 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 32439 'background:#d70008!important;', 32440 '}', 32441 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 32442 'background:#000!important;', 32443 '}', 32444 '@media (max-width:767px){', 32445 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 32446 'top:42px!important;', 32447 'left:6px!important;', 32448 'max-width:calc(100% - 12px)!important;', 32449 'padding:6px 8px!important;', 32450 'font-size:10px!important;', 32451 '}', 32452 '}' 32453 ].join(''); 32454 32455 (document.head || document.documentElement).appendChild(style); 32456 } 32457 32458 function normalizeProductId(value) { 32459 var id = String(value == null ? '' : value).trim(); 32460 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 32461 } 32462 32463 function classifyRelatedCategories(relatedCategories) { 32464 var found = { 32465 '292': false, 32466 '294': false, 32467 '296': false, 32468 '298': false 32469 }; 32470 32471 function inspect(value, depth) { 32472 var index; 32473 var normalized; 32474 32475 if (value == null || depth > 8) { 32476 return; 32477 } 32478 32479 if (Array.isArray(value)) { 32480 for (index = 0; index < value.length; index += 1) { 32481 inspect(value[index], depth + 1); 32482 } 32483 return; 32484 } 32485 32486 if (typeof value === 'object') { 32487 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 32488 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 32489 inspect(value.id, depth + 1); 32490 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 32491 inspect(value.category_id, depth + 1); 32492 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 32493 inspect(value.Category, depth + 1); 32494 } 32495 return; 32496 } 32497 32498 if (typeof value !== 'string' && typeof value !== 'number') { 32499 return; 32500 } 32501 normalized = normalizeProductId(value); 32502 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 32503 found[normalized] = true; 32504 } 32505 } 32506 32507 inspect(relatedCategories, 0); 32508 32509 if (found['298']) { 32510 return rules['298']; 32511 } 32512 if (found['296']) { 32513 return rules['296']; 32514 } 32515 if (found['294']) { 32516 return rules['294']; 32517 } 32518 32519 // 292 e qualquer classificacao desconhecida ficam sem tarja. 32520 return null; 32521 } 32522 32523 function ruleFromPayload(payload, productId) { 32524 var product = payload && payload.Product; 32525 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 32526 return null; 32527 } 32528 return classifyRelatedCategories(product && product.related_categories); 32529 } 32530 32531 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 32532 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 32533 function attachTrayAjaxCache() { 32534 var jq = window.jQuery; 32535 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 32536 return; 32537 } 32538
32539 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 32540 var url; 32541 var match; 32542 var productId; 32543 var payload; 32544 try { 32545 url = new URL(settings.url, window.location.href); 32546 if (url.origin !== window.location.origin) { 32547 return; 32548 } 32549 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 32550 if (!match) { 32551 return; 32552 } 32553 productId = normalizeProductId(match[1]); 32554 if (!cache.has(productId) && !pending.has(productId)) { 32555 payload = data || xhr.responseJSON; 32556 if (typeof payload === 'string') { 32557 payload = JSON.parse(payload); 32558 } 32559 if (!payload || !payload.Product || 32560 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 32561 return; 32562 } 32563 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 32564 return; 32565 } 32566 cache.set(productId, ruleFromPayload(payload, productId)); 32567 } 32568 } catch (error) { 32569 // Respostas de outras integracoes nao interferem nas tarjas. 32570 } 32571 }); 32572 32573 trayAjaxHooked = true; 32574 document.removeEventListener('load', onTrayScriptLoad, true); 32575 } 32576 32577 function onTrayScriptLoad(event) { 32578 if (event.target && event.target.tagName === 'SCRIPT') { 32579 attachTrayAjaxCache(); 32580 } 32581 } 32582 32583 function requestRule(productId) { 32584 var controller = null; 32585 var timeoutId = null; 32586 var options = { 32587 credentials: 'same-origin', 32588 headers: { 32589 'Accept': 'application/json' 32590 } 32591 }; 32592 var request; 32593 32594 if (typeof window.fetch !== 'function') { 32595 return Promise.resolve(null); 32596 } 32597 32598 if (typeof window.AbortController === 'function') { 32599 controller = new window.AbortController(); 32600 options.signal = controller.signal; 32601 timeoutId = window.setTimeout(function () { 32602 controller.abort(); 32603 }, REQUEST_TIMEOUT_MS); 32604 } 32605 32606 try { 32607 request = window.fetch( 32608 '/web_api/products/' + encodeURIComponent(productId), 32609 options 32610 ); 32611 } catch (error) { 32612 if (timeoutId !== null) { 32613 window.clearTimeout(timeoutId); 32614 } 32615 return Promise.resolve(null); 32616 } 32617 32618 return request.then(function (response) { 32619 if (!response.ok) { 32620 throw new Error('HTTP ' + response.status); 32621 } 32622 return response.json(); 32623 }).then(function (payload) { 32624 return ruleFromPayload(payload, productId); 32625 }).then(function (rule) { 32626 if (timeoutId !== null) { 32627 window.clearTimeout(timeoutId); 32628 } 32629 return rule; 32630 }, function () { 32631 if (timeoutId !== null) { 32632 window.clearTimeout(timeoutId); 32633 } 32634 32635 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 32636 return null; 32637 }); 32638 } 32639 32640 function finishJob(job, rule) { 32641 cache.set(job.productId, rule); 32642 pending.delete(job.productId); 32643 activeRequests -= 1; 32644 job.resolve(rule); 32645 pumpQueue(); 32646 } 32647 32648 function pumpQueue() { 32649 var job; 32650 32651 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 32652 job = queue.shift(); 32653 activeRequests += 1; 32654 32655 (function (currentJob) { 32656 requestRule(currentJob.productId).then(function (rule) { 32657 finishJob(currentJob, rule); 32658 }, function () { 32659 finishJob(currentJob, null); 32660 }); 32661 }(job)); 32662 } 32663 } 32664 32665 function getRule(productId) { 32666 var resolver; 32667 var promise; 32668 32669 if (cache.has(productId)) { 32670 return Promise.resolve(cache.get(productId)); 32671 } 32672 32673 if (pending.has(productId)) { 32674 return pending.get(productId); 32675 } 32676 32677 promise = new Promise(function (resolve) { 32678 resolver = resolve; 32679 }); 32680 32681 pending.set(productId, promise); 32682 queue.push({ 32683 productId: productId, 32684 resolve: resolver 32685 }); 32686 pumpQueue(); 32687 32688 return promise; 32689 } 32690 32691 function findBadge(card) { 32692 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 32693 } 32694 32695 function clearBadge(card) { 32696 var badge = findBadge(card); 32697 var image = card.querySelector('.product-header > .w-100 > .image'); 32698 32699 if (badge && badge.parentNode) { 32700 badge.parentNode.removeChild(badge); 32701 } 32702 32703 if (image) { 32704 image.classList.remove(HOST_CLASS); 32705 } 32706 32707 card.removeAttribute('data-farmacam-prescription-level'); 32708 } 32709 32710 function applyBadge(card, productId, rule) { 32711 var image; 32712 var badge; 32713 32714 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 32715 return false;
32716 } 32717 32718 clearBadge(card); 32719 32720 if (!rule) { 32721 return true; 32722 } 32723 32724 image = card.querySelector('.product-header > .w-100 > .image'); 32725 if (!image) { 32726 return false; 32727 } 32728 32729 badge = document.createElement('span'); 32730 badge.className = BADGE_CLASS; 32731 badge.setAttribute('data-farmacam-generated', 'true'); 32732 badge.setAttribute('data-farmacam-prescription-level', rule.level); 32733 badge.setAttribute('role', 'note'); 32734 badge.textContent = rule.text; 32735 32736 image.classList.add(HOST_CLASS); 32737 image.insertBefore(badge, image.firstChild); 32738 card.setAttribute('data-farmacam-prescription-level', rule.level); 32739 32740 return true; 32741 } 32742 32743 function processCard(card) { 32744 var productId; 32745 var previousState; 32746 var currentState; 32747 32748 if (!card || card.nodeType !== 1) { 32749 return; 32750 } 32751 32752 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 32753 return; 32754 } 32755 32756 productId = normalizeProductId(card.getAttribute('data-id')); 32757 previousState = cardStates.get(card); 32758 32759 if (!productId) { 32760 clearBadge(card); 32761 cardStates.delete(card); 32762 return; 32763 } 32764 32765 if ( 32766 previousState && 32767 previousState.productId === productId && 32768 previousState.status === 'loading' 32769 ) { 32770 return; 32771 } 32772 32773 if ( 32774 previousState && 32775 previousState.productId === productId && 32776 previousState.status === 'processed' 32777 ) { 32778 if (!previousState.rule || findBadge(card)) { 32779 return; 32780 } 32781 } 32782 32783 if (!previousState || previousState.productId !== productId) { 32784 clearBadge(card); 32785 } 32786 32787 currentState = { 32788 productId: productId, 32789 status: 'loading', 32790 rule: null 32791 }; 32792 cardStates.set(card, currentState); 32793 32794 getRule(productId).then(function (rule) { 32795 var applied; 32796 32797 if ( 32798 cardStates.get(card) !== currentState || 32799 normalizeProductId(card.getAttribute('data-id')) !== productId 32800 ) { 32801 return; 32802 } 32803 32804 applied = applyBadge(card, productId, rule); 32805 currentState.rule = rule; 32806 currentState.status = applied ? 'processed' : 'waiting-image'; 32807 }); 32808 } 32809 32810 function scan(root) { 32811 var cards; 32812 var index; 32813 32814 if (!root) { 32815 return; 32816 } 32817 32818 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 32819 processCard(root); 32820 } 32821 32822 if (!root.querySelectorAll) { 32823 return; 32824 } 32825 32826 cards = root.querySelectorAll(CARD_SELECTOR); 32827 for (index = 0; index < cards.length; index += 1) { 32828 processCard(cards[index]); 32829 } 32830 } 32831 32832 function startObserver() { 32833 var observer; 32834 32835 if (!window.MutationObserver || !document.documentElement) { 32836 return; 32837 } 32838 32839 observer = new MutationObserver(function (mutations) { 32840 var mutationIndex; 32841 var nodeIndex; 32842 var mutation; 32843 var node; 32844 var ownerCard; 32845 32846 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 32847 mutation = mutations[mutationIndex]; 32848 32849 if (mutation.type === 'attributes') { 32850 processCard(mutation.target); 32851 continue; 32852 } 32853 32854 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 32855 node = mutation.addedNodes[nodeIndex]; 32856 if (node.nodeType !== 1) { 32857 continue; 32858 } 32859 32860 scan(node); 32861 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 32862 if (ownerCard) { 32863 processCard(ownerCard); 32864 } 32865 } 32866 } 32867 }); 32868 32869 observer.observe(document.documentElement, { 32870 childList: true, 32871 subtree: true, 32872 attributes: true, 32873 attributeFilter: ['data-id'] 32874 }); 32875 32876 window[GLOBAL_KEY].observer = observer; 32877 } 32878 32879 window[GLOBAL_KEY] = { 32880 version: '1.1.0', 32881 cache: cache, 32882 pending: pending, 32883 cardStates: cardStates, 32884 scan: scan, 32885 processCard: processCard, 32886 observer: null 32887 }; 32888 32889 document.addEventListener('load', onTrayScriptLoad, true); 32890 attachTrayAjaxCache(); 32891 injectStyles(); 32892 scan(document); 32893 startObserver(); 32894 32895 if (document.readyState === 'loading') { 32896 document.addEventListener('DOMContentLoaded', function () { 32897 attachTrayAjaxCache(); 32898 scan(document); 32899 }); 32900 } 32901}(window, document)); 32902</script>
32902 32903 </div> 32904 <div 32905 class="swiper-slide fixWidthBoxProduct item"> 32906 32907 32908 32909 32910<div class="product animate open_cart" 32911 data-id="125242912" 32912 data-farmacam-related-categories="," 32913 data-ga4-id="125242912" 32914 data-ga4-name="Kit Natural Emagrecimento Sem Treino - Com duração de 90 dias" 32915 data-ga4-price="889.00" 32916 data-ga4-brand="Farmacam" 32917 data-ga4-category="Tipo de Produto;Manipulados;" 32918 > 32919 32920 <div class="product-header"> 32921 32922 <div class="w-100"> 32923 32924 32925 32926 32927 32928 32929 32930 <div class="product-tags-circle"> 32931 32932 <div class="tag-circle discount"> 32933 <span>Frete Grátis</span> 32934 </div> 32935 32936 32937 32938 </div> 32939 32940 32941 32942 <div class="product-tags has-free-shipping-tag" data-tags-count="0"> 32943 32944 32945 32946 32947 32948 </div> 32949 32950 32951 32952 <div class="image "> 32953 32954 <a title="Kit Natural Emagrecimento Sem Treino - Com duração de 90 dias" href="https://www.farmacam.com.br/kit-natural-emagrecimento-sem-treino-com-duracao-de-90-dias" class="space-image"> 32955 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/kit_natural_emagrecimento_sem_treino_com_duracao_de_90_dias_125242912_1_87682814a0fda0641359872908e72489.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/kit_natural_emagrecimento_sem_treino_com_duracao_de_90_dias_125242912_1_87682814a0fda0641359872908e72489.png" alt="Kit Natural Emagrecimento Sem Treino - Com duração de 90 dias"> 32956 </a> 32957 32958 </div> 32959 32960 32961 32962 32963 32964 </div> 32965 32966 </div> 32967 32968 <div class="product-body"> 32969 32970 <a title="Kit Natural Emagrecimento Sem Treino - Com duração de 90 dias" class="product-info" href="https://www.farmacam.com.br/kit-natural-emagrecimento-sem-treino-com-duracao-de-90-dias"> 32971 32972 <div class="product-info-dados"> 32973 32974 32975 32976 32977 32978 32979 <div class="product-name"> 32980 Kit Natural Emagrecimento Sem Treino - Com duração de 90 dias 32981 </div> 32982 32983 32984 32985 <div class="product-price"> 32986 32987 32988 32989 32990 32991 32992<div class="price display-cash"> 32993 32994 32995 <span class="current-price "> 32996 R$ 889,00 32997 32998 </span> 32999 33000 <span class="product-installments"> 33001 33002 </span> 33003 33004</div> 33005 </div> 33006 33007 </div> 33008 33009 </a> 33010 33011 </div> 33012 33013 33014 <div class="product-footer"> 33015 33016 33017 <div class="w-100"> 33018 33019 33020 33021<div class="product-rating-catalog"> 33022 33023 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 33024 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 33025 </svg> 33026 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 33027 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 33028 </svg> 33029 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 33030 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 33031 </svg> 33032 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 33033 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 33034 </svg> 33035 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 33036 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 33037 </svg> 33038 33039 33040 <a title="Ver avaliações de Kit Natural Emagrecimento Sem Treino - Com duração de 90 dias" href="https://www.farmacam.com.br/kit-natural-emagrecimento-sem-treino-com-duracao-de-90-dias#
33040comments" class="total"> 33041 Seja o primeiro 33042 </a> 33043 33044 </div> 33045 33046 33047 33048 <div class="config-variacoes-compra"> 33049 33050 33051 33052 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125242912"> 33053 <input type="hidden" name="product_id" value="125242912"> 33054 <input type="hidden" name="without_stock_sale" value=""> 33055 33056 <input type="hidden" name="estoque" value="10000"> 33057 33058 33059 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 33060 <div class="alerta-estoque"></div> 33061 <div class="alerta-adicionado"></div> 33062 33063 <div class="acao-compra"> 33064 33065 <div class="quantidade-box"> 33066 <div class="quantidade-box-input"> 33067 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-estoque="10000" /> 33068 </div> 33069 <div class="quantidade-box-controles"> 33070 <div class="quantidade-box-controles-itens" data-item="mais"> 33071 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 33072 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 33073 </svg> 33074 </div> 33075 <div class="quantidade-box-controles-itens" data-item="menus"> 33076 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 33077 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 33078 </svg> 33079 </div> 33080 </div> 33081 </div> 33082 33083 33084 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125242912"> 33085 33086 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="" style="width: 100%;"> --> 33087 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 33088 33089 33090 33091 33092 33093 33094 <!-- Cesta de Compras --> 33095 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 33096 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 33097 </svg> 33098 33099 33100 33101 Comprar 33102 33103 33104 </button> 33105 <!-- </form> --> 33106 33107 </div> 33108 33109</div> 33110 33111 33112 </div> 33113 33114 </div> 33115 33116 33117</div> 33118
33119<script> 33120(function (window, document) { 33121 'use strict'; 33122 33123 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 33124 33125 if (window[GLOBAL_KEY]) { 33126 return; 33127 } 33128 33129 if (!window.Map || !window.WeakMap || !window.Promise) { 33130 return; 33131 } 33132 33133 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 33134 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 33135 '#vitrine-personalizada .product[data-id]'; 33136 var BADGE_CLASS = 'farmacam-prescription-badge'; 33137 var HOST_CLASS = 'farmacam-prescription-badge-host'; 33138 var MAX_CONCURRENT_REQUESTS = 6; 33139 var REQUEST_TIMEOUT_MS = 12000; 33140 33141 var rules = { 33142 '294': { 33143 level: '294', 33144 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 33145 }, 33146 '296': { 33147 level: '296', 33148 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 33149 }, 33150 '298': { 33151 level: '298', 33152 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 33153 } 33154 }; 33155 33156 var cache = new Map(); 33157 var pending = new Map(); 33158 var cardStates = new WeakMap(); 33159 var queue = []; 33160 var activeRequests = 0; 33161 var trayAjaxHooked = false; 33162 33163 function injectStyles() { 33164 if (document.getElementById('farmacam-prescription-cards-style')) { 33165 return; 33166 } 33167 33168 var style = document.createElement('style'); 33169 style.id = 'farmacam-prescription-cards-style'; 33170 style.textContent = [ 33171 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 33172 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 33173 'position:absolute!important;', 33174 'top:52px!important;', 33175 'left:10px!important;', 33176 'z-index:999!important;', 33177 'display:block!important;', 33178 'max-width:calc(100% - 20px)!important;', 33179 'box-sizing:border-box!important;', 33180 'padding:8px 12px!important;', 33181 'color:#fff!important;', 33182 'font-family:inherit!important;', 33183 'font-size:13px!important;', 33184 'font-weight:900!important;', 33185 'line-height:1.15!important;', 33186 'text-align:center!important;', 33187 'text-transform:uppercase!important;', 33188 'letter-spacing:.3px!important;', 33189 'white-space:normal!important;', 33190 'overflow-wrap:break-word!important;', 33191 'border-radius:3px!important;', 33192 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 33193 'pointer-events:none!important;', 33194 '}', 33195 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 33196 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 33197 'background:#d70008!important;', 33198 '}', 33199 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 33200 'background:#000!important;', 33201 '}', 33202 '@media (max-width:767px){', 33203 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 33204 'top:42px!important;', 33205 'left:6px!important;', 33206 'max-width:calc(100% - 12px)!important;', 33207 'padding:6px 8px!important;', 33208 'font-size:10px!important;', 33209 '}', 33210 '}' 33211 ].join(''); 33212 33213 (document.head || document.documentElement).appendChild(style); 33214 } 33215 33216 function normalizeProductId(value) { 33217 var id = String(value == null ? '' : value).trim(); 33218 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 33219 } 33220 33221 function classifyRelatedCategories(relatedCategories) { 33222 var found = { 33223 '292': false, 33224 '294': false, 33225 '296': false, 33226 '298': false 33227 }; 33228 33229 function inspect(value, depth) { 33230 var index; 33231 var normalized; 33232 33233 if (value == null || depth > 8) { 33234 return; 33235 } 33236 33237 if (Array.isArray(value)) { 33238 for (index = 0; index < value.length; index += 1) { 33239 inspect(value[index], depth + 1); 33240 } 33241 return; 33242 } 33243 33244 if (typeof value === 'object') { 33245 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 33246 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 33247 inspect(value.id, depth + 1); 33248 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 33249 inspect(value.category_id, depth + 1); 33250 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 33251 inspect(value.Category, depth + 1); 33252 } 33253 return; 33254 } 33255 33256 if (typeof value !== 'string' && typeof value !== 'number') { 33257 return; 33258 } 33259 normalized = normalizeProductId(value); 33260 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 33261 found[normalized] = true; 33262 } 33263 } 33264 33265 inspect(relatedCategories, 0); 33266 33267 if (found['298']) { 33268 return rules['298']; 33269 } 33270 if (found['296']) { 33271 return rules['296']; 33272 } 33273 if (found['294']) { 33274 return rules['294']; 33275 } 33276 33277 // 292 e qualquer classificacao desconhecida ficam sem tarja. 33278 return null; 33279 } 33280 33281 function ruleFromPayload(payload, productId) { 33282 var product = payload && payload.Product; 33283 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 33284 return null; 33285 } 33286 return classifyRelatedCategories(product && product.related_categories); 33287 } 33288 33289 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 33290 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 33291 function attachTrayAjaxCache() { 33292 var jq = window.jQuery; 33293 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 33294 return; 33295 } 33296
33297 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 33298 var url; 33299 var match; 33300 var productId; 33301 var payload; 33302 try { 33303 url = new URL(settings.url, window.location.href); 33304 if (url.origin !== window.location.origin) { 33305 return; 33306 } 33307 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 33308 if (!match) { 33309 return; 33310 } 33311 productId = normalizeProductId(match[1]); 33312 if (!cache.has(productId) && !pending.has(productId)) { 33313 payload = data || xhr.responseJSON; 33314 if (typeof payload === 'string') { 33315 payload = JSON.parse(payload); 33316 } 33317 if (!payload || !payload.Product || 33318 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 33319 return; 33320 } 33321 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 33322 return; 33323 } 33324 cache.set(productId, ruleFromPayload(payload, productId)); 33325 } 33326 } catch (error) { 33327 // Respostas de outras integracoes nao interferem nas tarjas. 33328 } 33329 }); 33330 33331 trayAjaxHooked = true; 33332 document.removeEventListener('load', onTrayScriptLoad, true); 33333 } 33334 33335 function onTrayScriptLoad(event) { 33336 if (event.target && event.target.tagName === 'SCRIPT') { 33337 attachTrayAjaxCache(); 33338 } 33339 } 33340 33341 function requestRule(productId) { 33342 var controller = null; 33343 var timeoutId = null; 33344 var options = { 33345 credentials: 'same-origin', 33346 headers: { 33347 'Accept': 'application/json' 33348 } 33349 }; 33350 var request; 33351 33352 if (typeof window.fetch !== 'function') { 33353 return Promise.resolve(null); 33354 } 33355 33356 if (typeof window.AbortController === 'function') { 33357 controller = new window.AbortController(); 33358 options.signal = controller.signal; 33359 timeoutId = window.setTimeout(function () { 33360 controller.abort(); 33361 }, REQUEST_TIMEOUT_MS); 33362 } 33363 33364 try { 33365 request = window.fetch( 33366 '/web_api/products/' + encodeURIComponent(productId), 33367 options 33368 ); 33369 } catch (error) { 33370 if (timeoutId !== null) { 33371 window.clearTimeout(timeoutId); 33372 } 33373 return Promise.resolve(null); 33374 } 33375 33376 return request.then(function (response) { 33377 if (!response.ok) { 33378 throw new Error('HTTP ' + response.status); 33379 } 33380 return response.json(); 33381 }).then(function (payload) { 33382 return ruleFromPayload(payload, productId); 33383 }).then(function (rule) { 33384 if (timeoutId !== null) { 33385 window.clearTimeout(timeoutId); 33386 } 33387 return rule; 33388 }, function () { 33389 if (timeoutId !== null) { 33390 window.clearTimeout(timeoutId); 33391 } 33392 33393 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 33394 return null; 33395 }); 33396 } 33397 33398 function finishJob(job, rule) { 33399 cache.set(job.productId, rule); 33400 pending.delete(job.productId); 33401 activeRequests -= 1; 33402 job.resolve(rule); 33403 pumpQueue(); 33404 } 33405 33406 function pumpQueue() { 33407 var job; 33408 33409 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 33410 job = queue.shift(); 33411 activeRequests += 1; 33412 33413 (function (currentJob) { 33414 requestRule(currentJob.productId).then(function (rule) { 33415 finishJob(currentJob, rule); 33416 }, function () { 33417 finishJob(currentJob, null); 33418 }); 33419 }(job)); 33420 } 33421 } 33422 33423 function getRule(productId) { 33424 var resolver; 33425 var promise; 33426 33427 if (cache.has(productId)) { 33428 return Promise.resolve(cache.get(productId)); 33429 } 33430 33431 if (pending.has(productId)) { 33432 return pending.get(productId); 33433 } 33434 33435 promise = new Promise(function (resolve) { 33436 resolver = resolve; 33437 }); 33438 33439 pending.set(productId, promise); 33440 queue.push({ 33441 productId: productId, 33442 resolve: resolver 33443 }); 33444 pumpQueue(); 33445 33446 return promise; 33447 } 33448 33449 function findBadge(card) { 33450 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 33451 } 33452 33453 function clearBadge(card) { 33454 var badge = findBadge(card); 33455 var image = card.querySelector('.product-header > .w-100 > .image'); 33456 33457 if (badge && badge.parentNode) { 33458 badge.parentNode.removeChild(badge); 33459 } 33460 33461 if (image) { 33462 image.classList.remove(HOST_CLASS); 33463 } 33464 33465 card.removeAttribute('data-farmacam-prescription-level'); 33466 } 33467 33468 function applyBadge(card, productId, rule) { 33469 var image; 33470 var badge; 33471 33472 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 33473 return false;
33474 } 33475 33476 clearBadge(card); 33477 33478 if (!rule) { 33479 return true; 33480 } 33481 33482 image = card.querySelector('.product-header > .w-100 > .image'); 33483 if (!image) { 33484 return false; 33485 } 33486 33487 badge = document.createElement('span'); 33488 badge.className = BADGE_CLASS; 33489 badge.setAttribute('data-farmacam-generated', 'true'); 33490 badge.setAttribute('data-farmacam-prescription-level', rule.level); 33491 badge.setAttribute('role', 'note'); 33492 badge.textContent = rule.text; 33493 33494 image.classList.add(HOST_CLASS); 33495 image.insertBefore(badge, image.firstChild); 33496 card.setAttribute('data-farmacam-prescription-level', rule.level); 33497 33498 return true; 33499 } 33500 33501 function processCard(card) { 33502 var productId; 33503 var previousState; 33504 var currentState; 33505 33506 if (!card || card.nodeType !== 1) { 33507 return; 33508 } 33509 33510 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 33511 return; 33512 } 33513 33514 productId = normalizeProductId(card.getAttribute('data-id')); 33515 previousState = cardStates.get(card); 33516 33517 if (!productId) { 33518 clearBadge(card); 33519 cardStates.delete(card); 33520 return; 33521 } 33522 33523 if ( 33524 previousState && 33525 previousState.productId === productId && 33526 previousState.status === 'loading' 33527 ) { 33528 return; 33529 } 33530 33531 if ( 33532 previousState && 33533 previousState.productId === productId && 33534 previousState.status === 'processed' 33535 ) { 33536 if (!previousState.rule || findBadge(card)) { 33537 return; 33538 } 33539 } 33540 33541 if (!previousState || previousState.productId !== productId) { 33542 clearBadge(card); 33543 } 33544 33545 currentState = { 33546 productId: productId, 33547 status: 'loading', 33548 rule: null 33549 }; 33550 cardStates.set(card, currentState); 33551 33552 getRule(productId).then(function (rule) { 33553 var applied; 33554 33555 if ( 33556 cardStates.get(card) !== currentState || 33557 normalizeProductId(card.getAttribute('data-id')) !== productId 33558 ) { 33559 return; 33560 } 33561 33562 applied = applyBadge(card, productId, rule); 33563 currentState.rule = rule; 33564 currentState.status = applied ? 'processed' : 'waiting-image'; 33565 }); 33566 } 33567 33568 function scan(root) { 33569 var cards; 33570 var index; 33571 33572 if (!root) { 33573 return; 33574 } 33575 33576 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 33577 processCard(root); 33578 } 33579 33580 if (!root.querySelectorAll) { 33581 return; 33582 } 33583 33584 cards = root.querySelectorAll(CARD_SELECTOR); 33585 for (index = 0; index < cards.length; index += 1) { 33586 processCard(cards[index]); 33587 } 33588 } 33589 33590 function startObserver() { 33591 var observer; 33592 33593 if (!window.MutationObserver || !document.documentElement) { 33594 return; 33595 } 33596 33597 observer = new MutationObserver(function (mutations) { 33598 var mutationIndex; 33599 var nodeIndex; 33600 var mutation; 33601 var node; 33602 var ownerCard; 33603 33604 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 33605 mutation = mutations[mutationIndex]; 33606 33607 if (mutation.type === 'attributes') { 33608 processCard(mutation.target); 33609 continue; 33610 } 33611 33612 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 33613 node = mutation.addedNodes[nodeIndex]; 33614 if (node.nodeType !== 1) { 33615 continue; 33616 } 33617 33618 scan(node); 33619 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 33620 if (ownerCard) { 33621 processCard(ownerCard); 33622 } 33623 } 33624 } 33625 }); 33626 33627 observer.observe(document.documentElement, { 33628 childList: true, 33629 subtree: true, 33630 attributes: true, 33631 attributeFilter: ['data-id'] 33632 }); 33633 33634 window[GLOBAL_KEY].observer = observer; 33635 } 33636 33637 window[GLOBAL_KEY] = { 33638 version: '1.1.0', 33639 cache: cache, 33640 pending: pending, 33641 cardStates: cardStates, 33642 scan: scan, 33643 processCard: processCard, 33644 observer: null 33645 }; 33646 33647 document.addEventListener('load', onTrayScriptLoad, true); 33648 attachTrayAjaxCache(); 33649 injectStyles(); 33650 scan(document); 33651 startObserver(); 33652 33653 if (document.readyState === 'loading') { 33654 document.addEventListener('DOMContentLoaded', function () { 33655 attachTrayAjaxCache(); 33656 scan(document); 33657 }); 33658 } 33659}(window, document)); 33660</script>
33660 33661 </div> 33662 <div 33663 class="swiper-slide fixWidthBoxProduct item"> 33664 33665 33666 33667 33668<div class="product animate open_cart" 33669 data-id="125240756" 33670 data-farmacam-related-categories="," 33671 data-ga4-id="125240756" 33672 data-ga4-name="Kit força muscular - Whey protein banana + Creatina" 33673 data-ga4-price="501.00" 33674 data-ga4-brand="Farmacam" 33675 data-ga4-category="Tipo de Produto;Manipulados;" 33676 > 33677 33678 <div class="product-header"> 33679 33680 <div class="w-100"> 33681 33682 33683 33684 33685 33686 33687 33688 33689 33690 33691 <div class="image "> 33692 33693 <a title="Kit força muscular - Whey protein banana + Creatina" href="https://www.farmacam.com.br/kit-forca-muscular-whey-protein-banana-creatina" class="space-image"> 33694 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/kit_forca_muscular_whey_protein_banana_creatina_125240756_1_6b4a8384367145c3cb29cf6fa325fcf2.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/kit_forca_muscular_whey_protein_banana_creatina_125240756_1_6b4a8384367145c3cb29cf6fa325fcf2.png" alt="Kit força muscular - Whey protein banana + Creatina"> 33695 </a> 33696 33697 </div> 33698 33699 33700 33701 33702 33703 </div> 33704 33705 </div> 33706 33707 <div class="product-body"> 33708 33709 <a title="Kit força muscular - Whey protein banana + Creatina" class="product-info" href="https://www.farmacam.com.br/kit-forca-muscular-whey-protein-banana-creatina"> 33710 33711 <div class="product-info-dados"> 33712 33713 33714 33715 33716 33717 33718 <div class="product-name"> 33719 Kit força muscular - Whey protein banana + Creatina 33720 </div> 33721 33722 33723 33724 <div class="product-price"> 33725 33726 <span class="product-message"> 33727 Esse acabou :( 33728 <span class="notify-me"> 33729 Avise-me quando chegar 33730 <i class="icon icon-arrow-right"></i> 33731 </span> 33732</span> 33733 </div> 33734 33735 </div> 33736 33737 </a> 33738 33739 </div> 33740 33741 33742 <div class="product-footer"> 33743 33744 33745 </div> 33746 33747 33748</div> 33749
33750<script> 33751(function (window, document) { 33752 'use strict'; 33753 33754 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 33755 33756 if (window[GLOBAL_KEY]) { 33757 return; 33758 } 33759 33760 if (!window.Map || !window.WeakMap || !window.Promise) { 33761 return; 33762 } 33763 33764 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 33765 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 33766 '#vitrine-personalizada .product[data-id]'; 33767 var BADGE_CLASS = 'farmacam-prescription-badge'; 33768 var HOST_CLASS = 'farmacam-prescription-badge-host'; 33769 var MAX_CONCURRENT_REQUESTS = 6; 33770 var REQUEST_TIMEOUT_MS = 12000; 33771 33772 var rules = { 33773 '294': { 33774 level: '294', 33775 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 33776 }, 33777 '296': { 33778 level: '296', 33779 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 33780 }, 33781 '298': { 33782 level: '298', 33783 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 33784 } 33785 }; 33786 33787 var cache = new Map(); 33788 var pending = new Map(); 33789 var cardStates = new WeakMap(); 33790 var queue = []; 33791 var activeRequests = 0; 33792 var trayAjaxHooked = false; 33793 33794 function injectStyles() { 33795 if (document.getElementById('farmacam-prescription-cards-style')) { 33796 return; 33797 } 33798 33799 var style = document.createElement('style'); 33800 style.id = 'farmacam-prescription-cards-style'; 33801 style.textContent = [ 33802 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 33803 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 33804 'position:absolute!important;', 33805 'top:52px!important;', 33806 'left:10px!important;', 33807 'z-index:999!important;', 33808 'display:block!important;', 33809 'max-width:calc(100% - 20px)!important;', 33810 'box-sizing:border-box!important;', 33811 'padding:8px 12px!important;', 33812 'color:#fff!important;', 33813 'font-family:inherit!important;', 33814 'font-size:13px!important;', 33815 'font-weight:900!important;', 33816 'line-height:1.15!important;', 33817 'text-align:center!important;', 33818 'text-transform:uppercase!important;', 33819 'letter-spacing:.3px!important;', 33820 'white-space:normal!important;', 33821 'overflow-wrap:break-word!important;', 33822 'border-radius:3px!important;', 33823 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 33824 'pointer-events:none!important;', 33825 '}', 33826 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 33827 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 33828 'background:#d70008!important;', 33829 '}', 33830 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 33831 'background:#000!important;', 33832 '}', 33833 '@media (max-width:767px){', 33834 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 33835 'top:42px!important;', 33836 'left:6px!important;', 33837 'max-width:calc(100% - 12px)!important;', 33838 'padding:6px 8px!important;', 33839 'font-size:10px!important;', 33840 '}', 33841 '}' 33842 ].join(''); 33843 33844 (document.head || document.documentElement).appendChild(style); 33845 } 33846 33847 function normalizeProductId(value) { 33848 var id = String(value == null ? '' : value).trim(); 33849 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 33850 } 33851 33852 function classifyRelatedCategories(relatedCategories) { 33853 var found = { 33854 '292': false, 33855 '294': false, 33856 '296': false, 33857 '298': false 33858 }; 33859 33860 function inspect(value, depth) { 33861 var index; 33862 var normalized; 33863 33864 if (value == null || depth > 8) { 33865 return; 33866 } 33867 33868 if (Array.isArray(value)) { 33869 for (index = 0; index < value.length; index += 1) { 33870 inspect(value[index], depth + 1); 33871 } 33872 return; 33873 } 33874 33875 if (typeof value === 'object') { 33876 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 33877 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 33878 inspect(value.id, depth + 1); 33879 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 33880 inspect(value.category_id, depth + 1); 33881 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 33882 inspect(value.Category, depth + 1); 33883 } 33884 return; 33885 } 33886 33887 if (typeof value !== 'string' && typeof value !== 'number') { 33888 return; 33889 } 33890 normalized = normalizeProductId(value); 33891 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 33892 found[normalized] = true; 33893 } 33894 } 33895 33896 inspect(relatedCategories, 0); 33897 33898 if (found['298']) { 33899 return rules['298']; 33900 } 33901 if (found['296']) { 33902 return rules['296']; 33903 } 33904 if (found['294']) { 33905 return rules['294']; 33906 } 33907 33908 // 292 e qualquer classificacao desconhecida ficam sem tarja. 33909 return null; 33910 } 33911 33912 function ruleFromPayload(payload, productId) { 33913 var product = payload && payload.Product; 33914 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 33915 return null; 33916 } 33917 return classifyRelatedCategories(product && product.related_categories); 33918 } 33919 33920 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 33921 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 33922 function attachTrayAjaxCache() { 33923 var jq = window.jQuery; 33924 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 33925 return; 33926 } 33927
33928 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 33929 var url; 33930 var match; 33931 var productId; 33932 var payload; 33933 try { 33934 url = new URL(settings.url, window.location.href); 33935 if (url.origin !== window.location.origin) { 33936 return; 33937 } 33938 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 33939 if (!match) { 33940 return; 33941 } 33942 productId = normalizeProductId(match[1]); 33943 if (!cache.has(productId) && !pending.has(productId)) { 33944 payload = data || xhr.responseJSON; 33945 if (typeof payload === 'string') { 33946 payload = JSON.parse(payload); 33947 } 33948 if (!payload || !payload.Product || 33949 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 33950 return; 33951 } 33952 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 33953 return; 33954 } 33955 cache.set(productId, ruleFromPayload(payload, productId)); 33956 } 33957 } catch (error) { 33958 // Respostas de outras integracoes nao interferem nas tarjas. 33959 } 33960 }); 33961 33962 trayAjaxHooked = true; 33963 document.removeEventListener('load', onTrayScriptLoad, true); 33964 } 33965 33966 function onTrayScriptLoad(event) { 33967 if (event.target && event.target.tagName === 'SCRIPT') { 33968 attachTrayAjaxCache(); 33969 } 33970 } 33971 33972 function requestRule(productId) { 33973 var controller = null; 33974 var timeoutId = null; 33975 var options = { 33976 credentials: 'same-origin', 33977 headers: { 33978 'Accept': 'application/json' 33979 } 33980 }; 33981 var request; 33982 33983 if (typeof window.fetch !== 'function') { 33984 return Promise.resolve(null); 33985 } 33986 33987 if (typeof window.AbortController === 'function') { 33988 controller = new window.AbortController(); 33989 options.signal = controller.signal; 33990 timeoutId = window.setTimeout(function () { 33991 controller.abort(); 33992 }, REQUEST_TIMEOUT_MS); 33993 } 33994 33995 try { 33996 request = window.fetch( 33997 '/web_api/products/' + encodeURIComponent(productId), 33998 options 33999 ); 34000 } catch (error) { 34001 if (timeoutId !== null) { 34002 window.clearTimeout(timeoutId); 34003 } 34004 return Promise.resolve(null); 34005 } 34006 34007 return request.then(function (response) { 34008 if (!response.ok) { 34009 throw new Error('HTTP ' + response.status); 34010 } 34011 return response.json(); 34012 }).then(function (payload) { 34013 return ruleFromPayload(payload, productId); 34014 }).then(function (rule) { 34015 if (timeoutId !== null) { 34016 window.clearTimeout(timeoutId); 34017 } 34018 return rule; 34019 }, function () { 34020 if (timeoutId !== null) { 34021 window.clearTimeout(timeoutId); 34022 } 34023 34024 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 34025 return null; 34026 }); 34027 } 34028 34029 function finishJob(job, rule) { 34030 cache.set(job.productId, rule); 34031 pending.delete(job.productId); 34032 activeRequests -= 1; 34033 job.resolve(rule); 34034 pumpQueue(); 34035 } 34036 34037 function pumpQueue() { 34038 var job; 34039 34040 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 34041 job = queue.shift(); 34042 activeRequests += 1; 34043 34044 (function (currentJob) { 34045 requestRule(currentJob.productId).then(function (rule) { 34046 finishJob(currentJob, rule); 34047 }, function () { 34048 finishJob(currentJob, null); 34049 }); 34050 }(job)); 34051 } 34052 } 34053 34054 function getRule(productId) { 34055 var resolver; 34056 var promise; 34057 34058 if (cache.has(productId)) { 34059 return Promise.resolve(cache.get(productId)); 34060 } 34061 34062 if (pending.has(productId)) { 34063 return pending.get(productId); 34064 } 34065 34066 promise = new Promise(function (resolve) { 34067 resolver = resolve; 34068 }); 34069 34070 pending.set(productId, promise); 34071 queue.push({ 34072 productId: productId, 34073 resolve: resolver 34074 }); 34075 pumpQueue(); 34076 34077 return promise; 34078 } 34079 34080 function findBadge(card) { 34081 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 34082 } 34083 34084 function clearBadge(card) { 34085 var badge = findBadge(card); 34086 var image = card.querySelector('.product-header > .w-100 > .image'); 34087 34088 if (badge && badge.parentNode) { 34089 badge.parentNode.removeChild(badge); 34090 } 34091 34092 if (image) { 34093 image.classList.remove(HOST_CLASS); 34094 } 34095 34096 card.removeAttribute('data-farmacam-prescription-level'); 34097 } 34098 34099 function applyBadge(card, productId, rule) { 34100 var image; 34101 var badge; 34102 34103 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 34104 return false;
34105 } 34106 34107 clearBadge(card); 34108 34109 if (!rule) { 34110 return true; 34111 } 34112 34113 image = card.querySelector('.product-header > .w-100 > .image'); 34114 if (!image) { 34115 return false; 34116 } 34117 34118 badge = document.createElement('span'); 34119 badge.className = BADGE_CLASS; 34120 badge.setAttribute('data-farmacam-generated', 'true'); 34121 badge.setAttribute('data-farmacam-prescription-level', rule.level); 34122 badge.setAttribute('role', 'note'); 34123 badge.textContent = rule.text; 34124 34125 image.classList.add(HOST_CLASS); 34126 image.insertBefore(badge, image.firstChild); 34127 card.setAttribute('data-farmacam-prescription-level', rule.level); 34128 34129 return true; 34130 } 34131 34132 function processCard(card) { 34133 var productId; 34134 var previousState; 34135 var currentState; 34136 34137 if (!card || card.nodeType !== 1) { 34138 return; 34139 } 34140 34141 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 34142 return; 34143 } 34144 34145 productId = normalizeProductId(card.getAttribute('data-id')); 34146 previousState = cardStates.get(card); 34147 34148 if (!productId) { 34149 clearBadge(card); 34150 cardStates.delete(card); 34151 return; 34152 } 34153 34154 if ( 34155 previousState && 34156 previousState.productId === productId && 34157 previousState.status === 'loading' 34158 ) { 34159 return; 34160 } 34161 34162 if ( 34163 previousState && 34164 previousState.productId === productId && 34165 previousState.status === 'processed' 34166 ) { 34167 if (!previousState.rule || findBadge(card)) { 34168 return; 34169 } 34170 } 34171 34172 if (!previousState || previousState.productId !== productId) { 34173 clearBadge(card); 34174 } 34175 34176 currentState = { 34177 productId: productId, 34178 status: 'loading', 34179 rule: null 34180 }; 34181 cardStates.set(card, currentState); 34182 34183 getRule(productId).then(function (rule) { 34184 var applied; 34185 34186 if ( 34187 cardStates.get(card) !== currentState || 34188 normalizeProductId(card.getAttribute('data-id')) !== productId 34189 ) { 34190 return; 34191 } 34192 34193 applied = applyBadge(card, productId, rule); 34194 currentState.rule = rule; 34195 currentState.status = applied ? 'processed' : 'waiting-image'; 34196 }); 34197 } 34198 34199 function scan(root) { 34200 var cards; 34201 var index; 34202 34203 if (!root) { 34204 return; 34205 } 34206 34207 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 34208 processCard(root); 34209 } 34210 34211 if (!root.querySelectorAll) { 34212 return; 34213 } 34214 34215 cards = root.querySelectorAll(CARD_SELECTOR); 34216 for (index = 0; index < cards.length; index += 1) { 34217 processCard(cards[index]); 34218 } 34219 } 34220 34221 function startObserver() { 34222 var observer; 34223 34224 if (!window.MutationObserver || !document.documentElement) { 34225 return; 34226 } 34227 34228 observer = new MutationObserver(function (mutations) { 34229 var mutationIndex; 34230 var nodeIndex; 34231 var mutation; 34232 var node; 34233 var ownerCard; 34234 34235 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 34236 mutation = mutations[mutationIndex]; 34237 34238 if (mutation.type === 'attributes') { 34239 processCard(mutation.target); 34240 continue; 34241 } 34242 34243 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 34244 node = mutation.addedNodes[nodeIndex]; 34245 if (node.nodeType !== 1) { 34246 continue; 34247 } 34248 34249 scan(node); 34250 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 34251 if (ownerCard) { 34252 processCard(ownerCard); 34253 } 34254 } 34255 } 34256 }); 34257 34258 observer.observe(document.documentElement, { 34259 childList: true, 34260 subtree: true, 34261 attributes: true, 34262 attributeFilter: ['data-id'] 34263 }); 34264 34265 window[GLOBAL_KEY].observer = observer; 34266 } 34267 34268 window[GLOBAL_KEY] = { 34269 version: '1.1.0', 34270 cache: cache, 34271 pending: pending, 34272 cardStates: cardStates, 34273 scan: scan, 34274 processCard: processCard, 34275 observer: null 34276 }; 34277 34278 document.addEventListener('load', onTrayScriptLoad, true); 34279 attachTrayAjaxCache(); 34280 injectStyles(); 34281 scan(document); 34282 startObserver(); 34283 34284 if (document.readyState === 'loading') { 34285 document.addEventListener('DOMContentLoaded', function () { 34286 attachTrayAjaxCache(); 34287 scan(document); 34288 }); 34289 } 34290}(window, document)); 34291</script>
34291 34292 </div> 34293 <div 34294 class="swiper-slide fixWidthBoxProduct item"> 34295 34296 34297 34298 34299<div class="product animate open_cart" 34300 data-id="125236371" 34301 data-farmacam-related-categories="," 34302 data-ga4-id="125236371" 34303 data-ga4-name="Alprostadil - Saúde feminina" 34304 data-ga4-price="902.00" 34305 data-ga4-brand="Farmacam" 34306 data-ga4-category="Tipo de Produto;Manipulados;" 34307 > 34308 34309 <div class="product-header"> 34310 34311 <div class="w-100"> 34312 34313 34314 34315 34316 34317 34318 34319 <div class="product-tags-circle"> 34320 34321 <div class="tag-circle discount"> 34322 <span>Frete Grátis</span> 34323 </div> 34324 34325 34326 34327 </div> 34328 34329 34330 34331 <div class="product-tags has-free-shipping-tag" data-tags-count="0"> 34332 34333 34334 34335 34336 34337 </div> 34338 34339 34340 34341 <div class="image "> 34342 34343 <a title="Alprostadil - Saúde feminina" href="https://www.farmacam.com.br/alprostadil-saude-feminina" class="space-image"> 34344 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/alprostadil_saude_feminina_125236371_1_395a0f412be8aefc6c4420e65b19169f.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/alprostadil_saude_feminina_125236371_1_395a0f412be8aefc6c4420e65b19169f.png" alt="Alprostadil - Saúde feminina"> 34345 </a> 34346 34347 </div> 34348 34349 34350 34351 34352 34353 </div> 34354 34355 </div> 34356 34357 <div class="product-body"> 34358 34359 <a title="Alprostadil - Saúde feminina" class="product-info" href="https://www.farmacam.com.br/alprostadil-saude-feminina"> 34360 34361 <div class="product-info-dados"> 34362 34363 34364 34365 34366 34367 34368 <div class="product-name"> 34369 Alprostadil - Saúde feminina 34370 </div> 34371 34372 34373 34374 <div class="product-price"> 34375 34376 34377 34378 34379 34380 34381<div class="price display-cash"> 34382 34383 34384 <span class="current-price "> 34385 R$ 902,00 34386 34387 </span> 34388 34389 <span class="product-installments"> 34390 34391 </span> 34392 34393</div> 34394 </div> 34395 34396 </div> 34397 34398 </a> 34399 34400 </div> 34401 34402 34403 <div class="product-footer"> 34404 34405 34406 <div class="w-100"> 34407 34408 34409 34410<div class="product-rating-catalog"> 34411 34412 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 34413 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 34414 </svg> 34415 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 34416 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 34417 </svg> 34418 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 34419 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 34420 </svg> 34421 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 34422 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 34423 </svg> 34424 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 34425 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 34426 </svg> 34427 34428 34429 <a title="Ver avaliações de Alprostadil - Saúde feminina" href="https://www.farmacam.com.br/alprostadil-saude-feminina#comments" class="total"> 34430 Seja o primeiro 34431 </a> 34432 34433 </div> 34434 34435 34436 34437 <div class="config-variacoes-compra"> 34438 34439 34440 34441 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125236371"> 34442 <input type="hidden" name="product_id" value="125236371"> 34443 <input type="hidden" name="without_stock_sale" value=""> 34444 34445 <input type="hidden" name="variacao" id="selectedVariant" value=""> 34446 <input type="hidden" name="estoque" value=""> 34447 34448 34449 34450 <ul class="paleta-cores"> 34451 34452 34453 34454 34455 34456 34457 34458 34459 34460 34461 34462 34463 34464 34465 34466 34467 34468 34469 34470 34471 34472 34473 34474 34475 34476 34477 34478 34479 34480 34481 34482 34483 34484 34485 34486 34487 34488 34489 34490 34491 34492 34493 34494 34495 34496 34497 34498 34499 34500 34501 34502 34503 34504 34505 34506 34507 34508 34509 34510 34511 34512 34513 34514 34515 34516 34517 34518 34519 34520 34521 34522 34523 34524 34525 34526 34527 34528 34529 34530 34531 34532 34533 34534 34535 34536 34537 34538 34539 34540 34541 34542 34543 34544 34545 34546 34547 34548 34549 34550 34551 34552 34553 34554 34555 34556 34557 34558 34559 34560 34561 34562 34563 34564 34565 34566 34567 34568 34569 34570 34571 34572 34573 34574 34575 34576 34577 34578 34579 34580 34581 34582 34583 34584 34585 34586 34587 34588 34589 34590 34591 34592 34593 34594 34595 34596 34597 34598 34599 34600 34601 34602 34603 34604 34605 34606 34607 34608 34609 34610 34611 34612 34613 34614 34615 34616 34617 34618 34619 34620 34621 34622 34623 34624 34625 34626 34627 34628 34629 34630 34631 34632 34633 34634 34635 34636 34637 34638 34639 34640 34641 34642 34643 34644 34645 34646 34647 34648 34649 34650 34651 34652 34653 34654 34655 34656 34657 34658 34659 34660 34661 34662 34663 34664 34665 34666 34667 34668 34669 34670 34671 34672 34673 34674 34675 34676 34677 34678 34679 34680 34681 34682 34683 34684 34685 34686 34687 </ul> 34688 <!-- Fim Paleta de Cores --> 34689 34690 34691 34692 34693 34694 34695 34696 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 34697 <option disabled="disabled" value=""> 34698 Selecione 34699 </option> 34700
34700 34701 34702 <option value="7093" produto="125236371" estoque="10000">100 mcg / 0,02 g - pentravan - 1 g</option> 34703 34704 34705 </select> 34706 34707 34708 <select class="select-cor" style="display: none;" title="Campo Cor"> 34709 </select> 34710 34711 34712 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 34713 <div class="alerta-estoque"></div> 34714 <div class="alerta-adicionado"></div> 34715 34716 <div class="acao-compra"> 34717 34718 <div class="quantidade-box"> 34719 <div class="quantidade-box-input"> 34720 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
34720stoque="10000" /> 34721 </div> 34722 <div class="quantidade-box-controles"> 34723 <div class="quantidade-box-controles-itens" data-item="mais"> 34724 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 34725 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 34726 </svg> 34727 </div> 34728 <div class="quantidade-box-controles-itens" data-item="menus"> 34729 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 34730 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 34731 </svg> 34732 </div> 34733 </div> 34734 </div> 34735 34736 34737 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125236371"> 34738 34739 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 34740 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 34741 34742 34743 34744 34745 34746 34747 <!-- Cesta de Compras --> 34748 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 34749 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 34750 </svg> 34751 34752 34753 34754 Comprar 34755 34756 34757 </button> 34758 <!-- </form> --> 34759 34760 </div> 34761 34762</div> 34763 34764 34765 </div> 34766 34767 </div> 34768 34769 34770</div> 34771
34772<script> 34773(function (window, document) { 34774 'use strict'; 34775 34776 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 34777 34778 if (window[GLOBAL_KEY]) { 34779 return; 34780 } 34781 34782 if (!window.Map || !window.WeakMap || !window.Promise) { 34783 return; 34784 } 34785 34786 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 34787 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 34788 '#vitrine-personalizada .product[data-id]'; 34789 var BADGE_CLASS = 'farmacam-prescription-badge'; 34790 var HOST_CLASS = 'farmacam-prescription-badge-host'; 34791 var MAX_CONCURRENT_REQUESTS = 6; 34792 var REQUEST_TIMEOUT_MS = 12000; 34793 34794 var rules = { 34795 '294': { 34796 level: '294', 34797 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 34798 }, 34799 '296': { 34800 level: '296', 34801 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 34802 }, 34803 '298': { 34804 level: '298', 34805 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 34806 } 34807 }; 34808 34809 var cache = new Map(); 34810 var pending = new Map(); 34811 var cardStates = new WeakMap(); 34812 var queue = []; 34813 var activeRequests = 0; 34814 var trayAjaxHooked = false; 34815 34816 function injectStyles() { 34817 if (document.getElementById('farmacam-prescription-cards-style')) { 34818 return; 34819 } 34820 34821 var style = document.createElement('style'); 34822 style.id = 'farmacam-prescription-cards-style'; 34823 style.textContent = [ 34824 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 34825 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 34826 'position:absolute!important;', 34827 'top:52px!important;', 34828 'left:10px!important;', 34829 'z-index:999!important;', 34830 'display:block!important;', 34831 'max-width:calc(100% - 20px)!important;', 34832 'box-sizing:border-box!important;', 34833 'padding:8px 12px!important;', 34834 'color:#fff!important;', 34835 'font-family:inherit!important;', 34836 'font-size:13px!important;', 34837 'font-weight:900!important;', 34838 'line-height:1.15!important;', 34839 'text-align:center!important;', 34840 'text-transform:uppercase!important;', 34841 'letter-spacing:.3px!important;', 34842 'white-space:normal!important;', 34843 'overflow-wrap:break-word!important;', 34844 'border-radius:3px!important;', 34845 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 34846 'pointer-events:none!important;', 34847 '}', 34848 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 34849 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 34850 'background:#d70008!important;', 34851 '}', 34852 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 34853 'background:#000!important;', 34854 '}', 34855 '@media (max-width:767px){', 34856 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 34857 'top:42px!important;', 34858 'left:6px!important;', 34859 'max-width:calc(100% - 12px)!important;', 34860 'padding:6px 8px!important;', 34861 'font-size:10px!important;', 34862 '}', 34863 '}' 34864 ].join(''); 34865 34866 (document.head || document.documentElement).appendChild(style); 34867 } 34868 34869 function normalizeProductId(value) { 34870 var id = String(value == null ? '' : value).trim(); 34871 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 34872 } 34873 34874 function classifyRelatedCategories(relatedCategories) { 34875 var found = { 34876 '292': false, 34877 '294': false, 34878 '296': false, 34879 '298': false 34880 }; 34881 34882 function inspect(value, depth) { 34883 var index; 34884 var normalized; 34885 34886 if (value == null || depth > 8) { 34887 return; 34888 } 34889 34890 if (Array.isArray(value)) { 34891 for (index = 0; index < value.length; index += 1) { 34892 inspect(value[index], depth + 1); 34893 } 34894 return; 34895 } 34896 34897 if (typeof value === 'object') { 34898 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 34899 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 34900 inspect(value.id, depth + 1); 34901 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 34902 inspect(value.category_id, depth + 1); 34903 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 34904 inspect(value.Category, depth + 1); 34905 } 34906 return; 34907 } 34908 34909 if (typeof value !== 'string' && typeof value !== 'number') { 34910 return; 34911 } 34912 normalized = normalizeProductId(value); 34913 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 34914 found[normalized] = true; 34915 } 34916 } 34917 34918 inspect(relatedCategories, 0); 34919 34920 if (found['298']) { 34921 return rules['298']; 34922 } 34923 if (found['296']) { 34924 return rules['296']; 34925 } 34926 if (found['294']) { 34927 return rules['294']; 34928 } 34929 34930 // 292 e qualquer classificacao desconhecida ficam sem tarja. 34931 return null; 34932 } 34933 34934 function ruleFromPayload(payload, productId) { 34935 var product = payload && payload.Product; 34936 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 34937 return null; 34938 } 34939 return classifyRelatedCategories(product && product.related_categories); 34940 } 34941 34942 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 34943 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 34944 function attachTrayAjaxCache() { 34945 var jq = window.jQuery; 34946 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 34947 return; 34948 } 34949
34950 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 34951 var url; 34952 var match; 34953 var productId; 34954 var payload; 34955 try { 34956 url = new URL(settings.url, window.location.href); 34957 if (url.origin !== window.location.origin) { 34958 return; 34959 } 34960 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 34961 if (!match) { 34962 return; 34963 } 34964 productId = normalizeProductId(match[1]); 34965 if (!cache.has(productId) && !pending.has(productId)) { 34966 payload = data || xhr.responseJSON; 34967 if (typeof payload === 'string') { 34968 payload = JSON.parse(payload); 34969 } 34970 if (!payload || !payload.Product || 34971 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 34972 return; 34973 } 34974 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 34975 return; 34976 } 34977 cache.set(productId, ruleFromPayload(payload, productId)); 34978 } 34979 } catch (error) { 34980 // Respostas de outras integracoes nao interferem nas tarjas. 34981 } 34982 }); 34983 34984 trayAjaxHooked = true; 34985 document.removeEventListener('load', onTrayScriptLoad, true); 34986 } 34987 34988 function onTrayScriptLoad(event) { 34989 if (event.target && event.target.tagName === 'SCRIPT') { 34990 attachTrayAjaxCache(); 34991 } 34992 } 34993 34994 function requestRule(productId) { 34995 var controller = null; 34996 var timeoutId = null; 34997 var options = { 34998 credentials: 'same-origin', 34999 headers: { 35000 'Accept': 'application/json' 35001 } 35002 }; 35003 var request; 35004 35005 if (typeof window.fetch !== 'function') { 35006 return Promise.resolve(null); 35007 } 35008 35009 if (typeof window.AbortController === 'function') { 35010 controller = new window.AbortController(); 35011 options.signal = controller.signal; 35012 timeoutId = window.setTimeout(function () { 35013 controller.abort(); 35014 }, REQUEST_TIMEOUT_MS); 35015 } 35016 35017 try { 35018 request = window.fetch( 35019 '/web_api/products/' + encodeURIComponent(productId), 35020 options 35021 ); 35022 } catch (error) { 35023 if (timeoutId !== null) { 35024 window.clearTimeout(timeoutId); 35025 } 35026 return Promise.resolve(null); 35027 } 35028 35029 return request.then(function (response) { 35030 if (!response.ok) { 35031 throw new Error('HTTP ' + response.status); 35032 } 35033 return response.json(); 35034 }).then(function (payload) { 35035 return ruleFromPayload(payload, productId); 35036 }).then(function (rule) { 35037 if (timeoutId !== null) { 35038 window.clearTimeout(timeoutId); 35039 } 35040 return rule; 35041 }, function () { 35042 if (timeoutId !== null) { 35043 window.clearTimeout(timeoutId); 35044 } 35045 35046 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 35047 return null; 35048 }); 35049 } 35050 35051 function finishJob(job, rule) { 35052 cache.set(job.productId, rule); 35053 pending.delete(job.productId); 35054 activeRequests -= 1; 35055 job.resolve(rule); 35056 pumpQueue(); 35057 } 35058 35059 function pumpQueue() { 35060 var job; 35061 35062 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 35063 job = queue.shift(); 35064 activeRequests += 1; 35065 35066 (function (currentJob) { 35067 requestRule(currentJob.productId).then(function (rule) { 35068 finishJob(currentJob, rule); 35069 }, function () { 35070 finishJob(currentJob, null); 35071 }); 35072 }(job)); 35073 } 35074 } 35075 35076 function getRule(productId) { 35077 var resolver; 35078 var promise; 35079 35080 if (cache.has(productId)) { 35081 return Promise.resolve(cache.get(productId)); 35082 } 35083 35084 if (pending.has(productId)) { 35085 return pending.get(productId); 35086 } 35087 35088 promise = new Promise(function (resolve) { 35089 resolver = resolve; 35090 }); 35091 35092 pending.set(productId, promise); 35093 queue.push({ 35094 productId: productId, 35095 resolve: resolver 35096 }); 35097 pumpQueue(); 35098 35099 return promise; 35100 } 35101 35102 function findBadge(card) { 35103 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 35104 } 35105 35106 function clearBadge(card) { 35107 var badge = findBadge(card); 35108 var image = card.querySelector('.product-header > .w-100 > .image'); 35109 35110 if (badge && badge.parentNode) { 35111 badge.parentNode.removeChild(badge); 35112 } 35113 35114 if (image) { 35115 image.classList.remove(HOST_CLASS); 35116 } 35117 35118 card.removeAttribute('data-farmacam-prescription-level'); 35119 } 35120 35121 function applyBadge(card, productId, rule) { 35122 var image; 35123 var badge; 35124 35125 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 35126 return false;
35127 } 35128 35129 clearBadge(card); 35130 35131 if (!rule) { 35132 return true; 35133 } 35134 35135 image = card.querySelector('.product-header > .w-100 > .image'); 35136 if (!image) { 35137 return false; 35138 } 35139 35140 badge = document.createElement('span'); 35141 badge.className = BADGE_CLASS; 35142 badge.setAttribute('data-farmacam-generated', 'true'); 35143 badge.setAttribute('data-farmacam-prescription-level', rule.level); 35144 badge.setAttribute('role', 'note'); 35145 badge.textContent = rule.text; 35146 35147 image.classList.add(HOST_CLASS); 35148 image.insertBefore(badge, image.firstChild); 35149 card.setAttribute('data-farmacam-prescription-level', rule.level); 35150 35151 return true; 35152 } 35153 35154 function processCard(card) { 35155 var productId; 35156 var previousState; 35157 var currentState; 35158 35159 if (!card || card.nodeType !== 1) { 35160 return; 35161 } 35162 35163 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 35164 return; 35165 } 35166 35167 productId = normalizeProductId(card.getAttribute('data-id')); 35168 previousState = cardStates.get(card); 35169 35170 if (!productId) { 35171 clearBadge(card); 35172 cardStates.delete(card); 35173 return; 35174 } 35175 35176 if ( 35177 previousState && 35178 previousState.productId === productId && 35179 previousState.status === 'loading' 35180 ) { 35181 return; 35182 } 35183 35184 if ( 35185 previousState && 35186 previousState.productId === productId && 35187 previousState.status === 'processed' 35188 ) { 35189 if (!previousState.rule || findBadge(card)) { 35190 return; 35191 } 35192 } 35193 35194 if (!previousState || previousState.productId !== productId) { 35195 clearBadge(card); 35196 } 35197 35198 currentState = { 35199 productId: productId, 35200 status: 'loading', 35201 rule: null 35202 }; 35203 cardStates.set(card, currentState); 35204 35205 getRule(productId).then(function (rule) { 35206 var applied; 35207 35208 if ( 35209 cardStates.get(card) !== currentState || 35210 normalizeProductId(card.getAttribute('data-id')) !== productId 35211 ) { 35212 return; 35213 } 35214 35215 applied = applyBadge(card, productId, rule); 35216 currentState.rule = rule; 35217 currentState.status = applied ? 'processed' : 'waiting-image'; 35218 }); 35219 } 35220 35221 function scan(root) { 35222 var cards; 35223 var index; 35224 35225 if (!root) { 35226 return; 35227 } 35228 35229 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 35230 processCard(root); 35231 } 35232 35233 if (!root.querySelectorAll) { 35234 return; 35235 } 35236 35237 cards = root.querySelectorAll(CARD_SELECTOR); 35238 for (index = 0; index < cards.length; index += 1) { 35239 processCard(cards[index]); 35240 } 35241 } 35242 35243 function startObserver() { 35244 var observer; 35245 35246 if (!window.MutationObserver || !document.documentElement) { 35247 return; 35248 } 35249 35250 observer = new MutationObserver(function (mutations) { 35251 var mutationIndex; 35252 var nodeIndex; 35253 var mutation; 35254 var node; 35255 var ownerCard; 35256 35257 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 35258 mutation = mutations[mutationIndex]; 35259 35260 if (mutation.type === 'attributes') { 35261 processCard(mutation.target); 35262 continue; 35263 } 35264 35265 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 35266 node = mutation.addedNodes[nodeIndex]; 35267 if (node.nodeType !== 1) { 35268 continue; 35269 } 35270 35271 scan(node); 35272 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 35273 if (ownerCard) { 35274 processCard(ownerCard); 35275 } 35276 } 35277 } 35278 }); 35279 35280 observer.observe(document.documentElement, { 35281 childList: true, 35282 subtree: true, 35283 attributes: true, 35284 attributeFilter: ['data-id'] 35285 }); 35286 35287 window[GLOBAL_KEY].observer = observer; 35288 } 35289 35290 window[GLOBAL_KEY] = { 35291 version: '1.1.0', 35292 cache: cache, 35293 pending: pending, 35294 cardStates: cardStates, 35295 scan: scan, 35296 processCard: processCard, 35297 observer: null 35298 }; 35299 35300 document.addEventListener('load', onTrayScriptLoad, true); 35301 attachTrayAjaxCache(); 35302 injectStyles(); 35303 scan(document); 35304 startObserver(); 35305 35306 if (document.readyState === 'loading') { 35307 document.addEventListener('DOMContentLoaded', function () { 35308 attachTrayAjaxCache(); 35309 scan(document); 35310 }); 35311 } 35312}(window, document)); 35313</script>
35313 35314 </div> 35315 <div 35316 class="swiper-slide fixWidthBoxProduct item"> 35317 35318 35319 35320 35321<div class="product animate open_cart" 35322 data-id="125241466" 35323 data-farmacam-related-categories="," 35324 data-ga4-id="125241466" 35325 data-ga4-name="Os 4 Pilares Contra o Envelhecimento 120 doses" 35326 data-ga4-price="799.00" 35327 data-ga4-brand="Farmacam" 35328 data-ga4-category="Tipo de Produto;Manipulados;" 35329 > 35330 35331 <div class="product-header"> 35332 35333 <div class="w-100"> 35334 35335 35336 35337 35338 35339 35340 35341 <div class="product-tags-circle"> 35342 35343 <div class="tag-circle discount"> 35344 <span>Frete Grátis</span> 35345 </div> 35346 35347 35348 35349 </div> 35350 35351 35352 35353 <div class="product-tags has-free-shipping-tag" data-tags-count="0"> 35354 35355 35356 35357 35358 35359 </div> 35360 35361 35362 35363 <div class="image "> 35364 35365 <a title="Os 4 Pilares Contra o Envelhecimento 120 doses" href="https://www.farmacam.com.br/os-4-pilares-contra-o-envelhecimento-120-doses" class="space-image"> 35366 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/os_4_pilares_contra_o_envelhecimento_120_doses_125241466_1_de63eaee594f5f5e1dac1319e5526f3a.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/os_4_pilares_contra_o_envelhecimento_120_doses_125241466_1_de63eaee594f5f5e1dac1319e5526f3a.png" alt="Os 4 Pilares Contra o Envelhecimento 120 doses"> 35367 </a> 35368 35369 </div> 35370 35371 35372 35373 35374 35375 </div> 35376 35377 </div> 35378 35379 <div class="product-body"> 35380 35381 <a title="Os 4 Pilares Contra o Envelhecimento 120 doses" class="product-info" href="https://www.farmacam.com.br/os-4-pilares-contra-o-envelhecimento-120-doses"> 35382 35383 <div class="product-info-dados"> 35384 35385 35386 35387 35388 35389 35390 <div class="product-name"> 35391 Os 4 Pilares Contra o Envelhecimento 120 doses 35392 </div> 35393 35394 35395 35396 <div class="product-price"> 35397 35398 35399 35400 35401 35402 35403<div class="price display-cash"> 35404 35405 35406 <span class="current-price "> 35407 R$ 799,00 35408 35409 </span> 35410 35411 <span class="product-installments"> 35412 35413 </span> 35414 35415</div> 35416 </div> 35417 35418 </div> 35419 35420 </a> 35421 35422 </div> 35423 35424 35425 <div class="product-footer"> 35426 35427 35428 <div class="w-100"> 35429 35430 35431 35432<div class="product-rating-catalog"> 35433 35434 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 35435 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 35436 </svg> 35437 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 35438 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 35439 </svg> 35440 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 35441 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 35442 </svg> 35443 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 35444 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 35445 </svg> 35446 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 35447 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 35448 </svg> 35449 35450 35451 <a title="Ver avaliações de Os 4 Pilares Contra o Envelhecimento 120 doses" href="https://www.farmacam.com.br/os-4-pilares-contra-o-envelhecimento-120-doses#comments" class="total"> 35452 Seja o primeiro 35453 </a> 35454 35455 </div> 35456 35457 35458 35459 <div class="config-variacoes-compra"> 35460 35461 35462 35463 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125241466"> 35464 <input type="hidden" name="product_id" value="125241466"> 35465 <input type="hidden" name="without_stock_sale" value=""> 35466 35467 <input type="hidden" name="estoque" value="10000"> 35468 35469 35470 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 35471 <div class="alerta-estoque"></div> 35472 <div class="alerta-adicionado"></div> 35473 35474 <div class="acao-compra"> 35475 35476 <div class="quantidade-box"> 35477 <div class="quantidade-box-input"> 35478 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
35478stoque="10000" /> 35479 </div> 35480 <div class="quantidade-box-controles"> 35481 <div class="quantidade-box-controles-itens" data-item="mais"> 35482 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 35483 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 35484 </svg> 35485 </div> 35486 <div class="quantidade-box-controles-itens" data-item="menus"> 35487 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 35488 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 35489 </svg> 35490 </div> 35491 </div> 35492 </div> 35493 35494 35495 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125241466"> 35496 35497 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="" style="width: 100%;"> --> 35498 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 35499 35500 35501 35502 35503 35504 35505 <!-- Cesta de Compras --> 35506 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 35507 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 35508 </svg> 35509 35510 35511 35512 Comprar 35513 35514 35515 </button> 35516 <!-- </form> --> 35517 35518 </div> 35519 35520</div> 35521 35522 35523 </div> 35524 35525 </div> 35526 35527 35528</div> 35529
35530<script> 35531(function (window, document) { 35532 'use strict'; 35533 35534 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 35535 35536 if (window[GLOBAL_KEY]) { 35537 return; 35538 } 35539 35540 if (!window.Map || !window.WeakMap || !window.Promise) { 35541 return; 35542 } 35543 35544 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 35545 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 35546 '#vitrine-personalizada .product[data-id]'; 35547 var BADGE_CLASS = 'farmacam-prescription-badge'; 35548 var HOST_CLASS = 'farmacam-prescription-badge-host'; 35549 var MAX_CONCURRENT_REQUESTS = 6; 35550 var REQUEST_TIMEOUT_MS = 12000; 35551 35552 var rules = { 35553 '294': { 35554 level: '294', 35555 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 35556 }, 35557 '296': { 35558 level: '296', 35559 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 35560 }, 35561 '298': { 35562 level: '298', 35563 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 35564 } 35565 }; 35566 35567 var cache = new Map(); 35568 var pending = new Map(); 35569 var cardStates = new WeakMap(); 35570 var queue = []; 35571 var activeRequests = 0; 35572 var trayAjaxHooked = false; 35573 35574 function injectStyles() { 35575 if (document.getElementById('farmacam-prescription-cards-style')) { 35576 return; 35577 } 35578 35579 var style = document.createElement('style'); 35580 style.id = 'farmacam-prescription-cards-style'; 35581 style.textContent = [ 35582 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 35583 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 35584 'position:absolute!important;', 35585 'top:52px!important;', 35586 'left:10px!important;', 35587 'z-index:999!important;', 35588 'display:block!important;', 35589 'max-width:calc(100% - 20px)!important;', 35590 'box-sizing:border-box!important;', 35591 'padding:8px 12px!important;', 35592 'color:#fff!important;', 35593 'font-family:inherit!important;', 35594 'font-size:13px!important;', 35595 'font-weight:900!important;', 35596 'line-height:1.15!important;', 35597 'text-align:center!important;', 35598 'text-transform:uppercase!important;', 35599 'letter-spacing:.3px!important;', 35600 'white-space:normal!important;', 35601 'overflow-wrap:break-word!important;', 35602 'border-radius:3px!important;', 35603 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 35604 'pointer-events:none!important;', 35605 '}', 35606 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 35607 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 35608 'background:#d70008!important;', 35609 '}', 35610 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 35611 'background:#000!important;', 35612 '}', 35613 '@media (max-width:767px){', 35614 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 35615 'top:42px!important;', 35616 'left:6px!important;', 35617 'max-width:calc(100% - 12px)!important;', 35618 'padding:6px 8px!important;', 35619 'font-size:10px!important;', 35620 '}', 35621 '}' 35622 ].join(''); 35623 35624 (document.head || document.documentElement).appendChild(style); 35625 } 35626 35627 function normalizeProductId(value) { 35628 var id = String(value == null ? '' : value).trim(); 35629 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 35630 } 35631 35632 function classifyRelatedCategories(relatedCategories) { 35633 var found = { 35634 '292': false, 35635 '294': false, 35636 '296': false, 35637 '298': false 35638 }; 35639 35640 function inspect(value, depth) { 35641 var index; 35642 var normalized; 35643 35644 if (value == null || depth > 8) { 35645 return; 35646 } 35647 35648 if (Array.isArray(value)) { 35649 for (index = 0; index < value.length; index += 1) { 35650 inspect(value[index], depth + 1); 35651 } 35652 return; 35653 } 35654 35655 if (typeof value === 'object') { 35656 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 35657 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 35658 inspect(value.id, depth + 1); 35659 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 35660 inspect(value.category_id, depth + 1); 35661 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 35662 inspect(value.Category, depth + 1); 35663 } 35664 return; 35665 } 35666 35667 if (typeof value !== 'string' && typeof value !== 'number') { 35668 return; 35669 } 35670 normalized = normalizeProductId(value); 35671 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 35672 found[normalized] = true; 35673 } 35674 } 35675 35676 inspect(relatedCategories, 0); 35677 35678 if (found['298']) { 35679 return rules['298']; 35680 } 35681 if (found['296']) { 35682 return rules['296']; 35683 } 35684 if (found['294']) { 35685 return rules['294']; 35686 } 35687 35688 // 292 e qualquer classificacao desconhecida ficam sem tarja. 35689 return null; 35690 } 35691 35692 function ruleFromPayload(payload, productId) { 35693 var product = payload && payload.Product; 35694 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 35695 return null; 35696 } 35697 return classifyRelatedCategories(product && product.related_categories); 35698 } 35699 35700 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 35701 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 35702 function attachTrayAjaxCache() { 35703 var jq = window.jQuery; 35704 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 35705 return; 35706 } 35707
35708 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 35709 var url; 35710 var match; 35711 var productId; 35712 var payload; 35713 try { 35714 url = new URL(settings.url, window.location.href); 35715 if (url.origin !== window.location.origin) { 35716 return; 35717 } 35718 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 35719 if (!match) { 35720 return; 35721 } 35722 productId = normalizeProductId(match[1]); 35723 if (!cache.has(productId) && !pending.has(productId)) { 35724 payload = data || xhr.responseJSON; 35725 if (typeof payload === 'string') { 35726 payload = JSON.parse(payload); 35727 } 35728 if (!payload || !payload.Product || 35729 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 35730 return; 35731 } 35732 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 35733 return; 35734 } 35735 cache.set(productId, ruleFromPayload(payload, productId)); 35736 } 35737 } catch (error) { 35738 // Respostas de outras integracoes nao interferem nas tarjas. 35739 } 35740 }); 35741 35742 trayAjaxHooked = true; 35743 document.removeEventListener('load', onTrayScriptLoad, true); 35744 } 35745 35746 function onTrayScriptLoad(event) { 35747 if (event.target && event.target.tagName === 'SCRIPT') { 35748 attachTrayAjaxCache(); 35749 } 35750 } 35751 35752 function requestRule(productId) { 35753 var controller = null; 35754 var timeoutId = null; 35755 var options = { 35756 credentials: 'same-origin', 35757 headers: { 35758 'Accept': 'application/json' 35759 } 35760 }; 35761 var request; 35762 35763 if (typeof window.fetch !== 'function') { 35764 return Promise.resolve(null); 35765 } 35766 35767 if (typeof window.AbortController === 'function') { 35768 controller = new window.AbortController(); 35769 options.signal = controller.signal; 35770 timeoutId = window.setTimeout(function () { 35771 controller.abort(); 35772 }, REQUEST_TIMEOUT_MS); 35773 } 35774 35775 try { 35776 request = window.fetch( 35777 '/web_api/products/' + encodeURIComponent(productId), 35778 options 35779 ); 35780 } catch (error) { 35781 if (timeoutId !== null) { 35782 window.clearTimeout(timeoutId); 35783 } 35784 return Promise.resolve(null); 35785 } 35786 35787 return request.then(function (response) { 35788 if (!response.ok) { 35789 throw new Error('HTTP ' + response.status); 35790 } 35791 return response.json(); 35792 }).then(function (payload) { 35793 return ruleFromPayload(payload, productId); 35794 }).then(function (rule) { 35795 if (timeoutId !== null) { 35796 window.clearTimeout(timeoutId); 35797 } 35798 return rule; 35799 }, function () { 35800 if (timeoutId !== null) { 35801 window.clearTimeout(timeoutId); 35802 } 35803 35804 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 35805 return null; 35806 }); 35807 } 35808 35809 function finishJob(job, rule) { 35810 cache.set(job.productId, rule); 35811 pending.delete(job.productId); 35812 activeRequests -= 1; 35813 job.resolve(rule); 35814 pumpQueue(); 35815 } 35816 35817 function pumpQueue() { 35818 var job; 35819 35820 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 35821 job = queue.shift(); 35822 activeRequests += 1; 35823 35824 (function (currentJob) { 35825 requestRule(currentJob.productId).then(function (rule) { 35826 finishJob(currentJob, rule); 35827 }, function () { 35828 finishJob(currentJob, null); 35829 }); 35830 }(job)); 35831 } 35832 } 35833 35834 function getRule(productId) { 35835 var resolver; 35836 var promise; 35837 35838 if (cache.has(productId)) { 35839 return Promise.resolve(cache.get(productId)); 35840 } 35841 35842 if (pending.has(productId)) { 35843 return pending.get(productId); 35844 } 35845 35846 promise = new Promise(function (resolve) { 35847 resolver = resolve; 35848 }); 35849 35850 pending.set(productId, promise); 35851 queue.push({ 35852 productId: productId, 35853 resolve: resolver 35854 }); 35855 pumpQueue(); 35856 35857 return promise; 35858 } 35859 35860 function findBadge(card) { 35861 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 35862 } 35863 35864 function clearBadge(card) { 35865 var badge = findBadge(card); 35866 var image = card.querySelector('.product-header > .w-100 > .image'); 35867 35868 if (badge && badge.parentNode) { 35869 badge.parentNode.removeChild(badge); 35870 } 35871 35872 if (image) { 35873 image.classList.remove(HOST_CLASS); 35874 } 35875 35876 card.removeAttribute('data-farmacam-prescription-level'); 35877 } 35878 35879 function applyBadge(card, productId, rule) { 35880 var image; 35881 var badge; 35882 35883 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 35884 return false;
35885 } 35886 35887 clearBadge(card); 35888 35889 if (!rule) { 35890 return true; 35891 } 35892 35893 image = card.querySelector('.product-header > .w-100 > .image'); 35894 if (!image) { 35895 return false; 35896 } 35897 35898 badge = document.createElement('span'); 35899 badge.className = BADGE_CLASS; 35900 badge.setAttribute('data-farmacam-generated', 'true'); 35901 badge.setAttribute('data-farmacam-prescription-level', rule.level); 35902 badge.setAttribute('role', 'note'); 35903 badge.textContent = rule.text; 35904 35905 image.classList.add(HOST_CLASS); 35906 image.insertBefore(badge, image.firstChild); 35907 card.setAttribute('data-farmacam-prescription-level', rule.level); 35908 35909 return true; 35910 } 35911 35912 function processCard(card) { 35913 var productId; 35914 var previousState; 35915 var currentState; 35916 35917 if (!card || card.nodeType !== 1) { 35918 return; 35919 } 35920 35921 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 35922 return; 35923 } 35924 35925 productId = normalizeProductId(card.getAttribute('data-id')); 35926 previousState = cardStates.get(card); 35927 35928 if (!productId) { 35929 clearBadge(card); 35930 cardStates.delete(card); 35931 return; 35932 } 35933 35934 if ( 35935 previousState && 35936 previousState.productId === productId && 35937 previousState.status === 'loading' 35938 ) { 35939 return; 35940 } 35941 35942 if ( 35943 previousState && 35944 previousState.productId === productId && 35945 previousState.status === 'processed' 35946 ) { 35947 if (!previousState.rule || findBadge(card)) { 35948 return; 35949 } 35950 } 35951 35952 if (!previousState || previousState.productId !== productId) { 35953 clearBadge(card); 35954 } 35955 35956 currentState = { 35957 productId: productId, 35958 status: 'loading', 35959 rule: null 35960 }; 35961 cardStates.set(card, currentState); 35962 35963 getRule(productId).then(function (rule) { 35964 var applied; 35965 35966 if ( 35967 cardStates.get(card) !== currentState || 35968 normalizeProductId(card.getAttribute('data-id')) !== productId 35969 ) { 35970 return; 35971 } 35972 35973 applied = applyBadge(card, productId, rule); 35974 currentState.rule = rule; 35975 currentState.status = applied ? 'processed' : 'waiting-image'; 35976 }); 35977 } 35978 35979 function scan(root) { 35980 var cards; 35981 var index; 35982 35983 if (!root) { 35984 return; 35985 } 35986 35987 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 35988 processCard(root); 35989 } 35990 35991 if (!root.querySelectorAll) { 35992 return; 35993 } 35994 35995 cards = root.querySelectorAll(CARD_SELECTOR); 35996 for (index = 0; index < cards.length; index += 1) { 35997 processCard(cards[index]); 35998 } 35999 } 36000 36001 function startObserver() { 36002 var observer; 36003 36004 if (!window.MutationObserver || !document.documentElement) { 36005 return; 36006 } 36007 36008 observer = new MutationObserver(function (mutations) { 36009 var mutationIndex; 36010 var nodeIndex; 36011 var mutation; 36012 var node; 36013 var ownerCard; 36014 36015 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 36016 mutation = mutations[mutationIndex]; 36017 36018 if (mutation.type === 'attributes') { 36019 processCard(mutation.target); 36020 continue; 36021 } 36022 36023 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 36024 node = mutation.addedNodes[nodeIndex]; 36025 if (node.nodeType !== 1) { 36026 continue; 36027 } 36028 36029 scan(node); 36030 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 36031 if (ownerCard) { 36032 processCard(ownerCard); 36033 } 36034 } 36035 } 36036 }); 36037 36038 observer.observe(document.documentElement, { 36039 childList: true, 36040 subtree: true, 36041 attributes: true, 36042 attributeFilter: ['data-id'] 36043 }); 36044 36045 window[GLOBAL_KEY].observer = observer; 36046 } 36047 36048 window[GLOBAL_KEY] = { 36049 version: '1.1.0', 36050 cache: cache, 36051 pending: pending, 36052 cardStates: cardStates, 36053 scan: scan, 36054 processCard: processCard, 36055 observer: null 36056 }; 36057 36058 document.addEventListener('load', onTrayScriptLoad, true); 36059 attachTrayAjaxCache(); 36060 injectStyles(); 36061 scan(document); 36062 startObserver(); 36063 36064 if (document.readyState === 'loading') { 36065 document.addEventListener('DOMContentLoaded', function () { 36066 attachTrayAjaxCache(); 36067 scan(document); 36068 }); 36069 } 36070}(window, document)); 36071</script>
36071 36072 </div> 36073 </div> 36074 <div class="swiper-button-prev"></div> 36075 <div class="swiper-button-next"></div> 36076 <div class="swiper-pagination"></div> 36077 </div> 36078 36079 </div> 36080 36081 36082 36083 </div> 36084</div> 36085 36086 36087 36088 36089 36090 36091 36092 36093 36094 36095 <div class="vitrine-banners vt-3D"> 36096 <div class="container swiper swiper-vitrine-3-banners"> 36097 <div class="banners-grid banners-grid-3 flex justify-between swiper-wrapper"> 36098 <div class="item box-banners swiper-slide"> 36099 <a title="Banner Vitrine" href="desempenho-fisico"> 36100 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/TERCEIRA-VITRINE-UM.png?40911a9f4d7a99b6eef6b4ae366be082" class="lazyload" alt="Banner Vitrine"> 36101 </a> 36102 36103 </div> 36104 <div class="item box-banners swiper-slide"> 36105 <a title="Banner Vitrine" href="desempenho-imunologico"> 36106 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/TERCEIRA-VITRINE-DOIS.png?40911a9f4d7a99b6eef6b4ae366be082" class="lazyload" alt="Banner Vitrine"> 36107 </a> 36108 36109 </div> 36110 <div class="item box-banners swiper-slide"> 36111 <a title="Banner Vitrine" href="desempenho-mental"> 36112 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/TERCEIRA-VITRINE-TRES.png?40911a9f4d7a99b6eef6b4ae366be082" class="lazyload" alt="Banner Vitrine"> 36113 </a> 36114 36115 </div> 36116 <div class="item box-banners swiper-slide"> 36117 <a title="Banner Vitrine" href="desempenho-sexual"> 36118 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/TERCEIRA-VITRINE-QUATRO.png?40911a9f4d7a99b6eef6b4ae366be082" class="lazyload" alt="Banner Vitrine"> 36119 </a> 36120 36121 </div> 36122 </div> 36123 <div class="swiper-pagination" role="tablist" aria-label="Navegação de slides"></div> 36124 </div> 36125 </div> 36126 36127 36128 36129 36130 36131 36132 36133 36134 36135 36136 36137 36138 36139 36140<div class="section-showcase "> 36141 <div class="container"> 36142 36143 <div class="section-header"> 36144 <h2 class="title-section"> 36145 36146 36147Promoções Exclusivas </h2> 36148 36149 <div class="showcase-line"></div> 36150 36151 </div> 36152 36153 <div id="showcase4" class="list-product swiper showcase-slide loop-infinito"> 36154 36155 36156 36157 <div class="swiper-container"> 36158 <div class="swiper-wrapper"> 36159 36160 <div 36161 class="swiper-slide fixWidthBoxProduct item"> 36162 36163 36164 36165 36166<div class="product animate open_cart" 36167 data-id="125235757" 36168 data-farmacam-related-categories="," 36169 data-ga4-id="125235757" 36170 data-ga4-name="AAKG" 36171 data-ga4-price="62.00" 36172 data-ga4-brand="Farmacam" 36173 data-ga4-category="Tipo de Produto;Manipulados;" 36174 data-ga4-promotion="50"> 36175 36176 <div class="product-header"> 36177 36178 <div class="w-100"> 36179 36180 36181 36182 36183 36184 36185 36186 36187 <div class="product-tags-circle product-tags-circle-right"> 36188 36189 <div class="tag-circle discount">
36190 <span> 36191 19% OFF 36192 </span> 36193 </div> 36194 36195 36196 </div> 36197 36198 <div class="product-tags " data-tags-count="0"> 36199 36200 36201 36202 36203 <div class="tag extra fix-Selo"> 36204 <img width="119" height="22" alt="Selo" src="https://images.tcdn.com.br/img/img_prod/1063102/1764006510_oportunidade.png" fetchpriority='high' /> 36205 </div> 36206 36207 </div> 36208 36209 36210 36211 <div class="image "> 36212 36213 <a title="AAKG" href="https://www.farmacam.com.br/aakg" class="space-image"> 36214 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/aakg_125235757_1_e521548da08f885208381236b9d2e4b0.jpg" data-src="https://images.tcdn.com.br/img/img_prod/1063102/aakg_125235757_1_e521548da08f885208381236b9d2e4b0.jpg" alt="AAKG"> 36215 </a> 36216 36217 </div> 36218 36219 36220 36221 36222 36223 </div> 36224 36225 </div> 36226 36227 <div class="product-body"> 36228 36229 <a title="AAKG" class="product-info" href="https://www.farmacam.com.br/aakg"> 36230 36231 <div class="product-info-dados"> 36232 36233 36234 36235 <div class="listagem-produtos-timer-promocao" data-inicial="2026-09-03" data-final="2026-12-24"></div> 36236 36237 36238 36239 <div class="product-name"> 36240 AAKG 36241 </div> 36242 36243 36244 36245 <div class="product-price"> 36246 36247 36248 36249 <div class="compre-economize"> 36250 Economize: R$ 12,00 36251 </div> 36252 36253 36254 <span class="product-has-variants text-center"> 36255 A partir de 36256 </span> 36257 36258<div class="price display-cash"> 36259 36260 <span class="old-price"> 36261 R$ 62,00 36262 </span> 36263 36264 <span class="current-price "> 36265 R$ 50,00 36266 36267 </span> 36268 36269 <span class="product-installments"> 36270 36271 </span> 36272 36273</div> 36274 </div> 36275 36276 </div> 36277 36278 </a> 36279 36280 </div> 36281 36282 36283 <div class="product-footer"> 36284 36285 36286 <div class="w-100"> 36287 36288 36289 36290<div class="product-rating-catalog"> 36291 36292 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 36293 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 36294 </svg> 36295 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 36296 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 36297 </svg> 36298 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 36299 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 36300 </svg> 36301 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 36302 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 36303 </svg> 36304 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 36305 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 36306 </svg> 36307 36308 36309 <a title="Ver avaliações de AAKG" href="https://www.farmacam.com.br/aakg#comments" class="total"> 36310 Seja o primeiro 36311 </a> 36312 36313 </div> 36314 36315 36316 36317 <div class="config-variacoes-compra"> 36318 36319 36320 36321 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125235757"> 36322 <input type="hidden" name="product_id" value="125235757"> 36323 <input type="hidden" name="without_stock_sale" value=""> 36324 36325 <input type="hidden" name="variacao" id="selectedVariant" value=""> 36326 <input type="hidden" name="estoque" value=""> 36327 36328 36329 36330 <ul class="paleta-cores"> 36331 36332 36333 36334 36335 36336 36337 36338 36339 36340 36341 36342 36343 36344 36345 36346 36347 36348 36349 36350 36351 36352 36353 36354 36355 36356 36357 36358 36359 36360 36361 36362 36363 36364 36365 36366 36367 36368 36369 36370 36371 36372 36373 36374 36375 36376 36377 36378 36379 36380 36381 36382 36383 36384 36385 36386 36387 36388 36389 36390 36391 36392 36393 36394 36395 36396 36397 36398 36399 36400 36401 36402 36403 36404 36405 36406 36407 36408 36409 36410 36411 36412 36413 36414 36415 36416 36417 36418 36419 36420 36421 36422 36423 36424 36425 36426 36427 36428 36429 36430 36431 36432 36433 36434 36435 36436 36437 36438 36439 36440 36441 36442 36443 36444 36445 36446 36447 36448 36449 36450 36451 36452 36453 36454 36455 36456 36457 36458 36459 36460 36461 36462 36463 36464 36465 36466 36467 36468 36469 36470 36471 36472 36473 36474 36475 36476 36477 36478 36479 36480 36481 36482 36483 36484 36485 36486 36487 36488 36489 36490 36491 36492 36493 36494 36495 36496 36497 36498 36499 36500 36501 36502 36503 36504 36505 36506 36507 36508 36509 36510 36511 36512 36513 36514 36515 36516 36517 36518 36519 36520 36521 36522 36523 36524 36525 36526 36527 36528 36529 36530 36531 36532 36533 36534 36535 36536 36537 36538 36539 36540 36541 36542 36543 36544 36545 36546 36547 36548 36549 36550 36551 36552 36553 36554 36555 36556 36557 36558 36559 36560 36561 36562 36563 36564 36565 36566 36567 36568 36569 36570 36571 36572 36573 36574 36575 36576 36577 36578 36579 36580 36581 36582 36583 36584 36585 36586 36587 36588 36589 36590 36591 36592 36593 36594 36595 36596 36597 36598 36599 36600 36601 36602 36603 36604 36605 36606 36607 36608 36609 36610 36611 36612 36613
36613 36614 36615 36616 36617 36618 36619 36620 36621 36622 36623 36624 36625 36626 36627 36628 36629 36630 36631 36632 36633 36634 36635 36636 36637 36638 36639 36640 36641 36642 36643 36644 36645 36646 36647 36648 36649 36650 36651 36652 36653 36654 36655 36656 36657 36658 36659 36660 36661 36662 36663 </ul> 36664 <!-- Fim Paleta de Cores --> 36665 36666 36667 36668 36669 36670 36671 36672 36673 36674 36675 36676 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 36677 <option disabled="disabled" value=""> 36678 Selecione 36679 </option> 36680 36681 36682 <option value="5545" produto="125235757" estoque="9998">1.500 mg - 30 doses</option> 36683 36684 36685 36686 36687 <option value="5547" produto="125235757" estoque="10000">1.500 mg - 60 doses</option> 36688 36689 36690 </select> 36691 36692 36693 <select class="select-cor" style="display: none;" title="Campo Cor"> 36694 </select> 36695 36696 36697 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 36698 <div class="alerta-estoque"></div> 36699 <div class="alerta-adicionado"></div> 36700 36701 <div class="acao-compra"> 36702 36703 <div class="quantidade-box"> 36704 <div class="quantidade-box-input"> 36705 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
36705stoque="19998" /> 36706 </div> 36707 <div class="quantidade-box-controles"> 36708 <div class="quantidade-box-controles-itens" data-item="mais"> 36709 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 36710 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 36711 </svg> 36712 </div> 36713 <div class="quantidade-box-controles-itens" data-item="menus"> 36714 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 36715 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 36716 </svg> 36717 </div> 36718 </div> 36719 </div> 36720 36721 36722 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125235757"> 36723 36724 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 36725 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 36726 36727 36728 36729 36730 36731 36732 <!-- Cesta de Compras --> 36733 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 36734 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 36735 </svg> 36736 36737 36738 36739 Comprar 36740 36741 36742 </button> 36743 <!-- </form> --> 36744 36745 </div> 36746 36747</div> 36748 36749 36750 </div> 36751 36752 </div> 36753 36754 36755</div> 36756
36757<script> 36758(function (window, document) { 36759 'use strict'; 36760 36761 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 36762 36763 if (window[GLOBAL_KEY]) { 36764 return; 36765 } 36766 36767 if (!window.Map || !window.WeakMap || !window.Promise) { 36768 return; 36769 } 36770 36771 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 36772 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 36773 '#vitrine-personalizada .product[data-id]'; 36774 var BADGE_CLASS = 'farmacam-prescription-badge'; 36775 var HOST_CLASS = 'farmacam-prescription-badge-host'; 36776 var MAX_CONCURRENT_REQUESTS = 6; 36777 var REQUEST_TIMEOUT_MS = 12000; 36778 36779 var rules = { 36780 '294': { 36781 level: '294', 36782 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 36783 }, 36784 '296': { 36785 level: '296', 36786 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 36787 }, 36788 '298': { 36789 level: '298', 36790 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 36791 } 36792 }; 36793 36794 var cache = new Map(); 36795 var pending = new Map(); 36796 var cardStates = new WeakMap(); 36797 var queue = []; 36798 var activeRequests = 0; 36799 var trayAjaxHooked = false; 36800 36801 function injectStyles() { 36802 if (document.getElementById('farmacam-prescription-cards-style')) { 36803 return; 36804 } 36805 36806 var style = document.createElement('style'); 36807 style.id = 'farmacam-prescription-cards-style'; 36808 style.textContent = [ 36809 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 36810 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 36811 'position:absolute!important;', 36812 'top:52px!important;', 36813 'left:10px!important;', 36814 'z-index:999!important;', 36815 'display:block!important;', 36816 'max-width:calc(100% - 20px)!important;', 36817 'box-sizing:border-box!important;', 36818 'padding:8px 12px!important;', 36819 'color:#fff!important;', 36820 'font-family:inherit!important;', 36821 'font-size:13px!important;', 36822 'font-weight:900!important;', 36823 'line-height:1.15!important;', 36824 'text-align:center!important;', 36825 'text-transform:uppercase!important;', 36826 'letter-spacing:.3px!important;', 36827 'white-space:normal!important;', 36828 'overflow-wrap:break-word!important;', 36829 'border-radius:3px!important;', 36830 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 36831 'pointer-events:none!important;', 36832 '}', 36833 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 36834 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 36835 'background:#d70008!important;', 36836 '}', 36837 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 36838 'background:#000!important;', 36839 '}', 36840 '@media (max-width:767px){', 36841 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 36842 'top:42px!important;', 36843 'left:6px!important;', 36844 'max-width:calc(100% - 12px)!important;', 36845 'padding:6px 8px!important;', 36846 'font-size:10px!important;', 36847 '}', 36848 '}' 36849 ].join(''); 36850 36851 (document.head || document.documentElement).appendChild(style); 36852 } 36853 36854 function normalizeProductId(value) { 36855 var id = String(value == null ? '' : value).trim(); 36856 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 36857 } 36858 36859 function classifyRelatedCategories(relatedCategories) { 36860 var found = { 36861 '292': false, 36862 '294': false, 36863 '296': false, 36864 '298': false 36865 }; 36866 36867 function inspect(value, depth) { 36868 var index; 36869 var normalized; 36870 36871 if (value == null || depth > 8) { 36872 return; 36873 } 36874 36875 if (Array.isArray(value)) { 36876 for (index = 0; index < value.length; index += 1) { 36877 inspect(value[index], depth + 1); 36878 } 36879 return; 36880 } 36881 36882 if (typeof value === 'object') { 36883 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 36884 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 36885 inspect(value.id, depth + 1); 36886 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 36887 inspect(value.category_id, depth + 1); 36888 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 36889 inspect(value.Category, depth + 1); 36890 } 36891 return; 36892 } 36893 36894 if (typeof value !== 'string' && typeof value !== 'number') { 36895 return; 36896 } 36897 normalized = normalizeProductId(value); 36898 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 36899 found[normalized] = true; 36900 } 36901 } 36902 36903 inspect(relatedCategories, 0); 36904 36905 if (found['298']) { 36906 return rules['298']; 36907 } 36908 if (found['296']) { 36909 return rules['296']; 36910 } 36911 if (found['294']) { 36912 return rules['294']; 36913 } 36914 36915 // 292 e qualquer classificacao desconhecida ficam sem tarja. 36916 return null; 36917 } 36918 36919 function ruleFromPayload(payload, productId) { 36920 var product = payload && payload.Product; 36921 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 36922 return null; 36923 } 36924 return classifyRelatedCategories(product && product.related_categories); 36925 } 36926 36927 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 36928 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 36929 function attachTrayAjaxCache() { 36930 var jq = window.jQuery; 36931 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 36932 return; 36933 } 36934
36935 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 36936 var url; 36937 var match; 36938 var productId; 36939 var payload; 36940 try { 36941 url = new URL(settings.url, window.location.href); 36942 if (url.origin !== window.location.origin) { 36943 return; 36944 } 36945 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 36946 if (!match) { 36947 return; 36948 } 36949 productId = normalizeProductId(match[1]); 36950 if (!cache.has(productId) && !pending.has(productId)) { 36951 payload = data || xhr.responseJSON; 36952 if (typeof payload === 'string') { 36953 payload = JSON.parse(payload); 36954 } 36955 if (!payload || !payload.Product || 36956 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 36957 return; 36958 } 36959 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 36960 return; 36961 } 36962 cache.set(productId, ruleFromPayload(payload, productId)); 36963 } 36964 } catch (error) { 36965 // Respostas de outras integracoes nao interferem nas tarjas. 36966 } 36967 }); 36968 36969 trayAjaxHooked = true; 36970 document.removeEventListener('load', onTrayScriptLoad, true); 36971 } 36972 36973 function onTrayScriptLoad(event) { 36974 if (event.target && event.target.tagName === 'SCRIPT') { 36975 attachTrayAjaxCache(); 36976 } 36977 } 36978 36979 function requestRule(productId) { 36980 var controller = null; 36981 var timeoutId = null; 36982 var options = { 36983 credentials: 'same-origin', 36984 headers: { 36985 'Accept': 'application/json' 36986 } 36987 }; 36988 var request; 36989 36990 if (typeof window.fetch !== 'function') { 36991 return Promise.resolve(null); 36992 } 36993 36994 if (typeof window.AbortController === 'function') { 36995 controller = new window.AbortController(); 36996 options.signal = controller.signal; 36997 timeoutId = window.setTimeout(function () { 36998 controller.abort(); 36999 }, REQUEST_TIMEOUT_MS); 37000 } 37001 37002 try { 37003 request = window.fetch( 37004 '/web_api/products/' + encodeURIComponent(productId), 37005 options 37006 ); 37007 } catch (error) { 37008 if (timeoutId !== null) { 37009 window.clearTimeout(timeoutId); 37010 } 37011 return Promise.resolve(null); 37012 } 37013 37014 return request.then(function (response) { 37015 if (!response.ok) { 37016 throw new Error('HTTP ' + response.status); 37017 } 37018 return response.json(); 37019 }).then(function (payload) { 37020 return ruleFromPayload(payload, productId); 37021 }).then(function (rule) { 37022 if (timeoutId !== null) { 37023 window.clearTimeout(timeoutId); 37024 } 37025 return rule; 37026 }, function () { 37027 if (timeoutId !== null) { 37028 window.clearTimeout(timeoutId); 37029 } 37030 37031 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 37032 return null; 37033 }); 37034 } 37035 37036 function finishJob(job, rule) { 37037 cache.set(job.productId, rule); 37038 pending.delete(job.productId); 37039 activeRequests -= 1; 37040 job.resolve(rule); 37041 pumpQueue(); 37042 } 37043 37044 function pumpQueue() { 37045 var job; 37046 37047 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 37048 job = queue.shift(); 37049 activeRequests += 1; 37050 37051 (function (currentJob) { 37052 requestRule(currentJob.productId).then(function (rule) { 37053 finishJob(currentJob, rule); 37054 }, function () { 37055 finishJob(currentJob, null); 37056 }); 37057 }(job)); 37058 } 37059 } 37060 37061 function getRule(productId) { 37062 var resolver; 37063 var promise; 37064 37065 if (cache.has(productId)) { 37066 return Promise.resolve(cache.get(productId)); 37067 } 37068 37069 if (pending.has(productId)) { 37070 return pending.get(productId); 37071 } 37072 37073 promise = new Promise(function (resolve) { 37074 resolver = resolve; 37075 }); 37076 37077 pending.set(productId, promise); 37078 queue.push({ 37079 productId: productId, 37080 resolve: resolver 37081 }); 37082 pumpQueue(); 37083 37084 return promise; 37085 } 37086 37087 function findBadge(card) { 37088 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 37089 } 37090 37091 function clearBadge(card) { 37092 var badge = findBadge(card); 37093 var image = card.querySelector('.product-header > .w-100 > .image'); 37094 37095 if (badge && badge.parentNode) { 37096 badge.parentNode.removeChild(badge); 37097 } 37098 37099 if (image) { 37100 image.classList.remove(HOST_CLASS); 37101 } 37102 37103 card.removeAttribute('data-farmacam-prescription-level'); 37104 } 37105 37106 function applyBadge(card, productId, rule) { 37107 var image; 37108 var badge; 37109 37110 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 37111 return false;
37112 } 37113 37114 clearBadge(card); 37115 37116 if (!rule) { 37117 return true; 37118 } 37119 37120 image = card.querySelector('.product-header > .w-100 > .image'); 37121 if (!image) { 37122 return false; 37123 } 37124 37125 badge = document.createElement('span'); 37126 badge.className = BADGE_CLASS; 37127 badge.setAttribute('data-farmacam-generated', 'true'); 37128 badge.setAttribute('data-farmacam-prescription-level', rule.level); 37129 badge.setAttribute('role', 'note'); 37130 badge.textContent = rule.text; 37131 37132 image.classList.add(HOST_CLASS); 37133 image.insertBefore(badge, image.firstChild); 37134 card.setAttribute('data-farmacam-prescription-level', rule.level); 37135 37136 return true; 37137 } 37138 37139 function processCard(card) { 37140 var productId; 37141 var previousState; 37142 var currentState; 37143 37144 if (!card || card.nodeType !== 1) { 37145 return; 37146 } 37147 37148 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 37149 return; 37150 } 37151 37152 productId = normalizeProductId(card.getAttribute('data-id')); 37153 previousState = cardStates.get(card); 37154 37155 if (!productId) { 37156 clearBadge(card); 37157 cardStates.delete(card); 37158 return; 37159 } 37160 37161 if ( 37162 previousState && 37163 previousState.productId === productId && 37164 previousState.status === 'loading' 37165 ) { 37166 return; 37167 } 37168 37169 if ( 37170 previousState && 37171 previousState.productId === productId && 37172 previousState.status === 'processed' 37173 ) { 37174 if (!previousState.rule || findBadge(card)) { 37175 return; 37176 } 37177 } 37178 37179 if (!previousState || previousState.productId !== productId) { 37180 clearBadge(card); 37181 } 37182 37183 currentState = { 37184 productId: productId, 37185 status: 'loading', 37186 rule: null 37187 }; 37188 cardStates.set(card, currentState); 37189 37190 getRule(productId).then(function (rule) { 37191 var applied; 37192 37193 if ( 37194 cardStates.get(card) !== currentState || 37195 normalizeProductId(card.getAttribute('data-id')) !== productId 37196 ) { 37197 return; 37198 } 37199 37200 applied = applyBadge(card, productId, rule); 37201 currentState.rule = rule; 37202 currentState.status = applied ? 'processed' : 'waiting-image'; 37203 }); 37204 } 37205 37206 function scan(root) { 37207 var cards; 37208 var index; 37209 37210 if (!root) { 37211 return; 37212 } 37213 37214 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 37215 processCard(root); 37216 } 37217 37218 if (!root.querySelectorAll) { 37219 return; 37220 } 37221 37222 cards = root.querySelectorAll(CARD_SELECTOR); 37223 for (index = 0; index < cards.length; index += 1) { 37224 processCard(cards[index]); 37225 } 37226 } 37227 37228 function startObserver() { 37229 var observer; 37230 37231 if (!window.MutationObserver || !document.documentElement) { 37232 return; 37233 } 37234 37235 observer = new MutationObserver(function (mutations) { 37236 var mutationIndex; 37237 var nodeIndex; 37238 var mutation; 37239 var node; 37240 var ownerCard; 37241 37242 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 37243 mutation = mutations[mutationIndex]; 37244 37245 if (mutation.type === 'attributes') { 37246 processCard(mutation.target); 37247 continue; 37248 } 37249 37250 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 37251 node = mutation.addedNodes[nodeIndex]; 37252 if (node.nodeType !== 1) { 37253 continue; 37254 } 37255 37256 scan(node); 37257 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 37258 if (ownerCard) { 37259 processCard(ownerCard); 37260 } 37261 } 37262 } 37263 }); 37264 37265 observer.observe(document.documentElement, { 37266 childList: true, 37267 subtree: true, 37268 attributes: true, 37269 attributeFilter: ['data-id'] 37270 }); 37271 37272 window[GLOBAL_KEY].observer = observer; 37273 } 37274 37275 window[GLOBAL_KEY] = { 37276 version: '1.1.0', 37277 cache: cache, 37278 pending: pending, 37279 cardStates: cardStates, 37280 scan: scan, 37281 processCard: processCard, 37282 observer: null 37283 }; 37284 37285 document.addEventListener('load', onTrayScriptLoad, true); 37286 attachTrayAjaxCache(); 37287 injectStyles(); 37288 scan(document); 37289 startObserver(); 37290 37291 if (document.readyState === 'loading') { 37292 document.addEventListener('DOMContentLoaded', function () { 37293 attachTrayAjaxCache(); 37294 scan(document); 37295 }); 37296 } 37297}(window, document)); 37298</script>
37298 37299 </div> 37300 <div 37301 class="swiper-slide fixWidthBoxProduct item"> 37302 37303 37304 37305 37306<div class="product animate open_cart" 37307 data-id="125245646" 37308 data-farmacam-related-categories="," 37309 data-ga4-id="125245646" 37310 data-ga4-name="Bloomé" 37311 data-ga4-price="125.00" 37312 data-ga4-brand="Farmacam" 37313 data-ga4-category="Tipo de Produto;Manipulados;" 37314 data-ga4-promotion="100"> 37315 37316 <div class="product-header"> 37317 37318 <div class="w-100"> 37319 37320 37321 37322 37323 37324 37325 37326 <div class="product-tags-circle"> 37327 37328 37329 <div class="tag-circle discount tag-icone tag-icone1"> 37330 <svg fill="none" height="16" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> 37331 <path stroke-linecap="round" stroke-linejoin="round" d="M15.362 5.214A8.252 8.252 0 0112 21 8.25 8.25 0 016.038 7.048 8.287 8.287 0 009 9.6a8.983 8.983 0 013.361-6.867 8.21 8.21 0 003 2.48z"></path> 37332 <path stroke-linecap="round" stroke-linejoin="round" d="M12 18a3.75 3.75 0 00.495-7.467 5.99 5.99 0 00-1.925 3.546 5.974 5.974 0 01-2.133-1A3.75 3.75 0 0012 18z"></path> 37333 </svg> 37334 <span>Lançamento</span> 37335 </div> 37336 37337 37338 </div> 37339 37340 37341 37342 <div class="product-tags-circle product-tags-circle-right"> 37343 37344 <div class="tag-circle discount"> 37345 <span> 37346 20% OFF 37347 </span> 37348 </div> 37349 37350 37351 </div> 37352 37353 <div class="product-tags " data-tags-count="1"> 37354 37355 37356 37357 37358 <div class="tag extra fix-Selo"> 37359 <img width="119" height="22" alt="Selo" src="https://images.tcdn.com.br/img/img_prod/1063102/1764006510_oportunidade.png" fetchpriority='high' /> 37360 </div> 37361 37362 </div> 37363 37364 37365 37366 <div class="image "> 37367 37368 <a title="Bloomé" href="https://www.farmacam.com.br/bloome" class="space-image"> 37369 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/bloom_1_20260727173308_c4aab65c7525.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/bloom_1_20260727173308_c4aab65c7525.png" alt="Bloomé"> 37370 </a> 37371 37372 </div> 37373 37374 37375 37376 37377 37378 </div> 37379 37380 </div> 37381 37382 <div class="product-body"> 37383 37384 <a title="Bloomé" class="product-info" href="https://www.farmacam.com.br/bloome"> 37385 37386 <div class="product-info-dados"> 37387 37388 37389 37390 <div class="listagem-produtos-timer-promocao" data-inicial="2026-08-05" data-final="2027-08-03"></div> 37391 37392 37393 37394 <div class="product-name"> 37395 Bloomé 37396 </div> 37397 37398 37399 37400 <div class="product-price"> 37401 37402 37403 37404 <div class="compre-economize"> 37405 Economize: R$ 25,00 37406 </div> 37407 37408 37409 <span class="product-has-variants text-center"> 37410 A partir de 37411 </span> 37412 37413<div class="price display-cash"> 37414 37415 <span class="old-price"> 37416 R$ 125,00 37417 </span> 37418 37419 <span class="current-price "> 37420 R$ 100,00 37421 37422 </span> 37423 37424 <span class="product-installments"> 37425 37426 </span> 37427 37428</div> 37429 </div> 37430 37431 </div> 37432 37433 </a> 37434 37435 </div> 37436 37437 37438 <div class="product-footer"> 37439 37440 37441 <div class="w-100"> 37442 37443 37444 37445<div class="product-rating-catalog"> 37446 37447 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 37448 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 37449 </svg> 37450 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 37451 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 37452 </svg> 37453 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 37454 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 37455 </svg> 37456 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 37457 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 37458 </svg> 37459 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 37460 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 37461 </svg> 37462 37463 37464 <a title="Ver avaliações de Bloomé" href="https://www.farmacam.com.br/bloome#comments" class="total"> 37465 Seja o primeiro 37466 </a> 37467 37468 </div> 37469 37470 37471 37472 <div class="config-variacoes-compra"> 37473 37474 37475 37476 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245646"> 37477 <input type="hidden" name="product_id" value="125245646"> 37478 <input type="hidden" name="without_stock_sale" value=""> 37479 37480 <input type="hidden" name="variacao" id="selectedVariant" value=""> 37481 <input type="hidden" name="estoque" value=""> 37482 37483 37484 37485 <ul class="paleta-cores"> 37486 37487 37488 37489 37490 37491 37492 37493 37494 37495 37496 37497 37498 37499 37500 37501 37502 37503 37504 37505 37506 37507 37508 37509 37510 37511 37512 37513 37514 37515 37516 37517 37518 37519 37520 37521 37522 37523 37524 37525 37526 37527 37528 37529 37530 37531 37532 37533 37534 37535 37536 37537 37538 37539 37540 37541 37542 37543 37544 37545 37546 37547 37548 37549 37550 37551 37552 37553 37554 37555 37556 37557 37558 37559 37560 37561 37562 37563 37564 37565 37566 37567 37568 37569 37570 37571 37572 37573 37574 37575 37576 37577 37578 37579 37580 37581 37582 37583 37584 37585 37586 37587 37588 37589 37590 37591 37592 37593 37594 37595 37596 37597 37598 37599 37600 37601 37602 37603 37604 37605 37606 37607 37608 37609 37610 37611 37612 37613 37614 37615 37616 37617 37618 37619 37620 37621 37622 37623 37624 37625 37626 37627 37628 37629 37630 37631 37632 37633 37634 37635 37636 37637 37638 37639 37640 37641 37642 37643 37644 37645 37646 37647 37648 37649 37650 37651 37652 37653 37654 37655 37656 37657 37658 37659 37660 37661 37662 37663 37664 37665 37666 37667 37668 37669 37670 37671 37672 37673 37674 37675 37676 37677 37678 37679 37680 37681 37682 37683 37684 37685 37686 37687 37688 37689 37690 37691 37692 37693 37694 37695 37696 37697 37698 37699 37700 37701 37702 37703 37704 37705 37706 37707 37708 37709 37710 37711 37712 37713 37714 37715 37716 37717 37718 37719 37720 37721 37722 37723 37724 37725 37726
37726 37727 37728 37729 37730 37731 37732 37733 37734 37735 37736 37737 37738 37739 37740 37741 37742 37743 37744 37745 37746 37747 37748 37749 37750 37751 37752 37753 37754 37755 37756 37757 37758 37759 37760 37761 37762 37763 37764 37765 37766 37767 37768 37769 37770 37771 37772 37773 37774 37775 37776 37777 37778 37779 37780 37781 37782 37783 37784 37785 37786 37787 37788 37789 37790 37791 37792 37793 37794 37795 37796 37797 37798 37799 37800 37801 37802 37803 37804 37805 37806 37807 37808 37809 37810 37811 37812 37813 37814 37815 37816 37817 37818 37819 37820 37821 37822 37823 37824 37825 37826 37827 37828 37829 37830 37831 37832 37833 37834 37835 37836 37837 37838 37839 37840 37841 37842 37843 37844 37845 37846 37847 37848 37849 37850 37851 37852 37853 37854 37855 37856 37857 37858 37859 37860 37861 37862 37863 37864 37865 37866 37867 37868 37869 37870 37871 37872 37873 37874 37875 37876 37877 37878 37879 37880 37881 37882 37883 37884 37885 37886 37887 37888 37889 37890 37891 37892 37893 37894 37895 37896 37897 37898 37899 37900 37901 37902 37903 37904 37905 37906 37907 37908 37909 37910 37911 37912 37913 37914 37915 37916 37917 37918 37919 37920 37921 37922 37923 37924 37925 37926 37927 37928 37929 37930 37931 37932 37933 37934 37935 37936 37937 37938 37939 37940 37941 37942 37943 37944 37945 37946 37947 37948 37949 37950 37951 37952 37953 37954 37955 37956 37957 37958 37959 37960 37961 37962 37963 37964 37965 37966 37967 37968 37969 37970 37971 37972 37973 37974 37975 37976 37977 37978 37979 37980 37981 37982 37983 37984 37985 37986 37987 37988 37989 37990 37991 37992 37993 37994 37995 37996 37997 37998 37999 38000 38001 38002 38003 38004 38005 38006 </ul> 38007 <!-- Fim Paleta de Cores --> 38008 38009 38010 38011 38012 38013 38014 38015 38016 38017 38018 38019 38020 38021 38022 38023 38024 38025 38026 38027 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 38028 <option disabled="disabled" value=""> 38029 Selecione 38030 </option> 38031 38032 38033 <option value="30556" produto="125245646" estoque="9999">250 mg - 30 doses</option> 38034 38035 38036 38037 38038 <option value="30558" produto="125245646" estoque="9997">250 mg - 60 doses</option> 38039 38040 38041 38042 38043 <option value="30560" produto="125245646" estoque="9999">500 mg - 30 doses</option> 38044 38045 38046 38047 38048 <option value="30562" produto="125245646" estoque="9999">500 mg - 60 doses</option> 38049 38050 38051
38051 </select> 38052 38053 38054 <select class="select-cor" style="display: none;" title="Campo Cor"> 38055 </select> 38056 38057 38058 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 38059 <div class="alerta-estoque"></div> 38060 <div class="alerta-adicionado"></div> 38061 38062 <div class="acao-compra"> 38063 38064 <div class="quantidade-box"> 38065 <div class="quantidade-box-input"> 38066 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
38066stoque="39994" /> 38067 </div> 38068 <div class="quantidade-box-controles"> 38069 <div class="quantidade-box-controles-itens" data-item="mais"> 38070 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 38071 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 38072 </svg> 38073 </div> 38074 <div class="quantidade-box-controles-itens" data-item="menus"> 38075 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 38076 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 38077 </svg> 38078 </div> 38079 </div> 38080 </div> 38081 38082 38083 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125245646"> 38084 38085 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 38086 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 38087 38088 38089 38090 38091 38092 38093 <!-- Cesta de Compras --> 38094 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 38095 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 38096 </svg> 38097 38098 38099 38100 Comprar 38101 38102 38103 </button> 38104 <!-- </form> --> 38105 38106 </div> 38107 38108</div> 38109 38110 38111 </div> 38112 38113 </div> 38114 38115 38116</div> 38117
38118<script> 38119(function (window, document) { 38120 'use strict'; 38121 38122 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 38123 38124 if (window[GLOBAL_KEY]) { 38125 return; 38126 } 38127 38128 if (!window.Map || !window.WeakMap || !window.Promise) { 38129 return; 38130 } 38131 38132 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 38133 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 38134 '#vitrine-personalizada .product[data-id]'; 38135 var BADGE_CLASS = 'farmacam-prescription-badge'; 38136 var HOST_CLASS = 'farmacam-prescription-badge-host'; 38137 var MAX_CONCURRENT_REQUESTS = 6; 38138 var REQUEST_TIMEOUT_MS = 12000; 38139 38140 var rules = { 38141 '294': { 38142 level: '294', 38143 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 38144 }, 38145 '296': { 38146 level: '296', 38147 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 38148 }, 38149 '298': { 38150 level: '298', 38151 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 38152 } 38153 }; 38154 38155 var cache = new Map(); 38156 var pending = new Map(); 38157 var cardStates = new WeakMap(); 38158 var queue = []; 38159 var activeRequests = 0; 38160 var trayAjaxHooked = false; 38161 38162 function injectStyles() { 38163 if (document.getElementById('farmacam-prescription-cards-style')) { 38164 return; 38165 } 38166 38167 var style = document.createElement('style'); 38168 style.id = 'farmacam-prescription-cards-style'; 38169 style.textContent = [ 38170 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 38171 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 38172 'position:absolute!important;', 38173 'top:52px!important;', 38174 'left:10px!important;', 38175 'z-index:999!important;', 38176 'display:block!important;', 38177 'max-width:calc(100% - 20px)!important;', 38178 'box-sizing:border-box!important;', 38179 'padding:8px 12px!important;', 38180 'color:#fff!important;', 38181 'font-family:inherit!important;', 38182 'font-size:13px!important;', 38183 'font-weight:900!important;', 38184 'line-height:1.15!important;', 38185 'text-align:center!important;', 38186 'text-transform:uppercase!important;', 38187 'letter-spacing:.3px!important;', 38188 'white-space:normal!important;', 38189 'overflow-wrap:break-word!important;', 38190 'border-radius:3px!important;', 38191 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 38192 'pointer-events:none!important;', 38193 '}', 38194 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 38195 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 38196 'background:#d70008!important;', 38197 '}', 38198 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 38199 'background:#000!important;', 38200 '}', 38201 '@media (max-width:767px){', 38202 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 38203 'top:42px!important;', 38204 'left:6px!important;', 38205 'max-width:calc(100% - 12px)!important;', 38206 'padding:6px 8px!important;', 38207 'font-size:10px!important;', 38208 '}', 38209 '}' 38210 ].join(''); 38211 38212 (document.head || document.documentElement).appendChild(style); 38213 } 38214 38215 function normalizeProductId(value) { 38216 var id = String(value == null ? '' : value).trim(); 38217 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 38218 } 38219 38220 function classifyRelatedCategories(relatedCategories) { 38221 var found = { 38222 '292': false, 38223 '294': false, 38224 '296': false, 38225 '298': false 38226 }; 38227 38228 function inspect(value, depth) { 38229 var index; 38230 var normalized; 38231 38232 if (value == null || depth > 8) { 38233 return; 38234 } 38235 38236 if (Array.isArray(value)) { 38237 for (index = 0; index < value.length; index += 1) { 38238 inspect(value[index], depth + 1); 38239 } 38240 return; 38241 } 38242 38243 if (typeof value === 'object') { 38244 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 38245 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 38246 inspect(value.id, depth + 1); 38247 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 38248 inspect(value.category_id, depth + 1); 38249 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 38250 inspect(value.Category, depth + 1); 38251 } 38252 return; 38253 } 38254 38255 if (typeof value !== 'string' && typeof value !== 'number') { 38256 return; 38257 } 38258 normalized = normalizeProductId(value); 38259 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 38260 found[normalized] = true; 38261 } 38262 } 38263 38264 inspect(relatedCategories, 0); 38265 38266 if (found['298']) { 38267 return rules['298']; 38268 } 38269 if (found['296']) { 38270 return rules['296']; 38271 } 38272 if (found['294']) { 38273 return rules['294']; 38274 } 38275 38276 // 292 e qualquer classificacao desconhecida ficam sem tarja. 38277 return null; 38278 } 38279 38280 function ruleFromPayload(payload, productId) { 38281 var product = payload && payload.Product; 38282 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 38283 return null; 38284 } 38285 return classifyRelatedCategories(product && product.related_categories); 38286 } 38287 38288 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 38289 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 38290 function attachTrayAjaxCache() { 38291 var jq = window.jQuery; 38292 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 38293 return; 38294 } 38295
38296 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 38297 var url; 38298 var match; 38299 var productId; 38300 var payload; 38301 try { 38302 url = new URL(settings.url, window.location.href); 38303 if (url.origin !== window.location.origin) { 38304 return; 38305 } 38306 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 38307 if (!match) { 38308 return; 38309 } 38310 productId = normalizeProductId(match[1]); 38311 if (!cache.has(productId) && !pending.has(productId)) { 38312 payload = data || xhr.responseJSON; 38313 if (typeof payload === 'string') { 38314 payload = JSON.parse(payload); 38315 } 38316 if (!payload || !payload.Product || 38317 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 38318 return; 38319 } 38320 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 38321 return; 38322 } 38323 cache.set(productId, ruleFromPayload(payload, productId)); 38324 } 38325 } catch (error) { 38326 // Respostas de outras integracoes nao interferem nas tarjas. 38327 } 38328 }); 38329 38330 trayAjaxHooked = true; 38331 document.removeEventListener('load', onTrayScriptLoad, true); 38332 } 38333 38334 function onTrayScriptLoad(event) { 38335 if (event.target && event.target.tagName === 'SCRIPT') { 38336 attachTrayAjaxCache(); 38337 } 38338 } 38339 38340 function requestRule(productId) { 38341 var controller = null; 38342 var timeoutId = null; 38343 var options = { 38344 credentials: 'same-origin', 38345 headers: { 38346 'Accept': 'application/json' 38347 } 38348 }; 38349 var request; 38350 38351 if (typeof window.fetch !== 'function') { 38352 return Promise.resolve(null); 38353 } 38354 38355 if (typeof window.AbortController === 'function') { 38356 controller = new window.AbortController(); 38357 options.signal = controller.signal; 38358 timeoutId = window.setTimeout(function () { 38359 controller.abort(); 38360 }, REQUEST_TIMEOUT_MS); 38361 } 38362 38363 try { 38364 request = window.fetch( 38365 '/web_api/products/' + encodeURIComponent(productId), 38366 options 38367 ); 38368 } catch (error) { 38369 if (timeoutId !== null) { 38370 window.clearTimeout(timeoutId); 38371 } 38372 return Promise.resolve(null); 38373 } 38374 38375 return request.then(function (response) { 38376 if (!response.ok) { 38377 throw new Error('HTTP ' + response.status); 38378 } 38379 return response.json(); 38380 }).then(function (payload) { 38381 return ruleFromPayload(payload, productId); 38382 }).then(function (rule) { 38383 if (timeoutId !== null) { 38384 window.clearTimeout(timeoutId); 38385 } 38386 return rule; 38387 }, function () { 38388 if (timeoutId !== null) { 38389 window.clearTimeout(timeoutId); 38390 } 38391 38392 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 38393 return null; 38394 }); 38395 } 38396 38397 function finishJob(job, rule) { 38398 cache.set(job.productId, rule); 38399 pending.delete(job.productId); 38400 activeRequests -= 1; 38401 job.resolve(rule); 38402 pumpQueue(); 38403 } 38404 38405 function pumpQueue() { 38406 var job; 38407 38408 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 38409 job = queue.shift(); 38410 activeRequests += 1; 38411 38412 (function (currentJob) { 38413 requestRule(currentJob.productId).then(function (rule) { 38414 finishJob(currentJob, rule); 38415 }, function () { 38416 finishJob(currentJob, null); 38417 }); 38418 }(job)); 38419 } 38420 } 38421 38422 function getRule(productId) { 38423 var resolver; 38424 var promise; 38425 38426 if (cache.has(productId)) { 38427 return Promise.resolve(cache.get(productId)); 38428 } 38429 38430 if (pending.has(productId)) { 38431 return pending.get(productId); 38432 } 38433 38434 promise = new Promise(function (resolve) { 38435 resolver = resolve; 38436 }); 38437 38438 pending.set(productId, promise); 38439 queue.push({ 38440 productId: productId, 38441 resolve: resolver 38442 }); 38443 pumpQueue(); 38444 38445 return promise; 38446 } 38447 38448 function findBadge(card) { 38449 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 38450 } 38451 38452 function clearBadge(card) { 38453 var badge = findBadge(card); 38454 var image = card.querySelector('.product-header > .w-100 > .image'); 38455 38456 if (badge && badge.parentNode) { 38457 badge.parentNode.removeChild(badge); 38458 } 38459 38460 if (image) { 38461 image.classList.remove(HOST_CLASS); 38462 } 38463 38464 card.removeAttribute('data-farmacam-prescription-level'); 38465 } 38466 38467 function applyBadge(card, productId, rule) { 38468 var image; 38469 var badge; 38470 38471 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 38472 return false;
38473 } 38474 38475 clearBadge(card); 38476 38477 if (!rule) { 38478 return true; 38479 } 38480 38481 image = card.querySelector('.product-header > .w-100 > .image'); 38482 if (!image) { 38483 return false; 38484 } 38485 38486 badge = document.createElement('span'); 38487 badge.className = BADGE_CLASS; 38488 badge.setAttribute('data-farmacam-generated', 'true'); 38489 badge.setAttribute('data-farmacam-prescription-level', rule.level); 38490 badge.setAttribute('role', 'note'); 38491 badge.textContent = rule.text; 38492 38493 image.classList.add(HOST_CLASS); 38494 image.insertBefore(badge, image.firstChild); 38495 card.setAttribute('data-farmacam-prescription-level', rule.level); 38496 38497 return true; 38498 } 38499 38500 function processCard(card) { 38501 var productId; 38502 var previousState; 38503 var currentState; 38504 38505 if (!card || card.nodeType !== 1) { 38506 return; 38507 } 38508 38509 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 38510 return; 38511 } 38512 38513 productId = normalizeProductId(card.getAttribute('data-id')); 38514 previousState = cardStates.get(card); 38515 38516 if (!productId) { 38517 clearBadge(card); 38518 cardStates.delete(card); 38519 return; 38520 } 38521 38522 if ( 38523 previousState && 38524 previousState.productId === productId && 38525 previousState.status === 'loading' 38526 ) { 38527 return; 38528 } 38529 38530 if ( 38531 previousState && 38532 previousState.productId === productId && 38533 previousState.status === 'processed' 38534 ) { 38535 if (!previousState.rule || findBadge(card)) { 38536 return; 38537 } 38538 } 38539 38540 if (!previousState || previousState.productId !== productId) { 38541 clearBadge(card); 38542 } 38543 38544 currentState = { 38545 productId: productId, 38546 status: 'loading', 38547 rule: null 38548 }; 38549 cardStates.set(card, currentState); 38550 38551 getRule(productId).then(function (rule) { 38552 var applied; 38553 38554 if ( 38555 cardStates.get(card) !== currentState || 38556 normalizeProductId(card.getAttribute('data-id')) !== productId 38557 ) { 38558 return; 38559 } 38560 38561 applied = applyBadge(card, productId, rule); 38562 currentState.rule = rule; 38563 currentState.status = applied ? 'processed' : 'waiting-image'; 38564 }); 38565 } 38566 38567 function scan(root) { 38568 var cards; 38569 var index; 38570 38571 if (!root) { 38572 return; 38573 } 38574 38575 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 38576 processCard(root); 38577 } 38578 38579 if (!root.querySelectorAll) { 38580 return; 38581 } 38582 38583 cards = root.querySelectorAll(CARD_SELECTOR); 38584 for (index = 0; index < cards.length; index += 1) { 38585 processCard(cards[index]); 38586 } 38587 } 38588 38589 function startObserver() { 38590 var observer; 38591 38592 if (!window.MutationObserver || !document.documentElement) { 38593 return; 38594 } 38595 38596 observer = new MutationObserver(function (mutations) { 38597 var mutationIndex; 38598 var nodeIndex; 38599 var mutation; 38600 var node; 38601 var ownerCard; 38602 38603 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 38604 mutation = mutations[mutationIndex]; 38605 38606 if (mutation.type === 'attributes') { 38607 processCard(mutation.target); 38608 continue; 38609 } 38610 38611 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 38612 node = mutation.addedNodes[nodeIndex]; 38613 if (node.nodeType !== 1) { 38614 continue; 38615 } 38616 38617 scan(node); 38618 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 38619 if (ownerCard) { 38620 processCard(ownerCard); 38621 } 38622 } 38623 } 38624 }); 38625 38626 observer.observe(document.documentElement, { 38627 childList: true, 38628 subtree: true, 38629 attributes: true, 38630 attributeFilter: ['data-id'] 38631 }); 38632 38633 window[GLOBAL_KEY].observer = observer; 38634 } 38635 38636 window[GLOBAL_KEY] = { 38637 version: '1.1.0', 38638 cache: cache, 38639 pending: pending, 38640 cardStates: cardStates, 38641 scan: scan, 38642 processCard: processCard, 38643 observer: null 38644 }; 38645 38646 document.addEventListener('load', onTrayScriptLoad, true); 38647 attachTrayAjaxCache(); 38648 injectStyles(); 38649 scan(document); 38650 startObserver(); 38651 38652 if (document.readyState === 'loading') { 38653 document.addEventListener('DOMContentLoaded', function () { 38654 attachTrayAjaxCache(); 38655 scan(document); 38656 }); 38657 } 38658}(window, document)); 38659</script>
38659 38660 </div> 38661 <div 38662 class="swiper-slide fixWidthBoxProduct item"> 38663 38664 38665 38666 38667<div class="product animate open_cart" 38668 data-id="125236673" 38669 data-farmacam-related-categories="," 38670 data-ga4-id="125236673" 38671 data-ga4-name="I-Plus" 38672 data-ga4-price="92.00" 38673 data-ga4-brand="Farmacam" 38674 data-ga4-category="Tipo de Produto;Manipulados;" 38675 data-ga4-promotion="78"> 38676 38677 <div class="product-header"> 38678 38679 <div class="w-100"> 38680 38681 38682 38683 38684 38685 38686 38687 38688 <div class="product-tags-circle product-tags-circle-right"> 38689 38690 <div class="tag-circle discount"> 38691 <span> 38692 15% OFF 38693 </span> 38694 </div> 38695 38696 38697 </div> 38698 38699 <div class="product-tags " data-tags-count="0"> 38700 38701 38702 38703 38704 <div class="tag extra fix-Selo"> 38705 <img width="119" height="22" alt="Selo" src="https://images.tcdn.com.br/img/img_prod/1063102/1764006510_oportunidade.png" fetchpriority='high' /> 38706 </div> 38707 38708 </div> 38709 38710 38711 38712 <div class="image "> 38713 38714 <a title="I-Plus" href="https://www.farmacam.com.br/i-plus" class="space-image"> 38715 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/i_plus_125236673_1_c08d15dfc4fee070adff44f8b2235142.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/i_plus_125236673_1_c08d15dfc4fee070adff44f8b2235142.png" alt="I-Plus"> 38716 </a> 38717 38718 </div> 38719 38720 38721 38722 38723 38724 </div> 38725 38726 </div> 38727 38728 <div class="product-body"> 38729 38730 <a title="I-Plus" class="product-info" href="https://www.farmacam.com.br/i-plus"> 38731 38732 <div class="product-info-dados"> 38733 38734 38735 38736 <div class="listagem-produtos-timer-promocao" data-inicial="2025-09-03" data-final="2026-12-19"></div> 38737 38738 38739 38740 <div class="product-name"> 38741 I-Plus 38742 </div> 38743 38744 38745 38746 <div class="product-price"> 38747 38748 38749 38750 <div class="compre-economize"> 38751 Economize: R$ 14,00 38752 </div> 38753 38754 38755 <span class="product-has-variants text-center"> 38756 A partir de 38757 </span> 38758 38759<div class="price display-cash"> 38760 38761 <span class="old-price"> 38762 R$ 92,00 38763 </span> 38764 38765 <span class="current-price "> 38766 R$ 78,00 38767 38768 </span> 38769 38770 <span class="product-installments"> 38771 38772 </span> 38773 38774</div> 38775 </div> 38776 38777 </div> 38778 38779 </a> 38780 38781 </div> 38782 38783 38784 <div class="product-footer"> 38785 38786 38787 <div class="w-100"> 38788 38789 38790 38791<div class="product-rating-catalog"> 38792 38793 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 38794 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 38795 </svg> 38796 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 38797 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 38798 </svg> 38799 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 38800 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 38801 </svg> 38802 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 38803 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 38804 </svg> 38805 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 38806 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 38807 </svg> 38808 38809 38810 <a title="Ver avaliações de I-Plus" href="https://www.farmacam.com.br/i-plus#comments" class="total"> 38811 Seja o primeiro 38812 </a> 38813 38814 </div> 38815 38816 38817 38818 <div class="config-variacoes-compra"> 38819 38820 38821 38822 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125236673"> 38823 <input type="hidden" name="product_id" value="125236673"> 38824 <input type="hidden" name="without_stock_sale" value=""> 38825 38826 <input type="hidden" name="variacao" id="selectedVariant" value=""> 38827 <input type="hidden" name="estoque" value=""> 38828 38829 38830 38831 <ul class="paleta-cores"> 38832 38833 38834 38835 38836 38837 38838 38839 38840 38841 38842 38843 38844 38845 38846 38847 38848 38849 38850 38851 38852 38853 38854 38855 38856 38857 38858 38859 38860 38861 38862 38863 38864 38865 38866 38867 38868 38869 38870 38871 38872 38873 38874 38875 38876 38877 38878 38879 38880 38881 38882 38883 38884 38885 38886 38887 38888 38889 38890 38891 38892 38893 38894 38895 38896 38897 38898 38899 38900 38901 38902 38903 38904 38905 38906 38907 38908 38909 38910 38911 38912 38913 38914 38915 38916 38917 38918 38919 38920 38921 38922 38923 38924 38925 38926 38927 38928 38929 38930 38931 38932 38933 38934 38935 38936 38937 38938 38939 38940 38941 38942 38943 38944 38945 38946 38947 38948 38949 38950 38951 38952 38953 38954 38955 38956 38957 38958 38959 38960 38961 38962 38963 38964 38965 38966 38967 38968 38969 38970 38971 38972 38973 38974 38975 38976 38977 38978 38979 38980 38981 38982 38983 38984 38985 38986 38987 38988 38989 38990 38991 38992 38993 38994 38995 38996 38997 38998 38999 39000 39001 39002 39003 39004 39005 39006 39007 39008 39009 39010 39011 39012 39013 39014 39015 39016 39017 39018 39019 39020 39021 39022 39023 39024 39025 39026 39027 39028 39029 39030 39031 39032 39033 39034 39035 39036 39037 39038 39039 39040 39041 39042 39043 39044 39045 39046 39047 39048 39049 39050 39051 39052 39053 39054 39055 39056 39057 39058 39059 39060 39061 39062 39063 39064 39065 39066 39067 39068 39069 39070 39071 39072 39073 39074 39075 39076 39077 39078 39079 39080 39081 39082 39083 39084 39085 39086 39087 39088 39089 39090 39091 39092
39092 39093 39094 39095 39096 39097 39098 39099 39100 39101 39102 39103 39104 39105 39106 39107 39108 39109 39110 39111 39112 39113 39114 39115 39116 39117 39118 39119 39120 39121 39122 39123 39124 39125 39126 39127 39128 39129 39130 39131 39132 39133 39134 39135 39136 39137 39138 39139 39140 39141 39142 39143 39144 39145 39146 39147 39148 39149 39150 39151 39152 39153 39154 39155 39156 39157 39158 39159 39160 39161 39162 39163 39164 39165 39166 39167 39168 39169 39170 39171 39172 39173 39174 39175 39176 39177 39178 39179 39180 39181 39182 39183 39184 39185 39186 39187 39188 39189 39190 39191 39192 39193 39194 39195 39196 39197 39198 39199 39200 39201 39202 39203 39204 39205 39206 39207 39208 39209 39210 39211 39212 39213 39214 39215 39216 39217 39218 39219 39220 39221 39222 39223 39224 39225 39226 39227 39228 39229 39230 39231 39232 39233 39234 39235 39236 39237 39238 39239 39240 39241 39242 39243 39244 39245 39246 39247 39248 39249 39250 39251 39252 39253 39254 39255 39256 39257 39258 39259 39260 39261 39262 39263 39264 39265 39266 39267 39268 39269 39270 39271 39272 39273 39274 39275 39276 39277 39278 39279 39280 39281 39282 39283 39284 39285 39286 39287 39288 39289 39290 39291 39292 39293 39294 39295 39296 39297 39298 39299 39300 39301 39302 39303 39304 39305 39306 39307 39308 39309 39310 39311 39312 39313 39314 39315 39316 39317 39318 39319 39320 39321 39322 39323 39324 39325 39326 39327 39328 39329 39330 39331 39332 39333 39334 39335 39336 39337 39338 39339 39340 39341 39342 39343 39344 39345 39346 39347 39348 39349 39350 39351 39352 39353 39354 39355 39356 39357 39358 39359 39360 39361 39362 39363 39364 39365 39366 39367 39368 39369 39370 39371 39372 39373 39374 39375 39376 39377 39378 39379 39380 39381 39382 39383 39384 39385 39386 39387 39388 39389 39390 39391 39392 39393 39394 39395 39396 39397 39398 39399 39400 39401 39402 39403 39404 39405 39406 39407 39408 39409 39410 39411 39412 39413 39414 39415 39416 39417 39418 39419 39420 39421 39422 39423 39424 39425 39426 39427 39428 39429 39430 39431 39432 39433 39434 39435 39436 39437 39438 39439 39440 39441 39442 39443 39444 39445 39446 </ul> 39447 <!-- Fim Paleta de Cores --> 39448 39449 39450 39451 39452 39453 39454 39455 39456 39457 39458 39459 39460 39461 39462 39463 39464 39465 39466 39467 39468 39469 39470 39471 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 39472 <option disabled="disabled" value=""> 39473 Selecione 39474 </option> 39475
39475 39476 39477 <option value="8863" produto="125236673" estoque="10000">250 mg - 60 doses</option> 39478 39479 39480 39481 39482 <option value="8865" produto="125236673" estoque="10000">500 mg - 30 doses</option> 39483 39484 39485 39486 39487 <option value="8867" produto="125236673" estoque="10000">500 mg - 60 doses</option> 39488 39489 39490 39491 39492 <option value="8869" produto="125236673" estoque="10000">1.000 mg - 30 doses</option> 39493 39494 39495 39496 39497 <option value="8871" produto="125236673" estoque="10000">1.000 mg - 60 doses</option> 39498 39499 39500 </select> 39501 39502 39503 <select class="select-cor" style="display: none;" title="Campo Cor"> 39504
39504 </select> 39505 39506 39507 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 39508 <div class="alerta-estoque"></div> 39509 <div class="alerta-adicionado"></div> 39510 39511 <div class="acao-compra"> 39512 39513 <div class="quantidade-box"> 39514 <div class="quantidade-box-input"> 39515 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-estoque="50000" /> 39516 </div> 39517 <div class="quantidade-box-controles"> 39518 <div class="quantidade-box-controles-itens" data-item="mais"> 39519 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 39520 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 39521 </svg> 39522 </div> 39523 <div class="quantidade-box-controles-itens" data-item="menus"> 39524 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 39525 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 39526 </svg> 39527 </div> 39528 </div> 39529 </div> 39530 39531 39532 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125236673"> 39533 39534 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 39535 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 39536 39537 39538 39539 39540 39541 39542 <!-- Cesta de Compras --> 39543 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 39544 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 39545 </svg> 39546 39547 39548 39549 Comprar 39550 39551 39552 </button> 39553 <!-- </form> --> 39554 39555 </div> 39556 39557</div> 39558 39559 39560 </div> 39561 39562 </div> 39563 39564 39565</div> 39566
39567<script> 39568(function (window, document) { 39569 'use strict'; 39570 39571 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 39572 39573 if (window[GLOBAL_KEY]) { 39574 return; 39575 } 39576 39577 if (!window.Map || !window.WeakMap || !window.Promise) { 39578 return; 39579 } 39580 39581 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 39582 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 39583 '#vitrine-personalizada .product[data-id]'; 39584 var BADGE_CLASS = 'farmacam-prescription-badge'; 39585 var HOST_CLASS = 'farmacam-prescription-badge-host'; 39586 var MAX_CONCURRENT_REQUESTS = 6; 39587 var REQUEST_TIMEOUT_MS = 12000; 39588 39589 var rules = { 39590 '294': { 39591 level: '294', 39592 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 39593 }, 39594 '296': { 39595 level: '296', 39596 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 39597 }, 39598 '298': { 39599 level: '298', 39600 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 39601 } 39602 }; 39603 39604 var cache = new Map(); 39605 var pending = new Map(); 39606 var cardStates = new WeakMap(); 39607 var queue = []; 39608 var activeRequests = 0; 39609 var trayAjaxHooked = false; 39610 39611 function injectStyles() { 39612 if (document.getElementById('farmacam-prescription-cards-style')) { 39613 return; 39614 } 39615 39616 var style = document.createElement('style'); 39617 style.id = 'farmacam-prescription-cards-style'; 39618 style.textContent = [ 39619 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 39620 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 39621 'position:absolute!important;', 39622 'top:52px!important;', 39623 'left:10px!important;', 39624 'z-index:999!important;', 39625 'display:block!important;', 39626 'max-width:calc(100% - 20px)!important;', 39627 'box-sizing:border-box!important;', 39628 'padding:8px 12px!important;', 39629 'color:#fff!important;', 39630 'font-family:inherit!important;', 39631 'font-size:13px!important;', 39632 'font-weight:900!important;', 39633 'line-height:1.15!important;', 39634 'text-align:center!important;', 39635 'text-transform:uppercase!important;', 39636 'letter-spacing:.3px!important;', 39637 'white-space:normal!important;', 39638 'overflow-wrap:break-word!important;', 39639 'border-radius:3px!important;', 39640 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 39641 'pointer-events:none!important;', 39642 '}', 39643 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 39644 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 39645 'background:#d70008!important;', 39646 '}', 39647 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 39648 'background:#000!important;', 39649 '}', 39650 '@media (max-width:767px){', 39651 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 39652 'top:42px!important;', 39653 'left:6px!important;', 39654 'max-width:calc(100% - 12px)!important;', 39655 'padding:6px 8px!important;', 39656 'font-size:10px!important;', 39657 '}', 39658 '}' 39659 ].join(''); 39660 39661 (document.head || document.documentElement).appendChild(style); 39662 } 39663 39664 function normalizeProductId(value) { 39665 var id = String(value == null ? '' : value).trim(); 39666 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 39667 } 39668 39669 function classifyRelatedCategories(relatedCategories) { 39670 var found = { 39671 '292': false, 39672 '294': false, 39673 '296': false, 39674 '298': false 39675 }; 39676 39677 function inspect(value, depth) { 39678 var index; 39679 var normalized; 39680 39681 if (value == null || depth > 8) { 39682 return; 39683 } 39684 39685 if (Array.isArray(value)) { 39686 for (index = 0; index < value.length; index += 1) { 39687 inspect(value[index], depth + 1); 39688 } 39689 return; 39690 } 39691 39692 if (typeof value === 'object') { 39693 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 39694 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 39695 inspect(value.id, depth + 1); 39696 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 39697 inspect(value.category_id, depth + 1); 39698 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 39699 inspect(value.Category, depth + 1); 39700 } 39701 return; 39702 } 39703 39704 if (typeof value !== 'string' && typeof value !== 'number') { 39705 return; 39706 } 39707 normalized = normalizeProductId(value); 39708 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 39709 found[normalized] = true; 39710 } 39711 } 39712 39713 inspect(relatedCategories, 0); 39714 39715 if (found['298']) { 39716 return rules['298']; 39717 } 39718 if (found['296']) { 39719 return rules['296']; 39720 } 39721 if (found['294']) { 39722 return rules['294']; 39723 } 39724 39725 // 292 e qualquer classificacao desconhecida ficam sem tarja. 39726 return null; 39727 } 39728 39729 function ruleFromPayload(payload, productId) { 39730 var product = payload && payload.Product; 39731 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 39732 return null; 39733 } 39734 return classifyRelatedCategories(product && product.related_categories); 39735 } 39736 39737 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 39738 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 39739 function attachTrayAjaxCache() { 39740 var jq = window.jQuery; 39741 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 39742 return; 39743 } 39744
39745 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 39746 var url; 39747 var match; 39748 var productId; 39749 var payload; 39750 try { 39751 url = new URL(settings.url, window.location.href); 39752 if (url.origin !== window.location.origin) { 39753 return; 39754 } 39755 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 39756 if (!match) { 39757 return; 39758 } 39759 productId = normalizeProductId(match[1]); 39760 if (!cache.has(productId) && !pending.has(productId)) { 39761 payload = data || xhr.responseJSON; 39762 if (typeof payload === 'string') { 39763 payload = JSON.parse(payload); 39764 } 39765 if (!payload || !payload.Product || 39766 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 39767 return; 39768 } 39769 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 39770 return; 39771 } 39772 cache.set(productId, ruleFromPayload(payload, productId)); 39773 } 39774 } catch (error) { 39775 // Respostas de outras integracoes nao interferem nas tarjas. 39776 } 39777 }); 39778 39779 trayAjaxHooked = true; 39780 document.removeEventListener('load', onTrayScriptLoad, true); 39781 } 39782 39783 function onTrayScriptLoad(event) { 39784 if (event.target && event.target.tagName === 'SCRIPT') { 39785 attachTrayAjaxCache(); 39786 } 39787 } 39788 39789 function requestRule(productId) { 39790 var controller = null; 39791 var timeoutId = null; 39792 var options = { 39793 credentials: 'same-origin', 39794 headers: { 39795 'Accept': 'application/json' 39796 } 39797 }; 39798 var request; 39799 39800 if (typeof window.fetch !== 'function') { 39801 return Promise.resolve(null); 39802 } 39803 39804 if (typeof window.AbortController === 'function') { 39805 controller = new window.AbortController(); 39806 options.signal = controller.signal; 39807 timeoutId = window.setTimeout(function () { 39808 controller.abort(); 39809 }, REQUEST_TIMEOUT_MS); 39810 } 39811 39812 try { 39813 request = window.fetch( 39814 '/web_api/products/' + encodeURIComponent(productId), 39815 options 39816 ); 39817 } catch (error) { 39818 if (timeoutId !== null) { 39819 window.clearTimeout(timeoutId); 39820 } 39821 return Promise.resolve(null); 39822 } 39823 39824 return request.then(function (response) { 39825 if (!response.ok) { 39826 throw new Error('HTTP ' + response.status); 39827 } 39828 return response.json(); 39829 }).then(function (payload) { 39830 return ruleFromPayload(payload, productId); 39831 }).then(function (rule) { 39832 if (timeoutId !== null) { 39833 window.clearTimeout(timeoutId); 39834 } 39835 return rule; 39836 }, function () { 39837 if (timeoutId !== null) { 39838 window.clearTimeout(timeoutId); 39839 } 39840 39841 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 39842 return null; 39843 }); 39844 } 39845 39846 function finishJob(job, rule) { 39847 cache.set(job.productId, rule); 39848 pending.delete(job.productId); 39849 activeRequests -= 1; 39850 job.resolve(rule); 39851 pumpQueue(); 39852 } 39853 39854 function pumpQueue() { 39855 var job; 39856 39857 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 39858 job = queue.shift(); 39859 activeRequests += 1; 39860 39861 (function (currentJob) { 39862 requestRule(currentJob.productId).then(function (rule) { 39863 finishJob(currentJob, rule); 39864 }, function () { 39865 finishJob(currentJob, null); 39866 }); 39867 }(job)); 39868 } 39869 } 39870 39871 function getRule(productId) { 39872 var resolver; 39873 var promise; 39874 39875 if (cache.has(productId)) { 39876 return Promise.resolve(cache.get(productId)); 39877 } 39878 39879 if (pending.has(productId)) { 39880 return pending.get(productId); 39881 } 39882 39883 promise = new Promise(function (resolve) { 39884 resolver = resolve; 39885 }); 39886 39887 pending.set(productId, promise); 39888 queue.push({ 39889 productId: productId, 39890 resolve: resolver 39891 }); 39892 pumpQueue(); 39893 39894 return promise; 39895 } 39896 39897 function findBadge(card) { 39898 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 39899 } 39900 39901 function clearBadge(card) { 39902 var badge = findBadge(card); 39903 var image = card.querySelector('.product-header > .w-100 > .image'); 39904 39905 if (badge && badge.parentNode) { 39906 badge.parentNode.removeChild(badge); 39907 } 39908 39909 if (image) { 39910 image.classList.remove(HOST_CLASS); 39911 } 39912 39913 card.removeAttribute('data-farmacam-prescription-level'); 39914 } 39915 39916 function applyBadge(card, productId, rule) { 39917 var image; 39918 var badge; 39919 39920 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 39921 return false;
39922 } 39923 39924 clearBadge(card); 39925 39926 if (!rule) { 39927 return true; 39928 } 39929 39930 image = card.querySelector('.product-header > .w-100 > .image'); 39931 if (!image) { 39932 return false; 39933 } 39934 39935 badge = document.createElement('span'); 39936 badge.className = BADGE_CLASS; 39937 badge.setAttribute('data-farmacam-generated', 'true'); 39938 badge.setAttribute('data-farmacam-prescription-level', rule.level); 39939 badge.setAttribute('role', 'note'); 39940 badge.textContent = rule.text; 39941 39942 image.classList.add(HOST_CLASS); 39943 image.insertBefore(badge, image.firstChild); 39944 card.setAttribute('data-farmacam-prescription-level', rule.level); 39945 39946 return true; 39947 } 39948 39949 function processCard(card) { 39950 var productId; 39951 var previousState; 39952 var currentState; 39953 39954 if (!card || card.nodeType !== 1) { 39955 return; 39956 } 39957 39958 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 39959 return; 39960 } 39961 39962 productId = normalizeProductId(card.getAttribute('data-id')); 39963 previousState = cardStates.get(card); 39964 39965 if (!productId) { 39966 clearBadge(card); 39967 cardStates.delete(card); 39968 return; 39969 } 39970 39971 if ( 39972 previousState && 39973 previousState.productId === productId && 39974 previousState.status === 'loading' 39975 ) { 39976 return; 39977 } 39978 39979 if ( 39980 previousState && 39981 previousState.productId === productId && 39982 previousState.status === 'processed' 39983 ) { 39984 if (!previousState.rule || findBadge(card)) { 39985 return; 39986 } 39987 } 39988 39989 if (!previousState || previousState.productId !== productId) { 39990 clearBadge(card); 39991 } 39992 39993 currentState = { 39994 productId: productId, 39995 status: 'loading', 39996 rule: null 39997 }; 39998 cardStates.set(card, currentState); 39999 40000 getRule(productId).then(function (rule) { 40001 var applied; 40002 40003 if ( 40004 cardStates.get(card) !== currentState || 40005 normalizeProductId(card.getAttribute('data-id')) !== productId 40006 ) { 40007 return; 40008 } 40009 40010 applied = applyBadge(card, productId, rule); 40011 currentState.rule = rule; 40012 currentState.status = applied ? 'processed' : 'waiting-image'; 40013 }); 40014 } 40015 40016 function scan(root) { 40017 var cards; 40018 var index; 40019 40020 if (!root) { 40021 return; 40022 } 40023 40024 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 40025 processCard(root); 40026 } 40027 40028 if (!root.querySelectorAll) { 40029 return; 40030 } 40031 40032 cards = root.querySelectorAll(CARD_SELECTOR); 40033 for (index = 0; index < cards.length; index += 1) { 40034 processCard(cards[index]); 40035 } 40036 } 40037 40038 function startObserver() { 40039 var observer; 40040 40041 if (!window.MutationObserver || !document.documentElement) { 40042 return; 40043 } 40044 40045 observer = new MutationObserver(function (mutations) { 40046 var mutationIndex; 40047 var nodeIndex; 40048 var mutation; 40049 var node; 40050 var ownerCard; 40051 40052 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 40053 mutation = mutations[mutationIndex]; 40054 40055 if (mutation.type === 'attributes') { 40056 processCard(mutation.target); 40057 continue; 40058 } 40059 40060 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 40061 node = mutation.addedNodes[nodeIndex]; 40062 if (node.nodeType !== 1) { 40063 continue; 40064 } 40065 40066 scan(node); 40067 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 40068 if (ownerCard) { 40069 processCard(ownerCard); 40070 } 40071 } 40072 } 40073 }); 40074 40075 observer.observe(document.documentElement, { 40076 childList: true, 40077 subtree: true, 40078 attributes: true, 40079 attributeFilter: ['data-id'] 40080 }); 40081 40082 window[GLOBAL_KEY].observer = observer; 40083 } 40084 40085 window[GLOBAL_KEY] = { 40086 version: '1.1.0', 40087 cache: cache, 40088 pending: pending, 40089 cardStates: cardStates, 40090 scan: scan, 40091 processCard: processCard, 40092 observer: null 40093 }; 40094 40095 document.addEventListener('load', onTrayScriptLoad, true); 40096 attachTrayAjaxCache(); 40097 injectStyles(); 40098 scan(document); 40099 startObserver(); 40100 40101 if (document.readyState === 'loading') { 40102 document.addEventListener('DOMContentLoaded', function () { 40103 attachTrayAjaxCache(); 40104 scan(document); 40105 }); 40106 } 40107}(window, document)); 40108</script>
40108 40109 </div> 40110 <div 40111 class="swiper-slide fixWidthBoxProduct item"> 40112 40113 40114 40115 40116<div class="product animate open_cart" 40117 data-id="125241294" 40118 data-farmacam-related-categories="," 40119 data-ga4-id="125241294" 40120 data-ga4-name="Digere Glúten - Zoomzyme GLU10" 40121 data-ga4-price="129.00" 40122 data-ga4-brand="Farmacam" 40123 data-ga4-category="Tipo de Produto;Manipulados;" 40124 data-ga4-promotion="103"> 40125 40126 <div class="product-header"> 40127 40128 <div class="w-100"> 40129 40130 40131 40132 40133 40134 40135 40136 40137 <div class="product-tags-circle product-tags-circle-right"> 40138 40139 <div class="tag-circle discount"> 40140 <span> 40141 20% OFF 40142 </span> 40143 </div> 40144 40145 40146 </div> 40147 40148 <div class="product-tags " data-tags-count="0"> 40149 40150 40151 40152 40153 <div class="tag extra fix-Selo"> 40154 <img width="119" height="22" alt="Selo" src="https://images.tcdn.com.br/img/img_prod/1063102/1764006510_oportunidade.png" fetchpriority='high' /> 40155 </div> 40156 40157 </div> 40158 40159 40160 40161 <div class="image "> 40162 40163 <a title="Digere Glúten - Zoomzyme GLU10" href="https://www.farmacam.com.br/digere-gluten" class="space-image"> 40164 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/digere_gluten_125241294_1_c64d256d32e5ca205e350ebd576747e8.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/digere_gluten_125241294_1_c64d256d32e5ca205e350ebd576747e8.png" alt="Digere Glúten - Zoomzyme GLU10"> 40165 </a> 40166 40167 </div> 40168 40169 40170 40171 40172 40173 </div> 40174 40175 </div> 40176 40177 <div class="product-body"> 40178 40179 <a title="Digere Glúten - Zoomzyme GLU10" class="product-info" href="https://www.farmacam.com.br/digere-gluten"> 40180 40181 <div class="product-info-dados"> 40182 40183 40184 40185 <div class="listagem-produtos-timer-promocao" data-inicial="2026-08-05" data-final="2026-10-14"></div> 40186 40187 40188 40189 <div class="product-name"> 40190 Digere Glúten - Zoomzyme GLU10 40191 </div> 40192 40193 40194 40195 <div class="product-price"> 40196 40197 40198 40199 <div class="compre-economize"> 40200 Economize: R$ 26,00 40201 </div> 40202 40203 40204 <span class="product-has-variants text-center"> 40205 A partir de 40206 </span> 40207 40208<div class="price display-cash"> 40209 40210 <span class="old-price"> 40211 R$ 129,00 40212 </span> 40213 40214 <span class="current-price "> 40215 R$ 103,00 40216 40217 </span> 40218 40219 <span class="product-installments"> 40220 40221 </span> 40222 40223</div> 40224 </div> 40225 40226 </div> 40227 40228 </a> 40229 40230 </div> 40231 40232 40233 <div class="product-footer"> 40234 40235 40236 <div class="w-100"> 40237 40238 40239 40240<div class="product-rating-catalog"> 40241 40242 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 40243 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 40244 </svg> 40245 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 40246 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 40247 </svg> 40248 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 40249 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 40250 </svg> 40251 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 40252 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 40253 </svg> 40254 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 40255 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 40256 </svg> 40257 40258 40259 <a title="Ver avaliações de Digere Glúten - Zoomzyme GLU10" href="https://www.farmacam.com.br/digere-gluten#comments" class="total"> 40260 Seja o primeiro 40261 </a> 40262 40263 </div> 40264 40265 40266 40267 <div class="config-variacoes-compra"> 40268 40269 40270 40271 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125241294"> 40272 <input type="hidden" name="product_id" value="125241294"> 40273 <input type="hidden" name="without_stock_sale" value=""> 40274 40275 <input type="hidden" name="variacao" id="selectedVariant" value=""> 40276 <input type="hidden" name="estoque" value=""> 40277 40278 40279 40280 <ul class="paleta-cores"> 40281 40282 40283 40284 40285 40286 40287 40288 40289 40290 40291 40292 40293 40294 40295 40296 40297 40298 40299 40300 40301 40302 40303 40304 40305 40306 40307 40308 40309 40310 40311 40312 40313 40314 40315 40316 40317 40318 40319 40320 40321 40322 40323 40324 40325 40326 40327 40328 40329 40330 40331 40332 40333 40334 40335 40336 40337 40338 40339 40340 40341 40342 40343 40344 40345 40346 40347 40348 40349 40350 40351 40352 40353 40354 40355 40356 40357 40358 40359 40360 40361 40362 40363 40364 40365 40366 40367 40368 40369 40370 40371 40372 40373 40374 40375 40376 40377 40378 40379 40380 40381 40382 40383 40384 40385 40386 40387 40388 40389 40390 40391 40392 40393 40394 40395 40396 40397 40398 40399 40400 40401 40402 40403 40404 40405 40406 40407 40408 40409 40410 40411 40412 40413 40414 40415 40416 40417 40418 40419 40420 40421 40422 40423 40424 40425 40426 40427 40428 40429 40430 40431 40432 40433 40434 40435 40436 40437 40438 40439 40440 40441 40442 40443 40444 40445 40446 40447 40448 40449 40450 40451 40452 40453 40454 40455 40456 40457 40458 40459 40460 40461 40462 40463 40464 40465 40466 40467 40468 40469 40470 40471 40472 40473 40474 40475 40476 40477 40478 40479 40480 40481 40482 40483 40484 40485 40486 40487 40488 40489 40490 40491 40492 40493 40494 40495 40496 40497 40498 40499 40500 40501 40502 40503 40504 40505 40506 40507 40508 40509 40510 40511 40512 40513 40514 40515 40516 40517 40518 40519 40520 40521 40522 40523 40524 40525 40526 40527 40528 40529 40530 40531 40532 40533 40534 40535 40536 40537 40538 40539
40539 40540 40541 40542 40543 40544 40545 40546 40547 40548 40549 40550 40551 40552 40553 40554 40555 40556 40557 40558 40559 40560 40561 40562 40563 40564 40565 40566 40567 40568 40569 40570 40571 40572 40573 40574 40575 40576 40577 40578 40579 40580 40581 40582 40583 40584 40585 40586 40587 40588 40589 40590 40591 40592 40593 40594 40595 40596 40597 40598 40599 40600 40601 40602 40603 40604 40605 40606 40607 40608 40609 40610 40611 40612 40613 </ul> 40614 <!-- Fim Paleta de Cores --> 40615 40616 40617 40618 40619 40620 40621 40622 40623 40624 40625 40626 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 40627 <option disabled="disabled" value=""> 40628 Selecione 40629 </option> 40630 40631 40632 <option value="21660" produto="125241294" estoque="10000">30 Doses</option> 40633 40634 40635 40636 40637 <option value="21662" produto="125241294" estoque="10000">60 Doses</option> 40638 40639 40640 </select> 40641 40642 40643 <select class="select-cor" style="display: none;" title="Campo Cor"> 40644 </select> 40645 40646 40647 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 40648 <div class="alerta-estoque"></div> 40649 <div class="alerta-adicionado"></div> 40650 40651 <div class="acao-compra"> 40652 40653 <div class="quantidade-box"> 40654 <div class="quantidade-box-input"> 40655 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
40655stoque="20000" /> 40656 </div> 40657 <div class="quantidade-box-controles"> 40658 <div class="quantidade-box-controles-itens" data-item="mais"> 40659 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 40660 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 40661 </svg> 40662 </div> 40663 <div class="quantidade-box-controles-itens" data-item="menus"> 40664 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 40665 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 40666 </svg> 40667 </div> 40668 </div> 40669 </div> 40670 40671 40672 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125241294"> 40673 40674 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 40675 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 40676 40677 40678 40679 40680 40681 40682 <!-- Cesta de Compras --> 40683 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 40684 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 40685 </svg> 40686 40687 40688 40689 Comprar 40690 40691 40692 </button> 40693 <!-- </form> --> 40694 40695 </div> 40696 40697</div> 40698 40699 40700 </div> 40701 40702 </div> 40703 40704 40705</div> 40706
40707<script> 40708(function (window, document) { 40709 'use strict'; 40710 40711 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 40712 40713 if (window[GLOBAL_KEY]) { 40714 return; 40715 } 40716 40717 if (!window.Map || !window.WeakMap || !window.Promise) { 40718 return; 40719 } 40720 40721 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 40722 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 40723 '#vitrine-personalizada .product[data-id]'; 40724 var BADGE_CLASS = 'farmacam-prescription-badge'; 40725 var HOST_CLASS = 'farmacam-prescription-badge-host'; 40726 var MAX_CONCURRENT_REQUESTS = 6; 40727 var REQUEST_TIMEOUT_MS = 12000; 40728 40729 var rules = { 40730 '294': { 40731 level: '294', 40732 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 40733 }, 40734 '296': { 40735 level: '296', 40736 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 40737 }, 40738 '298': { 40739 level: '298', 40740 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 40741 } 40742 }; 40743 40744 var cache = new Map(); 40745 var pending = new Map(); 40746 var cardStates = new WeakMap(); 40747 var queue = []; 40748 var activeRequests = 0; 40749 var trayAjaxHooked = false; 40750 40751 function injectStyles() { 40752 if (document.getElementById('farmacam-prescription-cards-style')) { 40753 return; 40754 } 40755 40756 var style = document.createElement('style'); 40757 style.id = 'farmacam-prescription-cards-style'; 40758 style.textContent = [ 40759 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 40760 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 40761 'position:absolute!important;', 40762 'top:52px!important;', 40763 'left:10px!important;', 40764 'z-index:999!important;', 40765 'display:block!important;', 40766 'max-width:calc(100% - 20px)!important;', 40767 'box-sizing:border-box!important;', 40768 'padding:8px 12px!important;', 40769 'color:#fff!important;', 40770 'font-family:inherit!important;', 40771 'font-size:13px!important;', 40772 'font-weight:900!important;', 40773 'line-height:1.15!important;', 40774 'text-align:center!important;', 40775 'text-transform:uppercase!important;', 40776 'letter-spacing:.3px!important;', 40777 'white-space:normal!important;', 40778 'overflow-wrap:break-word!important;', 40779 'border-radius:3px!important;', 40780 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 40781 'pointer-events:none!important;', 40782 '}', 40783 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 40784 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 40785 'background:#d70008!important;', 40786 '}', 40787 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 40788 'background:#000!important;', 40789 '}', 40790 '@media (max-width:767px){', 40791 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 40792 'top:42px!important;', 40793 'left:6px!important;', 40794 'max-width:calc(100% - 12px)!important;', 40795 'padding:6px 8px!important;', 40796 'font-size:10px!important;', 40797 '}', 40798 '}' 40799 ].join(''); 40800 40801 (document.head || document.documentElement).appendChild(style); 40802 } 40803 40804 function normalizeProductId(value) { 40805 var id = String(value == null ? '' : value).trim(); 40806 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 40807 } 40808 40809 function classifyRelatedCategories(relatedCategories) { 40810 var found = { 40811 '292': false, 40812 '294': false, 40813 '296': false, 40814 '298': false 40815 }; 40816 40817 function inspect(value, depth) { 40818 var index; 40819 var normalized; 40820 40821 if (value == null || depth > 8) { 40822 return; 40823 } 40824 40825 if (Array.isArray(value)) { 40826 for (index = 0; index < value.length; index += 1) { 40827 inspect(value[index], depth + 1); 40828 } 40829 return; 40830 } 40831 40832 if (typeof value === 'object') { 40833 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 40834 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 40835 inspect(value.id, depth + 1); 40836 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 40837 inspect(value.category_id, depth + 1); 40838 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 40839 inspect(value.Category, depth + 1); 40840 } 40841 return; 40842 } 40843 40844 if (typeof value !== 'string' && typeof value !== 'number') { 40845 return; 40846 } 40847 normalized = normalizeProductId(value); 40848 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 40849 found[normalized] = true; 40850 } 40851 } 40852 40853 inspect(relatedCategories, 0); 40854 40855 if (found['298']) { 40856 return rules['298']; 40857 } 40858 if (found['296']) { 40859 return rules['296']; 40860 } 40861 if (found['294']) { 40862 return rules['294']; 40863 } 40864 40865 // 292 e qualquer classificacao desconhecida ficam sem tarja. 40866 return null; 40867 } 40868 40869 function ruleFromPayload(payload, productId) { 40870 var product = payload && payload.Product; 40871 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 40872 return null; 40873 } 40874 return classifyRelatedCategories(product && product.related_categories); 40875 } 40876 40877 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 40878 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 40879 function attachTrayAjaxCache() { 40880 var jq = window.jQuery; 40881 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 40882 return; 40883 } 40884
40885 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 40886 var url; 40887 var match; 40888 var productId; 40889 var payload; 40890 try { 40891 url = new URL(settings.url, window.location.href); 40892 if (url.origin !== window.location.origin) { 40893 return; 40894 } 40895 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 40896 if (!match) { 40897 return; 40898 } 40899 productId = normalizeProductId(match[1]); 40900 if (!cache.has(productId) && !pending.has(productId)) { 40901 payload = data || xhr.responseJSON; 40902 if (typeof payload === 'string') { 40903 payload = JSON.parse(payload); 40904 } 40905 if (!payload || !payload.Product || 40906 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 40907 return; 40908 } 40909 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 40910 return; 40911 } 40912 cache.set(productId, ruleFromPayload(payload, productId)); 40913 } 40914 } catch (error) { 40915 // Respostas de outras integracoes nao interferem nas tarjas. 40916 } 40917 }); 40918 40919 trayAjaxHooked = true; 40920 document.removeEventListener('load', onTrayScriptLoad, true); 40921 } 40922 40923 function onTrayScriptLoad(event) { 40924 if (event.target && event.target.tagName === 'SCRIPT') { 40925 attachTrayAjaxCache(); 40926 } 40927 } 40928 40929 function requestRule(productId) { 40930 var controller = null; 40931 var timeoutId = null; 40932 var options = { 40933 credentials: 'same-origin', 40934 headers: { 40935 'Accept': 'application/json' 40936 } 40937 }; 40938 var request; 40939 40940 if (typeof window.fetch !== 'function') { 40941 return Promise.resolve(null); 40942 } 40943 40944 if (typeof window.AbortController === 'function') { 40945 controller = new window.AbortController(); 40946 options.signal = controller.signal; 40947 timeoutId = window.setTimeout(function () { 40948 controller.abort(); 40949 }, REQUEST_TIMEOUT_MS); 40950 } 40951 40952 try { 40953 request = window.fetch( 40954 '/web_api/products/' + encodeURIComponent(productId), 40955 options 40956 ); 40957 } catch (error) { 40958 if (timeoutId !== null) { 40959 window.clearTimeout(timeoutId); 40960 } 40961 return Promise.resolve(null); 40962 } 40963 40964 return request.then(function (response) { 40965 if (!response.ok) { 40966 throw new Error('HTTP ' + response.status); 40967 } 40968 return response.json(); 40969 }).then(function (payload) { 40970 return ruleFromPayload(payload, productId); 40971 }).then(function (rule) { 40972 if (timeoutId !== null) { 40973 window.clearTimeout(timeoutId); 40974 } 40975 return rule; 40976 }, function () { 40977 if (timeoutId !== null) { 40978 window.clearTimeout(timeoutId); 40979 } 40980 40981 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 40982 return null; 40983 }); 40984 } 40985 40986 function finishJob(job, rule) { 40987 cache.set(job.productId, rule); 40988 pending.delete(job.productId); 40989 activeRequests -= 1; 40990 job.resolve(rule); 40991 pumpQueue(); 40992 } 40993 40994 function pumpQueue() { 40995 var job; 40996 40997 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 40998 job = queue.shift(); 40999 activeRequests += 1; 41000 41001 (function (currentJob) { 41002 requestRule(currentJob.productId).then(function (rule) { 41003 finishJob(currentJob, rule); 41004 }, function () { 41005 finishJob(currentJob, null); 41006 }); 41007 }(job)); 41008 } 41009 } 41010 41011 function getRule(productId) { 41012 var resolver; 41013 var promise; 41014 41015 if (cache.has(productId)) { 41016 return Promise.resolve(cache.get(productId)); 41017 } 41018 41019 if (pending.has(productId)) { 41020 return pending.get(productId); 41021 } 41022 41023 promise = new Promise(function (resolve) { 41024 resolver = resolve; 41025 }); 41026 41027 pending.set(productId, promise); 41028 queue.push({ 41029 productId: productId, 41030 resolve: resolver 41031 }); 41032 pumpQueue(); 41033 41034 return promise; 41035 } 41036 41037 function findBadge(card) { 41038 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 41039 } 41040 41041 function clearBadge(card) { 41042 var badge = findBadge(card); 41043 var image = card.querySelector('.product-header > .w-100 > .image'); 41044 41045 if (badge && badge.parentNode) { 41046 badge.parentNode.removeChild(badge); 41047 } 41048 41049 if (image) { 41050 image.classList.remove(HOST_CLASS); 41051 } 41052 41053 card.removeAttribute('data-farmacam-prescription-level'); 41054 } 41055 41056 function applyBadge(card, productId, rule) { 41057 var image; 41058 var badge; 41059 41060 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 41061 return false;
41062 } 41063 41064 clearBadge(card); 41065 41066 if (!rule) { 41067 return true; 41068 } 41069 41070 image = card.querySelector('.product-header > .w-100 > .image'); 41071 if (!image) { 41072 return false; 41073 } 41074 41075 badge = document.createElement('span'); 41076 badge.className = BADGE_CLASS; 41077 badge.setAttribute('data-farmacam-generated', 'true'); 41078 badge.setAttribute('data-farmacam-prescription-level', rule.level); 41079 badge.setAttribute('role', 'note'); 41080 badge.textContent = rule.text; 41081 41082 image.classList.add(HOST_CLASS); 41083 image.insertBefore(badge, image.firstChild); 41084 card.setAttribute('data-farmacam-prescription-level', rule.level); 41085 41086 return true; 41087 } 41088 41089 function processCard(card) { 41090 var productId; 41091 var previousState; 41092 var currentState; 41093 41094 if (!card || card.nodeType !== 1) { 41095 return; 41096 } 41097 41098 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 41099 return; 41100 } 41101 41102 productId = normalizeProductId(card.getAttribute('data-id')); 41103 previousState = cardStates.get(card); 41104 41105 if (!productId) { 41106 clearBadge(card); 41107 cardStates.delete(card); 41108 return; 41109 } 41110 41111 if ( 41112 previousState && 41113 previousState.productId === productId && 41114 previousState.status === 'loading' 41115 ) { 41116 return; 41117 } 41118 41119 if ( 41120 previousState && 41121 previousState.productId === productId && 41122 previousState.status === 'processed' 41123 ) { 41124 if (!previousState.rule || findBadge(card)) { 41125 return; 41126 } 41127 } 41128 41129 if (!previousState || previousState.productId !== productId) { 41130 clearBadge(card); 41131 } 41132 41133 currentState = { 41134 productId: productId, 41135 status: 'loading', 41136 rule: null 41137 }; 41138 cardStates.set(card, currentState); 41139 41140 getRule(productId).then(function (rule) { 41141 var applied; 41142 41143 if ( 41144 cardStates.get(card) !== currentState || 41145 normalizeProductId(card.getAttribute('data-id')) !== productId 41146 ) { 41147 return; 41148 } 41149 41150 applied = applyBadge(card, productId, rule); 41151 currentState.rule = rule; 41152 currentState.status = applied ? 'processed' : 'waiting-image'; 41153 }); 41154 } 41155 41156 function scan(root) { 41157 var cards; 41158 var index; 41159 41160 if (!root) { 41161 return; 41162 } 41163 41164 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 41165 processCard(root); 41166 } 41167 41168 if (!root.querySelectorAll) { 41169 return; 41170 } 41171 41172 cards = root.querySelectorAll(CARD_SELECTOR); 41173 for (index = 0; index < cards.length; index += 1) { 41174 processCard(cards[index]); 41175 } 41176 } 41177 41178 function startObserver() { 41179 var observer; 41180 41181 if (!window.MutationObserver || !document.documentElement) { 41182 return; 41183 } 41184 41185 observer = new MutationObserver(function (mutations) { 41186 var mutationIndex; 41187 var nodeIndex; 41188 var mutation; 41189 var node; 41190 var ownerCard; 41191 41192 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 41193 mutation = mutations[mutationIndex]; 41194 41195 if (mutation.type === 'attributes') { 41196 processCard(mutation.target); 41197 continue; 41198 } 41199 41200 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 41201 node = mutation.addedNodes[nodeIndex]; 41202 if (node.nodeType !== 1) { 41203 continue; 41204 } 41205 41206 scan(node); 41207 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 41208 if (ownerCard) { 41209 processCard(ownerCard); 41210 } 41211 } 41212 } 41213 }); 41214 41215 observer.observe(document.documentElement, { 41216 childList: true, 41217 subtree: true, 41218 attributes: true, 41219 attributeFilter: ['data-id'] 41220 }); 41221 41222 window[GLOBAL_KEY].observer = observer; 41223 } 41224 41225 window[GLOBAL_KEY] = { 41226 version: '1.1.0', 41227 cache: cache, 41228 pending: pending, 41229 cardStates: cardStates, 41230 scan: scan, 41231 processCard: processCard, 41232 observer: null 41233 }; 41234 41235 document.addEventListener('load', onTrayScriptLoad, true); 41236 attachTrayAjaxCache(); 41237 injectStyles(); 41238 scan(document); 41239 startObserver(); 41240 41241 if (document.readyState === 'loading') { 41242 document.addEventListener('DOMContentLoaded', function () { 41243 attachTrayAjaxCache(); 41244 scan(document); 41245 }); 41246 } 41247}(window, document)); 41248</script>
41248 41249 </div> 41250 <div 41251 class="swiper-slide fixWidthBoxProduct item"> 41252 41253 41254 41255 41256<div class="product animate open_cart" 41257 data-id="125234265" 41258 data-farmacam-related-categories="," 41259 data-ga4-id="125234265" 41260 data-ga4-name="Adifyline 2% - Efeito Lifting" 41261 data-ga4-price="59.00" 41262 data-ga4-brand="Farmacam" 41263 data-ga4-category="Tipo de Produto;Manipulados;" 41264 data-ga4-promotion="35"> 41265 41266 <div class="product-header"> 41267 41268 <div class="w-100"> 41269 41270 41271 41272 41273 41274 41275 41276 41277 <div class="product-tags-circle product-tags-circle-right"> 41278 41279 <div class="tag-circle discount"> 41280 <span> 41281 41% OFF 41282 </span> 41283 </div> 41284 41285 41286 </div> 41287 41288 <div class="product-tags " data-tags-count="0"> 41289 41290 41291 41292 41293 <div class="tag extra fix-Selo"> 41294 <img width="119" height="22" alt="Selo" src="https://images.tcdn.com.br/img/img_prod/1063102/1764006510_oportunidade.png" fetchpriority='high' /> 41295 </div> 41296 41297 </div> 41298 41299 41300 41301 <div class="image "> 41302 41303 <a title="Adifyline 2% - Efeito Lifting" href="https://www.farmacam.com.br/adifyline-2-efeito-lifting" class="space-image"> 41304 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/adifyline_2_efeito_lifting_125234265_1_8c47f4edd2905df89d4f9cda5daa9920.jpg" data-src="https://images.tcdn.com.br/img/img_prod/1063102/adifyline_2_efeito_lifting_125234265_1_8c47f4edd2905df89d4f9cda5daa9920.jpg" alt="Adifyline 2% - Efeito Lifting"> 41305 </a> 41306 41307 </div> 41308 41309 41310 41311 41312 41313 </div> 41314 41315 </div> 41316 41317 <div class="product-body"> 41318 41319 <a title="Adifyline 2% - Efeito Lifting" class="product-info" href="https://www.farmacam.com.br/adifyline-2-efeito-lifting"> 41320 41321 <div class="product-info-dados"> 41322 41323 41324 41325 <div class="listagem-produtos-timer-promocao" data-inicial="2026-08-05" data-final="2026-09-30"></div> 41326 41327 41328 41329 <div class="product-name"> 41330 Adifyline 2% - Efeito Lifting 41331 </div> 41332 41333 41334 41335 <div class="product-price"> 41336 41337 41338 41339 <div class="compre-economize"> 41340 Economize: R$ 24,00 41341 </div> 41342 41343 41344 <span class="product-has-variants text-center"> 41345 A partir de 41346 </span> 41347 41348<div class="price display-cash"> 41349 41350 <span class="old-price"> 41351 R$ 59,00 41352 </span> 41353 41354 <span class="current-price "> 41355 R$ 35,00 41356 41357 </span> 41358 41359 <span class="product-installments"> 41360 41361 </span> 41362 41363</div> 41364 </div> 41365 41366 </div> 41367 41368 </a> 41369 41370 </div> 41371 41372 41373 <div class="product-footer"> 41374 41375 41376 <div class="w-100"> 41377 41378 41379 41380<div class="product-rating-catalog"> 41381 41382 41383 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star-fill ativo" viewBox="0 0 16 16"> 41384 <path d="M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z"/> 41385 </svg> 41386 41387 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star-fill ativo" viewB
41387ox="0 0 16 16"> 41388 <path d="M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z"/> 41389 </svg> 41390 41391 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star-fill ativo" viewBox="0 0 16 16"> 41392 <path d="M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z"/> 41393 </svg> 41394 41395 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star-fill ativo" viewBox="0 0 16 16"> 41396 <path d="M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z"/> 41397 </svg> 41398 41399 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star-fill ativo" viewBox="0 0 16 16"> 41400 <path d="M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z"/> 41401 </svg> 41402 41403 41404 <a title="Ver avaliações de Adifyline 2% - Efeito Lifting" href="https://www.farmacam.com.br/adifyline-2-efeito-lifting#comments" class="total"> 41405 1 Opinião 41406 </a> 41407 41408 </div> 41409 41410 41411 41412 <div class="config-variacoes-compra"> 41413 41414 41415 41416 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125234265"> 41417 <input type="hidden" name="product_id" value="125234265"> 41418 <input type="hidden" name="without_stock_sale" value=""> 41419 41420 <input type="hidden" name="variacao" id="selectedVariant" value=""> 41421 <input type="hidden" name="estoque" value=""> 41422 41423 41424 41425 <ul class="paleta-cores"> 41426 41427 41428 41429 41430 41431 41432 41433 41434 41435 41436 41437 41438 41439 41440 41441 41442 41443 41444 41445 41446 41447 41448 41449 41450 41451 41452 41453 41454 41455 41456 41457 41458 41459 41460 41461 41462 41463 41464 41465 41466 41467 41468 41469 41470 41471 41472 41473 41474 41475 41476 41477 41478 41479 41480 41481 41482 41483 41484 41485 41486 41487 41488 41489 41490 41491 41492 41493 41494 41495 41496 41497 41498 41499 41500 41501 41502 41503 41504 41505 41506 41507 41508 41509 41510 41511 41512 41513 41514 41515 41516 41517 41518 41519 41520 41521 41522 41523 41524 41525 41526 41527 41528 41529 41530 41531 41532 41533 41534 41535 41536 41537 41538 41539 41540 41541 41542 41543 41544 41545 41546 41547 41548 41549 41550 41551 41552 41553 41554 41555 41556 41557 41558 41559 41560 41561 41562 41563 41564 41565 41566 41567 41568 41569 41570 41571 41572 41573 41574 41575 41576 41577 41578 41579 41580 41581 41582 41583 41584 41585 41586 41587 41588 41589 41590 41591 41592 41593 41594 41595 41596 41597 41598 41599 41600 41601 41602 41603 41604 41605 41606 41607 41608 41609 41610 41611 41612 41613 41614 41615 41616 41617 41618 41619 41620 41621 41622 41623 41624 41625 41626 41627 41628 41629 41630 41631 41632 41633 41634 41635 41636 41637 41638 41639 41640 41641 41642 41643 41644 41645 41646 41647 41648 41649 41650 41651 41652 41653 41654 41655 41656 41657 41658 41659 41660 41661 41662 41663 41664 41665 41666 41667 41668 41669 41670 41671 41672 41673 41674 41675 41676 41677 41678 41679 41680 41681 41682 41683 41684 41685 41686 41687 41688 41689 41690 41691 41692 41693 41694 41695 41696 41697 41698 41699 41700 41701 41702 41703 41704 41705 41706 41707 41708 41709 41710 41711 41712 41713 41714 41715 41716 41717 41718 41719 41720 41721 41722 41723 41724 41725 41726 41727 41728 41729 41730 41731 41732 41733 41734 41735 41736 41737 41738 41739 41740 41741 41742 41743 41744 41745 41746 41747 41748 41749 41750 41751 41752 41753 41754 41755 41756 41757 41758 41759 41760 41761 41762 41763 41764 41765 41766 41767 41768 41769 41770 41771 41772 41773 41774 41775 41776 41777 41778 41779 41780 41781 41782 41783 41784 41785 41786 41787 41788 41789 41790 41791 41792 41793 41794 41795 41796 41797 41798 41799 41800 41801 41802 41803 41804 41805 41806 41807 41808 41809 41810 41811 41812 41813 41814 41815 41816 41817 41818
41818 41819 41820 41821 41822 41823 41824 41825 41826 41827 41828 41829 41830 41831 41832 41833 41834 41835 41836 41837 41838 41839 41840 41841 41842 41843 41844 41845 41846 41847 41848 41849 41850 41851 41852 41853 41854 41855 41856 41857 41858 41859 41860 41861 41862 41863 41864 41865 41866 41867 41868 41869 41870 41871 41872 41873 41874 41875 41876 41877 41878 41879 41880 41881 41882 41883 41884 41885 41886 41887 41888 41889 41890 41891 41892 41893 41894 41895 41896 41897 41898 41899 41900 41901 41902 41903 41904 41905 41906 41907 41908 41909 41910 41911 41912 41913 41914 41915 41916 41917 41918 41919 41920 41921 41922 41923 41924 41925 41926 41927 41928 41929 41930 41931 41932 41933 41934 41935 41936 41937 41938 41939 41940 41941 41942 41943 41944 41945 41946 41947 41948 41949 41950 41951 41952 41953 41954 41955 41956 41957 41958 41959 41960 41961 41962 41963 41964 41965 41966 41967 41968 41969 41970 41971 41972 41973 41974 41975 41976 41977 41978 41979 41980 41981 41982 41983 41984 41985 41986 41987 41988 41989 41990 41991 41992 41993 41994 41995 41996 41997 41998 41999 42000 42001 42002 42003 42004 42005 42006 42007 42008 42009 42010 42011 42012 42013 42014 42015 42016 42017 42018 42019 42020 42021 42022 42023 42024 42025 42026 42027 42028 42029 42030 42031 42032 42033 42034 42035 42036 42037 42038 42039 42040 42041 42042 42043 42044 42045 42046 42047 42048 42049 42050 42051 42052 42053 42054 42055 42056 42057 42058 42059 42060 42061 42062 42063 42064 42065 42066 42067 42068 42069 42070 42071 42072 42073 42074 42075 42076 42077 42078 42079 42080 42081 42082 42083 42084 42085 42086 42087 42088 42089 42090 42091 42092 42093 42094 42095 42096 42097 42098 42099 42100 42101 42102 42103 42104 42105 42106 42107 42108 42109 42110 42111 42112 42113 42114 42115 42116 42117 42118 42119 42120 42121 42122 42123 42124 42125 42126 42127 42128 42129 42130 42131 42132 42133 42134 42135 42136 42137 42138 42139 42140 42141 42142 42143 42144 42145 42146 42147 42148 42149 42150 42151 42152 42153 42154 42155 42156 42157 42158 42159 42160 42161 42162 42163 42164 42165 42166 42167 42168 42169 42170 42171 42172 42173 42174 42175 42176 42177 42178 42179 42180 42181 42182 42183 42184 42185 42186 42187 42188 42189 42190 42191 42192 42193 42194 42195 42196 42197 42198 42199 42200 42201 42202 42203 42204 42205 42206 42207 42208 42209 42210 42211 42212 42213 42214 42215 42216 42217 42218 42219 42220 42221 42222 42223 42224 42225 42226
42226 42227 42228 42229 42230 42231 42232 42233 42234 42235 42236 42237 42238 42239 42240 42241 42242 42243 42244 42245 42246 42247 42248 42249 42250 42251 42252 42253 42254 42255 42256 42257 42258 42259 42260 42261 42262 42263 42264 42265 42266 42267 42268 42269 42270 42271 42272 42273 42274 42275 42276 42277 42278 42279 42280 42281 42282 42283 42284 42285 42286 42287 42288 42289 42290 42291 42292 42293 42294 42295 42296 42297 42298 42299 42300 42301 42302 42303 42304 42305 42306 42307 42308 42309 42310 42311 42312 42313 42314 42315 42316 42317 42318 42319 42320 42321 42322 42323 42324 42325 42326 42327 42328 42329 42330 42331 42332 42333 42334 42335 42336 42337 42338 42339 42340 42341 42342 42343 42344 42345 42346 42347 42348 42349 42350 42351 42352 42353 42354 42355 42356 42357 42358 42359 42360 42361 42362 42363 42364 42365 42366 42367 42368 42369 42370 42371 42372 42373 42374 42375 42376 42377 42378 42379 42380 42381 42382 42383 42384 42385 42386 42387 42388 42389 42390 42391 42392 42393 42394 42395 42396 42397 42398 42399 42400 42401 42402 42403 42404 42405 42406 42407 42408 42409 42410 42411 42412 42413 42414 42415 42416 </ul> 42417 <!-- Fim Paleta de Cores --> 42418 42419 42420 42421 42422 42423 42424 42425 42426 42427 42428 42429 42430 42431 42432 42433 42434 42435 42436 42437 42438 42439 42440 42441 42442 42443 42444 42445 42446 42447 42448 42449 42450 42451 42452 42453 42454 42455 42456 42457 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 42458 <option disabled="disabled" value=""> 42459 Selecione 42460 </option> 42461 42462 42463 <option value="5421" produto="125234265" estoque="10000">Sérum - 30 ml</option> 42464 42465 42466 42467 42468 <option value="4653" produto="125234265" estoque="10000">Creme - 50 g</option> 42469 42470 42471 42472 42473 <option value="4655" produto="125234265" estoque="10000">Creme - 100 g</option> 42474 42475 42476 42477 42478 <option value="4657" produto="125234265" estoque="10000">Gel - 50 g</option> 42479 42480 42481 42482 42483 <option value="4659" produto="125234265" estoque="10000">Gel - 100 g</option> 42484 42485 42486 42487 42488 <option value="4661" produto="125234265" estoque="10000">Gel-Creme - 50 g</option> 42489 42490 42491 42492 42493 <option value="4663" produto="125234265" estoque="10000">Gel-Creme - 100 g</option> 42494 42495 42496 42497 42498 <option value="4665" produto="125234265" estoque="10000">Loção - 50 ml</option> 42499 42500 42501 42502 42503 <option value="4667" produto="125234265" estoque="10000">Loção - 100 ml</option> 42504 42505 42506
42506 </select> 42507 42508 42509 <select class="select-cor" style="display: none;" title="Campo Cor"> 42510
42510 </select> 42511 42512 42513 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 42514 <div class="alerta-estoque"></div> 42515 <div class="alerta-adicionado"></div> 42516 42517 <div class="acao-compra"> 42518 42519 <div class="quantidade-box"> 42520 <div class="quantidade-box-input"> 42521 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
42521stoque="90000" /> 42522 </div> 42523 <div class="quantidade-box-controles"> 42524 <div class="quantidade-box-controles-itens" data-item="mais"> 42525 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 42526 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 42527 </svg> 42528 </div> 42529 <div class="quantidade-box-controles-itens" data-item="menus"> 42530 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 42531 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 42532 </svg> 42533 </div> 42534 </div> 42535 </div> 42536 42537 42538 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125234265"> 42539 42540 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 42541 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 42542 42543 42544 42545 42546 42547 42548 <!-- Cesta de Compras --> 42549 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 42550 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 42551 </svg> 42552 42553 42554 42555 Comprar 42556 42557 42558 </button> 42559 <!-- </form> --> 42560 42561 </div> 42562 42563</div> 42564 42565 42566 </div> 42567 42568 </div> 42569 42570 42571</div> 42572
42573<script> 42574(function (window, document) { 42575 'use strict'; 42576 42577 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 42578 42579 if (window[GLOBAL_KEY]) { 42580 return; 42581 } 42582 42583 if (!window.Map || !window.WeakMap || !window.Promise) { 42584 return; 42585 } 42586 42587 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 42588 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 42589 '#vitrine-personalizada .product[data-id]'; 42590 var BADGE_CLASS = 'farmacam-prescription-badge'; 42591 var HOST_CLASS = 'farmacam-prescription-badge-host'; 42592 var MAX_CONCURRENT_REQUESTS = 6; 42593 var REQUEST_TIMEOUT_MS = 12000; 42594 42595 var rules = { 42596 '294': { 42597 level: '294', 42598 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 42599 }, 42600 '296': { 42601 level: '296', 42602 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 42603 }, 42604 '298': { 42605 level: '298', 42606 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 42607 } 42608 }; 42609 42610 var cache = new Map(); 42611 var pending = new Map(); 42612 var cardStates = new WeakMap(); 42613 var queue = []; 42614 var activeRequests = 0; 42615 var trayAjaxHooked = false; 42616 42617 function injectStyles() { 42618 if (document.getElementById('farmacam-prescription-cards-style')) { 42619 return; 42620 } 42621 42622 var style = document.createElement('style'); 42623 style.id = 'farmacam-prescription-cards-style'; 42624 style.textContent = [ 42625 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 42626 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 42627 'position:absolute!important;', 42628 'top:52px!important;', 42629 'left:10px!important;', 42630 'z-index:999!important;', 42631 'display:block!important;', 42632 'max-width:calc(100% - 20px)!important;', 42633 'box-sizing:border-box!important;', 42634 'padding:8px 12px!important;', 42635 'color:#fff!important;', 42636 'font-family:inherit!important;', 42637 'font-size:13px!important;', 42638 'font-weight:900!important;', 42639 'line-height:1.15!important;', 42640 'text-align:center!important;', 42641 'text-transform:uppercase!important;', 42642 'letter-spacing:.3px!important;', 42643 'white-space:normal!important;', 42644 'overflow-wrap:break-word!important;', 42645 'border-radius:3px!important;', 42646 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 42647 'pointer-events:none!important;', 42648 '}', 42649 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 42650 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 42651 'background:#d70008!important;', 42652 '}', 42653 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 42654 'background:#000!important;', 42655 '}', 42656 '@media (max-width:767px){', 42657 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 42658 'top:42px!important;', 42659 'left:6px!important;', 42660 'max-width:calc(100% - 12px)!important;', 42661 'padding:6px 8px!important;', 42662 'font-size:10px!important;', 42663 '}', 42664 '}' 42665 ].join(''); 42666 42667 (document.head || document.documentElement).appendChild(style); 42668 } 42669 42670 function normalizeProductId(value) { 42671 var id = String(value == null ? '' : value).trim(); 42672 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 42673 } 42674 42675 function classifyRelatedCategories(relatedCategories) { 42676 var found = { 42677 '292': false, 42678 '294': false, 42679 '296': false, 42680 '298': false 42681 }; 42682 42683 function inspect(value, depth) { 42684 var index; 42685 var normalized; 42686 42687 if (value == null || depth > 8) { 42688 return; 42689 } 42690 42691 if (Array.isArray(value)) { 42692 for (index = 0; index < value.length; index += 1) { 42693 inspect(value[index], depth + 1); 42694 } 42695 return; 42696 } 42697 42698 if (typeof value === 'object') { 42699 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 42700 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 42701 inspect(value.id, depth + 1); 42702 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 42703 inspect(value.category_id, depth + 1); 42704 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 42705 inspect(value.Category, depth + 1); 42706 } 42707 return; 42708 } 42709 42710 if (typeof value !== 'string' && typeof value !== 'number') { 42711 return; 42712 } 42713 normalized = normalizeProductId(value); 42714 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 42715 found[normalized] = true; 42716 } 42717 } 42718 42719 inspect(relatedCategories, 0); 42720 42721 if (found['298']) { 42722 return rules['298']; 42723 } 42724 if (found['296']) { 42725 return rules['296']; 42726 } 42727 if (found['294']) { 42728 return rules['294']; 42729 } 42730 42731 // 292 e qualquer classificacao desconhecida ficam sem tarja. 42732 return null; 42733 } 42734 42735 function ruleFromPayload(payload, productId) { 42736 var product = payload && payload.Product; 42737 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 42738 return null; 42739 } 42740 return classifyRelatedCategories(product && product.related_categories); 42741 } 42742 42743 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 42744 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 42745 function attachTrayAjaxCache() { 42746 var jq = window.jQuery; 42747 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 42748 return; 42749 } 42750
42751 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 42752 var url; 42753 var match; 42754 var productId; 42755 var payload; 42756 try { 42757 url = new URL(settings.url, window.location.href); 42758 if (url.origin !== window.location.origin) { 42759 return; 42760 } 42761 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 42762 if (!match) { 42763 return; 42764 } 42765 productId = normalizeProductId(match[1]); 42766 if (!cache.has(productId) && !pending.has(productId)) { 42767 payload = data || xhr.responseJSON; 42768 if (typeof payload === 'string') { 42769 payload = JSON.parse(payload); 42770 } 42771 if (!payload || !payload.Product || 42772 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 42773 return; 42774 } 42775 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 42776 return; 42777 } 42778 cache.set(productId, ruleFromPayload(payload, productId)); 42779 } 42780 } catch (error) { 42781 // Respostas de outras integracoes nao interferem nas tarjas. 42782 } 42783 }); 42784 42785 trayAjaxHooked = true; 42786 document.removeEventListener('load', onTrayScriptLoad, true); 42787 } 42788 42789 function onTrayScriptLoad(event) { 42790 if (event.target && event.target.tagName === 'SCRIPT') { 42791 attachTrayAjaxCache(); 42792 } 42793 } 42794 42795 function requestRule(productId) { 42796 var controller = null; 42797 var timeoutId = null; 42798 var options = { 42799 credentials: 'same-origin', 42800 headers: { 42801 'Accept': 'application/json' 42802 } 42803 }; 42804 var request; 42805 42806 if (typeof window.fetch !== 'function') { 42807 return Promise.resolve(null); 42808 } 42809 42810 if (typeof window.AbortController === 'function') { 42811 controller = new window.AbortController(); 42812 options.signal = controller.signal; 42813 timeoutId = window.setTimeout(function () { 42814 controller.abort(); 42815 }, REQUEST_TIMEOUT_MS); 42816 } 42817 42818 try { 42819 request = window.fetch( 42820 '/web_api/products/' + encodeURIComponent(productId), 42821 options 42822 ); 42823 } catch (error) { 42824 if (timeoutId !== null) { 42825 window.clearTimeout(timeoutId); 42826 } 42827 return Promise.resolve(null); 42828 } 42829 42830 return request.then(function (response) { 42831 if (!response.ok) { 42832 throw new Error('HTTP ' + response.status); 42833 } 42834 return response.json(); 42835 }).then(function (payload) { 42836 return ruleFromPayload(payload, productId); 42837 }).then(function (rule) { 42838 if (timeoutId !== null) { 42839 window.clearTimeout(timeoutId); 42840 } 42841 return rule; 42842 }, function () { 42843 if (timeoutId !== null) { 42844 window.clearTimeout(timeoutId); 42845 } 42846 42847 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 42848 return null; 42849 }); 42850 } 42851 42852 function finishJob(job, rule) { 42853 cache.set(job.productId, rule); 42854 pending.delete(job.productId); 42855 activeRequests -= 1; 42856 job.resolve(rule); 42857 pumpQueue(); 42858 } 42859 42860 function pumpQueue() { 42861 var job; 42862 42863 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 42864 job = queue.shift(); 42865 activeRequests += 1; 42866 42867 (function (currentJob) { 42868 requestRule(currentJob.productId).then(function (rule) { 42869 finishJob(currentJob, rule); 42870 }, function () { 42871 finishJob(currentJob, null); 42872 }); 42873 }(job)); 42874 } 42875 } 42876 42877 function getRule(productId) { 42878 var resolver; 42879 var promise; 42880 42881 if (cache.has(productId)) { 42882 return Promise.resolve(cache.get(productId)); 42883 } 42884 42885 if (pending.has(productId)) { 42886 return pending.get(productId); 42887 } 42888 42889 promise = new Promise(function (resolve) { 42890 resolver = resolve; 42891 }); 42892 42893 pending.set(productId, promise); 42894 queue.push({ 42895 productId: productId, 42896 resolve: resolver 42897 }); 42898 pumpQueue(); 42899 42900 return promise; 42901 } 42902 42903 function findBadge(card) { 42904 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 42905 } 42906 42907 function clearBadge(card) { 42908 var badge = findBadge(card); 42909 var image = card.querySelector('.product-header > .w-100 > .image'); 42910 42911 if (badge && badge.parentNode) { 42912 badge.parentNode.removeChild(badge); 42913 } 42914 42915 if (image) { 42916 image.classList.remove(HOST_CLASS); 42917 } 42918 42919 card.removeAttribute('data-farmacam-prescription-level'); 42920 } 42921 42922 function applyBadge(card, productId, rule) { 42923 var image; 42924 var badge; 42925 42926 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 42927 return false;
42928 } 42929 42930 clearBadge(card); 42931 42932 if (!rule) { 42933 return true; 42934 } 42935 42936 image = card.querySelector('.product-header > .w-100 > .image'); 42937 if (!image) { 42938 return false; 42939 } 42940 42941 badge = document.createElement('span'); 42942 badge.className = BADGE_CLASS; 42943 badge.setAttribute('data-farmacam-generated', 'true'); 42944 badge.setAttribute('data-farmacam-prescription-level', rule.level); 42945 badge.setAttribute('role', 'note'); 42946 badge.textContent = rule.text; 42947 42948 image.classList.add(HOST_CLASS); 42949 image.insertBefore(badge, image.firstChild); 42950 card.setAttribute('data-farmacam-prescription-level', rule.level); 42951 42952 return true; 42953 } 42954 42955 function processCard(card) { 42956 var productId; 42957 var previousState; 42958 var currentState; 42959 42960 if (!card || card.nodeType !== 1) { 42961 return; 42962 } 42963 42964 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 42965 return; 42966 } 42967 42968 productId = normalizeProductId(card.getAttribute('data-id')); 42969 previousState = cardStates.get(card); 42970 42971 if (!productId) { 42972 clearBadge(card); 42973 cardStates.delete(card); 42974 return; 42975 } 42976 42977 if ( 42978 previousState && 42979 previousState.productId === productId && 42980 previousState.status === 'loading' 42981 ) { 42982 return; 42983 } 42984 42985 if ( 42986 previousState && 42987 previousState.productId === productId && 42988 previousState.status === 'processed' 42989 ) { 42990 if (!previousState.rule || findBadge(card)) { 42991 return; 42992 } 42993 } 42994 42995 if (!previousState || previousState.productId !== productId) { 42996 clearBadge(card); 42997 } 42998 42999 currentState = { 43000 productId: productId, 43001 status: 'loading', 43002 rule: null 43003 }; 43004 cardStates.set(card, currentState); 43005 43006 getRule(productId).then(function (rule) { 43007 var applied; 43008 43009 if ( 43010 cardStates.get(card) !== currentState || 43011 normalizeProductId(card.getAttribute('data-id')) !== productId 43012 ) { 43013 return; 43014 } 43015 43016 applied = applyBadge(card, productId, rule); 43017 currentState.rule = rule; 43018 currentState.status = applied ? 'processed' : 'waiting-image'; 43019 }); 43020 } 43021 43022 function scan(root) { 43023 var cards; 43024 var index; 43025 43026 if (!root) { 43027 return; 43028 } 43029 43030 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 43031 processCard(root); 43032 } 43033 43034 if (!root.querySelectorAll) { 43035 return; 43036 } 43037 43038 cards = root.querySelectorAll(CARD_SELECTOR); 43039 for (index = 0; index < cards.length; index += 1) { 43040 processCard(cards[index]); 43041 } 43042 } 43043 43044 function startObserver() { 43045 var observer; 43046 43047 if (!window.MutationObserver || !document.documentElement) { 43048 return; 43049 } 43050 43051 observer = new MutationObserver(function (mutations) { 43052 var mutationIndex; 43053 var nodeIndex; 43054 var mutation; 43055 var node; 43056 var ownerCard; 43057 43058 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 43059 mutation = mutations[mutationIndex]; 43060 43061 if (mutation.type === 'attributes') { 43062 processCard(mutation.target); 43063 continue; 43064 } 43065 43066 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 43067 node = mutation.addedNodes[nodeIndex]; 43068 if (node.nodeType !== 1) { 43069 continue; 43070 } 43071 43072 scan(node); 43073 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 43074 if (ownerCard) { 43075 processCard(ownerCard); 43076 } 43077 } 43078 } 43079 }); 43080 43081 observer.observe(document.documentElement, { 43082 childList: true, 43083 subtree: true, 43084 attributes: true, 43085 attributeFilter: ['data-id'] 43086 }); 43087 43088 window[GLOBAL_KEY].observer = observer; 43089 } 43090 43091 window[GLOBAL_KEY] = { 43092 version: '1.1.0', 43093 cache: cache, 43094 pending: pending, 43095 cardStates: cardStates, 43096 scan: scan, 43097 processCard: processCard, 43098 observer: null 43099 }; 43100 43101 document.addEventListener('load', onTrayScriptLoad, true); 43102 attachTrayAjaxCache(); 43103 injectStyles(); 43104 scan(document); 43105 startObserver(); 43106 43107 if (document.readyState === 'loading') { 43108 document.addEventListener('DOMContentLoaded', function () { 43109 attachTrayAjaxCache(); 43110 scan(document); 43111 }); 43112 } 43113}(window, document)); 43114</script>
43114 43115 </div> 43116 <div 43117 class="swiper-slide fixWidthBoxProduct item"> 43118 43119 43120 43121 43122<div class="product animate open_cart" 43123 data-id="125235789" 43124 data-farmacam-related-categories="," 43125 data-ga4-id="125235789" 43126 data-ga4-name="ARA - Arachidonic Acid" 43127 data-ga4-price="57.00" 43128 data-ga4-brand="Farmacam" 43129 data-ga4-category="Tipo de Produto;Manipulados;" 43130 data-ga4-promotion="37"> 43131 43132 <div class="product-header"> 43133 43134 <div class="w-100"> 43135 43136 43137 43138 43139 43140 43141 43142 43143 <div class="product-tags-circle product-tags-circle-right"> 43144 43145 <div class="tag-circle discount"> 43146 <span> 43147 35% OFF 43148 </span> 43149 </div> 43150 43151 43152 </div> 43153 43154 <div class="product-tags " data-tags-count="0"> 43155 43156 43157 43158 43159 <div class="tag extra fix-Selo"> 43160 <img width="119" height="22" alt="Selo" src="https://images.tcdn.com.br/img/img_prod/1063102/1764006510_oportunidade.png" fetchpriority='high' /> 43161 </div> 43162 43163 </div> 43164 43165 43166 43167 <div class="image "> 43168 43169 <a title="ARA - Arachidonic Acid" href="https://www.farmacam.com.br/ara-arachidonic-acid" class="space-image"> 43170 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/ara_arachidonic_acid_125235789_1_aeb50d1362b1c5219cc1612699f5fa39.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/ara_arachidonic_acid_125235789_1_aeb50d1362b1c5219cc1612699f5fa39.png" alt="ARA - Arachidonic Acid"> 43171 </a> 43172 43173 </div> 43174 43175 43176 43177 43178 43179 </div> 43180 43181 </div> 43182 43183 <div class="product-body"> 43184 43185 <a title="ARA - Arachidonic Acid" class="product-info" href="https://www.farmacam.com.br/ara-arachidonic-acid"> 43186 43187 <div class="product-info-dados"> 43188 43189 43190 43191 <div class="listagem-produtos-timer-promocao" data-inicial="2026-09-03" data-final="2026-12-05"></div> 43192 43193 43194 43195 <div class="product-name"> 43196 ARA - Arachidonic Acid 43197 </div> 43198 43199 43200 43201 <div class="product-price"> 43202 43203 43204 43205 <div class="compre-economize"> 43206 Economize: R$ 20,00 43207 </div> 43208 43209 43210 <span class="product-has-variants text-center"> 43211 A partir de 43212 </span> 43213 43214<div class="price display-cash"> 43215 43216 <span class="old-price"> 43217 R$ 57,00 43218 </span> 43219 43220 <span class="current-price "> 43221 R$ 37,00 43222 43223 </span> 43224 43225 <span class="product-installments"> 43226 43227 </span> 43228 43229</div> 43230 </div> 43231 43232 </div> 43233 43234 </a> 43235 43236 </div> 43237 43238 43239 <div class="product-footer"> 43240 43241 43242 <div class="w-100"> 43243 43244 43245 43246<div class="product-rating-catalog"> 43247 43248 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 43249 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 43250 </svg> 43251 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 43252 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 43253 </svg> 43254 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 43255 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 43256 </svg> 43257 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 43258 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 43259 </svg> 43260 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 43261 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 43262 </svg> 43263 43264 43265 <a title="Ver avaliações de ARA - Arachidonic Acid" href="https://www.farmacam.com.br/ara-arachidonic-acid#comments" class="total"> 43266 Seja o primeiro 43267 </a> 43268 43269 </div> 43270 43271 43272 43273 <div class="config-variacoes-compra"> 43274 43275 43276 43277 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125235789"> 43278 <input type="hidden" name="product_id" value="125235789"> 43279 <input type="hidden" name="without_stock_sale" value=""> 43280 43281 <input type="hidden" name="variacao" id="selectedVariant" value=""> 43282 <input type="hidden" name="estoque" value=""> 43283 43284 43285 43286 <ul class="paleta-cores"> 43287 43288 43289 43290 43291 43292 43293 43294 43295 43296 43297 43298 43299 43300 43301 43302 43303 43304 43305 43306 43307 43308 43309 43310 43311 43312 43313 43314 43315 43316 43317 43318 43319 43320 43321 43322 43323 43324 43325 43326 43327 43328 43329 43330 43331 43332 43333 43334 43335 43336 43337 43338 43339 43340 43341 43342 43343 43344 43345 43346 43347 43348 43349 43350 43351 43352 43353 43354 43355 43356 43357 43358 43359 43360 43361 43362 43363 43364 43365 43366 43367 43368 43369 43370 43371 43372 43373 43374 43375 43376 43377 43378 43379 43380 43381 43382 43383 43384 43385 43386 43387 43388 43389 43390 43391 43392 43393 43394 43395 43396 43397 43398 43399 43400 43401 43402 43403 43404 43405 43406 43407 43408 43409 43410 43411 43412 43413 43414 43415 43416 43417 43418 43419 43420 43421 43422 43423 43424 43425 43426 43427 43428 43429 43430 43431 43432 43433 43434 43435 43436 43437 43438 43439 43440 43441 43442 43443 43444 43445 43446 43447 43448 43449 43450 43451 43452 43453 43454 43455 43456 43457 43458 43459 43460 43461 43462 43463 43464 43465 43466 43467 43468 43469 43470 43471 43472 43473 43474 43475 43476 43477 43478 43479 43480 43481 43482 43483 43484 43485 43486 43487 43488 43489 43490 43491 43492 43493 43494 43495 43496 43497 43498 43499 43500 43501 43502 43503 43504 43505 43506 43507 43508 43509 43510 43511 43512 43513 43514 43515 43516 43517 43518 43519 43520 43521 43522 43523 43524 43525 43526 43527 43528 43529 43530 43531 43532 43533 43534 43535 43536 43537 43538 43539 43540 43541 43542 43543
43543 43544 43545 43546 43547 43548 43549 43550 43551 43552 43553 43554 43555 43556 43557 43558 43559 43560 43561 43562 43563 43564 43565 43566 43567 43568 43569 43570 43571 43572 43573 43574 43575 43576 43577 43578 43579 43580 43581 43582 43583 43584 43585 43586 43587 43588 43589 43590 43591 43592 43593 43594 43595 43596 43597 43598 43599 43600 43601 43602 43603 43604 43605 43606 43607 43608 43609 43610 43611 43612 43613 43614 43615 43616 43617 43618 43619 43620 43621 43622 43623 43624 43625 43626 43627 43628 43629 43630 43631 43632 43633 43634 43635 43636 43637 43638 43639 43640 43641 43642 43643 43644 43645 43646 43647 43648 43649 43650 43651 43652 43653 43654 43655 43656 43657 43658 43659 43660 43661 43662 43663 43664 43665 43666 43667 43668 43669 43670 43671 43672 43673 43674 43675 43676 43677 43678 43679 43680 43681 43682 43683 43684 43685 43686 43687 43688 43689 43690 43691 43692 43693 43694 43695 43696 43697 43698 43699 43700 43701 43702 43703 43704 43705 43706 43707 43708 43709 43710 43711 43712 43713 43714 43715 43716 43717 43718 43719 43720 43721 43722 43723 43724 43725 43726 43727 43728 43729 43730 43731 43732 43733 43734 43735 43736 43737 43738 43739 43740 43741 43742 43743 43744 43745 43746 43747 43748 43749 43750 43751 43752 43753 43754 43755 43756 43757 43758 43759 43760 43761 43762 43763 43764 43765 43766 43767 43768 43769 43770 43771 43772 43773 43774 43775 43776 43777 43778 43779 43780 43781 43782 43783 43784 43785 43786 43787 43788 43789 43790 43791 43792 43793 43794 43795 43796 43797 43798 43799 43800 43801 43802 43803 43804 43805 43806 43807 </ul> 43808 <!-- Fim Paleta de Cores --> 43809 43810 43811 43812 43813 43814 43815 43816 43817 43818 43819 43820 43821 43822 43823 43824 43825 43826 43827 43828 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 43829 <option disabled="disabled" value=""> 43830 Selecione 43831 </option> 43832 43833 43834 <option value="5605" produto="125235789" estoque="10000">250 mg - 30 doses</option> 43835 43836 43837 43838 43839 <option value="5607" produto="125235789" estoque="10000">250 mg - 60 doses</option> 43840 43841 43842 43843 43844 <option value="7663" produto="125235789" estoque="10000">500 mg - 30 doses</option> 43845 43846 43847 43848 43849 <option value="7665" produto="125235789" estoque="10000">500 mg - 60 doses</option> 43850 43851 43852
43852 </select> 43853 43854 43855 <select class="select-cor" style="display: none;" title="Campo Cor"> 43856 </select> 43857 43858 43859 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 43860 <div class="alerta-estoque"></div> 43861 <div class="alerta-adicionado"></div> 43862 43863 <div class="acao-compra"> 43864 43865 <div class="quantidade-box"> 43866 <div class="quantidade-box-input"> 43867 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
43867stoque="40000" /> 43868 </div> 43869 <div class="quantidade-box-controles"> 43870 <div class="quantidade-box-controles-itens" data-item="mais"> 43871 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 43872 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 43873 </svg> 43874 </div> 43875 <div class="quantidade-box-controles-itens" data-item="menus"> 43876 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 43877 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 43878 </svg> 43879 </div> 43880 </div> 43881 </div> 43882 43883 43884 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125235789"> 43885 43886 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 43887 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 43888 43889 43890 43891 43892 43893 43894 <!-- Cesta de Compras --> 43895 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 43896 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 43897 </svg> 43898 43899 43900 43901 Comprar 43902 43903 43904 </button> 43905 <!-- </form> --> 43906 43907 </div> 43908 43909</div> 43910 43911 43912 </div> 43913 43914 </div> 43915 43916 43917</div> 43918
43919<script> 43920(function (window, document) { 43921 'use strict'; 43922 43923 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 43924 43925 if (window[GLOBAL_KEY]) { 43926 return; 43927 } 43928 43929 if (!window.Map || !window.WeakMap || !window.Promise) { 43930 return; 43931 } 43932 43933 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 43934 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 43935 '#vitrine-personalizada .product[data-id]'; 43936 var BADGE_CLASS = 'farmacam-prescription-badge'; 43937 var HOST_CLASS = 'farmacam-prescription-badge-host'; 43938 var MAX_CONCURRENT_REQUESTS = 6; 43939 var REQUEST_TIMEOUT_MS = 12000; 43940 43941 var rules = { 43942 '294': { 43943 level: '294', 43944 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 43945 }, 43946 '296': { 43947 level: '296', 43948 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 43949 }, 43950 '298': { 43951 level: '298', 43952 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 43953 } 43954 }; 43955 43956 var cache = new Map(); 43957 var pending = new Map(); 43958 var cardStates = new WeakMap(); 43959 var queue = []; 43960 var activeRequests = 0; 43961 var trayAjaxHooked = false; 43962 43963 function injectStyles() { 43964 if (document.getElementById('farmacam-prescription-cards-style')) { 43965 return; 43966 } 43967 43968 var style = document.createElement('style'); 43969 style.id = 'farmacam-prescription-cards-style'; 43970 style.textContent = [ 43971 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 43972 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 43973 'position:absolute!important;', 43974 'top:52px!important;', 43975 'left:10px!important;', 43976 'z-index:999!important;', 43977 'display:block!important;', 43978 'max-width:calc(100% - 20px)!important;', 43979 'box-sizing:border-box!important;', 43980 'padding:8px 12px!important;', 43981 'color:#fff!important;', 43982 'font-family:inherit!important;', 43983 'font-size:13px!important;', 43984 'font-weight:900!important;', 43985 'line-height:1.15!important;', 43986 'text-align:center!important;', 43987 'text-transform:uppercase!important;', 43988 'letter-spacing:.3px!important;', 43989 'white-space:normal!important;', 43990 'overflow-wrap:break-word!important;', 43991 'border-radius:3px!important;', 43992 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 43993 'pointer-events:none!important;', 43994 '}', 43995 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 43996 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 43997 'background:#d70008!important;', 43998 '}', 43999 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 44000 'background:#000!important;', 44001 '}', 44002 '@media (max-width:767px){', 44003 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 44004 'top:42px!important;', 44005 'left:6px!important;', 44006 'max-width:calc(100% - 12px)!important;', 44007 'padding:6px 8px!important;', 44008 'font-size:10px!important;', 44009 '}', 44010 '}' 44011 ].join(''); 44012 44013 (document.head || document.documentElement).appendChild(style); 44014 } 44015 44016 function normalizeProductId(value) { 44017 var id = String(value == null ? '' : value).trim(); 44018 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 44019 } 44020 44021 function classifyRelatedCategories(relatedCategories) { 44022 var found = { 44023 '292': false, 44024 '294': false, 44025 '296': false, 44026 '298': false 44027 }; 44028 44029 function inspect(value, depth) { 44030 var index; 44031 var normalized; 44032 44033 if (value == null || depth > 8) { 44034 return; 44035 } 44036 44037 if (Array.isArray(value)) { 44038 for (index = 0; index < value.length; index += 1) { 44039 inspect(value[index], depth + 1); 44040 } 44041 return; 44042 } 44043 44044 if (typeof value === 'object') { 44045 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 44046 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 44047 inspect(value.id, depth + 1); 44048 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 44049 inspect(value.category_id, depth + 1); 44050 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 44051 inspect(value.Category, depth + 1); 44052 } 44053 return; 44054 } 44055 44056 if (typeof value !== 'string' && typeof value !== 'number') { 44057 return; 44058 } 44059 normalized = normalizeProductId(value); 44060 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 44061 found[normalized] = true; 44062 } 44063 } 44064 44065 inspect(relatedCategories, 0); 44066 44067 if (found['298']) { 44068 return rules['298']; 44069 } 44070 if (found['296']) { 44071 return rules['296']; 44072 } 44073 if (found['294']) { 44074 return rules['294']; 44075 } 44076 44077 // 292 e qualquer classificacao desconhecida ficam sem tarja. 44078 return null; 44079 } 44080 44081 function ruleFromPayload(payload, productId) { 44082 var product = payload && payload.Product; 44083 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 44084 return null; 44085 } 44086 return classifyRelatedCategories(product && product.related_categories); 44087 } 44088 44089 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 44090 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 44091 function attachTrayAjaxCache() { 44092 var jq = window.jQuery; 44093 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 44094 return; 44095 } 44096
44097 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 44098 var url; 44099 var match; 44100 var productId; 44101 var payload; 44102 try { 44103 url = new URL(settings.url, window.location.href); 44104 if (url.origin !== window.location.origin) { 44105 return; 44106 } 44107 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 44108 if (!match) { 44109 return; 44110 } 44111 productId = normalizeProductId(match[1]); 44112 if (!cache.has(productId) && !pending.has(productId)) { 44113 payload = data || xhr.responseJSON; 44114 if (typeof payload === 'string') { 44115 payload = JSON.parse(payload); 44116 } 44117 if (!payload || !payload.Product || 44118 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 44119 return; 44120 } 44121 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 44122 return; 44123 } 44124 cache.set(productId, ruleFromPayload(payload, productId)); 44125 } 44126 } catch (error) { 44127 // Respostas de outras integracoes nao interferem nas tarjas. 44128 } 44129 }); 44130 44131 trayAjaxHooked = true; 44132 document.removeEventListener('load', onTrayScriptLoad, true); 44133 } 44134 44135 function onTrayScriptLoad(event) { 44136 if (event.target && event.target.tagName === 'SCRIPT') { 44137 attachTrayAjaxCache(); 44138 } 44139 } 44140 44141 function requestRule(productId) { 44142 var controller = null; 44143 var timeoutId = null; 44144 var options = { 44145 credentials: 'same-origin', 44146 headers: { 44147 'Accept': 'application/json' 44148 } 44149 }; 44150 var request; 44151 44152 if (typeof window.fetch !== 'function') { 44153 return Promise.resolve(null); 44154 } 44155 44156 if (typeof window.AbortController === 'function') { 44157 controller = new window.AbortController(); 44158 options.signal = controller.signal; 44159 timeoutId = window.setTimeout(function () { 44160 controller.abort(); 44161 }, REQUEST_TIMEOUT_MS); 44162 } 44163 44164 try { 44165 request = window.fetch( 44166 '/web_api/products/' + encodeURIComponent(productId), 44167 options 44168 ); 44169 } catch (error) { 44170 if (timeoutId !== null) { 44171 window.clearTimeout(timeoutId); 44172 } 44173 return Promise.resolve(null); 44174 } 44175 44176 return request.then(function (response) { 44177 if (!response.ok) { 44178 throw new Error('HTTP ' + response.status); 44179 } 44180 return response.json(); 44181 }).then(function (payload) { 44182 return ruleFromPayload(payload, productId); 44183 }).then(function (rule) { 44184 if (timeoutId !== null) { 44185 window.clearTimeout(timeoutId); 44186 } 44187 return rule; 44188 }, function () { 44189 if (timeoutId !== null) { 44190 window.clearTimeout(timeoutId); 44191 } 44192 44193 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 44194 return null; 44195 }); 44196 } 44197 44198 function finishJob(job, rule) { 44199 cache.set(job.productId, rule); 44200 pending.delete(job.productId); 44201 activeRequests -= 1; 44202 job.resolve(rule); 44203 pumpQueue(); 44204 } 44205 44206 function pumpQueue() { 44207 var job; 44208 44209 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 44210 job = queue.shift(); 44211 activeRequests += 1; 44212 44213 (function (currentJob) { 44214 requestRule(currentJob.productId).then(function (rule) { 44215 finishJob(currentJob, rule); 44216 }, function () { 44217 finishJob(currentJob, null); 44218 }); 44219 }(job)); 44220 } 44221 } 44222 44223 function getRule(productId) { 44224 var resolver; 44225 var promise; 44226 44227 if (cache.has(productId)) { 44228 return Promise.resolve(cache.get(productId)); 44229 } 44230 44231 if (pending.has(productId)) { 44232 return pending.get(productId); 44233 } 44234 44235 promise = new Promise(function (resolve) { 44236 resolver = resolve; 44237 }); 44238 44239 pending.set(productId, promise); 44240 queue.push({ 44241 productId: productId, 44242 resolve: resolver 44243 }); 44244 pumpQueue(); 44245 44246 return promise; 44247 } 44248 44249 function findBadge(card) { 44250 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 44251 } 44252 44253 function clearBadge(card) { 44254 var badge = findBadge(card); 44255 var image = card.querySelector('.product-header > .w-100 > .image'); 44256 44257 if (badge && badge.parentNode) { 44258 badge.parentNode.removeChild(badge); 44259 } 44260 44261 if (image) { 44262 image.classList.remove(HOST_CLASS); 44263 } 44264 44265 card.removeAttribute('data-farmacam-prescription-level'); 44266 } 44267 44268 function applyBadge(card, productId, rule) { 44269 var image; 44270 var badge; 44271 44272 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 44273 return false;
44274 } 44275 44276 clearBadge(card); 44277 44278 if (!rule) { 44279 return true; 44280 } 44281 44282 image = card.querySelector('.product-header > .w-100 > .image'); 44283 if (!image) { 44284 return false; 44285 } 44286 44287 badge = document.createElement('span'); 44288 badge.className = BADGE_CLASS; 44289 badge.setAttribute('data-farmacam-generated', 'true'); 44290 badge.setAttribute('data-farmacam-prescription-level', rule.level); 44291 badge.setAttribute('role', 'note'); 44292 badge.textContent = rule.text; 44293 44294 image.classList.add(HOST_CLASS); 44295 image.insertBefore(badge, image.firstChild); 44296 card.setAttribute('data-farmacam-prescription-level', rule.level); 44297 44298 return true; 44299 } 44300 44301 function processCard(card) { 44302 var productId; 44303 var previousState; 44304 var currentState; 44305 44306 if (!card || card.nodeType !== 1) { 44307 return; 44308 } 44309 44310 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 44311 return; 44312 } 44313 44314 productId = normalizeProductId(card.getAttribute('data-id')); 44315 previousState = cardStates.get(card); 44316 44317 if (!productId) { 44318 clearBadge(card); 44319 cardStates.delete(card); 44320 return; 44321 } 44322 44323 if ( 44324 previousState && 44325 previousState.productId === productId && 44326 previousState.status === 'loading' 44327 ) { 44328 return; 44329 } 44330 44331 if ( 44332 previousState && 44333 previousState.productId === productId && 44334 previousState.status === 'processed' 44335 ) { 44336 if (!previousState.rule || findBadge(card)) { 44337 return; 44338 } 44339 } 44340 44341 if (!previousState || previousState.productId !== productId) { 44342 clearBadge(card); 44343 } 44344 44345 currentState = { 44346 productId: productId, 44347 status: 'loading', 44348 rule: null 44349 }; 44350 cardStates.set(card, currentState); 44351 44352 getRule(productId).then(function (rule) { 44353 var applied; 44354 44355 if ( 44356 cardStates.get(card) !== currentState || 44357 normalizeProductId(card.getAttribute('data-id')) !== productId 44358 ) { 44359 return; 44360 } 44361 44362 applied = applyBadge(card, productId, rule); 44363 currentState.rule = rule; 44364 currentState.status = applied ? 'processed' : 'waiting-image'; 44365 }); 44366 } 44367 44368 function scan(root) { 44369 var cards; 44370 var index; 44371 44372 if (!root) { 44373 return; 44374 } 44375 44376 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 44377 processCard(root); 44378 } 44379 44380 if (!root.querySelectorAll) { 44381 return; 44382 } 44383 44384 cards = root.querySelectorAll(CARD_SELECTOR); 44385 for (index = 0; index < cards.length; index += 1) { 44386 processCard(cards[index]); 44387 } 44388 } 44389 44390 function startObserver() { 44391 var observer; 44392 44393 if (!window.MutationObserver || !document.documentElement) { 44394 return; 44395 } 44396 44397 observer = new MutationObserver(function (mutations) { 44398 var mutationIndex; 44399 var nodeIndex; 44400 var mutation; 44401 var node; 44402 var ownerCard; 44403 44404 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 44405 mutation = mutations[mutationIndex]; 44406 44407 if (mutation.type === 'attributes') { 44408 processCard(mutation.target); 44409 continue; 44410 } 44411 44412 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 44413 node = mutation.addedNodes[nodeIndex]; 44414 if (node.nodeType !== 1) { 44415 continue; 44416 } 44417 44418 scan(node); 44419 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 44420 if (ownerCard) { 44421 processCard(ownerCard); 44422 } 44423 } 44424 } 44425 }); 44426 44427 observer.observe(document.documentElement, { 44428 childList: true, 44429 subtree: true, 44430 attributes: true, 44431 attributeFilter: ['data-id'] 44432 }); 44433 44434 window[GLOBAL_KEY].observer = observer; 44435 } 44436 44437 window[GLOBAL_KEY] = { 44438 version: '1.1.0', 44439 cache: cache, 44440 pending: pending, 44441 cardStates: cardStates, 44442 scan: scan, 44443 processCard: processCard, 44444 observer: null 44445 }; 44446 44447 document.addEventListener('load', onTrayScriptLoad, true); 44448 attachTrayAjaxCache(); 44449 injectStyles(); 44450 scan(document); 44451 startObserver(); 44452 44453 if (document.readyState === 'loading') { 44454 document.addEventListener('DOMContentLoaded', function () { 44455 attachTrayAjaxCache(); 44456 scan(document); 44457 }); 44458 } 44459}(window, document)); 44460</script>
44460 44461 </div> 44462 <div 44463 class="swiper-slide fixWidthBoxProduct item"> 44464 44465 44466 44467 44468<div class="product animate open_cart" 44469 data-id="125235739" 44470 data-farmacam-related-categories="," 44471 data-ga4-id="125235739" 44472 data-ga4-name="Dippia" 44473 data-ga4-price="59.00" 44474 data-ga4-brand="Farmacam" 44475 data-ga4-category="Tipo de Produto;Manipulados;" 44476 data-ga4-promotion="50"> 44477 44478 <div class="product-header"> 44479 44480 <div class="w-100"> 44481 44482 44483 44484 44485 44486 44487 44488 44489 <div class="product-tags-circle product-tags-circle-right"> 44490 44491 <div class="tag-circle discount"> 44492 <span> 44493 15% OFF 44494 </span> 44495 </div> 44496 44497 44498 </div> 44499 44500 <div class="product-tags " data-tags-count="0"> 44501 44502 44503 44504 44505 <div class="tag extra fix-Selo"> 44506 <img width="119" height="22" alt="Selo" src="https://images.tcdn.com.br/img/img_prod/1063102/1764006510_oportunidade.png" fetchpriority='high' /> 44507 </div> 44508 44509 </div> 44510 44511 44512 44513 <div class="image "> 44514 44515 <a title="Dippia" href="https://www.farmacam.com.br/dippia" class="space-image"> 44516 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/dippia_125235739_1_195c8b7aff4757875a2afef77a388ebd.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/dippia_125235739_1_195c8b7aff4757875a2afef77a388ebd.png" alt="Dippia"> 44517 </a> 44518 44519 </div> 44520 44521 44522 44523 44524 44525 </div> 44526 44527 </div> 44528 44529 <div class="product-body"> 44530 44531 <a title="Dippia" class="product-info" href="https://www.farmacam.com.br/dippia"> 44532 44533 <div class="product-info-dados"> 44534 44535 44536 44537 <div class="listagem-produtos-timer-promocao" data-inicial="2026-08-05" data-final="2026-10-22"></div> 44538 44539 44540 44541 <div class="product-name"> 44542 Dippia 44543 </div> 44544 44545 44546 44547 <div class="product-price"> 44548 44549 44550 44551 <div class="compre-economize"> 44552 Economize: R$ 9,00 44553 </div> 44554 44555 44556 <span class="product-has-variants text-center"> 44557 A partir de 44558 </span> 44559 44560<div class="price display-cash"> 44561 44562 <span class="old-price"> 44563 R$ 59,00 44564 </span> 44565 44566 <span class="current-price "> 44567 R$ 50,00 44568 44569 </span> 44570 44571 <span class="product-installments"> 44572 44573 </span> 44574 44575</div> 44576 </div> 44577 44578 </div> 44579 44580 </a> 44581 44582 </div> 44583 44584 44585 <div class="product-footer"> 44586 44587 44588 <div class="w-100"> 44589 44590 44591 44592<div class="product-rating-catalog"> 44593 44594 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 44595 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 44596 </svg> 44597 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 44598 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 44599 </svg> 44600 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 44601 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 44602 </svg> 44603 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 44604 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 44605 </svg> 44606 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 44607 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 44608 </svg> 44609 44610 44611 <a title="Ver avaliações de Dippia" href="https://www.farmacam.com.br/dippia#comments" class="total"> 44612 Seja o primeiro 44613 </a> 44614 44615 </div> 44616 44617 44618 44619 <div class="config-variacoes-compra"> 44620 44621 44622 44623 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125235739"> 44624 <input type="hidden" name="product_id" value="125235739"> 44625 <input type="hidden" name="without_stock_sale" value=""> 44626 44627 <input type="hidden" name="variacao" id="selectedVariant" value=""> 44628 <input type="hidden" name="estoque" value=""> 44629 44630 44631 44632 <ul class="paleta-cores"> 44633 44634 44635 44636 44637 44638 44639 44640 44641 44642 44643 44644 44645 44646 44647 44648 44649 44650 44651 44652 44653 44654 44655 44656 44657 44658 44659 44660 44661 44662 44663 44664 44665 44666 44667 44668 44669 44670 44671 44672 44673 44674 44675 44676 44677 44678 44679 44680 44681 44682 44683 44684 44685 44686 44687 44688 44689 44690 44691 44692 44693 44694 44695 44696 44697 44698 44699 44700 44701 44702 44703 44704 44705 44706 44707 44708 44709 44710 44711 44712 44713 44714 44715 44716 44717 44718 44719 44720 44721 44722 44723 44724 44725 44726 44727 44728 44729 44730 44731 44732 44733 44734 44735 44736 44737 44738 44739 44740 44741 44742 44743 44744 44745 44746 44747 44748 44749 44750 44751 44752 44753 44754 44755 44756 44757 44758 44759 44760 44761 44762 44763 44764 44765 44766 44767 44768 44769 44770 44771 44772 44773 44774 44775 44776 44777 44778 44779 44780 44781 44782 44783 44784 44785 44786 44787 44788 44789 44790 44791 44792 44793 44794 44795 44796 44797 44798 44799 44800 44801 44802 44803 44804 44805 44806 44807 44808 44809 44810 44811 44812 44813 44814 44815 44816 44817 44818 44819 44820 44821 44822 44823 44824 44825 44826 44827 44828 44829 44830 44831 44832 44833 44834 44835 44836 44837 44838 44839 44840 44841 44842 44843 44844 44845 44846 44847 44848 44849 44850 44851 44852 44853 44854 44855 44856 44857 44858 44859 44860 44861 44862 44863 44864 44865 44866 44867 44868 44869 44870 44871 44872 44873 44874 44875 44876 44877 44878 44879 44880 44881 44882 44883 44884 44885 44886 44887 44888 44889 44890 44891 44892 44893
44893 44894 44895 44896 44897 44898 44899 44900 44901 44902 44903 44904 44905 44906 44907 44908 44909 44910 44911 44912 44913 44914 44915 44916 44917 44918 44919 44920 44921 44922 44923 44924 44925 44926 44927 44928 44929 44930 44931 44932 44933 44934 44935 44936 44937 44938 44939 44940 44941 44942 44943 44944 44945 44946 44947 44948 44949 44950 44951 44952 44953 44954 44955 44956 44957 44958 44959 44960 44961 44962 44963 44964 44965 44966 44967 44968 44969 44970 44971 44972 44973 44974 44975 44976 44977 44978 44979 44980 44981 44982 44983 44984 44985 44986 44987 44988 44989 44990 44991 44992 44993 44994 44995 44996 44997 44998 44999 45000 45001 45002 45003 45004 45005 45006 45007 45008 45009 45010 45011 45012 45013 45014 45015 45016 45017 45018 45019 45020 45021 45022 45023 45024 45025 45026 45027 45028 45029 45030 45031 45032 45033 45034 45035 45036 45037 45038 45039 45040 45041 45042 45043 45044 45045 45046 45047 45048 45049 45050 45051 45052 45053 45054 45055 45056 45057 45058 45059 45060 45061 45062 45063 45064 45065 45066 45067 45068 45069 45070 45071 45072 45073 45074 45075 45076 45077 45078 45079 45080 45081 45082 45083 45084 45085 45086 45087 45088 45089 45090 45091 45092 45093 45094 45095 45096 45097 45098 45099 45100 45101 45102 45103 45104 45105 45106 45107 45108 45109 45110 45111 45112 45113 45114 45115 45116 45117 45118 45119 45120 45121 45122 45123 45124 45125 45126 45127 45128 45129 45130 45131 45132 45133 45134 45135 45136 45137 45138 45139 45140 45141 45142 45143 45144 45145 45146 45147 45148 45149 45150 45151 45152 45153 </ul> 45154 <!-- Fim Paleta de Cores --> 45155 45156 45157 45158 45159 45160 45161 45162 45163 45164 45165 45166 45167 45168 45169 45170 45171 45172 45173 45174 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 45175 <option disabled="disabled" value=""> 45176 Selecione 45177 </option> 45178 45179 45180 <option value="30604" produto="125235739" estoque="10000">250 mg - 30 doses</option> 45181 45182 45183 45184 45185 <option value="30606" produto="125235739" estoque="10000">250 mg - 60 doses</option> 45186 45187 45188 45189 45190 <option value="5489" produto="125235739" estoque="10000">500 mg - 30 doses</option> 45191 45192 45193 45194 45195 <option value="5491" produto="125235739" estoque="10000">500 mg - 60 doses</option> 45196 45197 45198 </select> 45199 45200 45201 <select class="select-cor" style="display: none;" title="Campo Cor"> 45202
45202 </select> 45203 45204 45205 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 45206 <div class="alerta-estoque"></div> 45207 <div class="alerta-adicionado"></div> 45208 45209 <div class="acao-compra"> 45210 45211 <div class="quantidade-box"> 45212 <div class="quantidade-box-input"> 45213 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
45213stoque="40000" /> 45214 </div> 45215 <div class="quantidade-box-controles"> 45216 <div class="quantidade-box-controles-itens" data-item="mais"> 45217 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 45218 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 45219 </svg> 45220 </div> 45221 <div class="quantidade-box-controles-itens" data-item="menus"> 45222 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 45223 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 45224 </svg> 45225 </div> 45226 </div> 45227 </div> 45228 45229 45230 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125235739"> 45231 45232 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 45233 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 45234 45235 45236 45237 45238 45239 45240 <!-- Cesta de Compras --> 45241 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 45242 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 45243 </svg> 45244 45245 45246 45247 Comprar 45248 45249 45250 </button> 45251 <!-- </form> --> 45252 45253 </div> 45254 45255</div> 45256 45257 45258 </div> 45259 45260 </div> 45261 45262 45263</div> 45264
45265<script> 45266(function (window, document) { 45267 'use strict'; 45268 45269 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 45270 45271 if (window[GLOBAL_KEY]) { 45272 return; 45273 } 45274 45275 if (!window.Map || !window.WeakMap || !window.Promise) { 45276 return; 45277 } 45278 45279 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 45280 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 45281 '#vitrine-personalizada .product[data-id]'; 45282 var BADGE_CLASS = 'farmacam-prescription-badge'; 45283 var HOST_CLASS = 'farmacam-prescription-badge-host'; 45284 var MAX_CONCURRENT_REQUESTS = 6; 45285 var REQUEST_TIMEOUT_MS = 12000; 45286 45287 var rules = { 45288 '294': { 45289 level: '294', 45290 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 45291 }, 45292 '296': { 45293 level: '296', 45294 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 45295 }, 45296 '298': { 45297 level: '298', 45298 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 45299 } 45300 }; 45301 45302 var cache = new Map(); 45303 var pending = new Map(); 45304 var cardStates = new WeakMap(); 45305 var queue = []; 45306 var activeRequests = 0; 45307 var trayAjaxHooked = false; 45308 45309 function injectStyles() { 45310 if (document.getElementById('farmacam-prescription-cards-style')) { 45311 return; 45312 } 45313 45314 var style = document.createElement('style'); 45315 style.id = 'farmacam-prescription-cards-style'; 45316 style.textContent = [ 45317 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 45318 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 45319 'position:absolute!important;', 45320 'top:52px!important;', 45321 'left:10px!important;', 45322 'z-index:999!important;', 45323 'display:block!important;', 45324 'max-width:calc(100% - 20px)!important;', 45325 'box-sizing:border-box!important;', 45326 'padding:8px 12px!important;', 45327 'color:#fff!important;', 45328 'font-family:inherit!important;', 45329 'font-size:13px!important;', 45330 'font-weight:900!important;', 45331 'line-height:1.15!important;', 45332 'text-align:center!important;', 45333 'text-transform:uppercase!important;', 45334 'letter-spacing:.3px!important;', 45335 'white-space:normal!important;', 45336 'overflow-wrap:break-word!important;', 45337 'border-radius:3px!important;', 45338 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 45339 'pointer-events:none!important;', 45340 '}', 45341 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 45342 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 45343 'background:#d70008!important;', 45344 '}', 45345 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 45346 'background:#000!important;', 45347 '}', 45348 '@media (max-width:767px){', 45349 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 45350 'top:42px!important;', 45351 'left:6px!important;', 45352 'max-width:calc(100% - 12px)!important;', 45353 'padding:6px 8px!important;', 45354 'font-size:10px!important;', 45355 '}', 45356 '}' 45357 ].join(''); 45358 45359 (document.head || document.documentElement).appendChild(style); 45360 } 45361 45362 function normalizeProductId(value) { 45363 var id = String(value == null ? '' : value).trim(); 45364 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 45365 } 45366 45367 function classifyRelatedCategories(relatedCategories) { 45368 var found = { 45369 '292': false, 45370 '294': false, 45371 '296': false, 45372 '298': false 45373 }; 45374 45375 function inspect(value, depth) { 45376 var index; 45377 var normalized; 45378 45379 if (value == null || depth > 8) { 45380 return; 45381 } 45382 45383 if (Array.isArray(value)) { 45384 for (index = 0; index < value.length; index += 1) { 45385 inspect(value[index], depth + 1); 45386 } 45387 return; 45388 } 45389 45390 if (typeof value === 'object') { 45391 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 45392 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 45393 inspect(value.id, depth + 1); 45394 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 45395 inspect(value.category_id, depth + 1); 45396 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 45397 inspect(value.Category, depth + 1); 45398 } 45399 return; 45400 } 45401 45402 if (typeof value !== 'string' && typeof value !== 'number') { 45403 return; 45404 } 45405 normalized = normalizeProductId(value); 45406 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 45407 found[normalized] = true; 45408 } 45409 } 45410 45411 inspect(relatedCategories, 0); 45412 45413 if (found['298']) { 45414 return rules['298']; 45415 } 45416 if (found['296']) { 45417 return rules['296']; 45418 } 45419 if (found['294']) { 45420 return rules['294']; 45421 } 45422 45423 // 292 e qualquer classificacao desconhecida ficam sem tarja. 45424 return null; 45425 } 45426 45427 function ruleFromPayload(payload, productId) { 45428 var product = payload && payload.Product; 45429 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 45430 return null; 45431 } 45432 return classifyRelatedCategories(product && product.related_categories); 45433 } 45434 45435 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 45436 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 45437 function attachTrayAjaxCache() { 45438 var jq = window.jQuery; 45439 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 45440 return; 45441 } 45442
45443 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 45444 var url; 45445 var match; 45446 var productId; 45447 var payload; 45448 try { 45449 url = new URL(settings.url, window.location.href); 45450 if (url.origin !== window.location.origin) { 45451 return; 45452 } 45453 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 45454 if (!match) { 45455 return; 45456 } 45457 productId = normalizeProductId(match[1]); 45458 if (!cache.has(productId) && !pending.has(productId)) { 45459 payload = data || xhr.responseJSON; 45460 if (typeof payload === 'string') { 45461 payload = JSON.parse(payload); 45462 } 45463 if (!payload || !payload.Product || 45464 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 45465 return; 45466 } 45467 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 45468 return; 45469 } 45470 cache.set(productId, ruleFromPayload(payload, productId)); 45471 } 45472 } catch (error) { 45473 // Respostas de outras integracoes nao interferem nas tarjas. 45474 } 45475 }); 45476 45477 trayAjaxHooked = true; 45478 document.removeEventListener('load', onTrayScriptLoad, true); 45479 } 45480 45481 function onTrayScriptLoad(event) { 45482 if (event.target && event.target.tagName === 'SCRIPT') { 45483 attachTrayAjaxCache(); 45484 } 45485 } 45486 45487 function requestRule(productId) { 45488 var controller = null; 45489 var timeoutId = null; 45490 var options = { 45491 credentials: 'same-origin', 45492 headers: { 45493 'Accept': 'application/json' 45494 } 45495 }; 45496 var request; 45497 45498 if (typeof window.fetch !== 'function') { 45499 return Promise.resolve(null); 45500 } 45501 45502 if (typeof window.AbortController === 'function') { 45503 controller = new window.AbortController(); 45504 options.signal = controller.signal; 45505 timeoutId = window.setTimeout(function () { 45506 controller.abort(); 45507 }, REQUEST_TIMEOUT_MS); 45508 } 45509 45510 try { 45511 request = window.fetch( 45512 '/web_api/products/' + encodeURIComponent(productId), 45513 options 45514 ); 45515 } catch (error) { 45516 if (timeoutId !== null) { 45517 window.clearTimeout(timeoutId); 45518 } 45519 return Promise.resolve(null); 45520 } 45521 45522 return request.then(function (response) { 45523 if (!response.ok) { 45524 throw new Error('HTTP ' + response.status); 45525 } 45526 return response.json(); 45527 }).then(function (payload) { 45528 return ruleFromPayload(payload, productId); 45529 }).then(function (rule) { 45530 if (timeoutId !== null) { 45531 window.clearTimeout(timeoutId); 45532 } 45533 return rule; 45534 }, function () { 45535 if (timeoutId !== null) { 45536 window.clearTimeout(timeoutId); 45537 } 45538 45539 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 45540 return null; 45541 }); 45542 } 45543 45544 function finishJob(job, rule) { 45545 cache.set(job.productId, rule); 45546 pending.delete(job.productId); 45547 activeRequests -= 1; 45548 job.resolve(rule); 45549 pumpQueue(); 45550 } 45551 45552 function pumpQueue() { 45553 var job; 45554 45555 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 45556 job = queue.shift(); 45557 activeRequests += 1; 45558 45559 (function (currentJob) { 45560 requestRule(currentJob.productId).then(function (rule) { 45561 finishJob(currentJob, rule); 45562 }, function () { 45563 finishJob(currentJob, null); 45564 }); 45565 }(job)); 45566 } 45567 } 45568 45569 function getRule(productId) { 45570 var resolver; 45571 var promise; 45572 45573 if (cache.has(productId)) { 45574 return Promise.resolve(cache.get(productId)); 45575 } 45576 45577 if (pending.has(productId)) { 45578 return pending.get(productId); 45579 } 45580 45581 promise = new Promise(function (resolve) { 45582 resolver = resolve; 45583 }); 45584 45585 pending.set(productId, promise); 45586 queue.push({ 45587 productId: productId, 45588 resolve: resolver 45589 }); 45590 pumpQueue(); 45591 45592 return promise; 45593 } 45594 45595 function findBadge(card) { 45596 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 45597 } 45598 45599 function clearBadge(card) { 45600 var badge = findBadge(card); 45601 var image = card.querySelector('.product-header > .w-100 > .image'); 45602 45603 if (badge && badge.parentNode) { 45604 badge.parentNode.removeChild(badge); 45605 } 45606 45607 if (image) { 45608 image.classList.remove(HOST_CLASS); 45609 } 45610 45611 card.removeAttribute('data-farmacam-prescription-level'); 45612 } 45613 45614 function applyBadge(card, productId, rule) { 45615 var image; 45616 var badge; 45617 45618 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 45619 return false;
45620 } 45621 45622 clearBadge(card); 45623 45624 if (!rule) { 45625 return true; 45626 } 45627 45628 image = card.querySelector('.product-header > .w-100 > .image'); 45629 if (!image) { 45630 return false; 45631 } 45632 45633 badge = document.createElement('span'); 45634 badge.className = BADGE_CLASS; 45635 badge.setAttribute('data-farmacam-generated', 'true'); 45636 badge.setAttribute('data-farmacam-prescription-level', rule.level); 45637 badge.setAttribute('role', 'note'); 45638 badge.textContent = rule.text; 45639 45640 image.classList.add(HOST_CLASS); 45641 image.insertBefore(badge, image.firstChild); 45642 card.setAttribute('data-farmacam-prescription-level', rule.level); 45643 45644 return true; 45645 } 45646 45647 function processCard(card) { 45648 var productId; 45649 var previousState; 45650 var currentState; 45651 45652 if (!card || card.nodeType !== 1) { 45653 return; 45654 } 45655 45656 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 45657 return; 45658 } 45659 45660 productId = normalizeProductId(card.getAttribute('data-id')); 45661 previousState = cardStates.get(card); 45662 45663 if (!productId) { 45664 clearBadge(card); 45665 cardStates.delete(card); 45666 return; 45667 } 45668 45669 if ( 45670 previousState && 45671 previousState.productId === productId && 45672 previousState.status === 'loading' 45673 ) { 45674 return; 45675 } 45676 45677 if ( 45678 previousState && 45679 previousState.productId === productId && 45680 previousState.status === 'processed' 45681 ) { 45682 if (!previousState.rule || findBadge(card)) { 45683 return; 45684 } 45685 } 45686 45687 if (!previousState || previousState.productId !== productId) { 45688 clearBadge(card); 45689 } 45690 45691 currentState = { 45692 productId: productId, 45693 status: 'loading', 45694 rule: null 45695 }; 45696 cardStates.set(card, currentState); 45697 45698 getRule(productId).then(function (rule) { 45699 var applied; 45700 45701 if ( 45702 cardStates.get(card) !== currentState || 45703 normalizeProductId(card.getAttribute('data-id')) !== productId 45704 ) { 45705 return; 45706 } 45707 45708 applied = applyBadge(card, productId, rule); 45709 currentState.rule = rule; 45710 currentState.status = applied ? 'processed' : 'waiting-image'; 45711 }); 45712 } 45713 45714 function scan(root) { 45715 var cards; 45716 var index; 45717 45718 if (!root) { 45719 return; 45720 } 45721 45722 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 45723 processCard(root); 45724 } 45725 45726 if (!root.querySelectorAll) { 45727 return; 45728 } 45729 45730 cards = root.querySelectorAll(CARD_SELECTOR); 45731 for (index = 0; index < cards.length; index += 1) { 45732 processCard(cards[index]); 45733 } 45734 } 45735 45736 function startObserver() { 45737 var observer; 45738 45739 if (!window.MutationObserver || !document.documentElement) { 45740 return; 45741 } 45742 45743 observer = new MutationObserver(function (mutations) { 45744 var mutationIndex; 45745 var nodeIndex; 45746 var mutation; 45747 var node; 45748 var ownerCard; 45749 45750 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 45751 mutation = mutations[mutationIndex]; 45752 45753 if (mutation.type === 'attributes') { 45754 processCard(mutation.target); 45755 continue; 45756 } 45757 45758 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 45759 node = mutation.addedNodes[nodeIndex]; 45760 if (node.nodeType !== 1) { 45761 continue; 45762 } 45763 45764 scan(node); 45765 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 45766 if (ownerCard) { 45767 processCard(ownerCard); 45768 } 45769 } 45770 } 45771 }); 45772 45773 observer.observe(document.documentElement, { 45774 childList: true, 45775 subtree: true, 45776 attributes: true, 45777 attributeFilter: ['data-id'] 45778 }); 45779 45780 window[GLOBAL_KEY].observer = observer; 45781 } 45782 45783 window[GLOBAL_KEY] = { 45784 version: '1.1.0', 45785 cache: cache, 45786 pending: pending, 45787 cardStates: cardStates, 45788 scan: scan, 45789 processCard: processCard, 45790 observer: null 45791 }; 45792 45793 document.addEventListener('load', onTrayScriptLoad, true); 45794 attachTrayAjaxCache(); 45795 injectStyles(); 45796 scan(document); 45797 startObserver(); 45798 45799 if (document.readyState === 'loading') { 45800 document.addEventListener('DOMContentLoaded', function () { 45801 attachTrayAjaxCache(); 45802 scan(document); 45803 }); 45804 } 45805}(window, document)); 45806</script>
45806 45807 </div> 45808 <div 45809 class="swiper-slide fixWidthBoxProduct item"> 45810 45811 45812 45813 45814<div class="product animate open_cart" 45815 data-id="125241754" 45816 data-farmacam-related-categories="," 45817 data-ga4-id="125241754" 45818 data-ga4-name="Beta Alanina 225g" 45819 data-ga4-price="44.00" 45820 data-ga4-brand="Farmacam" 45821 data-ga4-category="Tipo de Produto;Manipulados;" 45822 data-ga4-promotion="31"> 45823 45824 <div class="product-header"> 45825 45826 <div class="w-100"> 45827 45828 45829 45830 45831 45832 45833 45834 45835 <div class="product-tags-circle product-tags-circle-right"> 45836 45837 <div class="tag-circle discount"> 45838 <span> 45839 30% OFF 45840 </span> 45841 </div> 45842 45843 45844 </div> 45845 45846 <div class="product-tags " data-tags-count="0"> 45847 45848 45849 45850 45851 <div class="tag extra fix-Selo"> 45852 <img width="119" height="22" alt="Selo" src="https://images.tcdn.com.br/img/img_prod/1063102/1764006510_oportunidade.png" fetchpriority='high' /> 45853 </div> 45854 45855 </div> 45856 45857 45858 45859 <div class="image "> 45860 45861 <a title="Beta Alanina 225g" href="https://www.farmacam.com.br/beta-alanina-225g" class="space-image"> 45862 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/beta_alanina_225g_125241754_1_bbcc9d51e5b9bb8004e352959ff2d6c4.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/beta_alanina_225g_125241754_1_bbcc9d51e5b9bb8004e352959ff2d6c4.png" alt="Beta Alanina 225g"> 45863 </a> 45864 45865 </div> 45866 45867 45868 45869 45870 45871 </div> 45872 45873 </div> 45874 45875 <div class="product-body"> 45876 45877 <a title="Beta Alanina 225g" class="product-info" href="https://www.farmacam.com.br/beta-alanina-225g"> 45878 45879 <div class="product-info-dados"> 45880 45881 45882 45883 <div class="listagem-produtos-timer-promocao" data-inicial="2026-09-14" data-final="2026-11-25"></div> 45884 45885 45886 45887 <div class="product-name"> 45888 Beta Alanina 225g 45889 </div> 45890 45891 45892 45893 <div class="product-price"> 45894 45895 45896 45897 <div class="compre-economize"> 45898 Economize: R$ 13,00 45899 </div> 45900 45901 45902 45903<div class="price display-cash"> 45904 45905 <span class="old-price"> 45906 R$ 44,00 45907 </span> 45908 45909 <span class="current-price "> 45910 R$ 31,00 45911 45912 </span> 45913 45914 <span class="product-installments"> 45915 45916 </span> 45917 45918</div> 45919 </div> 45920 45921 </div> 45922 45923 </a> 45924 45925 </div> 45926 45927 45928 <div class="product-footer"> 45929 45930 45931 <div class="w-100"> 45932 45933 45934 45935<div class="product-rating-catalog"> 45936 45937 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 45938 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 45939 </svg> 45940 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 45941 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 45942 </svg> 45943 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 45944 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 45945 </svg> 45946 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 45947 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 45948 </svg> 45949 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 45950 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 45951 </svg> 45952 45953 45954 <a title="Ver avaliações de Beta Alanina 225g" href="https://www.farmacam.com.br/beta-alanina-225g#comments" class="total"> 45955 Seja o primeiro 45956 </a> 45957 45958 </div> 45959 45960 45961 45962 <div class="config-variacoes-compra"> 45963 45964 45965 45966 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125241754"> 45967 <input type="hidden" name="product_id" value="125241754"> 45968 <input type="hidden" name="without_stock_sale" value=""> 45969 45970 <input type="hidden" name="estoque" value="9996"> 45971 45972 45973 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 45974 <div class="alerta-estoque"></div> 45975 <div class="alerta-adicionado"></div> 45976 45977 <div class="acao-compra"> 45978 45979 <div class="quantidade-box"> 45980 <div class="quantidade-box-input"> 45981 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
45981stoque="9996" /> 45982 </div> 45983 <div class="quantidade-box-controles"> 45984 <div class="quantidade-box-controles-itens" data-item="mais"> 45985 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 45986 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 45987 </svg> 45988 </div> 45989 <div class="quantidade-box-controles-itens" data-item="menus"> 45990 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 45991 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 45992 </svg> 45993 </div> 45994 </div> 45995 </div> 45996 45997 45998 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125241754"> 45999 46000 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="" style="width: 100%;"> --> 46001 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 46002 46003 46004 46005 46006 46007 46008 <!-- Cesta de Compras --> 46009 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 46010 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 46011 </svg> 46012 46013 46014 46015 Comprar 46016 46017 46018 </button> 46019 <!-- </form> --> 46020 46021 </div> 46022 46023</div> 46024 46025 46026 </div> 46027 46028 </div> 46029 46030 46031</div> 46032
46033<script> 46034(function (window, document) { 46035 'use strict'; 46036 46037 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 46038 46039 if (window[GLOBAL_KEY]) { 46040 return; 46041 } 46042 46043 if (!window.Map || !window.WeakMap || !window.Promise) { 46044 return; 46045 } 46046 46047 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 46048 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 46049 '#vitrine-personalizada .product[data-id]'; 46050 var BADGE_CLASS = 'farmacam-prescription-badge'; 46051 var HOST_CLASS = 'farmacam-prescription-badge-host'; 46052 var MAX_CONCURRENT_REQUESTS = 6; 46053 var REQUEST_TIMEOUT_MS = 12000; 46054 46055 var rules = { 46056 '294': { 46057 level: '294', 46058 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 46059 }, 46060 '296': { 46061 level: '296', 46062 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 46063 }, 46064 '298': { 46065 level: '298', 46066 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 46067 } 46068 }; 46069 46070 var cache = new Map(); 46071 var pending = new Map(); 46072 var cardStates = new WeakMap(); 46073 var queue = []; 46074 var activeRequests = 0; 46075 var trayAjaxHooked = false; 46076 46077 function injectStyles() { 46078 if (document.getElementById('farmacam-prescription-cards-style')) { 46079 return; 46080 } 46081 46082 var style = document.createElement('style'); 46083 style.id = 'farmacam-prescription-cards-style'; 46084 style.textContent = [ 46085 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 46086 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 46087 'position:absolute!important;', 46088 'top:52px!important;', 46089 'left:10px!important;', 46090 'z-index:999!important;', 46091 'display:block!important;', 46092 'max-width:calc(100% - 20px)!important;', 46093 'box-sizing:border-box!important;', 46094 'padding:8px 12px!important;', 46095 'color:#fff!important;', 46096 'font-family:inherit!important;', 46097 'font-size:13px!important;', 46098 'font-weight:900!important;', 46099 'line-height:1.15!important;', 46100 'text-align:center!important;', 46101 'text-transform:uppercase!important;', 46102 'letter-spacing:.3px!important;', 46103 'white-space:normal!important;', 46104 'overflow-wrap:break-word!important;', 46105 'border-radius:3px!important;', 46106 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 46107 'pointer-events:none!important;', 46108 '}', 46109 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 46110 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 46111 'background:#d70008!important;', 46112 '}', 46113 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 46114 'background:#000!important;', 46115 '}', 46116 '@media (max-width:767px){', 46117 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 46118 'top:42px!important;', 46119 'left:6px!important;', 46120 'max-width:calc(100% - 12px)!important;', 46121 'padding:6px 8px!important;', 46122 'font-size:10px!important;', 46123 '}', 46124 '}' 46125 ].join(''); 46126 46127 (document.head || document.documentElement).appendChild(style); 46128 } 46129 46130 function normalizeProductId(value) { 46131 var id = String(value == null ? '' : value).trim(); 46132 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 46133 } 46134 46135 function classifyRelatedCategories(relatedCategories) { 46136 var found = { 46137 '292': false, 46138 '294': false, 46139 '296': false, 46140 '298': false 46141 }; 46142 46143 function inspect(value, depth) { 46144 var index; 46145 var normalized; 46146 46147 if (value == null || depth > 8) { 46148 return; 46149 } 46150 46151 if (Array.isArray(value)) { 46152 for (index = 0; index < value.length; index += 1) { 46153 inspect(value[index], depth + 1); 46154 } 46155 return; 46156 } 46157 46158 if (typeof value === 'object') { 46159 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 46160 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 46161 inspect(value.id, depth + 1); 46162 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 46163 inspect(value.category_id, depth + 1); 46164 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 46165 inspect(value.Category, depth + 1); 46166 } 46167 return; 46168 } 46169 46170 if (typeof value !== 'string' && typeof value !== 'number') { 46171 return; 46172 } 46173 normalized = normalizeProductId(value); 46174 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 46175 found[normalized] = true; 46176 } 46177 } 46178 46179 inspect(relatedCategories, 0); 46180 46181 if (found['298']) { 46182 return rules['298']; 46183 } 46184 if (found['296']) { 46185 return rules['296']; 46186 } 46187 if (found['294']) { 46188 return rules['294']; 46189 } 46190 46191 // 292 e qualquer classificacao desconhecida ficam sem tarja. 46192 return null; 46193 } 46194 46195 function ruleFromPayload(payload, productId) { 46196 var product = payload && payload.Product; 46197 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 46198 return null; 46199 } 46200 return classifyRelatedCategories(product && product.related_categories); 46201 } 46202 46203 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 46204 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 46205 function attachTrayAjaxCache() { 46206 var jq = window.jQuery; 46207 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 46208 return; 46209 } 46210
46211 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 46212 var url; 46213 var match; 46214 var productId; 46215 var payload; 46216 try { 46217 url = new URL(settings.url, window.location.href); 46218 if (url.origin !== window.location.origin) { 46219 return; 46220 } 46221 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 46222 if (!match) { 46223 return; 46224 } 46225 productId = normalizeProductId(match[1]); 46226 if (!cache.has(productId) && !pending.has(productId)) { 46227 payload = data || xhr.responseJSON; 46228 if (typeof payload === 'string') { 46229 payload = JSON.parse(payload); 46230 } 46231 if (!payload || !payload.Product || 46232 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 46233 return; 46234 } 46235 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 46236 return; 46237 } 46238 cache.set(productId, ruleFromPayload(payload, productId)); 46239 } 46240 } catch (error) { 46241 // Respostas de outras integracoes nao interferem nas tarjas. 46242 } 46243 }); 46244 46245 trayAjaxHooked = true; 46246 document.removeEventListener('load', onTrayScriptLoad, true); 46247 } 46248 46249 function onTrayScriptLoad(event) { 46250 if (event.target && event.target.tagName === 'SCRIPT') { 46251 attachTrayAjaxCache(); 46252 } 46253 } 46254 46255 function requestRule(productId) { 46256 var controller = null; 46257 var timeoutId = null; 46258 var options = { 46259 credentials: 'same-origin', 46260 headers: { 46261 'Accept': 'application/json' 46262 } 46263 }; 46264 var request; 46265 46266 if (typeof window.fetch !== 'function') { 46267 return Promise.resolve(null); 46268 } 46269 46270 if (typeof window.AbortController === 'function') { 46271 controller = new window.AbortController(); 46272 options.signal = controller.signal; 46273 timeoutId = window.setTimeout(function () { 46274 controller.abort(); 46275 }, REQUEST_TIMEOUT_MS); 46276 } 46277 46278 try { 46279 request = window.fetch( 46280 '/web_api/products/' + encodeURIComponent(productId), 46281 options 46282 ); 46283 } catch (error) { 46284 if (timeoutId !== null) { 46285 window.clearTimeout(timeoutId); 46286 } 46287 return Promise.resolve(null); 46288 } 46289 46290 return request.then(function (response) { 46291 if (!response.ok) { 46292 throw new Error('HTTP ' + response.status); 46293 } 46294 return response.json(); 46295 }).then(function (payload) { 46296 return ruleFromPayload(payload, productId); 46297 }).then(function (rule) { 46298 if (timeoutId !== null) { 46299 window.clearTimeout(timeoutId); 46300 } 46301 return rule; 46302 }, function () { 46303 if (timeoutId !== null) { 46304 window.clearTimeout(timeoutId); 46305 } 46306 46307 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 46308 return null; 46309 }); 46310 } 46311 46312 function finishJob(job, rule) { 46313 cache.set(job.productId, rule); 46314 pending.delete(job.productId); 46315 activeRequests -= 1; 46316 job.resolve(rule); 46317 pumpQueue(); 46318 } 46319 46320 function pumpQueue() { 46321 var job; 46322 46323 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 46324 job = queue.shift(); 46325 activeRequests += 1; 46326 46327 (function (currentJob) { 46328 requestRule(currentJob.productId).then(function (rule) { 46329 finishJob(currentJob, rule); 46330 }, function () { 46331 finishJob(currentJob, null); 46332 }); 46333 }(job)); 46334 } 46335 } 46336 46337 function getRule(productId) { 46338 var resolver; 46339 var promise; 46340 46341 if (cache.has(productId)) { 46342 return Promise.resolve(cache.get(productId)); 46343 } 46344 46345 if (pending.has(productId)) { 46346 return pending.get(productId); 46347 } 46348 46349 promise = new Promise(function (resolve) { 46350 resolver = resolve; 46351 }); 46352 46353 pending.set(productId, promise); 46354 queue.push({ 46355 productId: productId, 46356 resolve: resolver 46357 }); 46358 pumpQueue(); 46359 46360 return promise; 46361 } 46362 46363 function findBadge(card) { 46364 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 46365 } 46366 46367 function clearBadge(card) { 46368 var badge = findBadge(card); 46369 var image = card.querySelector('.product-header > .w-100 > .image'); 46370 46371 if (badge && badge.parentNode) { 46372 badge.parentNode.removeChild(badge); 46373 } 46374 46375 if (image) { 46376 image.classList.remove(HOST_CLASS); 46377 } 46378 46379 card.removeAttribute('data-farmacam-prescription-level'); 46380 } 46381 46382 function applyBadge(card, productId, rule) { 46383 var image; 46384 var badge; 46385 46386 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 46387 return false;
46388 } 46389 46390 clearBadge(card); 46391 46392 if (!rule) { 46393 return true; 46394 } 46395 46396 image = card.querySelector('.product-header > .w-100 > .image'); 46397 if (!image) { 46398 return false; 46399 } 46400 46401 badge = document.createElement('span'); 46402 badge.className = BADGE_CLASS; 46403 badge.setAttribute('data-farmacam-generated', 'true'); 46404 badge.setAttribute('data-farmacam-prescription-level', rule.level); 46405 badge.setAttribute('role', 'note'); 46406 badge.textContent = rule.text; 46407 46408 image.classList.add(HOST_CLASS); 46409 image.insertBefore(badge, image.firstChild); 46410 card.setAttribute('data-farmacam-prescription-level', rule.level); 46411 46412 return true; 46413 } 46414 46415 function processCard(card) { 46416 var productId; 46417 var previousState; 46418 var currentState; 46419 46420 if (!card || card.nodeType !== 1) { 46421 return; 46422 } 46423 46424 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 46425 return; 46426 } 46427 46428 productId = normalizeProductId(card.getAttribute('data-id')); 46429 previousState = cardStates.get(card); 46430 46431 if (!productId) { 46432 clearBadge(card); 46433 cardStates.delete(card); 46434 return; 46435 } 46436 46437 if ( 46438 previousState && 46439 previousState.productId === productId && 46440 previousState.status === 'loading' 46441 ) { 46442 return; 46443 } 46444 46445 if ( 46446 previousState && 46447 previousState.productId === productId && 46448 previousState.status === 'processed' 46449 ) { 46450 if (!previousState.rule || findBadge(card)) { 46451 return; 46452 } 46453 } 46454 46455 if (!previousState || previousState.productId !== productId) { 46456 clearBadge(card); 46457 } 46458 46459 currentState = { 46460 productId: productId, 46461 status: 'loading', 46462 rule: null 46463 }; 46464 cardStates.set(card, currentState); 46465 46466 getRule(productId).then(function (rule) { 46467 var applied; 46468 46469 if ( 46470 cardStates.get(card) !== currentState || 46471 normalizeProductId(card.getAttribute('data-id')) !== productId 46472 ) { 46473 return; 46474 } 46475 46476 applied = applyBadge(card, productId, rule); 46477 currentState.rule = rule; 46478 currentState.status = applied ? 'processed' : 'waiting-image'; 46479 }); 46480 } 46481 46482 function scan(root) { 46483 var cards; 46484 var index; 46485 46486 if (!root) { 46487 return; 46488 } 46489 46490 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 46491 processCard(root); 46492 } 46493 46494 if (!root.querySelectorAll) { 46495 return; 46496 } 46497 46498 cards = root.querySelectorAll(CARD_SELECTOR); 46499 for (index = 0; index < cards.length; index += 1) { 46500 processCard(cards[index]); 46501 } 46502 } 46503 46504 function startObserver() { 46505 var observer; 46506 46507 if (!window.MutationObserver || !document.documentElement) { 46508 return; 46509 } 46510 46511 observer = new MutationObserver(function (mutations) { 46512 var mutationIndex; 46513 var nodeIndex; 46514 var mutation; 46515 var node; 46516 var ownerCard; 46517 46518 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 46519 mutation = mutations[mutationIndex]; 46520 46521 if (mutation.type === 'attributes') { 46522 processCard(mutation.target); 46523 continue; 46524 } 46525 46526 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 46527 node = mutation.addedNodes[nodeIndex]; 46528 if (node.nodeType !== 1) { 46529 continue; 46530 } 46531 46532 scan(node); 46533 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 46534 if (ownerCard) { 46535 processCard(ownerCard); 46536 } 46537 } 46538 } 46539 }); 46540 46541 observer.observe(document.documentElement, { 46542 childList: true, 46543 subtree: true, 46544 attributes: true, 46545 attributeFilter: ['data-id'] 46546 }); 46547 46548 window[GLOBAL_KEY].observer = observer; 46549 } 46550 46551 window[GLOBAL_KEY] = { 46552 version: '1.1.0', 46553 cache: cache, 46554 pending: pending, 46555 cardStates: cardStates, 46556 scan: scan, 46557 processCard: processCard, 46558 observer: null 46559 }; 46560 46561 document.addEventListener('load', onTrayScriptLoad, true); 46562 attachTrayAjaxCache(); 46563 injectStyles(); 46564 scan(document); 46565 startObserver(); 46566 46567 if (document.readyState === 'loading') { 46568 document.addEventListener('DOMContentLoaded', function () { 46569 attachTrayAjaxCache(); 46570 scan(document); 46571 }); 46572 } 46573}(window, document)); 46574</script>
46574 46575 </div> 46576 <div 46577 class="swiper-slide fixWidthBoxProduct item"> 46578 46579 46580 46581 46582<div class="product animate open_cart" 46583 data-id="125236663" 46584 data-farmacam-related-categories="," 46585 data-ga4-id="125236663" 46586 data-ga4-name="Homotaurina" 46587 data-ga4-price="51.00" 46588 data-ga4-brand="Farmacam" 46589 data-ga4-category="Tipo de Produto;Manipulados;" 46590 data-ga4-promotion="38"> 46591 46592 <div class="product-header"> 46593 46594 <div class="w-100"> 46595 46596 46597 46598 46599 46600 46601 46602 46603 <div class="product-tags-circle product-tags-circle-right"> 46604 46605 <div class="tag-circle discount"> 46606 <span> 46607 25% OFF 46608 </span> 46609 </div> 46610 46611 46612 </div> 46613 46614 <div class="product-tags " data-tags-count="0"> 46615 46616 46617 46618 46619 <div class="tag extra fix-Selo"> 46620 <img width="119" height="22" alt="Selo" src="https://images.tcdn.com.br/img/img_prod/1063102/1764006510_oportunidade.png" fetchpriority='high' /> 46621 </div> 46622 46623 </div> 46624 46625 46626 46627 <div class="image "> 46628 46629 <a title="Homotaurina" href="https://www.farmacam.com.br/homotaurina" class="space-image"> 46630 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/homotaurina_125236663_1_537e02a59452e19b527f20ceb877737f.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/homotaurina_125236663_1_537e02a59452e19b527f20ceb877737f.png" alt="Homotaurina"> 46631 </a> 46632 46633 </div> 46634 46635 46636 46637 46638 46639 </div> 46640 46641 </div> 46642 46643 <div class="product-body"> 46644 46645 <a title="Homotaurina" class="product-info" href="https://www.farmacam.com.br/homotaurina"> 46646 46647 <div class="product-info-dados"> 46648 46649 46650 46651 <div class="listagem-produtos-timer-promocao" data-inicial="2026-05-15" data-final="2026-12-01"></div> 46652 46653 46654 46655 <div class="product-name"> 46656 Homotaurina 46657 </div> 46658 46659 46660 46661 <div class="product-price"> 46662 46663 46664 46665 <div class="compre-economize"> 46666 Economize: R$ 13,00 46667 </div> 46668 46669 46670 <span class="product-has-variants text-center"> 46671 A partir de 46672 </span> 46673 46674<div class="price display-cash"> 46675 46676 <span class="old-price"> 46677 R$ 51,00 46678 </span> 46679 46680 <span class="current-price "> 46681 R$ 38,00 46682 46683 </span> 46684 46685 <span class="product-installments"> 46686 46687 </span> 46688 46689</div> 46690 </div> 46691 46692 </div> 46693 46694 </a> 46695 46696 </div> 46697 46698 46699 <div class="product-footer"> 46700 46701 46702 <div class="w-100"> 46703 46704 46705 46706<div class="product-rating-catalog"> 46707 46708 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 46709 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 46710 </svg> 46711 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 46712 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 46713 </svg> 46714 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 46715 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 46716 </svg> 46717 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 46718 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 46719 </svg> 46720 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 46721 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 46722 </svg> 46723 46724 46725 <a title="Ver avaliações de Homotaurina" href="https://www.farmacam.com.br/homotaurina#comments" class="total"> 46726 Seja o primeiro 46727 </a> 46728 46729 </div> 46730 46731 46732 46733 <div class="config-variacoes-compra"> 46734 46735 46736 46737 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125236663"> 46738 <input type="hidden" name="product_id" value="125236663"> 46739 <input type="hidden" name="without_stock_sale" value=""> 46740 46741 <input type="hidden" name="variacao" id="selectedVariant" value=""> 46742 <input type="hidden" name="estoque" value=""> 46743 46744 46745 46746 <ul class="paleta-cores"> 46747 46748 46749 46750 46751 46752 46753 46754 46755 46756 46757 46758 46759 46760 46761 46762 46763 46764 46765 46766 46767 46768 46769 46770 46771 46772 46773 46774 46775 46776 46777 46778 46779 46780 46781 46782 46783 46784 46785 46786 46787 46788 46789 46790 46791 46792 46793 46794 46795 46796 46797 46798 46799 46800 46801 46802 46803 46804 46805 46806 46807 46808 46809 46810 46811 46812 46813 46814 46815 46816 46817 46818 46819 46820 46821 46822 46823 46824 46825 46826 46827 46828 46829 46830 46831 46832 46833 46834 46835 46836 46837 46838 46839 46840 46841 46842 46843 46844 46845 46846 46847 46848 46849 46850 46851 46852 46853 46854 46855 46856 46857 46858 46859 46860 46861 46862 46863 46864 46865 46866 46867 46868 46869 46870 46871 46872 46873 46874 46875 46876 46877 46878 46879 46880 46881 46882 46883 46884 46885 46886 46887 46888 46889 46890 46891 46892 46893 46894 46895 46896 46897 46898 46899 46900 46901 46902 46903 46904 46905 46906 46907 46908 46909 46910 46911 46912 46913 46914 46915 46916 46917 46918 46919 46920 46921 46922 46923 46924 46925 46926 46927 46928 46929 46930 46931 46932 46933 46934 46935 46936 46937 46938 46939 46940 46941 46942 46943 46944 46945 46946 46947 46948 46949 46950 46951 46952 46953 46954 46955 46956 46957 46958 46959 46960 46961 46962 46963 46964 46965 46966 46967 46968 46969 46970 46971 46972 46973 46974 46975 46976 46977 46978 46979 46980 46981 46982 46983 46984 46985 46986 46987 46988 46989 46990 46991 46992 46993 46994 46995 46996 46997 46998 46999 47000 47001 47002 47003 47004 47005
47005 47006 47007 47008 47009 47010 47011 47012 47013 47014 47015 47016 47017 47018 47019 47020 47021 47022 47023 47024 47025 47026 47027 47028 47029 47030 47031 47032 47033 47034 47035 47036 47037 47038 47039 47040 47041 47042 47043 47044 47045 47046 47047 47048 47049 47050 47051 47052 47053 47054 47055 47056 47057 47058 47059 47060 47061 47062 47063 47064 47065 47066 47067 47068 47069 47070 47071 47072 47073 47074 47075 47076 47077 47078 47079 47080 47081 47082 47083 47084 47085 47086 47087 47088 47089 47090 47091 47092 47093 47094 47095 47096 47097 47098 47099 47100 47101 47102 47103 47104 47105 47106 47107 47108 47109 47110 47111 47112 47113 47114 47115 47116 47117 47118 47119 47120 47121 47122 47123 47124 47125 47126 47127 47128 47129 47130 47131 47132 47133 47134 47135 47136 47137 47138 47139 47140 47141 47142 47143 47144 47145 47146 47147 47148 47149 47150 47151 47152 47153 47154 47155 47156 47157 47158 47159 47160 47161 47162 47163 47164 47165 47166 47167 47168 47169 47170 47171 47172 47173 47174 47175 47176 47177 47178 47179 47180 47181 47182 47183 47184 47185 47186 47187 47188 47189 47190 47191 47192 47193 47194 47195 47196 47197 47198 47199 47200 47201 47202 47203 47204 47205 47206 47207 47208 47209 47210 47211 47212 47213 47214 47215 47216 47217 47218 47219 47220 47221 47222 47223 47224 47225 47226 47227 47228 47229 47230 47231 47232 47233 47234 47235 47236 47237 47238 47239 47240 47241 47242 47243 47244 47245 47246 47247 47248 47249 47250 47251 47252 47253 47254 47255 47256 47257 47258 47259 47260 47261 47262 47263 47264 47265 47266 47267 47268 47269 47270 47271 47272 47273 47274 47275 47276 47277 47278 47279 47280 47281 47282 47283 47284 47285 47286 47287 47288 47289 47290 47291 47292 47293 47294 47295 47296 47297 47298 47299 47300 47301 47302 47303 47304 47305 47306 47307 47308 47309 47310 47311 47312 47313 47314 47315 47316 47317 47318 47319 47320 47321 47322 47323 47324 47325 47326 47327 47328 47329 47330 47331 47332 47333 47334 47335 47336 47337 47338 47339 47340 47341 47342 47343 47344 47345 47346 47347 47348 47349 47350 47351 47352 47353 47354 47355 47356 47357 47358 47359 47360 47361 47362 47363 47364 47365 47366 47367 47368 47369 47370 47371 47372 47373 47374 47375 47376 47377 47378 47379 47380 47381 47382 47383 47384 47385 47386 47387 47388 47389 47390 47391 47392 47393 47394 47395 47396 47397 47398 47399 47400 47401 47402 47403 47404 47405 47406 47407 47408 47409 47410 47411 47412
47412 47413 47414 47415 47416 47417 47418 47419 47420 47421 47422 47423 47424 47425 47426 47427 47428 47429 47430 47431 47432 47433 47434 47435 47436 47437 47438 47439 47440 47441 47442 47443 47444 47445 47446 47447 47448 47449 47450 47451 47452 47453 47454 47455 </ul> 47456 <!-- Fim Paleta de Cores --> 47457 47458 47459 47460 47461 47462 47463 47464 47465 47466 47467 47468 47469 47470 47471 47472 47473 47474 47475 47476 47477 47478 47479 47480 47481 47482 47483 47484 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 47485 <option disabled="disabled" value=""> 47486 Selecione 47487 </option> 47488 47489 47490 <option value="8819" produto="125236663" estoque="10000">50 mg - 30 doses</option> 47491 47492 47493 47494 47495 <option value="8821" produto="125236663" estoque="10000">50 mg - 60 doses</option> 47496 47497 47498 47499 47500 <option value="8823" produto="125236663" estoque="10000">100 mg - 30 doses</option> 47501 47502 47503 47504 47505 <option value="8825" produto="125236663" estoque="9999">100 mg - 60 doses</option> 47506 47507 47508 47509 47510 <option value="8827" produto="125236663" estoque="10000">150 mg - 30 doses</option> 47511 47512 47513 47514 47515 <option value="8829" produto="125236663" estoque="10000">150 mg - 60 doses</option> 47516 47517 47518 </select> 47519 47520 47521 <select class="select-cor" style="display: none;" title="Campo Cor"> 47522
47522 </select> 47523 47524 47525 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 47526 <div class="alerta-estoque"></div> 47527 <div class="alerta-adicionado"></div> 47528 47529 <div class="acao-compra"> 47530 47531 <div class="quantidade-box"> 47532 <div class="quantidade-box-input"> 47533 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
47533stoque="59999" /> 47534 </div> 47535 <div class="quantidade-box-controles"> 47536 <div class="quantidade-box-controles-itens" data-item="mais"> 47537 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 47538 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 47539 </svg> 47540 </div> 47541 <div class="quantidade-box-controles-itens" data-item="menus"> 47542 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 47543 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 47544 </svg> 47545 </div> 47546 </div> 47547 </div> 47548 47549 47550 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125236663"> 47551 47552 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 47553 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 47554 47555 47556 47557 47558 47559 47560 <!-- Cesta de Compras --> 47561 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 47562 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 47563 </svg> 47564 47565 47566 47567 Comprar 47568 47569 47570 </button> 47571 <!-- </form> --> 47572 47573 </div> 47574 47575</div> 47576 47577 47578 </div> 47579 47580 </div> 47581 47582 47583</div> 47584
47585<script> 47586(function (window, document) { 47587 'use strict'; 47588 47589 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 47590 47591 if (window[GLOBAL_KEY]) { 47592 return; 47593 } 47594 47595 if (!window.Map || !window.WeakMap || !window.Promise) { 47596 return; 47597 } 47598 47599 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 47600 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 47601 '#vitrine-personalizada .product[data-id]'; 47602 var BADGE_CLASS = 'farmacam-prescription-badge'; 47603 var HOST_CLASS = 'farmacam-prescription-badge-host'; 47604 var MAX_CONCURRENT_REQUESTS = 6; 47605 var REQUEST_TIMEOUT_MS = 12000; 47606 47607 var rules = { 47608 '294': { 47609 level: '294', 47610 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 47611 }, 47612 '296': { 47613 level: '296', 47614 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 47615 }, 47616 '298': { 47617 level: '298', 47618 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 47619 } 47620 }; 47621 47622 var cache = new Map(); 47623 var pending = new Map(); 47624 var cardStates = new WeakMap(); 47625 var queue = []; 47626 var activeRequests = 0; 47627 var trayAjaxHooked = false; 47628 47629 function injectStyles() { 47630 if (document.getElementById('farmacam-prescription-cards-style')) { 47631 return; 47632 } 47633 47634 var style = document.createElement('style'); 47635 style.id = 'farmacam-prescription-cards-style'; 47636 style.textContent = [ 47637 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 47638 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 47639 'position:absolute!important;', 47640 'top:52px!important;', 47641 'left:10px!important;', 47642 'z-index:999!important;', 47643 'display:block!important;', 47644 'max-width:calc(100% - 20px)!important;', 47645 'box-sizing:border-box!important;', 47646 'padding:8px 12px!important;', 47647 'color:#fff!important;', 47648 'font-family:inherit!important;', 47649 'font-size:13px!important;', 47650 'font-weight:900!important;', 47651 'line-height:1.15!important;', 47652 'text-align:center!important;', 47653 'text-transform:uppercase!important;', 47654 'letter-spacing:.3px!important;', 47655 'white-space:normal!important;', 47656 'overflow-wrap:break-word!important;', 47657 'border-radius:3px!important;', 47658 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 47659 'pointer-events:none!important;', 47660 '}', 47661 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 47662 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 47663 'background:#d70008!important;', 47664 '}', 47665 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 47666 'background:#000!important;', 47667 '}', 47668 '@media (max-width:767px){', 47669 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 47670 'top:42px!important;', 47671 'left:6px!important;', 47672 'max-width:calc(100% - 12px)!important;', 47673 'padding:6px 8px!important;', 47674 'font-size:10px!important;', 47675 '}', 47676 '}' 47677 ].join(''); 47678 47679 (document.head || document.documentElement).appendChild(style); 47680 } 47681 47682 function normalizeProductId(value) { 47683 var id = String(value == null ? '' : value).trim(); 47684 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 47685 } 47686 47687 function classifyRelatedCategories(relatedCategories) { 47688 var found = { 47689 '292': false, 47690 '294': false, 47691 '296': false, 47692 '298': false 47693 }; 47694 47695 function inspect(value, depth) { 47696 var index; 47697 var normalized; 47698 47699 if (value == null || depth > 8) { 47700 return; 47701 } 47702 47703 if (Array.isArray(value)) { 47704 for (index = 0; index < value.length; index += 1) { 47705 inspect(value[index], depth + 1); 47706 } 47707 return; 47708 } 47709 47710 if (typeof value === 'object') { 47711 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 47712 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 47713 inspect(value.id, depth + 1); 47714 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 47715 inspect(value.category_id, depth + 1); 47716 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 47717 inspect(value.Category, depth + 1); 47718 } 47719 return; 47720 } 47721 47722 if (typeof value !== 'string' && typeof value !== 'number') { 47723 return; 47724 } 47725 normalized = normalizeProductId(value); 47726 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 47727 found[normalized] = true; 47728 } 47729 } 47730 47731 inspect(relatedCategories, 0); 47732 47733 if (found['298']) { 47734 return rules['298']; 47735 } 47736 if (found['296']) { 47737 return rules['296']; 47738 } 47739 if (found['294']) { 47740 return rules['294']; 47741 } 47742 47743 // 292 e qualquer classificacao desconhecida ficam sem tarja. 47744 return null; 47745 } 47746 47747 function ruleFromPayload(payload, productId) { 47748 var product = payload && payload.Product; 47749 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 47750 return null; 47751 } 47752 return classifyRelatedCategories(product && product.related_categories); 47753 } 47754 47755 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 47756 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 47757 function attachTrayAjaxCache() { 47758 var jq = window.jQuery; 47759 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 47760 return; 47761 } 47762
47763 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 47764 var url; 47765 var match; 47766 var productId; 47767 var payload; 47768 try { 47769 url = new URL(settings.url, window.location.href); 47770 if (url.origin !== window.location.origin) { 47771 return; 47772 } 47773 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 47774 if (!match) { 47775 return; 47776 } 47777 productId = normalizeProductId(match[1]); 47778 if (!cache.has(productId) && !pending.has(productId)) { 47779 payload = data || xhr.responseJSON; 47780 if (typeof payload === 'string') { 47781 payload = JSON.parse(payload); 47782 } 47783 if (!payload || !payload.Product || 47784 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 47785 return; 47786 } 47787 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 47788 return; 47789 } 47790 cache.set(productId, ruleFromPayload(payload, productId)); 47791 } 47792 } catch (error) { 47793 // Respostas de outras integracoes nao interferem nas tarjas. 47794 } 47795 }); 47796 47797 trayAjaxHooked = true; 47798 document.removeEventListener('load', onTrayScriptLoad, true); 47799 } 47800 47801 function onTrayScriptLoad(event) { 47802 if (event.target && event.target.tagName === 'SCRIPT') { 47803 attachTrayAjaxCache(); 47804 } 47805 } 47806 47807 function requestRule(productId) { 47808 var controller = null; 47809 var timeoutId = null; 47810 var options = { 47811 credentials: 'same-origin', 47812 headers: { 47813 'Accept': 'application/json' 47814 } 47815 }; 47816 var request; 47817 47818 if (typeof window.fetch !== 'function') { 47819 return Promise.resolve(null); 47820 } 47821 47822 if (typeof window.AbortController === 'function') { 47823 controller = new window.AbortController(); 47824 options.signal = controller.signal; 47825 timeoutId = window.setTimeout(function () { 47826 controller.abort(); 47827 }, REQUEST_TIMEOUT_MS); 47828 } 47829 47830 try { 47831 request = window.fetch( 47832 '/web_api/products/' + encodeURIComponent(productId), 47833 options 47834 ); 47835 } catch (error) { 47836 if (timeoutId !== null) { 47837 window.clearTimeout(timeoutId); 47838 } 47839 return Promise.resolve(null); 47840 } 47841 47842 return request.then(function (response) { 47843 if (!response.ok) { 47844 throw new Error('HTTP ' + response.status); 47845 } 47846 return response.json(); 47847 }).then(function (payload) { 47848 return ruleFromPayload(payload, productId); 47849 }).then(function (rule) { 47850 if (timeoutId !== null) { 47851 window.clearTimeout(timeoutId); 47852 } 47853 return rule; 47854 }, function () { 47855 if (timeoutId !== null) { 47856 window.clearTimeout(timeoutId); 47857 } 47858 47859 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 47860 return null; 47861 }); 47862 } 47863 47864 function finishJob(job, rule) { 47865 cache.set(job.productId, rule); 47866 pending.delete(job.productId); 47867 activeRequests -= 1; 47868 job.resolve(rule); 47869 pumpQueue(); 47870 } 47871 47872 function pumpQueue() { 47873 var job; 47874 47875 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 47876 job = queue.shift(); 47877 activeRequests += 1; 47878 47879 (function (currentJob) { 47880 requestRule(currentJob.productId).then(function (rule) { 47881 finishJob(currentJob, rule); 47882 }, function () { 47883 finishJob(currentJob, null); 47884 }); 47885 }(job)); 47886 } 47887 } 47888 47889 function getRule(productId) { 47890 var resolver; 47891 var promise; 47892 47893 if (cache.has(productId)) { 47894 return Promise.resolve(cache.get(productId)); 47895 } 47896 47897 if (pending.has(productId)) { 47898 return pending.get(productId); 47899 } 47900 47901 promise = new Promise(function (resolve) { 47902 resolver = resolve; 47903 }); 47904 47905 pending.set(productId, promise); 47906 queue.push({ 47907 productId: productId, 47908 resolve: resolver 47909 }); 47910 pumpQueue(); 47911 47912 return promise; 47913 } 47914 47915 function findBadge(card) { 47916 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 47917 } 47918 47919 function clearBadge(card) { 47920 var badge = findBadge(card); 47921 var image = card.querySelector('.product-header > .w-100 > .image'); 47922 47923 if (badge && badge.parentNode) { 47924 badge.parentNode.removeChild(badge); 47925 } 47926 47927 if (image) { 47928 image.classList.remove(HOST_CLASS); 47929 } 47930 47931 card.removeAttribute('data-farmacam-prescription-level'); 47932 } 47933 47934 function applyBadge(card, productId, rule) { 47935 var image; 47936 var badge; 47937 47938 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 47939 return false;
47940 } 47941 47942 clearBadge(card); 47943 47944 if (!rule) { 47945 return true; 47946 } 47947 47948 image = card.querySelector('.product-header > .w-100 > .image'); 47949 if (!image) { 47950 return false; 47951 } 47952 47953 badge = document.createElement('span'); 47954 badge.className = BADGE_CLASS; 47955 badge.setAttribute('data-farmacam-generated', 'true'); 47956 badge.setAttribute('data-farmacam-prescription-level', rule.level); 47957 badge.setAttribute('role', 'note'); 47958 badge.textContent = rule.text; 47959 47960 image.classList.add(HOST_CLASS); 47961 image.insertBefore(badge, image.firstChild); 47962 card.setAttribute('data-farmacam-prescription-level', rule.level); 47963 47964 return true; 47965 } 47966 47967 function processCard(card) { 47968 var productId; 47969 var previousState; 47970 var currentState; 47971 47972 if (!card || card.nodeType !== 1) { 47973 return; 47974 } 47975 47976 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 47977 return; 47978 } 47979 47980 productId = normalizeProductId(card.getAttribute('data-id')); 47981 previousState = cardStates.get(card); 47982 47983 if (!productId) { 47984 clearBadge(card); 47985 cardStates.delete(card); 47986 return; 47987 } 47988 47989 if ( 47990 previousState && 47991 previousState.productId === productId && 47992 previousState.status === 'loading' 47993 ) { 47994 return; 47995 } 47996 47997 if ( 47998 previousState && 47999 previousState.productId === productId && 48000 previousState.status === 'processed' 48001 ) { 48002 if (!previousState.rule || findBadge(card)) { 48003 return; 48004 } 48005 } 48006 48007 if (!previousState || previousState.productId !== productId) { 48008 clearBadge(card); 48009 } 48010 48011 currentState = { 48012 productId: productId, 48013 status: 'loading', 48014 rule: null 48015 }; 48016 cardStates.set(card, currentState); 48017 48018 getRule(productId).then(function (rule) { 48019 var applied; 48020 48021 if ( 48022 cardStates.get(card) !== currentState || 48023 normalizeProductId(card.getAttribute('data-id')) !== productId 48024 ) { 48025 return; 48026 } 48027 48028 applied = applyBadge(card, productId, rule); 48029 currentState.rule = rule; 48030 currentState.status = applied ? 'processed' : 'waiting-image'; 48031 }); 48032 } 48033 48034 function scan(root) { 48035 var cards; 48036 var index; 48037 48038 if (!root) { 48039 return; 48040 } 48041 48042 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 48043 processCard(root); 48044 } 48045 48046 if (!root.querySelectorAll) { 48047 return; 48048 } 48049 48050 cards = root.querySelectorAll(CARD_SELECTOR); 48051 for (index = 0; index < cards.length; index += 1) { 48052 processCard(cards[index]); 48053 } 48054 } 48055 48056 function startObserver() { 48057 var observer; 48058 48059 if (!window.MutationObserver || !document.documentElement) { 48060 return; 48061 } 48062 48063 observer = new MutationObserver(function (mutations) { 48064 var mutationIndex; 48065 var nodeIndex; 48066 var mutation; 48067 var node; 48068 var ownerCard; 48069 48070 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 48071 mutation = mutations[mutationIndex]; 48072 48073 if (mutation.type === 'attributes') { 48074 processCard(mutation.target); 48075 continue; 48076 } 48077 48078 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 48079 node = mutation.addedNodes[nodeIndex]; 48080 if (node.nodeType !== 1) { 48081 continue; 48082 } 48083 48084 scan(node); 48085 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 48086 if (ownerCard) { 48087 processCard(ownerCard); 48088 } 48089 } 48090 } 48091 }); 48092 48093 observer.observe(document.documentElement, { 48094 childList: true, 48095 subtree: true, 48096 attributes: true, 48097 attributeFilter: ['data-id'] 48098 }); 48099 48100 window[GLOBAL_KEY].observer = observer; 48101 } 48102 48103 window[GLOBAL_KEY] = { 48104 version: '1.1.0', 48105 cache: cache, 48106 pending: pending, 48107 cardStates: cardStates, 48108 scan: scan, 48109 processCard: processCard, 48110 observer: null 48111 }; 48112 48113 document.addEventListener('load', onTrayScriptLoad, true); 48114 attachTrayAjaxCache(); 48115 injectStyles(); 48116 scan(document); 48117 startObserver(); 48118 48119 if (document.readyState === 'loading') { 48120 document.addEventListener('DOMContentLoaded', function () { 48121 attachTrayAjaxCache(); 48122 scan(document); 48123 }); 48124 } 48125}(window, document)); 48126</script>
48126 48127 </div> 48128 <div 48129 class="swiper-slide fixWidthBoxProduct item"> 48130 48131 48132 48133 48134<div class="product animate open_cart" 48135 data-id="125241406" 48136 data-farmacam-related-categories="," 48137 data-ga4-id="125241406" 48138 data-ga4-name="Hyaxel Peeling Natural e Hidratação" 48139 data-ga4-price="40.00" 48140 data-ga4-brand="Farmacam" 48141 data-ga4-category="Tipo de Produto;Manipulados;" 48142 data-ga4-promotion="32"> 48143 48144 <div class="product-header"> 48145 48146 <div class="w-100"> 48147 48148 48149 48150 48151 48152 48153 48154 48155 <div class="product-tags-circle product-tags-circle-right"> 48156 48157 <div class="tag-circle discount"> 48158 <span> 48159 20% OFF 48160 </span> 48161 </div> 48162 48163 48164 </div> 48165 48166 <div class="product-tags " data-tags-count="0"> 48167 48168 48169 48170 48171 <div class="tag extra fix-Selo"> 48172 <img width="119" height="22" alt="Selo" src="https://images.tcdn.com.br/img/img_prod/1063102/1764006510_oportunidade.png" fetchpriority='high' /> 48173 </div> 48174 48175 </div> 48176 48177 48178 48179 <div class="image "> 48180 48181 <a title="Hyaxel Peeling Natural e Hidratação" href="https://www.farmacam.com.br/hyaxel-peeling-natural-e-hidratacao" class="space-image"> 48182 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/hyaxel_peeling_natural_e_hidratacao_30g_125241406_1_1fdc3579fa4b043e48be4c0230e143dc.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/hyaxel_peeling_natural_e_hidratacao_30g_125241406_1_1fdc3579fa4b043e48be4c0230e143dc.png" alt="Hyaxel Peeling Natural e Hidratação"> 48183 </a> 48184 48185 </div> 48186 48187 48188 48189 48190 48191 </div> 48192 48193 </div> 48194 48195 <div class="product-body"> 48196 48197 <a title="Hyaxel Peeling Natural e Hidratação" class="product-info" href="https://www.farmacam.com.br/hyaxel-peeling-natural-e-hidratacao"> 48198 48199 <div class="product-info-dados"> 48200 48201 48202 48203 <div class="listagem-produtos-timer-promocao" data-inicial="2026-08-05" data-final="2026-10-06"></div> 48204 48205 48206 48207 <div class="product-name"> 48208 Hyaxel Peeling Natural e Hidratação 48209 </div> 48210 48211 48212 48213 <div class="product-price"> 48214 48215 48216 48217 <div class="compre-economize"> 48218 Economize: R$ 8,00 48219 </div> 48220 48221 48222 <span class="product-has-variants text-center"> 48223 A partir de 48224 </span> 48225 48226<div class="price display-cash"> 48227 48228 <span class="old-price"> 48229 R$ 40,00 48230 </span> 48231 48232 <span class="current-price "> 48233 R$ 32,00 48234 48235 </span> 48236 48237 <span class="product-installments"> 48238 48239 </span> 48240 48241</div> 48242 </div> 48243 48244 </div> 48245 48246 </a> 48247 48248 </div> 48249 48250 48251 <div class="product-footer"> 48252 48253 48254 <div class="w-100"> 48255 48256 48257 48258<div class="product-rating-catalog"> 48259 48260 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 48261 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 48262 </svg> 48263 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 48264 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 48265 </svg> 48266 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 48267 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 48268 </svg> 48269 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 48270 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 48271 </svg> 48272 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 48273 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 48274 </svg> 48275 48276 48277 <a title="Ver avaliações de Hyaxel Peeling Natural e Hidratação" href="https://www.farmacam.com.br/hyaxel-peeling-natural-e-hidratacao#comments" class="total"> 48278 Seja o primeiro 48279 </a> 48280 48281 </div> 48282 48283 48284 48285 <div class="config-variacoes-compra"> 48286 48287 48288 48289 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125241406"> 48290 <input type="hidden" name="product_id" value="125241406"> 48291 <input type="hidden" name="without_stock_sale" value=""> 48292 48293 <input type="hidden" name="variacao" id="selectedVariant" value=""> 48294 <input type="hidden" name="estoque" value=""> 48295 48296 48297 48298 <ul class="paleta-cores"> 48299 48300 48301 48302 48303 48304 48305 48306 48307 48308 48309 48310 48311 48312 48313 48314 48315 48316 48317 48318 48319 48320 48321 48322 48323 48324 48325 48326 48327 48328 48329 48330 48331 48332 48333 48334 48335 48336 48337 48338 48339 48340 48341 48342 48343 48344 48345 48346 48347 48348 48349 48350 48351 48352 48353 48354 48355 48356 48357 48358 48359 48360 48361 48362 48363 48364 48365 48366 48367 48368 48369 48370 48371 48372 48373 48374 48375 48376 48377 48378 48379 48380 48381 48382 48383 48384 48385 48386 48387 48388 48389 48390 48391 48392 48393 48394 48395 48396 48397 48398 48399 48400 48401 48402 48403 48404 48405 48406 48407 48408 48409 48410 48411 48412 48413 48414 48415 48416 48417 48418 48419 48420 48421 48422 48423 48424 48425 48426 48427 48428 48429 48430 48431 48432 48433 48434 48435 48436 48437 48438 48439 48440 48441 48442 48443 48444 48445 48446 48447 48448 48449 48450 48451 48452 48453 48454 48455 48456 48457 48458 48459 48460 48461 48462 48463 48464 48465 48466 48467 48468 48469 48470 48471 48472 48473 48474 48475 48476 48477 48478 48479 48480 48481 48482 48483 48484 48485 48486 48487 48488 48489 48490 48491 48492 48493 48494 48495 48496 48497 48498 48499 48500 48501 48502 48503 48504 48505 48506 48507 48508 48509 48510 48511 48512 48513 48514 48515 48516 48517 48518 48519 48520 48521 48522 48523 48524 48525 48526 48527 48528 48529 48530 48531 48532 48533 48534 48535 48536 48537 48538 48539 48540 48541 48542 48543 48544 48545 48546 48547 48548 48549 48550 48551 48552 48553
48553 48554 48555 48556 48557 48558 48559 48560 48561 48562 48563 48564 48565 48566 48567 48568 48569 48570 48571 48572 48573 48574 48575 48576 48577 48578 48579 48580 48581 48582 48583 48584 48585 48586 48587 48588 48589 48590 48591 48592 48593 48594 48595 48596 48597 48598 48599 48600 48601 48602 48603 48604 48605 48606 48607 48608 48609 48610 48611 48612 48613 48614 48615 48616 48617 48618 48619 48620 48621 48622 48623 48624 48625 48626 48627 48628 48629 48630 48631 </ul> 48632 <!-- Fim Paleta de Cores --> 48633 48634 48635 48636 48637 48638 48639 48640 48641 48642 48643 48644 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 48645 <option disabled="disabled" value=""> 48646 Selecione 48647 </option> 48648 48649 48650 <option value="21842" produto="125241406" estoque="9999">30 g</option> 48651 48652 48653 48654 48655 <option value="21844" produto="125241406" estoque="10000">60 g</option> 48656 48657 48658 </select> 48659 48660 48661 <select class="select-cor" style="display: none;" title="Campo Cor"> 48662 </select> 48663 48664 48665 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 48666 <div class="alerta-estoque"></div> 48667 <div class="alerta-adicionado"></div> 48668 48669 <div class="acao-compra"> 48670 48671 <div class="quantidade-box"> 48672 <div class="quantidade-box-input"> 48673 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
48673stoque="19999" /> 48674 </div> 48675 <div class="quantidade-box-controles"> 48676 <div class="quantidade-box-controles-itens" data-item="mais"> 48677 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 48678 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 48679 </svg> 48680 </div> 48681 <div class="quantidade-box-controles-itens" data-item="menus"> 48682 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 48683 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 48684 </svg> 48685 </div> 48686 </div> 48687 </div> 48688 48689 48690 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125241406"> 48691 48692 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 48693 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 48694 48695 48696 48697 48698 48699 48700 <!-- Cesta de Compras --> 48701 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 48702 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 48703 </svg> 48704 48705 48706 48707 Comprar 48708 48709 48710 </button> 48711 <!-- </form> --> 48712 48713 </div> 48714 48715</div> 48716 48717 48718 </div> 48719 48720 </div> 48721 48722 48723</div> 48724
48725<script> 48726(function (window, document) { 48727 'use strict'; 48728 48729 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 48730 48731 if (window[GLOBAL_KEY]) { 48732 return; 48733 } 48734 48735 if (!window.Map || !window.WeakMap || !window.Promise) { 48736 return; 48737 } 48738 48739 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 48740 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 48741 '#vitrine-personalizada .product[data-id]'; 48742 var BADGE_CLASS = 'farmacam-prescription-badge'; 48743 var HOST_CLASS = 'farmacam-prescription-badge-host'; 48744 var MAX_CONCURRENT_REQUESTS = 6; 48745 var REQUEST_TIMEOUT_MS = 12000; 48746 48747 var rules = { 48748 '294': { 48749 level: '294', 48750 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 48751 }, 48752 '296': { 48753 level: '296', 48754 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 48755 }, 48756 '298': { 48757 level: '298', 48758 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 48759 } 48760 }; 48761 48762 var cache = new Map(); 48763 var pending = new Map(); 48764 var cardStates = new WeakMap(); 48765 var queue = []; 48766 var activeRequests = 0; 48767 var trayAjaxHooked = false; 48768 48769 function injectStyles() { 48770 if (document.getElementById('farmacam-prescription-cards-style')) { 48771 return; 48772 } 48773 48774 var style = document.createElement('style'); 48775 style.id = 'farmacam-prescription-cards-style'; 48776 style.textContent = [ 48777 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 48778 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 48779 'position:absolute!important;', 48780 'top:52px!important;', 48781 'left:10px!important;', 48782 'z-index:999!important;', 48783 'display:block!important;', 48784 'max-width:calc(100% - 20px)!important;', 48785 'box-sizing:border-box!important;', 48786 'padding:8px 12px!important;', 48787 'color:#fff!important;', 48788 'font-family:inherit!important;', 48789 'font-size:13px!important;', 48790 'font-weight:900!important;', 48791 'line-height:1.15!important;', 48792 'text-align:center!important;', 48793 'text-transform:uppercase!important;', 48794 'letter-spacing:.3px!important;', 48795 'white-space:normal!important;', 48796 'overflow-wrap:break-word!important;', 48797 'border-radius:3px!important;', 48798 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 48799 'pointer-events:none!important;', 48800 '}', 48801 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 48802 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 48803 'background:#d70008!important;', 48804 '}', 48805 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 48806 'background:#000!important;', 48807 '}', 48808 '@media (max-width:767px){', 48809 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 48810 'top:42px!important;', 48811 'left:6px!important;', 48812 'max-width:calc(100% - 12px)!important;', 48813 'padding:6px 8px!important;', 48814 'font-size:10px!important;', 48815 '}', 48816 '}' 48817 ].join(''); 48818 48819 (document.head || document.documentElement).appendChild(style); 48820 } 48821 48822 function normalizeProductId(value) { 48823 var id = String(value == null ? '' : value).trim(); 48824 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 48825 } 48826 48827 function classifyRelatedCategories(relatedCategories) { 48828 var found = { 48829 '292': false, 48830 '294': false, 48831 '296': false, 48832 '298': false 48833 }; 48834 48835 function inspect(value, depth) { 48836 var index; 48837 var normalized; 48838 48839 if (value == null || depth > 8) { 48840 return; 48841 } 48842 48843 if (Array.isArray(value)) { 48844 for (index = 0; index < value.length; index += 1) { 48845 inspect(value[index], depth + 1); 48846 } 48847 return; 48848 } 48849 48850 if (typeof value === 'object') { 48851 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 48852 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 48853 inspect(value.id, depth + 1); 48854 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 48855 inspect(value.category_id, depth + 1); 48856 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 48857 inspect(value.Category, depth + 1); 48858 } 48859 return; 48860 } 48861 48862 if (typeof value !== 'string' && typeof value !== 'number') { 48863 return; 48864 } 48865 normalized = normalizeProductId(value); 48866 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 48867 found[normalized] = true; 48868 } 48869 } 48870 48871 inspect(relatedCategories, 0); 48872 48873 if (found['298']) { 48874 return rules['298']; 48875 } 48876 if (found['296']) { 48877 return rules['296']; 48878 } 48879 if (found['294']) { 48880 return rules['294']; 48881 } 48882 48883 // 292 e qualquer classificacao desconhecida ficam sem tarja. 48884 return null; 48885 } 48886 48887 function ruleFromPayload(payload, productId) { 48888 var product = payload && payload.Product; 48889 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 48890 return null; 48891 } 48892 return classifyRelatedCategories(product && product.related_categories); 48893 } 48894 48895 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 48896 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 48897 function attachTrayAjaxCache() { 48898 var jq = window.jQuery; 48899 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 48900 return; 48901 } 48902
48903 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 48904 var url; 48905 var match; 48906 var productId; 48907 var payload; 48908 try { 48909 url = new URL(settings.url, window.location.href); 48910 if (url.origin !== window.location.origin) { 48911 return; 48912 } 48913 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 48914 if (!match) { 48915 return; 48916 } 48917 productId = normalizeProductId(match[1]); 48918 if (!cache.has(productId) && !pending.has(productId)) { 48919 payload = data || xhr.responseJSON; 48920 if (typeof payload === 'string') { 48921 payload = JSON.parse(payload); 48922 } 48923 if (!payload || !payload.Product || 48924 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 48925 return; 48926 } 48927 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 48928 return; 48929 } 48930 cache.set(productId, ruleFromPayload(payload, productId)); 48931 } 48932 } catch (error) { 48933 // Respostas de outras integracoes nao interferem nas tarjas. 48934 } 48935 }); 48936 48937 trayAjaxHooked = true; 48938 document.removeEventListener('load', onTrayScriptLoad, true); 48939 } 48940 48941 function onTrayScriptLoad(event) { 48942 if (event.target && event.target.tagName === 'SCRIPT') { 48943 attachTrayAjaxCache(); 48944 } 48945 } 48946 48947 function requestRule(productId) { 48948 var controller = null; 48949 var timeoutId = null; 48950 var options = { 48951 credentials: 'same-origin', 48952 headers: { 48953 'Accept': 'application/json' 48954 } 48955 }; 48956 var request; 48957 48958 if (typeof window.fetch !== 'function') { 48959 return Promise.resolve(null); 48960 } 48961 48962 if (typeof window.AbortController === 'function') { 48963 controller = new window.AbortController(); 48964 options.signal = controller.signal; 48965 timeoutId = window.setTimeout(function () { 48966 controller.abort(); 48967 }, REQUEST_TIMEOUT_MS); 48968 } 48969 48970 try { 48971 request = window.fetch( 48972 '/web_api/products/' + encodeURIComponent(productId), 48973 options 48974 ); 48975 } catch (error) { 48976 if (timeoutId !== null) { 48977 window.clearTimeout(timeoutId); 48978 } 48979 return Promise.resolve(null); 48980 } 48981 48982 return request.then(function (response) { 48983 if (!response.ok) { 48984 throw new Error('HTTP ' + response.status); 48985 } 48986 return response.json(); 48987 }).then(function (payload) { 48988 return ruleFromPayload(payload, productId); 48989 }).then(function (rule) { 48990 if (timeoutId !== null) { 48991 window.clearTimeout(timeoutId); 48992 } 48993 return rule; 48994 }, function () { 48995 if (timeoutId !== null) { 48996 window.clearTimeout(timeoutId); 48997 } 48998 48999 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 49000 return null; 49001 }); 49002 } 49003 49004 function finishJob(job, rule) { 49005 cache.set(job.productId, rule); 49006 pending.delete(job.productId); 49007 activeRequests -= 1; 49008 job.resolve(rule); 49009 pumpQueue(); 49010 } 49011 49012 function pumpQueue() { 49013 var job; 49014 49015 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 49016 job = queue.shift(); 49017 activeRequests += 1; 49018 49019 (function (currentJob) { 49020 requestRule(currentJob.productId).then(function (rule) { 49021 finishJob(currentJob, rule); 49022 }, function () { 49023 finishJob(currentJob, null); 49024 }); 49025 }(job)); 49026 } 49027 } 49028 49029 function getRule(productId) { 49030 var resolver; 49031 var promise; 49032 49033 if (cache.has(productId)) { 49034 return Promise.resolve(cache.get(productId)); 49035 } 49036 49037 if (pending.has(productId)) { 49038 return pending.get(productId); 49039 } 49040 49041 promise = new Promise(function (resolve) { 49042 resolver = resolve; 49043 }); 49044 49045 pending.set(productId, promise); 49046 queue.push({ 49047 productId: productId, 49048 resolve: resolver 49049 }); 49050 pumpQueue(); 49051 49052 return promise; 49053 } 49054 49055 function findBadge(card) { 49056 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 49057 } 49058 49059 function clearBadge(card) { 49060 var badge = findBadge(card); 49061 var image = card.querySelector('.product-header > .w-100 > .image'); 49062 49063 if (badge && badge.parentNode) { 49064 badge.parentNode.removeChild(badge); 49065 } 49066 49067 if (image) { 49068 image.classList.remove(HOST_CLASS); 49069 } 49070 49071 card.removeAttribute('data-farmacam-prescription-level'); 49072 } 49073 49074 function applyBadge(card, productId, rule) { 49075 var image; 49076 var badge; 49077 49078 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 49079 return false;
49080 } 49081 49082 clearBadge(card); 49083 49084 if (!rule) { 49085 return true; 49086 } 49087 49088 image = card.querySelector('.product-header > .w-100 > .image'); 49089 if (!image) { 49090 return false; 49091 } 49092 49093 badge = document.createElement('span'); 49094 badge.className = BADGE_CLASS; 49095 badge.setAttribute('data-farmacam-generated', 'true'); 49096 badge.setAttribute('data-farmacam-prescription-level', rule.level); 49097 badge.setAttribute('role', 'note'); 49098 badge.textContent = rule.text; 49099 49100 image.classList.add(HOST_CLASS); 49101 image.insertBefore(badge, image.firstChild); 49102 card.setAttribute('data-farmacam-prescription-level', rule.level); 49103 49104 return true; 49105 } 49106 49107 function processCard(card) { 49108 var productId; 49109 var previousState; 49110 var currentState; 49111 49112 if (!card || card.nodeType !== 1) { 49113 return; 49114 } 49115 49116 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 49117 return; 49118 } 49119 49120 productId = normalizeProductId(card.getAttribute('data-id')); 49121 previousState = cardStates.get(card); 49122 49123 if (!productId) { 49124 clearBadge(card); 49125 cardStates.delete(card); 49126 return; 49127 } 49128 49129 if ( 49130 previousState && 49131 previousState.productId === productId && 49132 previousState.status === 'loading' 49133 ) { 49134 return; 49135 } 49136 49137 if ( 49138 previousState && 49139 previousState.productId === productId && 49140 previousState.status === 'processed' 49141 ) { 49142 if (!previousState.rule || findBadge(card)) { 49143 return; 49144 } 49145 } 49146 49147 if (!previousState || previousState.productId !== productId) { 49148 clearBadge(card); 49149 } 49150 49151 currentState = { 49152 productId: productId, 49153 status: 'loading', 49154 rule: null 49155 }; 49156 cardStates.set(card, currentState); 49157 49158 getRule(productId).then(function (rule) { 49159 var applied; 49160 49161 if ( 49162 cardStates.get(card) !== currentState || 49163 normalizeProductId(card.getAttribute('data-id')) !== productId 49164 ) { 49165 return; 49166 } 49167 49168 applied = applyBadge(card, productId, rule); 49169 currentState.rule = rule; 49170 currentState.status = applied ? 'processed' : 'waiting-image'; 49171 }); 49172 } 49173 49174 function scan(root) { 49175 var cards; 49176 var index; 49177 49178 if (!root) { 49179 return; 49180 } 49181 49182 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 49183 processCard(root); 49184 } 49185 49186 if (!root.querySelectorAll) { 49187 return; 49188 } 49189 49190 cards = root.querySelectorAll(CARD_SELECTOR); 49191 for (index = 0; index < cards.length; index += 1) { 49192 processCard(cards[index]); 49193 } 49194 } 49195 49196 function startObserver() { 49197 var observer; 49198 49199 if (!window.MutationObserver || !document.documentElement) { 49200 return; 49201 } 49202 49203 observer = new MutationObserver(function (mutations) { 49204 var mutationIndex; 49205 var nodeIndex; 49206 var mutation; 49207 var node; 49208 var ownerCard; 49209 49210 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 49211 mutation = mutations[mutationIndex]; 49212 49213 if (mutation.type === 'attributes') { 49214 processCard(mutation.target); 49215 continue; 49216 } 49217 49218 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 49219 node = mutation.addedNodes[nodeIndex]; 49220 if (node.nodeType !== 1) { 49221 continue; 49222 } 49223 49224 scan(node); 49225 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 49226 if (ownerCard) { 49227 processCard(ownerCard); 49228 } 49229 } 49230 } 49231 }); 49232 49233 observer.observe(document.documentElement, { 49234 childList: true, 49235 subtree: true, 49236 attributes: true, 49237 attributeFilter: ['data-id'] 49238 }); 49239 49240 window[GLOBAL_KEY].observer = observer; 49241 } 49242 49243 window[GLOBAL_KEY] = { 49244 version: '1.1.0', 49245 cache: cache, 49246 pending: pending, 49247 cardStates: cardStates, 49248 scan: scan, 49249 processCard: processCard, 49250 observer: null 49251 }; 49252 49253 document.addEventListener('load', onTrayScriptLoad, true); 49254 attachTrayAjaxCache(); 49255 injectStyles(); 49256 scan(document); 49257 startObserver(); 49258 49259 if (document.readyState === 'loading') { 49260 document.addEventListener('DOMContentLoaded', function () { 49261 attachTrayAjaxCache(); 49262 scan(document); 49263 }); 49264 } 49265}(window, document)); 49266</script>
49266 49267 </div> 49268 <div 49269 class="swiper-slide fixWidthBoxProduct item"> 49270 49271 49272 49273 49274<div class="product animate open_cart" 49275 data-id="125241690" 49276 data-farmacam-related-categories="," 49277 data-ga4-id="125241690" 49278 data-ga4-name="Adipofill 5%" 49279 data-ga4-price="55.00" 49280 data-ga4-brand="Farmacam" 49281 data-ga4-category="Tipo de Produto;Manipulados;" 49282 data-ga4-promotion="38"> 49283 49284 <div class="product-header"> 49285 49286 <div class="w-100"> 49287 49288 49289 49290 49291 49292 49293 49294 49295 <div class="product-tags-circle product-tags-circle-right"> 49296 49297 <div class="tag-circle discount"> 49298 <span> 49299 31% OFF 49300 </span> 49301 </div> 49302 49303 49304 </div> 49305 49306 <div class="product-tags " data-tags-count="0"> 49307 49308 49309 49310 49311 <div class="tag extra fix-Selo"> 49312 <img width="119" height="22" alt="Selo" src="https://images.tcdn.com.br/img/img_prod/1063102/1764006510_oportunidade.png" fetchpriority='high' /> 49313 </div> 49314 49315 </div> 49316 49317 49318 49319 <div class="image "> 49320 49321 <a title="Adipofill 5%" href="https://www.farmacam.com.br/adipofill-5" class="space-image"> 49322 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/adipofill_5_125241690_1_e9853212b9a4a9244566a4112d934e00.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/adipofill_5_125241690_1_e9853212b9a4a9244566a4112d934e00.png" alt="Adipofill 5%"> 49323 </a> 49324 49325 </div> 49326 49327 49328 49329 49330 49331 </div> 49332 49333 </div> 49334 49335 <div class="product-body"> 49336 49337 <a title="Adipofill 5%" class="product-info" href="https://www.farmacam.com.br/adipofill-5"> 49338 49339 <div class="product-info-dados"> 49340 49341 49342 49343 <div class="listagem-produtos-timer-promocao" data-inicial="2026-08-05" data-final="2026-10-11"></div> 49344 49345 49346 49347 <div class="product-name"> 49348 Adipofill 5% 49349 </div> 49350 49351 49352 49353 <div class="product-price"> 49354 49355 49356 49357 <div class="compre-economize"> 49358 Economize: R$ 17,00 49359 </div> 49360 49361 49362 <span class="product-has-variants text-center"> 49363 A partir de 49364 </span> 49365 49366<div class="price display-cash"> 49367 49368 <span class="old-price"> 49369 R$ 55,00 49370 </span> 49371 49372 <span class="current-price "> 49373 R$ 38,00 49374 49375 </span> 49376 49377 <span class="product-installments"> 49378 49379 </span> 49380 49381</div> 49382 </div> 49383 49384 </div> 49385 49386 </a> 49387 49388 </div> 49389 49390 49391 <div class="product-footer"> 49392 49393 49394 <div class="w-100"> 49395 49396 49397 49398<div class="product-rating-catalog"> 49399 49400 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 49401 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 49402 </svg> 49403 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 49404 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 49405 </svg> 49406 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 49407 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 49408 </svg> 49409 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 49410 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 49411 </svg> 49412 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 49413 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 49414 </svg> 49415 49416 49417 <a title="Ver avaliações de Adipofill 5%" href="https://www.farmacam.com.br/adipofill-5#comments" class="total"> 49418 Seja o primeiro 49419 </a> 49420 49421 </div> 49422 49423 49424 49425 <div class="config-variacoes-compra"> 49426 49427 49428 49429 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125241690"> 49430 <input type="hidden" name="product_id" value="125241690"> 49431 <input type="hidden" name="without_stock_sale" value=""> 49432 49433 <input type="hidden" name="variacao" id="selectedVariant" value=""> 49434 <input type="hidden" name="estoque" value=""> 49435 49436 49437 49438 <ul class="paleta-cores"> 49439 49440 49441 49442 49443 49444 49445 49446 49447 49448 49449 49450 49451 49452 49453 49454 49455 49456 49457 49458 49459 49460 49461 49462 49463 49464 49465 49466 49467 49468 49469 49470 49471 49472 49473 49474 49475 49476 49477 49478 49479 49480 49481 49482 49483 49484 49485 49486 49487 49488 49489 49490 49491 49492 49493 49494 49495 49496 49497 49498 49499 49500 49501 49502 49503 49504 49505 49506 49507 49508 49509 49510 49511 49512 49513 49514 49515 49516 49517 49518 49519 49520 49521 49522 49523 49524 49525 49526 49527 49528 49529 49530 49531 49532 49533 49534 49535 49536 49537 49538 49539 49540 49541 49542 49543 49544 49545 49546 49547 49548 49549 49550 49551 49552 49553 49554 49555 49556 49557 49558 49559 49560 49561 49562 49563 49564 49565 49566 49567 49568 49569 49570 49571 49572 49573 49574 49575 49576 49577 49578 49579 49580 49581 49582 49583 49584 49585 49586 49587 49588 49589 49590 49591 49592 49593 49594 49595 49596 49597 49598 49599 49600 49601 49602 49603 49604 49605 49606 49607 49608 49609 49610 49611 49612 49613 49614 49615 49616 49617 49618 49619 49620 49621 49622 49623 49624 49625 49626 49627 49628 49629 49630 49631 49632 49633 49634 49635 49636 49637 49638 49639 49640 49641 49642 49643 49644 49645 49646 49647 49648 49649 49650 49651 49652 49653 49654 49655 49656 49657 49658 49659 49660 49661 49662 49663 49664 49665 49666 49667 49668 49669 49670 49671 49672 49673 49674 49675 49676 49677 49678 49679 49680 49681 49682 49683 49684 49685 49686 49687 49688 49689 49690 49691 49692 49693 49694 49695 49696 49697 49698 49699
49699 49700 49701 49702 49703 49704 49705 49706 49707 49708 49709 49710 49711 49712 49713 49714 49715 49716 49717 49718 49719 49720 49721 49722 49723 49724 49725 49726 49727 49728 49729 49730 49731 49732 49733 49734 49735 49736 49737 49738 49739 49740 49741 49742 49743 49744 49745 49746 49747 49748 49749 49750 49751 49752 49753 49754 49755 49756 49757 49758 49759 49760 49761 49762 49763 49764 49765 49766 49767 49768 49769 49770 49771 </ul> 49772 <!-- Fim Paleta de Cores --> 49773 49774 49775 49776 49777 49778 49779 49780 49781 49782 49783 49784 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 49785 <option disabled="disabled" value=""> 49786 Selecione 49787 </option> 49788 49789 49790 <option value="22272" produto="125241690" estoque="10000">30 g</option> 49791 49792 49793 49794 49795 <option value="22274" produto="125241690" estoque="10000">60 g</option> 49796 49797 49798 </select> 49799 49800 49801 <select class="select-cor" style="display: none;" title="Campo Cor"> 49802 </select> 49803 49804 49805 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 49806 <div class="alerta-estoque"></div> 49807 <div class="alerta-adicionado"></div> 49808 49809 <div class="acao-compra"> 49810 49811 <div class="quantidade-box"> 49812 <div class="quantidade-box-input"> 49813 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
49813stoque="20000" /> 49814 </div> 49815 <div class="quantidade-box-controles"> 49816 <div class="quantidade-box-controles-itens" data-item="mais"> 49817 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 49818 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 49819 </svg> 49820 </div> 49821 <div class="quantidade-box-controles-itens" data-item="menus"> 49822 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 49823 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 49824 </svg> 49825 </div> 49826 </div> 49827 </div> 49828 49829 49830 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125241690"> 49831 49832 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 49833 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 49834 49835 49836 49837 49838 49839 49840 <!-- Cesta de Compras --> 49841 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 49842 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 49843 </svg> 49844 49845 49846 49847 Comprar 49848 49849 49850 </button> 49851 <!-- </form> --> 49852 49853 </div> 49854 49855</div> 49856 49857 49858 </div> 49859 49860 </div> 49861 49862 49863</div> 49864
49865<script> 49866(function (window, document) { 49867 'use strict'; 49868 49869 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 49870 49871 if (window[GLOBAL_KEY]) { 49872 return; 49873 } 49874 49875 if (!window.Map || !window.WeakMap || !window.Promise) { 49876 return; 49877 } 49878 49879 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 49880 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 49881 '#vitrine-personalizada .product[data-id]'; 49882 var BADGE_CLASS = 'farmacam-prescription-badge'; 49883 var HOST_CLASS = 'farmacam-prescription-badge-host'; 49884 var MAX_CONCURRENT_REQUESTS = 6; 49885 var REQUEST_TIMEOUT_MS = 12000; 49886 49887 var rules = { 49888 '294': { 49889 level: '294', 49890 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 49891 }, 49892 '296': { 49893 level: '296', 49894 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 49895 }, 49896 '298': { 49897 level: '298', 49898 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 49899 } 49900 }; 49901 49902 var cache = new Map(); 49903 var pending = new Map(); 49904 var cardStates = new WeakMap(); 49905 var queue = []; 49906 var activeRequests = 0; 49907 var trayAjaxHooked = false; 49908 49909 function injectStyles() { 49910 if (document.getElementById('farmacam-prescription-cards-style')) { 49911 return; 49912 } 49913 49914 var style = document.createElement('style'); 49915 style.id = 'farmacam-prescription-cards-style'; 49916 style.textContent = [ 49917 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 49918 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 49919 'position:absolute!important;', 49920 'top:52px!important;', 49921 'left:10px!important;', 49922 'z-index:999!important;', 49923 'display:block!important;', 49924 'max-width:calc(100% - 20px)!important;', 49925 'box-sizing:border-box!important;', 49926 'padding:8px 12px!important;', 49927 'color:#fff!important;', 49928 'font-family:inherit!important;', 49929 'font-size:13px!important;', 49930 'font-weight:900!important;', 49931 'line-height:1.15!important;', 49932 'text-align:center!important;', 49933 'text-transform:uppercase!important;', 49934 'letter-spacing:.3px!important;', 49935 'white-space:normal!important;', 49936 'overflow-wrap:break-word!important;', 49937 'border-radius:3px!important;', 49938 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 49939 'pointer-events:none!important;', 49940 '}', 49941 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 49942 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 49943 'background:#d70008!important;', 49944 '}', 49945 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 49946 'background:#000!important;', 49947 '}', 49948 '@media (max-width:767px){', 49949 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 49950 'top:42px!important;', 49951 'left:6px!important;', 49952 'max-width:calc(100% - 12px)!important;', 49953 'padding:6px 8px!important;', 49954 'font-size:10px!important;', 49955 '}', 49956 '}' 49957 ].join(''); 49958 49959 (document.head || document.documentElement).appendChild(style); 49960 } 49961 49962 function normalizeProductId(value) { 49963 var id = String(value == null ? '' : value).trim(); 49964 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 49965 } 49966 49967 function classifyRelatedCategories(relatedCategories) { 49968 var found = { 49969 '292': false, 49970 '294': false, 49971 '296': false, 49972 '298': false 49973 }; 49974 49975 function inspect(value, depth) { 49976 var index; 49977 var normalized; 49978 49979 if (value == null || depth > 8) { 49980 return; 49981 } 49982 49983 if (Array.isArray(value)) { 49984 for (index = 0; index < value.length; index += 1) { 49985 inspect(value[index], depth + 1); 49986 } 49987 return; 49988 } 49989 49990 if (typeof value === 'object') { 49991 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 49992 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 49993 inspect(value.id, depth + 1); 49994 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 49995 inspect(value.category_id, depth + 1); 49996 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 49997 inspect(value.Category, depth + 1); 49998 } 49999 return; 50000 } 50001 50002 if (typeof value !== 'string' && typeof value !== 'number') { 50003 return; 50004 } 50005 normalized = normalizeProductId(value); 50006 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 50007 found[normalized] = true; 50008 } 50009 } 50010 50011 inspect(relatedCategories, 0); 50012 50013 if (found['298']) { 50014 return rules['298']; 50015 } 50016 if (found['296']) { 50017 return rules['296']; 50018 } 50019 if (found['294']) { 50020 return rules['294']; 50021 } 50022 50023 // 292 e qualquer classificacao desconhecida ficam sem tarja. 50024 return null; 50025 } 50026 50027 function ruleFromPayload(payload, productId) { 50028 var product = payload && payload.Product; 50029 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 50030 return null; 50031 } 50032 return classifyRelatedCategories(product && product.related_categories); 50033 } 50034 50035 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 50036 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 50037 function attachTrayAjaxCache() { 50038 var jq = window.jQuery; 50039 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 50040 return; 50041 } 50042
50043 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 50044 var url; 50045 var match; 50046 var productId; 50047 var payload; 50048 try { 50049 url = new URL(settings.url, window.location.href); 50050 if (url.origin !== window.location.origin) { 50051 return; 50052 } 50053 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 50054 if (!match) { 50055 return; 50056 } 50057 productId = normalizeProductId(match[1]); 50058 if (!cache.has(productId) && !pending.has(productId)) { 50059 payload = data || xhr.responseJSON; 50060 if (typeof payload === 'string') { 50061 payload = JSON.parse(payload); 50062 } 50063 if (!payload || !payload.Product || 50064 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 50065 return; 50066 } 50067 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 50068 return; 50069 } 50070 cache.set(productId, ruleFromPayload(payload, productId)); 50071 } 50072 } catch (error) { 50073 // Respostas de outras integracoes nao interferem nas tarjas. 50074 } 50075 }); 50076 50077 trayAjaxHooked = true; 50078 document.removeEventListener('load', onTrayScriptLoad, true); 50079 } 50080 50081 function onTrayScriptLoad(event) { 50082 if (event.target && event.target.tagName === 'SCRIPT') { 50083 attachTrayAjaxCache(); 50084 } 50085 } 50086 50087 function requestRule(productId) { 50088 var controller = null; 50089 var timeoutId = null; 50090 var options = { 50091 credentials: 'same-origin', 50092 headers: { 50093 'Accept': 'application/json' 50094 } 50095 }; 50096 var request; 50097 50098 if (typeof window.fetch !== 'function') { 50099 return Promise.resolve(null); 50100 } 50101 50102 if (typeof window.AbortController === 'function') { 50103 controller = new window.AbortController(); 50104 options.signal = controller.signal; 50105 timeoutId = window.setTimeout(function () { 50106 controller.abort(); 50107 }, REQUEST_TIMEOUT_MS); 50108 } 50109 50110 try { 50111 request = window.fetch( 50112 '/web_api/products/' + encodeURIComponent(productId), 50113 options 50114 ); 50115 } catch (error) { 50116 if (timeoutId !== null) { 50117 window.clearTimeout(timeoutId); 50118 } 50119 return Promise.resolve(null); 50120 } 50121 50122 return request.then(function (response) { 50123 if (!response.ok) { 50124 throw new Error('HTTP ' + response.status); 50125 } 50126 return response.json(); 50127 }).then(function (payload) { 50128 return ruleFromPayload(payload, productId); 50129 }).then(function (rule) { 50130 if (timeoutId !== null) { 50131 window.clearTimeout(timeoutId); 50132 } 50133 return rule; 50134 }, function () { 50135 if (timeoutId !== null) { 50136 window.clearTimeout(timeoutId); 50137 } 50138 50139 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 50140 return null; 50141 }); 50142 } 50143 50144 function finishJob(job, rule) { 50145 cache.set(job.productId, rule); 50146 pending.delete(job.productId); 50147 activeRequests -= 1; 50148 job.resolve(rule); 50149 pumpQueue(); 50150 } 50151 50152 function pumpQueue() { 50153 var job; 50154 50155 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 50156 job = queue.shift(); 50157 activeRequests += 1; 50158 50159 (function (currentJob) { 50160 requestRule(currentJob.productId).then(function (rule) { 50161 finishJob(currentJob, rule); 50162 }, function () { 50163 finishJob(currentJob, null); 50164 }); 50165 }(job)); 50166 } 50167 } 50168 50169 function getRule(productId) { 50170 var resolver; 50171 var promise; 50172 50173 if (cache.has(productId)) { 50174 return Promise.resolve(cache.get(productId)); 50175 } 50176 50177 if (pending.has(productId)) { 50178 return pending.get(productId); 50179 } 50180 50181 promise = new Promise(function (resolve) { 50182 resolver = resolve; 50183 }); 50184 50185 pending.set(productId, promise); 50186 queue.push({ 50187 productId: productId, 50188 resolve: resolver 50189 }); 50190 pumpQueue(); 50191 50192 return promise; 50193 } 50194 50195 function findBadge(card) { 50196 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 50197 } 50198 50199 function clearBadge(card) { 50200 var badge = findBadge(card); 50201 var image = card.querySelector('.product-header > .w-100 > .image'); 50202 50203 if (badge && badge.parentNode) { 50204 badge.parentNode.removeChild(badge); 50205 } 50206 50207 if (image) { 50208 image.classList.remove(HOST_CLASS); 50209 } 50210 50211 card.removeAttribute('data-farmacam-prescription-level'); 50212 } 50213 50214 function applyBadge(card, productId, rule) { 50215 var image; 50216 var badge; 50217 50218 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 50219 return false;
50220 } 50221 50222 clearBadge(card); 50223 50224 if (!rule) { 50225 return true; 50226 } 50227 50228 image = card.querySelector('.product-header > .w-100 > .image'); 50229 if (!image) { 50230 return false; 50231 } 50232 50233 badge = document.createElement('span'); 50234 badge.className = BADGE_CLASS; 50235 badge.setAttribute('data-farmacam-generated', 'true'); 50236 badge.setAttribute('data-farmacam-prescription-level', rule.level); 50237 badge.setAttribute('role', 'note'); 50238 badge.textContent = rule.text; 50239 50240 image.classList.add(HOST_CLASS); 50241 image.insertBefore(badge, image.firstChild); 50242 card.setAttribute('data-farmacam-prescription-level', rule.level); 50243 50244 return true; 50245 } 50246 50247 function processCard(card) { 50248 var productId; 50249 var previousState; 50250 var currentState; 50251 50252 if (!card || card.nodeType !== 1) { 50253 return; 50254 } 50255 50256 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 50257 return; 50258 } 50259 50260 productId = normalizeProductId(card.getAttribute('data-id')); 50261 previousState = cardStates.get(card); 50262 50263 if (!productId) { 50264 clearBadge(card); 50265 cardStates.delete(card); 50266 return; 50267 } 50268 50269 if ( 50270 previousState && 50271 previousState.productId === productId && 50272 previousState.status === 'loading' 50273 ) { 50274 return; 50275 } 50276 50277 if ( 50278 previousState && 50279 previousState.productId === productId && 50280 previousState.status === 'processed' 50281 ) { 50282 if (!previousState.rule || findBadge(card)) { 50283 return; 50284 } 50285 } 50286 50287 if (!previousState || previousState.productId !== productId) { 50288 clearBadge(card); 50289 } 50290 50291 currentState = { 50292 productId: productId, 50293 status: 'loading', 50294 rule: null 50295 }; 50296 cardStates.set(card, currentState); 50297 50298 getRule(productId).then(function (rule) { 50299 var applied; 50300 50301 if ( 50302 cardStates.get(card) !== currentState || 50303 normalizeProductId(card.getAttribute('data-id')) !== productId 50304 ) { 50305 return; 50306 } 50307 50308 applied = applyBadge(card, productId, rule); 50309 currentState.rule = rule; 50310 currentState.status = applied ? 'processed' : 'waiting-image'; 50311 }); 50312 } 50313 50314 function scan(root) { 50315 var cards; 50316 var index; 50317 50318 if (!root) { 50319 return; 50320 } 50321 50322 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 50323 processCard(root); 50324 } 50325 50326 if (!root.querySelectorAll) { 50327 return; 50328 } 50329 50330 cards = root.querySelectorAll(CARD_SELECTOR); 50331 for (index = 0; index < cards.length; index += 1) { 50332 processCard(cards[index]); 50333 } 50334 } 50335 50336 function startObserver() { 50337 var observer; 50338 50339 if (!window.MutationObserver || !document.documentElement) { 50340 return; 50341 } 50342 50343 observer = new MutationObserver(function (mutations) { 50344 var mutationIndex; 50345 var nodeIndex; 50346 var mutation; 50347 var node; 50348 var ownerCard; 50349 50350 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 50351 mutation = mutations[mutationIndex]; 50352 50353 if (mutation.type === 'attributes') { 50354 processCard(mutation.target); 50355 continue; 50356 } 50357 50358 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 50359 node = mutation.addedNodes[nodeIndex]; 50360 if (node.nodeType !== 1) { 50361 continue; 50362 } 50363 50364 scan(node); 50365 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 50366 if (ownerCard) { 50367 processCard(ownerCard); 50368 } 50369 } 50370 } 50371 }); 50372 50373 observer.observe(document.documentElement, { 50374 childList: true, 50375 subtree: true, 50376 attributes: true, 50377 attributeFilter: ['data-id'] 50378 }); 50379 50380 window[GLOBAL_KEY].observer = observer; 50381 } 50382 50383 window[GLOBAL_KEY] = { 50384 version: '1.1.0', 50385 cache: cache, 50386 pending: pending, 50387 cardStates: cardStates, 50388 scan: scan, 50389 processCard: processCard, 50390 observer: null 50391 }; 50392 50393 document.addEventListener('load', onTrayScriptLoad, true); 50394 attachTrayAjaxCache(); 50395 injectStyles(); 50396 scan(document); 50397 startObserver(); 50398 50399 if (document.readyState === 'loading') { 50400 document.addEventListener('DOMContentLoaded', function () { 50401 attachTrayAjaxCache(); 50402 scan(document); 50403 }); 50404 } 50405}(window, document)); 50406</script>
50406 50407 </div> 50408 <div 50409 class="swiper-slide fixWidthBoxProduct item"> 50410 50411 50412 50413 50414<div class="product animate open_cart" 50415 data-id="125235791" 50416 data-farmacam-related-categories="," 50417 data-ga4-id="125235791" 50418 data-ga4-name="Beet Root" 50419 data-ga4-price="51.00" 50420 data-ga4-brand="Farmacam" 50421 data-ga4-category="Tipo de Produto;Manipulados;" 50422 data-ga4-promotion="38"> 50423 50424 <div class="product-header"> 50425 50426 <div class="w-100"> 50427 50428 50429 50430 50431 50432 50433 50434 50435 <div class="product-tags-circle product-tags-circle-right"> 50436 50437 <div class="tag-circle discount"> 50438 <span> 50439 25% OFF 50440 </span> 50441 </div> 50442 50443 50444 </div> 50445 50446 <div class="product-tags " data-tags-count="0"> 50447 50448 50449 50450 50451 50452 </div> 50453 50454 50455 50456 <div class="image "> 50457 50458 <a title="Beet Root" href="https://www.farmacam.com.br/beet-root-500-mg" class="space-image"> 50459 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/beet_root_125235791_1_131a5cfc3bb09aced2b0561291ef62b5.jpg" data-src="https://images.tcdn.com.br/img/img_prod/1063102/beet_root_125235791_1_131a5cfc3bb09aced2b0561291ef62b5.jpg" alt="Beet Root"> 50460 </a> 50461 50462 </div> 50463 50464 50465 50466 50467 50468 </div> 50469 50470 </div> 50471 50472 <div class="product-body"> 50473 50474 <a title="Beet Root" class="product-info" href="https://www.farmacam.com.br/beet-root-500-mg"> 50475 50476 <div class="product-info-dados"> 50477 50478 50479 50480 <div class="listagem-produtos-timer-promocao" data-inicial="2026-08-31" data-final="2026-11-02"></div> 50481 50482 50483 50484 <div class="product-name"> 50485 Beet Root 50486 </div> 50487 50488 50489 50490 <div class="product-price"> 50491 50492 50493 50494 <div class="compre-economize"> 50495 Economize: R$ 13,00 50496 </div> 50497 50498 50499 <span class="product-has-variants text-center"> 50500 A partir de 50501 </span> 50502 50503<div class="price display-cash"> 50504 50505 <span class="old-price"> 50506 R$ 51,00 50507 </span> 50508 50509 <span class="current-price "> 50510 R$ 38,00 50511 50512 </span> 50513 50514 <span class="product-installments"> 50515 50516 </span> 50517 50518</div> 50519 </div> 50520 50521 </div> 50522 50523 </a> 50524 50525 </div> 50526 50527 50528 <div class="product-footer"> 50529 50530 50531 <div class="w-100"> 50532 50533 50534 50535<div class="product-rating-catalog"> 50536 50537 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 50538 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 50539 </svg> 50540 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 50541 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 50542 </svg> 50543 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 50544 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 50545 </svg> 50546 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 50547 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 50548 </svg> 50549 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 50550 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 50551 </svg> 50552 50553 50554 <a title="Ver avaliações de Beet Root" href="https://www.farmacam.com.br/beet-root-500-mg#comments" class="total"> 50555 Seja o primeiro 50556 </a> 50557 50558 </div> 50559 50560 50561 50562 <div class="config-variacoes-compra"> 50563 50564 50565 50566 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125235791"> 50567 <input type="hidden" name="product_id" value="125235791"> 50568 <input type="hidden" name="without_stock_sale" value=""> 50569 50570 <input type="hidden" name="variacao" id="selectedVariant" value=""> 50571 <input type="hidden" name="estoque" value=""> 50572 50573 50574 50575 <ul class="paleta-cores"> 50576 50577 50578 50579 50580 50581 50582 50583 50584 50585 50586 50587 50588 50589 50590 50591 50592 50593 50594 50595 50596 50597 50598 50599 50600 50601 50602 50603 50604 50605 50606 50607 50608 50609 50610 50611 50612 50613 50614 50615 50616 50617 50618 50619 50620 50621 50622 50623 50624 50625 50626 50627 50628 50629 50630 50631 50632 50633 50634 50635 50636 50637 50638 50639 50640 50641 50642 50643 50644 50645 50646 50647 50648 50649 50650 50651 50652 50653 50654 50655 50656 50657 50658 50659 50660 50661 50662 50663 50664 50665 50666 50667 50668 50669 50670 50671 50672 50673 50674 50675 50676 50677 50678 50679 50680 50681 50682 50683 50684 50685 50686 50687 50688 50689 50690 50691 50692 50693 50694 50695 50696 50697 50698 50699 50700 50701 50702 50703 50704 50705 50706 50707 50708 50709 50710 50711 50712 50713 50714 50715 50716 50717 50718 50719 50720 50721 50722 50723 50724 50725 50726 50727 50728 50729 50730 50731 50732 50733 50734 50735 50736 50737 50738 50739 50740 50741 50742 50743 50744 50745 50746 50747 50748 50749 50750 50751 50752 50753 50754 50755 50756 50757 50758 50759 50760 50761 50762 50763 50764 50765 50766 50767 50768 50769 50770 50771 50772 50773 50774 50775 50776 50777 50778 50779 50780 50781 50782 50783 50784 50785 50786 50787 50788 50789 50790 50791 50792 50793 50794 50795 50796 50797 50798 50799 50800 50801 50802 50803 50804 50805 50806 50807 50808 50809 50810 50811 50812 50813 50814 50815 50816 50817 50818 50819 50820 50821 50822 50823 50824 50825 50826 50827 50828 50829 50830 50831 50832 50833 50834 50835 50836 50837 50838 50839 50840 50841 50842 50843
50843 50844 50845 50846 50847 50848 50849 50850 50851 50852 50853 50854 50855 50856 50857 50858 50859 50860 50861 50862 50863 50864 50865 50866 50867 50868 50869 50870 50871 50872 50873 50874 50875 50876 50877 50878 50879 50880 50881 50882 50883 50884 50885 50886 50887 50888 50889 50890 50891 50892 50893 50894 50895 50896 50897 50898 50899 50900 50901 50902 50903 50904 50905 50906 50907 50908 </ul> 50909 <!-- Fim Paleta de Cores --> 50910 50911 50912 50913 50914 50915 50916 50917 50918 50919 50920 50921 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 50922 <option disabled="disabled" value=""> 50923 Selecione 50924 </option> 50925 50926 50927 <option value="5621" produto="125235791" estoque="10000">500 mg - 30 doses</option> 50928 50929 50930 50931 50932 <option value="5623" produto="125235791" estoque="10000">500 mg - 60 doses</option> 50933 50934 50935 </select> 50936 50937 50938 <select class="select-cor" style="display: none;" title="Campo Cor"> 50939 </select> 50940 50941 50942 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 50943 <div class="alerta-estoque"></div> 50944 <div class="alerta-adicionado"></div> 50945 50946 <div class="acao-compra"> 50947 50948 <div class="quantidade-box"> 50949 <div class="quantidade-box-input"> 50950 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
50950stoque="20000" /> 50951 </div> 50952 <div class="quantidade-box-controles"> 50953 <div class="quantidade-box-controles-itens" data-item="mais"> 50954 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 50955 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 50956 </svg> 50957 </div> 50958 <div class="quantidade-box-controles-itens" data-item="menus"> 50959 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 50960 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 50961 </svg> 50962 </div> 50963 </div> 50964 </div> 50965 50966 50967 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125235791"> 50968 50969 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 50970 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 50971 50972 50973 50974 50975 50976 50977 <!-- Cesta de Compras --> 50978 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 50979 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 50980 </svg> 50981 50982 50983 50984 Comprar 50985 50986 50987 </button> 50988 <!-- </form> --> 50989 50990 </div> 50991 50992</div> 50993 50994 50995 </div> 50996 50997 </div> 50998 50999 51000</div> 51001
51002<script> 51003(function (window, document) { 51004 'use strict'; 51005 51006 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 51007 51008 if (window[GLOBAL_KEY]) { 51009 return; 51010 } 51011 51012 if (!window.Map || !window.WeakMap || !window.Promise) { 51013 return; 51014 } 51015 51016 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 51017 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 51018 '#vitrine-personalizada .product[data-id]'; 51019 var BADGE_CLASS = 'farmacam-prescription-badge'; 51020 var HOST_CLASS = 'farmacam-prescription-badge-host'; 51021 var MAX_CONCURRENT_REQUESTS = 6; 51022 var REQUEST_TIMEOUT_MS = 12000; 51023 51024 var rules = { 51025 '294': { 51026 level: '294', 51027 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 51028 }, 51029 '296': { 51030 level: '296', 51031 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 51032 }, 51033 '298': { 51034 level: '298', 51035 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 51036 } 51037 }; 51038 51039 var cache = new Map(); 51040 var pending = new Map(); 51041 var cardStates = new WeakMap(); 51042 var queue = []; 51043 var activeRequests = 0; 51044 var trayAjaxHooked = false; 51045 51046 function injectStyles() { 51047 if (document.getElementById('farmacam-prescription-cards-style')) { 51048 return; 51049 } 51050 51051 var style = document.createElement('style'); 51052 style.id = 'farmacam-prescription-cards-style'; 51053 style.textContent = [ 51054 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 51055 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 51056 'position:absolute!important;', 51057 'top:52px!important;', 51058 'left:10px!important;', 51059 'z-index:999!important;', 51060 'display:block!important;', 51061 'max-width:calc(100% - 20px)!important;', 51062 'box-sizing:border-box!important;', 51063 'padding:8px 12px!important;', 51064 'color:#fff!important;', 51065 'font-family:inherit!important;', 51066 'font-size:13px!important;', 51067 'font-weight:900!important;', 51068 'line-height:1.15!important;', 51069 'text-align:center!important;', 51070 'text-transform:uppercase!important;', 51071 'letter-spacing:.3px!important;', 51072 'white-space:normal!important;', 51073 'overflow-wrap:break-word!important;', 51074 'border-radius:3px!important;', 51075 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 51076 'pointer-events:none!important;', 51077 '}', 51078 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 51079 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 51080 'background:#d70008!important;', 51081 '}', 51082 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 51083 'background:#000!important;', 51084 '}', 51085 '@media (max-width:767px){', 51086 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 51087 'top:42px!important;', 51088 'left:6px!important;', 51089 'max-width:calc(100% - 12px)!important;', 51090 'padding:6px 8px!important;', 51091 'font-size:10px!important;', 51092 '}', 51093 '}' 51094 ].join(''); 51095 51096 (document.head || document.documentElement).appendChild(style); 51097 } 51098 51099 function normalizeProductId(value) { 51100 var id = String(value == null ? '' : value).trim(); 51101 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 51102 } 51103 51104 function classifyRelatedCategories(relatedCategories) { 51105 var found = { 51106 '292': false, 51107 '294': false, 51108 '296': false, 51109 '298': false 51110 }; 51111 51112 function inspect(value, depth) { 51113 var index; 51114 var normalized; 51115 51116 if (value == null || depth > 8) { 51117 return; 51118 } 51119 51120 if (Array.isArray(value)) { 51121 for (index = 0; index < value.length; index += 1) { 51122 inspect(value[index], depth + 1); 51123 } 51124 return; 51125 } 51126 51127 if (typeof value === 'object') { 51128 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 51129 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 51130 inspect(value.id, depth + 1); 51131 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 51132 inspect(value.category_id, depth + 1); 51133 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 51134 inspect(value.Category, depth + 1); 51135 } 51136 return; 51137 } 51138 51139 if (typeof value !== 'string' && typeof value !== 'number') { 51140 return; 51141 } 51142 normalized = normalizeProductId(value); 51143 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 51144 found[normalized] = true; 51145 } 51146 } 51147 51148 inspect(relatedCategories, 0); 51149 51150 if (found['298']) { 51151 return rules['298']; 51152 } 51153 if (found['296']) { 51154 return rules['296']; 51155 } 51156 if (found['294']) { 51157 return rules['294']; 51158 } 51159 51160 // 292 e qualquer classificacao desconhecida ficam sem tarja. 51161 return null; 51162 } 51163 51164 function ruleFromPayload(payload, productId) { 51165 var product = payload && payload.Product; 51166 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 51167 return null; 51168 } 51169 return classifyRelatedCategories(product && product.related_categories); 51170 } 51171 51172 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 51173 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 51174 function attachTrayAjaxCache() { 51175 var jq = window.jQuery; 51176 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 51177 return; 51178 } 51179
51180 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 51181 var url; 51182 var match; 51183 var productId; 51184 var payload; 51185 try { 51186 url = new URL(settings.url, window.location.href); 51187 if (url.origin !== window.location.origin) { 51188 return; 51189 } 51190 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 51191 if (!match) { 51192 return; 51193 } 51194 productId = normalizeProductId(match[1]); 51195 if (!cache.has(productId) && !pending.has(productId)) { 51196 payload = data || xhr.responseJSON; 51197 if (typeof payload === 'string') { 51198 payload = JSON.parse(payload); 51199 } 51200 if (!payload || !payload.Product || 51201 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 51202 return; 51203 } 51204 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 51205 return; 51206 } 51207 cache.set(productId, ruleFromPayload(payload, productId)); 51208 } 51209 } catch (error) { 51210 // Respostas de outras integracoes nao interferem nas tarjas. 51211 } 51212 }); 51213 51214 trayAjaxHooked = true; 51215 document.removeEventListener('load', onTrayScriptLoad, true); 51216 } 51217 51218 function onTrayScriptLoad(event) { 51219 if (event.target && event.target.tagName === 'SCRIPT') { 51220 attachTrayAjaxCache(); 51221 } 51222 } 51223 51224 function requestRule(productId) { 51225 var controller = null; 51226 var timeoutId = null; 51227 var options = { 51228 credentials: 'same-origin', 51229 headers: { 51230 'Accept': 'application/json' 51231 } 51232 }; 51233 var request; 51234 51235 if (typeof window.fetch !== 'function') { 51236 return Promise.resolve(null); 51237 } 51238 51239 if (typeof window.AbortController === 'function') { 51240 controller = new window.AbortController(); 51241 options.signal = controller.signal; 51242 timeoutId = window.setTimeout(function () { 51243 controller.abort(); 51244 }, REQUEST_TIMEOUT_MS); 51245 } 51246 51247 try { 51248 request = window.fetch( 51249 '/web_api/products/' + encodeURIComponent(productId), 51250 options 51251 ); 51252 } catch (error) { 51253 if (timeoutId !== null) { 51254 window.clearTimeout(timeoutId); 51255 } 51256 return Promise.resolve(null); 51257 } 51258 51259 return request.then(function (response) { 51260 if (!response.ok) { 51261 throw new Error('HTTP ' + response.status); 51262 } 51263 return response.json(); 51264 }).then(function (payload) { 51265 return ruleFromPayload(payload, productId); 51266 }).then(function (rule) { 51267 if (timeoutId !== null) { 51268 window.clearTimeout(timeoutId); 51269 } 51270 return rule; 51271 }, function () { 51272 if (timeoutId !== null) { 51273 window.clearTimeout(timeoutId); 51274 } 51275 51276 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 51277 return null; 51278 }); 51279 } 51280 51281 function finishJob(job, rule) { 51282 cache.set(job.productId, rule); 51283 pending.delete(job.productId); 51284 activeRequests -= 1; 51285 job.resolve(rule); 51286 pumpQueue(); 51287 } 51288 51289 function pumpQueue() { 51290 var job; 51291 51292 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 51293 job = queue.shift(); 51294 activeRequests += 1; 51295 51296 (function (currentJob) { 51297 requestRule(currentJob.productId).then(function (rule) { 51298 finishJob(currentJob, rule); 51299 }, function () { 51300 finishJob(currentJob, null); 51301 }); 51302 }(job)); 51303 } 51304 } 51305 51306 function getRule(productId) { 51307 var resolver; 51308 var promise; 51309 51310 if (cache.has(productId)) { 51311 return Promise.resolve(cache.get(productId)); 51312 } 51313 51314 if (pending.has(productId)) { 51315 return pending.get(productId); 51316 } 51317 51318 promise = new Promise(function (resolve) { 51319 resolver = resolve; 51320 }); 51321 51322 pending.set(productId, promise); 51323 queue.push({ 51324 productId: productId, 51325 resolve: resolver 51326 }); 51327 pumpQueue(); 51328 51329 return promise; 51330 } 51331 51332 function findBadge(card) { 51333 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 51334 } 51335 51336 function clearBadge(card) { 51337 var badge = findBadge(card); 51338 var image = card.querySelector('.product-header > .w-100 > .image'); 51339 51340 if (badge && badge.parentNode) { 51341 badge.parentNode.removeChild(badge); 51342 } 51343 51344 if (image) { 51345 image.classList.remove(HOST_CLASS); 51346 } 51347 51348 card.removeAttribute('data-farmacam-prescription-level'); 51349 } 51350 51351 function applyBadge(card, productId, rule) { 51352 var image; 51353 var badge; 51354 51355 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 51356 return false;
51357 } 51358 51359 clearBadge(card); 51360 51361 if (!rule) { 51362 return true; 51363 } 51364 51365 image = card.querySelector('.product-header > .w-100 > .image'); 51366 if (!image) { 51367 return false; 51368 } 51369 51370 badge = document.createElement('span'); 51371 badge.className = BADGE_CLASS; 51372 badge.setAttribute('data-farmacam-generated', 'true'); 51373 badge.setAttribute('data-farmacam-prescription-level', rule.level); 51374 badge.setAttribute('role', 'note'); 51375 badge.textContent = rule.text; 51376 51377 image.classList.add(HOST_CLASS); 51378 image.insertBefore(badge, image.firstChild); 51379 card.setAttribute('data-farmacam-prescription-level', rule.level); 51380 51381 return true; 51382 } 51383 51384 function processCard(card) { 51385 var productId; 51386 var previousState; 51387 var currentState; 51388 51389 if (!card || card.nodeType !== 1) { 51390 return; 51391 } 51392 51393 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 51394 return; 51395 } 51396 51397 productId = normalizeProductId(card.getAttribute('data-id')); 51398 previousState = cardStates.get(card); 51399 51400 if (!productId) { 51401 clearBadge(card); 51402 cardStates.delete(card); 51403 return; 51404 } 51405 51406 if ( 51407 previousState && 51408 previousState.productId === productId && 51409 previousState.status === 'loading' 51410 ) { 51411 return; 51412 } 51413 51414 if ( 51415 previousState && 51416 previousState.productId === productId && 51417 previousState.status === 'processed' 51418 ) { 51419 if (!previousState.rule || findBadge(card)) { 51420 return; 51421 } 51422 } 51423 51424 if (!previousState || previousState.productId !== productId) { 51425 clearBadge(card); 51426 } 51427 51428 currentState = { 51429 productId: productId, 51430 status: 'loading', 51431 rule: null 51432 }; 51433 cardStates.set(card, currentState); 51434 51435 getRule(productId).then(function (rule) { 51436 var applied; 51437 51438 if ( 51439 cardStates.get(card) !== currentState || 51440 normalizeProductId(card.getAttribute('data-id')) !== productId 51441 ) { 51442 return; 51443 } 51444 51445 applied = applyBadge(card, productId, rule); 51446 currentState.rule = rule; 51447 currentState.status = applied ? 'processed' : 'waiting-image'; 51448 }); 51449 } 51450 51451 function scan(root) { 51452 var cards; 51453 var index; 51454 51455 if (!root) { 51456 return; 51457 } 51458 51459 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 51460 processCard(root); 51461 } 51462 51463 if (!root.querySelectorAll) { 51464 return; 51465 } 51466 51467 cards = root.querySelectorAll(CARD_SELECTOR); 51468 for (index = 0; index < cards.length; index += 1) { 51469 processCard(cards[index]); 51470 } 51471 } 51472 51473 function startObserver() { 51474 var observer; 51475 51476 if (!window.MutationObserver || !document.documentElement) { 51477 return; 51478 } 51479 51480 observer = new MutationObserver(function (mutations) { 51481 var mutationIndex; 51482 var nodeIndex; 51483 var mutation; 51484 var node; 51485 var ownerCard; 51486 51487 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 51488 mutation = mutations[mutationIndex]; 51489 51490 if (mutation.type === 'attributes') { 51491 processCard(mutation.target); 51492 continue; 51493 } 51494 51495 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 51496 node = mutation.addedNodes[nodeIndex]; 51497 if (node.nodeType !== 1) { 51498 continue; 51499 } 51500 51501 scan(node); 51502 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 51503 if (ownerCard) { 51504 processCard(ownerCard); 51505 } 51506 } 51507 } 51508 }); 51509 51510 observer.observe(document.documentElement, { 51511 childList: true, 51512 subtree: true, 51513 attributes: true, 51514 attributeFilter: ['data-id'] 51515 }); 51516 51517 window[GLOBAL_KEY].observer = observer; 51518 } 51519 51520 window[GLOBAL_KEY] = { 51521 version: '1.1.0', 51522 cache: cache, 51523 pending: pending, 51524 cardStates: cardStates, 51525 scan: scan, 51526 processCard: processCard, 51527 observer: null 51528 }; 51529 51530 document.addEventListener('load', onTrayScriptLoad, true); 51531 attachTrayAjaxCache(); 51532 injectStyles(); 51533 scan(document); 51534 startObserver(); 51535 51536 if (document.readyState === 'loading') { 51537 document.addEventListener('DOMContentLoaded', function () { 51538 attachTrayAjaxCache(); 51539 scan(document); 51540 }); 51541 } 51542}(window, document)); 51543</script>
51543 51544 </div> 51545 <div 51546 class="swiper-slide fixWidthBoxProduct item"> 51547 51548 51549 51550 51551<div class="product animate open_cart" 51552 data-id="125238079" 51553 data-farmacam-related-categories="," 51554 data-ga4-id="125238079" 51555 data-ga4-name="Telmisartan" 51556 data-ga4-price="101.00" 51557 data-ga4-brand="Farmacam" 51558 data-ga4-category="Tipo de Produto;Manipulados;" 51559 data-ga4-promotion="50"> 51560 51561 <div class="product-header"> 51562 51563 <div class="w-100"> 51564 51565 51566 51567 51568 51569 51570 51571 51572 <div class="product-tags-circle product-tags-circle-right"> 51573 51574 <div class="tag-circle discount"> 51575 <span> 51576 50% OFF 51577 </span> 51578 </div> 51579 51580 51581 </div> 51582 51583 <div class="product-tags " data-tags-count="0"> 51584 51585 51586 51587 51588 <div class="tag extra fix-Selo"> 51589 <img width="119" height="22" alt="Selo" src="https://images.tcdn.com.br/img/img_prod/1063102/1764006510_oportunidade.png" fetchpriority='high' /> 51590 </div> 51591 51592 </div> 51593 51594 51595 51596 <div class="image "> 51597 51598 <a title="Telmisartan" href="https://www.farmacam.com.br/telmisartan" class="space-image"> 51599 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/telmisartan_125238079_1_9c07c5c7099bb8128f03c0818456bd89.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/telmisartan_125238079_1_9c07c5c7099bb8128f03c0818456bd89.png" alt="Telmisartan"> 51600 </a> 51601 51602 </div> 51603 51604 51605 51606 51607 51608 </div> 51609 51610 </div> 51611 51612 <div class="product-body"> 51613 51614 <a title="Telmisartan" class="product-info" href="https://www.farmacam.com.br/telmisartan"> 51615 51616 <div class="product-info-dados"> 51617 51618 51619 51620 <div class="listagem-produtos-timer-promocao" data-inicial="2026-08-05" data-final="2026-12-01"></div> 51621 51622 51623 51624 <div class="product-name"> 51625 Telmisartan 51626 </div> 51627 51628 51629 51630 <div class="product-price"> 51631 51632 51633 51634 <div class="compre-economize"> 51635 Economize: R$ 51,00 51636 </div> 51637 51638 51639 <span class="product-has-variants text-center"> 51640 A partir de 51641 </span> 51642 51643<div class="price display-cash"> 51644 51645 <span class="old-price"> 51646 R$ 101,00 51647 </span> 51648 51649 <span class="current-price "> 51650 R$ 50,00 51651 51652 </span> 51653 51654 <span class="product-installments"> 51655 51656 </span> 51657 51658</div> 51659 </div> 51660 51661 </div> 51662 51663 </a> 51664 51665 </div> 51666 51667 51668 <div class="product-footer"> 51669 51670 51671 <div class="w-100"> 51672 51673 51674 51675<div class="product-rating-catalog"> 51676 51677 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 51678 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 51679 </svg> 51680 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 51681 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 51682 </svg> 51683 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 51684 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 51685 </svg> 51686 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 51687 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 51688 </svg> 51689 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 51690 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 51691 </svg> 51692 51693 51694 <a title="Ver avaliações de Telmisartan" href="https://www.farmacam.com.br/telmisartan#comments" class="total"> 51695 Seja o primeiro 51696 </a> 51697 51698 </div> 51699 51700 51701 51702 <div class="config-variacoes-compra"> 51703 51704 51705 51706 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125238079"> 51707 <input type="hidden" name="product_id" value="125238079"> 51708 <input type="hidden" name="without_stock_sale" value=""> 51709 51710 <input type="hidden" name="variacao" id="selectedVariant" value=""> 51711 <input type="hidden" name="estoque" value=""> 51712 51713 51714 51715 <ul class="paleta-cores"> 51716 51717 51718 51719 51720 51721 51722 51723 51724 51725 51726 51727 51728 51729 51730 51731 51732 51733 51734 51735 51736 51737 51738 51739 51740 51741 51742 51743 51744 51745 51746 51747 51748 51749 51750 51751 51752 51753 51754 51755 51756 51757 51758 51759 51760 51761 51762 51763 51764 51765 51766 51767 51768 51769 51770 51771 51772 51773 51774 51775 51776 51777 51778 51779 51780 51781 51782 51783 51784 51785 51786 51787 51788 51789 51790 51791 51792 51793 51794 51795 51796 51797 51798 51799 51800 51801 51802 51803 51804 51805 51806 51807 51808 51809 51810 51811 51812 51813 51814 51815 51816 51817 51818 51819 51820 51821 51822 51823 51824 51825 51826 51827 51828 51829 51830 51831 51832 51833 51834 51835 51836 51837 51838 51839 51840 51841 51842 51843 51844 51845 51846 51847 51848 51849 51850 51851 51852 51853 51854 51855 51856 51857 51858 51859 51860 51861 51862 51863 51864 51865 51866 51867 51868 51869 51870 51871 51872 51873 51874 51875 51876 51877 51878 51879 51880 51881 51882 51883 51884 51885 51886 51887 51888 51889 51890 51891 51892 51893 51894 51895 51896 51897 51898 51899 51900 51901 51902 51903 51904 51905 51906 51907 51908 51909 51910 51911 51912 51913 51914 51915 51916 51917 51918 51919 51920 51921 51922 51923 51924 51925 51926 51927 51928 51929 51930 51931 51932 51933 51934 51935 51936 51937 51938 51939 51940 51941 51942 51943 51944 51945 51946 51947 51948 51949 51950 51951 51952 51953 51954 51955 51956 51957 51958 51959 51960 51961 51962 51963 51964 51965 51966 51967 51968 51969 51970 51971 51972 51973 51974 51975 51976
51976 51977 51978 51979 51980 51981 51982 51983 51984 51985 51986 51987 51988 51989 51990 51991 51992 51993 51994 51995 51996 51997 51998 51999 52000 52001 52002 52003 52004 52005 52006 52007 52008 52009 52010 52011 52012 52013 52014 52015 52016 52017 52018 52019 52020 52021 52022 52023 52024 52025 52026 52027 52028 52029 52030 52031 52032 52033 52034 52035 52036 52037 52038 52039 52040 52041 52042 52043 52044 52045 52046 52047 52048 52049 52050 52051 52052 52053 52054 52055 52056 52057 52058 52059 52060 52061 52062 52063 52064 52065 52066 52067 52068 52069 52070 52071 52072 52073 52074 52075 52076 52077 52078 52079 52080 52081 52082 52083 52084 52085 52086 52087 52088 52089 52090 52091 52092 52093 52094 52095 52096 52097 52098 52099 52100 52101 52102 52103 52104 52105 52106 52107 52108 52109 52110 52111 52112 52113 52114 52115 52116 52117 52118 52119 52120 52121 52122 52123 52124 52125 52126 52127 52128 52129 52130 52131 52132 52133 52134 52135 52136 52137 52138 52139 52140 52141 52142 </ul> 52143 <!-- Fim Paleta de Cores --> 52144 52145 52146 52147 52148 52149 52150 52151 52152 52153 52154 52155 52156 52157 52158 52159 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 52160 <option disabled="disabled" value=""> 52161 Selecione 52162 </option> 52163 52164 52165 <option value="14343" produto="125238079" estoque="9997">40 mg - 60 doses</option> 52166 52167 52168 52169 52170 <option value="14345" produto="125238079" estoque="9999">80 mg - 30 doses</option> 52171 52172 52173 52174 52175 <option value="14347" produto="125238079" estoque="10000">80 mg - 60 doses</option> 52176 52177 52178 </select> 52179 52180 52181 <select class="select-cor" style="display: none;" title="Campo Cor"> 52182
52182 </select> 52183 52184 52185 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 52186 <div class="alerta-estoque"></div> 52187 <div class="alerta-adicionado"></div> 52188 52189 <div class="acao-compra"> 52190 52191 <div class="quantidade-box"> 52192 <div class="quantidade-box-input"> 52193 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
52193stoque="29996" /> 52194 </div> 52195 <div class="quantidade-box-controles"> 52196 <div class="quantidade-box-controles-itens" data-item="mais"> 52197 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 52198 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 52199 </svg> 52200 </div> 52201 <div class="quantidade-box-controles-itens" data-item="menus"> 52202 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 52203 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 52204 </svg> 52205 </div> 52206 </div> 52207 </div> 52208 52209 52210 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125238079"> 52211 52212 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 52213 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 52214 52215 52216 52217 52218 52219 52220 <!-- Cesta de Compras --> 52221 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 52222 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 52223 </svg> 52224 52225 52226 52227 Comprar 52228 52229 52230 </button> 52231 <!-- </form> --> 52232 52233 </div> 52234 52235</div> 52236 52237 52238 </div> 52239 52240 </div> 52241 52242 52243</div> 52244
52245<script> 52246(function (window, document) { 52247 'use strict'; 52248 52249 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 52250 52251 if (window[GLOBAL_KEY]) { 52252 return; 52253 } 52254 52255 if (!window.Map || !window.WeakMap || !window.Promise) { 52256 return; 52257 } 52258 52259 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 52260 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 52261 '#vitrine-personalizada .product[data-id]'; 52262 var BADGE_CLASS = 'farmacam-prescription-badge'; 52263 var HOST_CLASS = 'farmacam-prescription-badge-host'; 52264 var MAX_CONCURRENT_REQUESTS = 6; 52265 var REQUEST_TIMEOUT_MS = 12000; 52266 52267 var rules = { 52268 '294': { 52269 level: '294', 52270 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 52271 }, 52272 '296': { 52273 level: '296', 52274 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 52275 }, 52276 '298': { 52277 level: '298', 52278 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 52279 } 52280 }; 52281 52282 var cache = new Map(); 52283 var pending = new Map(); 52284 var cardStates = new WeakMap(); 52285 var queue = []; 52286 var activeRequests = 0; 52287 var trayAjaxHooked = false; 52288 52289 function injectStyles() { 52290 if (document.getElementById('farmacam-prescription-cards-style')) { 52291 return; 52292 } 52293 52294 var style = document.createElement('style'); 52295 style.id = 'farmacam-prescription-cards-style'; 52296 style.textContent = [ 52297 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 52298 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 52299 'position:absolute!important;', 52300 'top:52px!important;', 52301 'left:10px!important;', 52302 'z-index:999!important;', 52303 'display:block!important;', 52304 'max-width:calc(100% - 20px)!important;', 52305 'box-sizing:border-box!important;', 52306 'padding:8px 12px!important;', 52307 'color:#fff!important;', 52308 'font-family:inherit!important;', 52309 'font-size:13px!important;', 52310 'font-weight:900!important;', 52311 'line-height:1.15!important;', 52312 'text-align:center!important;', 52313 'text-transform:uppercase!important;', 52314 'letter-spacing:.3px!important;', 52315 'white-space:normal!important;', 52316 'overflow-wrap:break-word!important;', 52317 'border-radius:3px!important;', 52318 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 52319 'pointer-events:none!important;', 52320 '}', 52321 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 52322 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 52323 'background:#d70008!important;', 52324 '}', 52325 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 52326 'background:#000!important;', 52327 '}', 52328 '@media (max-width:767px){', 52329 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 52330 'top:42px!important;', 52331 'left:6px!important;', 52332 'max-width:calc(100% - 12px)!important;', 52333 'padding:6px 8px!important;', 52334 'font-size:10px!important;', 52335 '}', 52336 '}' 52337 ].join(''); 52338 52339 (document.head || document.documentElement).appendChild(style); 52340 } 52341 52342 function normalizeProductId(value) { 52343 var id = String(value == null ? '' : value).trim(); 52344 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 52345 } 52346 52347 function classifyRelatedCategories(relatedCategories) { 52348 var found = { 52349 '292': false, 52350 '294': false, 52351 '296': false, 52352 '298': false 52353 }; 52354 52355 function inspect(value, depth) { 52356 var index; 52357 var normalized; 52358 52359 if (value == null || depth > 8) { 52360 return; 52361 } 52362 52363 if (Array.isArray(value)) { 52364 for (index = 0; index < value.length; index += 1) { 52365 inspect(value[index], depth + 1); 52366 } 52367 return; 52368 } 52369 52370 if (typeof value === 'object') { 52371 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 52372 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 52373 inspect(value.id, depth + 1); 52374 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 52375 inspect(value.category_id, depth + 1); 52376 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 52377 inspect(value.Category, depth + 1); 52378 } 52379 return; 52380 } 52381 52382 if (typeof value !== 'string' && typeof value !== 'number') { 52383 return; 52384 } 52385 normalized = normalizeProductId(value); 52386 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 52387 found[normalized] = true; 52388 } 52389 } 52390 52391 inspect(relatedCategories, 0); 52392 52393 if (found['298']) { 52394 return rules['298']; 52395 } 52396 if (found['296']) { 52397 return rules['296']; 52398 } 52399 if (found['294']) { 52400 return rules['294']; 52401 } 52402 52403 // 292 e qualquer classificacao desconhecida ficam sem tarja. 52404 return null; 52405 } 52406 52407 function ruleFromPayload(payload, productId) { 52408 var product = payload && payload.Product; 52409 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 52410 return null; 52411 } 52412 return classifyRelatedCategories(product && product.related_categories); 52413 } 52414 52415 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 52416 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 52417 function attachTrayAjaxCache() { 52418 var jq = window.jQuery; 52419 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 52420 return; 52421 } 52422
52423 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 52424 var url; 52425 var match; 52426 var productId; 52427 var payload; 52428 try { 52429 url = new URL(settings.url, window.location.href); 52430 if (url.origin !== window.location.origin) { 52431 return; 52432 } 52433 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 52434 if (!match) { 52435 return; 52436 } 52437 productId = normalizeProductId(match[1]); 52438 if (!cache.has(productId) && !pending.has(productId)) { 52439 payload = data || xhr.responseJSON; 52440 if (typeof payload === 'string') { 52441 payload = JSON.parse(payload); 52442 } 52443 if (!payload || !payload.Product || 52444 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 52445 return; 52446 } 52447 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 52448 return; 52449 } 52450 cache.set(productId, ruleFromPayload(payload, productId)); 52451 } 52452 } catch (error) { 52453 // Respostas de outras integracoes nao interferem nas tarjas. 52454 } 52455 }); 52456 52457 trayAjaxHooked = true; 52458 document.removeEventListener('load', onTrayScriptLoad, true); 52459 } 52460 52461 function onTrayScriptLoad(event) { 52462 if (event.target && event.target.tagName === 'SCRIPT') { 52463 attachTrayAjaxCache(); 52464 } 52465 } 52466 52467 function requestRule(productId) { 52468 var controller = null; 52469 var timeoutId = null; 52470 var options = { 52471 credentials: 'same-origin', 52472 headers: { 52473 'Accept': 'application/json' 52474 } 52475 }; 52476 var request; 52477 52478 if (typeof window.fetch !== 'function') { 52479 return Promise.resolve(null); 52480 } 52481 52482 if (typeof window.AbortController === 'function') { 52483 controller = new window.AbortController(); 52484 options.signal = controller.signal; 52485 timeoutId = window.setTimeout(function () { 52486 controller.abort(); 52487 }, REQUEST_TIMEOUT_MS); 52488 } 52489 52490 try { 52491 request = window.fetch( 52492 '/web_api/products/' + encodeURIComponent(productId), 52493 options 52494 ); 52495 } catch (error) { 52496 if (timeoutId !== null) { 52497 window.clearTimeout(timeoutId); 52498 } 52499 return Promise.resolve(null); 52500 } 52501 52502 return request.then(function (response) { 52503 if (!response.ok) { 52504 throw new Error('HTTP ' + response.status); 52505 } 52506 return response.json(); 52507 }).then(function (payload) { 52508 return ruleFromPayload(payload, productId); 52509 }).then(function (rule) { 52510 if (timeoutId !== null) { 52511 window.clearTimeout(timeoutId); 52512 } 52513 return rule; 52514 }, function () { 52515 if (timeoutId !== null) { 52516 window.clearTimeout(timeoutId); 52517 } 52518 52519 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 52520 return null; 52521 }); 52522 } 52523 52524 function finishJob(job, rule) { 52525 cache.set(job.productId, rule); 52526 pending.delete(job.productId); 52527 activeRequests -= 1; 52528 job.resolve(rule); 52529 pumpQueue(); 52530 } 52531 52532 function pumpQueue() { 52533 var job; 52534 52535 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 52536 job = queue.shift(); 52537 activeRequests += 1; 52538 52539 (function (currentJob) { 52540 requestRule(currentJob.productId).then(function (rule) { 52541 finishJob(currentJob, rule); 52542 }, function () { 52543 finishJob(currentJob, null); 52544 }); 52545 }(job)); 52546 } 52547 } 52548 52549 function getRule(productId) { 52550 var resolver; 52551 var promise; 52552 52553 if (cache.has(productId)) { 52554 return Promise.resolve(cache.get(productId)); 52555 } 52556 52557 if (pending.has(productId)) { 52558 return pending.get(productId); 52559 } 52560 52561 promise = new Promise(function (resolve) { 52562 resolver = resolve; 52563 }); 52564 52565 pending.set(productId, promise); 52566 queue.push({ 52567 productId: productId, 52568 resolve: resolver 52569 }); 52570 pumpQueue(); 52571 52572 return promise; 52573 } 52574 52575 function findBadge(card) { 52576 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 52577 } 52578 52579 function clearBadge(card) { 52580 var badge = findBadge(card); 52581 var image = card.querySelector('.product-header > .w-100 > .image'); 52582 52583 if (badge && badge.parentNode) { 52584 badge.parentNode.removeChild(badge); 52585 } 52586 52587 if (image) { 52588 image.classList.remove(HOST_CLASS); 52589 } 52590 52591 card.removeAttribute('data-farmacam-prescription-level'); 52592 } 52593 52594 function applyBadge(card, productId, rule) { 52595 var image; 52596 var badge; 52597 52598 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 52599 return false;
52600 } 52601 52602 clearBadge(card); 52603 52604 if (!rule) { 52605 return true; 52606 } 52607 52608 image = card.querySelector('.product-header > .w-100 > .image'); 52609 if (!image) { 52610 return false; 52611 } 52612 52613 badge = document.createElement('span'); 52614 badge.className = BADGE_CLASS; 52615 badge.setAttribute('data-farmacam-generated', 'true'); 52616 badge.setAttribute('data-farmacam-prescription-level', rule.level); 52617 badge.setAttribute('role', 'note'); 52618 badge.textContent = rule.text; 52619 52620 image.classList.add(HOST_CLASS); 52621 image.insertBefore(badge, image.firstChild); 52622 card.setAttribute('data-farmacam-prescription-level', rule.level); 52623 52624 return true; 52625 } 52626 52627 function processCard(card) { 52628 var productId; 52629 var previousState; 52630 var currentState; 52631 52632 if (!card || card.nodeType !== 1) { 52633 return; 52634 } 52635 52636 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 52637 return; 52638 } 52639 52640 productId = normalizeProductId(card.getAttribute('data-id')); 52641 previousState = cardStates.get(card); 52642 52643 if (!productId) { 52644 clearBadge(card); 52645 cardStates.delete(card); 52646 return; 52647 } 52648 52649 if ( 52650 previousState && 52651 previousState.productId === productId && 52652 previousState.status === 'loading' 52653 ) { 52654 return; 52655 } 52656 52657 if ( 52658 previousState && 52659 previousState.productId === productId && 52660 previousState.status === 'processed' 52661 ) { 52662 if (!previousState.rule || findBadge(card)) { 52663 return; 52664 } 52665 } 52666 52667 if (!previousState || previousState.productId !== productId) { 52668 clearBadge(card); 52669 } 52670 52671 currentState = { 52672 productId: productId, 52673 status: 'loading', 52674 rule: null 52675 }; 52676 cardStates.set(card, currentState); 52677 52678 getRule(productId).then(function (rule) { 52679 var applied; 52680 52681 if ( 52682 cardStates.get(card) !== currentState || 52683 normalizeProductId(card.getAttribute('data-id')) !== productId 52684 ) { 52685 return; 52686 } 52687 52688 applied = applyBadge(card, productId, rule); 52689 currentState.rule = rule; 52690 currentState.status = applied ? 'processed' : 'waiting-image'; 52691 }); 52692 } 52693 52694 function scan(root) { 52695 var cards; 52696 var index; 52697 52698 if (!root) { 52699 return; 52700 } 52701 52702 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 52703 processCard(root); 52704 } 52705 52706 if (!root.querySelectorAll) { 52707 return; 52708 } 52709 52710 cards = root.querySelectorAll(CARD_SELECTOR); 52711 for (index = 0; index < cards.length; index += 1) { 52712 processCard(cards[index]); 52713 } 52714 } 52715 52716 function startObserver() { 52717 var observer; 52718 52719 if (!window.MutationObserver || !document.documentElement) { 52720 return; 52721 } 52722 52723 observer = new MutationObserver(function (mutations) { 52724 var mutationIndex; 52725 var nodeIndex; 52726 var mutation; 52727 var node; 52728 var ownerCard; 52729 52730 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 52731 mutation = mutations[mutationIndex]; 52732 52733 if (mutation.type === 'attributes') { 52734 processCard(mutation.target); 52735 continue; 52736 } 52737 52738 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 52739 node = mutation.addedNodes[nodeIndex]; 52740 if (node.nodeType !== 1) { 52741 continue; 52742 } 52743 52744 scan(node); 52745 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 52746 if (ownerCard) { 52747 processCard(ownerCard); 52748 } 52749 } 52750 } 52751 }); 52752 52753 observer.observe(document.documentElement, { 52754 childList: true, 52755 subtree: true, 52756 attributes: true, 52757 attributeFilter: ['data-id'] 52758 }); 52759 52760 window[GLOBAL_KEY].observer = observer; 52761 } 52762 52763 window[GLOBAL_KEY] = { 52764 version: '1.1.0', 52765 cache: cache, 52766 pending: pending, 52767 cardStates: cardStates, 52768 scan: scan, 52769 processCard: processCard, 52770 observer: null 52771 }; 52772 52773 document.addEventListener('load', onTrayScriptLoad, true); 52774 attachTrayAjaxCache(); 52775 injectStyles(); 52776 scan(document); 52777 startObserver(); 52778 52779 if (document.readyState === 'loading') { 52780 document.addEventListener('DOMContentLoaded', function () { 52781 attachTrayAjaxCache(); 52782 scan(document); 52783 }); 52784 } 52785}(window, document)); 52786</script>
52786 52787 </div> 52788 <div 52789 class="swiper-slide fixWidthBoxProduct item"> 52790 52791 52792 52793 52794<div class="product animate open_cart" 52795 data-id="125236597" 52796 data-farmacam-related-categories="," 52797 data-ga4-id="125236597" 52798 data-ga4-name="Cartidyss" 52799 data-ga4-price="101.00" 52800 data-ga4-brand="Farmacam" 52801 data-ga4-category="Tipo de Produto;Manipulados;" 52802 data-ga4-promotion="71"> 52803 52804 <div class="product-header"> 52805 52806 <div class="w-100"> 52807 52808 52809 52810 52811 52812 52813 52814 52815 <div class="product-tags-circle product-tags-circle-right"> 52816 52817 <div class="tag-circle discount"> 52818 <span> 52819 30% OFF 52820 </span> 52821 </div> 52822 52823 52824 </div> 52825 52826 <div class="product-tags " data-tags-count="0"> 52827 52828 52829 52830 52831 <div class="tag extra fix-Selo"> 52832 <img width="119" height="22" alt="Selo" src="https://images.tcdn.com.br/img/img_prod/1063102/1764006510_oportunidade.png" fetchpriority='high' /> 52833 </div> 52834 52835 </div> 52836 52837 52838 52839 <div class="image "> 52840 52841 <a title="Cartidyss" href="https://www.farmacam.com.br/cartidyss" class="space-image"> 52842 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/cartidyss_125236597_1_8727b65047399099ae636271a17bd243.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/cartidyss_125236597_1_8727b65047399099ae636271a17bd243.png" alt="Cartidyss"> 52843 </a> 52844 52845 </div> 52846 52847 52848 52849 52850 52851 </div> 52852 52853 </div> 52854 52855 <div class="product-body"> 52856 52857 <a title="Cartidyss" class="product-info" href="https://www.farmacam.com.br/cartidyss"> 52858 52859 <div class="product-info-dados"> 52860 52861 52862 52863 <div class="listagem-produtos-timer-promocao" data-inicial="2026-08-05" data-final="2026-10-26"></div> 52864 52865 52866 52867 <div class="product-name"> 52868 Cartidyss 52869 </div> 52870 52871 52872 52873 <div class="product-price"> 52874 52875 52876 52877 <div class="compre-economize"> 52878 Economize: R$ 30,00 52879 </div> 52880 52881 52882 <span class="product-has-variants text-center"> 52883 A partir de 52884 </span> 52885 52886<div class="price display-cash"> 52887 52888 <span class="old-price"> 52889 R$ 101,00 52890 </span> 52891 52892 <span class="current-price "> 52893 R$ 71,00 52894 52895 </span> 52896 52897 <span class="product-installments"> 52898 52899 </span> 52900 52901</div> 52902 </div> 52903 52904 </div> 52905 52906 </a> 52907 52908 </div> 52909 52910 52911 <div class="product-footer"> 52912 52913 52914 <div class="w-100"> 52915 52916 52917 52918<div class="product-rating-catalog"> 52919 52920 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 52921 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 52922 </svg> 52923 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 52924 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 52925 </svg> 52926 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 52927 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 52928 </svg> 52929 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 52930 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 52931 </svg> 52932 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 52933 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 52934 </svg> 52935 52936 52937 <a title="Ver avaliações de Cartidyss" href="https://www.farmacam.com.br/cartidyss#comments" class="total"> 52938 Seja o primeiro 52939 </a> 52940 52941 </div> 52942 52943 52944 52945 <div class="config-variacoes-compra"> 52946 52947 52948 52949 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125236597"> 52950 <input type="hidden" name="product_id" value="125236597"> 52951 <input type="hidden" name="without_stock_sale" value=""> 52952 52953 <input type="hidden" name="variacao" id="selectedVariant" value=""> 52954 <input type="hidden" name="estoque" value=""> 52955 52956 52957 52958 <ul class="paleta-cores"> 52959 52960 52961 52962 52963 52964 52965 52966 52967 52968 52969 52970 52971 52972 52973 52974 52975 52976 52977 52978 52979 52980 52981 52982 52983 52984 52985 52986 52987 52988 52989 52990 52991 52992 52993 52994 52995 52996 52997 52998 52999 53000 53001 53002 53003 53004 53005 53006 53007 53008 53009 53010 53011 53012 53013 53014 53015 53016 53017 53018 53019 53020 53021 53022 53023 53024 53025 53026 53027 53028 53029 53030 53031 53032 53033 53034 53035 53036 53037 53038 53039 53040 53041 53042 53043 53044 53045 53046 53047 53048 53049 53050 53051 53052 53053 53054 53055 53056 53057 53058 53059 53060 53061 53062 53063 53064 53065 53066 53067 53068 53069 53070 53071 53072 53073 53074 53075 53076 53077 53078 53079 53080 53081 53082 53083 53084 53085 53086 53087 53088 53089 53090 53091 53092 53093 53094 53095 53096 53097 53098 53099 53100 53101 53102 53103 53104 53105 53106 53107 53108 53109 53110 53111 53112 53113 53114 53115 53116 53117 53118 53119 53120 53121 53122 53123 53124 53125 53126 53127 53128 53129 53130 53131 53132 53133 53134 53135 53136 53137 53138 53139 53140 53141 53142 53143 53144 53145 53146 53147 53148 53149 53150 53151 53152 53153 53154 53155 53156 53157 53158 53159 53160 53161 53162 53163 53164 53165 53166 53167 53168 53169 53170 53171 53172 53173 53174 53175 53176 53177 53178 53179 53180 53181 53182 53183 53184 53185 53186 53187 53188 53189 53190 53191 53192 53193 53194 53195 53196 53197 53198 53199 53200 53201 53202 53203 53204 53205 53206 53207 53208 53209 53210 53211 53212 53213 53214 53215
53215 53216 53217 53218 53219 53220 53221 53222 53223 53224 53225 53226 53227 53228 53229 53230 53231 53232 53233 53234 53235 53236 53237 53238 53239 53240 53241 53242 53243 53244 53245 53246 53247 53248 53249 53250 53251 53252 53253 53254 53255 53256 53257 53258 53259 53260 53261 53262 53263 53264 53265 53266 53267 53268 53269 53270 53271 53272 53273 53274 53275 53276 53277 53278 53279 53280 53281 53282 53283 53284 53285 53286 53287 53288 53289 53290 53291 53292 53293 53294 53295 53296 53297 53298 53299 53300 53301 53302 53303 53304 53305 53306 53307 53308 53309 53310 53311 53312 53313 53314 53315 53316 53317 53318 53319 53320 53321 53322 53323 53324 53325 53326 53327 53328 53329 53330 53331 53332 53333 53334 53335 53336 53337 53338 53339 53340 53341 53342 53343 53344 53345 53346 53347 53348 53349 53350 53351 53352 53353 53354 53355 53356 53357 53358 53359 53360 53361 53362 53363 53364 53365 53366 53367 53368 53369 53370 53371 53372 53373 53374 53375 53376 53377 53378 53379 53380 53381 53382 53383 53384 53385 53386 53387 53388 53389 53390 53391 53392 53393 53394 53395 53396 53397 53398 53399 53400 53401 53402 53403 53404 53405 53406 53407 53408 53409 53410 53411 53412 53413 53414 53415 53416 53417 53418 53419 53420 53421 53422 53423 53424 53425 53426 53427 53428 53429 53430 53431 53432 53433 53434 53435 53436 53437 53438 53439 53440 53441 53442 53443 53444 53445 53446 53447 53448 53449 53450 53451 53452 53453 53454 53455 53456 53457 53458 53459 53460 53461 53462 53463 53464 53465 53466 53467 53468 53469 53470 53471 53472 53473 53474 53475 53476 53477 53478 53479 53480 53481 53482 53483 53484 53485 53486 53487 53488 53489 53490 53491 53492 53493 53494 53495 53496 53497 53498 53499 53500 53501 53502 53503 53504 53505 53506 53507 53508 53509 53510 53511 53512 53513 53514 53515 53516 53517 53518 53519 53520 53521 53522 53523 53524 53525 53526 53527 53528 53529 53530 53531 53532 53533 53534 53535 53536 53537 53538 53539 53540 53541 53542 53543 53544 53545 53546 53547 53548 53549 53550 53551 53552 53553 53554 53555 53556 53557 53558 53559 53560 53561 53562 53563 53564 53565 53566 53567 53568 53569 53570 53571 53572 53573 53574 53575 53576 53577 53578 53579 53580 53581 53582 53583 53584 53585 53586 53587 53588 53589 53590 53591 53592 53593 53594 53595 53596 53597 53598 53599 53600 53601 53602 53603 53604 53605 53606 53607 53608 53609 53610 53611 53612 53613 53614 53615 53616 53617 53618 53619 53620 53621 53622 53623
53623 53624 53625 53626 53627 53628 53629 53630 53631 53632 53633 53634 53635 53636 53637 53638 53639 53640 53641 53642 53643 53644 53645 53646 53647 53648 53649 53650 53651 53652 53653 53654 53655 53656 53657 53658 53659 53660 53661 53662 53663 53664 53665 53666 53667 53668 53669 53670 53671 53672 53673 53674 53675 53676 53677 53678 53679 53680 53681 53682 53683 53684 53685 53686 53687 53688 53689 53690 53691 53692 53693 53694 53695 53696 53697 53698 53699 53700 53701 53702 53703 53704 53705 53706 53707 53708 53709 53710 53711 53712 53713 53714 53715 53716 53717 53718 53719 53720 53721 53722 53723 53724 53725 53726 53727 53728 53729 53730 53731 53732 53733 53734 53735 53736 53737 53738 53739 53740 53741 53742 53743 53744 53745 53746 53747 53748 53749 53750 53751 53752 53753 53754 53755 53756 53757 53758 53759 53760 53761 53762 53763 53764 53765 53766 53767 53768 53769 53770 53771 53772 53773 53774 53775 53776 53777 53778 53779 53780 53781 53782 53783 53784 53785 53786 53787 53788 53789 53790 53791 53792 53793 53794 53795 53796 53797 53798 53799 53800 53801 53802 53803 53804 53805 53806 53807 53808 53809 53810 53811 53812 53813 53814 53815 53816 53817 53818 53819 53820 53821 53822 53823 53824 53825 53826 53827 53828 53829 53830 53831 53832 53833 53834 53835 53836 53837 53838 53839 53840 53841 53842 53843 53844 53845 53846 53847 53848 53849 53850 53851 53852 53853 53854 53855 </ul> 53856 <!-- Fim Paleta de Cores --> 53857 53858 53859 53860 53861 53862 53863 53864 53865 53866 53867 53868 53869 53870 53871 53872 53873 53874 53875 53876 53877 53878 53879 53880 53881 53882 53883 53884 53885 53886 53887 53888 53889 53890 53891 53892 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 53893 <option disabled="disabled" value=""> 53894 Selecione 53895 </option> 53896 53897 53898 <option value="8521" produto="125236597" estoque="10000">200 mg - 60 doses</option> 53899 53900 53901 53902 53903 <option value="8523" produto="125236597" estoque="10000">300 mg - 60 doses</option> 53904 53905 53906 53907 53908 <option value="8525" produto="125236597" estoque="10000">400 mg - 60 doses</option> 53909 53910 53911 53912 53913 <option value="8527" produto="125236597" estoque="10000">500 mg - 60 doses</option> 53914 53915 53916 53917 53918 <option value="8529" produto="125236597" estoque="10000">1.000 mg - 30 doses</option> 53919 53920 53921 53922 53923 <option value="8531" produto="125236597" estoque="10000">1.500 mg - 30 doses</option> 53924 53925 53926 53927 53928 <option value="8533" produto="125236597" estoque="10000">2.000 mg - 30 Doses</option> 53929
53929 53930 53931 53932 53933 <option value="8535" produto="125236597" estoque="10000">2.500 mg - 30 Doses</option> 53934 53935 53936 </select> 53937 53938 53939 <select class="select-cor" style="display: none;" title="Campo Cor"> 53940
53940 </select> 53941 53942 53943 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 53944 <div class="alerta-estoque"></div> 53945 <div class="alerta-adicionado"></div> 53946 53947 <div class="acao-compra"> 53948 53949 <div class="quantidade-box"> 53950 <div class="quantidade-box-input"> 53951 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
53951stoque="80000" /> 53952 </div> 53953 <div class="quantidade-box-controles"> 53954 <div class="quantidade-box-controles-itens" data-item="mais"> 53955 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 53956 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 53957 </svg> 53958 </div> 53959 <div class="quantidade-box-controles-itens" data-item="menus"> 53960 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 53961 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 53962 </svg> 53963 </div> 53964 </div> 53965 </div> 53966 53967 53968 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125236597"> 53969 53970 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 53971 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 53972 53973 53974 53975 53976 53977 53978 <!-- Cesta de Compras --> 53979 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 53980 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 53981 </svg> 53982 53983 53984 53985 Comprar 53986 53987 53988 </button> 53989 <!-- </form> --> 53990 53991 </div> 53992 53993</div> 53994 53995 53996 </div> 53997 53998 </div> 53999 54000 54001</div> 54002
54003<script> 54004(function (window, document) { 54005 'use strict'; 54006 54007 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 54008 54009 if (window[GLOBAL_KEY]) { 54010 return; 54011 } 54012 54013 if (!window.Map || !window.WeakMap || !window.Promise) { 54014 return; 54015 } 54016 54017 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 54018 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 54019 '#vitrine-personalizada .product[data-id]'; 54020 var BADGE_CLASS = 'farmacam-prescription-badge'; 54021 var HOST_CLASS = 'farmacam-prescription-badge-host'; 54022 var MAX_CONCURRENT_REQUESTS = 6; 54023 var REQUEST_TIMEOUT_MS = 12000; 54024 54025 var rules = { 54026 '294': { 54027 level: '294', 54028 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 54029 }, 54030 '296': { 54031 level: '296', 54032 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 54033 }, 54034 '298': { 54035 level: '298', 54036 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 54037 } 54038 }; 54039 54040 var cache = new Map(); 54041 var pending = new Map(); 54042 var cardStates = new WeakMap(); 54043 var queue = []; 54044 var activeRequests = 0; 54045 var trayAjaxHooked = false; 54046 54047 function injectStyles() { 54048 if (document.getElementById('farmacam-prescription-cards-style')) { 54049 return; 54050 } 54051 54052 var style = document.createElement('style'); 54053 style.id = 'farmacam-prescription-cards-style'; 54054 style.textContent = [ 54055 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 54056 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 54057 'position:absolute!important;', 54058 'top:52px!important;', 54059 'left:10px!important;', 54060 'z-index:999!important;', 54061 'display:block!important;', 54062 'max-width:calc(100% - 20px)!important;', 54063 'box-sizing:border-box!important;', 54064 'padding:8px 12px!important;', 54065 'color:#fff!important;', 54066 'font-family:inherit!important;', 54067 'font-size:13px!important;', 54068 'font-weight:900!important;', 54069 'line-height:1.15!important;', 54070 'text-align:center!important;', 54071 'text-transform:uppercase!important;', 54072 'letter-spacing:.3px!important;', 54073 'white-space:normal!important;', 54074 'overflow-wrap:break-word!important;', 54075 'border-radius:3px!important;', 54076 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 54077 'pointer-events:none!important;', 54078 '}', 54079 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 54080 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 54081 'background:#d70008!important;', 54082 '}', 54083 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 54084 'background:#000!important;', 54085 '}', 54086 '@media (max-width:767px){', 54087 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 54088 'top:42px!important;', 54089 'left:6px!important;', 54090 'max-width:calc(100% - 12px)!important;', 54091 'padding:6px 8px!important;', 54092 'font-size:10px!important;', 54093 '}', 54094 '}' 54095 ].join(''); 54096 54097 (document.head || document.documentElement).appendChild(style); 54098 } 54099 54100 function normalizeProductId(value) { 54101 var id = String(value == null ? '' : value).trim(); 54102 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 54103 } 54104 54105 function classifyRelatedCategories(relatedCategories) { 54106 var found = { 54107 '292': false, 54108 '294': false, 54109 '296': false, 54110 '298': false 54111 }; 54112 54113 function inspect(value, depth) { 54114 var index; 54115 var normalized; 54116 54117 if (value == null || depth > 8) { 54118 return; 54119 } 54120 54121 if (Array.isArray(value)) { 54122 for (index = 0; index < value.length; index += 1) { 54123 inspect(value[index], depth + 1); 54124 } 54125 return; 54126 } 54127 54128 if (typeof value === 'object') { 54129 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 54130 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 54131 inspect(value.id, depth + 1); 54132 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 54133 inspect(value.category_id, depth + 1); 54134 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 54135 inspect(value.Category, depth + 1); 54136 } 54137 return; 54138 } 54139 54140 if (typeof value !== 'string' && typeof value !== 'number') { 54141 return; 54142 } 54143 normalized = normalizeProductId(value); 54144 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 54145 found[normalized] = true; 54146 } 54147 } 54148 54149 inspect(relatedCategories, 0); 54150 54151 if (found['298']) { 54152 return rules['298']; 54153 } 54154 if (found['296']) { 54155 return rules['296']; 54156 } 54157 if (found['294']) { 54158 return rules['294']; 54159 } 54160 54161 // 292 e qualquer classificacao desconhecida ficam sem tarja. 54162 return null; 54163 } 54164 54165 function ruleFromPayload(payload, productId) { 54166 var product = payload && payload.Product; 54167 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 54168 return null; 54169 } 54170 return classifyRelatedCategories(product && product.related_categories); 54171 } 54172 54173 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 54174 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 54175 function attachTrayAjaxCache() { 54176 var jq = window.jQuery; 54177 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 54178 return; 54179 } 54180
54181 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 54182 var url; 54183 var match; 54184 var productId; 54185 var payload; 54186 try { 54187 url = new URL(settings.url, window.location.href); 54188 if (url.origin !== window.location.origin) { 54189 return; 54190 } 54191 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 54192 if (!match) { 54193 return; 54194 } 54195 productId = normalizeProductId(match[1]); 54196 if (!cache.has(productId) && !pending.has(productId)) { 54197 payload = data || xhr.responseJSON; 54198 if (typeof payload === 'string') { 54199 payload = JSON.parse(payload); 54200 } 54201 if (!payload || !payload.Product || 54202 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 54203 return; 54204 } 54205 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 54206 return; 54207 } 54208 cache.set(productId, ruleFromPayload(payload, productId)); 54209 } 54210 } catch (error) { 54211 // Respostas de outras integracoes nao interferem nas tarjas. 54212 } 54213 }); 54214 54215 trayAjaxHooked = true; 54216 document.removeEventListener('load', onTrayScriptLoad, true); 54217 } 54218 54219 function onTrayScriptLoad(event) { 54220 if (event.target && event.target.tagName === 'SCRIPT') { 54221 attachTrayAjaxCache(); 54222 } 54223 } 54224 54225 function requestRule(productId) { 54226 var controller = null; 54227 var timeoutId = null; 54228 var options = { 54229 credentials: 'same-origin', 54230 headers: { 54231 'Accept': 'application/json' 54232 } 54233 }; 54234 var request; 54235 54236 if (typeof window.fetch !== 'function') { 54237 return Promise.resolve(null); 54238 } 54239 54240 if (typeof window.AbortController === 'function') { 54241 controller = new window.AbortController(); 54242 options.signal = controller.signal; 54243 timeoutId = window.setTimeout(function () { 54244 controller.abort(); 54245 }, REQUEST_TIMEOUT_MS); 54246 } 54247 54248 try { 54249 request = window.fetch( 54250 '/web_api/products/' + encodeURIComponent(productId), 54251 options 54252 ); 54253 } catch (error) { 54254 if (timeoutId !== null) { 54255 window.clearTimeout(timeoutId); 54256 } 54257 return Promise.resolve(null); 54258 } 54259 54260 return request.then(function (response) { 54261 if (!response.ok) { 54262 throw new Error('HTTP ' + response.status); 54263 } 54264 return response.json(); 54265 }).then(function (payload) { 54266 return ruleFromPayload(payload, productId); 54267 }).then(function (rule) { 54268 if (timeoutId !== null) { 54269 window.clearTimeout(timeoutId); 54270 } 54271 return rule; 54272 }, function () { 54273 if (timeoutId !== null) { 54274 window.clearTimeout(timeoutId); 54275 } 54276 54277 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 54278 return null; 54279 }); 54280 } 54281 54282 function finishJob(job, rule) { 54283 cache.set(job.productId, rule); 54284 pending.delete(job.productId); 54285 activeRequests -= 1; 54286 job.resolve(rule); 54287 pumpQueue(); 54288 } 54289 54290 function pumpQueue() { 54291 var job; 54292 54293 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 54294 job = queue.shift(); 54295 activeRequests += 1; 54296 54297 (function (currentJob) { 54298 requestRule(currentJob.productId).then(function (rule) { 54299 finishJob(currentJob, rule); 54300 }, function () { 54301 finishJob(currentJob, null); 54302 }); 54303 }(job)); 54304 } 54305 } 54306 54307 function getRule(productId) { 54308 var resolver; 54309 var promise; 54310 54311 if (cache.has(productId)) { 54312 return Promise.resolve(cache.get(productId)); 54313 } 54314 54315 if (pending.has(productId)) { 54316 return pending.get(productId); 54317 } 54318 54319 promise = new Promise(function (resolve) { 54320 resolver = resolve; 54321 }); 54322 54323 pending.set(productId, promise); 54324 queue.push({ 54325 productId: productId, 54326 resolve: resolver 54327 }); 54328 pumpQueue(); 54329 54330 return promise; 54331 } 54332 54333 function findBadge(card) { 54334 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 54335 } 54336 54337 function clearBadge(card) { 54338 var badge = findBadge(card); 54339 var image = card.querySelector('.product-header > .w-100 > .image'); 54340 54341 if (badge && badge.parentNode) { 54342 badge.parentNode.removeChild(badge); 54343 } 54344 54345 if (image) { 54346 image.classList.remove(HOST_CLASS); 54347 } 54348 54349 card.removeAttribute('data-farmacam-prescription-level'); 54350 } 54351 54352 function applyBadge(card, productId, rule) { 54353 var image; 54354 var badge; 54355 54356 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 54357 return false;
54358 } 54359 54360 clearBadge(card); 54361 54362 if (!rule) { 54363 return true; 54364 } 54365 54366 image = card.querySelector('.product-header > .w-100 > .image'); 54367 if (!image) { 54368 return false; 54369 } 54370 54371 badge = document.createElement('span'); 54372 badge.className = BADGE_CLASS; 54373 badge.setAttribute('data-farmacam-generated', 'true'); 54374 badge.setAttribute('data-farmacam-prescription-level', rule.level); 54375 badge.setAttribute('role', 'note'); 54376 badge.textContent = rule.text; 54377 54378 image.classList.add(HOST_CLASS); 54379 image.insertBefore(badge, image.firstChild); 54380 card.setAttribute('data-farmacam-prescription-level', rule.level); 54381 54382 return true; 54383 } 54384 54385 function processCard(card) { 54386 var productId; 54387 var previousState; 54388 var currentState; 54389 54390 if (!card || card.nodeType !== 1) { 54391 return; 54392 } 54393 54394 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 54395 return; 54396 } 54397 54398 productId = normalizeProductId(card.getAttribute('data-id')); 54399 previousState = cardStates.get(card); 54400 54401 if (!productId) { 54402 clearBadge(card); 54403 cardStates.delete(card); 54404 return; 54405 } 54406 54407 if ( 54408 previousState && 54409 previousState.productId === productId && 54410 previousState.status === 'loading' 54411 ) { 54412 return; 54413 } 54414 54415 if ( 54416 previousState && 54417 previousState.productId === productId && 54418 previousState.status === 'processed' 54419 ) { 54420 if (!previousState.rule || findBadge(card)) { 54421 return; 54422 } 54423 } 54424 54425 if (!previousState || previousState.productId !== productId) { 54426 clearBadge(card); 54427 } 54428 54429 currentState = { 54430 productId: productId, 54431 status: 'loading', 54432 rule: null 54433 }; 54434 cardStates.set(card, currentState); 54435 54436 getRule(productId).then(function (rule) { 54437 var applied; 54438 54439 if ( 54440 cardStates.get(card) !== currentState || 54441 normalizeProductId(card.getAttribute('data-id')) !== productId 54442 ) { 54443 return; 54444 } 54445 54446 applied = applyBadge(card, productId, rule); 54447 currentState.rule = rule; 54448 currentState.status = applied ? 'processed' : 'waiting-image'; 54449 }); 54450 } 54451 54452 function scan(root) { 54453 var cards; 54454 var index; 54455 54456 if (!root) { 54457 return; 54458 } 54459 54460 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 54461 processCard(root); 54462 } 54463 54464 if (!root.querySelectorAll) { 54465 return; 54466 } 54467 54468 cards = root.querySelectorAll(CARD_SELECTOR); 54469 for (index = 0; index < cards.length; index += 1) { 54470 processCard(cards[index]); 54471 } 54472 } 54473 54474 function startObserver() { 54475 var observer; 54476 54477 if (!window.MutationObserver || !document.documentElement) { 54478 return; 54479 } 54480 54481 observer = new MutationObserver(function (mutations) { 54482 var mutationIndex; 54483 var nodeIndex; 54484 var mutation; 54485 var node; 54486 var ownerCard; 54487 54488 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 54489 mutation = mutations[mutationIndex]; 54490 54491 if (mutation.type === 'attributes') { 54492 processCard(mutation.target); 54493 continue; 54494 } 54495 54496 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 54497 node = mutation.addedNodes[nodeIndex]; 54498 if (node.nodeType !== 1) { 54499 continue; 54500 } 54501 54502 scan(node); 54503 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 54504 if (ownerCard) { 54505 processCard(ownerCard); 54506 } 54507 } 54508 } 54509 }); 54510 54511 observer.observe(document.documentElement, { 54512 childList: true, 54513 subtree: true, 54514 attributes: true, 54515 attributeFilter: ['data-id'] 54516 }); 54517 54518 window[GLOBAL_KEY].observer = observer; 54519 } 54520 54521 window[GLOBAL_KEY] = { 54522 version: '1.1.0', 54523 cache: cache, 54524 pending: pending, 54525 cardStates: cardStates, 54526 scan: scan, 54527 processCard: processCard, 54528 observer: null 54529 }; 54530 54531 document.addEventListener('load', onTrayScriptLoad, true); 54532 attachTrayAjaxCache(); 54533 injectStyles(); 54534 scan(document); 54535 startObserver(); 54536 54537 if (document.readyState === 'loading') { 54538 document.addEventListener('DOMContentLoaded', function () { 54539 attachTrayAjaxCache(); 54540 scan(document); 54541 }); 54542 } 54543}(window, document)); 54544</script>
54544 54545 </div> 54546 <div 54547 class="swiper-slide fixWidthBoxProduct item"> 54548 54549 54550 54551 54552<div class="product animate open_cart" 54553 data-id="125233687" 54554 data-farmacam-related-categories="," 54555 data-ga4-id="125233687" 54556 data-ga4-name="Beta Alanina 3 g sachê" 54557 data-ga4-price="62.00" 54558 data-ga4-brand="Farmacam" 54559 data-ga4-category="Tipo de Produto;Manipulados;" 54560 data-ga4-promotion="50"> 54561 54562 <div class="product-header"> 54563 54564 <div class="w-100"> 54565 54566 54567 54568 54569 54570 54571 54572 54573 <div class="product-tags-circle product-tags-circle-right"> 54574 54575 <div class="tag-circle discount"> 54576 <span> 54577 19% OFF 54578 </span> 54579 </div> 54580 54581 54582 </div> 54583 54584 <div class="product-tags " data-tags-count="0"> 54585 54586 54587 54588 54589 <div class="tag extra fix-Selo"> 54590 <img width="119" height="22" alt="Selo" src="https://images.tcdn.com.br/img/img_prod/1063102/1764006510_oportunidade.png" fetchpriority='high' /> 54591 </div> 54592 54593 </div> 54594 54595 54596 54597 <div class="image "> 54598 54599 <a title="Beta Alanina 3 g sachê" href="https://www.farmacam.com.br/beta-alanina-3-g-sache" class="space-image"> 54600 <img class="hori-quad imagem-produto-1 imagem-unica" src="https://images.tcdn.com.br/img/img_prod/1063102/beta_alanina_3_g_sache_125233687_1_adea8ba695ec69feef058e2777240fcd.png" data-src="https://images.tcdn.com.br/img/img_prod/1063102/beta_alanina_3_g_sache_125233687_1_adea8ba695ec69feef058e2777240fcd.png" alt="Beta Alanina 3 g sachê"> 54601 </a> 54602 54603 </div> 54604 54605 54606 54607 54608 54609 </div> 54610 54611 </div> 54612 54613 <div class="product-body"> 54614 54615 <a title="Beta Alanina 3 g sachê" class="product-info" href="https://www.farmacam.com.br/beta-alanina-3-g-sache"> 54616 54617 <div class="product-info-dados"> 54618 54619 54620 54621 <div class="listagem-produtos-timer-promocao" data-inicial="2026-09-14" data-final="2026-11-25"></div> 54622 54623 54624 54625 <div class="product-name"> 54626 Beta Alanina 3 g sachê 54627 </div> 54628 54629 54630 54631 <div class="product-price"> 54632 54633 54634 54635 <div class="compre-economize"> 54636 Economize: R$ 12,00 54637 </div> 54638 54639 54640 <span class="product-has-variants text-center"> 54641 A partir de 54642 </span> 54643 54644<div class="price display-cash"> 54645 54646 <span class="old-price"> 54647 R$ 62,00 54648 </span> 54649 54650 <span class="current-price "> 54651 R$ 50,00 54652 54653 </span> 54654 54655 <span class="product-installments"> 54656 54657 </span> 54658 54659</div> 54660 </div> 54661 54662 </div> 54663 54664 </a> 54665 54666 </div> 54667 54668 54669 <div class="product-footer"> 54670 54671 54672 <div class="w-100"> 54673 54674 54675 54676<div class="product-rating-catalog"> 54677 54678 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 54679 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 54680 </svg> 54681 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 54682 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 54683 </svg> 54684 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 54685 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 54686 </svg> 54687 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 54688 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 54689 </svg> 54690 <svg style="margin-top: -3px; margin-left: 1px;" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16"> 54691 <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/> 54692 </svg> 54693 54694 54695 <a title="Ver avaliaçõ
54695es de Beta Alanina 3 g sachê" href="https://www.farmacam.com.br/beta-alanina-3-g-sache#comments" class="total"> 54696 Seja o primeiro 54697 </a> 54698 54699 </div> 54700 54701 54702 54703 <div class="config-variacoes-compra"> 54704 54705 54706 54707 <input type="hidden" name="action" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125233687"> 54708 <input type="hidden" name="product_id" value="125233687"> 54709 <input type="hidden" name="without_stock_sale" value=""> 54710 54711 <input type="hidden" name="variacao" id="selectedVariant" value=""> 54712 <input type="hidden" name="estoque" value=""> 54713 54714 54715 54716 <ul class="paleta-cores"> 54717 54718 54719 54720 54721 54722 54723 54724 54725 54726 54727 54728 54729 54730 54731 54732 54733 54734 54735 54736 54737 54738 54739 54740 54741 54742 54743 54744 54745 54746 54747 54748 54749 54750 54751 54752 54753 54754 54755 54756 54757 54758 54759 54760 54761 54762 54763 54764 54765 54766 54767 54768 54769 54770 54771 54772 54773 54774 54775 54776 54777 54778 54779 54780 54781 54782 54783 54784 54785 54786 54787 54788 54789 54790 54791 54792 54793 54794 54795 54796 54797 54798 54799 54800 54801 54802 54803 54804 54805 54806 54807 54808 54809 54810 54811 54812 54813 54814 54815 54816 54817 54818 54819 54820 54821 54822 54823 54824 54825 54826 54827 54828 54829 54830 54831 54832 54833 54834 54835 54836 54837 54838 54839 54840 54841 54842 54843 54844 54845 54846 54847 54848 54849 54850 54851 54852 54853 54854 54855 54856 54857 54858 54859 54860 54861 54862 54863 54864 54865 54866 54867 54868 54869 54870 54871 54872 54873 54874 54875 54876 54877 54878 54879 54880 54881 54882 54883 54884 54885 54886 54887 54888 54889 54890 54891 54892 54893 54894 54895 54896 54897 54898 54899 54900 54901 54902 54903 54904 54905 54906 54907 54908 54909 54910 54911 54912 54913 54914 54915 54916 54917 54918 54919 54920 54921 54922 54923 54924 54925 54926 54927 54928 54929 54930 54931 54932 54933 54934 54935 54936 54937 54938 54939 54940 54941 54942 54943 54944 54945 54946 54947 54948 54949 54950 54951 54952 54953 54954 54955 54956 54957 54958 54959 54960 54961 54962 54963 54964 54965 54966 54967 54968 54969 54970 54971 54972 54973 54974 54975 54976 54977 54978 54979 54980 54981 54982 54983 54984 54985 54986 54987 54988 54989 54990 54991 54992 54993 54994 54995 54996 54997 54998 54999 55000 55001 55002 55003 55004 55005 55006 55007 55008 55009 55010 55011 55012 55013 55014 55015 55016 55017 55018 55019 55020 55021 55022 55023 55024 55025 55026 55027 55028 55029 55030 55031 55032 55033 55034 55035 55036 55037 55038 55039 55040 55041 55042 55043 55044 55045 55046 55047 55048 55049 </ul> 55050 <!-- Fim Paleta de Cores --> 55051 55052 55053 55054 55055 55056 55057 55058 55059 55060 55061 55062 <select class="select-tamanho" style="display: none;" title="Campo Tamanho"> 55063 <option disabled="disabled" value=""> 55064 Selecione 55065 </option> 55066 55067 55068 <option value="1857" produto="125233687" estoque="10000">30 Doses</option> 55069 55070 55071 55072 55073 <option value="1855" produto="125233687" estoque="10000">60 Doses</option> 55074 55075 55076 </select> 55077 55078
55078 55079 <select class="select-cor" style="display: none;" title="Campo Cor"> 55080 </select> 55081 55082 55083 <div class="alerta-variacao">Por favor, selecione uma variação.</div> 55084 <div class="alerta-estoque"></div> 55085 <div class="alerta-adicionado"></div> 55086 55087 <div class="acao-compra"> 55088 55089 <div class="quantidade-box"> 55090 <div class="quantidade-box-input"> 55091 <input id="quantidade" name="quantidade" class="text numeric" value="1" maxlength="4" title="Campo Quantidade" data-e
55091stoque="20000" /> 55092 </div> 55093 <div class="quantidade-box-controles"> 55094 <div class="quantidade-box-controles-itens" data-item="mais"> 55095 <svg xmlns="http://www.w3.org/2000/svg" style="margin-bottom: -4px;" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"> 55096 <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/> 55097 </svg> 55098 </div> 55099 <div class="quantidade-box-controles-itens" data-item="menus"> 55100 <svg xmlns="http://www.w3.org/2000/svg" style="margin-top: -4px;" width="16" height="16" fill="currentColor" class="bi bi-dash" viewBox="0 0 16 16"> 55101 <path d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z"/> 55102 </svg> 55103 </div> 55104 </div> 55105 </div> 55106 55107 55108 <input type="hidden" name="url-add-card" value="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=125233687"> 55109 55110 <!-- <form id="form_comprar" method="post" data-app="product.buy-form" action="/loja/cartService.php?loja=1063102&acao=incluir&IdProd=" style="width: 100%;"> --> 55111 <button type="button" class="btn-comprar-listagem btn-comprar product-button" title="Botão Comprar"> 55112 55113 55114 55115 55116 55117 55118 <!-- Cesta de Compras --> 55119 <svg style="margin-top: -4px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-basket3" viewBox="0 0 16 16"> 55120 <path d="M5.757 1.071a.5.5 0 0 1 .172.686L3.383 6h9.234L10.07 1.757a.5.5 0 1 1 .858-.514L13.783 6H15.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5v-1A.5.5 0 0 1 .5 6h1.717L5.07 1.243a.5.5 0 0 1 .686-.172zM3.394 15l-1.48-6h-.97l1.525 6.426a.75.75 0 0 0 .729.574h9.606a.75.75 0 0 0 .73-.574L15.056 9h-.972l-1.479 6h-9.21z"/> 55121 </svg> 55122 55123 55124 55125 Comprar 55126 55127 55128 </button> 55129 <!-- </form> --> 55130 55131 </div> 55132 55133</div> 55134 55135 55136 </div> 55137 55138 </div> 55139 55140 55141</div> 55142
55143<script> 55144(function (window, document) { 55145 'use strict'; 55146 55147 var GLOBAL_KEY = 'FarmacamPrescriptionCardsV1'; 55148 55149 if (window[GLOBAL_KEY]) { 55150 return; 55151 } 55152 55153 if (!window.Map || !window.WeakMap || !window.Promise) { 55154 return; 55155 } 55156 55157 // A vitrine personalizada recebe cards de #product-ajax, sem o atributo de relacionados. 55158 var CARD_SELECTOR = '.product[data-id][data-farmacam-related-categories], ' + 55159 '#vitrine-personalizada .product[data-id]'; 55160 var BADGE_CLASS = 'farmacam-prescription-badge'; 55161 var HOST_CLASS = 'farmacam-prescription-badge-host'; 55162 var MAX_CONCURRENT_REQUESTS = 6; 55163 var REQUEST_TIMEOUT_MS = 12000; 55164 55165 var rules = { 55166 '294': { 55167 level: '294', 55168 text: 'VENDA SOB PRESCRI\u00c7\u00c3O' 55169 }, 55170 '296': { 55171 level: '296', 55172 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE RECEITA' 55173 }, 55174 '298': { 55175 level: '298', 55176 text: 'VENDA SOB PRESCRI\u00c7\u00c3O COM RETEN\u00c7\u00c3O DE NOTIFICA\u00c7\u00c3O DE RECEITA' 55177 } 55178 }; 55179 55180 var cache = new Map(); 55181 var pending = new Map(); 55182 var cardStates = new WeakMap(); 55183 var queue = []; 55184 var activeRequests = 0; 55185 var trayAjaxHooked = false; 55186 55187 function injectStyles() { 55188 if (document.getElementById('farmacam-prescription-cards-style')) { 55189 return; 55190 } 55191 55192 var style = document.createElement('style'); 55193 style.id = 'farmacam-prescription-cards-style'; 55194 style.textContent = [ 55195 '.product .image.' + HOST_CLASS + '{position:relative!important;}', 55196 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 55197 'position:absolute!important;', 55198 'top:52px!important;', 55199 'left:10px!important;', 55200 'z-index:999!important;', 55201 'display:block!important;', 55202 'max-width:calc(100% - 20px)!important;', 55203 'box-sizing:border-box!important;', 55204 'padding:8px 12px!important;', 55205 'color:#fff!important;', 55206 'font-family:inherit!important;', 55207 'font-size:13px!important;', 55208 'font-weight:900!important;', 55209 'line-height:1.15!important;', 55210 'text-align:center!important;', 55211 'text-transform:uppercase!important;', 55212 'letter-spacing:.3px!important;', 55213 'white-space:normal!important;', 55214 'overflow-wrap:break-word!important;', 55215 'border-radius:3px!important;', 55216 'box-shadow:0 2px 6px rgba(0,0,0,.28)!important;', 55217 'pointer-events:none!important;', 55218 '}', 55219 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="294"],', 55220 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="296"]{', 55221 'background:#d70008!important;', 55222 '}', 55223 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '[data-farmacam-prescription-level="298"]{', 55224 'background:#000!important;', 55225 '}', 55226 '@media (max-width:767px){', 55227 '.product .image.' + HOST_CLASS + ' > .' + BADGE_CLASS + '{', 55228 'top:42px!important;', 55229 'left:6px!important;', 55230 'max-width:calc(100% - 12px)!important;', 55231 'padding:6px 8px!important;', 55232 'font-size:10px!important;', 55233 '}', 55234 '}' 55235 ].join(''); 55236 55237 (document.head || document.documentElement).appendChild(style); 55238 } 55239 55240 function normalizeProductId(value) { 55241 var id = String(value == null ? '' : value).trim(); 55242 return /^\d+$/.test(id) ? id.replace(/^0+(?=\d)/, '') : ''; 55243 } 55244 55245 function classifyRelatedCategories(relatedCategories) { 55246 var found = { 55247 '292': false, 55248 '294': false, 55249 '296': false, 55250 '298': false 55251 }; 55252 55253 function inspect(value, depth) { 55254 var index; 55255 var normalized; 55256 55257 if (value == null || depth > 8) { 55258 return; 55259 } 55260 55261 if (Array.isArray(value)) { 55262 for (index = 0; index < value.length; index += 1) { 55263 inspect(value[index], depth + 1); 55264 } 55265 return; 55266 } 55267 55268 if (typeof value === 'object') { 55269 // Somente campos de ID: nomes, descricoes e contagens nao sao categorias. 55270 if (Object.prototype.hasOwnProperty.call(value, 'id')) { 55271 inspect(value.id, depth + 1); 55272 } else if (Object.prototype.hasOwnProperty.call(value, 'category_id')) { 55273 inspect(value.category_id, depth + 1); 55274 } else if (Object.prototype.hasOwnProperty.call(value, 'Category')) { 55275 inspect(value.Category, depth + 1); 55276 } 55277 return; 55278 } 55279 55280 if (typeof value !== 'string' && typeof value !== 'number') { 55281 return; 55282 } 55283 normalized = normalizeProductId(value); 55284 if (Object.prototype.hasOwnProperty.call(found, normalized)) { 55285 found[normalized] = true; 55286 } 55287 } 55288 55289 inspect(relatedCategories, 0); 55290 55291 if (found['298']) { 55292 return rules['298']; 55293 } 55294 if (found['296']) { 55295 return rules['296']; 55296 } 55297 if (found['294']) { 55298 return rules['294']; 55299 } 55300 55301 // 292 e qualquer classificacao desconhecida ficam sem tarja. 55302 return null; 55303 } 55304 55305 function ruleFromPayload(payload, productId) { 55306 var product = payload && payload.Product; 55307 if (product && product.id != null && normalizeProductId(product.id) !== productId) { 55308 return null; 55309 } 55310 return classifyRelatedCategories(product && product.related_categories); 55311 } 55312 55313 // Aproveita respostas da API que a propria vitrine ja consulta antes de inserir o card. 55314 // Nao substitui fetch, $.ajax, callbacks do tema nem o atributo de relacionados. 55315 function attachTrayAjaxCache() { 55316 var jq = window.jQuery; 55317 if (trayAjaxHooked || !jq || !jq.fn || typeof jq.fn.on !== 'function') { 55318 return; 55319 } 55320
55321 jq(document).on('ajaxSuccess.farmacamPrescriptionCards', function (event, xhr, settings, data) { 55322 var url; 55323 var match; 55324 var productId; 55325 var payload; 55326 try { 55327 url = new URL(settings.url, window.location.href); 55328 if (url.origin !== window.location.origin) { 55329 return; 55330 } 55331 match = /^\/web_api\/products\/(\d+)\/?$/.exec(url.pathname); 55332 if (!match) { 55333 return; 55334 } 55335 productId = normalizeProductId(match[1]); 55336 if (!cache.has(productId) && !pending.has(productId)) { 55337 payload = data || xhr.responseJSON; 55338 if (typeof payload === 'string') { 55339 payload = JSON.parse(payload); 55340 } 55341 if (!payload || !payload.Product || 55342 !Object.prototype.hasOwnProperty.call(payload.Product, 'related_categories')) { 55343 return; 55344 } 55345 if (payload.Product.id != null && normalizeProductId(payload.Product.id) !== productId) { 55346 return; 55347 } 55348 cache.set(productId, ruleFromPayload(payload, productId)); 55349 } 55350 } catch (error) { 55351 // Respostas de outras integracoes nao interferem nas tarjas. 55352 } 55353 }); 55354 55355 trayAjaxHooked = true; 55356 document.removeEventListener('load', onTrayScriptLoad, true); 55357 } 55358 55359 function onTrayScriptLoad(event) { 55360 if (event.target && event.target.tagName === 'SCRIPT') { 55361 attachTrayAjaxCache(); 55362 } 55363 } 55364 55365 function requestRule(productId) { 55366 var controller = null; 55367 var timeoutId = null; 55368 var options = { 55369 credentials: 'same-origin', 55370 headers: { 55371 'Accept': 'application/json' 55372 } 55373 }; 55374 var request; 55375 55376 if (typeof window.fetch !== 'function') { 55377 return Promise.resolve(null); 55378 } 55379 55380 if (typeof window.AbortController === 'function') { 55381 controller = new window.AbortController(); 55382 options.signal = controller.signal; 55383 timeoutId = window.setTimeout(function () { 55384 controller.abort(); 55385 }, REQUEST_TIMEOUT_MS); 55386 } 55387 55388 try { 55389 request = window.fetch( 55390 '/web_api/products/' + encodeURIComponent(productId), 55391 options 55392 ); 55393 } catch (error) { 55394 if (timeoutId !== null) { 55395 window.clearTimeout(timeoutId); 55396 } 55397 return Promise.resolve(null); 55398 } 55399 55400 return request.then(function (response) { 55401 if (!response.ok) { 55402 throw new Error('HTTP ' + response.status); 55403 } 55404 return response.json(); 55405 }).then(function (payload) { 55406 return ruleFromPayload(payload, productId); 55407 }).then(function (rule) { 55408 if (timeoutId !== null) { 55409 window.clearTimeout(timeoutId); 55410 } 55411 return rule; 55412 }, function () { 55413 if (timeoutId !== null) { 55414 window.clearTimeout(timeoutId); 55415 } 55416 55417 // Falha de rede, timeout, HTTP ou JSON: comportamento seguro, sem tarja. 55418 return null; 55419 }); 55420 } 55421 55422 function finishJob(job, rule) { 55423 cache.set(job.productId, rule); 55424 pending.delete(job.productId); 55425 activeRequests -= 1; 55426 job.resolve(rule); 55427 pumpQueue(); 55428 } 55429 55430 function pumpQueue() { 55431 var job; 55432 55433 while (activeRequests < MAX_CONCURRENT_REQUESTS && queue.length) { 55434 job = queue.shift(); 55435 activeRequests += 1; 55436 55437 (function (currentJob) { 55438 requestRule(currentJob.productId).then(function (rule) { 55439 finishJob(currentJob, rule); 55440 }, function () { 55441 finishJob(currentJob, null); 55442 }); 55443 }(job)); 55444 } 55445 } 55446 55447 function getRule(productId) { 55448 var resolver; 55449 var promise; 55450 55451 if (cache.has(productId)) { 55452 return Promise.resolve(cache.get(productId)); 55453 } 55454 55455 if (pending.has(productId)) { 55456 return pending.get(productId); 55457 } 55458 55459 promise = new Promise(function (resolve) { 55460 resolver = resolve; 55461 }); 55462 55463 pending.set(productId, promise); 55464 queue.push({ 55465 productId: productId, 55466 resolve: resolver 55467 }); 55468 pumpQueue(); 55469 55470 return promise; 55471 } 55472 55473 function findBadge(card) { 55474 return card.querySelector('.' + BADGE_CLASS + '[data-farmacam-generated="true"]'); 55475 } 55476 55477 function clearBadge(card) { 55478 var badge = findBadge(card); 55479 var image = card.querySelector('.product-header > .w-100 > .image'); 55480 55481 if (badge && badge.parentNode) { 55482 badge.parentNode.removeChild(badge); 55483 } 55484 55485 if (image) { 55486 image.classList.remove(HOST_CLASS); 55487 } 55488 55489 card.removeAttribute('data-farmacam-prescription-level'); 55490 } 55491 55492 function applyBadge(card, productId, rule) { 55493 var image; 55494 var badge; 55495 55496 if (normalizeProductId(card.getAttribute('data-id')) !== productId) { 55497 return false;
55498 } 55499 55500 clearBadge(card); 55501 55502 if (!rule) { 55503 return true; 55504 } 55505 55506 image = card.querySelector('.product-header > .w-100 > .image'); 55507 if (!image) { 55508 return false; 55509 } 55510 55511 badge = document.createElement('span'); 55512 badge.className = BADGE_CLASS; 55513 badge.setAttribute('data-farmacam-generated', 'true'); 55514 badge.setAttribute('data-farmacam-prescription-level', rule.level); 55515 badge.setAttribute('role', 'note'); 55516 badge.textContent = rule.text; 55517 55518 image.classList.add(HOST_CLASS); 55519 image.insertBefore(badge, image.firstChild); 55520 card.setAttribute('data-farmacam-prescription-level', rule.level); 55521 55522 return true; 55523 } 55524 55525 function processCard(card) { 55526 var productId; 55527 var previousState; 55528 var currentState; 55529 55530 if (!card || card.nodeType !== 1) { 55531 return; 55532 } 55533 55534 if (!card.matches(CARD_SELECTOR) && !cardStates.has(card)) { 55535 return; 55536 } 55537 55538 productId = normalizeProductId(card.getAttribute('data-id')); 55539 previousState = cardStates.get(card); 55540 55541 if (!productId) { 55542 clearBadge(card); 55543 cardStates.delete(card); 55544 return; 55545 } 55546 55547 if ( 55548 previousState && 55549 previousState.productId === productId && 55550 previousState.status === 'loading' 55551 ) { 55552 return; 55553 } 55554 55555 if ( 55556 previousState && 55557 previousState.productId === productId && 55558 previousState.status === 'processed' 55559 ) { 55560 if (!previousState.rule || findBadge(card)) { 55561 return; 55562 } 55563 } 55564 55565 if (!previousState || previousState.productId !== productId) { 55566 clearBadge(card); 55567 } 55568 55569 currentState = { 55570 productId: productId, 55571 status: 'loading', 55572 rule: null 55573 }; 55574 cardStates.set(card, currentState); 55575 55576 getRule(productId).then(function (rule) { 55577 var applied; 55578 55579 if ( 55580 cardStates.get(card) !== currentState || 55581 normalizeProductId(card.getAttribute('data-id')) !== productId 55582 ) { 55583 return; 55584 } 55585 55586 applied = applyBadge(card, productId, rule); 55587 currentState.rule = rule; 55588 currentState.status = applied ? 'processed' : 'waiting-image'; 55589 }); 55590 } 55591 55592 function scan(root) { 55593 var cards; 55594 var index; 55595 55596 if (!root) { 55597 return; 55598 } 55599 55600 if (root.nodeType === 1 && root.matches && root.matches(CARD_SELECTOR)) { 55601 processCard(root); 55602 } 55603 55604 if (!root.querySelectorAll) { 55605 return; 55606 } 55607 55608 cards = root.querySelectorAll(CARD_SELECTOR); 55609 for (index = 0; index < cards.length; index += 1) { 55610 processCard(cards[index]); 55611 } 55612 } 55613 55614 function startObserver() { 55615 var observer; 55616 55617 if (!window.MutationObserver || !document.documentElement) { 55618 return; 55619 } 55620 55621 observer = new MutationObserver(function (mutations) { 55622 var mutationIndex; 55623 var nodeIndex; 55624 var mutation; 55625 var node; 55626 var ownerCard; 55627 55628 for (mutationIndex = 0; mutationIndex < mutations.length; mutationIndex += 1) { 55629 mutation = mutations[mutationIndex]; 55630 55631 if (mutation.type === 'attributes') { 55632 processCard(mutation.target); 55633 continue; 55634 } 55635 55636 for (nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex += 1) { 55637 node = mutation.addedNodes[nodeIndex]; 55638 if (node.nodeType !== 1) { 55639 continue; 55640 } 55641 55642 scan(node); 55643 ownerCard = node.closest ? node.closest(CARD_SELECTOR) : null; 55644 if (ownerCard) { 55645 processCard(ownerCard); 55646 } 55647 } 55648 } 55649 }); 55650 55651 observer.observe(document.documentElement, { 55652 childList: true, 55653 subtree: true, 55654 attributes: true, 55655 attributeFilter: ['data-id'] 55656 }); 55657 55658 window[GLOBAL_KEY].observer = observer; 55659 } 55660 55661 window[GLOBAL_KEY] = { 55662 version: '1.1.0', 55663 cache: cache, 55664 pending: pending, 55665 cardStates: cardStates, 55666 scan: scan, 55667 processCard: processCard, 55668 observer: null 55669 }; 55670 55671 document.addEventListener('load', onTrayScriptLoad, true); 55672 attachTrayAjaxCache(); 55673 injectStyles(); 55674 scan(document); 55675 startObserver(); 55676 55677 if (document.readyState === 'loading') { 55678 document.addEventListener('DOMContentLoaded', function () { 55679 attachTrayAjaxCache(); 55680 scan(document); 55681 }); 55682 } 55683}(window, document)); 55684</script>
55684 55685 </div> 55686 </div> 55687 <div class="swiper-button-prev"></div> 55688 <div class="swiper-button-next"></div> 55689 <div class="swiper-pagination"></div> 55690 </div> 55691 55692 </div> 55693 55694 55695 55696 </div> 55697</div> 55698 55699 55700 55701 55702 55703 55704 55705 55706 55707 <div class="vitrine-banners"> 55708 <div class="container box-banners mt-0"> 55709 <a title="Banner Vitrine" href="linha-homeopaticam"> 55710 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/QUARTA-VITRINE.png?40911a9f4d7a99b6eef6b4ae366be082" class="lazyload" alt="Banner Vitrine"> 55711 </a> 55712 55713 </div> 55714 </div> 55715 55716 55717 55718 55719 55720 55721 <div class="vitrine-banners vitrine-mini-banners pt-2"> 55722 55723 <div class="container "> 55724 <div class="banners-grid banners-grid-2 banners-mini flex justify-between"> 55725 <div class="item box-banners"> 55726 <a title="Banner Mini 1" href="qualidade-de-vida"> 55727 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/MINI-BANNER-1.png?40911a9f4d7a99b6eef6b4ae366be082" class="lazyload" alt="Banner Mini 1"> 55728 </a> 55729 </div> 55730 <div class="item box-banners"> 55731 <a title="Banner Mini 2" href="https://api.whatsapp.com/send/?phone=%2B552126047350&text=Ol%C3%A1%21+Estou+vindo+do+site+e+gostaria+de+fazer+or%C3%A7amento+de+uma+f%C3%B3rmula+personalizada%21&type=phone_number&app_absent=0"> 55732 <img src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/MINI-BANNER-2-WPP.png?40911a9f4d7a99b6eef6b4ae366be082" class="lazyload" alt="Banner Mini 2"> 55733 </a> 55734 </div> 55735 </div> 55736 </div> 55737 55738 </div> 55739 55740 55741 55742 55743 55744 55745 55746 <div class="section section-news"> 55747 <div class="container"> 55748 <div class="section-header"> 55749 <h2 class="title-section"> 55750 Confira nossos Posts 55751 </h2> 55752 </div> 55753 </div> 55754 <div class="container news-content swiper"> 55755 <div class="swiper-container"> 55756 <div class="swiper-wrapper"></div> 55757 <div class="swiper-pagination"></div> 55758 </div> 55759 </div> 55760 </div> 55761 55762 55763 55764 55765 55766 55767<section id="instagram-feed" class="section show"> 55768 55769 <div class="instagram-feed-title"> 55770 55771 <strong><i class="icon icon-instagram v-align-middle"></i></strong> 55772 55773 <span> Siga nosso Instagram </span> 55774 <strong> @farmacam </strong> 55775 </div> 55776 55777 <div class="instagram-feed-content"> 55778
55778<script src="https://static.elfsight.com/platform/platform.js" async></script>
55778 55779<div class="elfsight-app-7a4d35cf-8ea8-4bc8-9f31-605e6e282b02" data-elfsight-app-lazy></div> 55780 </div> 55781</section> 55782 55783<style> 55784 @media (min-width: 768px) { 55785 html.page-home .header { 55786 transition: transform 0.28s ease, box-shadow 0.28s ease !important; 55787 will-change: transform; 55788 } 55789 55790 html.page-home .header.farmacam-header-autohide { 55791 transform: translateY(-145%) !important; 55792 } 55793 } 55794</style> 55795
55796<script> 55797document.addEventListener('DOMContentLoaded', function () { 55798 if (window.innerWidth < 768) { 55799 return; 55800 } 55801 55802 if (!document.documentElement.classList.contains('page-home')) { 55803 return; 55804 } 55805 55806 var header = document.querySelector('.header'); 55807 55808 if (!header) { 55809 return; 55810 } 55811 55812 var lastScrollTop = window.pageYOffset || document.documentElement.scrollTop; 55813 var hideAfter = 250; 55814 var ticking = false; 55815 55816 function updateHeaderOnScroll() { 55817 var currentScrollTop = window.pageYOffset || document.documentElement.scrollTop; 55818 55819 if (currentScrollTop <= 10) { 55820 header.classList.remove('farmacam-header-autohide'); 55821 lastScrollTop = currentScrollTop; 55822 ticking = false; 55823 return; 55824 } 55825 55826 if (currentScrollTop > lastScrollTop && currentScrollTop > hideAfter) { 55827 header.classList.add('farmacam-header-autohide'); 55828 } else if (currentScrollTop < lastScrollTop) { 55829 header.classList.remove('farmacam-header-autohide'); 55830 } 55831 55832 lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop; 55833 ticking = false; 55834 } 55835 55836 window.addEventListener('scroll', function () { 55837 if (!ticking) { 55838 window.requestAnimationFrame(updateHeaderOnScroll); 55839 ticking = true; 55840 } 55841 }, { passive: true }); 55842}); 55843</script>
55843 55844 55845 55846 55847 55848 </main> 55849 55850 <div class="section newsletter-section"> 55851 <div class="footer-main footer-padding"> 55852 55853 <div class="container"> 55854 55855 55856 <div class="newsletter"> 55857 55858 <div class="newsletter-item"> 55859 55860 <form class="form" action="/mvc/store/newsletter/" method="post"> 55861 <div class="mb-1"> 55862 <h3>Cadastre-se em nossa Newsletter</h3> 55863 </div> 55864 <div class="newsletter-box-form"> 55865 <input type="hidden" name="loja" value="1063102"> 55866 <input class="field" name="name" type="text" placeholder="Digite seu nome" aria-label="Nome" required="" > 55867 <input type="email" class="field" name="email" placeholder="Digite seu e-mail" aria-label="Email" required spellcheck="false" autocomplete="off"> 55868 <button type="submit" class="button news-button" title="Cadastrar" aria-label="Cadastrar"> 55869 <span>Cadastre-se</span> 55870 </button> 55871 </div> 55872 </form> 55873 55874 </div> 55875 55876 55877 <div class="newsletter-item"> 55878 55879 <div class="box-instagram mb-2"> 55880 <h3> 55881 Siga nosso Instagram 55882 <a title="@farmacam" href="https://www.instagram.com/farmacam/" rel="noreferrer" target="_blank"> 55883 @farmacam 55884 </a> 55885 </h3> 55886 </div> 55887 55888 55889 </div> 55890 55891 </div> 55892 55893 55894 55895 </div> 55896 55897 </div> 55898</div> 55899 55900 55901<footer class="footer "> 55902 55903 <div class="footer-formas-pagamento"> 55904 <div class="container text-center pt-2 pb-2"> 55905 <div class="title">Formas de pagamento </div> 55906 <div class="flex justify-center"> 55907 <ul class="payment-list flex f-wrap"> 55908 55909 <li class="payment-form"> 55910 <img class="lazyload" data-src="https://images.tcdn.com.br/commerce/assets/store/img/icons/formas_pagamento/pag_peqcartavisatraycheckout.png?361afbf9ab2035cfedf850d5be0955f4" alt="Cartão Visa - Vindi"> 55911 </li> 55912 <li class="payment-form"> 55913 <img class="lazyload" data-src="https://images.tcdn.com.br/commerce/assets/store/img/icons/formas_pagamento/pag_peqmastercardtraycheckout.png?361afbf9ab2035cfedf850d5be0955f4" alt="Cartão MasterCard - Vindi"> 55914 </li> 55915 <li class="payment-form"> 55916 <img class="lazyload" data-src="https://images.tcdn.com.br/commerce/assets/store/img/icons/formas_pagamento/pag_peqdinerstraycheckout.png?361afbf9ab2035cfedf850d5be0955f4" alt="Cartão Diners - Vindi"> 55917 </li> 55918 <li class="payment-form"> 55919 <img class="lazyload" data-src="https://images.tcdn.com.br/commerce/assets/store/img/icons/formas_pagamento/pag_peqamextraycheckout.png?361afbf9ab2035cfedf850d5be0955f4" alt="Cartão Amex - Vindi"> 55920 </li> 55921 <li class="payment-form"> 55922 <img class="lazyload" data-src="https://images.tcdn.com.br/commerce/assets/store/img/icons/formas_pagamento/pag_peqelotraycheckout.png?361afbf9ab2035cfedf850d5be0955f4" alt="Cartão Elo - Vindi"> 55923 </li> 55924 55925 <li class="payment-form"> 55926 <img class="lazyload" data-src="https://images.tcdn.com.br/commerce/assets/store/img/icons/formas_pagamento/pag_peqboletotraycheckout.png?361afbf9ab2035cfedf850d5be0955f4" alt="Boleto - Vindi"> 55927 </li> 55928 <li class="payment-form"> 55929 <img class="lazyload" data-src="https://images.tcdn.com.br/commerce/assets/store/img/icons/formas_pagamento/pag_peqtransfbradescotraycheckout.png?361afbf9ab2035cfedf850d5be0955f4" alt="Transf. Bradesco"> 55930 </li> 55931 <li class="payment-form"> 55932 <img class="lazyload" data-src="https://images.tcdn.com.br/commerce/assets/store/img/icons/formas_pagamento/pag_peqtransfbbtraycheckout.png?361afbf9ab2035cfedf850d5be0955f4" alt="Transf. Banco do Brasil"> 55933 </li> 55934 <li class="payment-form"> 55935 <img class="lazyload" data-src="https://images.tcdn.com.br/commerce/assets/store/img/icons/formas_pagamento/pag_peqpix.png?361afbf9ab2035cfedf850d5be0955f4" alt="Pix - Vindi"> 55936 </li> 55937 55938</ul> </div> 55939 </div> 55940 </div> 55941 55942 <div class="cols"> 55943 55944 <div class="container flex justify-between f-wrap footer-content"> 55945 55946 <div class="box"> 55947 <div class="title">Institucional </div> 55948 <div class="overflow"> 55949 <ul class="list"> 55950 <li> 55951 <a href="/empresa" title="Sobre a Farmacam">Sobre a Farmacam</a> 55952 </li> 55953 <li> 55954 <a href="/como-comprar" title="Como comprar">Como comprar</a> 55955 </li> 55956 <li> 55957 <a href="/seguranca" title="Seguranca">Seguranca</a> 55958 </li> 55959 <li> 55960 <a href="/envio" title="Envio">Envio</a> 55961 </li> 55962 <li> 55963 <a href="/pagamento" title="Pagamento">Pagamento</a> 55964 </li> 55965 <li> 55966 <a href="/tempo-de-garantia" title="Tempo de Garantia">Tempo de Garantia</a> 55967 </li> 55968 <li> 55969 <a href="/depoimentos-de-clientes" title="Depoimentos de Clientes">Depoimentos de Clientes</a> 55970 </li> 55971 <li> 55972 <a href="/noticias" title="Notícias">Notícias</a> 55973 </li> 55974 <li> 55975 <a href="/privacidade" title="Política de Privacidade">Política de Privacidade</a> 55976 </li> 55977 <li> 55978 <a href="/termos-de-uso" title="Termos de uso">Termos de uso</a> 55979 </li> 55980 <li>
55981 <a href="/pedido-extraviado" title="Pedido Extraviado">Pedido Extraviado</a> 55982 </li> 55983 <li> 55984 <a href="/faq---perguntas-e-respostas-frequentes" title="FAQ - Perguntas e Respostas Frequentes">FAQ - Perguntas e Respostas Frequentes</a> 55985 </li> 55986 <li> 55987 <a href="/politica-de-troca-cancelamento-devolucao-e-reembolso" title="Política de Troca, Cancelamento, Devolução e Reembolso">Política de Troca, Cancelamento, Devolução e Reembolso</a> 55988 </li> 55989 <li> 55990 <a href="/cupons-de-desconto" title="Cupons de desconto">Cupons de desconto</a> 55991 </li> 55992 <li> 55993 <a href="/contato" title="Fale Conosco">Fale Conosco</a> 55994 </li> 55995 </ul> 55996 </div> 55997 </div> 55998 55999 <div class="box"> 56000 <div class="title">Categorias </div> 56001 <div class="overflow"> 56002 <ul class="list"> 56003 <li> 56004 <a href="https://www.farmacam.com.br/tipo-de-produto" title="Tipo de Produto">Tipo de Produto</a> 56005 </li> 56006 <li> 56007 <a href="https://www.farmacam.com.br/uso" title="Uso">Uso</a> 56008 </li> 56009 <li> 56010 <a href="https://www.farmacam.com.br/promocoes" title="Promoções">Promoções</a> 56011 </li> 56012 <li> 56013 <a href="https://www.farmacam.com.br/linha-de-produtos" title="Linha de Produtos">Linha de Produtos</a> 56014 </li> 56015 <li> 56016 <a href="https://www.farmacam.com.br/uso-e-objetivo" title="Objetivo">Objetivo</a> 56017 </li> 56018 <li> 56019 <a href="https://www.farmacam.com.br/tipo-venda" title="Tipo de Venda">Tipo de Venda</a> 56020 </li> 56021 </ul> 56022 </div> 56023 </div> 56024 56025 <div class="box"> 56026 56027 <div class="title">Atendimento </div> 56028 <div class="overflow"> 56029 56030 <div class="pb-1"> 56031 <svg style="margin-bottom: -2px;margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-telephone" viewBox="0 0 16 16"> 56032 <path d="M3.654 1.328a.678.678 0 0 0-1.015-.063L1.605 2.3c-.483.484-.661 1.169-.45 1.77a17.568 17.568 0 0 0 4.168 6.608 17.569 17.569 0 0 0 6.608 4.168c.601.211 1.286.033 1.77-.45l1.034-1.034a.678.678 0 0 0-.063-1.015l-2.307-1.794a.678.678 0 0 0-.58-.122l-2.19.547a1.745 1.745 0 0 1-1.657-.459L5.482 8.062a1.745 1.745 0 0 1-.46-1.657l.548-2.19a.678.678 0 0 0-.122-.58L3.654 1.328zM1.884.511a1.745 1.745 0 0 1 2.612.163L6.29 2.98c.329.423.445.974.315 1.494l-.547 2.19a.678.678 0 0 0 .178.643l2.457 2.457a.678.678 0 0 0 .644.178l2.189-.547a1.745 1.745 0 0 1 1.494.315l2.306 1.794c.829.645.905 1.87.163 2.611l-1.034 1.034c-.74.74-1.846 1.065-2.877.702a18.634 18.634 0 0 1-7.01-4.42 18.634 18.634 0 0 1-4.42-7.009c-.362-1.03-.037-2.137.703-2.877L1.885.511z"/> 56033 </svg> 56034 <strong>Telefone </strong>: <a title="(21) 2604-7350" href="tel:2126047350"> (21) 2604-7350</a> 56035 </div> 56036 56037 <div class="pb-1"> 56038 56039 56040 <svg style="margin-bottom: -2px;margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-whatsapp" viewBox="0 0 16 16"> 56041 <path d="M13.601 2.326A7.854 7.854 0 0 0 7.994 0C3.627 0 .068 3.558.064 7.926c0 1.399.366 2.76 1.057 3.965L0 16l4.204-1.102a7.933 7.933 0 0 0 3.79.965h.004c4.368 0 7.926-3.558 7.93-7.93A7.898 7.898 0 0 0 13.6 2.326zM7.994 14.521a6.573 6.573 0 0 1-3.356-.92l-.24-.144-2.494.654.666-2.433-.156-.251a6.56 6.56 0 0 1-1.007-3.505c0-3.626 2.957-6.584 6.591-6.584a6.56 6.56 0 0 1 4.66 1.931 6.557 6.557 0 0 1 1.928 4.66c-.004 3.639-2.961 6.592-6.592 6.592zm3.615-4.934c-.197-.099-1.17-.578-1.353-.646-.182-.065-.315-.099-.445.099-.133.197-.513.646-.627.775-.114.133-.232.148-.43.05-.197-.1-.836-.308-1.592-.985-.59-.525-.985-1.175-1.103-1.372-.114-.198-.011-.304.088-.403.087-.088.197-.232.296-.346.1-.114.133-.198.198-.33.065-.134.034-.248-.015-.347-.05-.099-.445-1.076-.612-1.47-.16-.389-.323-.335-.445-.34-.114-.007-.247-.007-.38-.007a.729.729 0 0 0-.529.247c-.182.198-.691.677-.691 1.654 0 .977.71 1.916.81 2.049.098.133 1.394 2.132 3.383 2.992.47.205.84.326 1.129.418.475.152.904.129 1.246.08.38-.058
560411.171-.48 1.338-.943.164-.464.164-.86.114-.943-.049-.084-.182-.133-.38-.232z"/> 56042 </svg> 56043 <strong>WhatsApp</strong>: <a title="WhatsApp" aria-label="Falar no WhatsApp" href="https://api.whatsapp.com/send?phone=552126047350" rel="noreferrer" target="_blank">(21) 2604-7350</a> 56044 </div> 56045 56046 <div class="pb-1"> 56047 <svg style="margin-bottom: -3px;margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-envelope" viewBox="0 0 16 16"> 56048 <path d="M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4Zm2-1a1 1 0 0 0-1 1v.217l7 4.2 7-4.2V4a1 1 0 0 0-1-1H2Zm13 2.383-4.708 2.825L15 11.105V5.383Zm-.034 6.876-5.64-3.471L8 9.583l-1.326-.795-5.64 3.47A1 1 0 0 0 2 13h12a1 1 0 0 0 .966-.741ZM1 11.105l4.708-2.897L1 5.383v5.722Z"/> 56049 </svg> 56050 56051 <strong>E-mail</strong>: <a title="[email protected]" href="mailto:[email protected]">[email protected]</a> 56052 </div> 56053 56054 <div class="pb-1"> 56055 <svg style="margin-bottom: -3px;margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clock" viewBox="0 0 16 16"> 56056 <path d="M8 3.5a.5.5 0 0 0-1 0V9a.5.5 0 0 0 .252.434l3.5 2a.5.5 0 0 0 .496-.868L8 8.71V3.5z"/> 56057 <path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm7-8A7 7 0 1 1 1 8a7 7 0 0 1 14 0z"/> 56058 </svg> 56059 <strong>Horário de Atendimento</strong> <br /> 56060 Segunda a Sexta das 8hs as 17:30hs 56061 </div> 56062 56063 </div> 56064 56065 </div> 56066 56067 <div class="box"> 56068 56069 <div class="pb-2 footer-sobre"> 56070 Farmácia S J do Jabour LTDA EPP. CNPJ 02.648.081/0001-66. I.E. 86.243.911. I.M. 86.370. V.S.M. 62.03141/2024-9. Anvisa A.F.E. 1.403586. Anvisa A.E. 0.944.051. Mapa RJ 001585-7. Polícia Federal 2022-00617881. Farmacêutico Responsável Dr. Pedro Regufe CRF-RJ 30.669 || SJ do Jabour BR LTDA ME. CNPJ 24.111.813/0001-17. I.E. 14.358.668. 56071 </div> 56072 56073 <div class="title">Selos de Segurança </div> 56074 56075 <ul class="security-seals flex f-wrap"> 56076 56077 <li class="google-seal"> 56078 <a href="https://transparencyreport.google.com/safe-browsing/search?url=https://www.farmacam.com.br" target="_blank" rel="noreferrer noopener" title="Google Safe Browsing" aria-label="Verificar segurança do site"> 56079 <span class="icon icon-shield vertical-align"></span> 56080 <span class="icon icon-google vertical-align""></span> 56081 </a> 56082 </li> 56083 56084 <li class="ebit-seal"> 56085 56086 <center> 56087 <a id="seloEbit" href="https://www.ebit.com.br/114195" target="_blank" data-noop="redir(this.href);" rel="noopener"></a> 56088
56088<script type="text/javascript" id="getSelo" defer src="https://imgs.ebit.com.br/ebitBR/selo-ebit/js/getSelo.js?114195"></script>
56088 56089 </center> 56090 </li> 56091 56092 <li class="loja-protegida-seal"> 56093 <center> 56094 <a href='https://www.lojaprotegida.com.br/1063102' target='_blank' rel='noopener'> 56095 <img src="//images.tcdn.com.br/commerce/assets/store/img/selo_lojaprotegida.gif?361afbf9ab2035cfedf850d5be0955f4" alt="Loja Protegida" title="Loja Protegida" border="0" /> 56096 56097 </a> 56098 </center> 56099 </li> 56100 56101 </ul> 56102 56103 56104 56105 56106 56107 56108 <div class="title mt-1">Rastreio</div> 56109 56110 <div class="box-rastreio"> 56111 <form id="rastreamentoForm" 56112 data-url="https://www.linkcorreios.com.br" 56113 data-campo="path"> 56114 56115 <input type="text" 56116 id="codigoRastreio" 56117 maxlength="30" 56118 placeholder="Insira o código" 56119 required> 56120 56121 <button type="submit">Rastrear</button> 56122 </form> 56123 </div> 56124 56125 56126 </div> 56127 56128 </div> 56129 56130 <div class="footer-logo pt-2 mt-2 text-center"> 56131 56132 <a class="logo" href="https://www.farmacam.com.br" title="Farmacam" aria-label="Farmacam"> 56133 <img title="Farmacam" aria-label="Farmacam" src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/farmacam_logomarca.png?40911a9f4d7a99b6eef6b4ae366be082" class="lazyload" alt="Farmacam" /> 56134 </a> 56135 56136 </div> 56137 56138 </div> 56139 56140 <div class="copy"> 56141 <div class="container flex align-center justify-center"> 56142 56143 <div class="tray"> 56144 56145 <div class="box-creditos"> 56146 <div data-tray-tst="logo_tray" id="NavLogoTray"> 56147 <span class="logotray-message" >Tecnologia <a href=http://www.tray.com.br/?utm_source=rodape&utm_medium=lojas&utm_campaign=1063102&utm_term=Varejo target="_blank" rel="nofollow">Tray</a></span> 56148 <br/> 56149 <span data-tray-tst="page_load_info" class="timelogotray"> 56150 Load time: 2.023 secs - 24-09-2026 16:57:12 - node: commerce-web23-corp-tmk - store 56151 </span> 56152</div> 56153 | <a title="DevRocket" href="https://devrocket.com.br/" target="_blank"><strong>DevRocket</strong></a> 56154 </div> 56155 56156 </div> 56157 56158 </div> 56159 </div> 56160 56161</footer> 56162 56163 56164 <div class="box-opcoes-flutuantes"> 56165 56166 <div class="button-top"> 56167 <div class="box-opcao-item"> 56168 <div class="voltar-topo" role="button" aria-label="Voltar ao topo da página" tabindex="0"> 56169 <div class="voltar-topo-icone"> 56170 <svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" fill="currentColor" class="bi bi-chevron-up" viewBox="0 0 16 16"> 56171 <path fill-rule="evenodd" d="M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708l6-6z"/> 56172 </svg> 56173 </div> 56174 </div> 56175 </div> 56176 </div> 56177 56178 <div class="options-social hamburger"> 56179 56180 <div class="options-social-button" role="button" aria-label="Abrir menu de redes sociais" tabindex="0"> 56181 <svg class="open-icone" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"> 56182 <path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/> 56183 </svg> 56184 56185 56186 <svg class="close-icone bi bi-x-lg" xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 16 16"> 56187 <path d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708
56187L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"/> 56188 </svg> 56189 56190 </div> 56191 56192 <div class="options-social-itens"> 56193 <div class="box-opcao-item"> 56194 <div class="instagram-flutuante"> 56195 <a title="instagram" aria-label="Seguir no Instagram" href="https://www.instagram.com/farmacam/" rel="noreferrer" target="_blank"> 56196 <svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" fill="currentColor" class="bi bi-instagram" viewBox="0 0 16 16"> 56197 <path d="M8 0C5.829 0 5.556.01 4.703.048 3.85.088 3.269.222 2.76.42a3.917 3.917 0 0 0-1.417.923A3.927 3.927 0 0 0 .42 2.76C.222 3.268.087 3.85.048 4.7.01 5.555 0 5.827 0 8.001c0 2.172.01 2.444.048 3.297.04.852.174 1.433.372 1.942.205.526.478.972.923 1.417.444.445.89.719 1.416.923.51.198 1.09.333 1.942.372C5.555 15.99 5.827 16 8 16s2.444-.01 3.298-.048c.851-.04 1.434-.174 1.943-.372a3.916 3.916 0 0 0 1.416-.923c.445-.445.718-.891.923-1.417.197-.509.332-1.09.372-1.942C15.99 10.445 16 10.173 16 8s-.01-2.445-.048-3.299c-.04-.851-.175-1.433-.372-1.941a3.926 3.926 0 0 0-.923-1.417A3.911 3.911 0 0 0 13.24.42c-.51-.198-1.092-.333-1.943-.372C10.443.01 10.172 0 7.998 0h.003zm-.717 1.442h.718c2.136 0 2.389.007 3.232.046.78.035 1.204.166 1.486.275.373.145.64.319.92.599.28.28.453.546.598.92.11.281.24.705.275 1.485.039.843.047 1.096.047 3.231s-.008 2.389-.047 3.232c-.035.78-.166 1.203-.275 1.485a2.47 2.47 0 0 1-.599.919c-.28.28-.546.453-.92.598-.28.11-.704.24-1.485.276-.843.038-1.096.047-3.232.047s-2.39-.009-3.233-.047c-.78-.036-1.203-.166-1.485-.276a2.478 2.478 0 0 1-.92-.598 2.48 2.48 0 0 1-.6-.92c-.109-.281-.24-.705-.275-1.485-.038-.843-.046-1.096-.046-3.233 0-2.136.008-2.388.046-3.231.036-.78.166-1.204.276-1.486.145-.373.319-.64.599-.92.28-.28.546-.453.92-.598.282-.11.705-.24 1.485-.276.738-.034 1.024-.044 2.515-.045v.002zm4.988 1.328a.96.96 0 1 0 0 1.92.96.96 0 0 0 0-1.92zm-4.27 1.122a4.109 4.109 0 1 0 0 8.217 4.109 4.109 0 0 0 0-8.217zm0 1.441a2.667 2.667 0 1 1 0 5.334 2.667 2.667 0 0 1 0-5.334z"/> 56198 </svg> 56199 </a> 56200 </div> 56201 </div> 56202 <div class="box-opcao-item"> 56203 <div class="youtube-flutuante"> 56204 <a title="Assistir no YouTube" aria-label="Assistir no YouTube" href="https://www.youtube.com/@farmacam2239" rel="noreferrer" target="_blank"> 56205 <svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" fill="currentColor" class="bi bi-youtube" viewBox="0 0 16 16"> 56206 <path d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408L6.4 5.209z"/> 56207 </svg> 56208 </a> 56209 </div> 56210 </div> 56211 <div class="box-opcao-item"> 56212 <div class="tiktok-flutuante"> 56213 <a title="Ver no TikTok" aria-label="Ver no TikTok" href="https://tiktok.com/@farmacam" rel="noreferrer" target="_blank"> 56214 <svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" fill="currentColor" class="bi bi-tiktok" viewB
56214ox="0 0 16 16"> 56215 <path d="M9 0h1.98c.144.715.54 1.617 1.235 2.512C12.895 3.389 13.797 4 15 4v2c-1.753 0-3.07-.814-4-1.829V11a5 5 0 1 1-5-5v2a3 3 0 1 0 3 3V0Z"/> 56216 </svg> 56217 </a> 56218 </div> 56219 </div> 56220 <div class="box-opcao-item"> 56221 <div class="facebook-flutuante"> 56222 <a title="Ver no Facebook" aria-label="Ver no Facebook" href="https://www.facebook.com/Farmacam" rel="noreferrer" target="_blank"> 56223 <i class="icon icon-facebook v-align-middle"></i> 56224 </a> 56225 </div> 56226 </div> 56227 </div> 56228 </div> 56229 </div> 56230 56231 56232 56233 <div class="carrinho-lateral"> 56234 56235 <div class="carrinho-lateral-cabecalho"> 56236 <div class="carrinho-lateral-cabecalho-item"> 56237 <h3>Meu Carrinho</h3> 56238 </div> 56239 <div class="carrinho-lateral-cabecalho-item carrinho-lateral-fechar" role="button" aria-label="Fechar carrinho" tabindex="0"> 56240 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" class="bi bi-x-lg" viewBox="0 0 16 16"> 56241 <path d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"/> 56242 </svg> 56243 </div> 56244 </div> 56245 56246 <div class="carrinho-lateral-corpo"></div> 56247 56248 56249 <div class="carrinho-lateral-rodape"> 56250 56251 <div class="carrinho-lateral-rodape-item carrinho-lateral-subtotal"> 56252 56253 </div> 56254 56255 <div class="carrinho-lateral-rodape-item carrinho-lateral-finalizar-compra"> 56256 <a title="Carrinho" href="/loja/redirect_cart_service.php?loja=1063102"> 56257 Finalizar Compra 56258 </a> 56259 </div> 56260 56261 <div class="carrinho-lateral-rodape-item carrinho-lateral-continuar-comprando" role="button" aria-label="Continuar comprando" tabindex="0"> 56262 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" style="margin-bottom: -4px;" fill="currentColor" class="bi bi-arrow-left" viewBox="0 0 16 16"> 56263 <path fill-rule="evenodd" d="M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8z"/> 56264 </svg> 56265 Continuar Comprando 56266 </div> 56267 56268 </div> 56269 56270 </div> 56271 56272 <div class="carrinho-fundo-sombra carrinho-lateral-fechar menu-lateral-fechar"></div> 56273 56274 56275 56276<style> 56277#farmacam-social-proof { 56278 position: fixed !important; 56279 left: 50% !important; 56280 bottom: 20px !important; 56281 top: auto !important; 56282 right: auto !important; 56283 z-index: 2147483647 !important; 56284 56285 width: auto !important; 56286 max-width: min(520px, calc(100vw - 40px)) !important; 56287 padding: 14px 18px !important; 56288 56289 background: #fff !important; 56290 color: #333 !important; 56291 border: 1px solid rgba(0,0,0,.08) !important; 56292 border-radius: 10px !important; 56293 box-shadow: 0 8px 28px rgba(0,0,0,.16) !important; 56294 56295 font-size: 14px !important; 56296 line-height: 1.45 !important; 56297 font-weight: 500 !important; 56298 text-align: center !important; 56299 56300 opacity: 0 !important; 56301 visibility: hidden !important; 56302 pointer-events: none !important; 56303 transform: translate(-50%, 18px) !important; 56304 56305 transition: 56306 opacity .25s ease, 56307 transform .25s ease, 56308 visibility .25s ease !important; 56309} 56310 56311#farmacam-social-proof.is-visible { 56312 opacity: 1 !important; 56313 visibility: visible !important; 56314 transform: translate(-50%, 0) !important; 56315} 56316 56317@media (max-width: 767px) { 56318 #farmacam-social-proof { 56319 bottom: 12px !important; 56320 width: calc(100vw - 24px) !important; 56321 max-width: calc(100vw - 24px) !important; 56322 padding: 13px 15px !important; 56323 font-size: 13px !important; 56324 } 56325} 56326</style> 56327 56328<div 56329 id="farmacam-social-proof" 56330 role="status"
56331 aria-live="polite" 56332 aria-atomic="true"></div> 56333
56334<script> 56335(function () { 56336 'use strict'; 56337 56338 var VERSION = '2026-08-20-rotation-1'; 56339 var ENDPOINT = 'https://news-sales-category-app.farmacam.com.br/latest.php'; 56340 56341 /* 56342 * REGRA FINAL 56343 * 56344 * Primeira prova: 10 segundos 56345 * Tempo visível: 6 segundos 56346 * Intervalo entre provas: 45 segundos 56347 * Quantidade máxima: ilimitada 56348 * Repetição após terminar lista: NÃO 56349 * Ordem: aleatória 56350 * localStorage: NÃO 56351 * sessionStorage: NÃO 56352 * 56353 * "Não repetir" vale enquanto esta página estiver aberta. 56354 * Como solicitado, nenhum histórico é persistido no navegador. 56355 */ 56356 var FIRST_DELAY_MS = 10000; 56357 var VISIBLE_MS = 6000; 56358 var INTERVAL_MS = 45000; 56359 56360 var pollTimer = null; 56361 var hideTimer = null; 56362 var requestInFlight = false; 56363 var started = false; 56364 56365 /* 56366 * Memória apenas desta execução da página. 56367 * Não é localStorage nem sessionStorage. 56368 */ 56369 var shownIds = Object.create(null); 56370 var lastShownAt = 0; 56371 56372 function getPopup() { 56373 var el = document.getElementById('farmacam-social-proof'); 56374 56375 if (el && el.parentNode !== document.body) { 56376 document.body.appendChild(el); 56377 } 56378 56379 return el; 56380 } 56381 56382 function hidePopup() { 56383 var el = getPopup(); 56384 56385 if (el) { 56386 el.classList.remove('is-visible'); 56387 } 56388 } 56389 56390 function isValidItem(item) { 56391 return !!( 56392 item && 56393 item.id !== undefined && 56394 item.id !== null && 56395 String(item.id) !== '' && 56396 typeof item.message === 'string' && 56397 item.message.trim() !== '' 56398 ); 56399 } 56400 56401 function getUnseenItems(items) { 56402 return items.filter(function (item) { 56403 if (!isValidItem(item)) { 56404 return false; 56405 } 56406 56407 return !shownIds[String(item.id)]; 56408 }); 56409 } 56410 56411 function pickRandom(items) { 56412 if (!items.length) { 56413 return null; 56414 } 56415 56416 return items[ 56417 Math.floor(Math.random() * items.length) 56418 ]; 56419 } 56420 56421 function millisecondsUntilNextProof() { 56422 if (!lastShownAt) { 56423 return 0; 56424 } 56425 56426 return Math.max( 56427 0, 56428 INTERVAL_MS - (Date.now() - lastShownAt) 56429 ); 56430 } 56431 56432 function render(item) { 56433 var el = getPopup(); 56434 56435 if (!el || !isValidItem(item)) { 56436 return false; 56437 } 56438 56439 var id = String(item.id); 56440 56441 /* 56442 * Nunca mostra novamente um item já exibido 56443 * durante esta execução da página. 56444 */ 56445 if (shownIds[id]) { 56446 return false; 56447 } 56448 56449 /* 56450 * Proteção para chamadas extras causadas por foco/ 56451 * visibilitychange não furarem o intervalo de 45s. 56452 */ 56453 if (millisecondsUntilNextProof() > 0) { 56454 return false; 56455 } 56456 56457 document.body.appendChild(el); 56458 el.textContent = item.message; 56459 el.classList.add('is-visible'); 56460 56461 var now = Date.now(); 56462 56463 shownIds[id] = true; 56464 lastShownAt = now; 56465 56466 clearTimeout(hideTimer); 56467 hideTimer = setTimeout( 56468 hidePopup, 56469 VISIBLE_MS 56470 ); 56471 56472 window.FarmacamSocialProof.lastRendered = { 56473 id: id, 56474 message: item.message, 56475 at: now 56476 }; 56477 56478 window.FarmacamSocialProof.shownCount = 56479 Object.keys(shownIds).length; 56480 56481 return true; 56482 } 56483 56484 function scheduleNext(delay) { 56485 clearTimeout(pollTimer); 56486 56487 pollTimer = setTimeout( 56488 check, 56489 typeof delay === 'number' 56490 ? Math.max(0, delay) 56491 : INTERVAL_MS 56492 ); 56493 } 56494 56495 function check() { 56496 if (requestInFlight) { 56497 return; 56498 } 56499 56500 /* 56501 * Se uma chamada ocorrer por foco antes dos 45s, 56502 * simplesmente espera o tempo restante. 56503 */ 56504 var wait = millisecondsUntilNextProof(); 56505 56506 if (wait > 0) { 56507 scheduleNext(wait); 56508 return; 56509 } 56510 56511 requestInFlight = true; 56512 56513 fetch( 56514 ENDPOINT + '?_=' + Date.now(), 56515 { 56516 method: 'GET', 56517 cache: 'no-store' 56518 } 56519 ) 56520 .then(function (response) { 56521 if (!response.ok) { 56522 throw new Error( 56523 'HTTP ' + response.status 56524 ); 56525 } 56526 56527 return response.json(); 56528 }) 56529 .then(function (data) { 56530 window.FarmacamSocialProof.lastResponse = data; 56531 56532 if ( 56533 !data || 56534 data.ok !== true || 56535 !Array.isArray(data.items) || 56536 data.items.length === 0 56537 ) { 56538 return; 56539 } 56540 56541 /* 56542 * CORREÇÃO PRINCIPAL: 56543 * 56544 * O código antigo fazia: 56545 * render(data.items[0]) 56546 * 56547 * Agora procuramos TODOS os itens ainda nã
56547o exibidos 56548 * e sorteamos um deles. 56549 */ 56550 var unseen = getUnseenItems(data.items); 56551 56552 if (unseen.length === 0) { 56553 /* 56554 * Todas as provas atualmente disponíveis já foram 56555 * mostradas nesta página. 56556 * 56557 * Não repetimos nenhuma. 56558 * 56559 * Continuamos consultando silenciosamente para que 56560 * uma prova NOVA, criada enquanto o cliente ainda 56561 * estiver navegando, possa aparecer depois. 56562 */ 56563 window.FarmacamSocialProof.allCurrentItemsShown = true; 56564 return; 56565 } 56566 56567 window.FarmacamSocialProof.allCurrentItemsShown = false; 56568 56569 render( 56570 pickRandom(unseen) 56571 ); 56572 }) 56573 .catch(function (error) { 56574 window.FarmacamSocialProof.lastError = 56575 String(error); 56576 56577 console.error( 56578 '[Farmacam Social Proof]', 56579 error 56580 ); 56581 }) 56582 .then(function () { 56583 requestInFlight = false; 56584 56585 /* 56586 * Nova tentativa/prova somente após 45 segundos. 56587 */ 56588 scheduleNext(INTERVAL_MS); 56589 }); 56590 } 56591 56592 function start() { 56593 if (started) { 56594 return; 56595 } 56596 56597 var el = getPopup(); 56598 56599 if (!el) { 56600 setTimeout(start, 300); 56601 return; 56602 } 56603 56604 started = true; 56605 56606 /* 56607 * Primeira prova 10 segundos após carregar a página. 56608 */ 56609 scheduleNext(FIRST_DELAY_MS); 56610 56611 /* 56612 * Se o usuário voltar à aba, podemos consultar, 56613 * mas check() continua respeitando os 45 segundos. 56614 */ 56615 document.addEventListener( 56616 'visibilitychange', 56617 function () { 56618 if (!document.hidden) { 56619 check(); 56620 } 56621 } 56622 ); 56623 56624 window.addEventListener( 56625 'focus', 56626 check 56627 ); 56628 } 56629 56630 window.FarmacamSocialProof = { 56631 version: VERSION, 56632 start: start, 56633 check: check, 56634 hide: hidePopup, 56635 render: render, 56636 lastResponse: null, 56637 lastRendered: null, 56638 lastError: null, 56639 shownCount: 0, 56640 allCurrentItemsShown: false 56641 }; 56642 56643 if (document.readyState === 'loading') { 56644 document.addEventListener( 56645 'DOMContentLoaded', 56646 start 56647 ); 56648 } else { 56649 start(); 56650 } 56651})(); 56652</script>
56652 56653 56654 </div> 56655 <div> 56656 <!-- Loja Status: --> </div> 56657 56658 56659
56659<script type="text/javascript" src="https://images.tcdn.com.br/commerce/assets/store/js/dist/pageview.min.js?361afbf9ab2035cfedf850d5be0955f4" id="pageview-script" async defer="" data-store="1063102"></script>
56659 56660 <div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel1" aria-hidden="true"> 56661 <div class="modal-dialog modal-dialog-center"> 56662 <div class="modal-content"> 56663 <div class="modal-header"> 56664 <button type="button" class="close" data-dismiss="modal" aria-label="Close" id="modal-close-button"><span aria-hidden="true">×</span></button> 56665 <h4 class="modal-title" id="myModalLabel1"></h4> 56666 </div> 56667 56668 <div class="modal-body"> 56669 <img class="loader" src="https://images.tcdn.com.br/commerce/assets/store/img/loading.svg" alt="load" style="display:none" loading="lazy" width="48" height="48" /> 56670 56671 <div id="modal-content"></div> 56672 </div> 56673 56674 <div class="modal-footer"> 56675 </div> 56676 </div> 56677 </div> 56678</div> 56679 56680<div data-module="render" data-render="snippets/cart_preview"></div> 56681 56682<div class="modal fade" id="modal-form" tabindex="-1" role="dialog" aria-labelledby="myModalLabel2" aria-hidden="true" > 56683 <div class="modal-dialog modal-dialog-center"> 56684 <div class="modal-content" data-tray-tst="modal"> 56685 <div class="modal-header"> 56686 <button type="button" class="close" data-dismiss="modal" aria-label="Close" id="modal-close-button"><span aria-hidden="true">×</span></button> 56687 <h4 class="modal-title" id="myModalLabel2"></h4> 56688 </div> 56689 56690 <div class="modal-body"> 56691 <img class="loader" src="https://images.tcdn.com.br/commerce/assets/store/img/loading.svg" alt="load" style="display:none" loading="lazy" width="48" height="48" /> 56692 56693 <div class="wrapper" id="wrapper" align="center"> 56694 <div id="Body" align="left" style="min-width: 0;"> 56695 <div id="div1bg" align="center" class=" background-no-color background-no-image background-pos-no background-no-repeat"> 56696 <div id="div2bg" class="center" align="left" style="width: auto;"> 56697 <div id="NavCentral" class=""> 56698 <div id="dive7rCenterTop"></div> 56699 <div id="Page" class="font-default"> 56700 56701 <div id="modal-form-content" style="padding-bottom:10px"></div> 56702 56703 </div> 56704 <div id="dive7rCenterBottom"></div> 56705 </div> 56706 </div> 56707 </div> 56708 </div> 56709 </div> 56710 56711 </div> 56712 56713 <div class="modal-footer"> 56714 </div> 56715 </div> 56716 56717 </div> 56718</div> 56719 56720<iframe id="modal-form-iframe" height="0" width="0" frameborder="0" marginwidth="0" marginheight="0" style="display:none"></iframe> 56721 56722 56723 56724 56725 <style> 56726:root{ 56727 --favorito-red: #f01d2c; 56728} 56729 56730/* Menu */ 56731.favoritos:hover{ 56732 cursor: pointer; 56733} 56734 56735.favoritos-qtde{ 56736 position: absolute; 56737 display: none; 56738 width: 20px; 56739 height: 20px; 56740 border-radius: 20px; 56741 justify-content: center; 56742 align-items: center; 56743 font-size: 10px; 56744 font-weight: 300; 56745 line-height: 1; 56746 color: #ffffff; 56747 background-color: var(--favorito-red); 56748 margin-top: -32px; 56749 margin-left: 20px; 56750} 56751.favoritos-qtde.active{ 56752 display: flex; 56753} 56754 56755.favoritos:has(.favoritos-qtde.active){ 56756 margin-right: 12px; 56757} 56758 56759@media (max-width: 575px){ 56760 .favoritos:has(.favoritos-qtde.active){ 56761 margin-right: 16px; 56762 } 56763} 56764</style> 56765 56766<div id="favoritos-modal" class="overlay-favoritos-modal"> 56767 <div class="favoritos-modal"> 56768 56769 <div> 56770 <h2>Favoritos</h2> 56771 <span class="favoritos-modal-close"> 56772 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-x-lg" viewBox="0 0 16 16"> 56773 <path d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z"/> 56774 </svg> 56775 </span> 56776 </div> 56777 56778 <p>Confira abaixo, todos os produtos que você adicionou como <strong>favorito</strong>.</p> 56779 56780 <div class="favoritos-modal-produtos swiper"> 56781 <div class="swiper-container"> 56782 <div class="swiper-wrapper"></div> 56783 <div class="dots"></div> 56784 </div> 56785 </div> 56786 56787 </div> 56788</div> 56789 56790<style> 56791 .overlay-favoritos-modal { 56792 position: fixed; 56793 top: 0; 56794 bottom: 0; 56795 left: 0; 56796 right: 0; 56797 background: rgba(0, 0, 0, 0.7); 56798 transition: opacity .4s; 56799 visibility: hidden; 56800 opacity: 0; 56801 z-index: 999999; 56802 } 56803 56804 .overlay-favoritos-modal.active { 56805 visibility: visible; 56806 opacity: 1; 56807 } 56808 56809 .favoritos-modal { 56810 margin: 70px auto; 56811 padding: 20px; 56812 background: #fff; 56813 border-radius: 5px; 56814 width: 100%; 56815 max-width: 900px; 56816 position: relative; 56817 transition: all .4s ease-in-out; 56818 z-index: 9999999; 56819 } 56820 56821 .favoritos-modal h2 { 56822 width: 88%; 56823 margin-top: 0; 56824 color: #000000; 56825 font-family: Tahoma, Arial, sans-serif; 56826 } 56827 56828 .favoritos-modal .favoritos-modal-close { 56829 position: absolute; 56830 top: 20px; 56831 right: 30px; 56832 transition: all .4ms; 56833 font-size: 30px; 56834 font-weight: bold; 56835 text-decoration: none; 56836 color: #000000; 56837 } 56838
56839 .favoritos-modal .favoritos-modal-close:hover { 56840 cursor: pointer; 56841 color: rgba(0, 0, 0, 0.5); 56842 } 56843 56844 .favoritos-modal .content { 56845 max-height: 30%; 56846 overflow: auto; 56847 } 56848 56849 .favoritos-modal-produtos{ 56850 margin-top: 2rem; 56851 margin-bottom: 2rem; 56852 } 56853 .favoritos-modal-produtos .vitrine-promocao-produtos-item{ 56854 display: block; 56855 min-height: 300px; 56856 padding: 40px 10px; 56857 } 56858 .favoritos-modal-produtos .vitrine-promocao-produtos-item-dados, 56859 .favoritos-modal-produtos .vitrine-promocao-produtos-item-imagem{ 56860 text-align: center; 56861 } 56862 56863 .favoritos-modal-produtos-item{ 56864 text-align: center; 56865 } 56866 .favoritos-modal-produtos-nome{ 56867 font-size: .925rem; 56868 margin-bottom: .8rem; 56869 } 56870 .favoritos-modal-produtos-imagem img{ 56871 max-width: 100%; 56872 } 56873 56874 @media screen and (max-width: 1080px) { 56875 .favoritos-modal { 56876 width: 80%; 56877 } 56878 } 56879</style> 56880 56881 56882 56883
56883<script type="text/javascript" src="//images.tcdn.com.br/commerce/assets/store/js/dist/security/dom-clobbering-protection.js?361afbf9ab2035cfedf850d5be0955f4" ></script>
vendor: 1 bytes, line 56883
56883
56884<script type="text/javascript" src="//images.tcdn.com.br/commerce/assets/store/js/dist/jquery-3.6.0.min.js?361afbf9ab2035cfedf850d5be0955f4" rel="preload" ></script>
vendor: 1 bytes, line 56884
56884
56885<script type="text/javascript" src="//images.tcdn.com.br/commerce/assets/store/js/pag-lazy.js?361afbf9ab2035cfedf850d5be0955f4" ></script>
vendor: 1 bytes, line 56885
56885
56886<script type="text/javascript" src="//images.tcdn.com.br/commerce/assets/store/js/ga4.js?361afbf9ab2035cfedf850d5be0955f4" ></script>
vendor: 1 bytes, line 56886
56886
56887<script type="text/javascript" src="//images.tcdn.com.br/commerce/assets/store/js/dist/autocomplete.min.js?361afbf9ab2035cfedf850d5be0955f4" ></script>
vendor: 1 bytes, line 56887
56887
56888<script type="text/javascript" src="//images.tcdn.com.br/pmax/static/main.js?caid=TQ5VCLi29t8ZEMLy7dsC&ctid=729512258&pmax=2d9fabe17af36456f86af8950a4cb607&d372f39a8316dfc1d35b13d03718d8dd&361afbf9ab2035cfedf850d5be0955f4&361afbf9ab2035cfedf850d5be0955f4" async="true" ></script>
vendor: 1 bytes, line 56888
56888
56889<script type="text/javascript" src="//images.tcdn.com.br/commerce/assets/store/js/dist/facebook-conversion.js?pixel=941902043408137&9b14d1cd8d677745bbab2aa17a346cb1=&361afbf9ab2035cfedf850d5be0955f4&361afbf9ab2035cfedf850d5be0955f4" async="true" ></script>
vendor: 1 bytes, line 56889
56889
56890<script type="text/javascript" src="//app.cartstack.com.br/activeAPI/load.js?2cb4810f015bdbe0b7b0001c4c8e86c3&361afbf9ab2035cfedf850d5be0955f4&361afbf9ab2035cfedf850d5be0955f4" async="true" ></script>
vendor: 1 bytes, line 56890
56890
56891<script type="text/javascript" src="//manyconvert.com/scripts/tray/?89228be10fdf0825aa39f4f5cdc8ac8c&361afbf9ab2035cfedf850d5be0955f4&361afbf9ab2035cfedf850d5be0955f4" async="true" ></script>
vendor: 1 bytes, line 56891
56891
56892<script type="text/javascript" src="//recurrence-app-cs-statics-prd.tray.com.br/Tray/recurrence-app.js?3fbc0a8f526c57594476e01bf98d019a&361afbf9ab2035cfedf850d5be0955f4&361afbf9ab2035cfedf850d5be0955f4" async="true" ></script>
vendor: 1 bytes, line 56892
56892
56893<script type="text/javascript" src="//images.tcdn.com.br/commerce/assets/store/js/dist/jquery-migrate-3.3.2.min.js?361afbf9ab2035cfedf850d5be0955f4" ></script>
vendor: 1 bytes, line 56893
56893
56894<script type="text/javascript" src="//images.tcdn.com.br/commerce/assets/store/js/dist/bootstrap-3.4.1.min.js?361afbf9ab2035cfedf850d5be0955f4" ></script>
vendor: 1 bytes, line 56894
56894
56895<script type="text/javascript" src="//images.tcdn.com.br/commerce/assets/store/js/profile.js?361afbf9ab2035cfedf850d5be0955f4" ></script>
vendor: 1 bytes, line 56895
56895
56896<script type="text/javascript" src="//images.tcdn.com.br/commerce/assets/store/js/dist/logoTrayMessageOverride.min.js?361afbf9ab2035cfedf850d5be0955f4" defer="true" ></script>
vendor: 1 bytes, line 56896
56896
56897<script type="text/javascript" src="//images.tcdn.com.br/commerce/assets/store/js/vendors/jquery.lazyload.min.js?361afbf9ab2035cfedf850d5be0955f4" ></script>
vendor: 1 bytes, line 56897
56897
56898<script type="text/javascript" src="//images.tcdn.com.br/commerce/assets/store/js/dist/LiveshopAlert.js?361afbf9ab2035cfedf850d5be0955f4" ></script>
56898 56899 56900
56901<script> 56902 var banner_vitrine_3_visualizacao = '0'; 56903</script>
56903 56904 56905 56906 56907
56908<script> 56909 function loadScript(src) { 56910 return new Promise(function (resolve, reject) { 56911 if ($("script[src='" + src + "']")?.length === 0) { 56912 var script = document.createElement('script'); 56913 script.onload = function () { 56914 resolve(); 56915 }; 56916 script.onerror = function () { 56917 reject(); 56918 }; 56919 script.src = src; 56920 document.body.appendChild(script); 56921 } else if (!$("script[src='" + src + "']")) { 56922 var script = document.createElement('script'); 56923 script.onload = function () { 56924 resolve(); 56925 }; 56926 script.onerror = function () { 56927 reject(); 56928 }; 56929 script.src = src; 56930 document.body.appendChild(script); 56931 } else { 56932 resolve(); 56933 } 56934 }); 56935 }; 56936 56937 function loadStyle(src) { 56938 return new Promise(function (resolve, reject) { 56939 if ($("link[href='" + src + "']")?.length === 0) { 56940 var style = document.createElement('link'); 56941 style.type = 'text/css'; 56942 style.rel = 'stylesheet'; 56943 style.media = 'screen'; 56944 style.onload = function () { 56945 resolve(); 56946 }; 56947 style.onerror = function () { 56948 reject(); 56949 }; 56950 style.href = src; 56951 document.querySelector("head").appendChild(style); 56952 } else if (!$("link[href='" + src + "']")) { 56953 var style = document.createElement('link'); 56954 style.type = 'text/css'; 56955 style.rel = 'stylesheet'; 56956 style.media = 'screen'; 56957 style.onload = function () { 56958 resolve(); 56959 }; 56960 style.onerror = function () { 56961 reject(); 56962 }; 56963 style.href = src; 56964 document.querySelector("head").appendChild(style); 56965 } else { 56966 resolve(); 56967 } 56968 }); 56969 }; 56970 56971 window.addEventListener('load', function () { 56972 setTimeout(async () => { 56973 await loadScript("https://images.tcdn.com.br/files/1063102/themes/216/js/lazyload.min.js?40911a9f4d7a99b6eef6b4ae366be082"); 56974 await loadScript("https://images.tcdn.com.br/files/1063102/themes/216/js/jquery.mask.min.js?40911a9f4d7a99b6eef6b4ae366be082"); 56975 await loadScript("https://images.tcdn.com.br/files/1063102/themes/216/js/js.cookie.min.js?40911a9f4d7a99b6eef6b4ae366be082"); 56976 await loadScript("https://images.tcdn.com.br/files/1063102/themes/216/js/swiper.min.js?40911a9f4d7a99b6eef6b4ae366be082"); 56977 await loadStyle("https://images.tcdn.com.br/files/1063102/themes/216/css/swiper.min.css?40911a9f4d7a99b6eef6b4ae366be082"); 56978 await loadScript("https://images.tcdn.com.br/files/1063102/themes/216/js/lite-yt-embed.js?40911a9f4d7a99b6eef6b4ae366be082"); 56979 await loadStyle("https://images.tcdn.com.br/files/1063102/themes/216/css/lite-yt-embed.css?40911a9f4d7a99b6eef6b4ae366be082"); 56980 56981 const loja_manutencao_ativo = '0'; 56982 const exibir_newsletter_popup = '0'; 56983 if (loja_manutencao_ativo != '1' && exibir_newsletter_popup == '1') { 56984 await loadStyle("https://images.tcdn.com.br/files/1063102/themes/216/css/newsletter-popup.min.css?40911a9f4d7a99b6eef6b4ae366be082"); 56985 await loadScript("https://images.tcdn.com.br/files/1063102/themes/216/js/vue.min.js?40911a9f4d7a99b6eef6b4ae366be082"); 56986 await loadScript("https://images.tcdn.com.br/files/1063102/themes/216/js/newsletter-popup.min.js?40911a9f4d7a99b6eef6b4ae366be082"); 56987 }; 56988 56989 const stories_produtos_exibir = '1'; 56990 if (loja_manutencao_ativo != '1' && stories_produtos_exibir == '1') { 56991 await loadScript("https://images.tcdn.com.br/files/1063102/themes/2
5699116/elements/stories/zuck.min.js?40911a9f4d7a99b6eef6b4ae366be082"); 56992 await loadScript("https://images.tcdn.com.br/files/1063102/themes/216/elements/stories/script.min.js?40911a9f4d7a99b6eef6b4ae366be082"); 56993 await loadStyle("https://images.tcdn.com.br/files/1063102/themes/216/elements/stories/zuck.min.css?40911a9f4d7a99b6eef6b4ae366be082"); 56994 await loadStyle("https://images.tcdn.com.br/files/1063102/themes/216/elements/stories/snapgram.min.css?40911a9f4d7a99b6eef6b4ae366be082"); 56995 await loadStyle("https://images.tcdn.com.br/files/1063102/themes/216/elements/stories/style.min.css?40911a9f4d7a99b6eef6b4ae366be082"); 56996 }; 56997 await loadStyle("https://images.tcdn.com.br/files/1063102/themes/216/css/style.min.css?40911a9f4d7a99b6eef6b4ae366be082"); 56998 await loadStyle("https://images.tcdn.com.br/files/1063102/themes/216/css/devrocket.min.css?40911a9f4d7a99b6eef6b4ae366be082"); 56999 57000 await loadScript("https://images.tcdn.com.br/files/1063102/themes/216/js/main.min.js?40911a9f4d7a99b6eef6b4ae366be082"); 57001 await loadScript("https://images.tcdn.com.br/files/1063102/themes/216/js/cart.min.js?40911a9f4d7a99b6eef6b4ae366be082"); 57002 await loadScript("https://images.tcdn.com.br/commerce/assets/store/js/dist/application.min.js?361afbf9ab2035cfedf850d5be0955f4").then(() => { 57003 vitrineScript(); 57004 if (stories_produtos_exibir == '1') { 57005 storiesFunction(); 57006 }; 57007 document.querySelector('body').removeAttribute('style'); 57008 window.scrollTo(0, 0); 57009 document.getElementById('loadOtimization').remove() 57010 }); 57011 }, 2000); 57012 }); 57013 57014</script>
57014 57015 57016 57017 57018 <!-- Inicio bloco bottom --><!-- Fim bloco bottom --> 57019 57020 57021 </body> 57022 57023<div class="widget-side"> 57024 <div class="widget-side-button"> 57025 <img class="lazyload" src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/LOGOMARCA_PARTE_GRAFICA_F.png?40911a9f4d7a99b6eef6b4ae366be082" alt="Farmacam"> 57026 </div> 57027 57028 <div class="widget-side-fundo-fechar"></div> 57029 57030 <div class="widget-side-container"> 57031 <div class="widget-side-content"> 57032 <img class="widget-side-banner lazyload" alt="bannerWidget" src="https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Upload-do-banner-para-o-pop-up.png?40911a9f4d7a99b6eef6b4ae366be082"> 57033 57034 <div class="widget-side-fechar"> 57035 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" class="bi bi-x-lg" viewBox="0 0 16 16"> 57036 <path d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"/> 57037 </svg> 57038 </div> 57039 57040 <div class="widget-side-products"> 57041 57042 <div class="widget-side-content-title "> 57043 Veja nossas recomendações 57044 </div> 57045 57046 <div class="widget-side-tabs"> 57047 <div class="widget-side-tab"> 57048 Esses só para você 57049 </div> 57050 57051 <div class="widget-side-tab"> 57052 Histórico 57053 </div> 57054 57055 <div class="widget-side-tab"> 57056 Mais acessados 57057 </div> 57058 </div> 57059 <div class="widget-side-list"> 57060 <div class="widget-side-list-item list1" data-produts="125237723,125237099,125236363,125236041,125236993"> 57061 </div> 57062 <div class="widget-side-list-item list2"> 57063 <div class="msg-list2"> 57064 Não visitou nenhum produto <br> Vamos te ajudar com algumas dicas. 57065 </div> 57066 57067 <div class="widget-side-list2-prod"> 57068 57069 57070 57071 57072 57073 <div class="widget-product-item" data-id="125245726"> 57074 <a title="Mesoporosil" class="widget-product" href="https://www.farmacam.com.br/manipulados/mesoporosil"> 57075 57076 <div class="widget-product-image"> 57077 <img src="https://images.tcdn.com.br/img/img_prod/1063102/180_mesoporosil_1_20260904155453_5d5caa6e9aa7.png" class="lazyload" alt="Mesoporosil"> 57078 </div> 57079 57080 <div class="widget-product-info"> 57081 <div class="widget-product-title">Mesoporosil</div> 57082 57083 <div class="widget-product-price"> 57084 57085 57086 57087 57088 <span class="product-has-variants text-center"> 57089 A partir de 57090 </span> 57091 57092<div class="price display-cash"> 57093 57094 57095 <span class="current-price "> 57096 R$ 55,00 57097 57098 </span> 57099 57100 <span class="product-installments"> 57101 57102 </span> 57103 57104</div> </div> 57105 </div> 57106 57107 <div class="widget-product-button"> 57108 Comprar 57109 </div> 57110 57111 </a> 57112 </div> 57113 <div class="widget-product-item" data-id="125245724"> 57114 <a title="BloomEase - Saúde da Mulher" class="widget-product" href="https://www.farmacam.com.br/manipulados/bloomease-saude-da-mulher"> 57115 57116 <div class="widget-product-image"> 57117 <img src="https://images.tcdn.com.br/img/img_prod/1063102/180_bloomease_sade_da_mulher_1_20260904160559_30b
57117600fac34a.png" class="lazyload" alt="BloomEase - Saúde da Mulher"> 57118 </div> 57119 57120 <div class="widget-product-info"> 57121 <div class="widget-product-title">BloomEase - Saúde da Mulher</div> 57122 57123 <div class="widget-product-price"> 57124 57125 57126 57127 57128 <span class="product-has-variants text-center"> 57129 A partir de 57130 </span> 57131 57132<div class="price display-cash"> 57133 57134 57135 <span class="current-price "> 57136 R$ 141,00 57137 57138 </span> 57139 57140 <span class="product-installments"> 57141 57142 </span> 57143 57144</div> </div> 57145 </div> 57146 57147 <div class="widget-product-button"> 57148 Comprar 57149 </div> 57150 57151 </a> 57152 </div> 57153 <div class="widget-product-item" data-id="125245604"> 57154 <a title="Senomat" class="widget-product" href="https://www.farmacam.com.br/senomat"> 57155 57156 <div class="widget-product-image"> 57157 <img src="https://images.tcdn.com.br/img/img_prod/1063102/180_senomat_1_20260722102502_76f78ba30c8c.png" class="lazyload" alt="Senomat"> 57158 </div> 57159 57160 <div class="widget-product-info"> 57161 <div class="widget-product-title">Senomat</div> 57162 57163 <div class="widget-product-price"> 57164 57165 57166 57167 57168 57169<div class="price display-cash"> 57170 57171 57172 <span class="current-price "> 57173 R$ 69,00 57174 57175 </span> 57176 57177 <span class="product-installments"> 57178 57179 </span> 57180 57181</div> </div> 57182 </div> 57183 57184 <div class="widget-product-button"> 57185 Comprar 57186 </div> 57187 57188 </a> 57189 </div> 57190 <div class="widget-product-item" data-id="125245730"> 57191 <a title="Curcumicel 185x - Líquida" class="widget-product" href="https://www.farmacam.com.br/manipulados/curcumicel-185x-liquida"> 57192 57193 <div class="widget-product-image"> 57194 <img src="https://images.tcdn.com.br/img/img_prod/1063102/180_curcumicel_185x_lquida_1_20260904162411_790defb88625.png" class="lazyload" alt="Curcumicel 185x - Líquida"> 57195 </div> 57196 57197 <div class="widget-product-info"> 57198 <div class="widget-product-title">Curcumicel 185x - Líquida</div> 57199 57200 <div class="widget-product-price"> 57201 57202 57203 57204 57205 <span class="product-has-variants text-center"> 57206 A partir de 57207 </span> 57208 57209<div class="price display-cash"> 57210 57211 57212 <span class="current-price "> 57213 R$ 250,00 57214 57215 </span> 57216 57217 <span class="product-installments"> 57218 57219 </span> 57220 57221</div> </div> 57222 </div> 57223 57224 <div class="widget-product-button"> 57225 Comprar 57226 </div> 57227 57228 </a> 57229 </div> 57230 <div class="widget-product-item" data-id="125245708"> 57231 <a title="Modulação Do Receptor De Glutamato -NMDA Com Magtein (Selo)" class="widget-product" href="https://www.farmacam.com.br/manipulados/modulacao-do-receptor-de-glutamato-nmda-com-magtein-selo"> 57232 57233 <div class="widget-product-image"> 57234 <img src="https://images.tcdn.com.br/img/img_prod/1063102/180_modulao_do_receptor_de_glutamato_nmda_com_magtein_1_20260901162301_4ea9f8b671c2.png" class="lazyload" alt="Modulação Do Receptor De Glutamato -NMDA Com Magtein (Selo)"> 57235 </div> 57236 57237 <div class="widget-product-info"> 57238 <div class="widget-product-title">Modulação Do Receptor De Glutamato -NMDA Com Magtein (Selo)</div> 57239 57240 <div class="widget-product-price"> 57241 57242 57243 57244 57245 <span class="product-has-variants text-center"> 57246 A partir de 57247 </span> 57248 57249<div class="price display-cash"> 57250 57251 57252 <span class="current-price "> 57253 R$ 155,00 57254 57255 </span> 57256
57257 <span class="product-installments"> 57258 57259 </span> 57260 57261</div> </div> 57262 </div> 57263 57264 <div class="widget-product-button"> 57265 Comprar 57266 </div> 57267 57268 </a> 57269 </div> 57270 <div class="widget-product-item" data-id="125245752"> 57271 <a title="Evans 5% - Creme Vaginal" class="widget-product" href="https://www.farmacam.com.br/manipulados/evans-5-creme-vaginal"> 57272 57273 <div class="widget-product-image"> 57274 <img src="https://images.tcdn.com.br/img/img_prod/1063102/180_evans_5_creme_vaginal_1_20260904175755_6fa660e574d3.png" class="lazyload" alt="Evans 5% - Creme Vaginal"> 57275 </div> 57276 57277 <div class="widget-product-info"> 57278 <div class="widget-product-title">Evans 5% - Creme Vaginal</div> 57279 57280 <div class="widget-product-price"> 57281 57282 57283 57284 57285 57286<div class="price display-cash"> 57287 57288 57289 <span class="current-price "> 57290 R$ 110,00 57291 57292 </span> 57293 57294 <span class="product-installments"> 57295 57296 </span> 57297 57298</div> </div> 57299 </div> 57300 57301 <div class="widget-product-button"> 57302 Comprar 57303 </div> 57304 57305 </a> 57306 </div> 57307 <div class="widget-product-item" data-id="125245716"> 57308 <a title="Cavaberine - Berberina Com Tecnologia Cavamax" class="widget-product" href="https://www.farmacam.com.br/manipulados/cavaberine-berberina-com-tecnologia-cavamax"> 57309 57310 <div class="widget-product-image"> 57311 <img src="https://images.tcdn.com.br/img/img_prod/1063102/180_cavaberine_berberina_com_tecnologia_cavamax_1_20260902110632_e107428f69d0.png" class="lazyload" alt="Cavaberine - Berberina Com Tecnologia Cavamax"> 57312 </div> 57313 57314 <div class="widget-product-info"> 57315 <div class="widget-product-title">Cavaberine - Berberina Com Tecnologia Cavamax</div> 57316 57317 <div class="widget-product-price"> 57318 57319 57320 57321 57322 57323<div class="price display-cash"> 57324 57325 57326 <span class="current-price "> 57327 R$ 90,00 57328 57329 </span> 57330 57331 <span class="product-installments"> 57332 57333 </span> 57334 57335</div> </div> 57336 </div> 57337 57338 <div class="widget-product-button"> 57339 Comprar 57340 </div> 57341 57342 </a> 57343 </div> 57344 <div class="widget-product-item" data-id="125245702"> 57345 <a title="Saúde Óssea Com Mesoporosil" class="widget-product" href="https://www.farmacam.com.br/manipulados/saude-ossea-com-mesoporosil"> 57346 57347 <div class="widget-product-image"> 57348 <img src="https://images.tcdn.com.br/img/img_prod/1063102/180_sade_ssea_com_mesoporosil_1_20260901131231_79619d175ffe.png" class="lazyload" alt="Saúde Óssea Com Mesoporosil"> 57349 </div> 57350 57351 <div class="widget-product-info"> 57352 <div class="widget-product-title">Saúde Óssea Com Mesoporosil</div> 57353 57354 <div class="widget-product-price"> 57355 57356 57357 57358 57359 <span class="product-has-variants text-center"> 57360 A partir de 57361 </span> 57362 57363<div class="price display-cash"> 57364 57365 57366 <span class="current-price "> 57367 R$ 159,00 57368 57369 </span> 57370 57371 <span class="product-installments"> 57372 57373 </span> 57374 57375</div> </div> 57376 </div> 57377 57378 <div class="widget-product-button"> 57379 Comprar 57380 </div> 57381 57382 </a> 57383 </div> 57384 <div class="widget-product-item" data-id="125245718">
57385 <a title="Blunad - Longevidade Celular - Energia, Vitalidade E Resiliência" class="widget-product" href="https://www.farmacam.com.br/manipulados/blunad-longevidade-celular-energia-vitalidade-e-resiliencia"> 57386 57387 <div class="widget-product-image"> 57388 <img src="https://images.tcdn.com.br/img/img_prod/1063102/180_blunad_longevidade_celular_energia_vitalidade_1_20260902114116_c4e21b8d06f0.png" class="lazyload" alt="Blunad - Longevidade Celular - Energia, Vitalidade E Resiliência"> 57389 </div> 57390 57391 <div class="widget-product-info"> 57392 <div class="widget-product-title">Blunad - Longevidade Celular - Energia, Vitalidade E Resiliência</div> 57393 57394 <div class="widget-product-price"> 57395 57396 57397 57398 57399 <span class="product-has-variants text-center"> 57400 A partir de 57401 </span> 57402 57403<div class="price display-cash"> 57404 57405 57406 <span class="current-price "> 57407 R$ 157,00 57408 57409 </span> 57410 57411 <span class="product-installments"> 57412 57413 </span> 57414 57415</div> </div> 57416 </div> 57417 57418 <div class="widget-product-button"> 57419 Comprar 57420 </div> 57421 57422 </a> 57423 </div> 57424 <div class="widget-product-item" data-id="125245728"> 57425 <a title="Curcumicel 185x" class="widget-product" href="https://www.farmacam.com.br/manipulados/curcumicel-185x"> 57426 57427 <div class="widget-product-image"> 57428 <img src="https://images.tcdn.com.br/img/img_prod/1063102/180_curcumicel_185x_1_20260904161203_f3e69168b5d5.png" class="lazyload" alt="Curcumicel 185x"> 57429 </div> 57430 57431 <div class="widget-product-info"> 57432 <div class="widget-product-title">Curcumicel 185x</div> 57433 57434 <div class="widget-product-price"> 57435 57436 57437 57438 57439 <span class="product-has-variants text-center"> 57440 A partir de 57441 </span> 57442 57443<div class="price display-cash"> 57444 57445 57446 <span class="current-price "> 57447 R$ 279,00 57448 57449 </span> 57450 57451 <span class="product-installments"> 57452 57453 </span> 57454 57455</div> </div> 57456 </div> 57457 57458 <div class="widget-product-button"> 57459 Comprar 57460 </div> 57461 57462 </a> 57463 </div> 57464 <div class="widget-product-item" data-id="125245712"> 57465 <a title="Gerenciamento De Peso Com Reducose" class="widget-product" href="https://www.farmacam.com.br/manipulados/gerenciamento-de-peso-com-reducose"> 57466 57467 <div class="widget-product-image"> 57468 <img src="https://images.tcdn.com.br/img/img_prod/1063102/180_gerenciamento_de_peso_com_reducose_1_20260901173023_d6ed72d14773.png" class="lazyload" alt="Gerenciamento De Peso Com Reducose"> 57469 </div> 57470 57471 <div class="widget-product-info"> 57472 <div class="widget-product-title">Gerenciamento De Peso Com Reducose</div> 57473 57474 <div class="widget-product-price"> 57475 57476 57477 57478 57479 <span class="product-has-variants text-center"> 57480 A partir de 57481 </span> 57482 57483<div class="price display-cash"> 57484 57485 57486 <span class="current-price "> 57487 R$ 240,00 57488 57489 </span> 57490 57491 <span class="product-installments"> 57492 57493 </span> 57494 57495</div> </div> 57496 </div> 57497 57498 <div class="widget-product-button"> 57499 Comprar 57500 </div> 57501 57502 </a> 57503 </div> 57504 <div class="widget-product-item" data-id="125245710"> 57505 <a title="Equilibrio Metabolico Com Reducose" class="widget-product" href="https://www.farmacam.com.br/manipulados/equilibrio-metabolico-com-reducose"> 57506 57507 <div class="widget-product-image"> 57508 <img src="https://images.tcdn.com.br/img/img_prod/1063102/180_equilibrio_metabolico_com_reducose_1_20260901172525_77e0768986e7.png" class="lazyload" alt="Equilibrio Metabol
57508ico Com Reducose"> 57509 </div> 57510 57511 <div class="widget-product-info"> 57512 <div class="widget-product-title">Equilibrio Metabolico Com Reducose</div> 57513 57514 <div class="widget-product-price"> 57515 57516 57517 57518 57519 <span class="product-has-variants text-center"> 57520 A partir de 57521 </span> 57522 57523<div class="price display-cash"> 57524 57525 57526 <span class="current-price "> 57527 R$ 259,00 57528 57529 </span> 57530 57531 <span class="product-installments"> 57532 57533 </span> 57534 57535</div> </div> 57536 </div> 57537 57538 <div class="widget-product-button"> 57539 Comprar 57540 </div> 57541 57542 </a> 57543 </div> 57544 <div class="widget-product-item" data-id="125245720"> 57545 <a title="Springer Proteissimo 102 - Aporte Proteico Diário" class="widget-product" href="https://www.farmacam.com.br/manipulados/springer-proteissimo-102-aporte-proteico-diario"> 57546 57547 <div class="widget-product-image"> 57548 <img src="https://images.tcdn.com.br/img/img_prod/1063102/180_springer_proteissimo_102_aporte_proteico_dirio_1_20260902133419_2c13987b692c.png" class="lazyload" alt="Springer Proteissimo 102 - Aporte Proteico Diário"> 57549 </div> 57550 57551 <div class="widget-product-info"> 57552 <div class="widget-product-title">Springer Proteissimo 102 - Aporte Proteico Diário</div> 57553 57554 <div class="widget-product-price"> 57555 57556 57557 57558 57559 <span class="product-has-variants text-center"> 57560 A partir de 57561 </span> 57562 57563<div class="price display-cash"> 57564 57565 57566 <span class="current-price "> 57567 R$ 299,00 57568 57569 </span> 57570 57571 <span class="product-installments"> 57572 57573 </span> 57574 57575</div> </div> 57576 </div> 57577 57578 <div class="widget-product-button"> 57579 Comprar 57580 </div> 57581 57582 </a> 57583 </div> 57584 <div class="widget-product-item" data-id="125245706"> 57585 <a title="Saúde Endotelial Com Mesoporosil E Sodmax" class="widget-product" href="https://www.farmacam.com.br/manipulados/saude-endotelial-com-mesoporosil-e-sodmax"> 57586 57587 <div class="widget-product-image"> 57588 <img src="https://images.tcdn.com.br/img/img_prod/1063102/180_sade_endotelial_com_mesoporosil_e_sodmax_1_20260901162520_1121a879c74f.png" class="lazyload" alt="Saúde Endotelial Com Mesoporosil E Sodmax"> 57589 </div> 57590 57591 <div class="widget-product-info"> 57592 <div class="widget-product-title">Saúde Endotelial Com Mesoporosil E Sodmax</div> 57593 57594 <div class="widget-product-price"> 57595 57596 57597 57598 57599 <span class="product-has-variants text-center"> 57600 A partir de 57601 </span> 57602 57603<div class="price display-cash"> 57604 57605 57606 <span class="current-price "> 57607 R$ 199,00 57608 57609 </span> 57610 57611 <span class="product-installments"> 57612 57613 </span> 57614 57615</div> </div> 57616 </div> 57617 57618 <div class="widget-product-button"> 57619 Comprar 57620 </div> 57621 57622 </a> 57623 </div> 57624 <div class="widget-product-item" data-id="125245704"> 57625 <a title="Prevenção Neurocognitiva Com Mesoporosil" class="widget-product" href="https://www.farmacam.com.br/manipulados/prevencao-neurocognitiva-com-mesoporosil"> 57626 57627 <div class="widget-product-image"> 57628 <img src="https://images.tcdn.com.br/img/img_prod/1063102/180_preveno_neurocognitiva_com_mesoporosil_1_20260901155155_211be4166d49.png" class="lazyload" alt="Prevenção Neurocognitiva Com Mesoporosil"> 57629 </div> 57630 57631 <div class="widget-product-info"> 57632 <div class="widget-product-title">Prevenção Neurocognitiva Com Mesoporosil</div> 57633 57634 <div class="widget-product-price"> 57635 57636 57637 57638 57639 <span class="product-has-variants text-center"> 57640 A partir de 57641 </span> 57642 57643<div class="price display-cash"> 57644 57645 57646 <span class="current-price "> 57647 R$ 218,00 57648 57649 </span> 57650
57651 <span class="product-installments"> 57652 57653 </span> 57654 57655</div> </div> 57656 </div> 57657 57658 <div class="widget-product-button"> 57659 Comprar 57660 </div> 57661 57662 </a> 57663 </div> 57664 57665 </div> 57666 </div> 57667 <div class="widget-side-list-item list3" data-prod3="125234575,125236869,125236421,125236381,125237692,"> 57668 </div> 57669 </div> 57670 </div> 57671 </div> 57672 </div> 57673</div> 57674
57675<script> 57676 57677 var ClientLog = "false" 57678 57679 /* widget-popup */ 57680 57681 function widgetProduct(dadosProd, div){ 57682 57683 var pricePromo = dadosProd.promotional_price > 0 ? `<span class="old-price">R$ ${ dadosProd.price.replace('.', ',')}</span>`: '' 57684 57685 if(dadosProd.available != 0 ){ 57686 jQuery(div).prepend(` 57687 <div class="widget-product-item" data-id="${dadosProd.id}"> 57688 <a class="widget-product" href="${dadosProd.url.https}"> 57689 57690 <div class="widget-product-image"> 57691 <img class='lazyload' src="${dadosProd.ProductImage[0].https}" alt="${ dadosProd.name }"> 57692 </div> 57693 57694 <div class="widget-product-info"> 57695 <div class="widget-product-title">${dadosProd.name}</div> 57696 57697 57698 `+(ClientLog == 'true'? 57699 `<div class="widget-product-price tray-hide" data-logged-user="true"> 57700 <div class="price display-cash"> 57701 ${pricePromo} 57702 <span class="current-price"> 57703 R$ ${dadosProd.promotional_price > 0 ? dadosProd.promotional_price.replace('.', ',') : dadosProd.price.replace('.', ',')} 57704 </span> 57705 57706 <span class="product-installments"> 57707 ${dadosProd.payment_option_html} 57708 </span> 57709 </div> 57710 </div>`: 57711 `<div class="widget-product-price"> 57712 <div class="price display-cash"> 57713 ${pricePromo} 57714 <span class="current-price"> 57715 R$ ${dadosProd.promotional_price > 0 ? dadosProd.promotional_price.replace('.', ',') : dadosProd.price.replace('.', ',')} 57716 </span> 57717 57718 <span class="product-installments"> 57719 ${dadosProd.payment_option_html} 57720 </span> 57721 </div> 57722 </div>`) 57723 +` 57724 57725 </div> 57726 57727 `+(ClientLog == 'true'? 57728 57729 `<div class="widget-product-button tray-hide" data-logged-user="true"> 57730 Comprar 57731 </div>`: 57732 `<div class="widget-product-button"> 57733 Comprar 57734 </div>`) 57735 +` 57736 57737 </a> 57738 </div> 57739 `) 57740 } 57741 } 57742 57743 jQuery('.widget-side-list-item:first-child').show() 57744 jQuery('.widget-side-list-item:not(:first-child)').hide() 57745 jQuery('.widget-side-tabs .widget-side-tab:first-child').addClass('tabShow') 57746 57747 jQuery('.widget-side-tab').click(function () { 57748 index = jQuery(this).index() 57749 57750 jQuery('.widget-side-tab').removeClass('tabShow'); 57751 jQuery(this).addClass('tabShow'); 57752 jQuery('.widget-side-list-item').hide() 57753 jQuery('.widget-side-list-item').eq(index).show() 57754 }); 57755 57756 var arryHistoric = [] 57757 var devrocket_prod = [] 57758 devrocket_prod = localStorage.getItem('widget-devrocket'); 57759 devrocket_prod = devrocket_prod != null ? devrocket_prod.toString().split(',') : devrocket_prod 57760 var numProd = 0 57761 57762 jQuery(document).on("click", '.widget-product, .product, .produto-perfil', function(){ 57763 57764 jQuery(this).parent().each(function() { 57765 57766 IdProdOne = jQuery( this ).attr('data-id') 57767 IdProdTwo = jQuery( this ).children('.product').attr('data-id') 57768 IdProdThree = jQuery( this ).children('.produto-perfil').attr('data-id') 57769 57770 if (IdProdTwo != undefined ) { 57771 numProd = IdProdTwo 57772 }else if (IdProdThree != undefined) { 57773 numProd = IdProdThree 57774 }else{ 57775 numProd = IdProdOne 57776 } 57777 57778 if (devrocket_prod != null) { 57779 57780 if (devrocket_prod.includes(numProd) === false ) { 57781 devrocket_prod.push(numProd) 57782 localStorage.setItem('widget-devrocket', devrocket_prod); 57783 57784 jQuery.ajax({ 57785 url: '/web_api/products/'+numProd, 57786 async: true 57787 }).done( (res) => { 57788 57789 produto_dados = res.Product; 57790 widgetProduct(produto_dados, '.widget-side-list-item.list2'); 57791 57792 }); 57793 } 57794 57795 } else { 57796 57797 localStorage.setItem('widget-devrocket', arryHistoric); 57798 57799 if (arryHistoric.includes(numProd) === false) { 57800 arryHistoric.push(numProd); 57801 localStorage.setItem('widget-devrocket', arryHistoric); 57802 57803 jQuery.ajax({ 57804 url: '/web_api/products/'+numProd, 57805 async: true 57806 }).done( (res) => { 57807 57808 produto_dados = res.Product; 57809 widgetProduct(produto_dados, '.widget-side-list-item.list2'); 57810 57811 }); 57812 } 57813 57814 jQuery('.widget-side-list-item.list2 .msg-list2').remove() 57815 jQuery('.widget-side-list-item.list2 .widget-side-list2-prod').remove() 57816 } 57817 }); 57818 57819 57820 setTimeout(() => { 57821 if (!jQuery('.check-user').hasClass('tray-hide')) { 57822 jQuery('.widget-side .widget-side-container .widget-side-list-item.list2 .widget-product .widget-product-info .widget-product-price').removeClass('tray-hide') 57823 jQuery('.widget-side .widget-side-container .widget-side-list-item.list2 .widget-product .widget-product-button').removeClass('tray-hide') 57824 } 57825 }, 1000); 57826 }); 57827 57828 57829 // chamado dos produtos 57830 57831 jQuery('.widget-side-button').on("click", function(){ 57832 idsProduts = jQuery('.widget-side-list-item.list1').data('produts') == undefined ? 0 : jQuery('.widget-side-list-item.list1').data('produts') 57833 idsCateg = jQuery('.widget-side-list-item.list1').data('category') == undefined ? 0 : jQuery('.widget-side-list-item.list1').data('category') 57834 idsProd3 = jQuery('.widget-side-list-item.list3').data('prod3') == undefined ? 0 : jQuery('.widget-side-list-item.list3').data('prod3') 57835 57836 if (idsProduts != 0) { 57837 57838 idsProduts = idsProduts.toString().split(',') 57839 jQuery(idsProduts).each(function(k, prod_id){ 57840 57841 jQuery.ajax({ 57842 url: '/web_api/products/'+prod_id, 57843 async: true 57844 }).done( (res) => { 57845 57846 produto_dados = res.Product; 57847 widgetProduct(produto_dados, '.widget-side-list-item.list1'); 57848 57849 }); 57850 57851 }); 57852 } 57853 57854 if (idsCateg != 0) { 57855 57856 idsCateg = idsCateg.toString().split(',') 57857
57858 jQuery(idsCateg).each(function(k, categ_id){ 57859 57860 jQuery.ajax({ 57861 url: '/web_api/products/?category_id=' + categ_id + '&limit=10', 57862 async: true 57863 }).done((res) => { 57864 57865 jQuery(res.Products).each(function(k, cat_pd){ 57866 widgetProduct( 57867 cat_pd.Product, 57868 '.widget-side-list-item.list1' 57869 ); 57870 }); 57871 57872 }); 57873 57874 }); 57875 57876 } 57877 57878 if(idsProd3!= 0){ 57879 idsProd3 = idsProd3.toString().split(',') 57880 57881 jQuery(idsProd3).each(function(k, prod_id3){ 57882 jQuery.ajax({ 57883 url: '/web_api/products/'+prod_id3, 57884 async: true 57885 }).done( (res) => { 57886 57887 produto_dados = res.Product; 57888 widgetProduct(produto_dados, '.widget-side-list-item.list3'); 57889 57890 }); 57891 }); 57892 } 57893 57894 if (devrocket_prod != null){ 57895 57896 jQuery(devrocket_prod).each(function(k, prod_id){ 57897 jQuery.ajax({ 57898 url: '/web_api/products/'+prod_id, 57899 async: true 57900 }).done( (res) => { 57901 57902 produto_dados = res.Product; 57903 widgetProduct(produto_dados, '.widget-side-list-item.list2'); 57904 57905 }); 57906 }); 57907 57908 jQuery('.widget-side-list-item.list2 .msg-list2').remove() 57909 jQuery('.widget-side-list-item.list2 .widget-side-list2-prod').remove() 57910 } 57911 57912 }) 57913 57914 57915 57916 jQuery('.widget-side-button').on('click', function(){ 57917 57918 jQuery('.widget-side-container').addClass('active'); 57919 jQuery('.widget-side-fundo-fechar').addClass('active'); 57920 57921 }); 57922 57923 jQuery('.widget-side-fundo-fechar').on('click', function(){ 57924 57925 jQuery('.widget-side-container').removeClass('active'); 57926 jQuery('.widget-side-fundo-fechar').removeClass('active'); 57927 jQuery('.widget-product-item').remove() 57928 57929 }); 57930 57931 jQuery('.widget-side-fechar').on('click', function(){ 57932 57933 jQuery('.widget-side-container').removeClass('active'); 57934 jQuery('.widget-side-fundo-fechar').removeClass('active'); 57935 jQuery('.widget-product-item').remove() 57936 57937 }); 57938</script>
57938 57939 57940 57941 57942 57943 57944
57945<script> 57946 function vitrineScript() { 57947 (function($){ 57948 57949 const store_url = "https://www.farmacam.com.br"; 57950 const url_vitrine = (window.location.origin && window.location.origin !== 'null') 57951 ? window.location.origin 57952 : store_url; 57953 var index, html_product, html_product_promo; 57954 var NameCategory = "false" 57955 var ClientLog = "false" 57956 57957 render_menu(); 57958 render_destaque(); 57959 render_vitrine(); 57960 57961 window.addEventListener('resize', function(event){ 57962 sessionStorage.removeItem('promocaoDestaqueHTML'); 57963 sessionStorage.removeItem('promocaoDestaqueID'); 57964 sessionStorage.removeItem('menuCategoriaProductCID'); 57965 sessionStorage.removeItem('vitrinePersonalizadaHTML'); 57966 sessionStorage.removeItem('menuCategoriaProductBID'); 57967 sessionStorage.removeItem('vitrinePersonalizadaID'); 57968 sessionStorage.removeItem('menuCategoriaProductCHTML'); 57969 sessionStorage.removeItem('menuCategoriaProductBHTML'); 57970 }); 57971 57972 function construtorPreco(domconstrutor){ 57973 if(jQuery('.apresentacao-preco').length > 0){ 57974 if(jQuery('.operadora + .txt-forma-pagamento:visible').length == 0){ 57975 jQuery('.operadora + .txt-forma-pagamento').remove(); 57976 } 57977 57978 var tipoexibicao = jQuery('.apresentacao-preco').attr('opcao'); 57979 if(tipoexibicao == 'avista'){ 57980 var exibicaobusca = 'vista'; 57981 } else if(tipoexibicao == 'parcsemjuros'){ 57982 var exibicaobusca = 'sem juros'; 57983 } else if(tipoexibicao == 'parccomjuros'){ 57984 var exibicaobusca = 'com juros'; 57985 } else if(tipoexibicao == 'pix'){ 57986 var exibicaobusca = 'vista'; 57987 } else if(tipoexibicao == 'boleto'){ 57988 var exibicaobusca = 'vista'; 57989 } 57990 57991 jQuery('.product .product-installments').each(function(){ 57992 var contaux = 0; 57993 var dom; 57994 var lengthloop = jQuery(this).find('> *').length - 1; 57995 57996 jQuery(this).find('> *').each(function(k, item){ 57997 if(k > 0){ 57998 dom = jQuery(this).parents('.product'); 57999 58000 if(jQuery(this).is('br')){ 58001 jQuery(dom).find('.ph-'+contaux).wrapAll('<div/ class="pagamento-separado">'); 58002 contaux++; 58003 } else{ 58004 jQuery(this).addClass('pagamento-helper').addClass('ph-'+contaux); 58005 58006 if(k == lengthloop){ 58007 jQuery(dom).find('.ph-'+contaux).wrapAll('<div/ class="pagamento-separado">'); 58008 58009 if(jQuery(dom).find('.pagamento-separado:contains('+exibicaobusca+')').length > 0){ 58010 var domalteracao = jQuery(dom).find('.pagamento-separado:contains('+exibicaobusca+')'); 58011 var domprodutoprice = jQuery(domalteracao).parents('.product-price'); 58012 var precocheio = 'ou <strong>'+jQuery(domprodutoprice).find('.current-price').text()+'</strong>'; 58013 58014 if((exibicaobusca == 'vista' && tipoexibicao == 'avista') && jQuery('.product-installments').find('.preco-parc1').length == 0){ 58015 var textopreco = jQuery(domalteracao).find('.preco-avista').text() + '<strong>' + jQuery(domalteracao).find('.txt-avista,.txt-com-desconto').text() +'</strong>'; 58016 var precocheio = '<strong>'+jQuery(domprodutoprice).find('.current-price').text()+'</strong>'; 58017 jQuery(domalteracao).html('<span>'+precocheio+'</span>'); 58018 }else if((exibicaobusca == 'vista' && tipoexibicao == 'avista') && jQuery('.product-installments').find('.preco-parc1').length > 0 ){ 58019 var textopreco = jQuery(domalteracao).find('.preco-avista').text() + '<strong>' + jQuery(domalteracao).find('.txt-avista,.txt-com-desconto').text() +'</strong>'; 58020 var precocheio = '<strong>'+jQuery(domprodutoprice).find('.current-price').text()+'</strong>'; 58021 jQuery(domalteracao).html('<span>'+precocheio+'</span>'); 58022 }else if((exibicaobusca == 'vista' && tipoexibicao == 'pix') && jQuery('.product-installments').find('.preco-parc1').length == 0){ 58023 var textopreco = jQuery(domalteracao).find('.preco-avista').text() + '<strong>no Pix</strong>'; 58024 jQuery(domalteracao).remove(); 58025 jQuery(dom).find('.product-installments').find('.operadora.pagamento-helper').html(' no cartão') 58026 }else if((exibicaobusca == 'vista' && tipoexibicao == 'boleto') && jQuery('.product-installments').find('.preco-parc1').length == 0){ 58027 var textopreco = jQuery(domalteracao).find('.preco-avista').text() + '<strong>no Boleto</strong>'; 58028 jQuery(domalteracao).remove(); 58029 jQuery(dom).find('.product-installments').find('.operadora.pagamento-helper').html(' no cartão') 58030 }else{ 58031 var textopreco = '<span class="current-price-second">' + jQuery(domalteracao).text().replace('ou', '').replace('Cart\u00e3o', '') + '</span>'; 58032 var priceTotal = jQuery(domalteracao).html('<span>'+precocheio.replace('ou', '')+'</span>') 58033 } 58034 58035 jQuery(domprodutoprice).find('.price .product-installments').prepend(priceTotal) 58036 jQuery(domprodutoprice).find('.current-price').html(textopreco); 58037 } 58038 } 58039 } 58040 } 58041 }); 58042 }); 58043 jQuery('.pagamento-separado').contents().unwrap(); 58044 } 58045 } 58046 58047 function loadProdutosMenu(){ 58048 if($('.produtos-menu').length > 0 && $('.produtos-menu').is(':visible')){ 58049 58050 var altura = 0; 58051 58052 $('.produtos-menu .produto-perfil').each(function(k, item){ 58053 if($(item).height() > altura){ 58054 altura = $(item).height(); 58055 } 58056 }); 58057 58058 $('.produtos-menu .produto-perfil').css('min-height', altura); 58059 58060 new Swiper('.produtos-menu .swiper-container', { 58061 preloadImages : false, 58062 loop : true, 58063 autoHeight : false, 58064 effect : 'slide', 58065 lazy :{ 58066 loadPrevNext: true, 58067 }, 58068 pagination: { 58069 el : '.produtos-menu .dots', 58070 bulletClass : 'dot', 58071 bulletActiveClass : 'dot-active', 58072 clickable : true 58073 }, 58074 navigation: { 58075 nextEl: ".produtos-menu .next", 58076 prevEl: ".produtos-menu .prev", 58077 } 58078 }); 58079 } 58080 } 58081 58082 function getProducts(ids = [], box = '', session_storage){ 58083 if(ids.length > 0){ 58084 if(!sessionStorage.getItem(session_storage+'ID')){ 58085 sessionStorage.setItem(session_storage+'ID', JSON.stringify(ids)); 58086 return false;
58087 }else if(sessionStorage.getItem(session_storage+'ID') == JSON.stringify(ids)){ 58088 if(typeof sessionStorage.getItem(session_storage+'HTML') != undefined && sessionStorage.getItem(session_storage+'HTML') != null && sessionStorage.getItem(session_storage+'HTML').length > 0 && $(sessionStorage.getItem(session_storage+'HTML')).length == ids.length ){ 58089 return true; 58090 }else{ 58091 sessionStorage.setItem(session_storage+'ID', JSON.stringify(ids)); 58092 return false; 58093 } 58094 } 58095 } 58096 } 58097 58098 // ───────────────────────────────────────────────────────── 58099 // CORREÇÃO: autoHeight false + sem setTimeout de equalização 58100 // A altura agora é controlada pelo CSS via align-items:stretch 58101 // ───────────────────────────────────────────────────────── 58102 function render_product(box, arr_flexslide = {}, slide, slider_box){ 58103 if(box.length > 0){ 58104 58105 if(slide){ 58106 58107 var qtde_itens = $(box).attr('data-quantidade-produtos'); 58108 var space_between; 58109 58110 if(slider_box.length > 0 && slider_box == '.flexslider-produtos'){ 58111 if(window.innerWidth < 500){ 58112 space_between = 6; 58113 }else if(window.innerWidth < 1025){ 58114 space_between = 6; 58115 }else{ 58116 space_between = 10; 58117 } 58118 }else{ 58119 if(window.innerWidth < 500){ 58120 qtde_itens = 2; 58121 space_between = 6; 58122 }else if(window.innerWidth < 1100){ 58123 qtde_itens = 3; 58124 space_between = 6; 58125 }else{ 58126 space_between = 10; 58127 } 58128 } 58129 58130 setTimeout(function(){ 58131 58132 new Swiper(box+' .swiper-container', { 58133 preloadImages : false, 58134 loop : true, 58135 autoHeight : false, 58136 effect : 'slide', 58137 slidesPerView : qtde_itens, 58138 spaceBetween : space_between, 58139 lazy :{ 58140 loadPrevNext: true, 58141 }, 58142 pagination: { 58143 el: ".swiper-pagination", 58144 clickable: true, 58145 }, 58146 navigation: { 58147 nextEl: '.swiper-button-next', 58148 prevEl: '.swiper-button-prev', 58149 }, 58150 on: { 58151 init: function(){ 58152 58153 theme.loadVitrinePersonalizadaTimer(); 58154 theme.loadProdutosTimer(); 58155 58156 $(box+' .select-cor').each(function(){ 58157 if($(this).find(' > option').length == 0){ 58158 $(this).parents('.config-variacoes-compra').find(' > .select-tamanho').show(); 58159 $(this).parents('.config-variacoes-compra').find(' > .select-tamanho option').show(); 58160 $(this).parents('.config-variacoes-compra').find(' > .select-tamanho option:first').attr('selected', true); 58161 } 58162 }); 58163 58164 $(box +' .product').removeClass('show-down'); 58165 } 58166 } 58167 }); 58168 58169 }, 400); 58170 } 58171 58172 construtorPreco(box); 58173 $(box).show(); 58174 return true; 58175 } 58176 58177 return false;
58178 } 58179 58180 $(document).ready(() => { 58181 58182 $(document).on("change", '.select-tamanho', function(){ 58183 var variacao = $(this).val(); 58184 var estoque = $(this).find('option:selected').attr('estoque'); 58185 $(this).parents('.config-variacoes-compra').find(' > input[name=variacao]').val(variacao); 58186 $(this).parents('.config-variacoes-compra').find(' > input[name=estoque]').val(estoque); 58187 }); 58188 58189 setTimeout(() => { 58190 loadProdutosMenu(); 58191 }, 1000); 58192 58193 }); 58194 58195 /** Menu categoria Produto **/ 58196 function render_menu(){ 58197 58198 const menu_categoria = { 58199 1: "7", 58200 2: "", 58201 3: "", 58202 4: "", 58203 5: "", 58204 6: "", 58205 7: "", 58206 8: "", 58207 9: "", 58208 10: "", 58209 11: "", 58210 12: "", 58211 13: "", 58212 14: "", 58213 15: "" 58214 }; 58215 58216 const menu_session = ['A', 'B', 'C', 'D', 'E', 'F', 'G', "H", 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P']; 58217 var new_menu_product = []; 58218 58219 Object.keys(menu_categoria).map((k) => { 58220 if(menu_categoria[k].length > 0){ 58221 new_menu_product.push({ 'key': k, 'value': menu_categoria[k], 'session':menu_session[k] }); 58222 } 58223 }); 58224 58225 if(new_menu_product.length > 0){ 58226 $(new_menu_product).each((i, v) => { 58227 var box = ".menu-categoria-product-"+v.key; 58228 var session_storage = 'menuCategoriaProduct'+v.session; 58229 const session_status = getProducts([v.value], box, session_storage); 58230 58231 if(!session_status){ 58232 $.ajax({ 58233 url: url_vitrine + '/web_api/products/' + v.value, 58234 async: true 58235 }).done( (res) => { 58236 $.ajax({ 58237 url: url_vitrine + '/' + res.Product.slug.replace(/^https?:\/\/[^\/]+\//, ''), 58238 async: true 58239 }).done( (res) => { 58240 const produto = $(res).find('#product-menu-ajax'); 58241 const html = String(produto[0].innerHTML); 58242 if(html.length > 0 && $(box).length > 0){ 58243 $(box).append(html); 58244 sessionStorage.setItem(session_storage+'HTML', html); 58245 } 58246 }); 58247 }); 58248 }else{ 58249 $(box).append(sessionStorage.getItem(session_storage+'HTML')); 58250 render_product(box, [], false, true); 58251 } 58252 }); 58253 } 58254 } 58255 58256 /** Vitrine personalizada **/ 58257 function render_vitrine(){ 58258 58259 var vitrine_qtde = "5"; 58260 var vitrine = "125233725,125245406,125238099,125233811,125233451"; 58261 var box_vitrine = '#vitrine-personalizada'; 58262 var session_storage = 'vitrinePersonalizada'; 58263 var vitrine_status = "1"; 58264 var box_slider = '.vt-produtos'; 58265 58266 $(box_vitrine).hide(); 58267 58268 if(vitrine_status == '1'){ 58269 if(vitrine.length > 0){ 58270 var vitrine_arr = vitrine.split(','); 58271 html_product = ''; 58272 var index_product = 0; 58273 58274 const arr_flexslide = { 58275 min: vitrine_qtde, 58276 max: vitrine_qtde, 58277 total: vitrine_qtde 58278 } 58279 58280 if(vitrine_arr.length > 0){ 58281 const session_status = getProducts(vitrine_arr, box_vitrine, session_storage); 58282 58283 if(!session_status){ 58284 58285 // ───────────────────────────────────────────────────── 58286 // CORREÇÃO: cria slots vazios na ordem certa ANTES 58287 // do AJAX, garantindo que os produtos apareçam 58288 // na mesma ordem definida nas configurações 58289 // ───────────────────────────────────────────────────── 58290 $(vitrine_arr).each((i, v) => { 58291 $(box_vitrine + ' .swiper-wrapper').append( 58292 `<div class='item swiper-slide' data-product-slot="${v}"></div>` 58293 ); 58294 }); 58295 58296 $(vitrine_arr).each((i, v) => { 58297 $.ajax({ 58298 url: url_vitrine + '/web_api/products/' + v, 58299 async: true 58300 }).done( (res) => { 58301 $.ajax({ 58302 url: url_vitrine + '/' + res.Product.slug.replace(/^https?:\/\/[^\/]+\//, ''), 58303 async: true 58304 }).done( (ress) => { 58305 const produto = $(ress).find('#product-ajax'); 58306 const html = String(produto[0].innerHTML); 58307 58308 if(html.length > 0 && $(box_vitrine).length > 0){ 58309 58310 // Preenche o slot correto pelo ID do produto 58311 const slot = $(box_vitrine + ` .swiper-slide[data-
58311product-slot="${v}"]`); 58312 slot.append(html); 58313 58314 index_product++; 58315 html_product += `<div class='item swiper-slide'>${html}</div>`; 58316 58317 if(index_product == vitrine_arr.length){ 58318 render_product(box_vitrine, arr_flexslide, true, box_slider); 58319 sessionStorage.setItem(session_storage+'HTML', html_product); 58320 } 58321 } 58322 }); 58323 }); 58324 }); 58325 58326 }else{ 58327 $(box_vitrine + ' .swiper-wrapper').append(sessionStorage.getItem(session_storage+'HTML')); 58328 render_product(box_vitrine, arr_flexslide, true, box_slider); 58329 } 58330 } 58331 } 58332 } 58333 } 58334 58335 /** Promocao Destaque **/ 58336 function render_destaque(){ 58337 58338 var vitrine_qtde = "5"; 58339 var vitrine = ""; 58340 var box_vitrine = '#promocao-destaque'; 58341 var session_storage = 'promocaoDestaque'; 58342 var vitrine_status = "0"; 58343 var box_slider = '.flexslider-promocao-destaque'; 58344 58345 $(box_vitrine).hide(); 58346 58347 if(vitrine_status == '1'){ 58348 if(vitrine.length > 0){ 58349 var vitrine_arr = vitrine.split(','); 58350 html_product_promo = ''; 58351 var index_product = 0; 58352 58353 const arr_flexslide = { 58354 min: vitrine_qtde, 58355 max: vitrine_qtde, 58356 total: vitrine_qtde 58357 } 58358 58359 if(vitrine_arr.length > 0){ 58360 const session_status = getProducts(vitrine_arr, box_vitrine, session_storage); 58361 58362 if(!session_status){ 58363 58364 // ───────────────────────────────────────────────────── 58365 // CORREÇÃO: mesma lógica de slots da vitrine personalizada 58366 // ───────────────────────────────────────────────────── 58367 $(vitrine_arr).each((i, v) => { 58368 $(box_vitrine + ' .swiper-wrapper').append( 58369 `<div class='item swiper-slide' data-product-slot="${v}"></div>` 58370 ); 58371 }); 58372 58373 $(vitrine_arr).each((i, v) => { 58374 $.ajax({ 58375 url: url_vitrine + '/web_api/products/' + v, 58376 async: true 58377 }).done( (res) => { 58378 $.ajax({ 58379 url: url_vitrine + '/' + res.Product.slug.replace(/^https?:\/\/[^\/]+\//, ''), 58380 async: true 58381 }).done( (ress) => { 58382 const produto = $(ress).find('#product-ajax'); 58383 const html = String(produto[0].innerHTML); 58384 58385 if(html.length > 0 && $(box_vitrine).length > 0){ 58386 58387 const slot = $(box_vitrine + ` .swiper-slide[data-
58387product-slot="${v}"]`); 58388 slot.append(html); 58389 58390 index_product++; 58391 html_product_promo += `<div class='item swiper-slide'>${html}</div>`; 58392 58393 if(index_product == vitrine_arr.length){ 58394 render_product(box_vitrine, arr_flexslide, true, box_slider); 58395 sessionStorage.setItem(session_storage+'HTML', html_product_promo); 58396 } 58397 } 58398 }); 58399 }); 58400 }); 58401 58402 }else{ 58403 $(box_vitrine + ' .swiper-wrapper').append(sessionStorage.getItem(session_storage+'HTML')); 58404 render_product(box_vitrine, arr_flexslide, true, box_slider); 58405 } 58406 } 58407 } 58408 } 58409 }; 58410 58411 function produto_perfil_ajax_menu(){ 58412 if($('.produto-menu-ajax').length > 0){ 58413 $('.produto-menu-ajax').each(function(k, item){ 58414 var produto_perfil_id = $(item).data('produto'); 58415 var produtos_id = []; 58416 var produto_perfil_div = $(item).data('div'); 58417 58418 if(produto_perfil_id.toString().indexOf(',') != -1){ 58419 produtos_id = produto_perfil_id.split(','); 58420 if(produtos_id.length > 0){ 58421 $(produtos_id).each(function(k, prod_id){ 58422 $.ajax({ 58423 url: '/web_api/products/' + prod_id, 58424 async: true 58425 }).done( (res) => { 58426 var produto_dados = res.Product; 58427 if(produto_dados.name){ 58428 var box_produto_perfil = produto_perfil_div+" .box-produto-perfil-menu-"+prod_id; 58429 produto_perfil(produto_dados, box_produto_perfil); 58430 } 58431 }); 58432 }); 58433 } 58434 }else{ 58435 if(produto_perfil_id != "" && produto_perfil_div != ""){ 58436 $.ajax({ 58437 url: '/web_api/products/' + produto_perfil_id, 58438 async: true 58439 }).done( (res) => { 58440 var produto_dados = res.Product; 58441 if(produto_dados.name){ 58442 produto_perfil(produto_dados, produto_perfil_div); 58443 } 58444 }); 58445 } 58446 } 58447 }); 58448 } 58449 } 58450 58451 function produto_perfil_ajax(){ 58452 if($('.produto-perfil-ajax').length > 0){ 58453 $('.produto-perfil-ajax').each(function(k, item){ 58454 var produto_perfil_id = $(item).data('produto'); 58455 var produtos_id = []; 58456 var produto_perfil_div = $(item).data('div'); 58457 58458 if(produto_perfil_id.toString().indexOf(',') != -1){ 58459 produtos_id = produto_perfil_id.split(','); 58460 if(produtos_id.length > 0){ 58461 $(produtos_id).each(function(k, prod_id){ 58462 $.ajax({ 58463 url: url_vitrine + '/web_api/products/' + prod_id, 58464 async: true 58465 }).done( (res) => { 58466 var produto_dados = res.Product; 58467 if(produto_dados.name){ 58468 var box_produto_perfil = ".box-produto-perfil-"+prod_id; 58469 produto_perfil(produto_dados, box_produto_perfil, "append", "v"); 58470 } 58471 }); 58472 }); 58473 } 58474 }else{ 58475 if(produto_perfil_id != "" && produto_perfil_div != ""){ 58476 $.ajax({ 58477 url: url_vitrine + '/web_api/products/' + produto_perfil_id, 58478 async: true 58479 }).done( (res) => { 58480 var produto_dados = res.Product; 58481 if(produto_dados.name){ 58482 produto_perfil(produto_dados, produto_perfil_div, "v"); 58483 } 58484 }); 58485 } 58486 } 58487 }); 58488 } 58489 } 58490 58491 function produto_perfil(produto_dados, div_nome, extra = "", layout_format = "h"){ 58492 58493 var produto_perfil_url = produto_dados.url.https; 58494 var produto_perfil_nome = produto_dados.name; 58495 var produto_perfil_preco = (produto_dados.price > 0) ? produto_perfil_price_format(produto_dados.price) : "" 58496 var produto_perfil_preco_promotional = (produto_dados.promotional_price > 0) ? produto_perfil_price_format(produto_dados.promotional_price) : "" 58497 var produto_perfil_preco_desc = (produto_dados.payment_option.length > 0) ? `<div class="produto-perfil-installments">${produto_dados.payment_option_html}</div>` : ""; 58498 var produto_perfil_url = produto_dados.url.https; 58499 var produto_perfil_category = produto_dados.category_name 58500 58501 var category_url = produto_perfil_url.slice(0, -1).split("/"); 58502 category_url.pop(); 58503 var produto_perfil_category_url = category_url.join("/"); 58504 var show_name_category = NameCategory 58505 show_name_category = (show_name_category == 'true') ? `<a class="produto-perfil-nome-category" href="`+produto_perfil_category_url+`" target="_blank">`+produto_perfil_category+`</a>` : ' ' 58506 58507 var produto_perfil_variation = (produto_dados.has_variation == 1) ? `<a href="${produto_perfil_url}" class="btn-comprar-variation">Comprar</a>` : `<div class="btn-comprar-listagem btn-comprar product-button">Comprar</div>` 58508 var produto_perfil_id = produto_dados.id 58509 var produto_perfil_logger = ClientLog 58510 58511 if(produto_dados.upon_request == '1'){ 58512 produto_perfil_preco = "Sob consulta"; 58513 } 58514 if (parseFloat(produto_dados.promotional_price) != 0 && parseFloat(produto_dados.promotional_price) < parseFloat(produto_dados.price)){ 58515 produto_perfil_preco = "<div class='old-price-perfil' style='text-decoration: line-through;font-size: 13px'>R$ "+produto_perfil_preco+"</div>"+"<div class='current-price-perfil'>R$ "+produto_perfil_preco_promotional+"</div>"; 58516 }else{ 58517 produto_perfil_preco = "<div class='current-price-perfil'>R$ "+produto_perfil_preco+"</div>"; 58518 } 58519 58520 if(layout_format == "h"){ 58521 var produto_perfil_img = (produto_dados.image == '1') ? "<img class='lazyload' src='"+produto_dados.ProductImage[0].https+"' alt='"+produto_dados.name+" '>" : ''; 58522 58523 var div_perfil = ` 58524 <div class="produto-perfil" data-id="${produto_perfil_id}"> 58525 <a href="`+produto_perfil_url+`"> 58526 <div class="produto-perfil-imagem"> 58527 <a href="`+produto_perfil_url+`"> 58528 `+produto_perfil_img+` 58529 </a> 58530 </div> 58531 <div class="produto-perfil-nome"> 58532 <a href="`+produto_perfil_url+`"> 58533 `+produto_perfil_nome+` 58534 </a> 58535 </div> 58536 ${show_name_category}
58537 `+(produto_perfil_logger == 'true'? 58538 `<div class="produto-perfil-preco tray-hide" data-logged-user="true"> 58539 `+produto_perfil_preco+` 58540 `+produto_perfil_preco_desc+` 58541 </div>`: 58542 `<div class="produto-perfil-preco"> 58543 `+produto_perfil_preco+` 58544 `+produto_perfil_preco_desc+` 58545 </div>`) 58546 +` 58547 `+(produto_perfil_logger == 'true'? 58548 `<div class="produto-perfil-footer tray-hide" data-logged-user="true"> 58549 ${produto_perfil_variation} 58550 </div> 58551 <div class="autenticacao-comprar-produto mt-2 tray-hide" data-logged-user="false"> 58552 <a href="/my-account/login"> 58553 <div class="w-100"> 58554 `+($('.product-box .autenticacao-comprar-produto a div').text())+`Para realizar a compra do produto, por favor realize o Login! 58555 </div> 58556 </a> 58557 </div>`: 58558 `<div class="produto-perfil-footer"> 58559 ${produto_perfil_variation} 58560 </div>`) 58561 +` 58562 </div> 58563 `; 58564 58565 }else{ 58566 58567 var produto_perfil_img = (produto_dados.image == '1') ? "<img class='lazyload' src='"+produto_dados.ProductImage[0].https+"' alt='"+produto_dados.name+"'>" : ''; 58568 58569 var div_perfil = ` 58570 <div class="produto-perfil" data-id="${produto_perfil_id}"> 58571 <div class="produto-perfil-v"> 58572 <div class="produto-perfil-imagem"> 58573 <a href="`+produto_perfil_url+`"> 58574 `+produto_perfil_img+` 58575 </a> 58576 </div> 58577 <div class="produto-perfil-desc"> 58578 <div class="produto-perfil-nome"> 58579 <a href="`+produto_perfil_url+`"> 58580 `+produto_perfil_nome+` 58581 </a> 58582 </div> 58583 ${show_name_category} 58584 `+(produto_perfil_logger == 'true'? 58585 `<div class="produto-perfil-preco tray-hide" data-logged-user="true"> 58586 `+produto_perfil_preco+` 58587 `+produto_perfil_preco_desc+` 58588 </div>`: 58589 `<div class="produto-perfil-preco"> 58590 `+produto_perfil_preco+` 58591 `+produto_perfil_preco_desc+` 58592 </div>`) 58593 +` 58594 `+(produto_perfil_logger == 'true'? 58595 `<div class="produto-perfil-footer tray-hide" data-logged-user="true"> 58596 ${produto_perfil_variation} 58597 </div> 58598 <div class="autenticacao-comprar-produto mt-2 tray-hide" data-logged-user="false"> 58599 <a href="/my-account/login"> 58600 <div class="w-100"> 58601 `+($('.product-box .autenticacao-comprar-produto a div').text())+`Para realizar a compra do produto, por favor realize o Login! 58602 </div> 58603 </a> 58604 </div>`: 58605 `<div class="produto-perfil-footer"> 58606 ${produto_perfil_variation} 58607 </div>`) 58608 +` 58609 </div> 58610 </div> 58611 </div> 58612 `; 58613 } 58614 58615 if(extra == "append"){ 58616 $(div_nome).append(div_perfil); 58617 }else{ 58618 $(div_nome).html(div_perfil); 58619 } 58620 } 58621 58622 function produto_perfil_price_format(preco = ""){ 58623 preco = parseFloat(preco).toFixed(2); 58624 return preco.toString().replace(".", ","); 58625 } 58626 58627 produto_perfil_ajax(); 58628 produto_perfil_ajax_menu(); 58629 58630 }(jQuery)); 58631 }; 58632</script>
58632 58633 58634 58635 58636 58637 58638 58639 58640 58641 58642 58643 58644 <div class="stories-produtos-box" style="display: none;"> 58645 <div class="stories-produtos-conteudo"> 58646 <div id="stories-produtos" class="storiesWrapper"></div> 58647 </div> 58648 <div class="stories-produtos-acoes"> 58649 <div class="stories-produtos-acoes-icone"> 58650 <svg xmlns="http://www.w3.org/2000/svg" width="26" height="26" fill="currentColor" class="bi bi-lightning-charge" viewBox="0 0 16 16"> 58651 <path d="M11.251.068a.5.5 0 0 1 .227.58L9.677 6.5H13a.5.5 0 0 1 .364.843l-8 8.5a.5.5 0 0 1-.842-.49L6.323 9.5H3a.5.5 0 0 1-.364-.843l8-8.5a.5.5 0 0 1 .615-.09zM4.157 8.5H7a.5.5 0 0 1 .478.647L6.11 13.59l5.732-6.09H9a.5.5 0 0 1-.478-.647L9.89 2.41 4.157 8.5z"/> 58652 </svg> 58653 </div> 58654 <span class="status"></span> 58655 </div> 58656</div> 58657 58658
58659<script> 58660 function storiesFunction() { 58661 var currentSkin = getCurrentSkin(); 58662 58663 var stories = window.Zuck(document.querySelector('#stories-produtos'), { 58664 backNative: true, 58665 previousTap: true, 58666 skin: currentSkin['name'], 58667 autoFullScreen: currentSkin['params']['autoFullScreen'], 58668 avatars: currentSkin['params']['avatars'], 58669 paginationArrows: currentSkin['params']['paginationArrows'], 58670 list: currentSkin['params']['list'], 58671 cubeEffect: currentSkin['params']['cubeEffect'], 58672 localStorage: true, 58673 58674 stories: [ 58675 { 58676 id: 'produto-1', 58677 photo: 'https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Fitness.png?40911a9f4d7a99b6eef6b4ae366be082', 58678 name: 'Fitness', 58679 time: timestamp(), 58680 items: [ 58681 { 58682 id: 'produto-1-1', 58683 type: 'photo', 58684 length: 4, 58685 src: 'https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Metabolic.png?40911a9f4d7a99b6eef6b4ae366be082', 58686 preview: 'https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Metabolic.png?40911a9f4d7a99b6eef6b4ae366be082', 58687 link: 'https://www.farmacam.com.br/metabolic-fit', 58688 linkText: 'Metabolic Fit', 58689 time: timestamp() 58690 }, 58691 ,{ 58692 id: 'produto-1-2', 58693 type: 'photo', 58694 length: 4, 58695 src: 'https://images.tcdn.com.br/files/1063102/themes/216/img/settings/PeptiStrong.png?40911a9f4d7a99b6eef6b4ae366be082', 58696 preview: 'https://images.tcdn.com.br/files/1063102/themes/216/img/settings/PeptiStrong.png?40911a9f4d7a99b6eef6b4ae366be082', 58697 link: 'https://www.farmacam.com.br/peptistrong', 58698 linkText: 'PeptiStrong', 58699 time: timestamp() 58700 } 58701 ,{ 58702 id: 'produto-1-3', 58703 type: 'photo', 58704 length: 4, 58705 src: 'https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Akkermat.png?40911a9f4d7a99b6eef6b4ae366be082', 58706 preview: 'https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Akkermat.png?40911a9f4d7a99b6eef6b4ae366be082', 58707 link: 'https://www.farmacam.com.br/akkermat', 58708 linkText: 'Akkermat - Cápsulas Entéricas', 58709 time: timestamp() 58710 } 58711 ] 58712 } 58713 58714 ,{ 58715 id: 'produto-2', 58716 photo: 'https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Beleza.png?40911a9f4d7a99b6eef6b4ae366be082', 58717 name: 'Beleza', 58718 time: timestamp(), 58719 items: [ 58720 { 58721 id: 'produto-2-1', 58722 type: 'photo', 58723 length: 4, 58724 src: 'https://images.tcdn.com.br/files/1063102/themes/2
5872416/img/settings/Minoxidil.png?40911a9f4d7a99b6eef6b4ae366be082', 58725 preview: 'https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Minoxidil.png?40911a9f4d7a99b6eef6b4ae366be082', 58726 link: 'https://www.farmacam.com.br/minoxidil-oral', 58727 linkText: 'Minoxidil Oral', 58728 time: timestamp() 58729 }, 58730 ,{ 58731 id: 'produto-2-2', 58732 type: 'photo', 58733 length: 4, 58734 src: 'https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Clascoterona.png?40911a9f4d7a99b6eef6b4ae366be082', 58735 preview: 'https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Clascoterona.png?40911a9f4d7a99b6eef6b4ae366be082', 58736 link: 'https://www.farmacam.com.br/clascoterona-serum', 58737 linkText: 'Clascoterona - Sérum', 58738 time: timestamp() 58739 } 58740 ,{ 58741 id: 'produto-2-3', 58742 type: 'photo', 58743 length: 4, 58744 src: 'https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Solu.png?40911a9f4d7a99b6eef6b4ae366be082', 58745 preview: 'https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Solu.png?40911a9f4d7a99b6eef6b4ae366be082', 58746 link: 'https://www.farmacam.com.br/solucao-minoxidil-para-queda-capilar', 58747 linkText: 'Solução minoxidil para queda capilar', 58748 time: timestamp() 58749 } 58750 ] 58751 } 58752 58753 ,{ 58754 id: 'produto-3', 58755 photo: 'https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Reducaoo-de-Peso.png?40911a9f4d7a99b6eef6b4ae366be082', 58756 name: 'Redução de Peso', 58757 time: timestamp(), 58758 items: [ 58759 { 58760 id: 'produto-3-1', 58761 type: 'photo', 58762 length: 4, 58763 src: 'https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Morosil.png?40911a9f4d7a99b6eef6b4ae366be082', 58764 preview: 'https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Morosil.png?40911a9f4d7a99b6eef6b4ae366be082', 58765 link: 'https://www.farmacam.com.br/www-farmacam-com-br/morosil/', 58766 linkText: 'Morosil', 58767 time: timestamp() 58768 }, 58769 ,{ 58770 id: 'produto-3-2', 58771 type: 'photo', 58772 length: 4, 58773 src: 'https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Spray.png?40911a9f4d7a99b6eef6b4ae366be082', 58774 preview: 'https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Spray.png?40911a9f4d7a99b6eef6b4ae366be082', 58775 link: 'https://www.farmacam.com.br/www-farmacam-com-br/spray-inibidor-de-doce-sabor-morango', 58776 linkText: 'Spray inibidor de doce - Sabor Morango', 58777 time: timestamp() 58778 } 58779 ,{ 58780 id: 'produto-3-3', 58781 type: 'photo', 58782 length: 4, 58783 src: 'https://images.tcdn.com.br/files/1063102/themes/2
5878316/img/settings/Espirulina.png?40911a9f4d7a99b6eef6b4ae366be082', 58784 preview: 'https://images.tcdn.com.br/files/1063102/themes/216/img/settings/Espirulina.png?40911a9f4d7a99b6eef6b4ae366be082', 58785 link: 'https://www.farmacam.com.br/www-farmacam-com-br/espirulina/', 58786 linkText: 'Espirulina', 58787 time: timestamp() 58788 } 58789 ] 58790 }, 58791 ] 58792 }); 58793 } 58794</script>
58794 58795 </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.