{
  "version": 3,
  "sources": ["../../../node_modules/canvas-confetti/dist/confetti.module.mjs", "../../../static_src/js/pages/docs.js"],
  "sourcesContent": ["// canvas-confetti v1.9.4 built on 2025-10-25T05:14:56.640Z\nvar module = {};\n\n// source content\n/* globals Map */\n\n(function main(global, module, isWorker, workerSize) {\n  var canUseWorker = !!(\n    global.Worker &&\n    global.Blob &&\n    global.Promise &&\n    global.OffscreenCanvas &&\n    global.OffscreenCanvasRenderingContext2D &&\n    global.HTMLCanvasElement &&\n    global.HTMLCanvasElement.prototype.transferControlToOffscreen &&\n    global.URL &&\n    global.URL.createObjectURL);\n\n  var canUsePaths = typeof Path2D === 'function' && typeof DOMMatrix === 'function';\n  var canDrawBitmap = (function () {\n    // this mostly supports ssr\n    if (!global.OffscreenCanvas) {\n      return false;\n    }\n\n    try {\n      var canvas = new OffscreenCanvas(1, 1);\n      var ctx = canvas.getContext('2d');\n      ctx.fillRect(0, 0, 1, 1);\n      var bitmap = canvas.transferToImageBitmap();\n      ctx.createPattern(bitmap, 'no-repeat');\n    } catch (e) {\n      return false;\n    }\n\n    return true;\n  })();\n\n  function noop() {}\n\n  // create a promise if it exists, otherwise, just\n  // call the function directly\n  function promise(func) {\n    var ModulePromise = module.exports.Promise;\n    var Prom = ModulePromise !== void 0 ? ModulePromise : global.Promise;\n\n    if (typeof Prom === 'function') {\n      return new Prom(func);\n    }\n\n    func(noop, noop);\n\n    return null;\n  }\n\n  var bitmapMapper = (function (skipTransform, map) {\n    // see https://github.com/catdad/canvas-confetti/issues/209\n    // creating canvases is actually pretty expensive, so we should create a\n    // 1:1 map for bitmap:canvas, so that we can animate the confetti in\n    // a performant manner, but also not store them forever so that we don't\n    // have a memory leak\n    return {\n      transform: function(bitmap) {\n        if (skipTransform) {\n          return bitmap;\n        }\n\n        if (map.has(bitmap)) {\n          return map.get(bitmap);\n        }\n\n        var canvas = new OffscreenCanvas(bitmap.width, bitmap.height);\n        var ctx = canvas.getContext('2d');\n        ctx.drawImage(bitmap, 0, 0);\n\n        map.set(bitmap, canvas);\n\n        return canvas;\n      },\n      clear: function () {\n        map.clear();\n      }\n    };\n  })(canDrawBitmap, new Map());\n\n  var raf = (function () {\n    var TIME = Math.floor(1000 / 60);\n    var frame, cancel;\n    var frames = {};\n    var lastFrameTime = 0;\n\n    if (typeof requestAnimationFrame === 'function' && typeof cancelAnimationFrame === 'function') {\n      frame = function (cb) {\n        var id = Math.random();\n\n        frames[id] = requestAnimationFrame(function onFrame(time) {\n          if (lastFrameTime === time || lastFrameTime + TIME - 1 < time) {\n            lastFrameTime = time;\n            delete frames[id];\n\n            cb();\n          } else {\n            frames[id] = requestAnimationFrame(onFrame);\n          }\n        });\n\n        return id;\n      };\n      cancel = function (id) {\n        if (frames[id]) {\n          cancelAnimationFrame(frames[id]);\n        }\n      };\n    } else {\n      frame = function (cb) {\n        return setTimeout(cb, TIME);\n      };\n      cancel = function (timer) {\n        return clearTimeout(timer);\n      };\n    }\n\n    return { frame: frame, cancel: cancel };\n  }());\n\n  var getWorker = (function () {\n    var worker;\n    var prom;\n    var resolves = {};\n\n    function decorate(worker) {\n      function execute(options, callback) {\n        worker.postMessage({ options: options || {}, callback: callback });\n      }\n      worker.init = function initWorker(canvas) {\n        var offscreen = canvas.transferControlToOffscreen();\n        worker.postMessage({ canvas: offscreen }, [offscreen]);\n      };\n\n      worker.fire = function fireWorker(options, size, done) {\n        if (prom) {\n          execute(options, null);\n          return prom;\n        }\n\n        var id = Math.random().toString(36).slice(2);\n\n        prom = promise(function (resolve) {\n          function workerDone(msg) {\n            if (msg.data.callback !== id) {\n              return;\n            }\n\n            delete resolves[id];\n            worker.removeEventListener('message', workerDone);\n\n            prom = null;\n\n            bitmapMapper.clear();\n\n            done();\n            resolve();\n          }\n\n          worker.addEventListener('message', workerDone);\n          execute(options, id);\n\n          resolves[id] = workerDone.bind(null, { data: { callback: id }});\n        });\n\n        return prom;\n      };\n\n      worker.reset = function resetWorker() {\n        worker.postMessage({ reset: true });\n\n        for (var id in resolves) {\n          resolves[id]();\n          delete resolves[id];\n        }\n      };\n    }\n\n    return function () {\n      if (worker) {\n        return worker;\n      }\n\n      if (!isWorker && canUseWorker) {\n        var code = [\n          'var CONFETTI, SIZE = {}, module = {};',\n          '(' + main.toString() + ')(this, module, true, SIZE);',\n          'onmessage = function(msg) {',\n          '  if (msg.data.options) {',\n          '    CONFETTI(msg.data.options).then(function () {',\n          '      if (msg.data.callback) {',\n          '        postMessage({ callback: msg.data.callback });',\n          '      }',\n          '    });',\n          '  } else if (msg.data.reset) {',\n          '    CONFETTI && CONFETTI.reset();',\n          '  } else if (msg.data.resize) {',\n          '    SIZE.width = msg.data.resize.width;',\n          '    SIZE.height = msg.data.resize.height;',\n          '  } else if (msg.data.canvas) {',\n          '    SIZE.width = msg.data.canvas.width;',\n          '    SIZE.height = msg.data.canvas.height;',\n          '    CONFETTI = module.exports.create(msg.data.canvas);',\n          '  }',\n          '}',\n        ].join('\\n');\n        try {\n          worker = new Worker(URL.createObjectURL(new Blob([code])));\n        } catch (e) {\n          // eslint-disable-next-line no-console\n          typeof console !== 'undefined' && typeof console.warn === 'function' ? console.warn('\uD83C\uDF8A Could not load worker', e) : null;\n\n          return null;\n        }\n\n        decorate(worker);\n      }\n\n      return worker;\n    };\n  })();\n\n  var defaults = {\n    particleCount: 50,\n    angle: 90,\n    spread: 45,\n    startVelocity: 45,\n    decay: 0.9,\n    gravity: 1,\n    drift: 0,\n    ticks: 200,\n    x: 0.5,\n    y: 0.5,\n    shapes: ['square', 'circle'],\n    zIndex: 100,\n    colors: [\n      '#26ccff',\n      '#a25afd',\n      '#ff5e7e',\n      '#88ff5a',\n      '#fcff42',\n      '#ffa62d',\n      '#ff36ff'\n    ],\n    // probably should be true, but back-compat\n    disableForReducedMotion: false,\n    scalar: 1\n  };\n\n  function convert(val, transform) {\n    return transform ? transform(val) : val;\n  }\n\n  function isOk(val) {\n    return !(val === null || val === undefined);\n  }\n\n  function prop(options, name, transform) {\n    return convert(\n      options && isOk(options[name]) ? options[name] : defaults[name],\n      transform\n    );\n  }\n\n  function onlyPositiveInt(number){\n    return number < 0 ? 0 : Math.floor(number);\n  }\n\n  function randomInt(min, max) {\n    // [min, max)\n    return Math.floor(Math.random() * (max - min)) + min;\n  }\n\n  function toDecimal(str) {\n    return parseInt(str, 16);\n  }\n\n  function colorsToRgb(colors) {\n    return colors.map(hexToRgb);\n  }\n\n  function hexToRgb(str) {\n    var val = String(str).replace(/[^0-9a-f]/gi, '');\n\n    if (val.length < 6) {\n        val = val[0]+val[0]+val[1]+val[1]+val[2]+val[2];\n    }\n\n    return {\n      r: toDecimal(val.substring(0,2)),\n      g: toDecimal(val.substring(2,4)),\n      b: toDecimal(val.substring(4,6))\n    };\n  }\n\n  function getOrigin(options) {\n    var origin = prop(options, 'origin', Object);\n    origin.x = prop(origin, 'x', Number);\n    origin.y = prop(origin, 'y', Number);\n\n    return origin;\n  }\n\n  function setCanvasWindowSize(canvas) {\n    canvas.width = document.documentElement.clientWidth;\n    canvas.height = document.documentElement.clientHeight;\n  }\n\n  function setCanvasRectSize(canvas) {\n    var rect = canvas.getBoundingClientRect();\n    canvas.width = rect.width;\n    canvas.height = rect.height;\n  }\n\n  function getCanvas(zIndex) {\n    var canvas = document.createElement('canvas');\n\n    canvas.style.position = 'fixed';\n    canvas.style.top = '0px';\n    canvas.style.left = '0px';\n    canvas.style.pointerEvents = 'none';\n    canvas.style.zIndex = zIndex;\n\n    return canvas;\n  }\n\n  function ellipse(context, x, y, radiusX, radiusY, rotation, startAngle, endAngle, antiClockwise) {\n    context.save();\n    context.translate(x, y);\n    context.rotate(rotation);\n    context.scale(radiusX, radiusY);\n    context.arc(0, 0, 1, startAngle, endAngle, antiClockwise);\n    context.restore();\n  }\n\n  function randomPhysics(opts) {\n    var radAngle = opts.angle * (Math.PI / 180);\n    var radSpread = opts.spread * (Math.PI / 180);\n\n    return {\n      x: opts.x,\n      y: opts.y,\n      wobble: Math.random() * 10,\n      wobbleSpeed: Math.min(0.11, Math.random() * 0.1 + 0.05),\n      velocity: (opts.startVelocity * 0.5) + (Math.random() * opts.startVelocity),\n      angle2D: -radAngle + ((0.5 * radSpread) - (Math.random() * radSpread)),\n      tiltAngle: (Math.random() * (0.75 - 0.25) + 0.25) * Math.PI,\n      color: opts.color,\n      shape: opts.shape,\n      tick: 0,\n      totalTicks: opts.ticks,\n      decay: opts.decay,\n      drift: opts.drift,\n      random: Math.random() + 2,\n      tiltSin: 0,\n      tiltCos: 0,\n      wobbleX: 0,\n      wobbleY: 0,\n      gravity: opts.gravity * 3,\n      ovalScalar: 0.6,\n      scalar: opts.scalar,\n      flat: opts.flat\n    };\n  }\n\n  function updateFetti(context, fetti) {\n    fetti.x += Math.cos(fetti.angle2D) * fetti.velocity + fetti.drift;\n    fetti.y += Math.sin(fetti.angle2D) * fetti.velocity + fetti.gravity;\n    fetti.velocity *= fetti.decay;\n\n    if (fetti.flat) {\n      fetti.wobble = 0;\n      fetti.wobbleX = fetti.x + (10 * fetti.scalar);\n      fetti.wobbleY = fetti.y + (10 * fetti.scalar);\n\n      fetti.tiltSin = 0;\n      fetti.tiltCos = 0;\n      fetti.random = 1;\n    } else {\n      fetti.wobble += fetti.wobbleSpeed;\n      fetti.wobbleX = fetti.x + ((10 * fetti.scalar) * Math.cos(fetti.wobble));\n      fetti.wobbleY = fetti.y + ((10 * fetti.scalar) * Math.sin(fetti.wobble));\n\n      fetti.tiltAngle += 0.1;\n      fetti.tiltSin = Math.sin(fetti.tiltAngle);\n      fetti.tiltCos = Math.cos(fetti.tiltAngle);\n      fetti.random = Math.random() + 2;\n    }\n\n    var progress = (fetti.tick++) / fetti.totalTicks;\n\n    var x1 = fetti.x + (fetti.random * fetti.tiltCos);\n    var y1 = fetti.y + (fetti.random * fetti.tiltSin);\n    var x2 = fetti.wobbleX + (fetti.random * fetti.tiltCos);\n    var y2 = fetti.wobbleY + (fetti.random * fetti.tiltSin);\n\n    context.fillStyle = 'rgba(' + fetti.color.r + ', ' + fetti.color.g + ', ' + fetti.color.b + ', ' + (1 - progress) + ')';\n\n    context.beginPath();\n\n    if (canUsePaths && fetti.shape.type === 'path' && typeof fetti.shape.path === 'string' && Array.isArray(fetti.shape.matrix)) {\n      context.fill(transformPath2D(\n        fetti.shape.path,\n        fetti.shape.matrix,\n        fetti.x,\n        fetti.y,\n        Math.abs(x2 - x1) * 0.1,\n        Math.abs(y2 - y1) * 0.1,\n        Math.PI / 10 * fetti.wobble\n      ));\n    } else if (fetti.shape.type === 'bitmap') {\n      var rotation = Math.PI / 10 * fetti.wobble;\n      var scaleX = Math.abs(x2 - x1) * 0.1;\n      var scaleY = Math.abs(y2 - y1) * 0.1;\n      var width = fetti.shape.bitmap.width * fetti.scalar;\n      var height = fetti.shape.bitmap.height * fetti.scalar;\n\n      var matrix = new DOMMatrix([\n        Math.cos(rotation) * scaleX,\n        Math.sin(rotation) * scaleX,\n        -Math.sin(rotation) * scaleY,\n        Math.cos(rotation) * scaleY,\n        fetti.x,\n        fetti.y\n      ]);\n\n      // apply the transform matrix from the confetti shape\n      matrix.multiplySelf(new DOMMatrix(fetti.shape.matrix));\n\n      var pattern = context.createPattern(bitmapMapper.transform(fetti.shape.bitmap), 'no-repeat');\n      pattern.setTransform(matrix);\n\n      context.globalAlpha = (1 - progress);\n      context.fillStyle = pattern;\n      context.fillRect(\n        fetti.x - (width / 2),\n        fetti.y - (height / 2),\n        width,\n        height\n      );\n      context.globalAlpha = 1;\n    } else if (fetti.shape === 'circle') {\n      context.ellipse ?\n        context.ellipse(fetti.x, fetti.y, Math.abs(x2 - x1) * fetti.ovalScalar, Math.abs(y2 - y1) * fetti.ovalScalar, Math.PI / 10 * fetti.wobble, 0, 2 * Math.PI) :\n        ellipse(context, fetti.x, fetti.y, Math.abs(x2 - x1) * fetti.ovalScalar, Math.abs(y2 - y1) * fetti.ovalScalar, Math.PI / 10 * fetti.wobble, 0, 2 * Math.PI);\n    } else if (fetti.shape === 'star') {\n      var rot = Math.PI / 2 * 3;\n      var innerRadius = 4 * fetti.scalar;\n      var outerRadius = 8 * fetti.scalar;\n      var x = fetti.x;\n      var y = fetti.y;\n      var spikes = 5;\n      var step = Math.PI / spikes;\n\n      while (spikes--) {\n        x = fetti.x + Math.cos(rot) * outerRadius;\n        y = fetti.y + Math.sin(rot) * outerRadius;\n        context.lineTo(x, y);\n        rot += step;\n\n        x = fetti.x + Math.cos(rot) * innerRadius;\n        y = fetti.y + Math.sin(rot) * innerRadius;\n        context.lineTo(x, y);\n        rot += step;\n      }\n    } else {\n      context.moveTo(Math.floor(fetti.x), Math.floor(fetti.y));\n      context.lineTo(Math.floor(fetti.wobbleX), Math.floor(y1));\n      context.lineTo(Math.floor(x2), Math.floor(y2));\n      context.lineTo(Math.floor(x1), Math.floor(fetti.wobbleY));\n    }\n\n    context.closePath();\n    context.fill();\n\n    return fetti.tick < fetti.totalTicks;\n  }\n\n  function animate(canvas, fettis, resizer, size, done) {\n    var animatingFettis = fettis.slice();\n    var context = canvas.getContext('2d');\n    var animationFrame;\n    var destroy;\n\n    var prom = promise(function (resolve) {\n      function onDone() {\n        animationFrame = destroy = null;\n\n        context.clearRect(0, 0, size.width, size.height);\n        bitmapMapper.clear();\n\n        done();\n        resolve();\n      }\n\n      function update() {\n        if (isWorker && !(size.width === workerSize.width && size.height === workerSize.height)) {\n          size.width = canvas.width = workerSize.width;\n          size.height = canvas.height = workerSize.height;\n        }\n\n        if (!size.width && !size.height) {\n          resizer(canvas);\n          size.width = canvas.width;\n          size.height = canvas.height;\n        }\n\n        context.clearRect(0, 0, size.width, size.height);\n\n        animatingFettis = animatingFettis.filter(function (fetti) {\n          return updateFetti(context, fetti);\n        });\n\n        if (animatingFettis.length) {\n          animationFrame = raf.frame(update);\n        } else {\n          onDone();\n        }\n      }\n\n      animationFrame = raf.frame(update);\n      destroy = onDone;\n    });\n\n    return {\n      addFettis: function (fettis) {\n        animatingFettis = animatingFettis.concat(fettis);\n\n        return prom;\n      },\n      canvas: canvas,\n      promise: prom,\n      reset: function () {\n        if (animationFrame) {\n          raf.cancel(animationFrame);\n        }\n\n        if (destroy) {\n          destroy();\n        }\n      }\n    };\n  }\n\n  function confettiCannon(canvas, globalOpts) {\n    var isLibCanvas = !canvas;\n    var allowResize = !!prop(globalOpts || {}, 'resize');\n    var hasResizeEventRegistered = false;\n    var globalDisableForReducedMotion = prop(globalOpts, 'disableForReducedMotion', Boolean);\n    var shouldUseWorker = canUseWorker && !!prop(globalOpts || {}, 'useWorker');\n    var worker = shouldUseWorker ? getWorker() : null;\n    var resizer = isLibCanvas ? setCanvasWindowSize : setCanvasRectSize;\n    var initialized = (canvas && worker) ? !!canvas.__confetti_initialized : false;\n    var preferLessMotion = typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion)').matches;\n    var animationObj;\n\n    function fireLocal(options, size, done) {\n      var particleCount = prop(options, 'particleCount', onlyPositiveInt);\n      var angle = prop(options, 'angle', Number);\n      var spread = prop(options, 'spread', Number);\n      var startVelocity = prop(options, 'startVelocity', Number);\n      var decay = prop(options, 'decay', Number);\n      var gravity = prop(options, 'gravity', Number);\n      var drift = prop(options, 'drift', Number);\n      var colors = prop(options, 'colors', colorsToRgb);\n      var ticks = prop(options, 'ticks', Number);\n      var shapes = prop(options, 'shapes');\n      var scalar = prop(options, 'scalar');\n      var flat = !!prop(options, 'flat');\n      var origin = getOrigin(options);\n\n      var temp = particleCount;\n      var fettis = [];\n\n      var startX = canvas.width * origin.x;\n      var startY = canvas.height * origin.y;\n\n      while (temp--) {\n        fettis.push(\n          randomPhysics({\n            x: startX,\n            y: startY,\n            angle: angle,\n            spread: spread,\n            startVelocity: startVelocity,\n            color: colors[temp % colors.length],\n            shape: shapes[randomInt(0, shapes.length)],\n            ticks: ticks,\n            decay: decay,\n            gravity: gravity,\n            drift: drift,\n            scalar: scalar,\n            flat: flat\n          })\n        );\n      }\n\n      // if we have a previous canvas already animating,\n      // add to it\n      if (animationObj) {\n        return animationObj.addFettis(fettis);\n      }\n\n      animationObj = animate(canvas, fettis, resizer, size , done);\n\n      return animationObj.promise;\n    }\n\n    function fire(options) {\n      var disableForReducedMotion = globalDisableForReducedMotion || prop(options, 'disableForReducedMotion', Boolean);\n      var zIndex = prop(options, 'zIndex', Number);\n\n      if (disableForReducedMotion && preferLessMotion) {\n        return promise(function (resolve) {\n          resolve();\n        });\n      }\n\n      if (isLibCanvas && animationObj) {\n        // use existing canvas from in-progress animation\n        canvas = animationObj.canvas;\n      } else if (isLibCanvas && !canvas) {\n        // create and initialize a new canvas\n        canvas = getCanvas(zIndex);\n        document.body.appendChild(canvas);\n      }\n\n      if (allowResize && !initialized) {\n        // initialize the size of a user-supplied canvas\n        resizer(canvas);\n      }\n\n      var size = {\n        width: canvas.width,\n        height: canvas.height\n      };\n\n      if (worker && !initialized) {\n        worker.init(canvas);\n      }\n\n      initialized = true;\n\n      if (worker) {\n        canvas.__confetti_initialized = true;\n      }\n\n      function onResize() {\n        if (worker) {\n          // TODO this really shouldn't be immediate, because it is expensive\n          var obj = {\n            getBoundingClientRect: function () {\n              if (!isLibCanvas) {\n                return canvas.getBoundingClientRect();\n              }\n            }\n          };\n\n          resizer(obj);\n\n          worker.postMessage({\n            resize: {\n              width: obj.width,\n              height: obj.height\n            }\n          });\n          return;\n        }\n\n        // don't actually query the size here, since this\n        // can execute frequently and rapidly\n        size.width = size.height = null;\n      }\n\n      function done() {\n        animationObj = null;\n\n        if (allowResize) {\n          hasResizeEventRegistered = false;\n          global.removeEventListener('resize', onResize);\n        }\n\n        if (isLibCanvas && canvas) {\n          if (document.body.contains(canvas)) {\n            document.body.removeChild(canvas);\n          }\n          canvas = null;\n          initialized = false;\n        }\n      }\n\n      if (allowResize && !hasResizeEventRegistered) {\n        hasResizeEventRegistered = true;\n        global.addEventListener('resize', onResize, false);\n      }\n\n      if (worker) {\n        return worker.fire(options, size, done);\n      }\n\n      return fireLocal(options, size, done);\n    }\n\n    fire.reset = function () {\n      if (worker) {\n        worker.reset();\n      }\n\n      if (animationObj) {\n        animationObj.reset();\n      }\n    };\n\n    return fire;\n  }\n\n  // Make default export lazy to defer worker creation until called.\n  var defaultFire;\n  function getDefaultFire() {\n    if (!defaultFire) {\n      defaultFire = confettiCannon(null, { useWorker: true, resize: true });\n    }\n    return defaultFire;\n  }\n\n  function transformPath2D(pathString, pathMatrix, x, y, scaleX, scaleY, rotation) {\n    var path2d = new Path2D(pathString);\n\n    var t1 = new Path2D();\n    t1.addPath(path2d, new DOMMatrix(pathMatrix));\n\n    var t2 = new Path2D();\n    // see https://developer.mozilla.org/en-US/docs/Web/API/DOMMatrix/DOMMatrix\n    t2.addPath(t1, new DOMMatrix([\n      Math.cos(rotation) * scaleX,\n      Math.sin(rotation) * scaleX,\n      -Math.sin(rotation) * scaleY,\n      Math.cos(rotation) * scaleY,\n      x,\n      y\n    ]));\n\n    return t2;\n  }\n\n  function shapeFromPath(pathData) {\n    if (!canUsePaths) {\n      throw new Error('path confetti are not supported in this browser');\n    }\n\n    var path, matrix;\n\n    if (typeof pathData === 'string') {\n      path = pathData;\n    } else {\n      path = pathData.path;\n      matrix = pathData.matrix;\n    }\n\n    var path2d = new Path2D(path);\n    var tempCanvas = document.createElement('canvas');\n    var tempCtx = tempCanvas.getContext('2d');\n\n    if (!matrix) {\n      // attempt to figure out the width of the path, up to 1000x1000\n      var maxSize = 1000;\n      var minX = maxSize;\n      var minY = maxSize;\n      var maxX = 0;\n      var maxY = 0;\n      var width, height;\n\n      // do some line skipping... this is faster than checking\n      // every pixel and will be mostly still correct\n      for (var x = 0; x < maxSize; x += 2) {\n        for (var y = 0; y < maxSize; y += 2) {\n          if (tempCtx.isPointInPath(path2d, x, y, 'nonzero')) {\n            minX = Math.min(minX, x);\n            minY = Math.min(minY, y);\n            maxX = Math.max(maxX, x);\n            maxY = Math.max(maxY, y);\n          }\n        }\n      }\n\n      width = maxX - minX;\n      height = maxY - minY;\n\n      var maxDesiredSize = 10;\n      var scale = Math.min(maxDesiredSize/width, maxDesiredSize/height);\n\n      matrix = [\n        scale, 0, 0, scale,\n        -Math.round((width/2) + minX) * scale,\n        -Math.round((height/2) + minY) * scale\n      ];\n    }\n\n    return {\n      type: 'path',\n      path: path,\n      matrix: matrix\n    };\n  }\n\n  function shapeFromText(textData) {\n    var text,\n        scalar = 1,\n        color = '#000000',\n        // see https://nolanlawson.com/2022/04/08/the-struggle-of-using-native-emoji-on-the-web/\n        fontFamily = '\"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\", \"EmojiOne Color\", \"Android Emoji\", \"Twemoji Mozilla\", \"system emoji\", sans-serif';\n\n    if (typeof textData === 'string') {\n      text = textData;\n    } else {\n      text = textData.text;\n      scalar = 'scalar' in textData ? textData.scalar : scalar;\n      fontFamily = 'fontFamily' in textData ? textData.fontFamily : fontFamily;\n      color = 'color' in textData ? textData.color : color;\n    }\n\n    // all other confetti are 10 pixels,\n    // so this pixel size is the de-facto 100% scale confetti\n    var fontSize = 10 * scalar;\n    var font = '' + fontSize + 'px ' + fontFamily;\n\n    var canvas = new OffscreenCanvas(fontSize, fontSize);\n    var ctx = canvas.getContext('2d');\n\n    ctx.font = font;\n    var size = ctx.measureText(text);\n    var width = Math.ceil(size.actualBoundingBoxRight + size.actualBoundingBoxLeft);\n    var height = Math.ceil(size.actualBoundingBoxAscent + size.actualBoundingBoxDescent);\n\n    var padding = 2;\n    var x = size.actualBoundingBoxLeft + padding;\n    var y = size.actualBoundingBoxAscent + padding;\n    width += padding + padding;\n    height += padding + padding;\n\n    canvas = new OffscreenCanvas(width, height);\n    ctx = canvas.getContext('2d');\n    ctx.font = font;\n    ctx.fillStyle = color;\n\n    ctx.fillText(text, x, y);\n\n    var scale = 1 / scalar;\n\n    return {\n      type: 'bitmap',\n      // TODO these probably need to be transfered for workers\n      bitmap: canvas.transferToImageBitmap(),\n      matrix: [scale, 0, 0, scale, -width * scale / 2, -height * scale / 2]\n    };\n  }\n\n  module.exports = function() {\n    return getDefaultFire().apply(this, arguments);\n  };\n  module.exports.reset = function() {\n    getDefaultFire().reset();\n  };\n  module.exports.create = confettiCannon;\n  module.exports.shapeFromPath = shapeFromPath;\n  module.exports.shapeFromText = shapeFromText;\n}((function () {\n  if (typeof window !== 'undefined') {\n    return window;\n  }\n\n  if (typeof self !== 'undefined') {\n    return self;\n  }\n\n  return this || {};\n})(), module, false));\n\n// end source content\n\nexport default module.exports;\nexport var create = module.exports.create;\n", "// Constela\u00E7\u00E3o da LEGENDA (/sobre/legenda/) \u2014 roda o MESMO c\u00E1lculo da tela de\n// sorteio ao vivo (pages/raffle-live.js): n\u00F3s distribu\u00EDdos por phyllotaxis, fios\n// no canvas com o gradiente rosa\u2192violeta e a bolinha de energia viajando do centro\n// at\u00E9 cada pessoa.\n//\n// Por que duplicar em vez de importar do raffle-live.js: aquele m\u00F3dulo \u00E9 o motor\n// da tela ao vivo (WebSocket, countdown, POST de sortear, confete). Uma p\u00E1gina de\n// leitura n\u00E3o deve carregar nada disso \u2014 nem correr o risco de quebrar o sorteio\n// real. Aqui fica s\u00F3 o desenho. Se o visual de l\u00E1 mudar, espelhe aqui.\n\nimport confetti from 'canvas-confetti';\n\nconst PINK = [255, 45, 155];\nconst VIOLET = [162, 107, 255];\nconst clamp = (v) => Math.max(0, Math.min(1, v));\n\nfunction mix(t) {\n  t = clamp(t);\n  const c = (a, b) => (a + (b - a) * t) | 0;\n  return `rgb(${c(PINK[0], VIOLET[0])},${c(PINK[1], VIOLET[1])},${c(PINK[2], VIOLET[2])})`;\n}\n\nfunction initConstellation(stage) {\n  const canvas = stage.querySelector('[data-docs-lines]');\n  const center = stage.querySelector('[data-docs-center]');\n  if (!canvas || !center) return;\n\n  const reduce = matchMedia('(prefers-reduced-motion: reduce)').matches;\n  const ctx = canvas.getContext('2d');\n  const nodes = [...stage.querySelectorAll('[data-docs-node]')].map((el, i) => ({\n    el,\n    phase: i * 0.7,\n    pulse: (i % 5) / 5,\n    bx: 0,\n    by: 0,\n    x: 0,\n    y: 0,\n  }));\n  let W = 0;\n  let H = 0;\n  let cx = 0;\n  let cy = 0;\n  let t = 0;\n\n  function layout() {\n    const dpr = Math.min(window.devicePixelRatio || 1, 2);\n    W = stage.clientWidth;\n    H = stage.clientHeight;\n    canvas.width = Math.round(W * dpr);\n    canvas.height = Math.round(H * dpr);\n    ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n    cx = W / 2;\n    cy = H / 2;\n    center.style.left = `${cx}px`;\n    center.style.top = `${cy}px`;\n    const n = nodes.length;\n    const golden = Math.PI * (3 - Math.sqrt(5));\n    const maxR = Math.min(W, H) * 0.44;\n    const minR = Math.min(W, H) * 0.2;\n    nodes.forEach((it, i) => {\n      const frac = n > 1 ? i / (n - 1) : 0;\n      const r = minR + (maxR - minR) * Math.sqrt(frac);\n      const a = i * golden;\n      it.bx = cx + Math.cos(a) * r;\n      it.by = cy + Math.sin(a) * r * 0.82;\n    });\n  }\n\n  function frame() {\n    t += 0.016;\n    ctx.clearRect(0, 0, W, H);\n    for (const it of nodes) {\n      it.x = it.bx + (reduce ? 0 : Math.cos(t * 0.6 + it.phase) * 5);\n      it.y = it.by + (reduce ? 0 : Math.sin(t * 0.5 + it.phase) * 5);\n      it.el.style.left = `${it.x}px`;\n      it.el.style.top = `${it.y}px`;\n      const col = mix((it.x / (W || 1) + it.y / (H || 1)) / 2);\n      ctx.strokeStyle = col;\n      ctx.shadowColor = col;\n      ctx.shadowBlur = 6;\n      ctx.globalAlpha = 0.2 + Math.sin(t * 2 + it.phase) * 0.06;\n      ctx.lineWidth = 1;\n      ctx.beginPath();\n      ctx.moveTo(cx, cy);\n      ctx.lineTo(it.x, it.y);\n      ctx.stroke();\n      if (!reduce) {\n        const p = (t * 0.45 + it.pulse) % 1;\n        ctx.globalAlpha = 1 - Math.abs(p - 0.5) * 1.4;\n        ctx.fillStyle = col;\n        ctx.beginPath();\n        ctx.arc(cx + (it.x - cx) * p, cy + (it.y - cy) * p, 2.2, 0, Math.PI * 2);\n        ctx.fill();\n      }\n    }\n    ctx.globalAlpha = 1;\n    ctx.shadowBlur = 0;\n    requestAnimationFrame(frame);\n  }\n\n  layout();\n  window.addEventListener('resize', layout);\n  requestAnimationFrame(frame);\n}\n\ndocument.querySelectorAll('[data-docs-constellation]').forEach(initConstellation);\n\n// \u2500\u2500 demonstra\u00E7\u00E3o do sorteio: roda UMA vez quando a pessoa chega na se\u00E7\u00E3o \u2500\u2500\u2500\u2500\u2500\u2500\n// Espelha a sequ\u00EAncia da tela real (pages/raffle-live.js): contagem regressiva \u2192\n// roleta focando os n\u00F3s com desacelera\u00E7\u00E3o \u2192 ganhador em verde + confete \u2192 o card\n// dele encabe\u00E7a a tela. Como o exemplo tem dois pr\u00EAmios, roda duas vezes.\nconst CONFETTI = ['#FF007A', '#00F0FF', '#A26BFF', '#2FE38A'];\nconst sleep = (ms) => new Promise((r) => setTimeout(r, ms));\nconst easeOut = (k) => 1 - Math.pow(1 - k, 3);\n\nasync function playRaffleDemo(root) {\n  const reduce = matchMedia('(prefers-reduced-motion: reduce)').matches;\n  const clock = root.querySelector('[data-demo-clock]');\n  const stage = root.querySelector('[data-docs-constellation]');\n  const winners = [...root.querySelectorAll('[data-demo-winner]')];\n  const nodes = [...root.querySelectorAll('[data-docs-node]')];\n  if (!clock || !stage || !nodes.length) return;\n\n  const pool = [...nodes];\n  for (let n = 5; n >= 1; n -= 1) {\n    clock.textContent = `00:00:0${n}`;\n    await sleep(reduce ? 120 : 800);\n  }\n  clock.textContent = 'sorteando\u2026';\n\n  for (const card of winners) {\n    const target = pool.length ? pool[Math.floor(Math.random() * pool.length)] : null;\n    const total = reduce ? 1 : 24;\n    for (let k = 0; k < total; k += 1) {\n      nodes.forEach((el) => el.classList.remove('is-focus'));\n      const node = k >= total - 1 && target ? target : pool[Math.floor(Math.random() * pool.length)];\n      if (node) node.classList.add('is-focus');\n      await sleep(reduce ? 25 : 55 + easeOut(k / total) * 340);\n    }\n    nodes.forEach((el) => el.classList.remove('is-focus'));\n    if (target) {\n      target.classList.add('is-winner');\n      pool.splice(pool.indexOf(target), 1);\n      // o card do topo assume quem realmente saiu na roleta\n      const name = target.querySelector('.rl-name')?.textContent?.trim() || '';\n      card.querySelector('[data-demo-winner-name]').textContent = name;\n      card.querySelector('[data-demo-winner-ini]').textContent =\n        target.querySelector('.rl-avatar')?.textContent?.trim() || name.slice(0, 2).toUpperCase();\n      if (!reduce) {\n        const box = target.getBoundingClientRect();\n        confetti({\n          particleCount: 90,\n          spread: 78,\n          startVelocity: 38,\n          colors: CONFETTI,\n          origin: {\n            x: (box.left + box.width / 2) / window.innerWidth,\n            y: (box.top + box.height / 2) / window.innerHeight,\n          },\n        });\n      }\n    }\n    card.classList.remove('docs-hide'); // entra ROSA: ganhou, falta reivindicar\n    await sleep(reduce ? 200 : 1500);\n  }\n  clock.textContent = 'sorteio encerrado';\n\n  // passado um tempinho, o primeiro resgata o pr\u00EAmio: o card vira verde com o tique\n  await sleep(reduce ? 300 : 2200);\n  const first = winners[0];\n  if (first) {\n    first.classList.remove('border-accent/50', 'bg-accent/10');\n    first.classList.add('border-positive/50', 'bg-positive/10');\n    const nm = first.querySelector('[data-demo-winner-name]');\n    nm.classList.remove('text-accent-text');\n    nm.classList.add('text-positive');\n    first.querySelector('[data-demo-winner-status]').textContent = 'pr\u00EAmio reivindicado';\n    first.querySelector('[data-demo-winner-check]')?.classList.remove('docs-hide');\n  }\n}\n\n// \u2500\u2500 instala\u00E7\u00E3o do PWA encenada (/sobre/instalar/) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Os dois telefones fazem o caminho inteiro sozinhos, um de cada vez: tocam no\n// navegador, digitam deevo.live, o MAPA de verdade carrega (mesmas classes da home),\n// abrem o menu e instalam \u2014 o \u00EDcone da DEEVO nasce na tela inicial.\n//\n// A posi\u00E7\u00E3o do dedo N\u00C3O \u00E9 chutada no CSS: o JS mede o alvo real (`[data-target]`)\n// dentro da tela e posiciona em %. Assim o dedo continua certo se o layout mudar.\n\nconst INSTALL_URL = 'deevo.live';\nconst STOP = Symbol('replay');\n\nconst SAY = {\n  ios: {\n    lock: 'desbloqueia o telefone',\n    home: 'a tela inicial, com seus apps',\n    open: 'abre o Safari',\n    typing: `digita ${INSTALL_URL}`,\n    loading: 'o mapa da noite carrega',\n    sheet: 'toca em Compartilhar',\n    install: 'toca em \"Adicionar \u00E0 Tela de In\u00EDcio\"',\n    done: 'pronto \u2014 a DEEVO junto dos seus apps',\n  },\n  android: {\n    lock: 'desbloqueia o telefone',\n    home: 'a tela inicial, com seus apps',\n    open: 'abre o Chrome',\n    typing: `digita ${INSTALL_URL}`,\n    loading: 'o mapa da noite carrega',\n    sheet: 'toca nos tr\u00EAs pontinhos',\n    install: 'toca em \"Instalar aplicativo\"',\n    done: 'pronto \u2014 a DEEVO junto dos seus apps',\n  },\n};\n\nlet installRun = 0;\n\nfunction resetPhone(phone) {\n  const block = phone.closest('[data-install-block]');\n  phone.dataset.step = 'lock'; // tudo come\u00E7a com o telefone bloqueado\n  phone.classList.remove('is-pointing', 'is-tapping');\n  const url = phone.querySelector('[data-url]');\n  if (url) url.textContent = '';\n  const map = phone.querySelector('.docs-map');\n  map?.classList.remove('is-scanned');\n  phone.querySelectorAll('.docs-map .map-pin').forEach((p) => p.classList.remove('arrived'));\n  phone.querySelectorAll('[data-map-n]').forEach((n) => {\n    n.textContent = '0';\n  });\n  if (!block) return;\n  block.querySelector('[data-phone-label]')?.classList.remove('is-live');\n  const say = block.querySelector('[data-phone-say]');\n  if (say) say.textContent = '';\n  block.querySelector('.docs-steps')?.classList.add('is-guided');\n  block.querySelectorAll('.docs-step').forEach((li) => li.classList.remove('is-now'));\n}\n\n// onde o alvo est\u00E1, em % da tela (medido de verdade, n\u00E3o chutado no CSS)\nfunction targetAt(phone, target) {\n  const box = phone.querySelector('.docs-phone-screen')?.getBoundingClientRect();\n  const hit = phone.querySelector(`[data-target=\"${target}\"]`)?.getBoundingClientRect();\n  if (!box?.width || !hit?.width) return null;\n  return {\n    left: ((hit.left + hit.width / 2 - box.left) / box.width) * 100,\n    top: ((hit.top + hit.height / 2 - box.top) / box.height) * 100,\n  };\n}\n\nfunction fingerTo(phone, left, top) {\n  const finger = phone.querySelector('.docs-finger');\n  if (!finger) return;\n  finger.style.left = `${left}%`;\n  finger.style.top = `${top}%`;\n  phone.classList.add('is-pointing');\n}\n\nfunction pointAt(phone, target) {\n  const at = targetAt(phone, target);\n  if (at) fingerTo(phone, at.left, at.top);\n  return at;\n}\n\nasync function runPhone(phone, wait) {\n  const block = phone.closest('[data-install-block]');\n  const script = SAY[phone.dataset.os === 'android' ? 'android' : 'ios'];\n  const steps = [...(block?.querySelectorAll('.docs-step') || [])];\n  const label = block?.querySelector('[data-phone-label]');\n  const sayEl = block?.querySelector('[data-phone-say]');\n  const map = phone.querySelector('.docs-map');\n\n  const say = (key) => {\n    if (sayEl) sayEl.textContent = script[key];\n  };\n  const now = (i) => steps.forEach((li, k) => li.classList.toggle('is-now', k === i));\n  const tap = async (target) => {\n    pointAt(phone, target);\n    await wait(560);\n    phone.classList.add('is-tapping');\n    await wait(400);\n    phone.classList.remove('is-tapping');\n  };\n\n  phone.classList.add('is-playing'); // o outro telefone apaga: um de cada vez\n  label?.classList.add('is-live');\n\n  // 0) o telefone est\u00E1 bloqueado: o dedo desliza de baixo pra cima\n  say('lock');\n  await wait(750);\n  const grab = pointAt(phone, 'unlock');\n  await wait(620);\n  if (grab) fingerTo(phone, grab.left, 32); // o gesto sobe\n  await wait(220);\n  phone.dataset.step = 'home'; // desbloqueou no meio do movimento\n  say('home');\n  await wait(700);\n  phone.classList.remove('is-pointing');\n  await wait(450);\n\n  // 1) abre o navegador \u2014 ele volta onde estava: a busca do Google\n  now(0);\n  say('open');\n  await tap('browser');\n  phone.dataset.step = 'open';\n  const url = phone.querySelector('[data-url]');\n  if (url) url.textContent = 'google.com';\n  phone.classList.remove('is-pointing');\n  await wait(700);\n\n  // 2) toca na barra, ela esvazia, e digita o nosso endere\u00E7o\n  phone.dataset.step = 'typing';\n  say('typing');\n  if (url) url.textContent = '';\n  await wait(220);\n  for (const ch of INSTALL_URL) {\n    if (url) url.textContent += ch;\n    await wait(70);\n  }\n  await wait(280);\n\n  // 3) carrega \u2014 e o mapa de verdade entra, com os pinos chegando um a um\n  phone.dataset.step = 'loading';\n  say('loading');\n  await wait(950);\n  phone.dataset.step = 'site';\n  const pins = [...phone.querySelectorAll('.docs-map .map-pin')];\n  for (const pin of pins) {\n    pin.classList.add('arrived');\n    await wait(120);\n  }\n  map?.classList.add('is-scanned');\n  const nums = [...phone.querySelectorAll('[data-map-n]')];\n  for (let k = 1; k <= 10; k += 1) {\n    nums.forEach((n) => {\n      n.textContent = String(Math.round(Number(n.dataset.mapN) * (k / 10)));\n    });\n    await wait(45);\n  }\n  await wait(600);\n\n  // 4) abre a folha/menu do navegador\n  now(1);\n  say('sheet');\n  await tap('share');\n  phone.dataset.step = 'sheet';\n  await wait(620);\n\n  // 5) instala\n  now(2);\n  say('install');\n  await tap('add');\n  phone.dataset.step = 'tap-install';\n  await wait(850);\n\n  // 6) o navegador fecha e o \u00EDcone nasce na tela inicial\n  phone.classList.remove('is-pointing');\n  phone.dataset.step = 'installed';\n  say('done');\n  await wait(1500);\n  now(-1);\n  phone.classList.remove('is-playing');\n  label?.classList.remove('is-live');\n  block?.querySelector('.docs-steps')?.classList.remove('is-guided'); // passos voltam leg\u00EDveis\n}\n\nasync function playInstallDemos(root, replay) {\n  const token = ++installRun;\n  const reduce = matchMedia('(prefers-reduced-motion: reduce)').matches;\n  const wait = async (ms) => {\n    await sleep(reduce ? Math.min(ms, 40) : ms);\n    if (token !== installRun) throw STOP;\n  };\n  const phones = [...root.querySelectorAll('[data-install-demo]')];\n  phones.forEach(resetPhone);\n  phones.forEach((p) => p.classList.remove('is-playing'));\n  root.classList.add('is-running');\n  if (replay) replay.disabled = true;\n  try {\n    for (const phone of phones) await runPhone(phone, wait);\n  } catch (e) {\n    if (e !== STOP) throw e;\n  } finally {\n    if (token === installRun) {\n      root.classList.remove('is-running');\n      if (replay) replay.disabled = false;\n    }\n  }\n}\n\nconst installDemos = document.querySelector('[data-install-demos]');\nif (installDemos) {\n  const replay = document.querySelector('[data-replay-install]');\n  if (replay) {\n    replay.hidden = false; // sem JS o bot\u00E3o n\u00E3o faria nada\n    replay.addEventListener('click', () => playInstallDemos(installDemos, replay));\n  }\n  const io = new IntersectionObserver(\n    (entries) => {\n      for (const e of entries) {\n        if (e.isIntersecting) {\n          io.disconnect();\n          playInstallDemos(installDemos, replay);\n        }\n      }\n    },\n    { threshold: 0.25 }\n  );\n  io.observe(installDemos);\n}\n\nconst demo = document.querySelector('[data-raffle-demo]');\nif (demo) {\n  // dispara quando a se\u00E7\u00E3o entra na tela; roda uma vez s\u00F3 \u2014 pra ver de novo, recarregue\n  const io = new IntersectionObserver(\n    (entries) => {\n      for (const e of entries) {\n        if (e.isIntersecting) {\n          io.disconnect();\n          playRaffleDemo(demo);\n        }\n      }\n    },\n    { threshold: 0.35 }\n  );\n  io.observe(demo);\n}\n"],
  "mappings": "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",
  "names": ["module", "main", "global", "isWorker", "workerSize", "canUseWorker", "canUsePaths", "canDrawBitmap", "canvas", "ctx", "bitmap", "noop", "promise", "func", "ModulePromise", "Prom", "bitmapMapper", "skipTransform", "map", "raf", "TIME", "frame", "cancel", "frames", "lastFrameTime", "cb", "id", "onFrame", "time", "timer", "getWorker", "worker", "prom", "resolves", "decorate", "execute", "options", "callback", "offscreen", "size", "done", "resolve", "workerDone", "msg", "code", "e", "defaults", "convert", "val", "transform", "isOk", "prop", "name", "onlyPositiveInt", "number", "randomInt", "min", "max", "toDecimal", "str", "colorsToRgb", "colors", "hexToRgb", "getOrigin", "origin", "setCanvasWindowSize", "setCanvasRectSize", "rect", "getCanvas", "zIndex", "ellipse", "context", "x", "y", "radiusX", "radiusY", "rotation", "startAngle", "endAngle", "antiClockwise", "randomPhysics", "opts", "radAngle", "radSpread", "updateFetti", "fetti", "progress", "x1", "y1", "x2", "y2", "transformPath2D", "scaleX", "scaleY", "width", "height", "matrix", "pattern", "rot", "innerRadius", "outerRadius", "spikes", "step", "animate", "fettis", "resizer", "animatingFettis", "animationFrame", "destroy", "onDone", "update", "confettiCannon", "globalOpts", "isLibCanvas", "allowResize", "hasResizeEventRegistered", "globalDisableForReducedMotion", "shouldUseWorker", "initialized", "preferLessMotion", "animationObj", "fireLocal", "particleCount", "angle", "spread", "startVelocity", "decay", "gravity", "drift", "ticks", "shapes", "scalar", "flat", "temp", "startX", "startY", "fire", "disableForReducedMotion", "onResize", "obj", "defaultFire", "getDefaultFire", "pathString", "pathMatrix", "path2d", "t1", "t2", "shapeFromPath", "pathData", "path", "tempCanvas", "tempCtx", "maxSize", "minX", "minY", "maxX", "maxY", "maxDesiredSize", "scale", "shapeFromText", "textData", "text", "color", "fontFamily", "fontSize", "font", "padding", "confetti_module_default", "create", "PINK", "VIOLET", "clamp", "v", "mix", "t", "c", "a", "b", "initConstellation", "stage", "canvas", "center", "reduce", "ctx", "nodes", "el", "i", "W", "H", "cx", "cy", "layout", "dpr", "n", "golden", "maxR", "minR", "it", "frac", "r", "frame", "col", "p", "CONFETTI", "sleep", "ms", "easeOut", "k", "playRaffleDemo", "root", "clock", "winners", "pool", "card", "target", "total", "node", "name", "box", "confetti_module_default", "first", "nm", "INSTALL_URL", "STOP", "SAY", "installRun", "resetPhone", "phone", "block", "url", "say", "li", "targetAt", "hit", "fingerTo", "left", "top", "finger", "pointAt", "at", "runPhone", "wait", "script", "steps", "label", "sayEl", "map", "key", "now", "tap", "grab", "ch", "pins", "pin", "nums", "playInstallDemos", "replay", "token", "phones", "e", "installDemos", "io", "entries", "demo"]
}
