{
  "version": 3,
  "sources": ["/cdn/shop/t/14/assets/pp-destination-globe.js?ppdg=20260709-1522"],
  "sourcesContent": ["(function () {\n  const SECTION_SELECTOR = '[data-pp-destination-globe]';\n  const SCRIPT_URLS = {\n    globe: 'https://unpkg.com/globe.gl'\n  };\n  const DEFAULT_GLOBE_IMAGE = 'https://unpkg.com/three-globe/example/img/earth-blue-marble.jpg';\n  const DEFAULT_BUMP_IMAGE = 'https://unpkg.com/three-globe/example/img/earth-topology.png';\n  const INITIAL_ALTITUDE = 2.4;\n  const CLUSTER_ALTITUDE = 1.4;\n  const CITY_ALTITUDE = 0.8;\n  const AUTO_ROTATE_IDLE_MS = 10000;\n  const MARKER_SURFACE_ALTITUDE = 0;\n  const ACTIVE_HTML_MARKER_MIN_SIZE = 14;\n  const DESTINATION_HEX_ALTITUDE_OFFSET = 0.00018;\n  const ACTIVE_HIGHLIGHT_ALTITUDE_BUFFER = 0.00008;\n  const DESTINATION_DOT_RADIUS_MIN = 0.42;\n  const DESTINATION_DOT_ALTITUDE_MULTIPLIER = 1.5;\n  const STAGE_TAP_MAX_DISTANCE_PX = 18;\n  const HYDRATION_REVEAL_MS = 320;\n  const HYDRATION_REVEAL_STEPS = 4;\n  const TIER_THRESHOLDS = {\n    continent: 2.2,\n    country: 1.55,\n    region: 1.0\n  };\n  const LAND_CACHE = {\n    promise: null\n  };\n  const SCRIPT_CACHE = new Map();\n  const FILTER_CACHE = new Map();\n\n  function isCaptureMode() {\n    try {\n      const params = new URLSearchParams(window.location.search || '');\n      return params.get('capture') === '1';\n    } catch (error) {\n      return false;\n    }\n  }\n\n  function trackAnalyticsEvent(name, payload) {\n    try {\n      if (typeof window.gtag === 'function') {\n        window.gtag('event', name, payload || {});\n      } else if (window.dataLayer && typeof window.dataLayer.push === 'function') {\n        window.dataLayer.push(Object.assign({ event: name }, payload || {}));\n      }\n    } catch (error) {\n      console.error('PP destination globe analytics failed', error);\n    }\n  }\n\n  function loadScript(src) {\n    if (SCRIPT_CACHE.has(src)) {\n      return SCRIPT_CACHE.get(src);\n    }\n\n    const existing = document.querySelector(`script[data-pp-external-script=\"${src}\"]`);\n    if (existing) {\n      const promise = new Promise((resolve, reject) => {\n        if (existing.dataset.loaded === 'true') {\n          resolve();\n          return;\n        }\n\n        existing.addEventListener('load', resolve, { once: true });\n        existing.addEventListener('error', () => reject(new Error(`Failed to load ${src}`)), { once: true });\n      });\n\n      SCRIPT_CACHE.set(src, promise);\n      return promise;\n    }\n\n    const script = document.createElement('script');\n    const promise = new Promise((resolve, reject) => {\n      script.addEventListener('load', () => {\n        script.dataset.loaded = 'true';\n        resolve();\n      }, { once: true });\n      script.addEventListener('error', () => reject(new Error(`Failed to load ${src}`)), { once: true });\n    });\n\n    script.src = src;\n    script.async = true;\n    script.dataset.ppExternalScript = src;\n    document.head.appendChild(script);\n    SCRIPT_CACHE.set(src, promise);\n\n    return promise;\n  }\n\n  async function ensureDependencies() {\n    if (!window.Globe) {\n      await loadScript(SCRIPT_URLS.globe);\n    }\n  }\n\n  async function fetchLandPolygons(landUrl) {\n    if (!landUrl) {\n      return [];\n    }\n\n    if (LAND_CACHE.promise && LAND_CACHE.url === landUrl) {\n      return LAND_CACHE.promise;\n    }\n\n    LAND_CACHE.url = landUrl;\n    LAND_CACHE.promise = fetch(landUrl)\n      .then((response) => {\n        if (!response.ok) {\n          throw new Error(`Failed to fetch land polygons: ${response.status}`);\n        }\n\n        return response.json();\n      })\n      .then((geojson) => {\n        return Array.isArray(geojson && geojson.features) ? geojson.features : [];\n      });\n\n    return LAND_CACHE.promise;\n  }\n\n  function createSolidTexture(color) {\n    const canvas = document.createElement('canvas');\n    const width = 8;\n    const height = 4;\n    const ctx = canvas.getContext('2d');\n\n    canvas.width = width;\n    canvas.height = height;\n\n    ctx.fillStyle = color;\n    ctx.fillRect(0, 0, width, height);\n\n    return canvas.toDataURL('image/png');\n  }\n\n  function normalizeLabel(value) {\n    return String(value || '').trim().toLowerCase();\n  }\n\n  function normalizeHandle(value) {\n    return normalizeLabel(value)\n      .replace(/&/g, ' and ')\n      .replace(/[^a-z0-9]+/g, ' ')\n      .trim();\n  }\n\n  function escapeHtml(value) {\n    return String(value ?? '')\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;')\n      .replace(/'/g, '&#39;');\n  }\n\n  function formatTierLabel(strings, tier) {\n    const normalizedTier = String(tier || '').trim().toLowerCase();\n    if (!normalizedTier) {\n      return '';\n    }\n\n    if (strings) {\n      if (normalizedTier === 'continent' && strings.continentTierLabel) {\n        return strings.continentTierLabel;\n      }\n      if (normalizedTier === 'country' && strings.countryTierLabel) {\n        return strings.countryTierLabel;\n      }\n      if (normalizedTier === 'region' && strings.regionTierLabel) {\n        return strings.regionTierLabel;\n      }\n      if (normalizedTier === 'city' && strings.cityTierLabel) {\n        return strings.cityTierLabel;\n      }\n    }\n\n    return normalizedTier.charAt(0).toUpperCase() + normalizedTier.slice(1);\n  }\n\n  function formatPluralString(one, other, count) {\n    const template = Number(count) === 1 ? one : other;\n    return String(template || '')\n      .replace('{{ count }}', String(count));\n  }\n\n  function getClusterStatusText(strings, tier, count) {\n    const fallbackTemplate = strings.clusterStatus || '{{ tier }} \u00B7 {{ count }} destinations';\n    const singularTemplate = strings.clusterStatusOne || fallbackTemplate;\n    const pluralTemplate = strings.clusterStatusOther || fallbackTemplate;\n\n    return formatPluralString(singularTemplate, pluralTemplate, count)\n      .replace('{{ tier }}', formatTierLabel(strings, tier));\n  }\n\n  function getCitiesAvailableText(strings, count) {\n    const fallbackTemplate = strings.citiesAvailable || '{{ count }} cities available here.';\n    const singularTemplate = strings.citiesAvailableOne || fallbackTemplate;\n    const pluralTemplate = strings.citiesAvailableOther || fallbackTemplate;\n\n    return formatPluralString(singularTemplate, pluralTemplate, count);\n  }\n\n  function getNearbyPreviewBody(strings, count) {\n    const fallbackTemplate = strings.nearbyBody || 'Showing products from {{ count }} nearby cities in this view.';\n    const singularTemplate = strings.nearbyBodyOne || fallbackTemplate;\n    const pluralTemplate = strings.nearbyBodyOther || fallbackTemplate;\n\n    return formatPluralString(singularTemplate, pluralTemplate, count);\n  }\n\n  function parseData(section) {\n    const script = section.querySelector('[data-pp-destination-globe-data]');\n    if (!script) {\n      return null;\n    }\n\n    try {\n      return JSON.parse(script.textContent);\n    } catch (error) {\n      console.error('PP destination globe: invalid section data', error);\n      return null;\n    }\n  }\n\n  function renderLoadingState(section, strings) {\n    const status = section.querySelector('[data-pp-destination-globe-status]');\n    const title = section.querySelector('[data-pp-destination-globe-panel-title]');\n    const body = section.querySelector('[data-pp-destination-globe-panel-body]');\n    const products = section.querySelector('[data-pp-destination-globe-products]');\n    const actions = section.querySelector('[data-pp-destination-globe-actions]');\n\n    if (status) {\n      status.textContent = strings.loadingLabel;\n    }\n\n    if (title) {\n      title.textContent = strings.defaultPanelTitle;\n    }\n\n    if (body) {\n      body.textContent = strings.loadingBody;\n    }\n\n    if (products) {\n      products.innerHTML = renderPanelProductSkeletons(3);\n    }\n\n    if (actions) {\n      actions.hidden = true;\n    }\n\n  }\n\n  function renderAction(section, href, label) {\n    const actions = section.querySelector('[data-pp-destination-globe-actions]');\n    const link = section.querySelector('[data-pp-destination-globe-action-link]');\n\n    if (!actions || !link || !href || !label) {\n      if (actions) {\n        actions.hidden = true;\n      }\n      return;\n    }\n\n    link.href = href;\n    link.textContent = label;\n    actions.hidden = false;\n  }\n\n  function renderNoDestinationsState(section, data) {\n    const strings = data.strings;\n    const status = section.querySelector('[data-pp-destination-globe-status]');\n    const title = section.querySelector('[data-pp-destination-globe-panel-title]');\n    const body = section.querySelector('[data-pp-destination-globe-panel-body]');\n    const products = section.querySelector('[data-pp-destination-globe-products]');\n\n    if (status) {\n      status.textContent = strings.readyLabel;\n    }\n\n    if (title) {\n      title.textContent = strings.noDestinationsTitle;\n    }\n\n    if (body) {\n      body.textContent = strings.noDestinationsBody;\n    }\n\n    if (products) {\n      products.innerHTML = '';\n    }\n\n    renderAction(\n      section,\n      data.sourceCollectionUrl,\n      strings.browseCollection.replace('{{ collection }}', data.sourceCollectionTitle || data.sourceCollectionHandle || '')\n    );\n    window.requestAnimationFrame(() => syncPanelScrollState(section));\n  }\n\n  async function fetchDestinationBatch(endpoint, page) {\n    const separator = endpoint.includes('?') ? '&' : '?';\n    const response = await fetch(`${endpoint}${separator}page=${page}`, {\n      credentials: 'same-origin'\n    });\n\n    if (!response.ok) {\n      throw new Error(`Failed to fetch destination batch ${page}: ${response.status}`);\n    }\n\n    return response.json();\n  }\n\n  async function streamDestinationBatches(endpoint, onBatch) {\n    let page = 1;\n\n    while (page) {\n      const payload = await fetchDestinationBatch(endpoint, page);\n      const destinations = Array.isArray(payload.destinations) ? payload.destinations : [];\n\n      if (typeof onBatch === 'function') {\n        onBatch(destinations, {\n          page,\n          nextPage: payload.nextPage || null\n        });\n      }\n\n      page = payload.nextPage || null;\n    }\n  }\n\n  function getFilterGroupLabel(input) {\n    const group = input.closest('.filter-group');\n    const heading = group ? group.querySelector('.filter-group__heading__text') : null;\n    return heading ? heading.textContent.trim() : '';\n  }\n\n  function buildCollectionFilterUrl(collectionPath, name, value, labelText, groupLabel, tier) {\n    const params = new URLSearchParams();\n    params.set(name, value);\n    params.set('collection_label', labelText);\n    if (groupLabel) {\n      params.set('collection_filter_group', groupLabel);\n    }\n    if (tier) {\n      params.set('collection_filter_tier', tier);\n    }\n    return `${collectionPath}${collectionPath.includes('?') ? '&' : '?'}${params.toString()}`;\n  }\n\n  async function fetchCollectionFilterItems(collectionUrl) {\n    const collectionUrlObj = new URL(collectionUrl, window.location.origin);\n    const collectionPath = collectionUrlObj.pathname + collectionUrlObj.search;\n    if (FILTER_CACHE.has(collectionPath)) {\n      return FILTER_CACHE.get(collectionPath);\n    }\n\n    const requestUrl = `${collectionPath}${collectionPath.includes('?') ? '&' : '?'}sections=main-collection`;\n    const promise = fetch(requestUrl, { credentials: 'same-origin' })\n      .then((response) => response.json())\n      .then((data) => {\n        const sectionHtml = data && data['main-collection'] ? data['main-collection'] : '';\n        if (!sectionHtml) {\n          return [];\n        }\n\n        const parser = new DOMParser();\n        const doc = parser.parseFromString(sectionHtml, 'text/html');\n        const inputs = doc.querySelectorAll('label.filter-group__item input');\n        const items = [];\n        const seen = new Set();\n\n        inputs.forEach((input) => {\n          if (input.disabled) {\n            return;\n          }\n\n          const name = input.getAttribute('name');\n          const value = input.value;\n          if (!name || !value) {\n            return;\n          }\n\n          const label = input.closest('label');\n          const textEl = label ? label.querySelector('.filter-group__item__text') : null;\n          const labelText = textEl ? textEl.textContent.trim() : value;\n          const groupLabel = getFilterGroupLabel(input);\n          const key = `${name}::${value}`;\n          if (seen.has(key)) {\n            return;\n          }\n          seen.add(key);\n\n          items.push({\n            label: labelText,\n            labelKey: normalizeHandle(labelText),\n            groupLabel,\n            groupKey: normalizeHandle(groupLabel),\n            name,\n            nameKey: normalizeHandle(name),\n            value,\n            url: buildCollectionFilterUrl(collectionPath, name, value, labelText, groupLabel, '')\n          });\n        });\n\n        return items;\n      })\n      .catch(() => []);\n\n    FILTER_CACHE.set(collectionPath, promise);\n    return promise;\n  }\n\n  function getTierMatchTerms(tier) {\n    if (tier === 'continent') {\n      return ['continent'];\n    }\n\n    if (tier === 'country') {\n      return ['country', 'nation'];\n    }\n\n    if (tier === 'region') {\n      return ['region', 'state', 'province', 'county', 'area'];\n    }\n\n    if (tier === 'city') {\n      return ['city', 'destination', 'place', 'location', 'town'];\n    }\n\n    return [];\n  }\n\n  function itemMatchesTier(item, tier) {\n    const tierTerms = getTierMatchTerms(tier);\n    if (!tierTerms.length) {\n      return true;\n    }\n\n    return tierTerms.some((term) => item.groupKey.includes(term) || item.nameKey.includes(term));\n  }\n\n  function scoreCollectionFilterItem(item, label, tier) {\n    const normalizedLabel = normalizeHandle(label);\n    let score = 0;\n\n    if (item.labelKey === normalizedLabel) {\n      score += 100;\n    }\n\n    if (item.value && normalizeHandle(item.value) === normalizedLabel) {\n      score += 90;\n    }\n\n    if (score === 0) {\n      return 0;\n    }\n\n    if (itemMatchesTier(item, tier)) {\n      score += 25;\n    }\n\n    if (item.nameKey.includes('custom tags')) {\n      score += 5;\n    }\n\n    return score;\n  }\n\n  function getOverflowFilterTier(tier, cluster) {\n    if (tier === 'continent') {\n      return 'country';\n    }\n\n    if (tier === 'country') {\n      const hasRegions = Array.isArray(cluster && cluster.items)\n        && cluster.items.some((item) => item.region && normalizeHandle(item.region) !== normalizeHandle(item.country));\n      return hasRegions ? 'region' : 'city';\n    }\n\n    if (tier === 'region') {\n      return 'city';\n    }\n\n    return 'city';\n  }\n\n  function getClusterFilterLabels(cluster, targetTier) {\n    if (!cluster || !Array.isArray(cluster.items)) {\n      return [];\n    }\n\n    const seen = new Set();\n    const labels = [];\n\n    cluster.items.forEach((item) => {\n      const value = item && item[targetTier] ? String(item[targetTier]).trim() : '';\n      const key = normalizeHandle(value);\n      if (!key || seen.has(key)) {\n        return;\n      }\n\n      seen.add(key);\n      labels.push(value);\n    });\n\n    return labels;\n  }\n\n  function buildCollectionMultiFilterUrl(collectionUrl, filterItems, panelLabel, tier) {\n    if (!collectionUrl || !Array.isArray(filterItems) || !filterItems.length) {\n      return collectionUrl || '#';\n    }\n\n    const collectionUrlObj = new URL(collectionUrl, window.location.origin);\n    const collectionPath = collectionUrlObj.pathname + collectionUrlObj.search;\n    const params = new URLSearchParams();\n\n    filterItems.forEach((item) => {\n      params.append(item.name, item.value);\n    });\n\n    params.set('collection_label', panelLabel || filterItems[0].label || '');\n    if (filterItems[0].groupLabel) {\n      params.set('collection_filter_group', filterItems[0].groupLabel);\n    }\n    if (tier) {\n      params.set('collection_filter_tier', tier);\n    }\n\n    return `${collectionPath}${collectionPath.includes('?') ? '&' : '?'}${params.toString()}`;\n  }\n\n  function resolveClusterFilterItems(items, cluster, tier) {\n    if (!Array.isArray(items) || !items.length || !cluster) {\n      return [];\n    }\n\n    const targetTier = getOverflowFilterTier(tier, cluster);\n    const desiredLabels = getClusterFilterLabels(cluster, targetTier);\n    if (!desiredLabels.length) {\n      return [];\n    }\n\n    const desiredKeys = new Set(desiredLabels.map((value) => normalizeHandle(value)));\n    const matches = items.filter((item) => {\n      if (!desiredKeys.has(item.labelKey) && (!item.value || !desiredKeys.has(normalizeHandle(item.value)))) {\n        return false;\n      }\n\n      return itemMatchesTier(item, targetTier);\n    });\n\n    if (!matches.length) {\n      return [];\n    }\n\n    const grouped = new Map();\n    matches.forEach((item) => {\n      const groupKey = `${item.name}::${item.groupKey}`;\n      const existing = grouped.get(groupKey) || [];\n      existing.push(item);\n      grouped.set(groupKey, existing);\n    });\n\n    return Array.from(grouped.values())\n      .sort((left, right) => right.length - left.length)[0]\n      .filter((item, index, groupItems) => groupItems.findIndex((candidate) => candidate.value === item.value) === index);\n  }\n\n  async function resolveCollectionViewUrl(collectionUrl, label, tier, cluster) {\n    if (!collectionUrl || !label) {\n      return collectionUrl || '#';\n    }\n\n    const items = await fetchCollectionFilterItems(collectionUrl);\n    const match = items\n      .map((item) => ({\n        item,\n        score: scoreCollectionFilterItem(item, label, tier)\n      }))\n      .filter(({ score }) => score > 0)\n      .sort((left, right) => right.score - left.score)[0];\n\n    if (match) {\n      return buildCollectionFilterUrl(\n        new URL(collectionUrl, window.location.origin).pathname + new URL(collectionUrl, window.location.origin).search,\n        match.item.name,\n        match.item.value,\n        match.item.label,\n        match.item.groupLabel,\n        tier\n      );\n    }\n\n    const clusterItems = resolveClusterFilterItems(items, cluster, tier);\n    if (clusterItems.length) {\n      return buildCollectionMultiFilterUrl(collectionUrl, clusterItems, label, tier);\n    }\n\n    return collectionUrl;\n  }\n\n  function getTierFromAltitude(altitude) {\n    if (altitude > TIER_THRESHOLDS.continent) {\n      return 'continent';\n    }\n\n    if (altitude > TIER_THRESHOLDS.country) {\n      return 'country';\n    }\n\n    if (altitude > TIER_THRESHOLDS.region) {\n      return 'region';\n    }\n\n    return 'city';\n  }\n\n  function getTierKey(destination, tier) {\n    if (tier === 'continent') {\n      return destination.continent || destination.country || destination.region || destination.city;\n    }\n\n    if (tier === 'country') {\n      return destination.country || destination.region || destination.city;\n    }\n\n    if (tier === 'region') {\n      return destination.region || destination.country || destination.city;\n    }\n\n    return `${destination.city || destination.region || destination.country}::${destination.country || ''}`;\n  }\n\n  function groupDestinations(destinations, tier) {\n    const groups = new Map();\n\n    destinations.forEach((destination) => {\n      const key = getTierKey(destination, tier);\n      if (!key) {\n        return;\n      }\n\n      const existing = groups.get(key) || {\n        key,\n        tier,\n        label: destination[tier] || destination.city || destination.region || destination.country || destination.continent,\n        latTotal: 0,\n        lngTotal: 0,\n        items: []\n      };\n\n      existing.latTotal += destination.lat;\n      existing.lngTotal += destination.lng;\n      existing.items.push(destination);\n      groups.set(key, existing);\n    });\n\n    return Array.from(groups.values()).map((group) => {\n      const lat = group.latTotal / group.items.length;\n      const lng = group.lngTotal / group.items.length;\n      const products = group.items\n        .filter((item) => item.product)\n        .map((item) => item.product)\n        .filter((product, index, items) => items.findIndex((candidate) => candidate.handle === product.handle) === index);\n      const cityCount = new Set(group.items.map((item) => item.city).filter(Boolean)).size;\n\n      return {\n        key: group.key,\n        tier,\n        label: group.label,\n        lat,\n        lng,\n        count: group.items.length,\n        cityCount,\n        continent: group.items[0].continent || '',\n        country: group.items[0].country || '',\n        region: group.items[0].region || '',\n        city: group.items[0].city || '',\n        products,\n        items: group.items\n      };\n    });\n  }\n\n  function buildMarkerData(clusters, tier, settings) {\n    return clusters.map((cluster) => ({\n      ...cluster,\n      color: settings.clusterMarkerColor,\n      altitude: Math.min(tier === 'city' ? settings.cityMarkerAltitude : settings.clusterMarkerAltitude, MARKER_SURFACE_ALTITUDE),\n      radius: tier === 'city' ? settings.cityMarkerRadius : Math.min(settings.clusterMarkerRadius + (cluster.count - 1) * 0.025, settings.clusterMarkerRadius + 0.14)\n    }));\n  }\n\n  function buildLabelData(markerData, settings) {\n    return markerData.map((cluster) => {\n      const dotRadius = Math.max(DESTINATION_DOT_RADIUS_MIN, cluster.radius * 4.8, settings.cityMarkerRadius * 4.8);\n\n      return {\n        ...cluster,\n        color: cluster.color,\n        labelAltitude: Math.max(\n          settings.hexAltitude + DESTINATION_HEX_ALTITUDE_OFFSET,\n          settings.hexAltitude * DESTINATION_DOT_ALTITUDE_MULTIPLIER\n        ),\n        dotRadius\n      };\n    });\n  }\n\n  function buildActiveHighlight(cluster, settings) {\n    if (!cluster) {\n      return [];\n    }\n\n    return [{\n      lat: cluster.lat,\n      lng: cluster.lng,\n      color: settings.cityMarkerColor,\n      altitude: settings.hexAltitude + DESTINATION_HEX_ALTITUDE_OFFSET + ACTIVE_HIGHLIGHT_ALTITUDE_BUFFER,\n      size: Math.max(ACTIVE_HTML_MARKER_MIN_SIZE, Math.round(settings.cityMarkerRadius * 180))\n    }];\n  }\n\n  function getActiveHtmlElement(point) {\n    if (point.__element) {\n      return point.__element;\n    }\n\n    const element = document.createElement('span');\n    element.className = 'pp-destination-globe__active-marker';\n    element.style.setProperty('--pp-destination-globe-active-marker-size', `${point.size}px`);\n    element.style.setProperty('--pp-destination-globe-active-marker-colour', point.color);\n    point.__element = element;\n    return element;\n  }\n\n  function getHexBinColor(points, settings) {\n    if (!Array.isArray(points) || !points.length) {\n      return settings.clusterMarkerColor;\n    }\n    return (points[0] && points[0].color) || settings.clusterMarkerColor;\n  }\n\n  function getMarkerHexResolution(tier, settings) {\n    if (tier === 'continent') {\n      return Math.max(1, Number(settings.hexResolution || 1) - 1);\n    }\n\n    return Number(settings.hexResolution || 1);\n  }\n\n  function toRadians(value) {\n    return (value * Math.PI) / 180;\n  }\n\n  function getAngularDistance(left, right) {\n    const leftLat = toRadians(Number(left.lat || 0));\n    const rightLat = toRadians(Number(right.lat || 0));\n    const deltaLat = rightLat - leftLat;\n    const deltaLng = toRadians(Number(right.lng || 0) - Number(left.lng || 0));\n    const a = Math.sin(deltaLat / 2) ** 2\n      + Math.cos(leftLat) * Math.cos(rightLat) * Math.sin(deltaLng / 2) ** 2;\n\n    return 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n  }\n\n  function getSelectionThreshold(tier) {\n    if (tier === 'continent') {\n      return 0.35;\n    }\n\n    if (tier === 'country') {\n      return 0.2;\n    }\n\n    if (tier === 'region') {\n      return 0.12;\n    }\n\n    return 0.08;\n  }\n\n  function getVisibleAngularThreshold(altitude) {\n    const normalizedAltitude = Math.max(0, Number(altitude || 0));\n    const radiusRatio = 1 / (1 + normalizedAltitude);\n    const horizonAngle = Math.acos(Math.min(1, Math.max(0, radiusRatio)));\n\n    return Math.min(Math.PI / 2, horizonAngle + 0.18);\n  }\n\n  function findNearestCluster(clusters, coordinates, tier) {\n    if (!Array.isArray(clusters) || !clusters.length || !coordinates) {\n      return null;\n    }\n\n    let closest = null;\n    let closestDistance = Number.POSITIVE_INFINITY;\n\n    clusters.forEach((cluster) => {\n      const distance = getAngularDistance(cluster, coordinates);\n      if (distance < closestDistance) {\n        closest = cluster;\n        closestDistance = distance;\n      }\n    });\n\n    return closestDistance <= getSelectionThreshold(tier) ? closest : null;\n  }\n\n  function getPointerDistance(start, end) {\n    if (!start || !end) {\n      return Number.POSITIVE_INFINITY;\n    }\n\n    const deltaX = Number(end.x || 0) - Number(start.x || 0);\n    const deltaY = Number(end.y || 0) - Number(start.y || 0);\n    return Math.hypot(deltaX, deltaY);\n  }\n\n  function getScreenClusterHitRadius(cluster) {\n    if (!cluster) {\n      return 18;\n    }\n\n    const baseRadius = cluster.tier === 'continent'\n      ? 54\n      : cluster.tier === 'country'\n        ? 44\n        : cluster.tier === 'region'\n          ? 34\n          : 24;\n    const countBoost = Math.max(0, Number(cluster.count || 1) - 1) * 0.35;\n\n    return Math.min(72, baseRadius + countBoost);\n  }\n\n  function getStageLocalPoint(point, stage) {\n    if (!point || !stage) {\n      return point;\n    }\n\n    const rect = stage.getBoundingClientRect();\n    return {\n      x: point.x - rect.left,\n      y: point.y - rect.top\n    };\n  }\n\n  function findNearestScreenCluster(clusters, point, globe, stage) {\n    if (!Array.isArray(clusters) || !clusters.length) {\n      return null;\n    }\n\n    const localPoint = getStageLocalPoint(point, stage);\n    if (!localPoint) {\n      return null;\n    }\n\n    const pointOfView = globe && typeof globe.pointOfView === 'function'\n      ? globe.pointOfView()\n      : null;\n    const visibleThreshold = pointOfView\n      ? getVisibleAngularThreshold(pointOfView.altitude)\n      : null;\n\n    let closest = null;\n    let closestDistance = Number.POSITIVE_INFINITY;\n\n    clusters.forEach((cluster) => {\n      if (pointOfView && visibleThreshold !== null) {\n        const angularDistance = getAngularDistance(cluster, pointOfView);\n        if (angularDistance > visibleThreshold) {\n          return;\n        }\n      }\n\n      const screen = globe.getScreenCoords(cluster.lat, cluster.lng, cluster.labelAltitude);\n      if (!screen || typeof screen.x !== 'number' || typeof screen.y !== 'number') {\n        return;\n      }\n\n      const distance = Math.hypot(screen.x - localPoint.x, screen.y - localPoint.y);\n      if (distance < closestDistance) {\n        closest = cluster;\n        closestDistance = distance;\n      }\n    });\n\n    if (!closest) {\n      return null;\n    }\n\n    const closestScreen = globe.getScreenCoords(closest.lat, closest.lng, closest.labelAltitude);\n    if (!closestScreen) {\n      return null;\n    }\n\n    const hitRadius = getScreenClusterHitRadius(closest);\n    closest.__screenHitRadius = hitRadius;\n    closest.__screenHitDistance = closestDistance;\n\n    return closestDistance <= hitRadius ? closest : null;\n  }\n\n  function buildHexSelection(points, tier) {\n    if (!Array.isArray(points) || !points.length) {\n      return null;\n    }\n\n    const items = points.flatMap((point) => Array.isArray(point.items) ? point.items : []);\n    const uniqueProducts = [];\n    const seenProducts = new Set();\n\n    items.forEach((item) => {\n      if (!item.product || seenProducts.has(item.product.handle)) {\n        return;\n      }\n\n      seenProducts.add(item.product.handle);\n      uniqueProducts.push(item.product);\n    });\n\n    const lat = points.reduce((sum, point) => sum + Number(point.lat || 0), 0) / points.length;\n    const lng = points.reduce((sum, point) => sum + Number(point.lng || 0), 0) / points.length;\n    const first = points[0];\n    const cityCount = new Set(items.map((item) => item.city).filter(Boolean)).size;\n\n    return {\n      key: points.map((point) => point.key).sort().join('::'),\n      tier,\n      label: first.label,\n      lat,\n      lng,\n      count: items.length || points.reduce((sum, point) => sum + Number(point.count || 0), 0),\n      cityCount,\n      continent: first.continent || '',\n      country: first.country || '',\n      region: first.region || '',\n      city: tier === 'city' && cityCount === 1 ? (first.city || '') : '',\n      products: uniqueProducts,\n      items\n    };\n  }\n\n  function renderFeaturedList(section, destinations, strings) {\n    const featured = section.querySelector('[data-pp-destination-globe-featured]');\n    if (!featured) {\n      return;\n    }\n\n    const seen = new Set();\n    const featuredCities = destinations.filter((destination) => {\n      const key = `${destination.city}::${destination.country}`;\n      if (seen.has(key)) {\n        return false;\n      }\n\n      seen.add(key);\n      return Boolean(destination.city);\n    }).slice(0, 6);\n\n    featured.innerHTML = featuredCities.map((destination) => (\n      `<button type=\"button\" class=\"pp-destination-globe__featured-item\" data-featured-city=\"${escapeHtml(destination.city)}\" data-featured-country=\"${escapeHtml(destination.country)}\">` +\n        `<span>${escapeHtml(destination.city)}</span>` +\n        `<small>${escapeHtml(destination.country || strings.cityTierLabel)}</small>` +\n      '</button>'\n    )).join('');\n  }\n\n  function getClusterProducts(cluster) {\n    if (!cluster || !Array.isArray(cluster.items) || !cluster.items.length) {\n      return [];\n    }\n\n    const uniqueProducts = [];\n    const seenProducts = new Set();\n\n    cluster.items.forEach((item) => {\n      if (!item.product || seenProducts.has(item.product.handle)) {\n        return;\n      }\n\n      seenProducts.add(item.product.handle);\n      uniqueProducts.push(item.product);\n    });\n\n    return uniqueProducts;\n  }\n\n  function renderPanelProductSkeletonCard() {\n    return (\n      '<div class=\"product-block pp-destination-globe__product-card pp-destination-globe__product-card--skeleton\" aria-hidden=\"true\">' +\n        '<div class=\"pp-destination-globe__product-card-link\">' +\n          '<div class=\"pp-destination-globe__product-image pp-destination-globe__product-image--skeleton\">' +\n            '<span class=\"pp-destination-globe__product-skeleton-block\"></span>' +\n          '</div>' +\n          '<div class=\"pp-destination-globe__product-copy\">' +\n            '<div class=\"pp-destination-globe__product-title pp-destination-globe__product-title--skeleton\">' +\n              '<span class=\"pp-destination-globe__product-skeleton-block pp-destination-globe__product-skeleton-line pp-destination-globe__product-skeleton-line--title-primary\"></span>' +\n              '<span class=\"pp-destination-globe__product-skeleton-block pp-destination-globe__product-skeleton-line pp-destination-globe__product-skeleton-line--title-secondary\"></span>' +\n            '</div>' +\n            '<div class=\"pp-destination-globe__product-meta pp-destination-globe__product-meta--skeleton\">' +\n              '<span class=\"pp-destination-globe__product-skeleton-block pp-destination-globe__product-skeleton-line pp-destination-globe__product-skeleton-line--price\"></span>' +\n            '</div>' +\n          '</div>' +\n        '</div>' +\n      '</div>'\n    );\n  }\n\n  function renderPanelProductSkeletons(count) {\n    const total = Math.max(Number(count || 0), 1);\n    return Array.from({ length: total }, () => renderPanelProductSkeletonCard()).join('');\n  }\n\n  function renderPanelProductCard(product, strings) {\n    const image = product.image\n      ? `<img class=\"pp-destination-globe__product-image\" src=\"${escapeHtml(product.image)}\" alt=\"${escapeHtml(product.title)}\" loading=\"lazy\">`\n      : `<div class=\"pp-destination-globe__product-image pp-destination-globe__product-image--placeholder\" aria-hidden=\"true\"></div>`;\n    const variants = Array.isArray(product.variants) ? product.variants : [];\n    const variantsJson = JSON.stringify(variants).replace(/</g, '\\\\u003c');\n\n    return (\n      `<div class=\"product-block pp-destination-globe__product-card\" data-pp-globe-product-card data-product-handle=\"${escapeHtml(product.handle || '')}\" data-product-title=\"${escapeHtml(product.title || '')}\" data-product-id=\"${escapeHtml(product.id || '')}\" data-product-url=\"${escapeHtml(product.url || '#')}\">` +\n        `<button class=\"product-favourite-button product-favourite-button--card pp-destination-globe__favourite-button\" type=\"button\" aria-pressed=\"false\" data-favourite-toggle data-product-id=\"${escapeHtml(product.id || '')}\" data-variant-id=\"${escapeHtml(product.variantId || '')}\" data-product-handle=\"${escapeHtml(product.handle || '')}\" data-product-title=\"${escapeHtml(product.title || '')}\" data-product-url=\"${escapeHtml(product.url || '#')}\" data-product-price=\"${escapeHtml(product.price || '')}\"${product.image ? ` data-product-image=\"${escapeHtml(product.image)}\"` : ''}>` +\n          `<span class=\"visually-hidden\">${escapeHtml(strings.toggleFavourite)}</span>` +\n          strings.heartIcon +\n        '</button>' +\n        `<button class=\"bulk-select-toggle pp-destination-globe__bulk-toggle\" type=\"button\" aria-pressed=\"false\" data-bulk-toggle data-product-handle=\"${escapeHtml(product.handle || '')}\" data-product-title=\"${escapeHtml(product.title || '')}\" data-bulk-first-variant-id=\"${escapeHtml(product.firstVariantId || '')}\" data-bulk-first-variant-title=\"${escapeHtml(product.firstVariantTitle || '')}\">` +\n          '<span class=\"bulk-select-toggle__check\" aria-hidden=\"true\"></span>' +\n          `<span class=\"bulk-select-toggle__label\">${escapeHtml(strings.selectLabel)}</span>` +\n        '</button>' +\n        `<script type=\"application/json\" class=\"bulk-add-variant-data\">${variantsJson}</script>` +\n        `<a class=\"pp-destination-globe__product-card-link\" href=\"${escapeHtml(product.url)}\" data-pp-globe-product-link data-product-handle=\"${escapeHtml(product.handle || '')}\" data-product-title=\"${escapeHtml(product.title || '')}\" data-product-id=\"${escapeHtml(product.id || '')}\">` +\n          image +\n          '<div class=\"pp-destination-globe__product-copy\">' +\n            `<div class=\"pp-destination-globe__product-title\">${escapeHtml(product.title)}</div>` +\n            `<div class=\"pp-destination-globe__product-meta\">${escapeHtml(product.priceLabel || '')}</div>` +\n          '</div>' +\n        '</a>' +\n      '</div>'\n    );\n  }\n\n  function syncPanelCardState() {\n    document.dispatchEvent(new CustomEvent('theme:favourites:sync-buttons'));\n    document.dispatchEvent(new CustomEvent('theme:ajax-products-reloaded'));\n  }\n\n  function syncPanelScrollState(section) {\n    if (!section) {\n      return;\n    }\n\n    const panel = section.querySelector('.pp-destination-globe__panel');\n    const scrollContainer = section.querySelector('.pp-destination-globe__panel-scroll');\n    if (!panel || !scrollContainer) {\n      return;\n    }\n\n    const isDesktop = window.matchMedia('(min-width: 990px)').matches;\n    const isScrollable = isDesktop && (scrollContainer.scrollHeight - scrollContainer.clientHeight) > 8;\n    panel.classList.toggle('is-scrollable', isScrollable);\n  }\n\n  function renderPanel(section, cluster, tier, strings) {\n    const status = section.querySelector('[data-pp-destination-globe-status]');\n    const title = section.querySelector('[data-pp-destination-globe-panel-title]');\n    const body = section.querySelector('[data-pp-destination-globe-panel-body]');\n    const products = section.querySelector('[data-pp-destination-globe-products]');\n\n    if (!status || !title || !body || !products) {\n      return;\n    }\n\n    renderAction(section, null, null);\n\n    if (!cluster) {\n      status.textContent = strings.readyLabel;\n      title.textContent = strings.defaultPanelTitle;\n      body.textContent = strings.defaultPanelBody;\n      products.innerHTML = '';\n      syncPanelCardState();\n      window.requestAnimationFrame(() => syncPanelScrollState(section));\n      return;\n    }\n\n    if (cluster.isPreviewAggregate) {\n      status.textContent = cluster.previewStatus || strings.cityStatus;\n      title.textContent = cluster.previewTitle || cluster.label;\n      body.textContent = cluster.previewBody || '';\n\n      if (!cluster.products.length) {\n        products.innerHTML = `<div class=\"pp-destination-globe__empty-products\">${escapeHtml(strings.noProducts)}</div>`;\n        syncPanelCardState();\n        window.requestAnimationFrame(() => syncPanelScrollState(section));\n        return;\n      }\n\n      products.innerHTML = cluster.products.map((product) => renderPanelProductCard(product, strings)).join('');\n      syncPanelCardState();\n      window.requestAnimationFrame(() => syncPanelScrollState(section));\n      return;\n    }\n\n    if (tier !== 'city') {\n      const clusterProducts = getClusterProducts(cluster);\n      const line = tier === 'continent'\n        ? strings.zoomToCountry\n        : tier === 'country'\n          ? strings.zoomToRegion\n          : strings.zoomToCity;\n\n      status.textContent = getClusterStatusText(strings, cluster.tier, cluster.count);\n      title.textContent = cluster.label;\n      body.textContent = `${line} ${cluster.cityCount > 0 ? getCitiesAvailableText(strings, cluster.cityCount) : ''}`.trim();\n      products.innerHTML = clusterProducts.map((product) => renderPanelProductCard(product, strings)).join('');\n      syncPanelCardState();\n      window.requestAnimationFrame(() => syncPanelScrollState(section));\n      return;\n    }\n\n    status.textContent = strings.cityStatus;\n    title.textContent = cluster.city || cluster.label;\n    body.textContent = [cluster.region, cluster.country].filter(Boolean).join(', ') || strings.cityReady;\n\n    if (!cluster.products.length) {\n      products.innerHTML = `<div class=\"pp-destination-globe__empty-products\">${escapeHtml(strings.noProducts)}</div>`;\n      syncPanelCardState();\n      window.requestAnimationFrame(() => syncPanelScrollState(section));\n      return;\n    }\n\n    products.innerHTML = cluster.products.map((product) => renderPanelProductCard(product, strings)).join('');\n    syncPanelCardState();\n    window.requestAnimationFrame(() => syncPanelScrollState(section));\n  }\n\n  function createGlobe(section, data) {\n    const mount = section.querySelector('[data-pp-destination-globe-canvas]');\n    if (!mount) {\n      return null;\n    }\n\n    const globeOptions = {\n      waitForGlobeReady: true,\n      animateIn: data.settings.animateIn !== false\n    };\n\n    let globe = null;\n    try {\n      globe = new window.Globe(mount, globeOptions);\n    } catch (error) {\n      try {\n        globe = window.Globe(globeOptions)(mount);\n      } catch (fallbackError) {\n        globe = window.Globe()(mount);\n      }\n    }\n\n    globe\n      .backgroundColor('rgba(0,0,0,0)')\n      .showAtmosphere(data.settings.showAtmosphere)\n      .atmosphereColor(data.settings.atmosphereColor)\n      .atmosphereAltitude(data.settings.atmosphereAltitude)\n      .pointsMerge(false)\n      .pointResolution(18)\n      .pointColor('color')\n      .pointAltitude('altitude')\n      .pointRadius('radius');\n\n    if (data.settings.surfaceStyle === 'hex_sphere') {\n      globe\n        .showGlobe(true)\n        .globeImageUrl(createSolidTexture(data.settings.baseHexColor))\n        .bumpImageUrl(null);\n    } else {\n      globe\n        .showGlobe(true)\n        .globeImageUrl(data.settings.globeImageUrl || DEFAULT_GLOBE_IMAGE)\n        .bumpImageUrl(data.settings.bumpImageUrl || DEFAULT_BUMP_IMAGE);\n    }\n\n    return globe;\n  }\n\n  async function initSection(section) {\n    if (section.dataset.ppDestinationGlobeReady === 'true') {\n      return;\n    }\n\n    const data = parseData(section);\n    if (!data) {\n      section.dataset.ppDestinationGlobeReady = 'true';\n      return;\n    }\n\n    section.dataset.ppDestinationGlobeReady = 'true';\n\n    try {\n      const captureMode = isCaptureMode();\n      section.dataset.ppDestinationGlobeCapture = captureMode ? 'true' : 'false';\n      renderLoadingState(section, data.strings);\n\n      await ensureDependencies();\n      const globe = createGlobe(section, data);\n      const strings = data.strings;\n      const settings = data.settings;\n      section.dataset.ppDestinationGlobeCollectionUrl = data.sourceCollectionUrl || '';\n      const featured = section.querySelector('[data-pp-destination-globe-featured]');\n      const stage = section.querySelector('[data-pp-destination-globe-stage]');\n      const panelScroll = section.querySelector('.pp-destination-globe__panel-scroll');\n      let activeTier = 'continent';\n      let activeCluster = null;\n      let previewCluster = null;\n      let visibleLabelData = [];\n      let hoveredLabelCluster = null;\n      let pointerStart = null;\n      let lastTapLogSignature = null;\n      let lastResolvedSelection = null;\n      let autoRotateResumeTimer = null;\n      let hydrationAnimationFrame = null;\n      let hydrationRevealToken = 0;\n      let destinationDataReady = Array.isArray(data.destinations) && data.destinations.length > 0;\n      let shouldAnimateHydration = !destinationDataReady;\n      let renderableDestinations = destinationDataReady ? data.destinations.slice() : [];\n      if (!globe) {\n        return;\n      }\n\n      if (captureMode) {\n        document.documentElement.classList.add('pp-destination-globe-capture-mode');\n        document.body.classList.add('pp-destination-globe-capture-mode');\n      }\n\n      renderFeaturedList(section, renderableDestinations, strings);\n      if (destinationDataReady) {\n        renderPanel(section, null, activeTier, strings);\n      }\n\n      globe\n        .width(section.querySelector('[data-pp-destination-globe-stage]').clientWidth)\n        .height(section.querySelector('[data-pp-destination-globe-stage]').clientHeight)\n        .hexPolygonsData([])\n        .hexPolygonResolution(settings.hexResolution)\n        .hexPolygonMargin(settings.hexMargin)\n        .hexPolygonUseDots(settings.hexUseDots)\n        .hexPolygonColor(() => settings.hexColor)\n        .hexPolygonAltitude(settings.hexAltitude)\n        .pointLabel((point) => {\n          const detail = point.tier === 'city'\n            ? `${point.city || point.label}${point.country ? `, ${point.country}` : ''}`\n            : `${point.label} \u2022 ${point.count}`;\n          return `<div class=\"pp-destination-globe__tooltip\">${escapeHtml(detail)}</div>`;\n        })\n        .hexBinPointsData([])\n        .hexAltitude(() => settings.hexAltitude + DESTINATION_HEX_ALTITUDE_OFFSET)\n        .hexTopColor(({ points }) => getHexBinColor(points, settings))\n        .hexSideColor(() => 'rgba(0,0,0,0)')\n        .hexBinMerge(false)\n        .hexTransitionDuration(HYDRATION_REVEAL_MS)\n        .labelsData([])\n        .labelLabel((cluster) => {\n          const detail = cluster.tier === 'city'\n            ? `${cluster.city || cluster.label}${cluster.country ? `, ${cluster.country}` : ''}`\n            : `${cluster.label} \u2022 ${cluster.count}`;\n          return `<div class=\"pp-destination-globe__tooltip\">${escapeHtml(detail)}</div>`;\n        })\n        .labelText(() => '')\n        .labelColor('color')\n        .labelAltitude('labelAltitude')\n        .labelSize(() => 0.001)\n        .labelIncludeDot(() => true)\n        .labelDotRadius('dotRadius')\n        .onLabelHover((cluster) => {\n          hoveredLabelCluster = cluster || null;\n        })\n        .labelsTransitionDuration(HYDRATION_REVEAL_MS)\n        .htmlElementsData([])\n        .htmlAltitude('altitude')\n        .htmlElement((point) => getActiveHtmlElement(point))\n        .htmlTransitionDuration(HYDRATION_REVEAL_MS)\n        .hexLabel(({ points }) => {\n          const point = points[0];\n          if (!point) {\n            return '';\n          }\n\n          const detail = point.tier === 'city'\n            ? `${point.city || point.label}${point.country ? `, ${point.country}` : ''}`\n            : `${point.label} \u2022 ${point.count}`;\n          return `<div class=\"pp-destination-globe__tooltip\">${escapeHtml(detail)}</div>`;\n        });\n\n      globe.pointOfView(\n        {\n          lat: settings.initialLat,\n          lng: settings.initialLng,\n          altitude: captureMode\n            ? Math.min(settings.initialAltitude || INITIAL_ALTITUDE, 1.8)\n            : (settings.initialAltitude || INITIAL_ALTITUDE)\n        },\n        0\n      );\n\n      const controls = globe.controls();\n      if (controls) {\n        controls.autoRotate = captureMode ? true : settings.autoRotate;\n        controls.autoRotateSpeed = captureMode\n          ? Math.max(0.2, Math.abs(settings.autoRotateSpeed || 0.4))\n          : settings.autoRotateSpeed;\n        controls.enablePan = false;\n        controls.minDistance = 140;\n        controls.maxDistance = 420;\n        if (captureMode) {\n          controls.enableZoom = false;\n        }\n      }\n\n      const hasLoadedDestinationData = () => Array.isArray(data.destinations) && data.destinations.length > 0;\n      const hasRenderableDestinationData = () => Array.isArray(renderableDestinations) && renderableDestinations.length > 0;\n\n      function getRenderableDestinations() {\n        return Array.isArray(renderableDestinations) ? renderableDestinations : [];\n      }\n\n      function setHydrationTransitionState(enabled) {\n        const duration = enabled ? HYDRATION_REVEAL_MS : 0;\n        globe\n          .hexTransitionDuration(duration)\n          .labelsTransitionDuration(duration)\n          .htmlTransitionDuration(duration);\n      }\n\n      function animateHydrationReveal(nextDestinations) {\n        const targetDestinations = Array.isArray(nextDestinations) ? nextDestinations.slice() : [];\n        const startDestinations = getRenderableDestinations();\n        const startCount = startDestinations.length;\n        const targetCount = targetDestinations.length;\n\n        if (hydrationAnimationFrame) {\n          window.cancelAnimationFrame(hydrationAnimationFrame);\n          hydrationAnimationFrame = null;\n        }\n\n        if (!shouldAnimateHydration || targetCount <= startCount) {\n          renderableDestinations = targetDestinations;\n          renderFeaturedList(section, renderableDestinations, strings);\n          updatePoints();\n          return;\n        }\n\n        setHydrationTransitionState(true);\n        const revealToken = hydrationRevealToken + 1;\n        hydrationRevealToken = revealToken;\n        const startTime = window.performance && typeof window.performance.now === 'function'\n          ? window.performance.now()\n          : Date.now();\n\n        function stepReveal(now) {\n          if (hydrationRevealToken !== revealToken) {\n            return;\n          }\n\n          const currentTime = typeof now === 'number' ? now : Date.now();\n          const elapsed = Math.max(0, currentTime - startTime);\n          const progress = Math.min(1, elapsed / HYDRATION_REVEAL_MS);\n          const steppedProgress = Math.min(\n            1,\n            Math.ceil(progress * HYDRATION_REVEAL_STEPS) / HYDRATION_REVEAL_STEPS\n          );\n          const visibleCount = Math.max(\n            startCount,\n            Math.min(\n              targetCount,\n              Math.round(startCount + ((targetCount - startCount) * steppedProgress))\n            )\n          );\n\n          renderableDestinations = targetDestinations.slice(0, visibleCount);\n          renderFeaturedList(section, renderableDestinations, strings);\n          updatePoints();\n\n          if (progress < 1) {\n            hydrationAnimationFrame = window.requestAnimationFrame(stepReveal);\n            return;\n          }\n\n          hydrationAnimationFrame = null;\n          shouldAnimateHydration = false;\n          setHydrationTransitionState(false);\n          renderableDestinations = targetDestinations;\n          renderFeaturedList(section, renderableDestinations, strings);\n          updatePoints();\n        }\n\n        hydrationAnimationFrame = window.requestAnimationFrame(stepReveal);\n      }\n\n      function refreshDestinationUi() {\n        if (hasLoadedDestinationData()) {\n          destinationDataReady = true;\n          animateHydrationReveal(data.destinations);\n          return;\n        }\n\n        if (destinationDataReady) {\n          renderFeaturedList(section, [], strings);\n          renderNoDestinationsState(section, data);\n        }\n      }\n\n      function pauseAutoRotate() {\n        if (!controls || !settings.autoRotate) {\n          return;\n        }\n\n        controls.autoRotate = false;\n        if (autoRotateResumeTimer) {\n          window.clearTimeout(autoRotateResumeTimer);\n        }\n      }\n\n      function resumeAutoRotateAfterIdle() {\n        if (!controls || !settings.autoRotate) {\n          return;\n        }\n\n        if (autoRotateResumeTimer) {\n          window.clearTimeout(autoRotateResumeTimer);\n        }\n\n        autoRotateResumeTimer = window.setTimeout(() => {\n          controls.autoRotate = true;\n        }, AUTO_ROTATE_IDLE_MS);\n      }\n\n      function registerUserInteraction() {\n        pauseAutoRotate();\n        resumeAutoRotateAfterIdle();\n      }\n\n      const interactionTrackState = new Map();\n\n      function trackSectionEvent(name, payload) {\n        trackAnalyticsEvent(name, Object.assign({\n          event_category: 'explore_globe',\n          component: 'pp_destination_globe',\n          surface_style: settings.surfaceStyle || '',\n          source_collection_handle: data.sourceCollectionHandle || '',\n          source_collection_title: data.sourceCollectionTitle || ''\n        }, payload || {}));\n      }\n\n      function trackThrottledSectionEvent(name, payload, cooldownMs) {\n        const now = Date.now();\n        const lastFiredAt = interactionTrackState.get(name) || 0;\n        if (now - lastFiredAt < cooldownMs) {\n          return;\n        }\n\n        interactionTrackState.set(name, now);\n        trackSectionEvent(name, payload);\n      }\n\n      function buildClusterAnalyticsPayload(cluster, extra) {\n        const clusterProducts = cluster && Array.isArray(cluster.products)\n          ? cluster.products\n          : getClusterProducts(cluster);\n\n        return Object.assign({\n          event_label: cluster ? `${cluster.tier || ''}:${cluster.label || ''}` : '',\n          selection_tier: cluster && cluster.tier ? cluster.tier : '',\n          selection_label: cluster && cluster.label ? cluster.label : '',\n          selection_key: cluster && cluster.key ? cluster.key : '',\n          selection_count: cluster && cluster.count ? Number(cluster.count) : 0,\n          city_count: cluster && cluster.cityCount ? Number(cluster.cityCount) : 0,\n          product_count: Array.isArray(clusterProducts) ? clusterProducts.length : 0,\n          continent: cluster && cluster.continent ? cluster.continent : '',\n          country: cluster && cluster.country ? cluster.country : '',\n          region: cluster && cluster.region ? cluster.region : '',\n          city: cluster && cluster.city ? cluster.city : ''\n        }, extra || {});\n      }\n\n      function trackSelection(cluster, source) {\n        if (!cluster) {\n          return;\n        }\n\n        trackSectionEvent('explore_globe_select', buildClusterAnalyticsPayload(cluster, {\n          selection_source: source || '',\n          active_view_tier: activeTier || ''\n        }));\n      }\n\n      trackSectionEvent('explore_globe_view', {\n        event_label: data.sourceCollectionHandle || data.sourceCollectionTitle || 'explore',\n        initial_latitude: settings.initialLat,\n        initial_longitude: settings.initialLng,\n        initial_altitude: settings.initialAltitude || INITIAL_ALTITUDE\n      });\n\n      function syncPanelScrollStateDeferred() {\n        window.requestAnimationFrame(() => syncPanelScrollState(section));\n      }\n\n      function getTapLogSignature(point) {\n        return point ? `${Math.round(point.x)}:${Math.round(point.y)}` : '';\n      }\n\n      function rememberResolvedSelection(source, cluster) {\n        if (!cluster) {\n          return;\n        }\n\n        lastResolvedSelection = {\n          key: cluster.key,\n          tier: cluster.tier,\n          source,\n          at: Date.now()\n        };\n      }\n\n      function shouldIgnoreLabelClick(cluster) {\n        if (!cluster || !lastResolvedSelection) {\n          return false;\n        }\n\n        return lastResolvedSelection.key === cluster.key\n          && lastResolvedSelection.tier === cluster.tier\n          && lastResolvedSelection.source === 'pointer-fallback'\n          && Date.now() - lastResolvedSelection.at < 400;\n      }\n\n      function resolveSingleTapSelection(point, source) {\n        const cluster = source === 'pointerup-mouse' && hoveredLabelCluster\n      ? hoveredLabelCluster\n      : findNearestScreenCluster(visibleLabelData, point, globe, stage);\n        const signature = `${source}:${getTapLogSignature(point)}:${cluster ? cluster.key : 'none'}`;\n\n        if (lastTapLogSignature === signature) {\n          return;\n        }\n\n        lastTapLogSignature = signature;\n        if (!cluster) {\n          return;\n        }\n\n        registerUserInteraction();\n        rememberResolvedSelection('pointer-fallback', cluster);\n        trackSelection(cluster, source);\n        selectLabelCluster(cluster);\n      }\n\n      function findNearestVisibleCluster(clusters) {\n        if (!Array.isArray(clusters) || !clusters.length || !stage) {\n          return null;\n        }\n\n        const pointOfView = globe.pointOfView();\n        const stageRect = stage.getBoundingClientRect();\n        const centrePoint = {\n          x: stageRect.left + (stageRect.width / 2),\n          y: stageRect.top + (stageRect.height / 2)\n        };\n        const localCentre = getStageLocalPoint(centrePoint, stage);\n        const visibleThreshold = getVisibleAngularThreshold(pointOfView.altitude);\n\n        let closest = null;\n        let closestDistance = Number.POSITIVE_INFINITY;\n\n        clusters.forEach((cluster) => {\n          const angularDistance = getAngularDistance(cluster, pointOfView);\n          if (angularDistance > visibleThreshold) {\n            return;\n          }\n\n          const screen = globe.getScreenCoords(cluster.lat, cluster.lng, cluster.labelAltitude);\n          if (!screen || typeof screen.x !== 'number' || typeof screen.y !== 'number') {\n            return;\n          }\n\n          const distance = Math.hypot(screen.x - localCentre.x, screen.y - localCentre.y);\n          if (distance < closestDistance) {\n            closest = cluster;\n            closestDistance = distance;\n          }\n        });\n\n        if (closest) {\n          closest.__screenPreviewDistance = closestDistance;\n          closest.__screenPreviewAngularDistance = getAngularDistance(closest, pointOfView);\n          return closest;\n        }\n\n        return findNearestCluster(clusters, pointOfView, activeTier);\n      }\n\n      function getNearbyPreviewScreenRadius(cluster) {\n        const tier = cluster && cluster.tier ? cluster.tier : activeTier;\n        const tierMultiplier = tier === 'continent'\n          ? 3.4\n          : tier === 'country'\n            ? 3.0\n            : tier === 'region'\n              ? 2.7\n              : 2.4;\n        const minRadius = tier === 'continent'\n          ? 92\n          : tier === 'country'\n            ? 84\n            : 72;\n\n        return Math.min(148, Math.max(minRadius, getScreenClusterHitRadius(cluster) * tierMultiplier));\n      }\n\n      function buildNearbyPreviewCluster(clusters) {\n        if (!Array.isArray(clusters) || !clusters.length || !stage) {\n          return null;\n        }\n\n        const pointOfView = globe.pointOfView();\n        const stageRect = stage.getBoundingClientRect();\n        const centrePoint = {\n          x: stageRect.left + (stageRect.width / 2),\n          y: stageRect.top + (stageRect.height / 2)\n        };\n        const localCentre = getStageLocalPoint(centrePoint, stage);\n        const visibleThreshold = getVisibleAngularThreshold(pointOfView.altitude);\n\n        const visibleEntries = clusters.map((cluster) => {\n          const angularDistance = getAngularDistance(cluster, pointOfView);\n          if (angularDistance > visibleThreshold) {\n            return null;\n          }\n\n          const screen = globe.getScreenCoords(cluster.lat, cluster.lng, cluster.labelAltitude);\n          if (!screen || typeof screen.x !== 'number' || typeof screen.y !== 'number') {\n            return null;\n          }\n\n          return {\n            cluster,\n            angularDistance,\n            distance: Math.hypot(screen.x - localCentre.x, screen.y - localCentre.y)\n          };\n        }).filter(Boolean).sort((left, right) => left.distance - right.distance);\n\n        if (!visibleEntries.length) {\n          return findNearestCluster(clusters, pointOfView, activeTier);\n        }\n\n        const nearest = visibleEntries[0];\n        nearest.cluster.__screenPreviewDistance = nearest.distance;\n        nearest.cluster.__screenPreviewAngularDistance = nearest.angularDistance;\n\n        const nearbyEntries = visibleEntries.filter((entry) => entry.distance <= getNearbyPreviewScreenRadius(nearest.cluster));\n        if (nearbyEntries.length <= 1) {\n          return nearest.cluster;\n        }\n\n        const aggregateTier = nearest.cluster && nearest.cluster.tier ? nearest.cluster.tier : activeTier;\n        const aggregate = buildHexSelection(nearbyEntries.map((entry) => entry.cluster), aggregateTier);\n        if (!aggregate) {\n          return nearest.cluster;\n        }\n\n        const regionValues = Array.from(new Set(aggregate.items.map((item) => item.region).filter(Boolean)));\n        const countryValues = Array.from(new Set(aggregate.items.map((item) => item.country).filter(Boolean)));\n        const cityCount = Math.max(1, aggregate.cityCount || nearbyEntries.length);\n\n        aggregate.isPreviewAggregate = true;\n        aggregate.previewStatus = strings.nearbyStatus || strings.cityStatus;\n        aggregate.previewTitle = regionValues.length === 1\n          ? regionValues[0]\n          : countryValues.length === 1\n            ? countryValues[0]\n            : (strings.nearbyTitle || nearest.cluster.label);\n        aggregate.previewBody = getNearbyPreviewBody(strings, cityCount);\n        aggregate.label = aggregate.previewTitle;\n        aggregate.city = aggregateTier === 'city' ? '' : (aggregate.city || '');\n        aggregate.region = regionValues.length === 1 ? regionValues[0] : '';\n        aggregate.country = countryValues.length === 1 ? countryValues[0] : (nearest.cluster.country || '');\n        aggregate.lat = nearest.cluster.lat;\n        aggregate.lng = nearest.cluster.lng;\n        aggregate.__screenPreviewDistance = nearest.distance;\n        aggregate.__screenPreviewAngularDistance = nearest.angularDistance;\n\n        return aggregate;\n      }\n\n      function clearPinnedSelection(reason) {\n        if (!activeCluster) {\n          return;\n        }\n\n        activeCluster = null;\n        previewCluster = null;\n\n        if (data.settings.surfaceStyle === 'hex_sphere') {\n          globe.htmlElementsData([]);\n        }\n      }\n\n      function updatePoints() {\n        const altitude = globe.pointOfView().altitude;\n        const tier = getTierFromAltitude(altitude);\n        if (!hasRenderableDestinationData()) {\n          globe.pointsData([]);\n          globe.labelsData([]);\n          globe.htmlElementsData([]);\n          globe.hexBinPointsData([]);\n          return;\n        }\n\n        const clusters = groupDestinations(getRenderableDestinations(), tier);\n        const markerData = buildMarkerData(clusters, tier, settings);\n        const labelData = buildLabelData(markerData, settings);\n        visibleLabelData = labelData;\n        activeTier = tier;\n        if (data.settings.surfaceStyle === 'hex_sphere') {\n          globe\n            .pointsData([])\n            .labelsData(labelData)\n            .htmlElementsData(buildActiveHighlight(activeCluster, settings))\n            .hexBinPointsData([]);\n        } else {\n          globe\n            .labelsData([])\n            .htmlElementsData([])\n            .hexBinPointsData([])\n            .pointsData(markerData);\n        }\n\n        if (activeCluster && activeCluster.tier === 'city') {\n          previewCluster = null;\n          renderPanel(section, activeCluster, 'city', strings);\n          return;\n        }\n\n        if (activeCluster) {\n          const matched = labelData.find((cluster) => cluster.key === activeCluster.key && cluster.tier === activeCluster.tier);\n          if (matched) {\n            activeCluster = matched;\n            previewCluster = null;\n            renderPanel(section, activeCluster, activeCluster.tier, strings);\n            return;\n          }\n\n          previewCluster = null;\n          renderPanel(section, activeCluster, activeCluster.tier, strings);\n          return;\n        }\n\n        previewCluster = buildNearbyPreviewCluster(labelData);\n        renderPanel(\n          section,\n          previewCluster,\n          previewCluster ? previewCluster.tier : activeTier,\n          strings\n        );\n      }\n\n      function focusCluster(cluster, altitude) {\n        activeCluster = cluster;\n        previewCluster = null;\n        renderPanel(section, cluster, cluster.tier, strings);\n        if (data.settings.surfaceStyle === 'hex_sphere') {\n          globe.htmlElementsData(buildActiveHighlight(activeCluster, settings));\n        }\n\n        globe.pointOfView(\n          {\n            lat: cluster.lat,\n            lng: cluster.lng,\n            altitude\n          },\n          1200\n        );\n      }\n\n      function selectLabelCluster(cluster) {\n        if (!cluster) {\n          return;\n        }\n\n        if (cluster.tier === 'continent') {\n          focusCluster(cluster, 1.8);\n          return;\n        }\n\n        if (cluster.tier === 'country') {\n          focusCluster(cluster, CLUSTER_ALTITUDE);\n          return;\n        }\n\n        if (cluster.tier === 'region') {\n          focusCluster(cluster, CITY_ALTITUDE);\n          return;\n        }\n\n        activeCluster = cluster;\n        previewCluster = null;\n        renderPanel(section, cluster, 'city', strings);\n        globe.htmlElementsData(buildActiveHighlight(activeCluster, settings));\n        const currentAltitude = globe.pointOfView().altitude;\n        globe.pointOfView(\n          {\n            lat: cluster.lat,\n            lng: cluster.lng,\n            altitude: currentAltitude\n          },\n          1200\n        );\n      }\n\n      globe.onPointClick((cluster) => {\n        registerUserInteraction();\n\n        if (data.settings.surfaceStyle === 'hex_sphere') {\n          return;\n        }\n\n        if (!cluster) {\n          return;\n        }\n\n        trackSelection(cluster, 'point_click');\n\n        if (cluster.tier === 'continent') {\n          focusCluster(cluster, 1.8);\n          return;\n        }\n\n        if (cluster.tier === 'country') {\n          focusCluster(cluster, CLUSTER_ALTITUDE);\n          return;\n        }\n\n        if (cluster.tier === 'region') {\n          focusCluster(cluster, CITY_ALTITUDE);\n          return;\n        }\n\n        activeCluster = cluster;\n        renderPanel(section, cluster, 'city', strings);\n        if (data.settings.surfaceStyle === 'hex_sphere') {\n          globe.htmlElementsData(buildActiveHighlight(activeCluster, settings));\n        }\n      });\n\n      globe.onLabelClick((cluster) => {\n        registerUserInteraction();\n\n        if (data.settings.surfaceStyle !== 'hex_sphere' || !cluster) {\n          return;\n        }\n\n        if (shouldIgnoreLabelClick(cluster)) {\n          return;\n        }\n\n        rememberResolvedSelection('label-click', cluster);\n        trackSelection(cluster, 'label_click');\n        selectLabelCluster(cluster);\n      });\n\n      if (featured) {\n        featured.addEventListener('click', (event) => {\n          registerUserInteraction();\n\n          if (!hasRenderableDestinationData()) {\n            return;\n          }\n\n          const button = event.target.closest('[data-featured-city]');\n          if (!button) {\n            return;\n          }\n\n          const city = button.getAttribute('data-featured-city');\n          const country = button.getAttribute('data-featured-country');\n          const destinations = getRenderableDestinations().filter((destination) => destination.city === city && destination.country === country);\n          const clusters = groupDestinations(destinations, 'city');\n\n          if (!clusters.length) {\n            return;\n          }\n\n          trackSelection(clusters[0], 'featured_city');\n          activeCluster = clusters[0];\n          previewCluster = null;\n          renderPanel(section, activeCluster, 'city', strings);\n          if (data.settings.surfaceStyle === 'hex_sphere') {\n            const cityLabelData = buildLabelData(\n              buildMarkerData(groupDestinations(getRenderableDestinations(), 'city'), 'city', settings),\n              settings\n            );\n            globe\n              .pointsData([])\n              .labelsData(cityLabelData)\n              .htmlElementsData(buildActiveHighlight(activeCluster, settings))\n              .hexBinPointsData([]);\n          } else {\n            globe\n              .labelsData([])\n              .htmlElementsData([])\n              .hexBinPointsData([])\n              .pointsData(buildMarkerData(groupDestinations(getRenderableDestinations(), 'city'), 'city', settings));\n          }\n          const currentAltitude = globe.pointOfView().altitude;\n          globe.pointOfView(\n            {\n              lat: activeCluster.lat,\n              lng: activeCluster.lng,\n              altitude: currentAltitude\n            },\n            1200\n          );\n        });\n      }\n\n      section.addEventListener('click', async (event) => {\n        const productLink = event.target.closest('[data-pp-globe-product-link]');\n        if (productLink) {\n          trackSectionEvent('explore_globe_product_click', buildClusterAnalyticsPayload(activeCluster || previewCluster, {\n            event_label: productLink.getAttribute('data-product-handle') || productLink.getAttribute('href') || '',\n            product_handle: productLink.getAttribute('data-product-handle') || '',\n            product_title: productLink.getAttribute('data-product-title') || '',\n            product_id: productLink.getAttribute('data-product-id') || '',\n            product_url: productLink.getAttribute('href') || '',\n            panel_context_tier: activeCluster ? activeCluster.tier : (previewCluster ? previewCluster.tier : '')\n          }));\n          return;\n        }\n\n        const actionLink = event.target.closest('[data-pp-destination-globe-action-link]');\n        if (actionLink && actionLink.getAttribute('href')) {\n          trackSectionEvent('explore_globe_action_click', buildClusterAnalyticsPayload(activeCluster || previewCluster, {\n            event_label: actionLink.textContent ? actionLink.textContent.trim() : 'action',\n            action_label: actionLink.textContent ? actionLink.textContent.trim() : '',\n            action_href: actionLink.getAttribute('href') || ''\n          }));\n          return;\n        }\n\n        const moreButton = event.target.closest('[data-panel-more]');\n        if (!moreButton) {\n          return;\n        }\n\n        event.preventDefault();\n        registerUserInteraction();\n\n        const collectionUrl = moreButton.getAttribute('data-panel-more-collection-url') || data.sourceCollectionUrl || '';\n        const label = moreButton.getAttribute('data-panel-more-label') || '';\n        const tier = moreButton.getAttribute('data-panel-more-tier') || '';\n        const targetUrl = await resolveCollectionViewUrl(collectionUrl, label, tier, activeCluster);\n        if (targetUrl) {\n          trackSectionEvent('explore_globe_more_click', buildClusterAnalyticsPayload(activeCluster || previewCluster, {\n            event_label: label || tier || 'more',\n            action_label: label || '',\n            action_tier: tier || '',\n            action_href: targetUrl\n          }));\n          window.location.href = targetUrl;\n        }\n      });\n\n      let resizeTimer = null;\n      function syncSize() {\n        const stage = section.querySelector('[data-pp-destination-globe-stage]');\n        if (!stage) {\n          return;\n        }\n\n        globe.width(stage.clientWidth);\n        globe.height(stage.clientHeight);\n      }\n\n      controls && controls.addEventListener('change', () => {\n        window.clearTimeout(resizeTimer);\n        resizeTimer = window.setTimeout(updatePoints, 120);\n      });\n\n      if (stage) {\n        stage.addEventListener('pointerdown', (event) => {\n          registerUserInteraction();\n          pointerStart = {\n            x: event.clientX,\n            y: event.clientY\n          };\n        }, true);\n        stage.addEventListener('pointerup', (event) => {\n          if (data.settings.surfaceStyle !== 'hex_sphere') {\n            return;\n          }\n\n          const endPoint = {\n            x: event.clientX,\n            y: event.clientY\n          };\n          if (pointerStart && getPointerDistance(pointerStart, endPoint) > STAGE_TAP_MAX_DISTANCE_PX) {\n            trackThrottledSectionEvent('explore_globe_pan', {\n              event_label: event.pointerType || 'pointer',\n              interaction_source: event.pointerType || 'pointer',\n              active_view_tier: activeTier || '',\n              had_selection: Boolean(activeCluster)\n            }, 600);\n            clearPinnedSelection('pointer-pan');\n            pointerStart = null;\n            return;\n          }\n\n          resolveSingleTapSelection(endPoint, `pointerup-${event.pointerType || 'unknown'}`);\n          pointerStart = null;\n        }, true);\n        stage.addEventListener('touchend', (event) => {\n          if (data.settings.surfaceStyle !== 'hex_sphere' || !event.changedTouches || !event.changedTouches.length) {\n            return;\n          }\n\n          const touch = event.changedTouches[0];\n          const endPoint = {\n            x: touch.clientX,\n            y: touch.clientY\n          };\n          if (pointerStart && getPointerDistance(pointerStart, endPoint) > STAGE_TAP_MAX_DISTANCE_PX) {\n            trackThrottledSectionEvent('explore_globe_pan', {\n              event_label: 'touch',\n              interaction_source: 'touch',\n              active_view_tier: activeTier || '',\n              had_selection: Boolean(activeCluster)\n            }, 600);\n            clearPinnedSelection('touch-pan');\n            pointerStart = null;\n            return;\n          }\n\n          resolveSingleTapSelection(endPoint, 'touchend');\n          pointerStart = null;\n        }, { passive: true, capture: true });\n        stage.addEventListener('wheel', () => {\n          registerUserInteraction();\n          trackThrottledSectionEvent('explore_globe_zoom', {\n            event_label: 'wheel',\n            interaction_source: 'wheel',\n            active_view_tier: activeTier || '',\n            had_selection: Boolean(activeCluster)\n          }, 1000);\n          clearPinnedSelection('wheel-zoom');\n        }, { passive: true });\n        stage.addEventListener('touchstart', (event) => {\n          registerUserInteraction();\n          if (!event.touches || !event.touches.length) {\n            return;\n          }\n\n          pointerStart = {\n            x: event.touches[0].clientX,\n            y: event.touches[0].clientY\n          };\n        }, { passive: true, capture: true });\n      }\n\n      window.addEventListener('resize', syncSize);\n      window.addEventListener('resize', syncPanelScrollStateDeferred);\n      syncSize();\n      syncPanelScrollStateDeferred();\n\n      if (panelScroll && typeof ResizeObserver === 'function') {\n        const panelResizeObserver = new ResizeObserver(() => {\n          syncPanelScrollStateDeferred();\n        });\n        panelResizeObserver.observe(panelScroll);\n      }\n\n      fetchLandPolygons(data.landDatasetUrl)\n        .then((polygons) => {\n          globe.hexPolygonsData(polygons);\n        })\n        .catch((error) => {\n          console.error('PP destination globe failed to load land polygons', error);\n        });\n\n      if (destinationDataReady) {\n        shouldAnimateHydration = false;\n        setHydrationTransitionState(false);\n        refreshDestinationUi();\n        syncPanelScrollStateDeferred();\n      } else if (data.sourceCollectionEndpoint) {\n        const streamedDestinations = [];\n        streamDestinationBatches(data.sourceCollectionEndpoint, (batch) => {\n          if (!Array.isArray(batch) || !batch.length) {\n            return;\n          }\n\n          streamedDestinations.push(...batch);\n          data.destinations = streamedDestinations.slice();\n          refreshDestinationUi();\n          syncPanelScrollStateDeferred();\n        })\n          .then(() => {\n            destinationDataReady = true;\n            data.destinations = streamedDestinations.slice();\n            refreshDestinationUi();\n            syncPanelScrollStateDeferred();\n          })\n          .catch((error) => {\n            console.error('PP destination globe failed to load destinations', error);\n            destinationDataReady = true;\n            shouldAnimateHydration = false;\n            setHydrationTransitionState(false);\n            refreshDestinationUi();\n            syncPanelScrollStateDeferred();\n          });\n      } else {\n        destinationDataReady = true;\n        shouldAnimateHydration = false;\n        setHydrationTransitionState(false);\n        refreshDestinationUi();\n        syncPanelScrollStateDeferred();\n      }\n    } catch (error) {\n      console.error('PP destination globe failed to initialise', error);\n      section.setAttribute('data-pp-destination-globe-error', 'true');\n    }\n  }\n\n  function initAll() {\n    document.querySelectorAll(SECTION_SELECTOR).forEach((section) => {\n      initSection(section);\n    });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initAll);\n  } else {\n    initAll();\n  }\n})();\n"],
  "mappings": "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",
  "names": ["promise", "getRenderableDestinations", "setHydrationTransitionState", "animateHydrationReveal", "updatePoints", "refreshDestinationUi", "pauseAutoRotate", "resumeAutoRotateAfterIdle", "registerUserInteraction", "trackSectionEvent", "trackThrottledSectionEvent", "buildClusterAnalyticsPayload", "trackSelection", "syncPanelScrollStateDeferred", "getTapLogSignature", "rememberResolvedSelection", "shouldIgnoreLabelClick", "resolveSingleTapSelection", "selectLabelCluster", "findNearestVisibleCluster", "getNearbyPreviewScreenRadius", "buildNearbyPreviewCluster", "clearPinnedSelection", "focusCluster", "syncSize", "stage"]
}
