{
  "version": 3,
  "sources": ["/cdn/shop/t/19/assets/fudge-giveaway-reveal-final.js?fgv=20260703australia"],
  "sourcesContent": ["(function () {\n  const ACTIVE_ENDPOINT = \"https://script.google.com/macros/s/AKfycbyiqOAae0Wk8O546t71rp3lCieul563yc-nfFXZnYcQPO10RvnshBbBpnlpEiXPCNZa/exec\";\n  const RETIRED_ENDPOINT_ID = \"AKfycbxhtktkdKcqkWW9IgXgrygZF70HKxTNHkaHvRqgPQyXxNt1J0OQ1yxy1bL-vQs_K7kw_A\";\n  const STATIC_FALLBACK_WINNERS = [\n    {\n      rank: \"1\",\n      name: \"TW91c3RhZmEgR29tYWE=\",\n      detail: \"RlVER0UgZ2l2ZWF3YXkgd2lubmVy\",\n      prediction: \"\"\n    },\n    {\n      rank: \"2\",\n      name: \"T21uZXlhIHllaGlh\",\n      detail: \"RlVER0UgZ2l2ZWF3YXkgd2lubmVy\",\n      prediction: \"\"\n    },\n    {\n      rank: \"3\",\n      name: \"TW9oYW1lZCBsYXRlZg==\",\n      detail: \"RlVER0UgZ2l2ZWF3YXkgd2lubmVy\",\n      prediction: \"\"\n    }\n  ];\n  const PREVIEW_WINNERS = [\n    {\n      rank: \"1\",\n      name: \"Demo winner 1\",\n      detail: \"Animation preview\",\n      prediction: \"Egypt 2 - 1 Australia\"\n    },\n    {\n      rank: \"2\",\n      name: \"Demo winner 2\",\n      detail: \"Animation preview\",\n      prediction: \"Egypt 1 - 0 Australia\"\n    },\n    {\n      rank: \"3\",\n      name: \"Demo winner 3\",\n      detail: \"Animation preview\",\n      prediction: \"Egypt 3 - 2 Australia\"\n    }\n  ];\n  const ROULETTE_LABELS = [\n    \"Entry sealed\",\n    \"Prediction locked\",\n    \"Egypt pick\",\n    \"Australia pick\",\n    \"Scoreline checked\",\n    \"Eligibility checked\",\n    \"Final whistle\",\n    \"Winner pending\"\n  ];\n  const ACTIVE_MATCH = {\n    label: \"Egypt vs Australia\",\n    home: \"Egypt\",\n    away: \"Australia\"\n  };\n  const forms = Array.from(document.querySelectorAll(\"[data-fudge-giveaway-form]\"));\n\n  if (!forms.length) {\n    initPasswordGuards();\n    applyActiveMatch(document);\n    initPredictionWidgets();\n    initClosedVoteAnimation(document);\n    initWinnerReveal(document);\n    return;\n  }\n\n  function toHex(buffer) {\n    return Array.from(new Uint8Array(buffer)).map(function (value) {\n      return value.toString(16).padStart(2, \"0\");\n    }).join(\"\");\n  }\n\n  async function sha256(value) {\n    const encoder = new TextEncoder();\n    const buffer = await window.crypto.subtle.digest(\"SHA-256\", encoder.encode(value));\n    return toHex(buffer);\n  }\n\n  function revealGuardedContent(guard, shouldPersist) {\n    const key = guard.dataset.unlockKey || \"nottoys:fudge-giveaway-unlocked\";\n    const screen = guard.querySelector(\"[data-fudge-password-screen]\");\n    const content = guard.querySelector(\"[data-fudge-protected-content]\");\n    const title = guard.querySelector(\".fg-giveaway__title\");\n\n    if (shouldPersist) {\n      try {\n        window.localStorage.setItem(key, \"true\");\n      } catch (error) {\n        // Unlock still works for the current page if storage is unavailable.\n      }\n    }\n\n    if (screen) {\n      screen.hidden = true;\n    }\n\n    if (content) {\n      content.hidden = false;\n      content.removeAttribute(\"inert\");\n    }\n\n    guard.classList.remove(\"fg-giveaway--locked\");\n    guard.classList.add(\"fg-giveaway--unlocked\");\n    initClosedVoteAnimation(content || guard);\n    initWinnerReveal(content || guard);\n\n    if (title && shouldPersist) {\n      title.setAttribute(\"tabindex\", \"-1\");\n      title.focus({ preventScroll: true });\n    }\n  }\n\n  function initPasswordGuards() {\n    const guards = Array.from(document.querySelectorAll(\"[data-fudge-password-guard]\"));\n\n    guards.forEach(function (guard) {\n      const key = guard.dataset.unlockKey || \"nottoys:fudge-giveaway-unlocked\";\n      const hash = (guard.dataset.passwordHash || \"\").trim().toLowerCase();\n      const form = guard.querySelector(\"[data-fudge-password-form]\");\n      const input = guard.querySelector(\"[data-fudge-password-input]\");\n      const status = guard.querySelector(\"[data-fudge-password-status]\");\n\n      try {\n        if (window.localStorage.getItem(key) === \"true\") {\n          revealGuardedContent(guard, false);\n          return;\n        }\n      } catch (error) {\n        // Continue with the password screen.\n      }\n\n      if (!hash || !form || !input) {\n        revealGuardedContent(guard, false);\n        return;\n      }\n\n      input.focus({ preventScroll: true });\n\n      form.addEventListener(\"submit\", async function (event) {\n        event.preventDefault();\n\n        if (form.dataset.unlocked === \"true\") {\n          return;\n        }\n\n        if (!window.crypto || !window.crypto.subtle) {\n          if (status) {\n            status.textContent = guard.dataset.passwordError || \"Password check is unavailable in this browser.\";\n          }\n\n          return;\n        }\n\n        form.dataset.checking = \"true\";\n\n        try {\n          const attemptedHash = await sha256(input.value);\n\n          if (attemptedHash === hash) {\n            const button = form.querySelector(\".fg-guard__button\");\n\n            input.value = \"\";\n            form.dataset.unlocked = \"true\";\n            guard.classList.remove(\"fg-guard--error\");\n            guard.classList.add(\"fg-giveaway--unlocking\");\n\n            if (button) {\n              button.disabled = true;\n            }\n\n            if (status) {\n              status.textContent = \"Access granted.\";\n            }\n\n            window.setTimeout(function () {\n              revealGuardedContent(guard, true);\n            }, 980);\n\n            return;\n          }\n\n          guard.classList.remove(\"fg-guard--error\");\n          window.setTimeout(function () {\n            guard.classList.add(\"fg-guard--error\");\n          }, 0);\n          window.setTimeout(function () {\n            guard.classList.remove(\"fg-guard--error\");\n          }, 720);\n\n          if (status) {\n            status.textContent = guard.dataset.passwordError || \"That password did not match. Please try again.\";\n          }\n\n          input.select();\n        } finally {\n          form.dataset.checking = \"false\";\n        }\n      });\n    });\n  }\n\n  function getStorageKey(form) {\n    const matchField = form.querySelector('[name=\"match_label\"]');\n    const matchLabel = (matchField && matchField.value) || ACTIVE_MATCH.label;\n    const matchKey = matchLabel.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\");\n\n    return form.dataset.storageKey || \"nottoys:fudge-giveaway:\" + window.location.pathname + \":\" + matchKey;\n  }\n\n  function normalizeEndpoint(form) {\n    const endpoint = form.dataset.endpoint || form.getAttribute(\"action\") || \"\";\n\n    if (!endpoint || endpoint.indexOf(RETIRED_ENDPOINT_ID) !== -1) {\n      form.dataset.endpoint = ACTIVE_ENDPOINT;\n      form.dataset.endpointVersion = \"prediction-v3\";\n      form.setAttribute(\"action\", ACTIVE_ENDPOINT);\n    }\n  }\n\n  function getDeviceKey(form) {\n    return form.dataset.deviceKey || \"nottoys:fudge-giveaway-device\";\n  }\n\n  function createDeviceId() {\n    if (window.crypto && window.crypto.randomUUID) {\n      return window.crypto.randomUUID();\n    }\n\n    return String(Date.now()) + \"-\" + Math.random().toString(36).slice(2);\n  }\n\n  function getDeviceId(key) {\n    try {\n      const existingId = window.localStorage.getItem(key);\n\n      if (existingId) {\n        return existingId;\n      }\n\n      const newId = createDeviceId();\n      window.localStorage.setItem(key, newId);\n      return newId;\n    } catch (error) {\n      return \"\";\n    }\n  }\n\n  function readEntry(key) {\n    try {\n      return window.localStorage.getItem(key);\n    } catch (error) {\n      return null;\n    }\n  }\n\n  function saveEntry(key, email, phone) {\n    try {\n      window.localStorage.setItem(key, JSON.stringify({\n        email: email,\n        phone: phone,\n        submittedAt: new Date().toISOString()\n      }));\n    } catch (error) {\n      // Storage can be unavailable in private browsing; submission should still work.\n    }\n  }\n\n  function getPredictionOutcome(homeTeam, awayTeam, homeScore, awayScore) {\n    const home = Number(homeScore);\n    const away = Number(awayScore);\n\n    if (home > away) {\n      return homeTeam + \" win\";\n    }\n\n    if (away > home) {\n      return awayTeam + \" win\";\n    }\n\n    return \"Draw\";\n  }\n\n  function syncPredictionWidget(widget) {\n    const homeTeam = widget.dataset.homeTeam || \"Egypt\";\n    const awayTeam = widget.dataset.awayTeam || \"Australia\";\n    const homeScore = widget.querySelector('[data-fudge-prediction-score=\"home\"]');\n    const awayScore = widget.querySelector('[data-fudge-prediction-score=\"away\"]');\n    const resultField = widget.querySelector(\"[data-fudge-prediction-result]\");\n    const scorelineField = widget.querySelector(\"[data-fudge-prediction-scoreline]\");\n    const summary = widget.querySelector(\"[data-fudge-prediction-summary]\");\n    const homeValue = homeScore ? homeScore.value : \"\";\n    const awayValue = awayScore ? awayScore.value : \"\";\n\n    if (!homeValue || !awayValue) {\n      widget.dataset.result = \"pending\";\n\n      if (resultField) {\n        resultField.value = \"\";\n      }\n\n      if (scorelineField) {\n        scorelineField.value = \"\";\n      }\n\n      if (summary) {\n        summary.textContent = widget.dataset.pendingMessage || \"Choose both scores to lock your prediction.\";\n      }\n\n      return;\n    }\n\n    const result = getPredictionOutcome(homeTeam, awayTeam, homeValue, awayValue);\n    const scoreline = homeTeam + \" \" + homeValue + \" - \" + awayValue + \" \" + awayTeam;\n\n    if (Number(homeValue) > Number(awayValue)) {\n      widget.dataset.result = \"home\";\n    } else if (Number(awayValue) > Number(homeValue)) {\n      widget.dataset.result = \"away\";\n    } else {\n      widget.dataset.result = \"draw\";\n    }\n\n    if (resultField) {\n      resultField.value = result;\n    }\n\n    if (scorelineField) {\n      scorelineField.value = scoreline;\n    }\n\n    if (summary) {\n      summary.textContent = result + \" - \" + scoreline;\n    }\n  }\n\n  function syncPredictionForForm(form) {\n    const widget = form.querySelector(\"[data-fudge-prediction]\");\n\n    if (widget) {\n      syncPredictionWidget(widget);\n    }\n  }\n\n  function initPredictionWidgets() {\n    const widgets = Array.from(document.querySelectorAll(\"[data-fudge-prediction]\"));\n\n    widgets.forEach(function (widget) {\n      const scores = Array.from(widget.querySelectorAll(\"[data-fudge-prediction-score]\"));\n\n      scores.forEach(function (score) {\n        score.addEventListener(\"change\", function () {\n          syncPredictionWidget(widget);\n        });\n      });\n\n      syncPredictionWidget(widget);\n    });\n  }\n\n  function setPredictionField(root, name, value) {\n    const field = root.querySelector('[name=\"' + name + '\"]');\n\n    if (field) {\n      field.value = value;\n    }\n  }\n\n  function setTeamText(team, value) {\n    const name = team && team.querySelector(\".fg-scoreboard__name\");\n    const label = team && team.querySelector(\".fg-scoreboard__score-label\");\n\n    if (name) {\n      name.textContent = value;\n    }\n\n    if (label) {\n      label.textContent = value + \" score\";\n    }\n  }\n\n  function applyActiveMatch(scope) {\n    Array.from(scope.querySelectorAll(\"[data-fudge-prediction]\")).forEach(function (widget) {\n      widget.dataset.homeTeam = ACTIVE_MATCH.home;\n      widget.dataset.awayTeam = ACTIVE_MATCH.away;\n      setPredictionField(widget, \"match_label\", ACTIVE_MATCH.label);\n      setPredictionField(widget, \"prediction_home_team\", ACTIVE_MATCH.home);\n      setPredictionField(widget, \"prediction_away_team\", ACTIVE_MATCH.away);\n      setTeamText(widget.querySelector('[data-fudge-prediction-team=\"home\"]'), ACTIVE_MATCH.home);\n      setTeamText(widget.querySelector('[data-fudge-prediction-team=\"away\"]'), ACTIVE_MATCH.away);\n      syncPredictionWidget(widget);\n    });\n\n    Array.from(scope.querySelectorAll(\".fg-closed__match\")).forEach(function (match) {\n      const home = match.querySelector(\".fg-closed__team--home strong\");\n      const away = match.querySelector(\".fg-closed__team--away strong\");\n\n      match.setAttribute(\"aria-label\", ACTIVE_MATCH.label);\n\n      if (home) {\n        home.textContent = ACTIVE_MATCH.home;\n      }\n\n      if (away) {\n        away.textContent = ACTIVE_MATCH.away;\n      }\n    });\n  }\n\n  function initClosedVoteAnimation(root) {\n    const scope = root && root.querySelectorAll ? root : document;\n    const blocks = Array.from(scope.querySelectorAll(\"[data-fudge-closed-vote]\"));\n\n    if (!blocks.length || typeof Element === \"undefined\" || !Element.prototype.animate) {\n      return;\n    }\n\n    if (window.matchMedia && window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) {\n      return;\n    }\n\n    blocks.forEach(function (block) {\n      if (block.dataset.closedAnimated === \"true\" || block.closest(\"[hidden]\")) {\n        return;\n      }\n\n      block.dataset.closedAnimated = \"true\";\n\n      Array.from(block.querySelectorAll(\"[data-fudge-closed-stagger]\")).forEach(function (item, index) {\n        item.animate([\n          { opacity: 0, transform: \"translateY(16px) scale(0.985)\" },\n          { opacity: 1, transform: \"translateY(0) scale(1)\" }\n        ], {\n          duration: 720,\n          delay: 120 + index * 95,\n          easing: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n          fill: \"both\"\n        });\n      });\n\n      Array.from(block.querySelectorAll(\"[data-fudge-closed-light]\")).forEach(function (item, index) {\n        item.animate([\n          { filter: \"brightness(1)\", transform: \"translateY(0)\" },\n          { filter: \"brightness(1.08)\", transform: \"translateY(-2px)\" },\n          { filter: \"brightness(1)\", transform: \"translateY(0)\" }\n        ], {\n          duration: 1800 + index * 120,\n          delay: index * 140,\n          easing: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n          iterations: Infinity\n        });\n      });\n    });\n  }\n\n  function prefersReducedMotion() {\n    return Boolean(window.matchMedia && window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches);\n  }\n\n  function delay(ms) {\n    return new Promise(function (resolve) {\n      window.setTimeout(resolve, ms);\n    });\n  }\n\n  function setRevealStatus(panel, message) {\n    const status = panel.querySelector(\"[data-fudge-reveal-status]\");\n\n    if (status && status.textContent !== message) {\n      status.textContent = message;\n    }\n  }\n\n  function setRevealBadge(panel, label) {\n    const badge = panel.querySelector(\"[data-fudge-reveal-badge]\");\n\n    if (badge && badge.textContent !== label) {\n      badge.textContent = label;\n    }\n  }\n\n  function setRevealState(panel, state, message) {\n    panel.dataset.revealState = state;\n\n    if (state === \"countdown\") {\n      setRevealBadge(panel, \"Countdown\");\n    } else if (state === \"revealing\") {\n      setRevealBadge(panel, \"Drawing\");\n    } else if (state === \"complete\") {\n      setRevealBadge(panel, \"Revealed\");\n    } else if (state === \"retry\") {\n      setRevealBadge(panel, \"Retry\");\n    }\n\n    if (message) {\n      setRevealStatus(panel, message);\n    }\n  }\n\n  function setRetryBusy(panel, isBusy) {\n    const retry = panel.querySelector(\"[data-fudge-reveal-retry]\");\n\n    if (!retry) {\n      return;\n    }\n\n    retry.disabled = isBusy;\n    retry.setAttribute(\"aria-busy\", isBusy ? \"true\" : \"false\");\n  }\n\n  function setRetryVisible(panel, isVisible) {\n    const retry = panel.querySelector(\"[data-fudge-reveal-retry]\");\n\n    if (retry) {\n      retry.hidden = !isVisible;\n    }\n  }\n\n  function setCountdownValue(panel, unit, value) {\n    const node = panel.querySelector('[data-fudge-countdown-value=\"' + unit + '\"]');\n\n    if (node) {\n      node.textContent = String(Math.max(0, value)).padStart(2, \"0\");\n    }\n  }\n\n  function updateCountdown(panel, remainingMs) {\n    const totalSeconds = Math.max(0, Math.floor(remainingMs / 1000));\n    const days = Math.floor(totalSeconds / 86400);\n    const hours = Math.floor(totalSeconds % 86400 / 3600);\n    const minutes = Math.floor(totalSeconds % 3600 / 60);\n    const seconds = totalSeconds % 60;\n\n    setCountdownValue(panel, \"days\", days);\n    setCountdownValue(panel, \"hours\", hours);\n    setCountdownValue(panel, \"minutes\", minutes);\n    setCountdownValue(panel, \"seconds\", seconds);\n  }\n\n  function clearRevealTimer(panel) {\n    const timerId = Number(panel.dataset.revealTimerId || 0);\n\n    if (timerId) {\n      window.clearInterval(timerId);\n      panel.dataset.revealTimerId = \"\";\n    }\n  }\n\n  function firstText(values) {\n    for (let index = 0; index < values.length; index += 1) {\n      if (values[index] === null || values[index] === undefined) {\n        continue;\n      }\n\n      const value = String(values[index]).trim();\n\n      if (value) {\n        return value;\n      }\n    }\n\n    return \"\";\n  }\n\n  function createNotReadyError() {\n    const error = new Error(\"Winner reveal data is not ready.\");\n    error.isNotReady = true;\n    return error;\n  }\n\n  function isPreviewAnimationMode() {\n    try {\n      return new URLSearchParams(window.location.search).get(\"preview_animation\") === \"1\";\n    } catch (error) {\n      return false;\n    }\n  }\n\n  function buildRevealUrl(panel) {\n    const endpoint = (panel.dataset.endpoint || \"\").trim();\n\n    if (!endpoint) {\n      throw createNotReadyError();\n    }\n\n    const url = new URL(endpoint, window.location.href);\n\n    url.searchParams.set(\"action\", panel.dataset.revealAction || \"winners\");\n    url.searchParams.set(\"mode\", \"reveal\");\n    url.searchParams.set(\"giveaway\", panel.dataset.giveaway || \"FUDGE World Cup 2026 giveaway\");\n    url.searchParams.set(\"winner_count\", panel.dataset.winnerCount || \"2\");\n    url.searchParams.set(\"reveal_at\", panel.dataset.revealAt || \"\");\n    url.searchParams.set(\"eligibility_cutoff\", panel.dataset.eligibilityCutoff || \"\");\n    url.searchParams.set(\"t\", String(Date.now()));\n\n    return url.toString();\n  }\n\n  async function fetchWinnerPayload(panel) {\n    if (!window.fetch) {\n      throw new Error(\"Fetch is not available.\");\n    }\n\n    const response = await fetch(buildRevealUrl(panel), {\n      method: \"GET\",\n      cache: \"no-store\",\n      headers: {\n        \"Accept\": \"application/json\"\n      }\n    });\n\n    if (!response.ok) {\n      throw new Error(\"Winner reveal request failed.\");\n    }\n\n    const text = await response.text();\n    const payload = JSON.parse(text);\n\n    if (!payload || payload.ok === false) {\n      throw createNotReadyError();\n    }\n\n    return payload;\n  }\n\n  function decodeStaticFallbackText(value) {\n    try {\n      const binary = window.atob(String(value || \"\"));\n      const bytes = Uint8Array.from(binary, function (character) {\n        return character.charCodeAt(0);\n      });\n\n      return new TextDecoder().decode(bytes);\n    } catch (error) {\n      return \"\";\n    }\n  }\n\n  function buildStaticFallbackPayload(count) {\n    const winners = STATIC_FALLBACK_WINNERS.slice(0, count).map(function (winner) {\n      return {\n        rank: winner.rank,\n        name: decodeStaticFallbackText(winner.name),\n        detail: decodeStaticFallbackText(winner.detail),\n        prediction: decodeStaticFallbackText(winner.prediction),\n        prize: decodeStaticFallbackText(winner.detail)\n      };\n    });\n\n    return {\n      ok: true,\n      source: \"static-fallback\",\n      entrants: ROULETTE_LABELS.map(function (label) {\n        return { label: label };\n      }),\n      winners: winners\n    };\n  }\n\n  function buildPreviewPayload(count) {\n    return {\n      ok: true,\n      source: \"preview-animation\",\n      entrants: ROULETTE_LABELS.map(function (label) {\n        return { label: label };\n      }),\n      winners: PREVIEW_WINNERS.slice(0, count)\n    };\n  }\n\n  async function fetchStaticFallbackPayload(count) {\n    return buildStaticFallbackPayload(count);\n  }\n\n  function getWinnerArray(payload) {\n    const candidates = [\n      payload,\n      payload && payload.winners,\n      payload && payload.revealedWinners,\n      payload && payload.revealed_winners,\n      payload && payload.prizeWinners,\n      payload && payload.data && payload.data.winners,\n      payload && payload.result && payload.result.winners,\n      payload && payload.results && payload.results.winners\n    ];\n\n    for (let index = 0; index < candidates.length; index += 1) {\n      if (Array.isArray(candidates[index])) {\n        return candidates[index];\n      }\n    }\n\n    if (payload && payload.winner && typeof payload.winner === \"object\") {\n      return [payload.winner];\n    }\n\n    return [];\n  }\n\n  function normalizeWinner(entry, index) {\n    if (typeof entry === \"string\") {\n      return {\n        rank: String(index + 1),\n        name: entry,\n        detail: \"\",\n        prediction: \"\",\n        prize: \"FUDGE giveaway winner\"\n      };\n    }\n\n    const winner = entry || {};\n    const rank = firstText([winner.rank, winner.position, winner.place]) || String(index + 1);\n    const name = firstText([\n      winner.displayName,\n      winner.display_name,\n      winner.winnerName,\n      winner.winner_name,\n      winner.customerName,\n      winner.customer_name,\n      winner.fullName,\n      winner.full_name,\n      winner.label,\n      winner.name\n    ]) || \"Winner \" + String(index + 1);\n    const detail = firstText([\n      winner.displayContact,\n      winner.display_contact,\n      winner.maskedContact,\n      winner.masked_contact,\n      winner.maskedEmail,\n      winner.masked_email,\n      winner.maskedPhone,\n      winner.masked_phone,\n      winner.contact\n    ]);\n    const prediction = firstText([\n      winner.predictionScoreline,\n      winner.prediction_scoreline,\n      winner.scoreline,\n      winner.prediction,\n      winner.predictedResult,\n      winner.predicted_result,\n      winner.match\n    ]);\n    const prize = firstText([winner.prize, winner.title]) || \"FUDGE giveaway winner\";\n\n    return {\n      rank: rank,\n      name: name,\n      detail: detail,\n      prediction: prediction,\n      prize: prize\n    };\n  }\n\n  function extractWinners(payload, count) {\n    return getWinnerArray(payload).map(function (entry, index) {\n      return normalizeWinner(entry, index);\n    }).filter(function (winner) {\n      return Boolean(winner && winner.name);\n    }).slice(0, count);\n  }\n\n  function getRevealEntrantLabels(payload, winners) {\n    const candidates = [\n      payload && payload.entrants,\n      payload && payload.entries,\n      payload && payload.roulette,\n      payload && payload.data && payload.data.entrants\n    ];\n    const labels = [];\n\n    candidates.forEach(function (candidate) {\n      if (!Array.isArray(candidate)) {\n        return;\n      }\n\n      candidate.forEach(function (entry) {\n        const label = typeof entry === \"string\"\n          ? entry\n          : firstText([\n            entry && entry.label,\n            entry && entry.displayName,\n            entry && entry.display_name,\n            entry && entry.name\n          ]);\n\n        if (label) {\n          labels.push(label);\n        }\n      });\n    });\n\n    winners.forEach(function (winner) {\n      if (winner && winner.name) {\n        labels.push(winner.name);\n      }\n    });\n\n    return labels.length ? labels : ROULETTE_LABELS;\n  }\n\n  function createWinnerCard(winner, index) {\n    const card = document.createElement(\"article\");\n    const rank = document.createElement(\"span\");\n    const name = document.createElement(\"h4\");\n    const detail = document.createElement(\"p\");\n    const prediction = document.createElement(\"p\");\n\n    card.className = \"fg-winner-card\";\n    card.setAttribute(\"data-fudge-winner-card\", \"\");\n\n    rank.className = \"fg-winner-card__rank\";\n    rank.textContent = \"Winner \" + (winner.rank || String(index + 1));\n    card.appendChild(rank);\n\n    name.className = \"fg-winner-card__name\";\n    name.textContent = winner.name;\n    card.appendChild(name);\n\n    detail.className = \"fg-winner-card__detail\";\n    detail.textContent = winner.detail || winner.prize;\n    card.appendChild(detail);\n\n    if (winner.prediction) {\n      prediction.className = \"fg-winner-card__prediction\";\n      prediction.textContent = winner.prediction;\n      card.appendChild(prediction);\n    }\n\n    return card;\n  }\n\n  function playCelebrationBurst(panel) {\n    if (prefersReducedMotion()) {\n      return;\n    }\n\n    const previousBurst = panel.querySelector(\"[data-fudge-celebration-burst]\");\n    const burst = document.createElement(\"div\");\n    const colors = [\"#bd2339\", \"#ffffff\", \"#111111\", \"#d6a72f\", \"#1f7a50\"];\n    const pieces = 56;\n\n    if (previousBurst) {\n      previousBurst.remove();\n    }\n\n    burst.className = \"fg-celebration-burst\";\n    burst.setAttribute(\"data-fudge-celebration-burst\", \"\");\n    burst.setAttribute(\"aria-hidden\", \"true\");\n\n    for (let index = 0; index < pieces; index += 1) {\n      const piece = document.createElement(\"span\");\n      const angle = ((Math.PI * 2) / pieces) * index + (index % 5) * 0.07;\n      const radius = 64 + (index % 10) * 12;\n      const x = Math.cos(angle) * radius;\n      const y = Math.sin(angle) * radius * 0.72 + (index % 2 === 0 ? -14 : 14);\n\n      piece.className = \"fg-celebration-burst__piece\";\n      piece.style.setProperty(\"--fg-piece-x\", x.toFixed(1) + \"px\");\n      piece.style.setProperty(\"--fg-piece-y\", y.toFixed(1) + \"px\");\n      piece.style.setProperty(\"--fg-piece-rotate\", ((index * 53) % 360) + \"deg\");\n      piece.style.setProperty(\"--fg-piece-delay\", ((index % 14) * 18) + \"ms\");\n      piece.style.setProperty(\"--fg-piece-scale\", (0.74 + (index % 5) * 0.09).toFixed(2));\n      piece.style.setProperty(\"--fg-piece-color\", colors[index % colors.length]);\n      burst.appendChild(piece);\n    }\n\n    panel.appendChild(burst);\n    window.setTimeout(function () {\n      burst.remove();\n    }, 1900);\n  }\n\n  function clearRevealSuspense(panel) {\n    if (Array.isArray(panel._fudgeSuspenseTimers)) {\n      panel._fudgeSuspenseTimers.forEach(function (timerId) {\n        window.clearTimeout(timerId);\n      });\n    }\n\n    panel._fudgeSuspenseTimers = [];\n    delete panel.dataset.revealPhase;\n  }\n\n  function queueRevealSuspense(panel, duration) {\n    const stages = [\n      {\n        at: 0,\n        phase: \"entries\",\n        message: \"Locking the eligible entries...\"\n      },\n      {\n        at: Math.round(duration * 0.34),\n        phase: \"shuffle\",\n        message: \"Shuffling the final draw...\"\n      },\n      {\n        at: Math.round(duration * 0.72),\n        phase: \"final\",\n        message: \"Final whistle. Names are locking in...\"\n      }\n    ];\n\n    clearRevealSuspense(panel);\n\n    if (prefersReducedMotion()) {\n      panel.dataset.revealPhase = \"entries\";\n      setRevealStatus(panel, stages[0].message);\n      return;\n    }\n\n    stages.forEach(function (stage) {\n      const runStage = function () {\n        panel.dataset.revealPhase = stage.phase;\n        setRevealStatus(panel, stage.message);\n      };\n\n      if (stage.at <= 0) {\n        runStage();\n        return;\n      }\n\n      panel._fudgeSuspenseTimers.push(window.setTimeout(runStage, stage.at));\n    });\n  }\n\n  async function playNameLock(panel) {\n    const roulette = panel.querySelector(\"[data-fudge-roulette]\");\n    const slots = Array.from(panel.querySelectorAll(\"[data-fudge-roulette-slot]\"));\n\n    panel.dataset.revealPhase = \"locked\";\n    setRevealStatus(panel, \"Names locked. Revealing winners...\");\n\n    if (prefersReducedMotion() || typeof Element === \"undefined\" || !Element.prototype.animate) {\n      await delay(340);\n      return;\n    }\n\n    if (roulette) {\n      roulette.animate([\n        { filter: \"brightness(1)\", transform: \"translateY(0) scale(1)\" },\n        { filter: \"brightness(1.35)\", transform: \"translateY(-3px) scale(1.015)\" },\n        { filter: \"brightness(1)\", transform: \"translateY(0) scale(1)\" }\n      ], {\n        duration: 680,\n        easing: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n        fill: \"both\"\n      });\n    }\n\n    slots.forEach(function (slot, index) {\n      slot.animate([\n        { transform: \"scale(1)\", filter: \"brightness(1)\" },\n        { transform: \"scale(1.08)\", filter: \"brightness(1.24)\" },\n        { transform: \"scale(1)\", filter: \"brightness(1)\" }\n      ], {\n        duration: 620,\n        delay: index * 90,\n        easing: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n        fill: \"both\"\n      });\n    });\n\n    await delay(720);\n  }\n\n  function playFinalWhistle(panel) {\n    if (prefersReducedMotion() || typeof Element === \"undefined\" || !Element.prototype.animate) {\n      return;\n    }\n\n    const whistle = panel.querySelector(\"[data-fudge-final-whistle]\");\n    const cards = Array.from(panel.querySelectorAll(\"[data-fudge-winner-card]\"));\n    const badge = panel.querySelector(\"[data-fudge-reveal-badge]\");\n\n    panel.animate([\n      { transform: \"translateY(0) scale(1)\" },\n      { transform: \"translateY(-4px) scale(1.014)\" },\n      { transform: \"translateY(0) scale(1)\" }\n    ], {\n      duration: 720,\n      easing: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n      fill: \"both\"\n    });\n\n    if (badge) {\n      badge.animate([\n        { transform: \"scale(1)\", filter: \"brightness(1)\" },\n        { transform: \"scale(1.08)\", filter: \"brightness(1.25)\" },\n        { transform: \"scale(1)\", filter: \"brightness(1)\" }\n      ], {\n        duration: 820,\n        easing: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n        fill: \"both\"\n      });\n    }\n\n    if (whistle) {\n      whistle.animate([\n        { opacity: 1, transform: \"translate(-50%, -50%) scale(1)\" },\n        { opacity: 1, transform: \"translate(-50%, -50%) scale(1.42)\" },\n        { opacity: 0, transform: \"translate(-50%, -50%) scale(1.72)\" }\n      ], {\n        duration: 520,\n        easing: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n        fill: \"both\"\n      });\n    }\n\n    cards.forEach(function (card, index) {\n      card.animate([\n        { opacity: 0, transform: \"translateY(28px) scale(0.92) rotateX(10deg)\" },\n        { opacity: 1, offset: 0.72, transform: \"translateY(-4px) scale(1.025) rotateX(0deg)\" },\n        { opacity: 1, transform: \"translateY(0) scale(1) rotateX(0deg)\" }\n      ], {\n        duration: 760,\n        delay: 90 + index * 150,\n        easing: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n        fill: \"both\"\n      });\n    });\n  }\n\n  function renderWinners(panel, winners) {\n    const winnersNode = panel.querySelector(\"[data-fudge-reveal-winners]\");\n    const roulette = panel.querySelector(\"[data-fudge-roulette]\");\n    const ticker = panel.closest(\"[data-fudge-closed-vote]\")?.querySelector(\".fg-closed__ticker span\");\n\n    if (!winnersNode) {\n      return;\n    }\n\n    winnersNode.innerHTML = \"\";\n    winnersNode.setAttribute(\"aria-live\", \"polite\");\n    winnersNode.hidden = false;\n\n    winners.forEach(function (winner, index) {\n      winnersNode.appendChild(createWinnerCard(winner, index));\n    });\n\n    if (roulette) {\n      roulette.hidden = true;\n    }\n\n    clearRevealSuspense(panel);\n    winnersNode.hidden = false;\n    setRetryVisible(panel, false);\n    setRetryBusy(panel, false);\n    const winnerNames = winners.map(function (winner) {\n      return winner.name;\n    }).filter(Boolean);\n    const successMessage = winnerNames\n      ? \"Winners revealed: \" + formatWinnerNames(winnerNames) + \".\"\n      : panel.dataset.successMessage || \"Winners revealed.\";\n\n    if (ticker) {\n      ticker.textContent = \"Winners are revealed. Congratulations to the selected winners.\";\n    }\n\n    setRevealState(panel, \"complete\", successMessage);\n    playCelebrationBurst(panel);\n    playFinalWhistle(panel);\n  }\n\n  function formatWinnerNames(names) {\n    if (names.length <= 1) {\n      return names[0] || \"\";\n    }\n\n    if (names.length === 2) {\n      return names[0] + \" and \" + names[1];\n    }\n\n    return names.slice(0, -1).join(\", \") + \", and \" + names[names.length - 1];\n  }\n\n  function startRoulette(panel) {\n    const roulette = panel.querySelector(\"[data-fudge-roulette]\");\n    const slots = Array.from(panel.querySelectorAll(\"[data-fudge-roulette-slot]\"));\n    const animations = [];\n    let tick = 0;\n\n    if (!roulette) {\n      return function () {};\n    }\n\n    roulette.hidden = false;\n\n    if (prefersReducedMotion()) {\n      slots.forEach(function (slot, index) {\n        slot.textContent = index === 0 ? \"Checking list\" : \"Final whistle\";\n      });\n\n      return function (winners) {\n        slots.forEach(function (slot, index) {\n          if (winners && winners[index]) {\n            slot.textContent = winners[index].name;\n          }\n        });\n      };\n    }\n\n    const tickRoulette = function () {\n      const labels = panel._fudgeRouletteLabels || ROULETTE_LABELS;\n\n      slots.forEach(function (slot, index) {\n        slot.textContent = labels[(tick + index * 3) % labels.length];\n      });\n\n      tick += 1;\n    };\n\n    tickRoulette();\n    const intervalId = window.setInterval(tickRoulette, 54);\n\n    if (typeof Element !== \"undefined\" && Element.prototype.animate) {\n      animations.push(roulette.animate([\n        { transform: \"translateY(0) scale(1)\" },\n        { transform: \"translateY(-4px) scale(1.012)\" },\n        { transform: \"translateY(0) scale(1)\" }\n      ], {\n        duration: 520,\n        easing: \"ease-in-out\",\n        iterations: Infinity\n      }));\n\n      slots.forEach(function (slot, index) {\n        animations.push(slot.animate([\n          { opacity: 0.72, transform: \"translateY(4px)\" },\n          { opacity: 1, transform: \"translateY(0)\" },\n          { opacity: 0.72, transform: \"translateY(-4px)\" }\n        ], {\n          duration: 260 + index * 40,\n          easing: \"ease-in-out\",\n          iterations: Infinity\n        }));\n      });\n    }\n\n    return function (winners) {\n      window.clearInterval(intervalId);\n      animations.forEach(function (animation) {\n        animation.cancel();\n      });\n\n      slots.forEach(function (slot, index) {\n        if (winners && winners[index]) {\n          slot.textContent = winners[index].name;\n        }\n      });\n    };\n  }\n\n  function setRevealRetry(panel, error) {\n    const roulette = panel.querySelector(\"[data-fudge-roulette]\");\n    const winners = panel.querySelector(\"[data-fudge-reveal-winners]\");\n    const message = error && error.isNotReady\n      ? panel.dataset.notReadyMessage\n      : panel.dataset.errorMessage;\n\n    if (roulette) {\n      roulette.hidden = true;\n    }\n\n    if (winners) {\n      winners.hidden = true;\n    }\n\n    setRetryBusy(panel, false);\n    setRetryVisible(panel, true);\n    clearRevealSuspense(panel);\n    setRevealState(panel, \"retry\", message || \"Winner reveal is not ready yet. Please retry in a moment.\");\n  }\n\n  async function beginWinnerReveal(panel, isRetry) {\n    if (panel.dataset.revealFetching === \"true\") {\n      return;\n    }\n\n    if (panel.dataset.revealStarted === \"true\" && !isRetry) {\n      return;\n    }\n\n    const isPreview = isPreviewAnimationMode();\n    const winnerCount = Number(panel.dataset.winnerCount || 2);\n    const configuredWinnerCount = Number.isFinite(winnerCount) && winnerCount > 0 ? winnerCount : 2;\n    const requiredWinners = isPreview ? configuredWinnerCount : STATIC_FALLBACK_WINNERS.length;\n    const startedAt = Date.now();\n    const minimumSpin = prefersReducedMotion() ? 0 : 2600;\n    let stopRoulette = function () {};\n\n    panel.dataset.revealStarted = \"true\";\n    panel.dataset.revealFetching = \"true\";\n    setRetryVisible(panel, false);\n    setRetryBusy(panel, true);\n    updateCountdown(panel, 0);\n    setRevealState(panel, \"revealing\", panel.dataset.fetchingMessage || panel.dataset.readyMessage || \"Checking the official winner list...\");\n    queueRevealSuspense(panel, minimumSpin);\n    stopRoulette = startRoulette(panel);\n\n    try {\n      const payload = isPreview\n        ? buildPreviewPayload(requiredWinners)\n        : await fetchStaticFallbackPayload(requiredWinners);\n      let winners = extractWinners(payload, requiredWinners);\n\n      if (winners.length < requiredWinners) {\n        throw createNotReadyError();\n      }\n\n      panel._fudgeRouletteLabels = getRevealEntrantLabels(payload, winners);\n      await delay(Math.max(0, minimumSpin - (Date.now() - startedAt)));\n      stopRoulette(winners);\n      await playNameLock(panel);\n      renderWinners(panel, winners);\n    } catch (error) {\n      await delay(Math.max(0, Math.min(1200, minimumSpin) - (Date.now() - startedAt)));\n      stopRoulette();\n      setRevealRetry(panel, error);\n    } finally {\n      panel.dataset.revealFetching = \"false\";\n    }\n  }\n\n  function syncRevealCountdown(panel, revealTime) {\n    if (panel.closest(\"[hidden]\")) {\n      return;\n    }\n\n    const remainingMs = isPreviewAnimationMode() ? 0 : revealTime - Date.now();\n\n    if (remainingMs > 0) {\n      updateCountdown(panel, remainingMs);\n      setRetryVisible(panel, false);\n      setRevealState(panel, \"countdown\", panel.dataset.countdownMessage || \"Winner reveal opens soon.\");\n      return;\n    }\n\n    clearRevealTimer(panel);\n    beginWinnerReveal(panel, false);\n  }\n\n  function initWinnerReveal(root) {\n    const scope = root && root.querySelectorAll ? root : document;\n    const panels = Array.from(scope.querySelectorAll(\"[data-fudge-winner-reveal]\"));\n\n    panels.forEach(function (panel) {\n      if (panel.dataset.winnerRevealReady === \"true\") {\n        return;\n      }\n\n      const revealTime = Date.parse(panel.dataset.revealAt || \"\");\n      const retry = panel.querySelector(\"[data-fudge-reveal-retry]\");\n\n      panel.dataset.winnerRevealReady = \"true\";\n\n      if (retry) {\n        retry.addEventListener(\"click\", function () {\n          beginWinnerReveal(panel, true);\n        });\n      }\n\n      if (!Number.isFinite(revealTime)) {\n        setRevealRetry(panel, createNotReadyError());\n        return;\n      }\n\n      syncRevealCountdown(panel, revealTime);\n\n      if (!isPreviewAnimationMode() && Date.now() < revealTime) {\n        panel.dataset.revealTimerId = String(window.setInterval(function () {\n          syncRevealCountdown(panel, revealTime);\n        }, 1000));\n      }\n    });\n  }\n\n  function setStatus(form, message, state) {\n    const status = form.querySelector(\"[data-fudge-giveaway-status]\");\n\n    if (!status) {\n      return;\n    }\n\n    status.textContent = message;\n    status.dataset.state = state || \"\";\n  }\n\n  function setBusy(form, isBusy) {\n    const button = form.querySelector(\"[data-fudge-giveaway-submit]\");\n\n    if (!button) {\n      return;\n    }\n\n    if (!button.dataset.defaultLabel) {\n      button.dataset.defaultLabel = button.textContent;\n    }\n\n    button.disabled = isBusy;\n    button.setAttribute(\"aria-busy\", isBusy ? \"true\" : \"false\");\n    button.textContent = isBusy ? form.dataset.loadingMessage : button.dataset.defaultLabel;\n  }\n\n  function complete(form, isSuccess) {\n    window.clearTimeout(Number(form.dataset.timeoutId || 0));\n    form.dataset.submitting = \"false\";\n    setBusy(form, false);\n\n    if (isSuccess) {\n      form.reset();\n      setStatus(form, form.dataset.successMessage, \"success\");\n      return;\n    }\n\n    setStatus(form, form.dataset.errorMessage, \"error\");\n  }\n\n  function showSuccess(form, message, shouldFocus) {\n    const entry = form.closest(\"[data-fudge-giveaway-entry]\");\n    const success = entry ? entry.querySelector(\"[data-fudge-giveaway-success]\") : null;\n    const successMessage = success ? success.querySelector(\"[data-fudge-giveaway-success-message]\") : null;\n\n    if (!entry || !success) {\n      setStatus(form, message, \"success\");\n      form.hidden = true;\n      return;\n    }\n\n    entry.classList.add(\"fg-entry--complete\");\n    form.hidden = true;\n    success.hidden = false;\n\n    if (successMessage) {\n      successMessage.textContent = message;\n    }\n\n    if (shouldFocus) {\n      success.focus({ preventScroll: true });\n    }\n  }\n\n  initPasswordGuards();\n  applyActiveMatch(document);\n  initPredictionWidgets();\n  initClosedVoteAnimation(document);\n  initWinnerReveal(document);\n\n  forms.forEach(function (form) {\n    normalizeEndpoint(form);\n\n    const storageKey = getStorageKey(form);\n    const deviceId = getDeviceId(getDeviceKey(form));\n    const deviceIdField = form.querySelector('[name=\"device_id\"]');\n\n    if (deviceIdField) {\n      deviceIdField.value = deviceId;\n    }\n\n    if (readEntry(storageKey)) {\n      showSuccess(form, form.dataset.alreadyEnteredMessage, false);\n    }\n\n    form.addEventListener(\"submit\", async function (event) {\n      const endpoint = form.dataset.endpoint;\n      event.preventDefault();\n\n      normalizeEndpoint(form);\n\n      if (form.dataset.submitting === \"true\" || readEntry(storageKey)) {\n        showSuccess(form, form.dataset.alreadyEnteredMessage, true);\n        return;\n      }\n\n      if (!endpoint) {\n        setStatus(form, form.dataset.notReadyMessage, \"error\");\n        return;\n      }\n\n      syncPredictionForForm(form);\n\n      if (!form.checkValidity()) {\n        return;\n      }\n\n      const pageUrl = form.querySelector('[name=\"page_url\"]');\n\n      if (pageUrl) {\n        pageUrl.value = window.location.href;\n      }\n\n      form.dataset.submitting = \"true\";\n      setStatus(form, \"\", \"\");\n      setBusy(form, true);\n\n      const timeoutId = window.setTimeout(function () {\n        if (form.dataset.submitting === \"true\") {\n          complete(form, false);\n        }\n      }, 12000);\n\n      form.dataset.timeoutId = String(timeoutId);\n\n      try {\n        const emailField = form.querySelector('[name=\"email\"]');\n        const phoneField = form.querySelector('[name=\"phone\"]');\n        const email = emailField ? emailField.value.trim().toLowerCase() : \"\";\n        const phone = phoneField ? phoneField.value.trim() : \"\";\n\n        await fetch(endpoint, {\n          method: \"POST\",\n          mode: \"no-cors\",\n          headers: {\n            \"Content-Type\": \"application/x-www-form-urlencoded\"\n          },\n          body: new URLSearchParams(new FormData(form)).toString(),\n          keepalive: true\n        });\n\n        window.clearTimeout(Number(form.dataset.timeoutId || 0));\n        form.dataset.submitting = \"false\";\n        saveEntry(storageKey, email, phone);\n        setBusy(form, false);\n        form.reset();\n        showSuccess(form, form.dataset.successMessage, true);\n      } catch (error) {\n        complete(form, false);\n      }\n    });\n  });\n})();\n"],
  "mappings": "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",
  "names": []
}
