{
  "version": 3,
  "sources": ["/cdn/shop/t/8/assets/glaze-photo-sync.js"],
  "sourcesContent": ["/*\n * glaze-photo-sync.js\n *\n * Sincroniza a galeria do PDP com o esmalte selecionado no widget do app Avis\n * Product Options (avp-options).\n *\n * As fotos de varia\u00E7\u00E3o seguem a conven\u00E7\u00E3o de filename\n * <produto>[-tamanho-<tamanho>]-argila-<argila>-esmalte-<esmalte>.<ext> e chegam do\n * servidor anotadas com data-glaze-argila / data-glaze-esmalte / data-glaze-tamanho\n * (snippet glaze-media-attrs.liquid) e ocultas por padr\u00E3o (component-glaze-media.css).\n * Ao selecionar um esmalte, este script revela e ativa a m\u00EDdia da combina\u00E7\u00E3o tamanho +\n * argila (variantes Shopify) + esmalte (radio do app), preferindo a foto espec\u00EDfica do\n * tamanho e caindo na gen\u00E9rica (sem -tamanho-) quando ele n\u00E3o tem foto pr\u00F3pria; sem\n * correspond\u00EAncia, volta \u00E0 primeira foto base.\n *\n * O app renderiza tarde e o Dawn re-renderiza a galeria na troca de variante, por isso:\n * - escuta de radios por delega\u00E7\u00E3o no document;\n * - re-aplica\u00E7\u00E3o via PUB_SUB_EVENTS.variantChange (com atraso para o app alternar o grupo\n *   de esmaltes da argila).\n *\n * Na troca de argila, a cor selecionada acompanha: o grupo novo recebe o mesmo esmalte\n * (quando existe nele) ou a primeira cor do grupo (ex.: Branco Amme). Sem cor escolhida\n * ainda, o grupo novo fica sem sele\u00E7\u00E3o (ex.: preselect da argila oficial no load).\n *\n * A combina\u00E7\u00E3o escolhida vai para a query string (?tamanho&argila&cor) e \u00E9 restaurada\n * no load: variante pr\u00E9-selecionada no picker do tema, cor pr\u00E9-selecionada no app e\n * foto da combina\u00E7\u00E3o aplicada ANTES de o app renderizar (evita o flick foto base ->\n * foto da cor). O Dawn reescreve a URL s\u00F3 com ?variant= na troca de variante, por isso\n * os par\u00E2metros s\u00E3o re-gravados ap\u00F3s cada variantChange.\n */\n(function () {\n  'use strict';\n\n  var ACTIVE = 'amme-glaze-active';\n  var STOPWORDS = { de: true, da: true, do: true, das: true, dos: true };\n\n  // \u00DAltima cor escolhida (slug) e grupo de esmaltes vis\u00EDvel: base do carry-over da cor\n  // entre argilas. O grupo \u00E9 rastreado por identidade de elemento \u2014 o app alterna o\n  // style de elementos persistentes, e atribui o name dos radios DEPOIS do style, ent\u00E3o\n  // o name n\u00E3o \u00E9 confi\u00E1vel no momento do toggle.\n  var lastEsmalteSlug = null;\n  var lastGroup = null;\n\n  // Janela de refor\u00E7o do carry-over: ao mostrar um grupo, o app o re-renderiza de novo\n  // ~1s depois e restaura a sele\u00E7\u00E3o antiga DELE (sem evento change), atropelando a cor\n  // transferida. Durante a janela, reapply() reafirma o alvo; clique real do usu\u00E1rio\n  // (change isTrusted) cancela.\n  var enforceGroup = null;\n  var enforceSlug = null;\n  var enforceUntil = 0;\n\n  // Cor vinda da query string, aguardando o app renderizar o grupo de esmaltes para\n  // ser marcada no radio correspondente. S\u00F3 \u00E9 limpa quando a sele\u00E7\u00E3o CONFIRMA (radio\n  // marcado num reapply seguinte), por clique real do usu\u00E1rio ou pelo deadline \u2014 o\n  // re-render do tema p\u00F3s-preselect pode apagar a marca\u00E7\u00E3o sem evento nenhum.\n  var pendingCor = null;\n  var pendingCorUntil = 0;\n\n  // Reproduz o slug do gerador de imagens: min\u00FAsculas, sem acentos, sem \"de/da/do\",\n  // separadores viram h\u00EDfen. Aplicado aos DOIS lados da compara\u00E7\u00E3o (valor do radio e\n  // data attr), tolerando varia\u00E7\u00F5es de acento/stopword entre app e filename.\n  function slugify(text) {\n    if (!text) return '';\n    return String(text)\n      .toLowerCase()\n      .normalize('NFD')\n      .replace(/[\\u0300-\\u036f]/g, '')\n      .split(/[^a-z0-9]+/)\n      .filter(function (part) {\n        return part && !STOPWORDS[part];\n      })\n      .join('-');\n  }\n\n  function gallery() {\n    return document.querySelector('media-gallery');\n  }\n\n  function clearActive() {\n    var actives = document.querySelectorAll('.' + ACTIVE);\n    for (var i = 0; i < actives.length; i++) actives[i].classList.remove(ACTIVE);\n  }\n\n  // Promove a foto da combina\u00E7\u00E3o exibida a download imediato e prioridade alta. As fotos\n  // de varia\u00E7\u00E3o chegam do servidor com loading=\"lazy\" (posi\u00E7\u00E3o > 1 na galeria), mas a foto\n  // vis\u00EDvel do PDP \u00E9 escolhida por JS (?cor= no load / troca de esmalte), ent\u00E3o o browser\n  // adiava o download da lazy revelada \u2014 causa do LCP alto. S\u00F3 ajusta atributos, \u00E9 barato\n  // e idempotente (repetir na troca de cor n\u00E3o faz mal; a pr\u00F3xima foto \u00E9 a nova LCP).\n  function promoteImage(slide) {\n    if (!slide) return;\n    var img = slide.querySelector('img');\n    if (!img) return;\n    img.setAttribute('fetchpriority', 'high');\n    if (img.getAttribute('loading') === 'lazy') img.setAttribute('loading', 'eager');\n  }\n\n  function resetSliders(gal) {\n    var sliders = gal.querySelectorAll('slider-component');\n    for (var i = 0; i < sliders.length; i++) {\n      if (typeof sliders[i].resetPages === 'function') sliders[i].resetPages();\n    }\n  }\n\n  // Argila entre par\u00EAnteses no name do radio do app (ex.: \"Cor (flocos)\").\n  function argilaFromRadio(radio) {\n    var match = /\\(([^)]+)\\)/.exec(radio.name || '');\n    return match ? slugify(match[1]) : null;\n  }\n\n  // Valor cru selecionado de uma op\u00E7\u00E3o do seletor de variantes do tema (por nome no\n  // legend), ex.: \"FLOCOS\", \"22CM x 17CM\".\n  function optionFromVariantPicker(namePattern) {\n    var picker = document.querySelector('variant-selects');\n    if (!picker) return null;\n    var fieldsets = picker.querySelectorAll('fieldset');\n    for (var i = 0; i < fieldsets.length; i++) {\n      var legend = fieldsets[i].querySelector('legend');\n      if (legend && namePattern.test(legend.textContent)) {\n        var checked = fieldsets[i].querySelector('input:checked');\n        if (checked) return checked.value;\n      }\n    }\n    var selects = picker.querySelectorAll('select');\n    for (var j = 0; j < selects.length; j++) {\n      var label = selects[j].closest('.product-form__input');\n      if (label && namePattern.test(label.textContent)) return selects[j].value;\n    }\n    return null;\n  }\n\n  // Fallback: valor selecionado da op\u00E7\u00E3o \"Argila\" no seletor de variantes do tema.\n  function argilaFromVariantPicker() {\n    return slugify(optionFromVariantPicker(/argila/i));\n  }\n\n  function tamanhoFromVariantPicker() {\n    return slugify(optionFromVariantPicker(/tamanho/i)) || null;\n  }\n\n  // Grupo de esmaltes vis\u00EDvel do app (o app alterna um grupo por argila).\n  function visibleGlazeGroup() {\n    var groups = document.querySelectorAll('.glaze-dropdown.avp-option');\n    for (var i = 0; i < groups.length; i++) {\n      if (groups[i].offsetParent !== null) return groups[i];\n    }\n    return null;\n  }\n\n  // O tema (e o app) recriam o innerHTML do modal de zoom em alguns fluxos (ex.: troca de\n  // variante), apagando a classe ativa dos itens do modal. Espelha o slide ativo da\n  // galeria nos itens do modal; chamado no apply() e sempre que o modal abre.\n  function syncModal() {\n    var modalItems = document.querySelectorAll('.product-media-modal__content .' + ACTIVE);\n    for (var i = 0; i < modalItems.length; i++) modalItems[i].classList.remove(ACTIVE);\n\n    var activeSlide = document.querySelector('.product__media-item.' + ACTIVE);\n    if (!activeSlide) return;\n    // No modal o data-media-id \u00E9 s\u00F3 o id num\u00E9rico da m\u00EDdia (sem prefixo da se\u00E7\u00E3o).\n    var rawId = (activeSlide.getAttribute('data-media-id') || '').split('-').pop();\n    var targets = document.querySelectorAll(\n      '.product-media-modal__content [data-media-id=\"' + rawId + '\"]'\n    );\n    for (var t = 0; t < targets.length; t++) targets[t].classList.add(ACTIVE);\n  }\n\n  function titleCase(text) {\n    return String(text)\n      .toLowerCase()\n      .replace(/\\S+/g, function (word) {\n        return word.charAt(0).toUpperCase() + word.slice(1);\n      });\n  }\n\n  // Frase sobre a galeria (product-media-gallery, photo_info: true). Com nomes, mostra a\n  // combina\u00E7\u00E3o da foto exibida com o prefixo de IA (\"A cor dessa foto foi simulada com\n  // IA na...\"); sem nomes, volta aos defaults dos metafields e ao prefixo da foto real\n  // (\"O produto dessa foto foi feito com...\").\n  function updatePhotoInfo(argilaName, esmalteName, simulated) {\n    var box = document.querySelector('[data-photo-info]');\n    if (!box) return;\n    var argila = box.querySelector('[data-photo-info-argila]');\n    var esmalte = box.querySelector('[data-photo-info-esmalte]');\n    if (!argila || !esmalte) return;\n    var argilaText = argilaName || box.getAttribute('data-default-argila');\n    var esmalteText = esmalteName || box.getAttribute('data-default-esmalte');\n    // Sem nomes (foto real de produto sem metafields): n\u00E3o h\u00E1 o que dizer \u2014 oculta.\n    if (!argilaText || !esmalteText) {\n      box.hidden = true;\n      return;\n    }\n    box.hidden = false;\n    argila.textContent = argilaText;\n    esmalte.textContent = esmalteText;\n    var prefix = box.querySelector('[data-photo-info-prefix]');\n    if (prefix) {\n      prefix.textContent = simulated\n        ? box.getAttribute('data-prefix-ai')\n        : box.getAttribute('data-prefix-real');\n    }\n  }\n\n  // Frase conforme o slide exibido (navega\u00E7\u00E3o manual por setas/swipe/miniaturas): foto\n  // de varia\u00E7\u00E3o (data-glaze-*) \u00E9 simula\u00E7\u00E3o de IA; qualquer outra \u00E9 foto real (defaults).\n  function updatePhotoInfoForSlide(slide) {\n    if (!slide) return;\n    var esmalteAttr = slide.getAttribute('data-glaze-esmalte');\n    if (esmalteAttr) {\n      var argilaSlug = slugify(slide.getAttribute('data-glaze-argila'));\n      var esmalteSlug = slugify(esmalteAttr);\n      updatePhotoInfo(displayArgila(argilaSlug), displayEsmalte(esmalteSlug), true);\n    } else {\n      updatePhotoInfo(null, null, false);\n    }\n  }\n\n  // Nome de exibi\u00E7\u00E3o do esmalte: valor do radio selecionado (preserva acentos, ex.\n  // \"Pedra Sab\u00E3o\"); fallback reconstr\u00F3i do slug.\n  function displayEsmalte(esmalteSlug) {\n    var group = visibleGlazeGroup();\n    var checked = group && group.querySelector('input[type=\"radio\"]:checked');\n    if (checked && slugify(checked.value) === esmalteSlug) return checked.value;\n    return titleCase(esmalteSlug.replace(/-/g, ' '));\n  }\n\n  // Nome de exibi\u00E7\u00E3o da argila: valor do picker do tema (\"FLOCOS\" -> \"Flocos\");\n  // fallback reconstr\u00F3i do slug.\n  function displayArgila(argilaSlug) {\n    var raw = optionFromVariantPicker(/argila/i);\n    if (raw && slugify(raw) === argilaSlug) return titleCase(raw);\n    return titleCase(argilaSlug.replace(/-/g, ' '));\n  }\n\n  // Espelha a combina\u00E7\u00E3o na query string (?tamanho&argila&cor, slugs) preservando os\n  // demais par\u00E2metros (ex.: ?variant= do tema) \u2014 o link completo restaura a sele\u00E7\u00E3o.\n  // Debounce: o apply dispara em rajada e o replaceState tem rate-limit em browsers.\n  var urlTimer = null;\n  function scheduleUrlUpdate() {\n    clearTimeout(urlTimer);\n    urlTimer = setTimeout(function () {\n      if (!window.history || !window.history.replaceState || !window.URLSearchParams) return;\n      var group = visibleGlazeGroup();\n      var checked = group && group.querySelector('input[type=\"radio\"]:checked');\n      var cor = checked ? slugify(checked.value) : lastEsmalteSlug;\n      if (!cor) return; // a URL s\u00F3 carrega a combina\u00E7\u00E3o depois de uma cor escolhida\n      var params = new URLSearchParams(window.location.search);\n      var argila = argilaFromVariantPicker();\n      var tamanho = tamanhoFromVariantPicker();\n      if (argila) params.set('argila', argila);\n      if (tamanho) params.set('tamanho', tamanho);\n      params.set('cor', cor);\n      window.history.replaceState({}, '', window.location.pathname + '?' + params.toString());\n    }, 200);\n  }\n\n  // Marca no seletor de variantes do tema as op\u00E7\u00F5es vindas da query string. Quando a\n  // op\u00E7\u00E3o j\u00E1 est\u00E1 selecionada (ex.: ?variant= na URL j\u00E1 a definiu no servidor), nada \u00E9\n  // disparado \u2014 sem re-render, sem flick.\n  function preselectVariantOptions(argilaSlug, tamanhoSlug) {\n    var picker = document.querySelector('variant-selects');\n    if (!picker) return;\n    var fieldsets = picker.querySelectorAll('fieldset');\n    for (var i = 0; i < fieldsets.length; i++) {\n      var legend = fieldsets[i].querySelector('legend');\n      if (!legend) continue;\n      var want = null;\n      if (/argila/i.test(legend.textContent)) want = argilaSlug;\n      else if (/tamanho/i.test(legend.textContent)) want = tamanhoSlug;\n      if (!want) continue;\n      var radios = fieldsets[i].querySelectorAll('input[type=\"radio\"]');\n      for (var j = 0; j < radios.length; j++) {\n        if (slugify(radios[j].value) === want) {\n          if (!radios[j].checked) {\n            radios[j].checked = true;\n            radios[j].dispatchEvent(new Event('change', { bubbles: true }));\n          }\n          break;\n        }\n      }\n    }\n    var selects = picker.querySelectorAll('select');\n    for (var k = 0; k < selects.length; k++) {\n      var wrapper = selects[k].closest('.product-form__input');\n      if (!wrapper) continue;\n      var wantSel = null;\n      if (/argila/i.test(wrapper.textContent)) wantSel = argilaSlug;\n      else if (/tamanho/i.test(wrapper.textContent)) wantSel = tamanhoSlug;\n      if (!wantSel) continue;\n      var opts = selects[k].options;\n      for (var m = 0; m < opts.length; m++) {\n        if (slugify(opts[m].value) === wantSel) {\n          if (selects[k].value !== opts[m].value) {\n            selects[k].value = opts[m].value;\n            selects[k].dispatchEvent(new Event('change', { bubbles: true }));\n          }\n          break;\n        }\n      }\n    }\n  }\n\n  // Combina\u00E7\u00E3o oficial (metafields custom.foto_argila/foto_esmalte, expostos como\n  // defaults no overlay da frase): a \u00FAnica cuja galeria mostra as fotos reais iniciais.\n  function officialCombo() {\n    var box = document.querySelector('[data-photo-info]');\n    if (!box) return null;\n    var argila = slugify(box.getAttribute('data-default-argila'));\n    var esmalte = slugify(box.getAttribute('data-default-esmalte'));\n    if (!argila || !esmalte) return null;\n    return { argila: argila, esmalte: esmalte };\n  }\n\n  // Modo \"solo\": com uma combina\u00E7\u00E3o simulada ativa, a galeria mostra s\u00F3 a foto dela; as\n  // fotos iniciais (reais) voltam sem sele\u00E7\u00E3o ou na combina\u00E7\u00E3o oficial. A classe vai na\n  // se\u00E7\u00E3o para alcan\u00E7ar galeria, miniaturas e modal de zoom (component-glaze-media.css).\n  function setSolo(on) {\n    var gal = gallery();\n    if (!gal) return;\n    var scope = gal.closest('.shopify-section') || gal;\n    scope.classList.toggle('amme-glaze-solo', !!on);\n  }\n\n  function isSolo() {\n    var gal = gallery();\n    if (!gal) return false;\n    var scope = gal.closest('.shopify-section') || gal;\n    return scope.classList.contains('amme-glaze-solo');\n  }\n\n  function showBase(gal) {\n    setSolo(false);\n    var first = gal.querySelector('.product__media-item:not([data-glaze-esmalte])');\n    if (first && typeof gal.setActiveMedia === 'function') {\n      gal.setActiveMedia(first.getAttribute('data-media-id'), true);\n    }\n    resetSliders(gal);\n    updatePhotoInfo(null, null);\n    scheduleUrlUpdate();\n  }\n\n  // Foto da combina\u00E7\u00E3o: prefere a espec\u00EDfica do tamanho selecionado\n  // (data-glaze-tamanho) e cai na gen\u00E9rica (sem tamanho) quando o tamanho n\u00E3o tem foto\n  // pr\u00F3pria. Fotos de OUTRO tamanho nunca casam.\n  function findSlide(slides, argilaSlug, esmalteSlug, tamanhoSlug) {\n    if (!argilaSlug || !esmalteSlug) return null;\n    var generic = null;\n    for (var i = 0; i < slides.length; i++) {\n      if (\n        slugify(slides[i].getAttribute('data-glaze-argila')) !== argilaSlug ||\n        slugify(slides[i].getAttribute('data-glaze-esmalte')) !== esmalteSlug\n      ) {\n        continue;\n      }\n      var tamanho = slides[i].getAttribute('data-glaze-tamanho');\n      if (tamanho) {\n        if (tamanhoSlug && slugify(tamanho) === tamanhoSlug) return slides[i];\n      } else if (!generic) {\n        generic = slides[i];\n      }\n    }\n    return generic;\n  }\n\n  function apply(argilaSlug, esmalteSlug) {\n    var gal = gallery();\n    if (!gal) return;\n\n    var slides = gal.querySelectorAll('.product__media-item[data-glaze-esmalte]');\n    if (!slides.length) return; // produto sem fotos de varia\u00E7\u00E3o: n\u00E3o mexe na galeria\n\n    // Combina\u00E7\u00E3o oficial selecionada: mostra as fotos reais iniciais, n\u00E3o a simula\u00E7\u00E3o.\n    var official = officialCombo();\n    if (official && official.argila === argilaSlug && official.esmalte === esmalteSlug) {\n      clearActive();\n      showBase(gal);\n      return;\n    }\n\n    var match = findSlide(slides, argilaSlug, esmalteSlug, tamanhoFromVariantPicker());\n\n    clearActive();\n\n    if (!match) {\n      showBase(gal);\n      return;\n    }\n\n    // Foto de varia\u00E7\u00E3o ativa \u00E9 sempre simula\u00E7\u00E3o: galeria fica s\u00F3 com ela. A exce\u00E7\u00E3o da\n    // combina\u00E7\u00E3o oficial (metafields) j\u00E1 saiu acima; produto sem metafields n\u00E3o tem\n    // combina\u00E7\u00E3o oficial e qualquer sele\u00E7\u00E3o entra em solo.\n    setSolo(true);\n    match.classList.add(ACTIVE);\n    promoteImage(match);\n    updatePhotoInfo(displayArgila(argilaSlug), displayEsmalte(esmalteSlug), true);\n    var mediaId = match.getAttribute('data-media-id'); // \"<section.id>-<media.id>\"\n    var thumb = gal.querySelector('.thumbnail-list__item[data-target=\"' + mediaId + '\"]');\n    if (thumb) thumb.classList.add(ACTIVE);\n    syncModal();\n\n    if (typeof gal.setActiveMedia === 'function') gal.setActiveMedia(mediaId, true);\n    resetSliders(gal);\n    scheduleUrlUpdate();\n  }\n\n  function applyFromRadio(radio) {\n    lastEsmalteSlug = slugify(radio.value);\n    var argila = argilaFromRadio(radio) || argilaFromVariantPicker();\n    apply(argila, lastEsmalteSlug);\n  }\n\n  // Troca de argila: transfere a cor para o grupo rec\u00E9m-vis\u00EDvel \u2014 o mesmo esmalte quando\n  // o grupo o tem, sen\u00E3o a primeira cor (ex.: Branco Amme). O change disparado re-entra\n  // pelo onChange (galeria/frase) e deixa o radio marcado para o app ler como property.\n  function syncGroupSelection(group) {\n    if (!lastEsmalteSlug) return false; // nenhuma cor escolhida ainda: nada a transferir\n    var radios = group.querySelectorAll('input[type=\"radio\"]');\n    if (!radios.length) return false;\n    var target = null;\n    for (var i = 0; i < radios.length; i++) {\n      if (slugify(radios[i].value) === lastEsmalteSlug) {\n        target = radios[i];\n        break;\n      }\n    }\n    if (!target) target = radios[0];\n    enforceGroup = group;\n    enforceSlug = slugify(target.value);\n    enforceUntil = Date.now() + 4000;\n    if (target.checked) return false; // sele\u00E7\u00E3o j\u00E1 correta: segue o fluxo normal\n    target.checked = true;\n    target.dispatchEvent(new Event('change', { bubbles: true }));\n    return true;\n  }\n\n  // Dentro da janela p\u00F3s-switch: se a restaura\u00E7\u00E3o tardia do app trocou a sele\u00E7\u00E3o,\n  // re-marca o alvo do carry-over. Retorna true quando re-disparou o change.\n  function enforceSelection(group) {\n    if (group !== enforceGroup || Date.now() >= enforceUntil) return false;\n    var checked = group.querySelector('input[type=\"radio\"]:checked');\n    if (checked && slugify(checked.value) === enforceSlug) return false;\n    var radios = group.querySelectorAll('input[type=\"radio\"]');\n    for (var i = 0; i < radios.length; i++) {\n      if (slugify(radios[i].value) === enforceSlug) {\n        radios[i].checked = true;\n        radios[i].dispatchEvent(new Event('change', { bubbles: true }));\n        return true;\n      }\n    }\n    return false;\n  }\n\n  // Re-aplica o estado atual (troca de variante, altern\u00E2ncia de grupo do app, primeira\n  // renderiza\u00E7\u00E3o). Idempotente: sai cedo se a foto ativa j\u00E1 corresponde \u00E0 sele\u00E7\u00E3o \u2014 o\n  // observer do container do app dispara em rajadas e o setActiveMedia n\u00E3o \u00E9 gratuito.\n  function reapply() {\n    var group = visibleGlazeGroup();\n\n    // Cor da query string: marca o radio assim que o app renderiza o grupo (match\n    // exato). Fica pendente at\u00E9 CONFIRMAR marcada \u2014 re-render do tema ou do app pode\n    // apagar a marca\u00E7\u00E3o sem evento; o retry do init re-entra aqui at\u00E9 o deadline.\n    if (group && pendingCor) {\n      if (Date.now() > pendingCorUntil) {\n        pendingCor = null;\n      } else {\n        var pendRadios = group.querySelectorAll('input[type=\"radio\"]');\n        for (var p = 0; p < pendRadios.length; p++) {\n          if (slugify(pendRadios[p].value) === pendingCor) {\n            enforceGroup = group;\n            enforceSlug = pendingCor;\n            enforceUntil = Date.now() + 4000;\n            if (pendRadios[p].checked) {\n              pendingCor = null; // confirmada: restaura\u00E7\u00E3o conclu\u00EDda\n            } else {\n              pendRadios[p].checked = true;\n              pendRadios[p].dispatchEvent(new Event('change', { bubbles: true }));\n              return;\n            }\n            break;\n          }\n        }\n        // radio ausente no grupo vis\u00EDvel (transi\u00E7\u00E3o de argila em curso): mant\u00E9m pendente\n      }\n    }\n\n    var switched = group && lastGroup && group !== lastGroup;\n    if (group) lastGroup = group;\n    if (switched && syncGroupSelection(group)) return; // o change disparado j\u00E1 sincronizou\n    if (!switched && group && enforceSelection(group)) return;\n\n    var checked = group && group.querySelector('input[type=\"radio\"]:checked');\n    var active = document.querySelector('.product__media-item.' + ACTIVE);\n\n    if (checked) {\n      var argila = argilaFromRadio(checked) || argilaFromVariantPicker();\n      var esmalte = slugify(checked.value);\n      lastEsmalteSlug = esmalte;\n      var official = officialCombo();\n      var isOfficial = official && official.argila === argila && official.esmalte === esmalte;\n      var gal = gallery();\n      // Na combina\u00E7\u00E3o oficial nenhuma foto de varia\u00E7\u00E3o deveria estar ativa \u2014 nesse caso\n      // N\u00C3O sai no early-exit: cai no apply, que roteia para showBase (auto-corre\u00E7\u00E3o).\n      if (active && gal && !isOfficial) {\n        var slides = gal.querySelectorAll('.product__media-item[data-glaze-esmalte]');\n        if (active === findSlide(slides, argila, esmalte, tamanhoFromVariantPicker())) {\n          return; // j\u00E1 sincronizado (inclusive o tamanho: gen\u00E9rica ativa \u2260 espec\u00EDfica desejada)\n        }\n      }\n      // Combina\u00E7\u00E3o oficial j\u00E1 exibindo as fotos base (sem foto ativa e sem solo):\n      // evita re-rodar showBase a cada rajada do observer do app.\n      if (!active && !isSolo() && isOfficial) return;\n      apply(argila, esmalte);\n    } else if (active && !pendingCor) {\n      // Esmalte deixou de estar selecionado (ex.: trocou a argila): volta \u00E0 foto base.\n      // Com cor pendente da URL, a foto pr\u00E9-aplicada fica at\u00E9 o app renderizar o grupo.\n      var gal = gallery();\n      clearActive();\n      if (gal) showBase(gal);\n    }\n  }\n\n  // Sem reload, o app leva segundos para alternar o grupo de esmaltes ap\u00F3s a troca de\n  // variante. Observa o container do app: quando um grupo muda de style (show/hide),\n  // re-aplica com debounce \u2014 cobre inclusive esmalte pr\u00E9-selecionado pelo app no grupo\n  // novo. Retorna false se o container ainda n\u00E3o existe.\n  var reapplyTimer = null;\n  function watchGlazeContainer() {\n    var container = document.querySelector('.avpoptions-container__v2');\n    if (!container) return false;\n    new MutationObserver(function (mutations) {\n      for (var i = 0; i < mutations.length; i++) {\n        var target = mutations[i].target;\n        if (target.nodeType === 1 && target.matches && target.matches('.glaze-dropdown.avp-option')) {\n          clearTimeout(reapplyTimer);\n          reapplyTimer = setTimeout(reapply, 150);\n          return;\n        }\n      }\n    }).observe(container, { attributes: true, attributeFilter: ['style'], subtree: true });\n    return true;\n  }\n\n  // Frase segue a navega\u00E7\u00E3o manual da galeria: is-active (miniaturas/desktop, setado\n  // por setActiveMedia) e slideChanged (swipe/setas do slider mobile). Guard no pr\u00F3prio\n  // viewer porque o tema re-renderiza a galeria na troca de variante \u2014 re-anexado pelo\n  // callback do variantChange.\n  function watchGallery() {\n    var gal = gallery();\n    if (!gal) return;\n    var viewer = gal.querySelector('[id^=\"GalleryViewer\"]');\n    if (!viewer || viewer.__ammePhotoInfoHooks) return;\n    viewer.__ammePhotoInfoHooks = true;\n\n    viewer.addEventListener('slideChanged', function (event) {\n      var slide = event.detail && event.detail.currentElement;\n      if (slide) updatePhotoInfoForSlide(slide);\n    });\n\n    new MutationObserver(function (mutations) {\n      for (var i = 0; i < mutations.length; i++) {\n        var target = mutations[i].target;\n        if (\n          target.nodeType === 1 &&\n          target.matches &&\n          target.matches('.product__media-item.is-active')\n        ) {\n          updatePhotoInfoForSlide(target);\n          return;\n        }\n      }\n    }).observe(viewer, { attributes: true, attributeFilter: ['class'], subtree: true });\n  }\n\n  function onChange(event) {\n    var target = event.target;\n    if (!target || target.type !== 'radio') return;\n    if (!target.closest || !target.closest('.glaze-dropdown.avp-option')) return;\n    if (event.isTrusted) {\n      enforceUntil = 0; // escolha real do usu\u00E1rio encerra o refor\u00E7o\n      pendingCor = null; // e a restaura\u00E7\u00E3o pendente da URL\n    }\n    applyFromRadio(target);\n  }\n\n  function init() {\n    // O quick-add do Dawn re-injeta e re-executa este script: liga os hooks uma vez por\n    // p\u00E1gina. Os handlers consultam o DOM vivo, ent\u00E3o valem tamb\u00E9m para galerias\n    // injetadas depois (quick-add).\n    if (window.__ammeGlazeSync) return;\n    window.__ammeGlazeSync = true;\n\n    document.addEventListener('change', onChange, true);\n\n    // Sem reload, o esmalte escolhido numa argila anterior continua marcado no grupo\n    // oculto e o app o injetaria como property fantasma (chave vazia) no add-to-cart.\n    // Desmarca radios de grupos ocultos no submit, em captura \u2014 antes de o tema/app\n    // montarem o payload. A \"mem\u00F3ria\" da sele\u00E7\u00E3o por argila \u00E9 preservada at\u00E9 o submit.\n    document.addEventListener(\n      'submit',\n      function (event) {\n        var form = event.target;\n        if (!form || !form.querySelector || !form.querySelector('input[name=\"id\"]')) return;\n        var groups = document.querySelectorAll('.glaze-dropdown.avp-option');\n        for (var i = 0; i < groups.length; i++) {\n          if (groups[i].offsetParent === null) {\n            var checked = groups[i].querySelectorAll('input[type=\"radio\"]:checked');\n            for (var j = 0; j < checked.length; j++) checked[j].checked = false;\n          }\n        }\n      },\n      true\n    );\n\n    // Troca de variante (argila): o tema re-renderiza a galeria na hora; o app alterna o\n    // grupo de esmaltes segundos depois (coberto pelo watchGlazeContainer). Este fallback\n    // curto limpa/re-sincroniza o estado do tema.\n    // PUB_SUB_EVENTS \u00E9 `const` de topo (constants.js): existe como binding global mas\n    // N\u00C3O como window.PUB_SUB_EVENTS \u2014 o acesso precisa ser pelo identificador.\n    if (\n      typeof subscribe === 'function' &&\n      typeof PUB_SUB_EVENTS !== 'undefined' &&\n      PUB_SUB_EVENTS.variantChange\n    ) {\n      subscribe(PUB_SUB_EVENTS.variantChange, function () {\n        setTimeout(function () {\n          watchGallery();\n          reapply();\n          scheduleUrlUpdate(); // o tema reescreveu a URL s\u00F3 com ?variant=\n        }, 300);\n      });\n    }\n\n    // O observer do grupo de esmaltes sustenta o carry-over da cor na troca de argila,\n    // inclusive em produto SEM fotos de varia\u00E7\u00E3o (as partes de galeria do reapply saem\n    // cedo sozinhas). Espera o app renderizar o grupo e desliga; o timeout evita\n    // observer eterno quando o app n\u00E3o renderiza.\n    // Restaura a combina\u00E7\u00E3o da query string: variante no picker do tema (no-op quando o\n    // ?variant= j\u00E1 a definiu no servidor), cor agendada para quando o app renderizar e\n    // foto da combina\u00E7\u00E3o aplicada J\u00C1 \u2014 sem esperar o app (anti-flick).\n    if (window.URLSearchParams) {\n      var urlParams = new URLSearchParams(window.location.search);\n      var corParam = slugify(urlParams.get('cor'));\n      var argilaParam = slugify(urlParams.get('argila'));\n      var tamanhoParam = slugify(urlParams.get('tamanho'));\n      // Sem ?variant= nem ?argila=: o servidor renderiza a primeira variante (flocos),\n      // mas as fotos iniciais s\u00E3o da combina\u00E7\u00E3o oficial \u2014 o picker abre na argila dela.\n      if (!argilaParam && !urlParams.get('variant')) {\n        var infoBox = document.querySelector('[data-photo-info]');\n        if (infoBox) argilaParam = slugify(infoBox.getAttribute('data-default-argila'));\n      }\n      if (argilaParam || tamanhoParam) preselectVariantOptions(argilaParam, tamanhoParam);\n      if (corParam) {\n        lastEsmalteSlug = corParam;\n        pendingCor = corParam;\n        pendingCorUntil = Date.now() + 12000;\n        apply(argilaParam || argilaFromVariantPicker(), corParam);\n        // Retry ativo: os re-renders do tema/app nem sempre emitem mutation observ\u00E1vel;\n        // insiste at\u00E9 a marca\u00E7\u00E3o confirmar ou o deadline vencer.\n        var pendingTimer = setInterval(function () {\n          if (!pendingCor || Date.now() > pendingCorUntil) {\n            clearInterval(pendingTimer);\n            return;\n          }\n          reapply();\n        }, 700);\n      }\n    }\n\n    if (visibleGlazeGroup()) {\n      watchGlazeContainer();\n      reapply();\n    } else {\n      var observer = new MutationObserver(function () {\n        if (visibleGlazeGroup()) {\n          observer.disconnect();\n          watchGlazeContainer();\n          reapply();\n        }\n      });\n      observer.observe(document.body, { childList: true, subtree: true });\n      setTimeout(function () {\n        observer.disconnect();\n      }, 20000);\n    }\n\n    // Sincroniza\u00E7\u00E3o do modal de zoom e da frase por navega\u00E7\u00E3o manual: s\u00F3 interessa\n    // quando a p\u00E1gina tem fotos de varia\u00E7\u00E3o.\n    var gal = gallery();\n    if (!gal || !gal.querySelector('.product__media-item[data-glaze-esmalte]')) return;\n\n    watchGallery();\n\n    // Re-sincroniza o modal ao abrir: cobre reescritas do innerHTML do modal que\n    // aconte\u00E7am depois do reapply (ex.: re-render tardio disparado pelo app).\n    var modal = document.querySelector('product-modal');\n    if (modal) {\n      new MutationObserver(function () {\n        if (modal.hasAttribute('open')) syncModal();\n      }).observe(modal, { attributes: true, attributeFilter: ['open'] });\n    }\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
