{
  "version": 3,
  "sources": ["/cdn/shop/t/161/assets/storefront-sfx.js?bk=storefront-sfx-v1"],
  "sourcesContent": ["/**\n * Storefront one-shot SFX bus \u2014 shared AudioContext, named buffers, master mute.\n * register(id, url, { volume }) / play(id, { volume }) / unlock / setMuted / isMuted / has.\n * Skips prefers-reduced-motion. Auto-registers from documentElement:\n *   data-sfx-card-lock-src, data-sfx-home-social-hover-src, data-sfx-footer-link-click-src\n * Volumes: card-lock 0.35, home-social-hover 0.288, footer-link-click 0.35.\n */\n(function (global) {\n  'use strict';\n\n  var DEFAULT_VOLUMES = {\n    'card-lock': 0.35,\n    'home-social-hover': 0.288,\n    'footer-link-click': 0.35,\n  };\n\n  var ATTR_MAP = {\n    'data-sfx-card-lock-src': { id: 'card-lock', volume: 0.35 },\n    'data-sfx-home-social-hover-src': { id: 'home-social-hover', volume: 0.288 },\n    'data-sfx-footer-link-click-src': { id: 'footer-link-click', volume: 0.35 },\n  };\n\n  var sfxCtx = null;\n  var masterGain = null;\n  var muted = false;\n  var unlockBound = false;\n  var entries = Object.create(null);\n  var bootstrapped = false;\n\n  function reducedMotion() {\n    try {\n      return global.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    } catch (err) {\n      return false;\n    }\n  }\n\n  function ensureAudioCtx() {\n    if (sfxCtx) return sfxCtx;\n    var AC = global.AudioContext || global.webkitAudioContext;\n    if (!AC) return null;\n    sfxCtx = new AC();\n    masterGain = sfxCtx.createGain();\n    masterGain.gain.value = muted ? 0 : 1;\n    masterGain.connect(sfxCtx.destination);\n    return sfxCtx;\n  }\n\n  function whenCtxRunning(cb) {\n    var ctx = ensureAudioCtx();\n    if (!ctx || typeof cb !== 'function') return;\n    if (ctx.state === 'running') {\n      cb(ctx);\n      return;\n    }\n    if (ctx.state !== 'suspended') return;\n    var resumeResult;\n    try {\n      resumeResult = ctx.resume();\n    } catch (e) {\n      return;\n    }\n    if (resumeResult && typeof resumeResult.then === 'function') {\n      resumeResult\n        .then(function () {\n          if (ctx.state === 'running') cb(ctx);\n        })\n        .catch(function () {\n          /* ignore */\n        });\n      return;\n    }\n    if (ctx.state === 'running') cb(ctx);\n  }\n\n  function unlock() {\n    whenCtxRunning(function () {\n      /* resume only */\n    });\n  }\n\n  function bindUnlock() {\n    if (unlockBound) return;\n    unlockBound = true;\n    function earlyUnlock() {\n      unlock();\n    }\n    document.addEventListener('pointerdown', earlyUnlock, true);\n    document.addEventListener('touchstart', earlyUnlock, true);\n    document.addEventListener('keydown', earlyUnlock, true);\n  }\n\n  function loadEntry(entry) {\n    if (!entry || !entry.url) return Promise.resolve(null);\n    if (entry.buffer) return Promise.resolve(entry.buffer);\n    if (entry.loadPromise) return entry.loadPromise;\n    var ctx = ensureAudioCtx();\n    if (!ctx) return Promise.resolve(null);\n    entry.loadPromise = fetch(entry.url)\n      .then(function (response) {\n        if (!response.ok) throw new Error('storefront sfx fetch failed');\n        return response.arrayBuffer();\n      })\n      .then(function (ab) {\n        return ctx.decodeAudioData(ab.slice(0));\n      })\n      .then(function (buffer) {\n        entry.buffer = buffer;\n        return buffer;\n      })\n      .catch(function () {\n        entry.loadPromise = null;\n        return null;\n      });\n    return entry.loadPromise;\n  }\n\n  function register(id, url, options) {\n    if (!id || !url) return null;\n    var opts = options || {};\n    var existing = entries[id];\n    if (existing && existing.url === url && existing.buffer) {\n      if (typeof opts.volume === 'number') existing.volume = opts.volume;\n      return existing;\n    }\n    var entry = {\n      id: id,\n      url: url,\n      volume:\n        typeof opts.volume === 'number'\n          ? opts.volume\n          : DEFAULT_VOLUMES[id] != null\n            ? DEFAULT_VOLUMES[id]\n            : 1,\n      buffer: null,\n      loadPromise: null,\n    };\n    entries[id] = entry;\n    bindUnlock();\n    loadEntry(entry);\n    return entry;\n  }\n\n  function has(id) {\n    return !!(entries[id] && (entries[id].buffer || entries[id].url));\n  }\n\n  function play(id, options) {\n    if (!id || reducedMotion() || muted) return;\n    var entry = entries[id];\n    if (!entry) return;\n    var opts = options || {};\n    var vol =\n      typeof opts.volume === 'number' ? opts.volume : entry.volume;\n\n    function start() {\n      if (!entry.buffer || !masterGain) return;\n      whenCtxRunning(function (ctx) {\n        try {\n          var source = ctx.createBufferSource();\n          var gain = ctx.createGain();\n          gain.gain.value = vol;\n          source.buffer = entry.buffer;\n          source.connect(gain);\n          gain.connect(masterGain);\n          source.start(0);\n        } catch (e) {\n          /* ignore */\n        }\n      });\n    }\n\n    if (entry.buffer) {\n      start();\n      return;\n    }\n    loadEntry(entry).then(function (buffer) {\n      if (buffer) start();\n    });\n  }\n\n  function isMuted() {\n    return muted;\n  }\n\n  function setMuted(next) {\n    muted = !!next;\n    if (masterGain) {\n      try {\n        masterGain.gain.value = muted ? 0 : 1;\n      } catch (e) {\n        /* ignore */\n      }\n    }\n  }\n\n  function bootstrapFromDocument() {\n    bindUnlock();\n    var root = document.documentElement;\n    if (!(root instanceof Element)) return;\n    Object.keys(ATTR_MAP).forEach(function (attr) {\n      var src = root.getAttribute(attr) || '';\n      if (!src) return;\n      var meta = ATTR_MAP[attr];\n      register(meta.id, src, { volume: meta.volume });\n    });\n    bootstrapped = true;\n  }\n\n  global.StorefrontSfx = {\n    register: register,\n    play: play,\n    unlock: unlock,\n    setMuted: setMuted,\n    isMuted: isMuted,\n    has: has,\n  };\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', bootstrapFromDocument);\n  } else {\n    bootstrapFromDocument();\n  }\n})(typeof window !== 'undefined' ? window : this);\n"],
  "mappings": "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",
  "names": []
}
