{
  "version": 3,
  "sources": ["/cdn/shop/t/497/assets/citation-system.js?cb=202606191607"],
  "sourcesContent": ["/**\n * PLEKIFY CITATION SYSTEM\n * JavaScript functionality for citation popovers\n *\n * Features:\n * - Viewport-aware popover positioning (above/below)\n * - Touch device detection with bottom sheet\n * - Keyboard navigation (Tab, Enter, Escape)\n * - Click-outside dismiss\n * - Hover bridge for mouse users\n * - ARIA accessibility support\n * - Dynamic content from data attributes\n *\n * @version 1.0.0\n * @date 2026-03-31\n */\n\n// TODO \u2014 VERIFY URL before publishing:\n// GEO1, DR1, OTA1, SS1, IM1, CUR1\n\nwindow.PLEKIFY_CITATIONS = {\n  \"C1\": {\n    source: \"Baymard Institute\",\n    url: \"https://baymard.com/lists/cart-abandonment-rate\",\n    date: \"2024\",\n    excerpt: \"Cart abandonment 70.19%; $260B recoverable; 22% cite too long/complicated checkout\",\n    type: \"external\"\n  },\n  \"B1\": {\n    favicon: \"https://www.google.com/s2/favicons?domain=shopify.com&sz=16\",\n    source: \"Shopify\",\n    url: \"https://www.shopify.com/blog/shop-pay-checkout\",\n    date: \"2024\",\n    excerpt: \"Shop Pay up to 50% higher conversion; 4\u00D7 faster mobile; +5% presence lift\",\n    type: \"external\"\n  },\n  \"B2\": {\n    source: \"Chargeflow\",\n    url: \"https://www.chargeflow.io/blog/shop-pay-statistics\",\n    date: \"2025\",\n    excerpt: \"Shop Pay 100M+ pre-saved buyers (conservative; estimates 150\u2013200M)\",\n    type: \"external\"\n  },\n  \"C4\": {\n    source: \"Baymard Institute\",\n    url: \"https://baymard.com/checkout-usability\",\n    date: \"2024\",\n    excerpt: \"Avg checkout 11.3 fields (8 needed); forced account = 19% abandonment; 35% abandon over coupon field; 42% mistype split name\",\n    type: \"external\"\n  },\n  \"GEO1\": {\n    source: \"Plekify synthesis of Gemini Deep Research (Baymard + GEO research)\",\n    url: \"\",\n    date: \"2026\",\n    excerpt: \"Each extra pre-price step \u22128\u201312% CVR; structured/fact-dense content earns 30\u201340% higher AI citation rates\",\n    type: \"secondary\"\n  },\n  \"DR1\": {\n    source: \"Gemini Deep Research (usability synthesis)\",\n    url: \"\",\n    date: \"2026\",\n    excerpt: \"Domain redirect 15\u201322% entry-point drop-off; 23% abandon over off-domain payment trust\",\n    type: \"secondary\"\n  },\n  \"OTA1\": {\n    source: \"Gemini Deep Research (SADC distribution; Tanda Tula worked example)\",\n    url: \"\",\n    date: \"2026\",\n    excerpt: \"OTA commission 15\u201330%; safari/DMC 25\u201345%; lodge retains 40\u201355% of gross; R10,000 rack \u2192 ~R486 retained\",\n    type: \"secondary\"\n  },\n  \"SM1\": {\n    favicon: \"https://www.google.com/s2/favicons?domain=siteminder.com&sz=16\",\n    source: \"SiteMinder\",\n    url: \"https://www.siteminder.com/\",\n    date: \"2025\",\n    excerpt: \"Direct ABV $516 vs OTA $312; cancellation 10.6% vs 21.8%; direct LTV ~1.73\u00D7 OTA; +$246.84 net per shifted booking\",\n    type: \"external\"\n  },\n  \"H1\": {\n    source: \"SaleCycle / Statista\",\n    url: \"https://www.salecycle.com/resources/stats/cart-abandonment-stats-and-trends/\",\n    date: \"2024\",\n    excerpt: \"Travel cart abandonment 80.8% avg (vs 70.2% retail); hotel 80\u201385%\",\n    type: \"external\"\n  },\n  \"SS1\": {\n    source: \"Gemini Deep Research (on-site search synthesis)\",\n    url: \"\",\n    date: \"2026\",\n    excerpt: \"On-site search users convert up to 3\u00D7; 92% complete after a successful search; 81% abandon after a failed one\",\n    type: \"secondary\"\n  },\n  \"IM1\": {\n    source: \"Gemini Deep Research (immersive-media case studies)\",\n    url: \"\",\n    date: \"2026\",\n    excerpt: \"Listings with 3D/virtual tours report ~46% higher booking conversion and up to 10\u00D7 dwell time\",\n    type: \"secondary\"\n  },\n  \"CUR1\": {\n    source: \"Gemini Deep Research (Shopify Markets synthesis)\",\n    url: \"\",\n    date: \"2026\",\n    excerpt: \"92% prefer native currency; 33% abandon USD-only; Shopify Markets lifts intl conversion up to 40%\",\n    type: \"secondary\"\n  },\n  \"A1\": {\n    favicon: \"https://www.google.com/s2/favicons?domain=techcrunch.com&sz=16\",\n    source: \"TechCrunch\",\n    url: \"https://techcrunch.com/2025/11/04/shopify-says-ai-traffic-is-up-7x-since-january-ai-driven-orders-are-up-11x/\",\n    date: \"November 2025\",\n    excerpt: \"AI traffic to Shopify up 7\u00D7 since Jan 2025\",\n    type: \"external\"\n  },\n  \"A2\": {\n    favicon: \"https://www.google.com/s2/favicons?domain=pymnts.com&sz=16\",\n    source: \"PYMNTS\",\n    url: \"https://www.pymnts.com/artificial-intelligence-2/2025/shopify-ai-driven-orders-surge-1100/\",\n    date: \"November 2025\",\n    excerpt: \"AI-driven orders up 11\u00D7\",\n    type: \"external\"\n  },\n  \"D1\": {\n    source: \"CNBC\",\n    url: \"https://www.cnbc.com/2026/03/openai-instant-checkout-discontinued.html\",\n    date: \"March 2026\",\n    excerpt: \"OpenAI discontinued Instant Checkout (Mar 2026); Walmart ~3\u00D7 lower conversion; ~12 merchants integrated\",\n    type: \"external\"\n  },\n  \"UCP1\": {\n    favicon: \"https://www.google.com/s2/favicons?domain=shopify.com&sz=16\",\n    source: \"Shopify Engineering / UCP announcement\",\n    url: \"https://www.shopify.com/news\",\n    date: \"2026\",\n    excerpt: \"UCP (Google + Shopify, early 2026) lets agents transact; merchant stays Merchant of Record\",\n    type: \"external\"\n  },\n  \"T1\": {\n    favicon: \"https://www.google.com/s2/favicons?domain=phocuswire.com&sz=16\",\n    source: \"Phocuswright\",\n    url: \"https://www.phocuswright.com/\",\n    date: \"2026\",\n    excerpt: \"56% of travellers used AI to plan (Phocuswright 2026), up from 24%; only 8% trust it almost always\",\n    type: \"external\"\n  },\n  \"E1\": {\n    source: \"Plekify Booking Friction Study\",\n    url: \"/pages/friction-study\",\n    date: \"June 2026\",\n    excerpt: \"Phase 5b results: Plekify friction score 4.2; 94% success rate; 0 domain handoffs. 276 runs, 23 properties, 5 PMS platforms.\",\n    type: \"internal\"\n  },\n  \"E4\": {\n    source: \"Plekify Booking Friction Study\",\n    url: \"/pages/friction-study\",\n    date: \"June 2026\",\n    excerpt: \"4 clicks to payment in Study B checkout; 3.5 average across all successful runs\",\n    type: \"internal\"\n  },\n  \"K1\": {\n    favicon: \"https://www.google.com/s2/favicons?domain=kalibrilabs.com&sz=16\",\n    source: \"Kalibri Labs\",\n    url: \"https://kalibrilabs.com/cope-framework\",\n    date: \"2024\",\n    excerpt: \"Direct booking revenue retention 95.82%; OTA booking revenue retention 82.06% (COPE Framework).\",\n    type: \"external\"\n  },\n  \"S1\": {\n    source: \"TechCrunch / Shopify\",\n    url: \"https://techcrunch.com/2025/11/04/shopify-says-ai-traffic-is-up-7x-since-january-ai-driven-orders-are-up-11x/\",\n    date: \"November 2025\",\n    excerpt: \"AI-driven orders on Shopify up 11\u00D7 since January 2025.\",\n    type: \"external\"\n  },\n  \"A2\": {\n    source: \"PYMNTS\",\n    url: \"https://www.pymnts.com/artificial-intelligence-2/2025/shopify-ai-driven-orders-surge-1100/\",\n    date: \"November 2025\",\n    excerpt: \"AI-driven orders on Shopify up 11\u00D7 over the same period.\",\n    type: \"external\"\n  },\n  \"AGS1\": {\n    favicon: \"https://www.google.com/s2/favicons?domain=shopify.com&sz=16\",\n    source: \"Shopify\",\n    url: \"https://help.shopify.com/en/manual/products/shopify-agentic-storefronts\",\n    date: \"2026\",\n    excerpt: \"Agentic Storefronts surface products inside ChatGPT, Perplexity, Google AI Mode, Gemini, and Copilot.\",\n    type: \"external\"\n  },\n  \"UCP1\": {\n    source: \"Shopify / Google\",\n    url: \"https://www.shopify.com/news/shopify-and-google-launch-universal-commerce-protocol\",\n    date: \"January 2026\",\n    excerpt: \"Universal Commerce Protocol lets AI agents query live inventory and complete purchases while the merchant remains the Merchant of Record.\",\n    type: \"external\"\n  },\n  \"PCI1\": {\n    source: \"Shopify\",\n    url: \"https://www.shopify.com/security\",\n    date: \"2026\",\n    excerpt: \"Shopify Checkout is PCI DSS Level 1 compliant.\",\n    type: \"external\"\n  },\n  \"CUR1\": {\n    source: \"Shopify Markets\",\n    url: \"https://www.shopify.com/markets\",\n    date: \"2026\",\n    excerpt: \"Shopify supports 130+ currencies and localised pricing via Shopify Markets.\",\n    type: \"external\"\n  },\n  \"APP1\": {\n    source: \"Shopify App Store\",\n    url: \"https://apps.shopify.com\",\n    date: \"2026\",\n    excerpt: \"The Shopify App Store contains thousands of managed apps with centralised security, versioning, and review processes.\",\n    type: \"external\"\n  },\n  \"T1\": {\n    source: \"Phocuswright\",\n    url: \"https://www.phocuswire.com/news/online/shift-travel-behavior-ai-surge-phocuswright-research\",\n    date: \"2025\u20132026\",\n    excerpt: \"56% of U.S. travellers used AI for trip planning, booking, or in-destination aid.\",\n    type: \"external\"\n  },\n  \"HW1\": {\n    favicon: \"https://www.google.com/s2/favicons?domain=hospitalitynet.org&sz=16\",\n    source: \"HotelWorld AI / HospitalityNet\",\n    url: \"https://www.hospitalitynet.org/whitepaper/4131059/\",\n    date: \"2025\",\n    excerpt: \"Only 16% of global hotel supply is visible in AI-generated search results.\",\n    type: \"external\"\n  },\n  \"MR1\": {\n    source: \"Plekify analysis\",\n    url: \"/pages/friction-study\",\n    date: \"June 2026\",\n    excerpt: \"When a PMS acts as the merchant of record, the transaction and guest data are captured on the PMS domain, not the property's.\",\n    type: \"internal\"\n  },\n  \"cloudbeds-cancel\": {\n    favicon: \"https://www.google.com/s2/favicons?domain=cloudbeds.com&sz=16\",\n    source: \"Cloudbeds\",\n    url: \"https://www.cloudbeds.com/articles/2026-hotels-report-reveal/\",\n    date: \"2026\",\n    excerpt: \"Direct booking cancellation rate 10.6%; OTA cancellation rate 21.8% \u2014 more than double (Cloudbeds 2026 State of Independent Hotels Report).\",\n    type: \"external\"\n  },\n  \"shop-pay-250m\": {\n    source: \"Shopify\",\n    url: \"https://help.shopify.com/en/manual/payments/shop-pay/shop-pay-on-any-platform\",\n    date: \"2025\",\n    excerpt: \"Shop Pay has 250 million+ stored payment profiles. Returning buyers can complete checkout with a single tap \u2014 no card entry.\",\n    favicon: \"https://www.google.com/s2/favicons?domain=shopify.com&sz=16\",\n    type: \"external\"\n  },\n  \"shop-pay-speed\": {\n    source: \"BCG / Shopify\",\n    url: \"https://www.bcg.com/publications/2023/leading-online-shoppers-to-the-finish-line\",\n    date: \"May 2023\",\n    excerpt: \"Shop Pay median checkout time: 8.2 seconds. Standard guest checkout: 34.5 seconds. (BCG + Shopify joint study.)\",\n    favicon: \"https://www.google.com/s2/favicons?domain=bcg.com&sz=16\",\n    type: \"external\"\n  },\n  \"baymard-complex\": {\n    source: \"Baymard Institute\",\n    url: \"https://baymard.com/lists/cart-abandonment-rate\",\n    date: \"2024\",\n    excerpt: \"18% of shoppers abandon checkout because it is too long or complicated. A further 11% abandon when their preferred payment method is not available.\",\n    favicon: \"https://www.google.com/s2/favicons?domain=baymard.com&sz=16\",\n    type: \"external\"\n  },\n  \"kalibri-retain\": {\n    favicon: \"https://www.google.com/s2/favicons?domain=kalibrilabs.com&sz=16\",\n    source: \"Kalibri Labs\",\n    url: \"https://kalibrilabs.com/cope-framework\",\n    date: \"2025\",\n    excerpt: \"Revenue retention by channel (COPE Framework): Voice 95.82%, Brand.com 94.87%, OTA 82.06%. Direct channel retains 12.81 points more revenue per booking than OTA.\",\n    type: \"external\"\n  }\n};\n\n(function() {\n  'use strict';\n\n  // Configuration\n  const CONFIG = {\n    hoverDelay: 150,           // ms before showing popover on hover\n    hoverBridgeTime: 300,      // ms grace period when moving to popover\n    animationDuration: 200,    // ms for fade animation\n    viewportPadding: 16,       // px from viewport edges\n    mobileBreakpoint: 768,     // px threshold for mobile behavior\n    bottomSheetThreshold: 100  // px from bottom to trigger below positioning\n  };\n\n  // State management\n  let activePopover = null;\n  let activeMarker = null;\n  let hoverTimeout = null;\n  let bridgeTimeout = null;\n  let isTouchDevice = false;\n  let bottomSheet = null;\n  let sheetOverlay = null;\n\n  /**\n   * Initialize the citation system\n   */\n  function init() {\n    // Detect touch device\n    isTouchDevice = detectTouchDevice();\n\n    // Create mobile bottom sheet if needed\n    if (isTouchDevice || window.innerWidth < CONFIG.mobileBreakpoint) {\n      createBottomSheet();\n    }\n\n    // Bind events to all citation markers\n    bindCitationEvents();\n\n    // Global event listeners\n    document.addEventListener('click', handleOutsideClick);\n    document.addEventListener('keydown', handleKeydown);\n    window.addEventListener('resize', handleResize);\n    window.addEventListener('scroll', handleScroll, { passive: true });\n\n    // Re-initialize on dynamic content (for Shopify sections)\n    observeDynamicContent();\n  }\n\n  /**\n   * Detect if device supports touch\n   */\n  function detectTouchDevice() {\n    return (\n      'ontouchstart' in window ||\n      navigator.maxTouchPoints > 0 ||\n      navigator.msMaxTouchPoints > 0\n    );\n  }\n\n  /**\n   * Create the mobile bottom sheet elements\n   */\n  function createBottomSheet() {\n    // Only create once\n    if (document.querySelector('.citation-bottom-sheet')) return;\n\n    // Overlay\n    sheetOverlay = document.createElement('div');\n    sheetOverlay.className = 'citation-sheet-overlay';\n    sheetOverlay.setAttribute('aria-hidden', 'true');\n    sheetOverlay.addEventListener('click', closeBottomSheet);\n\n    // Bottom sheet container\n    bottomSheet = document.createElement('div');\n    bottomSheet.className = 'citation-bottom-sheet';\n    bottomSheet.setAttribute('role', 'dialog');\n    bottomSheet.setAttribute('aria-modal', 'true');\n    bottomSheet.setAttribute('aria-label', 'Citation details');\n\n    // Close button\n    const closeBtn = document.createElement('button');\n    closeBtn.className = 'citation-sheet-close';\n    closeBtn.setAttribute('aria-label', 'Close citation');\n    closeBtn.innerHTML = '&times;';\n    closeBtn.addEventListener('click', closeBottomSheet);\n\n    // Content container\n    const content = document.createElement('div');\n    content.className = 'citation-sheet-content';\n\n    bottomSheet.appendChild(closeBtn);\n    bottomSheet.appendChild(content);\n    document.body.appendChild(sheetOverlay);\n    document.body.appendChild(bottomSheet);\n  }\n\n  /**\n   * Bind events to citation markers\n   */\n  function bindCitationEvents() {\n    const markers = document.querySelectorAll('[data-citation], [data-citation-id]');\n\n    markers.forEach(marker => {\n      // Skip if already initialized\n      if (marker.hasAttribute('data-citation-init')) return;\n      marker.setAttribute('data-citation-init', 'true');\n\n      // Make focusable if not already\n      if (!marker.hasAttribute('tabindex')) {\n        marker.setAttribute('tabindex', '0');\n      }\n\n      // Add ARIA attributes\n      marker.setAttribute('role', 'button');\n      marker.setAttribute('aria-expanded', 'false');\n      marker.setAttribute('aria-haspopup', 'dialog');\n\n      // Get or create popover\n      const popover = findOrCreatePopover(marker);\n      if (popover) {\n        const popoverId = popover.id || generateId('citation-popover');\n        popover.id = popoverId;\n        marker.setAttribute('aria-controls', popoverId);\n      }\n\n      // Ensure the marker uses the pill-style attribute expected by CSS\n      if (!marker.hasAttribute('data-citation-id') && marker.hasAttribute('data-citation')) {\n        marker.setAttribute('data-citation-id', marker.getAttribute('data-citation'));\n      }\n\n      if (isTouchDevice || window.innerWidth < CONFIG.mobileBreakpoint) {\n        // Touch: tap to open bottom sheet\n        marker.addEventListener('click', handleTouchClick);\n        marker.addEventListener('touchend', handleTouchClick);\n      } else {\n        // Mouse: hover behavior\n        marker.addEventListener('mouseenter', handleMouseEnter);\n        marker.addEventListener('mouseleave', handleMouseLeave);\n        marker.addEventListener('focus', handleFocus);\n        marker.addEventListener('blur', handleBlur);\n        marker.addEventListener('click', handleMarkerClick);\n      }\n\n      // Keyboard for both\n      marker.addEventListener('keydown', handleMarkerKeydown);\n    });\n  }\n\n  /**\n   * Check if a popover has meaningful content\n   */\n  function hasPopoverContent(popover) {\n    return !!(popover.querySelector('.citation-header, .citation-header-internal') || popover.querySelector('.citation-excerpt'));\n  }\n\n  /**\n   * Find existing popover or create from data attributes\n   */\n  function findOrCreatePopover(marker) {\n    // Check for sibling popover inside marker\n    let popover = marker.querySelector('.citation-popover');\n    if (popover) {\n      if (hasPopoverContent(popover)) {\n        return popover;\n      }\n      popover.remove();\n    }\n\n    // Check for next sibling\n    popover = marker.nextElementSibling;\n    if (popover && popover.classList.contains('citation-popover')) {\n      if (hasPopoverContent(popover)) {\n        return popover;\n      }\n      popover.remove();\n    }\n\n    // Create from data attributes\n    const citationId = marker.getAttribute('data-citation-id') || marker.getAttribute('data-citation');\n    const citationData = getCitationData(citationId);\n\n    if (citationData) {\n      popover = createPopoverElement(citationData);\n      marker.appendChild(popover);\n      return popover;\n    }\n\n    return null;\n  }\n\n  /**\n   * Get citation data from registry or data attributes\n   */\n  function getCitationData(citationId) {\n    // Check global registry first (set by Liquid)\n    if (window.PLEKIFY_CITATIONS && window.PLEKIFY_CITATIONS[citationId]) {\n      return window.PLEKIFY_CITATIONS[citationId];\n    }\n\n    // Check for inline data attributes\n    const marker = document.querySelector(`[data-citation-id=\"${citationId}\"], [data-citation=\"${citationId}\"]`);\n    if (marker) {\n      return {\n        id: citationId,\n        source: marker.getAttribute('data-source') || '',\n        url: marker.getAttribute('data-url') || '',\n        date: marker.getAttribute('data-date') || '',\n        excerpt: marker.getAttribute('data-excerpt') || '',\n        favicon: marker.getAttribute('data-favicon') || '',\n        type: marker.getAttribute('data-type') || 'external'\n      };\n    }\n\n    return null;\n  }\n\n  /**\n   * Create popover DOM element\n   */\n  function createPopoverElement(data) {\n    const popover = document.createElement('div');\n    popover.className = `citation-popover citation-${data.type || 'external'}`;\n    popover.setAttribute('role', 'tooltip');\n    popover.setAttribute('aria-hidden', 'true');\n\n    let html = '';\n\n    var headerClass = data.type === 'internal' ? 'citation-header-internal' : 'citation-header';\n\n    // Header with favicon and source\n    html += '<div class=\"' + headerClass + '\">';\n    if (data.favicon) {\n      html += '<img src=\"' + escapeHtml(data.favicon) + '\" alt=\"\" class=\"citation-favicon\" width=\"16\" height=\"16\" loading=\"lazy\">';\n    }\n    html += '<span class=\"citation-source\">' + escapeHtml(data.source) + '</span>';\n    if (data.date) {\n      html += '<span class=\"citation-date\">' + escapeHtml(data.date) + '</span>';\n    }\n    html += '</div>';\n\n    // Excerpt\n    if (data.excerpt) {\n      html += '<div class=\"citation-excerpt\">' + escapeHtml(data.excerpt) + '</div>';\n    }\n\n    // Link\n    if (data.url) {\n      html += '<a href=\"' + escapeHtml(data.url) + '\" class=\"citation-link\" target=\"_blank\" rel=\"noopener\">View source &rarr;</a>';\n    }\n\n    popover.innerHTML = html;\n    return popover;\n  }\n\n  /**\n   * Handle mouse enter on marker\n   */\n  function handleMouseEnter(event) {\n    const marker = event.currentTarget;\n    clearTimeout(hoverTimeout);\n    clearTimeout(bridgeTimeout);\n\n    hoverTimeout = setTimeout(() => {\n      showPopover(marker);\n    }, CONFIG.hoverDelay);\n  }\n\n  /**\n   * Handle mouse leave on marker\n   */\n  function handleMouseLeave(event) {\n    clearTimeout(hoverTimeout);\n\n    // Bridge timeout for moving to popover\n    bridgeTimeout = setTimeout(() => {\n      const popover = activePopover;\n      if (popover && !popover.matches(':hover')) {\n        hidePopover();\n      }\n    }, CONFIG.hoverBridgeTime);\n  }\n\n  /**\n   * Handle focus on marker\n   */\n  function handleFocus(event) {\n    const marker = event.currentTarget;\n    showPopover(marker);\n  }\n\n  /**\n   * Handle blur on marker\n   */\n  function handleBlur(event) {\n    // Delay to check if focus moved to popover\n    setTimeout(() => {\n      if (activePopover && !activePopover.contains(document.activeElement)) {\n        hidePopover();\n      }\n    }, 10);\n  }\n\n  /**\n   * Handle click on marker (desktop)\n   */\n  function handleMarkerClick(event) {\n    event.preventDefault();\n    const marker = event.currentTarget;\n\n    if (activeMarker === marker && activePopover) {\n      hidePopover();\n    } else {\n      showPopover(marker);\n    }\n  }\n\n  /**\n   * Handle touch click (mobile)\n   */\n  function handleTouchClick(event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    const marker = event.currentTarget;\n    const citationId = marker.getAttribute('data-citation-id') || marker.getAttribute('data-citation');\n    const citationData = getCitationData(citationId);\n\n    if (citationData) {\n      openBottomSheet(citationData, marker);\n    }\n  }\n\n  /**\n   * Handle keydown on marker\n   */\n  function handleMarkerKeydown(event) {\n    const marker = event.currentTarget;\n\n    switch (event.key) {\n      case 'Enter':\n      case ' ':\n        event.preventDefault();\n        if (isTouchDevice || window.innerWidth < CONFIG.mobileBreakpoint) {\n          handleTouchClick(event);\n        } else {\n          if (activeMarker === marker && activePopover) {\n            hidePopover();\n          } else {\n            showPopover(marker);\n          }\n        }\n        break;\n\n      case 'Escape':\n        if (activePopover) {\n          hidePopover();\n          marker.focus();\n        }\n        break;\n    }\n  }\n\n  /**\n   * Show popover for a marker\n   */\n  function showPopover(marker) {\n    // Hide any existing popover\n    if (activePopover && activeMarker !== marker) {\n      hidePopover();\n    }\n\n    const popover = findOrCreatePopover(marker);\n    if (!popover) return;\n\n    // Position the popover\n    positionPopover(marker, popover);\n\n    // Show with animation\n    popover.classList.add('is-visible');\n    popover.setAttribute('aria-hidden', 'false');\n    marker.setAttribute('aria-expanded', 'true');\n\n    // Set up popover hover events\n    popover.addEventListener('mouseenter', handlePopoverEnter);\n    popover.addEventListener('mouseleave', handlePopoverLeave);\n\n    activePopover = popover;\n    activeMarker = marker;\n  }\n\n  /**\n   * Hide the active popover\n   */\n  function hidePopover() {\n    if (!activePopover) return;\n\n    activePopover.classList.remove('is-visible');\n    activePopover.setAttribute('aria-hidden', 'true');\n\n    if (activeMarker) {\n      activeMarker.setAttribute('aria-expanded', 'false');\n    }\n\n    // Remove popover events\n    activePopover.removeEventListener('mouseenter', handlePopoverEnter);\n    activePopover.removeEventListener('mouseleave', handlePopoverLeave);\n\n    activePopover = null;\n    activeMarker = null;\n  }\n\n  /**\n   * Position popover relative to marker\n   */\n  function positionPopover(marker, popover) {\n    const markerRect = marker.getBoundingClientRect();\n    const popoverRect = popover.getBoundingClientRect();\n    const viewportHeight = window.innerHeight;\n    const viewportWidth = window.innerWidth;\n\n    // Reset positioning classes\n    popover.classList.remove('position-below');\n\n    // Calculate available space\n    const spaceAbove = markerRect.top;\n    const spaceBelow = viewportHeight - markerRect.bottom;\n    const popoverHeight = popoverRect.height || 150; // Estimate if not rendered\n\n    // Determine vertical position\n    if (spaceAbove < popoverHeight + CONFIG.viewportPadding &&\n        spaceBelow > spaceAbove) {\n      // Position below\n      popover.classList.add('position-below');\n    }\n\n    // Horizontal positioning handled by CSS (centered on marker)\n    // But check for edge overflow\n    const markerCenter = markerRect.left + (markerRect.width / 2);\n    const popoverWidth = popoverRect.width || 280;\n    const halfWidth = popoverWidth / 2;\n\n    if (markerCenter - halfWidth < CONFIG.viewportPadding) {\n      // Too close to left edge\n      popover.style.left = `${CONFIG.viewportPadding - markerRect.left}px`;\n      popover.style.transform = 'none';\n    } else if (markerCenter + halfWidth > viewportWidth - CONFIG.viewportPadding) {\n      // Too close to right edge\n      popover.style.left = 'auto';\n      popover.style.right = `${markerRect.right - viewportWidth + CONFIG.viewportPadding}px`;\n      popover.style.transform = 'none';\n    } else {\n      // Reset to default centered positioning\n      popover.style.left = '';\n      popover.style.right = '';\n      popover.style.transform = '';\n    }\n  }\n\n  /**\n   * Handle mouse enter on popover\n   */\n  function handlePopoverEnter() {\n    clearTimeout(bridgeTimeout);\n  }\n\n  /**\n   * Handle mouse leave on popover\n   */\n  function handlePopoverLeave() {\n    hidePopover();\n  }\n\n  /**\n   * Open mobile bottom sheet\n   */\n  function openBottomSheet(data, triggerElement) {\n    if (!bottomSheet || !sheetOverlay) {\n      createBottomSheet();\n    }\n\n    const content = bottomSheet.querySelector('.citation-sheet-content');\n\n    // Build content\n    let html = '';\n\n    // Header\n    html += '<div class=\"sheet-header\">';\n    if (data.favicon) {\n      html += `<img src=\"${escapeHtml(data.favicon)}\" alt=\"\" class=\"sheet-favicon\" width=\"24\" height=\"24\">`;\n    }\n    html += `<div class=\"sheet-source\">${escapeHtml(data.source)}</div>`;\n    if (data.date) {\n      html += `<div class=\"sheet-date\">${escapeHtml(data.date)}</div>`;\n    }\n    html += '</div>';\n\n    // Excerpt\n    if (data.excerpt) {\n      html += `<div class=\"sheet-excerpt\">${escapeHtml(data.excerpt)}</div>`;\n    }\n\n    // Link\n    if (data.url) {\n      html += `<a href=\"${escapeHtml(data.url)}\" class=\"sheet-link\" target=\"_blank\" rel=\"noopener\">View source &rarr;</a>`;\n    }\n\n    content.innerHTML = html;\n\n    // Show\n    sheetOverlay.classList.add('is-visible');\n    bottomSheet.classList.add('is-visible');\n    document.body.style.overflow = 'hidden';\n\n    // Focus management\n    bottomSheet.setAttribute('aria-hidden', 'false');\n    const closeBtn = bottomSheet.querySelector('.citation-sheet-close');\n    if (closeBtn) closeBtn.focus();\n\n    // Store trigger for focus return\n    bottomSheet.dataset.trigger = triggerElement ? 'true' : 'false';\n    if (triggerElement) {\n      window._citationTrigger = triggerElement;\n    }\n  }\n\n  /**\n   * Close mobile bottom sheet\n   */\n  function closeBottomSheet() {\n    if (!bottomSheet || !sheetOverlay) return;\n\n    sheetOverlay.classList.remove('is-visible');\n    bottomSheet.classList.remove('is-visible');\n    bottomSheet.setAttribute('aria-hidden', 'true');\n    document.body.style.overflow = '';\n\n    // Return focus\n    if (window._citationTrigger) {\n      window._citationTrigger.focus();\n      window._citationTrigger = null;\n    }\n  }\n\n  /**\n   * Handle click outside popover\n   */\n  function handleOutsideClick(event) {\n    if (!activePopover) return;\n\n    const target = event.target;\n\n    // Check if click is outside marker and popover\n    if (!activeMarker.contains(target) && !activePopover.contains(target)) {\n      hidePopover();\n    }\n  }\n\n  /**\n   * Handle global keydown\n   */\n  function handleKeydown(event) {\n    if (event.key === 'Escape') {\n      if (bottomSheet && bottomSheet.classList.contains('is-visible')) {\n        closeBottomSheet();\n      } else if (activePopover) {\n        hidePopover();\n        if (activeMarker) activeMarker.focus();\n      }\n    }\n  }\n\n  /**\n   * Handle window resize\n   */\n  function handleResize() {\n    // Close popover on resize to prevent positioning issues\n    if (activePopover) {\n      hidePopover();\n    }\n\n    // Check if we need to switch to mobile mode\n    const isMobile = window.innerWidth < CONFIG.mobileBreakpoint;\n    if (isMobile && !bottomSheet) {\n      createBottomSheet();\n    }\n  }\n\n  /**\n   * Handle scroll - reposition popover if visible\n   */\n  function handleScroll() {\n    if (activePopover && activeMarker) {\n      positionPopover(activeMarker, activePopover);\n    }\n  }\n\n  /**\n   * Observe for dynamically added citations\n   */\n  function observeDynamicContent() {\n    if (!window.MutationObserver) return;\n\n    const observer = new MutationObserver((mutations) => {\n      let shouldRebind = false;\n\n      mutations.forEach((mutation) => {\n        if (mutation.addedNodes.length) {\n          mutation.addedNodes.forEach((node) => {\n            if (node.nodeType === Node.ELEMENT_NODE) {\n              if (node.hasAttribute('data-citation') ||\n                  node.querySelector('[data-citation]')) {\n                shouldRebind = true;\n              }\n            }\n          });\n        }\n      });\n\n      if (shouldRebind) {\n        bindCitationEvents();\n      }\n    });\n\n    observer.observe(document.body, {\n      childList: true,\n      subtree: true\n    });\n  }\n\n  /**\n   * Generate unique ID\n   */\n  function generateId(prefix) {\n    return `${prefix}-${Math.random().toString(36).substr(2, 9)}`;\n  }\n\n  /**\n   * Escape HTML to prevent XSS\n   */\n  function escapeHtml(str) {\n    if (!str) return '';\n    const div = document.createElement('div');\n    div.textContent = str;\n    return div.innerHTML;\n  }\n\n  /**\n   * Public API\n   */\n  window.PlekifyCitations = {\n    init: init,\n    showPopover: function(citationId) {\n      const marker = document.querySelector(`[data-citation=\"${citationId}\"]`);\n      if (marker) showPopover(marker);\n    },\n    hidePopover: hidePopover,\n    closeBottomSheet: closeBottomSheet,\n    refresh: bindCitationEvents\n  };\n\n  // Auto-initialize on DOM ready\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n\n})();\n"],
  "mappings": "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",
  "names": []
}
