{
  "version": 3,
  "sources": ["/cdn/shop/t/12/assets/au-pdp.js?r=20261017u"],
  "sourcesContent": ["(() => {\n  if (!document.querySelector('.au-page')) return;\n  const page = document.body;\n  const media = matchMedia('(prefers-reduced-motion: reduce)');\n  const preselected = document.querySelector('[data-au-kit][aria-pressed=\"true\"]');\n  const state = { kit: preselected ? Number(preselected.dataset.auKit) : 1, symptoms: new Set() };\n  // Kit de 3 meses: base do \"1 mes de Majovi\" e recomenda\u00E7\u00E3o do autochequeo\n  const kitIndex = count => Number(page.querySelector(`[data-au-count=\"${count}\"]`)?.dataset.auKit ?? state.kit);\n  // Um formatador s\u00F3 (o mesmo resultado de toLocaleString('es-AR')): criar um a cada pre\u00E7o, a cada segundo, pesava no celular\n  const money = new Intl.NumberFormat('es-AR');\n  const fmt = value => '$ ' + money.format(Math.round(value));\n  let observer, charts, small = false, frame = 0;\n  // Blocos com entrada ainda escondidos. Em rolagem r\u00E1pida um bloco pode passar pela tela entre dois quadros sem o aviso\n  // de \"entrou na tela\" chegar e ficava invis\u00EDvel at\u00E9 a pessoa voltar a ele; scroll() revela os que j\u00E1 passaram\n  const pending = new Set();\n  const all = (selector, root = page) => [...root.querySelectorAll(selector)];\n  // Despacho por faixa de hor\u00E1rio, sempre no hor\u00E1rio da Argentina (corte \u00E0s 14 h em dia \u00FAtil;\n  // sexta depois do corte, s\u00E1bado e domingo saem na segunda). Entre 11 e 14 h mostra quanto falta para o corte.\n  function dispatch(now) {\n    const ar = new Date(now.toLocaleString('en-US', { timeZone: 'America/Argentina/Buenos_Aires' }));\n    const day = ar.getDay(), h = ar.getHours(), weekday = day >= 1 && day <= 5;\n    if (weekday && h < 14) {\n      const left = (14 * 60) - (h * 60 + ar.getMinutes()), lh = Math.floor(left / 60), lm = left % 60;\n      const urgent = h >= 11 ? `Quedan ${lh ? lh + ' h ' : ''}${lm} min para que tu pedido salga hoy` : 'Ped\u00ED antes de las 14 h y sale hoy mismo';\n      return { cutoffText: urgent, dispatchShort: 'Ped\u00EDs antes de las 14 h, sale hoy.' };\n    }\n    if (day >= 1 && day <= 4) return { cutoffText: 'Ped\u00ED ahora y sale ma\u00F1ana a primera hora', dispatchShort: 'Ped\u00EDs hoy, sale ma\u00F1ana a primera hora.' };\n    return { cutoffText: 'Ped\u00ED ahora y sale el lunes a primera hora', dispatchShort: 'Ped\u00EDs hoy, sale el lunes a primera hora.' };\n  }\n  function values() {\n    const card = page.querySelector(`[data-au-kit=\"${state.kit}\"]`);\n    const price = Number(card?.dataset.auPrice || 0) / 100;\n    const count = Number(card?.dataset.auCount || 3);\n    const monthPrice = Number(page.querySelector('[data-au-count=\"3\"]')?.dataset.auPrice || 0) / 300;\n    const now = new Date(), end = new Date(now); end.setHours(24, 0, 0, 0);\n    const left = Math.max(0, end - now), pad = x => String(x).padStart(2, '0');\n    return {\n      selPrice: fmt(price), 'sel.title': card?.dataset.auTitle || '3 frascos', 'sel.sub': card?.dataset.auSub || '90 d\u00EDas', 'sel.tag': card?.dataset.auTag || '',\n      'sel.badge': card?.dataset.auBadge || '',\n      'sel.saveText': (b => b > price && price > 0 ? 'Ahorr\u00E1s ' + Math.round((b - price) / b * 100) + '%' : '')(Number(card?.dataset.auBefore || 0) / 100),\n      'sel.pct': (b => b > price && price > 0 ? String(Math.round((b - price) / b * 100)) : '')(Number(card?.dataset.auBefore || 0) / 100),\n      'sel.bottles': count === 1 ? '1 frasco' : `${count} frascos`,\n      'sel.before': Number(card?.dataset.auBefore || 0) / 100 > price ? fmt(Number(card.dataset.auBefore) / 100) : '',\n      'sel.perDay': fmt(price / (count * 30)), 'sel.perInstallment': fmt(price / 3),\n      'sel.savings': fmt(Math.max(0, Number(card?.dataset.auBefore || 0) / 100 - price)),\n      countdown: pad(Math.floor(left / 3600000)) + ':' + pad(Math.floor(left / 60000) % 60) + ':' + pad(Math.floor(left / 1000) % 60),\n      'countdown.h': pad(Math.floor(left / 3600000)), 'countdown.m': pad(Math.floor(left / 60000) % 60), 'countdown.s': pad(Math.floor(left / 1000) % 60),\n      'inaction.majovi': fmt(monthPrice), 'inaction.multiple': (100000 / monthPrice).toFixed(1).replace('.', ','),\n      'inaction.aPct': Math.max(6, Math.round(monthPrice / 100000 * 100)),\n      ...dispatch(now),\n      lotMonth: ['enero','febrero','marzo','abril','mayo','junio','julio','agosto','septiembre','octubre','noviembre','diciembre'][now.getMonth()]\n    };\n  }\n  function update() {\n    // Kit \"Agotado\" nunca fica escolhido (link, autochequeo ou padr\u00E3o): vale o seguinte dispon\u00EDvel, sen\u00E3o o primeiro dispon\u00EDvel\n    if (page.querySelector(`[data-au-kit=\"${state.kit}\"][data-au-soldout]`)) {\n      const free = [...new Set(all('[data-au-kit]:not([data-au-soldout])').map(el => Number(el.dataset.auKit)))].sort((a, b) => a - b);\n      state.kit = free.find(i => i > state.kit) ?? free[0] ?? state.kit;\n    }\n    const v = values();\n    // Cada texto recebe o valor final de uma vez (modelo \u2192 % do kit \u2192 texto do kit \u2192 pre\u00E7o) e s\u00F3 \u00E9 escrito se mudou\n    const texts = new Map();\n    // data-au-require: se o valor indicado vier vazio (ex.: kit sem condi\u00E7\u00E3o), usa data-au-template-alt\n    all('[data-au-template]').forEach(el => {\n      const need = el.dataset.auRequire, tpl = need && !v[need] ? (el.dataset.auTemplateAlt ?? '') : el.dataset.auTemplate;\n      texts.set(el, tpl.replace(/\\[\\[(.*?)\\]\\]/g, (_, key) => v[key] ?? ''));\n    });\n    // Bot\u00F5es de compra: com desconto, o texto mostra o % de economia do kit escolhido\n    const selCard = page.querySelector(`[data-au-kit=\"${state.kit}\"]`);\n    const selPrice = Number(selCard?.dataset.auPrice || 0), selBefore = Number(selCard?.dataset.auBefore || 0);\n    const pct = selBefore > selPrice && selPrice > 0 ? Math.round((selBefore - selPrice) / selBefore * 100) : 0;\n    all('[data-au-cta-off]').forEach(el => { if (pct > 0 && el.dataset.auCtaOff) texts.set(el, el.dataset.auCtaOff.replace(/\\[\\[pct\\]\\]/g, pct)); });\n    // Bot\u00E3o por kit: se o kit escolhido, na mesma se\u00E7\u00E3o, tem texto pr\u00F3prio (data-au-cta), ele vale\n    all('[data-au-cta-off]').forEach(el => { const own = el.closest('section')?.querySelector(`[data-au-kit=\"${state.kit}\"][data-au-cta]`); if (own) texts.set(el, own.dataset.auCta); });\n    all('[data-au-money]').forEach(el => { texts.set(el, fmt(Number(el.dataset.auMoney))); });\n    texts.forEach((text, el) => setText(el, text));\n    // Conte\u00FAdo por kit: data-au-show-for / data-au-hide-for = frascos do kit escolhido (\"1,3\", \"5\")\n    const selCount = String(selCard?.dataset.auCount || ''), inList = list => list.split(',').map(s => s.trim()).includes(selCount);\n    all('[data-au-show-for]').forEach(el => setHidden(el, !inList(el.dataset.auShowFor)));\n    all('[data-au-hide-for]').forEach(el => setHidden(el, inList(el.dataset.auHideFor)));\n    all('[data-au-calculation-bar]').forEach(el => {\n      setAttr(el, 'data-bar', String(v['inaction.aPct']));\n      if ((media.matches || el.closest('[data-reveal]')?.style.opacity === '1') && el.style.width !== v['inaction.aPct'] + '%') el.style.width = v['inaction.aPct'] + '%';\n    });\n    all('[data-au-kit]').forEach(el => setAttr(el, 'aria-pressed', String(Number(el.dataset.auKit) === state.kit)));\n    const kitImage = page.querySelector(`[data-au-kit=\"${state.kit}\"] .au-kit-image`), kitSrc = kitImage && (kitImage.currentSrc || kitImage.src);\n    all('[data-au-sticky-image]').forEach(el => { if (kitSrc && el.src !== kitSrc) el.src = kitSrc; });\n    // Barra flutuante: etiqueta com a cor do kit escolhido (preta, dourada, verde ou dourada com brilho)\n    all('[data-au-sticky-badge]').forEach(el => { setHidden(el, !selCard?.dataset.auBadge); setAttr(el, 'data-style', selCard?.dataset.auBadgeStyle || 'gold'); });\n  }\n  // Escritas s\u00F3 quando o valor muda. Reescrever o mesmo texto a cada segundo troca o n\u00F3 de texto, e a Utmify, que\n  // vigia trocas de n\u00F3s na p\u00E1gina inteira, reescrevia ent\u00E3o todos os links e formul\u00E1rios: p\u00E1gina travando no celular.\n  // Texto novo num n\u00F3 de texto \u00FAnico troca s\u00F3 o dado do n\u00F3 (n\u00E3o conta como troca de n\u00F3)\n  function setText(el, text) {\n    if (el.textContent === text) return;\n    const node = el.firstChild;\n    if (text && node && node === el.lastChild && node.nodeType === 3) node.data = text;\n    else el.textContent = text;\n  }\n  function setAttr(el, name, value) { if (el.getAttribute(name) !== value) el.setAttribute(name, value); }\n  function setHidden(el, hidden) { if (el.hidden !== hidden) el.hidden = hidden; }\n  // \"Qu\u00E9 esperar\": a foto do celular nunca passa da altura do card \"Semana 1\" (--au-tl-h)\n  all('section.au-timeline').forEach(section => {\n    const card = section.querySelector('.au-s224'); if (!card || !('ResizeObserver' in window)) return;\n    new ResizeObserver(() => section.style.setProperty('--au-tl-h', `${Math.round(card.getBoundingClientRect().height)}px`)).observe(card);\n  });\n  // Comparativo no celular: \"Ver comparaci\u00F3n completa\" abre e fecha as linhas escondidas\n  document.addEventListener('click', e => {\n    const btn = e.target.closest('[data-au-cmp-toggle]'); if (!btn) return;\n    const box = btn.closest('.au-s273'); if (!box) return;\n    const open = box.classList.toggle('is-open'); btn.setAttribute('aria-expanded', String(open));\n  });\n  // Gr\u00E1ficos: linhas do SVG, barras e o tra\u00E7o dos cards de causas. Computador: desenham junto com o bloco.\n  // Celular: s\u00F3 quando o pr\u00F3prio gr\u00E1fico est\u00E1 na tela (observador `charts` em motion)\n  const CHARTS = '[data-line], [data-bar], .au-pc-draw';\n  function draw(el, delay = 0) {\n    if (el.matches('[data-line]')) { el.style.strokeDashoffset = '0'; el.style.opacity = '1'; }\n    else if (el.matches('[data-bar]')) { el.style.transitionDelay = `${delay}s`; el.style.width = `${el.dataset.bar}%`; }\n    else el.setAttribute('data-drawn', '');\n  }\n  function reveal(el) {\n    pending.delete(el);\n    el.style.opacity = '1'; el.style.transform = 'none'; el.style.filter = 'none'; el.setAttribute('data-revealed', '');\n    if (small) return;\n    all('[data-line], .au-pc-draw', el).forEach(chart => draw(chart));\n    all('[data-bar]', el).forEach((bar, i) => draw(bar, i * .2));\n  }\n  function motion() {\n    observer?.disconnect(); charts?.disconnect(); pending.clear();\n    page.toggleAttribute('data-nomotion', media.matches);\n    small = matchMedia('(max-width: 749px)').matches;\n    if (media.matches || !('IntersectionObserver' in window)) { all('[data-reveal]').forEach(reveal); all(CHARTS).forEach(chart => draw(chart)); return; }\n    // Celular: entrada mais curta e mais leve, come\u00E7ando um pouco antes do bloco entrar na tela (rolagem r\u00E1pida\n    // n\u00E3o mostra vazio). Computador: como antes\n    if (small) {\n      // Gr\u00E1fico s\u00F3 se desenha com 60% dele vis\u00EDvel acima dos 12% de baixo da tela; barras que entram juntas em sequ\u00EAncia\n      charts = new IntersectionObserver(entries => {\n        let i = 0;\n        entries.forEach(entry => {\n          if (!entry.isIntersecting) return;\n          const target = entry.target;\n          charts.unobserve(target);\n          if (target.matches('[data-bar]')) draw(target, i++ * .2);\n          else all('[data-line], .au-pc-draw', target).forEach(chart => draw(chart));\n        });\n      }, { threshold: .6, rootMargin: '0px 0px -12% 0px' });\n      // Observa o SVG inteiro (linhas) e o quadro do tra\u00E7o (o recorte do tra\u00E7o escondido zera a \u00E1rea vis\u00EDvel dele)\n      new Set(all(CHARTS).map(chart => chart.closest('svg') || (chart.matches('.au-pc-draw') ? chart.parentElement : chart))).forEach(target => charts.observe(target));\n    }\n    // Celular sem desfoque na entrada: desfocar blocos inteiros durante a rolagem pesa no processador gr\u00E1fico de aparelho fraco.\n    // A entrada come\u00E7a 40% de tela antes do bloco aparecer: no Safari o aviso de \"entrou na tela\" chega mais tarde e,\n    // com rolagem r\u00E1pida, o bloco chegava ainda invis\u00EDvel (espa\u00E7o vazio na tela)\n    const fx = small\n      ? { dur: .55, step: .06, from: 'translateY(16px) scale(.99)', blur: 'none', opts: { threshold: .01, rootMargin: '0px 0px 40% 0px' } }\n      : { dur: 1.05, step: .12, from: 'translateY(48px) scale(.98)', blur: 'blur(12px)', opts: { threshold: .15 } };\n    observer = new IntersectionObserver(entries => entries.forEach(entry => {\n      if (entry.isIntersecting) { reveal(entry.target); observer.unobserve(entry.target); }\n    }), fx.opts);\n    // Posi\u00E7\u00F5es lidas todas antes de qualquer escrita (ler depois de escrever recalculava a p\u00E1gina 47 vezes na abertura)\n    const blocks = all('[data-reveal]'), vh = innerHeight, rects = blocks.map(el => el.getBoundingClientRect());\n    blocks.forEach((el, i) => {\n      const rect = rects[i];\n      if (rect.top < vh && rect.bottom > 0) { reveal(el); return; }\n      const delay = (parseInt(el.dataset.d || '0', 10) || 0) * fx.step;\n      el.style.opacity = '0'; el.style.transform = fx.from; el.style.filter = fx.blur;\n      el.style.transition = `opacity ${fx.dur}s cubic-bezier(.2,.7,.2,1) ${delay}s, transform ${fx.dur}s cubic-bezier(.2,.7,.2,1) ${delay}s, filter ${fx.dur}s cubic-bezier(.2,.7,.2,1) ${delay}s`;\n      observer.observe(el); pending.add(el);\n    });\n  }\n  function scroll() {\n    frame = 0;\n    // Primeiro todas as leituras de posi\u00E7\u00E3o, depois as escritas: ler depois de escrever estilo obriga o navegador a\n    // recalcular a p\u00E1gina no meio do quadro (rolagem engasgando em celular fraco)\n    const y = scrollY, vh = innerHeight, max = document.documentElement.scrollHeight - vh;\n    const progress = page.querySelector('[data-au-ref=progressRef]');\n    const glow = page.querySelector('[data-au-ref=heroGlowRef]');\n    const sticky = page.querySelector('.au-sticky-atc');\n    const buyInView = !!sticky && all('[data-au-purchase]:not(.au-sticky-button)').some(el => { const r = el.getBoundingClientRect(); return r.bottom > 0 && r.top < vh; });\n    const timeline = page.querySelector('[data-au-ref=timelineRef]');\n    const nodes = timeline ? all('[data-tl-node]', timeline) : [];\n    const fill = nodes.length ? timeline.querySelector('[data-au-ref=fillRef]') : null;\n    const box = nodes.length ? timeline.getBoundingClientRect() : null;\n    const tops = nodes.map(node => node.getBoundingClientRect().top);\n    const late = pending.size ? [...pending].filter(el => { const r = el.getBoundingClientRect(); return r.bottom < 0 || (small && r.top < vh * 1.4); }) : [];\n    late.forEach(el => { reveal(el); observer?.unobserve(el); });\n    if (progress) progress.style.width = `${max > 0 ? y / max * 100 : 0}%`;\n    if (!media.matches && y < 900 && glow) glow.style.transform = `translate3d(0,${y * .25}px,0) rotate(${y * .02}deg)`;\n    if (sticky) sticky.classList.toggle('is-on', y > 600 && !buyInView);\n    if (!box) return;\n    const start = box.top + 14, end = box.bottom - 14;\n    const ratio = Math.max(0, Math.min(1, (vh * .6 - start) / Math.max(1, end - start)));\n    if (fill) fill.style.height = `${ratio * (end - start)}px`;\n    nodes.forEach((node, i) => {\n      const on = tops[i] < vh * .6;\n      if (node.auOn === on) return;\n      node.auOn = on;\n      node.style.background = on ? '#9fc3a7' : '#0f1712';\n      node.style.borderColor = on ? '#9fc3a7' : 'rgba(243,239,230,.25)';\n      node.style.boxShadow = on ? '0 0 0 6px rgba(159,195,167,.15)' : 'none';\n    });\n  }\n  // Autochequeo: grupo A ('r', reten\u00E7\u00E3o pontual) e grupo B ('l', sinais cr\u00F4nicos/lipedema).\n  // 3+ do B \u2192 kit de 5 meses; 1\u20132 do B (com ou sem A) ou 4+ do A \u2192 3 meses; s\u00F3 A (1\u20133) \u2192 1 m\u00EAs.\n  // Textos de cada resultado v\u00EAm dos settings da se\u00E7\u00E3o (data-res{1,3,5}-label/-text/-cta no bloco do resultado).\n  function symptomResult() {\n    const selected = all('[data-au-symptom]').filter(el => state.symptoms.has(el.dataset.auSymptom));\n    const a = selected.filter(el => el.dataset.auSymptomType === 'r').length, b = selected.length - a;\n    const tier = b >= 3 ? 5 : (b >= 1 || a >= 4) ? 3 : a >= 1 ? 1 : 0;\n    all('[data-au-quiz-result]').forEach(box => {\n      const copy = box.dataset, key = 'res' + tier;\n      const label = tier ? copy[key + 'Label'] : 'Todav\u00EDa no marcaste nada';\n      const text = tier ? copy[key + 'Text'] : 'Eleg\u00ED las frases que te suenan. El resultado aparece ac\u00E1.';\n      box.querySelectorAll('[data-au-result-label]').forEach(el => { el.textContent = label || ''; });\n      box.querySelectorAll('[data-au-result-text]').forEach(el => { el.textContent = text || ''; });\n      box.querySelectorAll('[data-au-result-color]').forEach(el => { el.style.color = tier ? '#0e7f51' : '#5b5d55'; });\n      box.querySelectorAll('[data-au-result-cta]').forEach(el => { el.hidden = !tier; });\n      box.querySelectorAll('[data-au-recommend]').forEach(el => { el.textContent = (tier && copy[key + 'Cta']) || ''; el.dataset.auRecommendedKit = kitIndex(tier || 3); });\n    });\n  }\n  // Galeria: as fotos ficam lado a lado num trilho com encaixe; a miniatura leva o trilho at\u00E9 a foto dela\n  const showGallery = (target, fromTrack) => {\n    const track = target.closest('[data-block=\"gallery\"]')?.querySelector('[data-au-gal-track]');\n    const slide = track?.querySelector(`[data-au-gal-slide=\"${target.dataset.auGallery}\"]`);\n    if (track && slide && !fromTrack) {\n      slide.querySelector('img')?.setAttribute('loading', 'eager');\n      track.scrollTo({ left: slide.offsetLeft, behavior: 'instant' });\n    }\n    all('[data-au-gallery]').forEach(el => el.setAttribute('aria-pressed', String(el === target)));\n    // Celular: a faixa horizontal de miniaturas acompanha a foto aberta (miniatura ativa no centro)\n    const strip = target.closest('[data-au-thumbs]');\n    if (strip && strip.scrollWidth - strip.clientWidth > 1) {\n      const s = strip.getBoundingClientRect(), r = target.getBoundingClientRect();\n      strip.scrollTo({ left: strip.scrollLeft + r.left - s.left - (s.width - r.width) / 2, behavior: media.matches ? 'auto' : 'smooth' });\n    }\n  };\n  // Computador: passar o mouse na miniatura troca a foto principal\n  const hoverGallery = matchMedia('(hover: hover) and (pointer: fine) and (min-width: 990px)');\n  page.addEventListener('pointerover', event => {\n    if (event.pointerType !== 'mouse' || !hoverGallery.matches) return;\n    const target = event.target.closest('[data-au-gallery]');\n    if (target && target.getAttribute('aria-pressed') !== 'true') showGallery(target);\n  });\n  page.addEventListener('click', event => {\n    const target = event.target.closest('button,a'); if (!target) return;\n    if (target.hasAttribute('data-au-kit')) { state.kit = Number(target.dataset.auKit); update(); }\n    if (target.hasAttribute('data-au-gallery')) showGallery(target);\n    if (target.hasAttribute('data-au-symptom')) {\n      const index = target.dataset.auSymptom;\n      if (state.symptoms.has(index)) state.symptoms.delete(index); else state.symptoms.add(index);\n      target.setAttribute('aria-pressed', String(state.symptoms.has(index)));\n      all('[data-au-quiz-result]').forEach(el => { el.hidden = true; });\n      all('[data-au-quiz-submit]').forEach(el => { el.disabled = !state.symptoms.size; });\n    }\n    if (target.hasAttribute('data-au-quiz-submit') && state.symptoms.size && !target.hasAttribute('aria-busy')) {\n      const text = target.querySelector('.au-quiz-btn-label') || target, label = text.textContent;\n      target.setAttribute('aria-busy', 'true'); text.textContent = 'Analizando tus respuestas\u2026';\n      setTimeout(() => {\n        symptomResult();\n        target.removeAttribute('aria-busy'); text.textContent = label;\n        const result = target.closest('[data-block=\"symptom-check\"]')?.querySelector('[data-au-quiz-result]');\n        if (!result) return;\n        result.hidden = false; result.focus({ preventScroll: true });\n        result.scrollIntoView({ behavior: media.matches ? 'auto' : 'smooth', block: 'nearest' });\n      }, 650);\n    }\n    if (target.hasAttribute('data-au-recommend')) { state.kit = Number(target.dataset.auRecommendedKit); update(); }\n    if (target.hasAttribute('data-au-accordion')) {\n      const section = target.closest('.au-section'), open = target.getAttribute('aria-expanded') !== 'true';\n      all('[data-au-accordion]', section).forEach(button => {\n        const selected = button === target && open; button.setAttribute('aria-expanded', String(selected));\n        const panel = button.parentElement.querySelector('[data-au-panel]'); if (panel) panel.hidden = !selected;\n        const icon = button.lastElementChild; if (icon) icon.style.transform = selected ? 'rotate(45deg)' : 'rotate(0deg)';\n      });\n    }\n    if (target.hasAttribute('data-au-carousel-prev') || target.hasAttribute('data-au-carousel-next')) page.querySelector('[data-au-ref=carouselRef]')?.scrollBy({ left: target.hasAttribute('data-au-carousel-next') ? 360 : -360, behavior: media.matches ? 'instant' : 'smooth' });\n    if (target.hasAttribute('data-au-purchase')) { event.preventDefault(); purchase(target); }\n  });\n  // Compra r\u00E1pida: antes de sair para o checkout, espera o Google registrar o \"adicionar ao carrinho\" (convers\u00E3o do app\n  // Google & YouTube), no m\u00E1ximo `cap` ms; o checkout da Pagou \u00E9 criado em paralelo\n  function googleAddToCartSent(since, cap = 700) {\n    return new Promise(resolve => {\n      const hit = e => e.startTime >= since && /googleadservices\\.com\\/pagead\\/conversion|\\/ccm\\/conversion/.test(e.name);\n      let observer;\n      const done = () => { observer?.disconnect(); resolve(); };\n      if (performance.getEntriesByType('resource').some(hit)) return done();\n      try {\n        observer = new PerformanceObserver(list => { if (list.getEntries().some(hit)) done(); });\n        observer.observe({ type: 'resource' });\n      } catch (error) { /* sem PerformanceObserver: vale s\u00F3 o limite */ }\n      setTimeout(done, cap);\n    });\n  }\n\n  // Abre a gaveta pedindo \u00E0 parte os trechos que a compra r\u00E1pida n\u00E3o pediu ao adicionar (\u00FAltimo recurso)\n  async function openDrawer(cart) {\n    const ids = cart.getSectionsToRender().map(s => s.id);\n    const sections = await fetch(`${window.location.pathname}?sections=${ids.join(',')}`).then(r => r.json());\n    cart.classList.remove('is-empty');\n    cart.renderContents({ sections });\n  }\n\n  // /cart/add sem sucesso (21/10): a compra n\u00E3o sai mais para a /cart (que leva ao topo do produto, sem aviso).\n  // 422 = sem estoque: n\u00E3o insiste. Demais casos (429, 5xx, falha de rede): espera ~1 s e confere o carrinho. Se o kit\n  // j\u00E1 entrou, usa esse item e nunca adiciona de novo; s\u00F3 tenta adicionar outra vez se o carrinho confirmou que ele n\u00E3o entrou.\n  async function recoverAdd(id, addUrl, addInit, response) {\n    if (response?.status === 422) return { error: 'stock' };\n    const inCart = async () => {\n      try {\n        const current = await fetch('/cart.js', { headers: { Accept: 'application/json' } })\n          .then(r => { if (!r.ok) throw new Error(String(r.status)); return r.json(); });\n        return { known: true, line: current.items.find(item => String(item.variant_id) === String(id)) || null };\n      } catch (error) { return { known: false, line: null }; }\n    };\n    await new Promise(resolve => setTimeout(resolve, 1000));\n    const before = await inCart();\n    if (before.line) return { item: before.line };\n    if (!before.known) return { error: 'generic' };\n    try {\n      const retry = await fetch(addUrl, addInit);\n      const data = await retry.json();\n      if (!data.status) return { item: data };\n      return { error: data.status === 422 ? 'stock' : 'generic' };\n    } catch (error) {\n      const after = await inCart();\n      return after.line ? { item: after.line } : { error: 'generic' };\n    }\n  }\n\n  // Aviso de erro da compra (21/10): s\u00F3 existe na p\u00E1gina quando h\u00E1 erro; flutua acima da barra fixa, sem mexer no layout\n  function showPurchaseError(kind) {\n    let el = document.querySelector('[data-au-purchase-error]');\n    if (!el) {\n      el = document.createElement('div');\n      el.setAttribute('data-au-purchase-error', '');\n      el.setAttribute('role', 'alert');\n      el.style.cssText = 'position:fixed;left:16px;right:16px;bottom:100px;z-index:2147483000;max-width:420px;margin:0 auto;'\n        + 'padding:12px 16px;border-radius:12px;background:#13150f;color:#fff;font:500 14px/1.4 Switzer,system-ui,sans-serif;'\n        + 'text-align:center;box-shadow:0 8px 24px rgba(0,0,0,.2)';\n      document.body.appendChild(el);\n    }\n    el.textContent = kind === 'stock' ? 'Este kit no est\u00E1 disponible ahora. Eleg\u00ED otra opci\u00F3n.' : 'No pudimos agregar el producto. Toc\u00E1 de nuevo.';\n    el.style.display = 'block';\n    clearTimeout(el.hideTimer);\n    el.hideTimer = setTimeout(() => { el.style.display = 'none'; }, 6000);\n  }\n\n  // Compra: adiciona a variante do kit escolhido pelo mesmo caminho do formul\u00E1rio do tema e abre a gaveta do carrinho.\n  // Com o \"pular carrinho\" da Pagou ligado, vai direto ao checkout (ver abaixo).\n  async function purchase(button) {\n    const id = page.querySelector(`[data-au-kit=\"${state.kit}\"]`)?.dataset.auVariant;\n    if (!id || button.getAttribute('aria-busy') === 'true') return;\n    document.querySelector('[data-au-purchase-error]')?.style.setProperty('display', 'none');\n    const cart = document.querySelector('cart-drawer') || document.querySelector('cart-notification');\n    const skip = window.PagouConfig?.skipCart === true;\n    // Compra r\u00E1pida: o c\u00F3digo da Pagou exp\u00F5e window.PagouFastCheckout (acesso pr\u00E9-aquecido, sem reler o carrinho).\n    // O kit vai ao carrinho sem montar a gaveta, o bot\u00E3o fica em \"carregando\" e a p\u00E1gina segue vis\u00EDvel at\u00E9 o checkout.\n    const fast = skip && typeof window.PagouFastCheckout === 'function' && !!cart?.getSectionsToRender;\n    const body = new FormData();\n    body.append('id', id); body.append('quantity', '1');\n    if (cart?.getSectionsToRender && !fast) {\n      body.append('sections', cart.getSectionsToRender().map(s => s.id));\n      body.append('sections_url', window.location.pathname);\n      cart.setActiveElement?.(document.activeElement);\n    }\n    const cartUrl = window.routes?.cart_url || '/cart';\n    // Pular carrinho sem a compra r\u00E1pida (c\u00F3digo da Pagou regravado): a Pagou leva ao checkout logo ap\u00F3s o /cart/add,\n    // com a tela de carregamento dela desde o toque. Se n\u00E3o redirecionar em 7 s, a gaveta abre (a compra nunca trava).\n    const loader = skip && !fast ? document.querySelector('.pagou-loader') : null;\n    let keepBusy = false;\n    button.setAttribute('aria-busy', 'true');\n    if (loader) loader.style.display = 'flex';\n    const since = performance.now();\n    try {\n      const addUrl = window.routes?.cart_add_url || '/cart/add';\n      const addInit = { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest', Accept: 'application/javascript' }, body };\n      let response = null, data = null;\n      try {\n        response = await fetch(addUrl, addInit);\n        data = await response.json();\n      } catch (error) { /* falha de rede ou resposta ileg\u00EDvel: tratada logo abaixo */ }\n      let recovered = false;\n      if (!data || data.status) {\n        const result = await recoverAdd(id, addUrl, addInit, response);\n        if (!result.item) { showPurchaseError(result.error); return; }\n        data = result.item; recovered = true;\n      }\n      if (!cart?.renderContents) { window.location = cartUrl; return; }\n      if (fast) {\n        keepBusy = true;\n        try {\n          // s\u00F3 o kit tocado vai ao checkout (quantidade 1), mesmo se o carrinho tinha sobra de outra visita\n          await window.PagouFastCheckout({ ...data, quantity: 1 }, googleAddToCartSent(since));\n          // a navega\u00E7\u00E3o ao checkout j\u00E1 come\u00E7ou; se n\u00E3o sair em 10 s, o bot\u00E3o volta ao normal\n          const stuck = setTimeout(() => button.removeAttribute('aria-busy'), 10000);\n          window.addEventListener('pagehide', () => clearTimeout(stuck), { once: true });\n        } catch (error) {\n          // a Pagou falhou: a gaveta abre e o bot\u00E3o dela leva ao checkout pelo caminho normal\n          button.removeAttribute('aria-busy');\n          await openDrawer(cart).catch(() => { window.location = cartUrl; });\n        }\n        return;\n      }\n      if (typeof publish === 'function' && window.PUB_SUB_EVENTS) publish(PUB_SUB_EVENTS.cartUpdate, { source: 'au-pdp', productVariantId: id, cartData: data });\n      if (skip) {\n        keepBusy = true;\n        const fallback = setTimeout(() => {\n          if (loader) loader.style.display = 'none';\n          button.removeAttribute('aria-busy');\n          // item recuperado vem sem os trechos da gaveta: ela os pede \u00E0 parte\n          if (recovered) openDrawer(cart).catch(() => {}); else { cart.classList.remove('is-empty'); cart.renderContents(data); }\n        }, 7000);\n        // saiu para o checkout: o aviso n\u00E3o pode disparar se a pessoa voltar pelo \"voltar\" (a Pagou j\u00E1 esvaziou o carrinho)\n        window.addEventListener('pagehide', () => clearTimeout(fallback), { once: true });\n        return;\n      }\n      if (recovered) { await openDrawer(cart); return; }\n      cart.classList.remove('is-empty');\n      cart.renderContents(data);\n    } catch (error) {\n      window.location = cartUrl;\n    } finally {\n      if (!keepBusy) {\n        button.removeAttribute('aria-busy');\n        if (loader) loader.style.display = 'none';\n      }\n    }\n  }\n  // voltando do checkout pelo \"voltar\" do navegador: bot\u00F5es de compra e tela de carregamento n\u00E3o podem ficar presos\n  window.addEventListener('pageshow', event => {\n    if (!event.persisted) return;\n    all('[data-au-purchase][aria-busy]').forEach(el => el.removeAttribute('aria-busy'));\n    const loader = document.querySelector('.pagou-loader');\n    if (loader) loader.style.display = 'none';\n  });\n  page.addEventListener('input', event => {\n    if (!event.target.hasAttribute('data-au-range')) return;\n    const value = Number(event.target.value), root = event.target.parentElement;\n    all('[data-au-before-after]', root).forEach(el => {\n      if (el.dataset.auBeforeAfter === 'image') el.style.clipPath = `inset(0 0 0 ${value}%)`;\n      else el.style.left = `${value}%`;\n    });\n  });\n  const onScroll = () => { if (!frame) frame = requestAnimationFrame(scroll); };\n  window.addEventListener('scroll', onScroll, { passive: true });\n  window.addEventListener('resize', onScroll, { passive: true });\n  media.addEventListener('change', () => { motion(); scroll(); });\n  // Setas das miniaturas: coluna vertical no computador, faixa horizontal no celular; cada uma s\u00F3 aparece se houver mais fotos daquele lado\n  const thumbsAxisX = strip => strip.scrollWidth - strip.clientWidth > 1;\n  const thumbsNav = strip => {\n    const box = strip.parentElement, x = thumbsAxisX(strip);\n    const pos = x ? strip.scrollLeft : strip.scrollTop, end = x ? strip.scrollWidth - strip.clientWidth : strip.scrollHeight - strip.clientHeight;\n    box.querySelector('[data-au-thumbs-nav=\"-1\"]').hidden = pos <= 1;\n    box.querySelector('[data-au-thumbs-nav=\"1\"]').hidden = pos >= end - 1;\n  };\n  // Celular: o dedo arrasta o trilho de fotos (rolagem nativa com encaixe, sem fade); ao parar, a miniatura acompanha\n  const swipe = () => all('[data-block=\"gallery\"]').forEach(gallery => {\n    const track = gallery.querySelector('[data-au-gal-track]');\n    if (!track || track.dataset.auSwipe) return;\n    track.dataset.auSwipe = '1';\n    const eager = () => all('img[loading=\"lazy\"]', track).forEach(img => img.setAttribute('loading', 'eager'));\n    track.addEventListener('pointerdown', eager, { once: true, passive: true });\n    track.addEventListener('touchstart', eager, { once: true, passive: true });\n    let timer = 0;\n    track.addEventListener('scroll', () => {\n      clearTimeout(timer);\n      timer = setTimeout(() => {\n        const index = Math.round(track.scrollLeft / (track.clientWidth || 1));\n        const thumb = gallery.querySelector(`[data-au-gallery=\"${index}\"]`);\n        if (thumb && thumb.getAttribute('aria-pressed') !== 'true') showGallery(thumb, true);\n      }, 90);\n    }, { passive: true });\n  });\n  const thumbs = () => all('[data-au-thumbs]').forEach(strip => {\n    if (!strip.dataset.auThumbsBound) {\n      strip.dataset.auThumbsBound = '1';\n      strip.addEventListener('scroll', () => thumbsNav(strip), { passive: true });\n      new ResizeObserver(() => thumbsNav(strip)).observe(strip);\n    }\n    thumbsNav(strip);\n  });\n  page.addEventListener('click', event => {\n    const nav = event.target.closest('[data-au-thumbs-nav]'); if (!nav) return;\n    // Cada toque na seta anda no m\u00E1ximo 2 miniaturas\n    const strip = nav.parentElement.querySelector('[data-au-thumbs]'), dir = Number(nav.dataset.auThumbsNav), behavior = media.matches ? 'auto' : 'smooth';\n    const x = thumbsAxisX(strip), item = strip.querySelector('[data-au-gallery]')?.getBoundingClientRect(), css = getComputedStyle(strip);\n    const unit = item ? (x ? item.width : item.height) + (parseFloat(x ? css.columnGap : css.rowGap) || 0) : 0;\n    const pos = x ? strip.scrollLeft : strip.scrollTop, end = x ? strip.scrollWidth - strip.clientWidth : strip.scrollHeight - strip.clientHeight;\n    // destino no come\u00E7o de uma miniatura (posi\u00E7\u00E3o de encaixe), a no m\u00E1ximo 2 miniaturas da posi\u00E7\u00E3o atual\n    const at = unit ? pos / unit : 0;\n    const to = unit ? Math.min(end, Math.max(0, (dir > 0 ? Math.floor(at + 0.01) + 2 : Math.ceil(at - 0.01) - 2) * unit)) : pos + dir * (x ? strip.clientWidth : strip.clientHeight) * 0.5;\n    strip.scrollTo(x ? { left: to, behavior } : { top: to, behavior });\n  });\n  const steps = () => all('.au-s355:not([data-au-steps])').forEach(el => {\n    el.dataset.auSteps = '1';\n    if (media.matches || !('IntersectionObserver' in window)) { el.classList.add('is-on'); return; }\n    const watch = new IntersectionObserver(entries => entries.forEach(entry => {\n      if (entry.isIntersecting) { el.classList.add('is-on'); watch.disconnect(); }\n    }), { threshold: .35 });\n    watch.observe(el);\n  });\n  // Opiniones: carrossel de fotos, filtros, \"\u00DAtil\", copiar link e janela de fotos\n  const opinions = () => all('[data-au-opinions]:not([data-au-ready])').forEach(root => {\n    root.dataset.auReady = '1';\n    const list = root.querySelector('[data-au-rv-list]'), empty = root.querySelector('[data-au-rv-empty]'), more = root.querySelector('[data-au-rv-more]');\n    const items = all('[data-au-rv-item]', root), initial = Number(root.dataset.initial) || 4;\n    const view = { sort: 'helpful', filter: 0, all: false };\n    const store = rv => `au-rv-util-${root.closest('.shopify-section')?.id || 'op'}-${rv}`;\n    const itemOf = rv => items.find(item => item.dataset.rv === String(rv));\n    const setUtil = (item, on, save = true) => {\n      const button = item.querySelector('[data-au-rv-util]'), count = item.querySelector('[data-au-rv-util-count]');\n      button.setAttribute('aria-pressed', String(on));\n      count.textContent = Number(item.dataset.helpful) + (on ? 1 : 0);\n      if (save) { try { localStorage.setItem(store(item.dataset.rv), on ? '1' : '0'); } catch (e) {} }\n    };\n    items.forEach(item => { try { if (localStorage.getItem(store(item.dataset.rv)) === '1') setUtil(item, true, false); } catch (e) {} });\n    const render = () => {\n      const shown = items.filter(item => !view.filter || Number(item.dataset.rating) === view.filter)\n        .sort((a, b) => view.sort === 'helpful' ? Number(b.dataset.helpful) - Number(a.dataset.helpful) : Number(a.dataset.rv) - Number(b.dataset.rv));\n      items.forEach(item => { item.hidden = true; });\n      shown.forEach((item, i) => { list.insertBefore(item, empty); item.hidden = !view.all && i >= initial; });\n      empty.hidden = shown.length > 0;\n      more.hidden = view.all || shown.length <= initial;\n    };\n    const shots = root.querySelector('[data-au-rv-shots]');\n    const shotsNav = () => {\n      if (!shots) return;\n      root.querySelector('.au-rv-shots-wrap > [data-au-rv-nav=\"-1\"]').hidden = shots.scrollLeft < 4;\n      root.querySelector('.au-rv-shots-wrap > [data-au-rv-nav=\"1\"]').hidden = shots.scrollLeft + shots.clientWidth >= shots.scrollWidth - 4;\n    };\n    shots?.addEventListener('scroll', shotsNav, { passive: true });\n    const closeMenus = except => all('[data-au-rv-menu]', root).forEach(button => {\n      if (button === except) return;\n      button.setAttribute('aria-expanded', 'false'); button.nextElementSibling.hidden = true;\n    });\n    const modal = root.querySelector('[data-au-rv-modal]'), modalImg = modal.querySelector('[data-au-rv-modal-img]');\n    const strip = modal.querySelector('[data-au-rv-modal-strip]'), side = modal.querySelector('[data-au-rv-modal-side]');\n    let photos = [], current = 0;\n    const show = i => {\n      current = (i + photos.length) % photos.length;\n      const photo = photos[current], item = itemOf(photo.rv);\n      if (modalImg.getAttribute('src') !== photo.full) {\n        modalImg.style.opacity = '.35';\n        modalImg.onload = modalImg.onerror = () => { modalImg.style.opacity = '1'; };\n        modalImg.src = photo.full;\n        if (modalImg.complete) modalImg.style.opacity = '1';\n      }\n      [current + 1, current - 1].forEach(j => { new Image().src = photos[(j + photos.length) % photos.length].full; });\n      modal.querySelector('[data-au-rv-modal-count]').textContent = `${current + 1} / ${photos.length}`;\n      all('button', strip).forEach((b, j) => b.setAttribute('aria-current', String(j === current)));\n      strip.children[current]?.scrollIntoView({ block: 'nearest', inline: 'center' });\n      const util = item.querySelector('[data-au-rv-util]');\n      side.innerHTML = item.querySelector('.au-rv-stars').outerHTML\n        + `<p class=\"au-rv-text\"></p><span class=\"au-rv-date\"></span>`\n        + `<button type=\"button\" class=\"au-rv-util\" data-au-rv-util-proxy=\"${photo.rv}\" aria-pressed=\"${util.getAttribute('aria-pressed')}\">${util.innerHTML}</button>`;\n      side.querySelector('.au-rv-text').textContent = item.querySelector('.au-rv-text').textContent;\n      side.querySelector('.au-rv-date').textContent = item.querySelector('.au-rv-date').textContent;\n    };\n    const open = (rv, ph) => {\n      photos = all('[data-au-rv-photo]', root).map(b => ({ rv: b.dataset.rv, ph: b.dataset.ph, full: b.dataset.full, thumb: b.querySelector('img').src }))\n        .sort((a, b) => a.rv - b.rv || a.ph - b.ph);\n      if (!photos.length) return;\n      strip.innerHTML = photos.map((p, j) => `<button type=\"button\" data-au-rv-go=\"${j}\" aria-label=\"Foto ${j + 1}\"><img src=\"${p.thumb}\" alt=\"\" width=\"56\" height=\"56\" loading=\"lazy\"></button>`).join('');\n      document.documentElement.style.overflow = 'hidden';\n      modal.showModal();\n      show(Math.max(0, photos.findIndex(p => p.rv === String(rv) && p.ph === String(ph))));\n    };\n    modal.addEventListener('close', () => { document.documentElement.style.overflow = ''; });\n    const stage = modal.querySelector('.au-rv-modal-stage');\n    let swipeX = null, swipeY = 0;\n    stage.addEventListener('pointerdown', event => { if (event.pointerType !== 'mouse') { swipeX = event.clientX; swipeY = event.clientY; } });\n    stage.addEventListener('pointerup', event => {\n      if (swipeX === null) return;\n      const dx = event.clientX - swipeX, dy = event.clientY - swipeY; swipeX = null;\n      if (Math.abs(dx) > 40 && Math.abs(dx) > Math.abs(dy)) show(current + (dx < 0 ? 1 : -1));\n    });\n    stage.addEventListener('pointercancel', () => { swipeX = null; });\n    modal.addEventListener('keydown', event => {\n      if (event.key === 'ArrowLeft') show(current - 1);\n      if (event.key === 'ArrowRight') show(current + 1);\n    });\n    root.addEventListener('click', event => {\n      if (event.target === modal) { modal.close(); return; }\n      const target = event.target.closest('button'); if (!target || !root.contains(target)) { closeMenus(); return; }\n      if (target.hasAttribute('data-au-rv-menu')) {\n        const opened = target.getAttribute('aria-expanded') !== 'true';\n        closeMenus(target); target.setAttribute('aria-expanded', String(opened)); target.nextElementSibling.hidden = !opened; return;\n      }\n      if (target.hasAttribute('data-au-rv-sort') || target.hasAttribute('data-au-rv-filter')) {\n        all('[role=\"menuitemradio\"]', target.parentElement).forEach(b => b.setAttribute('aria-checked', String(b === target)));\n        if (target.dataset.auRvSort) view.sort = target.dataset.auRvSort; else view.filter = Number(target.dataset.auRvFilter);\n        view.all = false; closeMenus(); render(); return;\n      }\n      if (target.hasAttribute('data-au-rv-copy')) {\n        const item = target.closest('[data-au-rv-item]'), url = location.origin + location.pathname + '#' + item.id, label = target.textContent;\n        const done = () => { target.textContent = 'Enlace copiado'; setTimeout(() => { target.textContent = label; closeMenus(); }, 1400); };\n        navigator.clipboard?.writeText(url).then(done, done) ?? done();\n        return;\n      }\n      closeMenus();\n      if (target.hasAttribute('data-au-rv-more')) { view.all = true; render(); }\n      if (target.hasAttribute('data-au-rv-util')) { const item = target.closest('[data-au-rv-item]'); setUtil(item, target.getAttribute('aria-pressed') !== 'true'); }\n      if (target.hasAttribute('data-au-rv-util-proxy')) {\n        const item = itemOf(target.dataset.auRvUtilProxy), on = target.getAttribute('aria-pressed') !== 'true';\n        setUtil(item, on); target.setAttribute('aria-pressed', String(on)); target.querySelector('[data-au-rv-util-count]').textContent = item.querySelector('[data-au-rv-util-count]').textContent;\n      }\n      if (target.hasAttribute('data-au-rv-nav')) shots.scrollBy({ left: Number(target.dataset.auRvNav) * shots.clientWidth * .8, behavior: media.matches ? 'auto' : 'smooth' });\n      if (target.hasAttribute('data-au-rv-open')) open(target.dataset.rv, target.dataset.ph);\n      if (target.hasAttribute('data-au-rv-step')) show(current + Number(target.dataset.auRvStep));\n      if (target.hasAttribute('data-au-rv-go')) show(Number(target.dataset.auRvGo));\n      if (target.hasAttribute('data-au-rv-close')) modal.close();\n      if (target.hasAttribute('data-au-purchase') && modal.open) modal.close();\n    });\n    document.addEventListener('click', event => { if (!root.contains(event.target)) closeMenus(); });\n    root.addEventListener('keydown', event => { if (event.key === 'Escape') closeMenus(); });\n    render(); shotsNav();\n  });\n  // Anima\u00E7\u00F5es sem fim (brilhos, faixas que deslizam, pulsos) s\u00F3 rodam com a se\u00E7\u00E3o perto da tela: longe dela, data-au-idle\n  // pausa tudo (au-base.css). A barra flutuante fica fora do <main> e n\u00E3o entra aqui\n  let idler;\n  function idle() {\n    idler?.disconnect();\n    if (!('IntersectionObserver' in window)) return;\n    idler = new IntersectionObserver(entries => entries.forEach(entry => entry.target.toggleAttribute('data-au-idle', !entry.isIntersecting)), { rootMargin: '300px 0px' });\n    all('[data-au-main] > .shopify-section, .au-page-bars').forEach(el => idler.observe(el));\n  }\n  thumbs(); swipe(); steps(); opinions();\n  document.addEventListener('shopify:section:load', () => { update(); motion(); scroll(); symptomResult(); thumbs(); swipe(); steps(); opinions(); idle(); });\n  document.addEventListener('shopify:section:unload', () => { observer?.disconnect(); });\n  const timer = setInterval(update, 1000);\n  // P\u00E1gina guardada na mem\u00F3ria do navegador (voltar do checkout): nada \u00E9 desligado, sen\u00E3o os blocos ainda n\u00E3o revelados\n  // ficavam invis\u00EDveis, o contador parava e a barra flutuante travava. Na volta, tudo se atualiza\n  window.addEventListener('pagehide', event => { if (event.persisted) return; clearInterval(timer); observer?.disconnect(); cancelAnimationFrame(frame); });\n  window.addEventListener('pageshow', event => { if (event.persisted) { frame = 0; update(); scroll(); } });\n  update(); motion(); scroll(); idle();\n})();\n"],
  "mappings": "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",
  "names": ["observer", "timer"]
}
