{
  "version": 3,
  "sources": ["/cdn/shop/t/48/assets/tuyo-bundle.js?bust=1787854073473"],
  "sourcesContent": ["/* ==========================================================================\n   TUYO \u2014 Monte seu Kit: barra de compra / orquestrador\n\n   N\u00E3o desenha picker nenhum. Cada passo \u00E9 uma se\u00E7\u00E3o `section-product` do tema\n   na MESMA p\u00E1gina (mesmo DOM, sem iframe e sem inje\u00E7\u00E3o), ent\u00E3o este arquivo s\u00F3\n   l\u00EA a variante escolhida em cada uma e monta o carrinho.\n\n   Quando h\u00E1 grava\u00E7\u00E3o, quem adiciona a garrafa \u00E9 o submit do pr\u00F3prio form da\n   se\u00E7\u00E3o da garrafa \u2014 o Zepto intercepta esse form e \u00E9 ele quem anexa os PNGs\n   `Personaliza\u00E7\u00E3o` / `_design_Personaliza\u00E7\u00E3o` que a produ\u00E7\u00E3o usa.\n\n   Os 4 itens s\u00E3o obrigat\u00F3rios: o desconto do kit s\u00F3 vale com o kit fechado.\n   ========================================================================== */\n(function () {\n  'use strict';\n\n  /* Marcador de deploy: o CDN serve este arquivo MINIFICADO (coment\u00E1rios somem),\n     ent\u00E3o procurar coment\u00E1rio pra saber se subiu d\u00E1 falso negativo. Bater esta\n     string \u00E9 o jeito confi\u00E1vel. Subir junto a cada mudan\u00E7a. */\n  var TB_BUILD = 'kit-2026-09-04-gemeos';\n  window.__TUYO_KIT_BUILD = TB_BUILD;\n\n  function money(cents, format) {\n    var value = (cents || 0) / 100;\n    var fmt = format || 'R$ {{amount_no_decimals}}';\n\n    function group(thousands, decimal, decimals) {\n      var parts = value.toFixed(decimals).split('.');\n      var int = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousands);\n      return decimals > 0 ? int + decimal + parts[1] : int;\n    }\n\n    return fmt.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, function (_, name) {\n      switch (name) {\n        case 'amount': return group(',', '.', 2);\n        case 'amount_no_decimals': return group(',', '.', 0);\n        case 'amount_with_comma_separator': return group('.', ',', 2);\n        case 'amount_no_decimals_with_comma_separator': return group('.', ',', 0);\n        default: return group(',', '.', 2);\n      }\n    });\n  }\n\n  /* A loja formata em R$ SEM decimais. Num kit com 30% os valores caem em\n     centavos (R$ 146,30 / 27,30 / 22,40 / 18,90) e, arredondados na exibi\u00E7\u00E3o,\n     as partes deixam de bater com o total (146+27+22+19=214 vs R$ 215).\n     Aqui mostramos os centavos S\u00D3 quando existem \u2014 assim a conta fecha na tela\n     e continua igual ao resto do site nos valores redondos. */\n  function moneyKit(cents, format) {\n    if (!cents || cents % 100 === 0) return money(cents, format);\n    var withDecimals = (format || '').replace(\n      /amount_no_decimals(_with_comma_separator)?/,\n      'amount_with_comma_separator'\n    );\n    return money(cents, withDecimals);\n  }\n\n  function el(tag, cls, text) {\n    var node = document.createElement(tag);\n    if (cls) node.className = cls;\n    if (text != null) node.textContent = text;\n    return node;\n  }\n\n  function json(url, options) {\n    return fetch(url, options).then(function (res) {\n      return res.json().then(function (body) {\n        if (!res.ok) throw new Error(body.description || body.message || 'Erro no carrinho');\n        return body;\n      });\n    });\n  }\n\n  function sleep(ms) {\n    return new Promise(function (resolve) { window.setTimeout(resolve, ms); });\n  }\n\n  /* Incanta\u00E7\u00E3o validada no Palo Alto (base Impact). */\n  function openCartDrawer() {\n    document.dispatchEvent(new CustomEvent('theme:cart:refresh'));\n    window.setTimeout(function () {\n      if (document.body.classList.contains('js-drawer-open-cart')) return;\n      var cart = document.querySelector('#cart-drawer, cart-element[data-cart-drawer], [data-cart-drawer]');\n      if (cart && typeof cart.openCartDrawer === 'function') cart.openCartDrawer();\n      else document.body.classList.add('js-drawer-open-cart');\n    }, 400);\n  }\n\n  function init(root) {\n    if (root.__tbInit) return;\n    root.__tbInit = true;\n\n    var data;\n    try {\n      data = JSON.parse(root.querySelector('[data-tb-data]').textContent);\n    } catch (err) {\n      console.error('[tuyo-bundle] JSON da se\u00E7\u00E3o inv\u00E1lido', err);\n      return;\n    }\n\n    var fmt = data.moneyFormat;\n    var pct = Number(data.discountPct) || 0;\n    var fullBase = data.priceBase === 'full';\n\n    /* Base do desconto.\n       - 'sale' (cupom): kit = venda \u2212 pct%; riscado = venda.\n       - 'full' (Function): kit = cheio \u2212 pct%, nunca acima da venda; riscado = cheio.\n         Se a promo\u00E7\u00E3o j\u00E1 est\u00E1 abaixo de cheio\u2212pct%, o item fica no pre\u00E7o de venda\n         (desconto zero naquela linha) \u2014 \u00E9 exatamente o que a Function cobra. */\n    function baseOf(price, compare) {\n      if (fullBase && compare > price) return compare;\n      return price;\n    }\n    function kitPrice(price, compare) {\n      var base = baseOf(price, compare);\n      var target = pct > 0 ? Math.round(base * (100 - pct) / 100) : base;\n      return Math.min(price, target);\n    }\n\n    /* Auto-scroll: guarda o valor de cada passo pra detectar ESCOLHA do cliente\n       (e n\u00E3o o primeiro desenho da p\u00E1gina, que n\u00E3o deve rolar nada). */\n    var lastValues = {};\n    var booted = false;\n    var scrollTimer = null;\n\n    var chipsWrap = root.querySelector('[data-tb-chips]');\n    var totalEl = root.querySelector('[data-tb-total]');\n    var compareEl = root.querySelector('[data-tb-compare]');\n    var saveEl = root.querySelector('[data-tb-save]');\n    var addBtn = root.querySelector('[data-tb-add]');\n    var addLabel = root.querySelector('[data-tb-add-label]');\n    var errorEl = root.querySelector('[data-tb-error]');\n    var progressEl = root.querySelector('[data-tb-progress]');\n    var noteEl = root.querySelector('[data-tb-note]');\n    var addLabelText = addLabel.textContent;\n\n    /* Nota do cupom: s\u00F3 faz sentido quando h\u00E1 c\u00F3digo pra aplicar. */\n    if (noteEl && data.discountCode && data.discountNote) {\n      noteEl.textContent = data.discountNote.replace('{code}', data.discountCode);\n      noteEl.hidden = false;\n    }\n\n    /* \u2500\u2500 achar cada form na p\u00E1gina pela CHAVE da se\u00E7\u00E3o \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n    /* Em template JSON o id vira `template--<n>__<chave>`, ent\u00E3o casamos pelo sufixo. */\n    function sectionOf(key) {\n      if (!key) return null;\n      return document.querySelector('[data-section-id$=\"__' + key + '\"]');\n    }\n\n    function formOf(key) {\n      var section = sectionOf(key);\n      return section ? section.querySelector('form.shopify-product-form') : null;\n    }\n\n    function variantOf(key) {\n      var form = formOf(key);\n      if (!form) return null;\n      var input = form.querySelector('[name=\"id\"]');\n      var value = input ? Number(input.value) : null;\n      return value || null;\n    }\n\n    function capButton() {\n      return document.querySelector('[data-tb-cap][aria-pressed=\"true\"]:not([disabled])');\n    }\n\n    function chosen() {\n      var out = [];\n\n      var bottle = variantOf(data.keys.bottle);\n      if (bottle) out.push({ key: 'Garrafa', id: bottle });\n\n      var cap = capButton();\n      if (cap) {\n        out.push({\n          key: 'Tampa',\n          id: Number(cap.getAttribute('data-tb-cap')),\n          override: {\n            name: cap.getAttribute('data-tb-cap-name'),\n            twin: Number(cap.getAttribute('data-tb-cap-twin')) || 0,\n            price: Number(cap.getAttribute('data-tb-cap-price')),\n            compare: Number(cap.getAttribute('data-tb-cap-compare')) || 0,\n            img: (cap.querySelector('img') || {}).src\n          }\n        });\n      }\n\n      var sleeve = variantOf(data.keys.sleeve);\n      if (sleeve) out.push({ key: 'Sleeve', id: sleeve });\n\n      var sticker = variantOf(data.keys.sticker);\n      if (sticker) out.push({ key: 'Stickers', id: sticker });\n\n      return out.map(function (item) {\n        var v = item.override || data.variants[item.id] || {};\n        return {\n          key: item.key,\n          id: item.id,\n          name: v.name,\n          size: v.size,\n          twin: v.twin || 0,\n          price: v.price || 0,\n          compare: v.compare || 0,\n          img: v.img,\n          available: v.available !== false\n        };\n      });\n    }\n\n    /* Cabe\u00E7alho de passo e form do produto s\u00E3o SE\u00C7\u00D5ES separadas do Shopify.\n       Carimbamos classes nos wrappers `.shopify-section` pra o CSS costurar as\n       duas num card s\u00F3. S\u00F3 classe: mover se\u00E7\u00E3o no DOM quebra o editor. */\n    function pairGroups() {\n      root.ownerDocument.querySelectorAll('[data-tb-step-for]').forEach(function (head) {\n        /* o passo da grava\u00E7\u00E3o j\u00E1 \u00E9 um card inteiro (`.tb__perso`); carimbar o\n           wrapper dele como \"head\" criava borda dupla e um v\u00E3o extra em cima */\n        if (head.classList.contains('tb__perso')) return;\n        var key = head.getAttribute('data-tb-step-for');\n        var headWrap = head.closest('.shopify-section');\n        if (headWrap) headWrap.classList.add('tb__group--head');\n\n        var body = document.querySelector('[data-section-id$=\"__' + key + '\"]')\n          || document.querySelector('[data-tb-step-body=\"' + key + '\"]');\n        var bodyWrap = body ? body.closest('.shopify-section') : null;\n        if (bodyWrap) bodyWrap.classList.add('tb__group--body');\n      });\n    }\n\n    /* O form do Zepto nasce dentro do `<product-form>` da garrafa (\u00E9 app block\n       daquela se\u00E7\u00E3o). Aqui ele \u00E9 REALOCADO pro card do passo \"Personalize\".\n       Movemos o wrapper do tema (`.tuyo-perso-inline`), n\u00E3o o `.product-personalizer`\n       cru, pra n\u00E3o deixar caixa \u00F3rf\u00E3 no card da garrafa. Mover n\u00F3 preserva os\n       handlers; o Zepto continua achando o `form.pplr_atc_form` por seletor\n       global na hora do submit. */\n    function movePersonalizer() {\n      var slot = document.querySelector('[data-tb-perso-slot]');\n      if (!slot) return;\n\n      var perso = document.querySelector('.product-personalizer');\n      if (!perso) return;\n\n      var block = perso.closest('.tuyo-perso-inline') || perso.closest('.shopify-app-block') || perso;\n      if (slot.contains(block)) return;\n\n      var loading = slot.querySelector('[data-tb-perso-loading]');\n      if (loading) loading.remove();\n      slot.appendChild(block);\n    }\n\n    /* Pre\u00E7o do item j\u00E1 com o desconto do kit, com o cheio riscado ao lado.\n       Cada passo mostra o SEU pre\u00E7o \u2014 sem isso o cliente s\u00F3 via o total. */\n    function fillPrice(node, cents, compare) {\n      if (!node) return;\n      node.innerHTML = '';\n      if (cents == null) return;\n      if (!cents) {\n        node.appendChild(el('span', 'tb__stepPrice__now', 'Gr\u00E1tis'));\n        return;\n      }\n      var base = baseOf(cents, compare || 0);\n      var net = kitPrice(cents, compare || 0);\n      node.appendChild(el('span', 'tb__stepPrice__now', moneyKit(net, fmt)));\n      if (net < base) {\n        node.appendChild(el('s', 'tb__stepPrice__was', moneyKit(base, fmt)));\n        /* etiqueta em cada linha: o % REAL sobre o pre\u00E7o riscado */\n        var off = Math.round((1 - net / base) * 100);\n        if (off > 0) node.appendChild(el('span', 'tb__stepPrice__off', off + '% OFF'));\n      }\n    }\n\n    /* Preenche o estado de cada passo: OBRIGAT\u00D3RIO \u2192 \u2713 com a op\u00E7\u00E3o escolhida. */\n    function paintStep(key, value, price, compare) {\n      var head = document.querySelector('[data-tb-step-for=\"' + key + '\"]');\n      if (!head) return;\n      var required = head.querySelector('[data-tb-step-required]');\n      var done = head.querySelector('[data-tb-step-done]');\n      var slot = head.querySelector('[data-tb-step-value]');\n      var ok = !!value;\n      if (required) required.hidden = ok;\n      if (done) done.hidden = !ok;\n      if (slot) slot.textContent = value || '';\n      if (price !== undefined) fillPrice(head.querySelector('[data-tb-step-price]'), price, compare);\n    }\n\n    /* As linhas da Tampa v\u00EAm do Liquid com o pre\u00E7o CHEIO; aqui viram o de kit. */\n    function paintCapPrices() {\n      document.querySelectorAll('[data-tb-cap]').forEach(function (btn) {\n        var node = btn.querySelector('.tb__option__price');\n        if (!node) return;\n        fillPrice(node, Number(btn.getAttribute('data-tb-cap-price')), Number(btn.getAttribute('data-tb-cap-compare')) || 0);\n      });\n    }\n\n    /* \u2500\u2500 resumo \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n    function render() {\n      var items = chosen();\n      var full = 0;\n      var net = 0;\n      /* Soma item a item J\u00C1 arredondado, em vez de arredondar o total: \u00E9 assim\n         que o Shopify aplica % (por linha), e \u00E9 o que o cliente confere somando\n         os pre\u00E7os dos passos. Arredondar o total dava 1 real de diferen\u00E7a. */\n      items.forEach(function (i) {\n        full += baseOf(i.price, i.compare);\n        net += kitPrice(i.price, i.compare);\n      });\n\n      totalEl.textContent = moneyKit(net, fmt);\n      if (full - net > 0) {\n        compareEl.hidden = false;\n        compareEl.textContent = moneyKit(full, fmt);\n        saveEl.hidden = false;\n        saveEl.textContent = 'Voc\u00EA economiza ' + moneyKit(full - net, fmt);\n      } else {\n        compareEl.hidden = true;\n        saveEl.hidden = true;\n      }\n\n      chipsWrap.innerHTML = '';\n      items.forEach(function (i) {\n        var li = el('li', 'tb__chip');\n        if (i.img) {\n          var img = el('img');\n          img.src = i.img;\n          img.alt = '';\n          img.loading = 'lazy';\n          li.appendChild(img);\n        }\n        li.appendChild(el('span', null, i.key + ' '));\n        li.appendChild(el('b', null, i.name || ''));\n        chipsWrap.appendChild(li);\n      });\n\n      var byKey = {};\n      items.forEach(function (i) { byKey[i.key] = i; });\n\n      var bottle = byKey['Garrafa'];\n      paintStep(\n        data.keys.bottle,\n        bottle ? (bottle.size ? bottle.size + ' \u00B7 ' + bottle.name : bottle.name) : null,\n        bottle ? bottle.price : null,\n        bottle ? bottle.compare : 0\n      );\n      paintStep('gravacao', engravingLabel(), 0);\n      paintStep('caps', byKey['Tampa'] ? byKey['Tampa'].name : null, byKey['Tampa'] ? byKey['Tampa'].price : null, byKey['Tampa'] ? byKey['Tampa'].compare : 0);\n\n      var values = {};\n      values[data.keys.bottle] = bottle ? bottle.name : null;\n      values['caps'] = byKey['Tampa'] ? byKey['Tampa'].name : null;\n      values[data.keys.sleeve] = byKey['Sleeve'] ? byKey['Sleeve'].name : null;\n      values[data.keys.sticker] = byKey['Stickers'] ? byKey['Stickers'].name : null;\n      maybeAdvance(values);\n      paintStep(data.keys.sleeve, byKey['Sleeve'] ? byKey['Sleeve'].name : null, byKey['Sleeve'] ? byKey['Sleeve'].price : null, byKey['Sleeve'] ? byKey['Sleeve'].compare : 0);\n      paintStep(data.keys.sticker, byKey['Stickers'] ? byKey['Stickers'].name : null, byKey['Stickers'] ? byKey['Stickers'].price : null, byKey['Stickers'] ? byKey['Stickers'].compare : 0);\n\n      /* kit fechado = 4 itens; sem isso o desconto n\u00E3o se justifica */\n      addBtn.disabled = items.length < 4;\n\n      if (progressEl) {\n        var done = items.length >= 4;\n        progressEl.textContent = done ? '\u2713 Kit completo' : items.length + ' de 4';\n        progressEl.classList.toggle('tb__barProgress--done', done);\n      }\n    }\n\n    /* Os pickers do tema mudam o `[name=\"id\"]` sem evento pr\u00F3prio, ent\u00E3o\n       observamos o DOM em vez de tentar adivinhar o evento certo. */\n    function watch() {\n      ['bottle', 'sleeve', 'sticker'].forEach(function (which) {\n        var form = formOf(data.keys[which]);\n        if (!form) return;\n        form.addEventListener('change', render, true);\n        new MutationObserver(render).observe(form, {\n          subtree: true, attributes: true, attributeFilter: ['value', 'checked', 'class']\n        });\n      });\n\n      /* O personalizador vive num card pr\u00F3prio (fora dos forms), ent\u00E3o precisa\n         do seu pr\u00F3prio observador \u2014 sen\u00E3o o \u2713 do passo de grava\u00E7\u00E3o nunca acende. */\n      var slot = document.querySelector('[data-tb-perso-slot]');\n      if (slot) {\n        slot.addEventListener('change', render, true);\n        slot.addEventListener('input', render, true);\n        new MutationObserver(function () { window.setTimeout(render, 80); }).observe(slot, {\n          childList: true, subtree: true, attributes: true, attributeFilter: ['value', 'class']\n        });\n      }\n\n      /* O bloco `siblings` linka pra PDP crua do irm\u00E3o \u2014 clicar em 1.2L jogaria\n         o cliente PRA FORA do kit. Cada tamanho tem sua pr\u00F3pria p\u00E1gina de kit\n         (mesma receita das LPs por litragem), ent\u00E3o reescrevemos o destino. */\n      routeSizeLinks();\n\n      document.addEventListener('click', function (event) {\n        var cap = event.target.closest ? event.target.closest('.tb__option[data-tb-cap]') : null;\n        if (cap && !cap.disabled) {\n          document.querySelectorAll('[data-tb-cap]').forEach(function (b) {\n            b.setAttribute('aria-pressed', String(b === cap));\n          });\n        }\n        window.setTimeout(render, 120);\n      }, true);\n    }\n\n    function routeSizeLinks() {\n      var pages = {};\n      (data.bottlePages || '').split(',').forEach(function (pair) {\n        var parts = pair.split(':');\n        var handle = (parts[0] || '').trim();\n        var path = (parts.slice(1).join(':') || '').trim();\n        if (handle && path) pages[handle] = path;\n      });\n      if (!Object.keys(pages).length) return;\n\n      var section = sectionOf(data.keys.bottle);\n      if (!section) return;\n\n      function patch() {\n        section.querySelectorAll('a[href*=\"/products/\"]').forEach(function (a) {\n          if (a.dataset.tbRouted) return;\n          var handle = (a.getAttribute('href') || '').split('/products/')[1];\n          if (!handle) return;\n          handle = handle.split('?')[0].split('#')[0];\n          var page = pages[handle];\n          if (!page) return;\n\n          /* preview_theme_id s\u00F3 enquanto o tema \u00E9 draft; ao publicar sai limpo */\n          var theme = window.Shopify && window.Shopify.theme;\n          if (theme && theme.role !== 'main') {\n            page += (page.indexOf('?') === -1 ? '?' : '&') + 'preview_theme_id=' + theme.id;\n          }\n          a.setAttribute('href', page);\n          a.dataset.tbRouted = '1';\n        });\n      }\n\n      patch();\n      new MutationObserver(patch).observe(section, { childList: true, subtree: true });\n    }\n\n    /* R\u00F3tulo do passo de grava\u00E7\u00E3o: o modo escolhido, e o texto quando houver. */\n    function engravingLabel() {\n      var perso = document.querySelector('.product-personalizer');\n      if (!perso || !personalizationActive()) return null;\n      var mode = perso.querySelector('[name=\"properties[Escolha como Personalizar]\"]');\n      var label = mode && mode.value ? mode.value.trim() : 'Com grava\u00E7\u00E3o';\n      var text = perso.querySelector('textarea[name^=\"properties[\"]');\n      if (text && (text.value || '').trim()) label += ' \u00B7 ' + text.value.trim();\n      return label;\n    }\n\n    /* Depois de escolher, leva o cliente pro passo seguinte \u2014 fecha o passo\n       anterior visualmente e evita que ele \"perca\" o pr\u00F3ximo na rolagem.\n       Ordem fixa: garrafa \u2192 grava\u00E7\u00E3o \u2192 tampa \u2192 sleeve \u2192 stickers \u2192 barra. */\n    function stepOrder() {\n      return [data.keys.bottle, 'gravacao', 'caps', data.keys.sleeve, data.keys.sticker];\n    }\n\n    function nextTarget(key) {\n      var order = stepOrder();\n      var i = order.indexOf(key);\n      if (i === -1) return null;\n      for (var j = i + 1; j < order.length; j++) {\n        var el = document.querySelector('[data-tb-step-for=\"' + order[j] + '\"]');\n        if (el) return el;\n      }\n      return root; /* \u00FAltimo passo \u2192 a barra de compra */\n    }\n\n    function scrollToStep(key) {\n      var target = nextTarget(key);\n      if (!target) return;\n      /* desconta o header fixo do tema, sen\u00E3o o cabe\u00E7alho do passo fica escondido */\n      var header = document.querySelector('.site-header');\n      var offset = (header ? header.getBoundingClientRect().height : 0) + 12;\n      var top = target.getBoundingClientRect().top + window.scrollY - offset;\n      window.scrollTo({ top: Math.max(top, 0), behavior: 'smooth' });\n    }\n\n    /* Um passo s\u00F3 \"avan\u00E7a\" quando o valor MUDA por escolha do cliente. */\n    function maybeAdvance(values) {\n      if (!booted) {\n        lastValues = values;\n        booted = true;\n        return;\n      }\n      var changed = null;\n      Object.keys(values).forEach(function (key) {\n        /* a grava\u00E7\u00E3o tem v\u00E1rios campos: rolar no meio dela atrapalharia */\n        if (key === 'gravacao') return;\n        if (values[key] && values[key] !== lastValues[key]) changed = key;\n      });\n      lastValues = values;\n      if (!changed) return;\n      window.clearTimeout(scrollTimer);\n      scrollTimer = window.setTimeout(function () { scrollToStep(changed); }, 260);\n    }\n\n    /* \u2500\u2500 carrinho \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n    /* Os campos `properties[...]` do Zepto N\u00C3O ficam dentro do <form>: moram no\n       `.product-personalizer`, que \u00E9 um BLOCO IRM\u00C3O na mesma se\u00E7\u00E3o. O app l\u00EA\n       esses campos ao interceptar o submit de `form.pplr_atc_form`. Por isso a\n       varredura \u00E9 na SE\u00C7\u00C3O inteira, n\u00E3o no form. */\n    function personalizationActive() {\n      /* Documento inteiro: depois do `movePersonalizer` os campos n\u00E3o est\u00E3o\n         mais na se\u00E7\u00E3o da garrafa. S\u00F3 existe um personalizador por p\u00E1gina. */\n      var scope = document.querySelector('.product-personalizer') || sectionOf(data.keys.bottle);\n      if (!scope) return false;\n      var fields = scope.querySelectorAll('[name^=\"properties[\"]');\n      var any = false;\n      [].forEach.call(fields, function (f) {\n        if (f.type === 'checkbox' && !f.checked) return;\n        if ((f.value || '').trim()) any = true;\n      });\n      return any;\n    }\n\n    function cartCount() {\n      return json('/cart.js').then(function (c) { return c.item_count; });\n    }\n\n    /* O Zepto RENDERIZA e SOBE o PNG da grava\u00E7\u00E3o pro Shopify Files antes de\n       chamar /cart/add.js \u2014 medido em ~25-40s. Por isso a espera \u00E9 longa: um\n       timeout curto derruba o kit no meio, com a garrafa entrando sozinha\n       depois e os complementos nunca. */\n    function waitForGrowth(before, timeoutMs) {\n      var deadline = Date.now() + (timeoutMs || 90000);\n      function tick() {\n        return cartCount().then(function (count) {\n          if (count > before) return count;\n          if (Date.now() > deadline) {\n            throw new Error('A grava\u00E7\u00E3o est\u00E1 demorando mais que o normal. Confira o carrinho antes de tentar de novo.');\n          }\n          return sleep(800).then(tick);\n        });\n      }\n      return tick();\n    }\n\n    /* Carimba a linha que o Zepto acabou de criar, sem perder as properties dele.\n       Com G\u00CAMEO: o Zepto adiciona a variante ORIGINAL (\u00E9 ela que est\u00E1 no form);\n       aqui a linha \u00E9 trocada pela variante g\u00EAmea levando as properties (as URLs\n       dos PNGs da grava\u00E7\u00E3o s\u00E3o strings, sobrevivem \u00E0 troca). */\n    function tagBottleLine(variantId, twinId, shared) {\n      var hdr = { 'Content-Type': 'application/json', Accept: 'application/json' };\n      return json('/cart.js').then(function (cart) {\n        var target = null;\n        cart.items.forEach(function (item) {\n          if (item.variant_id !== variantId) return;\n          if ((item.properties || {})._bundle_id) return;\n          target = item;\n        });\n        if (!target) return null;\n        var merged = {};\n        Object.keys(target.properties || {}).forEach(function (k) { merged[k] = target.properties[k]; });\n        Object.keys(shared).forEach(function (k) { merged[k] = shared[k]; });\n        if (!twinId || twinId === variantId) {\n          return json('/cart/change.js', { method: 'POST', headers: hdr, body: JSON.stringify({ id: target.key, properties: merged }) });\n        }\n        return json('/cart/change.js', { method: 'POST', headers: hdr, body: JSON.stringify({ id: target.key, quantity: 0 }) })\n          .then(function () {\n            return json('/cart/add.js', { method: 'POST', headers: hdr, body: JSON.stringify({ items: [{ id: twinId, quantity: 1, properties: merged }] }) });\n          });\n      });\n    }\n\n    /* Duas vias, na ordem:\n       1) `/cart/update.js` com `discount` \u2014 aplica no CARRINHO, ent\u00E3o o drawer\n          e a p\u00E1gina do carrinho j\u00E1 mostram o pre\u00E7o com os 30%;\n       2) `/discount/CODE` \u2014 s\u00F3 grava o cookie que o checkout l\u00EA. Fica como\n          rede de seguran\u00E7a se a via 1 n\u00E3o pegar (loja/API sem suporte).\n       O desconto \u00E9 acess\u00F3rio: nunca derruba o add. */\n    function applyDiscount() {\n      var code = data.discountCode;\n      if (!code) return Promise.resolve();\n      var byCookie = function () {\n        return fetch('/discount/' + encodeURIComponent(code), { credentials: 'same-origin' })\n          .catch(function () {});\n      };\n      return json('/cart/update.js', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n        body: JSON.stringify({ discount: code })\n      }).then(function (cart) {\n        var codes = cart.discount_codes || [];\n        var applied = codes.some(function (d) {\n          return String(d.code).toUpperCase() === code.toUpperCase() && d.applicable !== false;\n        });\n        if (!applied) return byCookie();\n      }).catch(byCookie);\n    }\n\n    function fail(message) {\n      errorEl.hidden = false;\n      errorEl.textContent = message;\n      addLabel.textContent = addLabelText;\n      addBtn.disabled = false;\n    }\n\n    function addToCart() {\n      var items = chosen();\n      if (items.length < 4) return fail('O kit leva garrafa, tampa, BottleSleeve e stickers \u2014 escolha os quatro.');\n\n      var unavailable = items.filter(function (i) { return !i.available; });\n      if (unavailable.length) return fail('\u201C' + unavailable[0].name + '\u201D est\u00E1 esgotado. Escolha outra op\u00E7\u00E3o.');\n\n      errorEl.hidden = true;\n      addBtn.disabled = true;\n      addLabel.textContent = 'Adicionando\u2026';\n\n      var bundleId = 'kit-' + Date.now() + '-' + Math.random().toString(36).slice(2, 7);\n      /* S\u00F3 properties OCULTAS (prefixo _): n\u00E3o aparecem pro cliente no carrinho/\n         checkout, mas ficam no pedido pro time saber que \u00E9 kit. */\n      var shared = { '_kit': data.kitLabel, '_bundle_id': bundleId };\n      /* modo de teste da Function: s\u00F3 linhas com esta property ganham o desconto\n         enquanto o `require_flag` do metafield estiver ligado */\n      if (data.pricingFlag) shared['_kit_pricing'] = data.pricingFlag;\n\n      /* vai pro carrinho a variante G\u00CAMEA quando existe (pre\u00E7o do kit gravado,\n         sem desconto); sen\u00E3o a original */\n      var idOf = function (i) { return i.twin || i.id; };\n      var bottle = items[0];\n      var extras = items.slice(1).map(function (i) {\n        return { id: idOf(i), quantity: 1, properties: shared };\n      });\n\n      var bottleStep;\n      if (personalizationActive()) {\n        var submit = formOf(data.keys.bottle).querySelector('[type=\"submit\"]');\n        if (!submit) return fail('N\u00E3o consegui enviar a personaliza\u00E7\u00E3o. Recarregue a p\u00E1gina.');\n        addLabel.textContent = 'Gerando sua grava\u00E7\u00E3o\u2026';\n        bottleStep = cartCount().then(function (before) {\n          submit.click();\n          return waitForGrowth(before);\n        }).then(function () {\n          return tagBottleLine(bottle.id, idOf(bottle), shared);\n        });\n      } else {\n        bottleStep = json('/cart/add.js', {\n          method: 'POST',\n          headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n          body: JSON.stringify({ items: [{ id: idOf(bottle), quantity: 1, properties: shared }] })\n        });\n      }\n\n      bottleStep\n        .then(function () {\n          return json('/cart/add.js', {\n            method: 'POST',\n            headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n            body: JSON.stringify({ items: extras })\n          });\n        })\n        .then(applyDiscount)\n        .then(function () {\n          addLabel.textContent = 'Kit adicionado \u2713';\n          openCartDrawer();\n          window.setTimeout(function () {\n            addLabel.textContent = addLabelText;\n            addBtn.disabled = false;\n          }, 1800);\n        })\n        .catch(function (err) {\n          fail(err.message || 'Erro ao adicionar ao carrinho');\n        });\n    }\n\n    /* O Shopify gera `template-page` no body (trunca o sufixo do template),\n       ent\u00E3o o CSS do kit se apoia nesta classe. */\n    document.body.classList.add('tuyo-kit-page');\n\n    addBtn.addEventListener('click', addToCart);\n\n    /* Atalhos do banner (`data-tb-scroll-to=\"<chave>\"`): rolam at\u00E9 o cabe\u00E7alho\n       do passo, descontando o header fixo. */\n    document.addEventListener('click', function (event) {\n      var btn = event.target.closest ? event.target.closest('[data-tb-scroll-to]') : null;\n      if (!btn) return;\n      var head = document.querySelector('[data-tb-step-for=\"' + btn.getAttribute('data-tb-scroll-to') + '\"]');\n      if (!head) return;\n      var header = document.querySelector('.site-header');\n      var offset = (header ? header.getBoundingClientRect().height : 0) + 12;\n      window.scrollTo({ top: head.getBoundingClientRect().top + window.scrollY - offset, behavior: 'smooth' });\n    });\n\n    /* Um texto solto \"avalia\u00E7\u00E3o/avalia\u00E7\u00F5es\" (string de i18n da Judge.me) cai\n       direto no <body> e aparece acima do rodap\u00E9. Some s\u00F3 nesta p\u00E1gina. */\n    [].slice.call(document.body.childNodes).forEach(function (node) {\n      if (node.nodeType === 3 && /avalia/.test(node.textContent)) node.parentNode.removeChild(node);\n    });\n\n    pairGroups();\n    paintCapPrices();\n    movePersonalizer();\n    watch();\n    render();\n\n    /* O Zepto injeta o container em runtime e re-renderiza ao trocar de cor,\n       ent\u00E3o vigiamos e realocamos sempre que ele reaparecer no lugar antigo. */\n    new MutationObserver(function () { movePersonalizer(); })\n      .observe(document.body, { childList: true, subtree: true });\n    /* os forms do tema montam depois; uma 2\u00AA leitura evita barra zerada */\n    window.setTimeout(function () { pairGroups(); movePersonalizer(); render(); }, 1200);\n  }\n\n  function boot() {\n    document.querySelectorAll('[data-tuyo-bundle]').forEach(init);\n  }\n\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot);\n  else boot();\n\n  document.addEventListener('shopify:section:load', function (e) {\n    var node = e.target.querySelector('[data-tuyo-bundle]');\n    if (node) init(node);\n  });\n})();\n"],
  "mappings": "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",
  "names": ["el"]
}
