{
  "version": 3,
  "sources": ["../../src/usal.js"],
  "sourcesContent": ["// noinspection JSBitwiseOperatorUsage\n\nconst USAL = (() => {\n  // Return existing instance\n  if (typeof window !== 'undefined' && window.USAL) {\n    return window.USAL;\n  }\n\n  // SSR safety\n  if (typeof window === 'undefined') {\n    return {\n      config: function () {\n        return arguments.length === 0 ? {} : this;\n      },\n      destroy: async () => {},\n      restart: async function () {\n        return this;\n      },\n      initialized: () => false,\n      version: '{%%VERSION%%}',\n    };\n  }\n\n  // ============================================================================\n  // Configuration & State\n  // ============================================================================\n\n  const defaultConfig = {\n    defaults: {\n      animation: 'fade',\n      direction: 'u',\n      duration: 1000,\n      delay: 0,\n      threshold: 10,\n      splitDelay: 30,\n      forwards: false,\n      easing: 'ease-out',\n      blur: false,\n      loop: 'mirror',\n    },\n    observersDelay: 50,\n    once: false,\n  };\n\n  const instance = {\n    destroying: null,\n    restarting: null,\n    initialized: false,\n    observers: () => {},\n    elements: new Map(),\n    config: { ...defaultConfig },\n  };\n\n  // ============================================================================\n  // Constants\n  // ============================================================================\n\n  const SHADOW_CAPABLE_SELECTOR =\n    '*:not(:is(area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr,textarea,select,option,optgroup,script,style,title,iframe,object,video,audio,canvas,map,svg,math))';\n\n  const DATA_USAL_ATTRIBUTE = 'data-usal';\n  const DATA_USAL_ID = `${DATA_USAL_ATTRIBUTE}-id`;\n  const DATA_USAL_SELECTOR = `[${DATA_USAL_ATTRIBUTE}]`;\n\n  const CONFIG_ANIMATION = 0;\n  const CONFIG_DIRECTION = 1;\n  const CONFIG_DURATION = 2;\n  const CONFIG_DELAY = 3;\n  const CONFIG_THRESHOLD = 4;\n  const CONFIG_EASING = 5;\n  const CONFIG_BLUR = 6;\n  const CONFIG_ONCE = 7;\n  const CONFIG_SPLIT = 8;\n  const CONFIG_COUNT = 9;\n  const CONFIG_TEXT = 10;\n  const CONFIG_LOOP = 11;\n  const CONFIG_FORWARDS = 12;\n  const CONFIG_TUNING = 13;\n  const CONFIG_LINE = 14;\n  const CONFIG_STAGGER = 15;\n\n  const DIRECTION_UP = 1;\n  const DIRECTION_DOWN = 2;\n  const DIRECTION_LEFT = 4;\n  const DIRECTION_RIGHT = 8;\n\n  const STYLE_OPACITY = 'opacity';\n  const STYLE_TRANSFORM = 'transform';\n  const STYLE_FILTER = 'filter';\n  const STYLE_PERSPECTIVE = 'perspective';\n  const STYLE_DISPLAY = 'display';\n  const STYLE_FONT_WEIGHT = 'fontWeight';\n  const CSS_NONE = 'none';\n  const CSS_INLINE_BLOCK = 'inline-block';\n\n  const INTERSECTION_THRESHOLDS = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1];\n  // Animation Types\n  // \u26A0\uFE0F WARNING: Order MUST match array below! \u26A0\uFE0F\n  const ANIMATION_FADE = 0;\n  const ANIMATION_ZOOMIN = 1;\n  const ANIMATION_ZOOMOUT = 2;\n  const ANIMATION_FLIP = 3;\n  const ANIMATION_SLIDE = 4;\n  // \u26A0\uFE0F WARNING: Order MUST match constants above! \u26A0\uFE0F\n  const ANIMATION_TYPES = ['fade', 'zoomin', 'zoomout', 'flip', 'slide'];\n\n  // ============================================================================\n  // Utilities\n  // ============================================================================\n\n  const genTmpId = () => `__usal${Date.now()}_${Math.random().toString(36).slice(2)}`;\n\n  function calculateVisibilityRatio(element) {\n    const rect = element.getBoundingClientRect();\n    const windowHeight = window.innerHeight;\n    const windowWidth = window.innerWidth;\n\n    if (\n      rect.bottom <= 0 ||\n      rect.top >= windowHeight ||\n      rect.right <= 0 ||\n      rect.left >= windowWidth\n    ) {\n      return 0;\n    }\n\n    const visibleHeight = Math.min(rect.bottom, windowHeight) - Math.max(rect.top, 0);\n    const visibleWidth = Math.min(rect.right, windowWidth) - Math.max(rect.left, 0);\n    return (visibleHeight / rect.height) * (visibleWidth / rect.width);\n  }\n\n  function captureComputedStyle(element) {\n    const computedStyle = window.getComputedStyle(element);\n    return {\n      [STYLE_OPACITY]: computedStyle[STYLE_OPACITY] || '1',\n      [STYLE_TRANSFORM]: computedStyle[STYLE_TRANSFORM] || CSS_NONE,\n      [STYLE_FILTER]: computedStyle[STYLE_FILTER] || CSS_NONE,\n      [STYLE_PERSPECTIVE]: computedStyle[STYLE_PERSPECTIVE] || CSS_NONE,\n      [STYLE_FONT_WEIGHT]: computedStyle[STYLE_FONT_WEIGHT] || '400',\n    };\n  }\n\n  // ============================================================================\n  // Style Management\n  // ============================================================================\n\n  function applyStyles(element, styles, clean = false) {\n    if (!element) return;\n\n    // eslint-disable-next-line no-unused-vars\n    const { offset, composite, easing, ...cleanedStyles } = styles;\n\n    element.animate([cleanedStyles], {\n      duration: 0,\n      fill: 'forwards',\n      iterations: 1,\n      id: genTmpId(),\n    });\n\n    if (instance.destroying == null && !clean) {\n      element.__usalFragment = 1;\n    } else {\n      delete element.__usalFragment;\n      delete element.__usalOGStyle;\n      delete element.__usalID;\n    }\n  }\n\n  const cancelAllAnimations = (data, element, originalStyle) =>\n    new Promise((resolve) => {\n      requestAnimationFrame(() => {\n        if (!element) {\n          resolve();\n          return;\n        }\n        element\n          .getAnimations()\n          .filter((animation) => animation.id && animation.id.startsWith('__usal'))\n          .forEach((animation) => {\n            animation.cancel();\n            animation.effect = null;\n            animation.timeline = null;\n            if (originalStyle) {\n              if (data?.config?.[CONFIG_SPLIT] && !data.config[CONFIG_SPLIT].includes('item'))\n                originalStyle = {\n                  ...originalStyle,\n                  [STYLE_DISPLAY]: CSS_INLINE_BLOCK,\n                };\n              applyStyles(element, originalStyle);\n            }\n          });\n        resolve();\n      });\n    });\n\n  function resetStyle(data) {\n    if (data.config[CONFIG_LOOP]) return;\n    const originalStyle = data.element.__usalOGStyle;\n    if (data.countData) {\n      const span = data.countData.span;\n      applyStyles(span, {\n        [STYLE_DISPLAY]: 'inline',\n      });\n    } else if (data.config[CONFIG_SPLIT]) {\n      if (data.targets) {\n        data.targets().forEach(([target]) => {\n          applyStyles(\n            target,\n            createKeyframes(\n              data.splitConfig || data.config,\n              target.__usalOGStyle || originalStyle\n            )[0]\n          );\n        });\n      }\n    } else {\n      applyStyles(data.element, createKeyframes(data.config, originalStyle)[0]);\n    }\n    data.stop = false;\n  }\n  // ============================================================================\n  // Configuration Parsing\n  // ============================================================================\n\n  function extractAndSetConfig(prefix, config, configKey, classString) {\n    const pattern = new RegExp(`${prefix}-\\\\[[^\\\\]]+\\\\]`);\n    const match = classString.match(pattern);\n    if (match) {\n      config[configKey] = match[0].slice(prefix.length + 2, -1);\n      return classString.replace(match[0], '');\n    }\n    return classString;\n  }\n\n  const extractAnimation = (firstPart, fallback = null) => {\n    const animationIndex = ANIMATION_TYPES.indexOf(firstPart);\n    return animationIndex !== -1 ? animationIndex : fallback;\n  };\n\n  const extractDirection = (secondPart, fallback = null) => {\n    if (!secondPart) return fallback;\n\n    let direction = 0;\n    for (const char of secondPart) {\n      switch (char) {\n        case 'u':\n          direction |= DIRECTION_UP;\n          break;\n        case 'd':\n          direction |= DIRECTION_DOWN;\n          break;\n        case 'l':\n          direction |= DIRECTION_LEFT;\n          break;\n        case 'r':\n          direction |= DIRECTION_RIGHT;\n          break;\n      }\n    }\n    return direction > 0 ? direction : fallback;\n  };\n\n  function genEmptyConfig() {\n    const config = new Array(16).fill(null);\n    config[CONFIG_TUNING] = [];\n    config[CONFIG_STAGGER] = 'index';\n    return config;\n  }\n\n  function parseClasses(classString) {\n    const config = genEmptyConfig();\n\n    classString = extractAndSetConfig('count', config, CONFIG_COUNT, classString);\n    classString = extractAndSetConfig('easing', config, CONFIG_EASING, classString);\n    classString = extractAndSetConfig('line', config, CONFIG_LINE, classString);\n\n    const tokens = classString.split(/\\s+/).filter(Boolean);\n\n    for (const token of tokens) {\n      const parts = token.split('-');\n      const firstPart = parts[0];\n\n      if (config[CONFIG_ANIMATION] === null) {\n        config[CONFIG_ANIMATION] = extractAnimation(firstPart);\n        if (config[CONFIG_ANIMATION] !== null) {\n          config[CONFIG_DIRECTION] = extractDirection(parts[1]);\n          config[CONFIG_TUNING] = parts\n            .slice(1 + (config[CONFIG_DIRECTION] ? 1 : 0))\n            .filter((item) => !isNaN(item) && item !== '')\n            .map((item) => +item);\n          continue;\n        }\n      }\n\n      switch (token) {\n        case 'once':\n          config[CONFIG_ONCE] = true;\n          break;\n        case 'forwards':\n          config[CONFIG_FORWARDS] = true;\n          break;\n        case 'linear':\n        case 'ease':\n        case 'ease-in':\n        case 'ease-out':\n        case 'ease-in-out':\n        case 'step-start':\n        case 'step-end':\n          config[CONFIG_EASING] = token;\n          break;\n        default:\n          switch (firstPart) {\n            case 'split':\n              if (parts[1])\n                config[CONFIG_SPLIT] = (config[CONFIG_SPLIT] ?? '') + ' ' + token.slice(6);\n              break;\n            case 'blur':\n              if (parts[1]) config[CONFIG_BLUR] = +parts[1];\n              else config[CONFIG_BLUR] = true;\n              break;\n            case 'loop':\n              if (parts[1] === 'mirror' || parts[1] === 'jump') {\n                config[CONFIG_LOOP] = parts[1];\n              } else config[CONFIG_LOOP] = true;\n              break;\n            case 'text':\n              if (parts[1] === 'shimmer' || parts[1] === 'fluid') config[CONFIG_TEXT] = parts[1];\n              break;\n            case 'duration':\n              if (parts[1]) config[CONFIG_DURATION] = +parts[1];\n              break;\n            case 'delay':\n              if (parts[1]) config[CONFIG_DELAY] = +parts[1];\n              if (parts[2]) config[CONFIG_STAGGER] = parts[2];\n              break;\n            case 'threshold':\n              if (parts[1]) config[CONFIG_THRESHOLD] = +parts[1];\n              break;\n          }\n      }\n    }\n\n    return config;\n  }\n\n  // ============================================================================\n  // Animation Keyframes\n  // ============================================================================\n\n  function parseTimeline(content, originalStyle, inlineBlock = false) {\n    const clean = content.replace(/\\s/g, '').toLowerCase();\n\n    function buildTransform(type, axis, value, unit) {\n      const axisStr =\n        axis && ['x', 'y', 'z'].includes(axis) ? axis.toUpperCase() : type === 'rotate' ? 'Z' : '';\n      return `${type}${axisStr}(${value}${unit})`;\n    }\n\n    function parseTransforms(str) {\n      const regex = /(\\w|\\w\\w)([+-]\\d+(?:\\.\\d+)?)/g;\n\n      let transforms = '';\n      let opacity = null;\n      let blur = null;\n      let perspective = null;\n      let glow = null;\n      let fontWeight = null;\n\n      let match;\n      while ((match = regex.exec(str)) !== null) {\n        const [, prop, value] = match;\n        const num = parseFloat(value);\n        const first = prop[0];\n        const second = prop[1];\n\n        switch (first) {\n          case 't':\n            transforms += ' ' + buildTransform('translate', second, num, '%');\n            break;\n          case 'r':\n            transforms += ' ' + buildTransform('rotate', second, num, 'deg');\n            break;\n          case 's':\n            transforms += ' ' + buildTransform('scale', second, num, '');\n            break;\n          case 'o':\n            opacity = Math.max(0, Math.min(100, num)) / 100;\n            break;\n          case 'b':\n            blur = `blur(${Math.max(0, num)}rem)`;\n            break;\n          case 'g':\n            glow = `brightness(${Math.max(0, num) / 100})`;\n            break;\n          case 'w':\n            fontWeight = Math.max(0, num).toString();\n            break;\n          case 'p':\n            perspective = `${num}rem`;\n            break;\n        }\n      }\n\n      const result = {};\n      if (transforms) result[STYLE_TRANSFORM] = transforms.trim();\n      if (opacity !== null) result[STYLE_OPACITY] = opacity;\n      if (blur || glow) {\n        result[STYLE_FILTER] = [blur, glow].filter(Boolean).join(' ');\n      }\n      if (fontWeight) result[STYLE_FONT_WEIGHT] = fontWeight;\n      if (perspective) result[STYLE_PERSPECTIVE] = perspective;\n      return result;\n    }\n\n    const keyframes = new Map();\n    clean.split('|').forEach((frame, index) => {\n      const percentMatch = frame.match(/^(\\d+)/);\n      const percent =\n        index === 0\n          ? 0\n          : percentMatch\n            ? Math.max(0, Math.min(100, parseInt(percentMatch[1])))\n            : 100;\n      keyframes.set(percent, parseTransforms(frame.replace(/^\\d+/, '')));\n    });\n\n    if (Object.keys(keyframes.get(0)).length === 0) {\n      keyframes.set(0, originalStyle);\n    }\n    if (keyframes.size === 1) {\n      keyframes.set(100, originalStyle);\n    } else {\n      const allKeys = [...keyframes.keys()];\n      if (keyframes.size >= 3) {\n        const minKey = Math.min(...allKeys);\n        keyframes.set(0, keyframes.get(minKey));\n      }\n      const maxKey = Math.max(...allKeys);\n      keyframes.set(100, keyframes.get(maxKey));\n    }\n\n    const sorted = Array.from(keyframes.entries())\n      .filter(([_, frame]) => Object.keys(frame).length > 0)\n      .sort((a, b) => a[0] - b[0]);\n\n    const compressed = sorted.map(([percent, frame]) => ({\n      offset: (5 + percent * 0.9) / 100,\n      ...frame,\n      ...(inlineBlock && { display: 'inline-block' }),\n    }));\n\n    const first = { ...sorted[0][1], ...(inlineBlock && { display: 'inline-block' }) };\n    const last = {\n      ...sorted[sorted.length - 1][1],\n      ...(inlineBlock && { display: 'inline-block' }),\n    };\n\n    return [{ offset: 0, ...first }, ...compressed, { offset: 1, ...last }];\n  }\n\n  function createKeyframes(config, originalStyle) {\n    if (!originalStyle) return;\n    const isSplitText = config[CONFIG_SPLIT] && !config[CONFIG_SPLIT]?.includes('item');\n\n    if (config[CONFIG_TEXT] === 'shimmer') config[CONFIG_LINE] = 'o+50g+100|50o+100g+130|o+50g+100';\n    else if (config[CONFIG_TEXT] === 'fluid') config[CONFIG_LINE] = 'w+100|50w+900|w+100';\n\n    if (config[CONFIG_LINE]) return parseTimeline(config[CONFIG_LINE], originalStyle, isSplitText);\n\n    const animationType =\n      config[CONFIG_ANIMATION] ??\n      extractAnimation(instance.config.defaults.animation, ANIMATION_FADE);\n    const direction =\n      config[CONFIG_DIRECTION] ?? extractDirection(instance.config.defaults.direction, 1);\n    const blur = config[CONFIG_BLUR] ?? instance.config.defaults.blur;\n\n    const tuning = config[CONFIG_TUNING];\n\n    let firstTuning = tuning?.at(0);\n    const lastTuning = tuning?.at(-1);\n    let secondTuning = tuning?.at(1);\n\n    let fromTimeline = 'o+0';\n    if (animationType === ANIMATION_SLIDE)\n      fromTimeline = `o+${parseFloat(originalStyle[STYLE_OPACITY]) * 100}`;\n\n    const defaultDelta = isSplitText ? 50 : 15;\n    const intensity = (lastTuning ?? defaultDelta) / 100;\n\n    if (animationType === ANIMATION_ZOOMIN || animationType === ANIMATION_ZOOMOUT) {\n      // Zoom\n      fromTimeline += `s+${1 + (animationType === ANIMATION_ZOOMIN ? -intensity : intensity)}`;\n      firstTuning = null;\n      secondTuning = tuning?.length === 2 ? null : secondTuning;\n    } else if (animationType === ANIMATION_FLIP) {\n      // Flip\n      const angle = firstTuning ?? 90;\n      if (direction & (DIRECTION_UP | DIRECTION_DOWN)) {\n        const rotX = direction & DIRECTION_UP ? angle : -angle;\n        fromTimeline += `rx${rotX > 0 ? '+' : ''}${rotX}`;\n      }\n      if (direction & (DIRECTION_LEFT | DIRECTION_RIGHT)) {\n        const rotY = direction & DIRECTION_LEFT ? -angle : angle;\n        fromTimeline += `ry${rotY > 0 ? '+' : ''}${rotY}`;\n      }\n      if (!(direction & (DIRECTION_UP | DIRECTION_DOWN | DIRECTION_LEFT | DIRECTION_RIGHT))) {\n        fromTimeline += `ry+${angle}`;\n      }\n      const perspectiveValue = tuning?.length === 2 ? lastTuning : 25;\n      fromTimeline += `p+${perspectiveValue ?? 25}`;\n    }\n\n    if (animationType !== ANIMATION_FLIP && direction) {\n      if (direction & DIRECTION_RIGHT) {\n        fromTimeline += `tx-${firstTuning ?? defaultDelta}`;\n      } else if (direction & DIRECTION_LEFT) {\n        fromTimeline += `tx+${firstTuning ?? defaultDelta}`;\n      }\n\n      if (direction & DIRECTION_DOWN) {\n        fromTimeline += `ty-${secondTuning ?? firstTuning ?? defaultDelta}`;\n      } else if (direction & DIRECTION_UP) {\n        fromTimeline += `ty+${secondTuning ?? firstTuning ?? defaultDelta}`;\n      }\n    }\n\n    if (blur) {\n      const blurValue =\n        blur === true\n          ? 0.625\n          : typeof blur === 'number' && !isNaN(blur)\n            ? Math.max(0, blur)\n            : 0.625;\n      fromTimeline += `b+${blurValue}`;\n    }\n\n    return parseTimeline(fromTimeline, originalStyle, isSplitText);\n  }\n\n  // ============================================================================\n  // Split Animation Setup\n  // ============================================================================\n  function getStaggerFunction(targets, strategy = 'index') {\n    const targetsData = targets.map((target) => {\n      const rect = target.getBoundingClientRect();\n      return {\n        target,\n        x: rect.left + rect.width / 2,\n        y: rect.top + rect.height / 2,\n      };\n    });\n\n    const bounds = targetsData.reduce(\n      (acc, item) => ({\n        minX: Math.min(acc.minX, item.x),\n        maxX: Math.max(acc.maxX, item.x),\n        minY: Math.min(acc.minY, item.y),\n        maxY: Math.max(acc.maxY, item.y),\n      }),\n      { minX: Infinity, maxX: -Infinity, minY: Infinity, maxY: -Infinity }\n    );\n\n    const centerX = (bounds.minX + bounds.maxX) / 2;\n    const centerY = (bounds.minY + bounds.maxY) / 2;\n\n    const metrics = targetsData.map((item, index) => {\n      let value;\n      switch (strategy) {\n        case 'linear':\n          value = Math.hypot(item.x, item.y);\n          break;\n        case 'center':\n          value = Math.hypot(item.x - centerX, item.y - centerY);\n          break;\n        case 'edges':\n          value = Math.min(\n            Math.abs(item.x - bounds.minX),\n            Math.abs(item.x - bounds.maxX),\n            Math.abs(item.y - bounds.minY),\n            Math.abs(item.y - bounds.maxY)\n          );\n          break;\n        case 'random':\n          value = Math.random();\n          break;\n        default: // index\n          value = index;\n      }\n      return value;\n    });\n\n    const min = Math.min(...metrics);\n    const max = Math.max(...metrics);\n    const range = max - min || 1;\n\n    return (splitDelay = 50) =>\n      targetsData.map((item, index) => {\n        const normalizedValue = (metrics[index] - min) / range;\n\n        let delay;\n        if (strategy === 'index') {\n          delay = index * splitDelay;\n        } else {\n          delay = normalizedValue * (targets.length - 1) * splitDelay;\n        }\n\n        return [item.target, delay];\n      });\n  }\n\n  function setupSplit(element, splitBy, strategy, resolve) {\n    const targets = [];\n\n    // Split by child elements\n    if (splitBy === 'item') {\n      Array.from(element.children).forEach((child) => {\n        child.__usalOGStyle = captureComputedStyle(child);\n        targets.push(child);\n      });\n      return [getStaggerFunction(targets, strategy), null];\n    }\n\n    // Split by text\n    function createSpan(content) {\n      const span = document.createElement('span');\n      span.textContent = content;\n      return span;\n    }\n\n    function processTextContent(text) {\n      if (!text?.trim()) return text ? document.createTextNode(text) : null;\n\n      const wrapper = document.createElement('span');\n      const words = text.split(/(\\s+)/);\n\n      words.forEach((word) => {\n        if (!word) return;\n\n        if (/\\s/.test(word)) {\n          wrapper.appendChild(document.createTextNode(word));\n          return;\n        }\n\n        // Split Word\n        if (splitBy === 'word') {\n          const span = createSpan(word);\n          applyStyles(span, { [STYLE_DISPLAY]: CSS_INLINE_BLOCK });\n          wrapper.appendChild(span);\n          targets.push(span);\n          return;\n        }\n\n        // Split letter\n        const container = document.createElement('span');\n        applyStyles(container, { [STYLE_DISPLAY]: CSS_INLINE_BLOCK, whiteSpace: 'nowrap' });\n\n        let chars;\n        if (typeof Intl !== 'undefined' && Intl.Segmenter) {\n          const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n          chars = Array.from(segmenter.segment(word), (s) => s.segment);\n        } else {\n          chars = word.match(\n            /\\p{RI}\\p{RI}|(?:\\p{Emoji}(?:\\u200D\\p{Emoji})*)|(?:\\P{M}\\p{M}*)|./gsu\n          ) || [word];\n        }\n\n        chars.forEach((char) => {\n          const span = createSpan(char);\n          container.appendChild(span);\n          targets.push(span);\n        });\n\n        wrapper.appendChild(container);\n      });\n\n      return wrapper;\n    }\n\n    const textNodes = [];\n    let countTextNodes = 0;\n    let wrappers = null;\n    const walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT, null, false);\n\n    while (walker.nextNode()) {\n      if (walker.currentNode.textContent.trim()) {\n        textNodes.push(walker.currentNode);\n        countTextNodes++;\n      }\n    }\n\n    if (textNodes.length) wrappers = [];\n    textNodes.forEach((textNode) => {\n      if (!textNode.parentNode || !textNode.isConnected) {\n        countTextNodes--;\n        if (countTextNodes === 0) resolve();\n        return;\n      }\n\n      const processed = processTextContent(textNode.textContent);\n      wrappers.push(processed);\n      requestAnimationFrame(() => {\n        requestAnimationFrame(() => {\n          try {\n            if (textNode.parentNode) {\n              textNode.parentNode.replaceChild(processed, textNode);\n            }\n          } finally {\n            countTextNodes--;\n            if (countTextNodes === 0) resolve();\n          }\n        });\n      });\n    });\n\n    return [getStaggerFunction(targets, strategy), wrappers];\n  }\n\n  // ============================================================================\n  // Count Animation Setup\n  // ============================================================================\n\n  function setupCount(element, config, data, resolve) {\n    const original = config[CONFIG_COUNT].trim();\n    const clean = original.replace(/[^\\d\\s,.]/g, '');\n\n    const separators = [',', '.', ' '].filter((s) => clean.includes(s));\n    const sepPositions = separators\n      .map((s) => ({ s, p: clean.lastIndexOf(s) }))\n      .sort((a, b) => b.p - a.p);\n\n    let value,\n      decimals = 0,\n      thousandSep = '',\n      decimalSep = '';\n\n    if (separators.length === 0) {\n      value = parseFloat(clean);\n    } else if (separators.length === 1) {\n      const sep = separators[0];\n      const afterSep = clean.substring(clean.lastIndexOf(sep) + 1);\n\n      if (afterSep.length <= 3 && afterSep.length > 0 && sep !== ' ') {\n        decimalSep = sep;\n        decimals = afterSep.length;\n        value = parseFloat(clean.replace(sep, '.'));\n      } else {\n        thousandSep = sep;\n        value = parseFloat(clean.replace(new RegExp(`\\\\${thousandSep}`, 'g'), ''));\n      }\n    } else {\n      decimalSep = sepPositions[0].s;\n      thousandSep = sepPositions[1].s;\n      const processed = clean\n        .replace(new RegExp(`\\\\${thousandSep}`, 'g'), '')\n        .replace(decimalSep, '.');\n      value = parseFloat(processed);\n      decimals = clean.substring(sepPositions[0].p + 1).replace(/\\D/g, '').length;\n    }\n\n    let span = null;\n    let wrapper = null;\n\n    function findAndReplace(node) {\n      if (span) return;\n\n      if (node.nodeType === Node.TEXT_NODE) {\n        const text = node.textContent;\n        const index = text.indexOf(config[CONFIG_COUNT]);\n\n        if (index !== -1) {\n          const before = text.substring(0, index);\n          const after = text.substring(index + config[CONFIG_COUNT].length);\n\n          wrapper = document.createElement('span');\n\n          if (before) wrapper.appendChild(document.createTextNode(before));\n\n          span = document.createElement('span');\n          span.textContent = original;\n          wrapper.appendChild(span);\n\n          if (after) wrapper.appendChild(document.createTextNode(after));\n\n          data.textWrappers = [wrapper];\n          requestAnimationFrame(() => {\n            requestAnimationFrame(() => {\n              try {\n                if (node.parentNode) {\n                  node.parentNode.replaceChild(wrapper, node);\n                }\n              } finally {\n                resolve();\n              }\n            });\n          });\n        }\n      } else if (node.nodeType === Node.ELEMENT_NODE) {\n        Array.from(node.childNodes).forEach(findAndReplace);\n      }\n    }\n\n    findAndReplace(element);\n\n    if (!span) {\n      resolve();\n      return false;\n    }\n\n    data.countData = { value, decimals, span, thousandSep, decimalSep };\n    return true;\n  }\n\n  // ============================================================================\n  // Count Animation\n  // ============================================================================\n\n  function animateCount(countData, options) {\n    const { duration, easing } = options;\n    const { value, decimals, span, thousandSep, decimalSep } = countData;\n\n    let currentTime = 0;\n    let playState = 'idle';\n    let playbackRate = 1;\n\n    function getEasingFunction(easingType) {\n      switch (easingType) {\n        case 'linear':\n          return (t) => t;\n\n        case 'ease':\n          return (t) => {\n            if (t === 0) return 0;\n            if (t === 1) return 1;\n            return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;\n          };\n\n        case 'ease-in':\n          return (t) => t * t * t;\n\n        case 'ease-out':\n          return (t) => 1 - Math.pow(1 - t, 3);\n\n        case 'ease-in-out':\n          return (t) => (t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2);\n\n        default:\n          return (t) => (t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2);\n      }\n    }\n\n    const easingFunction = getEasingFunction(easing);\n\n    function formatNumber(val) {\n      const parts = (decimals > 0 ? val.toFixed(decimals) : Math.floor(val).toString()).split('.');\n      if (thousandSep && parts[0].length > 3) {\n        const reversed = parts[0].split('').reverse();\n        parts[0] = reversed.reduce(\n          (acc, digit, i) => (i > 0 && i % 3 === 0 ? digit + thousandSep + acc : digit + acc),\n          ''\n        );\n      }\n      return parts.length > 1 && decimalSep ? parts[0] + decimalSep + parts[1] : parts[0];\n    }\n\n    function updateValue(time) {\n      const progress = Math.max(0, Math.min(1, time / duration));\n\n      if (progress <= 0.06) {\n        span.textContent = formatNumber(0);\n      } else if (progress >= 0.94) {\n        span.textContent = formatNumber(value);\n      } else {\n        const adjustedProgress = (progress - 0.05) / 0.9;\n        const easedProgress = easingFunction(adjustedProgress);\n        const currentValue = value * easedProgress;\n        span.textContent = formatNumber(currentValue);\n      }\n\n      if ((progress >= 1 && playbackRate > 0) || (progress <= 0 && playbackRate < 0)) {\n        playState = 'finished';\n      }\n    }\n\n    return {\n      tick(elapsed, loop = false) {\n        if ((loop && playState !== 'paused') || playState === 'running') {\n          playState = 'running';\n\n          currentTime = currentTime + (playbackRate > 0 ? elapsed : -elapsed);\n          currentTime = Math.max(0, Math.min(duration, currentTime));\n\n          updateValue(currentTime);\n        }\n      },\n\n      play() {\n        if (playState === 'finished' || playState === 'running') return;\n        playState = 'running';\n      },\n\n      pause() {\n        if (playState === 'running') {\n          playState = 'paused';\n        }\n      },\n\n      cancel() {\n        currentTime = duration * 0.95;\n        updateValue(currentTime);\n        playState = 'finished';\n      },\n\n      persist() {},\n\n      get playState() {\n        return playState;\n      },\n\n      get currentTime() {\n        return currentTime;\n      },\n\n      set currentTime(time) {\n        currentTime = Math.max(0, Math.min(duration, time));\n        updateValue(currentTime);\n      },\n\n      get playbackRate() {\n        return playbackRate;\n      },\n\n      set playbackRate(rate) {\n        playbackRate = rate;\n      },\n    };\n  }\n  // ============================================================================\n  // Animation Controller\n  // ============================================================================\n\n  class AnimationController {\n    reset() {\n      this.rafId = null;\n      this.lastTickTime = null;\n      this.virtualTime = 0;\n      this.animations = new Map();\n    }\n\n    constructor(data) {\n      this.data = data;\n      this.reset();\n    }\n\n    timeToSayGoodbye() {\n      if (this.animations.size !== 0) return false;\n      cancelAnimationFrame(this.rafId);\n      this.reset();\n      this.data.resolve();\n      return true;\n    }\n\n    cleanupAnimation(toCleanup) {\n      toCleanup.forEach(([animation, info]) => {\n        const clean = () => {\n          this.animations.delete(animation);\n          this.timeToSayGoodbye();\n        };\n        if (this.data.countData) {\n          animation.cancel();\n          clean();\n        } else\n          cancelAllAnimations(this.data, info.element, info.originalStyle).then(() => {\n            clean();\n          });\n      });\n    }\n\n    prepare(elapsed) {\n      const toCleanup = [];\n      const toAnimate = [];\n\n      for (const [animation, info] of this.animations) {\n        if (this.data.stop) {\n          toCleanup.push([animation, info]);\n          continue;\n        }\n\n        animation.tick?.(elapsed, info.loop);\n\n        const progress = animation.currentTime / info.duration;\n\n        if (!info.loop && (progress >= 0.95 || animation.playState === 'finished')) {\n          toCleanup.push([animation, info]);\n          continue;\n        } else if (\n          !info.waiting &&\n          !info.pendingPlay &&\n          ((progress >= 0.95 && info.playbackRate > 0) ||\n            (progress <= 0.05 && info.playbackRate < 0))\n        ) {\n          if (info.playbackRate < 0) animation.currentTime = info.duration * 0.03;\n          else animation.currentTime = info.duration * 0.97;\n          animation.pause();\n          info.waiting = true;\n        }\n\n        if (info.pendingPlay && this.virtualTime >= info.playAt) {\n          info.pendingPlay = false;\n          animation.play();\n        }\n\n        toAnimate.push(info);\n      }\n\n      return { toCleanup, toAnimate };\n    }\n\n    animate(toAnimate) {\n      if (toAnimate.length > 0 && toAnimate.every((info) => info.waiting)) {\n        const isJump = toAnimate[0].loop === 'jump';\n        const newPlaybackRate = isJump ? 1 : -toAnimate[0].playbackRate;\n\n        const delays = toAnimate.map((info) => info.staggerDelay);\n        const maxDelay = Math.max(...delays);\n\n        toAnimate.forEach((next) => {\n          if (isJump) next.animation.currentTime = next.duration * 0.03;\n          next.animation.playbackRate = newPlaybackRate;\n          next.playbackRate = newPlaybackRate;\n          next.waiting = false;\n\n          let delay = next.staggerDelay;\n          if (newPlaybackRate < 0) {\n            delay = maxDelay - next.staggerDelay;\n          }\n\n          if (!next.hasStarted && next.initialDelay > 0) {\n            next.hasStarted = true;\n            delay += next.initialDelay;\n          }\n\n          if (delay === 0) {\n            next.animation.play();\n          } else {\n            next.playAt = this.virtualTime + delay;\n            next.pendingPlay = true;\n          }\n        });\n      }\n    }\n\n    tick() {\n      const now = performance.now();\n      const elapsed = Math.min(now - (this.lastTickTime ?? now), 16.67);\n      this.virtualTime += elapsed;\n      this.lastTickTime = now;\n\n      const { toCleanup, toAnimate } = this.prepare(elapsed);\n\n      this.cleanupAnimation(toCleanup);\n\n      this.animate(toAnimate);\n\n      if (!this.timeToSayGoodbye()) {\n        this.rafId = requestAnimationFrame(() => this.tick());\n      }\n    }\n\n    add(element, config, originalStyle, initialDelay = 0, staggerDelay = 0) {\n      const duration = Math.max(\n        0,\n        ((this.data.config[CONFIG_DURATION] ?? instance.config.defaults.duration ?? 1000) + 1) / 0.9\n      );\n      const easing = this.data.config[CONFIG_EASING] ?? instance.config.defaults.easing;\n      const forwards =\n        this.data.config[CONFIG_FORWARDS] ?? instance.config.defaults.forwards ?? false;\n      const loopDefaults = instance.config.defaults.loop ?? 'mirror';\n      let loop =\n        this.data.config[CONFIG_LOOP] === true ? loopDefaults : this.data.config[CONFIG_LOOP];\n\n      let options = {\n        duration,\n        easing,\n        fill: 'forwards',\n      };\n\n      let keyframes = [];\n\n      if (this.data.config[CONFIG_TEXT]) {\n        loop = loop ?? loopDefaults;\n        options.easing = this.data.config[CONFIG_EASING] ?? 'linear';\n      }\n\n      keyframes = createKeyframes(config, originalStyle);\n      if (forwards) originalStyle = keyframes[keyframes.length - 1];\n\n      options = {\n        ...options,\n        delay: 0,\n        id: genTmpId(),\n      };\n      const animation = this.data.countData\n        ? animateCount(this.data.countData, options)\n        : element.animate(keyframes, options);\n\n      animation.persist();\n      animation.currentTime = duration * 0.03;\n      animation.pause();\n\n      this.animations.set(animation, {\n        animation,\n        element,\n        duration,\n        staggerDelay,\n        initialDelay,\n        originalStyle,\n        loop,\n        playbackRate: -1,\n        waiting: true,\n        hasStarted: false,\n      });\n    }\n\n    letsGo() {\n      const { element, config, targets, splitConfig } = this.data;\n      const initialDelay = Math.max(0, config[CONFIG_DELAY] ?? instance.config.defaults.delay ?? 0);\n      const originalStyle = element.__usalOGStyle;\n      const splitDelay = Math.max(\n        0,\n        splitConfig[CONFIG_DELAY] ?? instance.config.defaults.splitDelay ?? 0\n      );\n\n      let notReadYet = targets?.()?.length || (originalStyle ? 0 : 1);\n\n      if (targets) {\n        targets(splitDelay).forEach(([target, staggerDelay]) => {\n          const targetOriginalStyle = target.__usalOGStyle || originalStyle;\n          if (!targetOriginalStyle) return;\n          notReadYet--;\n          this.add(\n            target,\n            this.data.splitConfig,\n            targetOriginalStyle,\n            initialDelay,\n            parseInt(staggerDelay)\n          );\n        });\n      } else if (originalStyle) {\n        this.add(element, config, originalStyle, initialDelay);\n      }\n\n      if (notReadYet === 0 && !this.rafId) {\n        this.tick();\n      }\n    }\n  }\n\n  // ============================================================================\n  // Main Animation Controller\n  // ============================================================================\n\n  function tryAnimate(data) {\n    if (data.stop) return;\n    data.hasAnimated = true;\n\n    data.processing = new Promise((resolve) => {\n      data.resolve = resolve;\n      data.controller.letsGo();\n    }).then(() => {\n      data.onfinish();\n      data.processing = null;\n      data.stop = true;\n    });\n  }\n\n  function tryAnimateIfVisible(data, ratio = null) {\n    if (\n      data.config[CONFIG_LOOP] ||\n      data.processing !== null ||\n      (data.hasAnimated && (data.config[CONFIG_ONCE] ?? instance.config.once))\n    )\n      return;\n\n    const _ratio = ratio ?? calculateVisibilityRatio(data.element);\n\n    if (data.stop && _ratio < 0.01) {\n      resetStyle(data);\n      return;\n    }\n\n    const threshold = Math.max(\n      0,\n      Math.min(1, (data.config[CONFIG_THRESHOLD] ?? instance.config.defaults.threshold) / 100)\n    );\n\n    if (_ratio >= threshold) {\n      tryAnimate(data);\n    }\n  }\n\n  // ============================================================================\n  // Element Processing & Cleanup\n  // ============================================================================\n\n  const cleanupElement = (data) =>\n    new Promise((resolve) => {\n      data.onfinish = () => {\n        data.onfinish = () => {};\n\n        requestAnimationFrame(() =>\n          requestAnimationFrame(() => {\n            if (data.targets) {\n              data.targets().forEach(([target]) => {\n                if (target.__usalOGStyle) {\n                  applyStyles(target, target.__usalOGStyle, true);\n                }\n              });\n            }\n\n            if (data.textWrappers) {\n              data.textWrappers.forEach((wrapper) => {\n                if (wrapper?.parentNode) {\n                  wrapper.parentNode.replaceChild(\n                    document.createTextNode(wrapper.textContent),\n                    wrapper\n                  );\n                }\n              });\n            }\n\n            if (data.element.__usalOGStyle) {\n              applyStyles(data.element, data.element.__usalOGStyle, true);\n            }\n\n            resolve();\n          })\n        );\n      };\n\n      if (data.processing === null) data.onfinish();\n      else data.stop = true;\n    });\n\n  function processElement(element, elementObserver) {\n    if (element.__usalProcessing) return;\n\n    let classes = element.getAttribute(DATA_USAL_ATTRIBUTE) || '';\n    classes = classes\n      .replace(/\\/\\/[^\\n\\r]*/g, '')\n      .replace(/\\/\\*.*?\\*\\//gs, '')\n      .trim()\n      .toLowerCase();\n\n    if (!element.__usalID && classes !== '') {\n      element.__usalOGStyle = captureComputedStyle(element);\n      element.__usalID = element.getAttribute(DATA_USAL_ID) ?? genTmpId();\n    }\n\n    const existingData = instance.elements.get(element.__usalID);\n    if (existingData) {\n      if (classes !== existingData.configString) {\n        element.__usalProcessing = true;\n        instance.elements.delete(element.__usalID);\n        elementObserver.unobserve(element);\n        cleanupElement(existingData).then(() => {\n          delete element.__usalProcessing;\n          processElement(element, elementObserver);\n        });\n      }\n      return;\n    }\n\n    if (classes === '') return;\n\n    element.__usalFragment = 1;\n    const config = parseClasses(classes);\n\n    const data = {\n      element,\n      config,\n      splitConfig: [...config],\n      configString: classes,\n      targets: null,\n      state: null,\n      stop: false,\n      hasAnimated: false,\n      processing: null,\n      countData: null,\n      onfinish: () => {},\n      controller: null,\n      resolve: () => {},\n      textWrappers: null,\n    };\n\n    instance.elements.set(element.__usalID, {\n      configString: classes,\n    });\n\n    const splitBy = config[CONFIG_SPLIT]?.split(' ').find((item) =>\n      ['word', 'letter', 'item'].includes(item)\n    );\n\n    data.processing = new Promise((resolve) => {\n      let resolveNow = false;\n      if (config[CONFIG_COUNT]) {\n        setupCount(element, config, data, resolve);\n      } else if (splitBy) {\n        const splitOverrides = parseClasses(config[CONFIG_SPLIT]);\n        const emptyConfig = genEmptyConfig();\n        data.splitConfig = config.map((value, index) => {\n          const override = splitOverrides[index];\n          const empty = emptyConfig[index];\n          if (Array.isArray(override) && Array.isArray(empty)) {\n            return override.length > 0 ? override : value;\n          }\n          return override !== empty ? override : value;\n        });\n        const [targets, textWrappers] = setupSplit(\n          element,\n          splitBy,\n          data.splitConfig[CONFIG_STAGGER],\n          resolve\n        );\n        data.targets = targets;\n        data.textWrappers = textWrappers;\n        resolveNow = textWrappers === null;\n      } else resolveNow = true;\n      if (resolveNow) resolve();\n    }).then(() => {\n      if (data.stop) data.onfinish();\n      else {\n        instance.elements.set(element.__usalID, data);\n        data.controller = new AnimationController(data);\n        resetStyle(data);\n        requestAnimationFrame(async () => {\n          if (config[CONFIG_LOOP]) {\n            tryAnimate(data);\n          } else {\n            tryAnimateIfVisible(data);\n            elementObserver.observe(element);\n          }\n        });\n      }\n      data.processing = null;\n    });\n  }\n\n  // ============================================================================\n  // Observers Setup\n  // ============================================================================\n\n  function setupObservers() {\n    const domObservers = new Set();\n    const resizeObservers = new Set();\n    const observedDOMs = new Set();\n    let lastScan = 0;\n    let throttleOnTailTimer = null;\n\n    const elementObserver = new IntersectionObserver(\n      (entries) => {\n        for (const entry of entries) {\n          const data = instance.elements.get(\n            entry.target.__usalID || entry.target.getAttribute(DATA_USAL_ID)\n          );\n          if (data) {\n            tryAnimateIfVisible(data, entry.intersectionRatio);\n          }\n        }\n      },\n      { threshold: INTERSECTION_THRESHOLDS }\n    );\n\n    function collectAllDOMs(root = document.body, collected = new Set()) {\n      if (collected.has(root)) return collected;\n      collected.add(root);\n\n      for (const el of root.querySelectorAll(SHADOW_CAPABLE_SELECTOR)) {\n        if (el.shadowRoot && !collected.has(el.shadowRoot)) {\n          // noinspection JSCheckFunctionSignatures\n          collectAllDOMs(el.shadowRoot, collected);\n        }\n      }\n\n      return collected;\n    }\n\n    function observeDOM(dom) {\n      const mutationObs = new MutationObserver(handleObserverEvents);\n      mutationObs.observe(dom, {\n        childList: true,\n        subtree: true,\n        attributes: true,\n      });\n      domObservers.add(mutationObs);\n\n      const resizeObs = new ResizeObserver(handleObserverEvents);\n      if (dom === document.body || dom.host) {\n        resizeObs.observe(dom === document.body ? dom : dom.host);\n        resizeObservers.add(resizeObs);\n      }\n    }\n\n    function scanAllDOMs() {\n      // Clean disconnected elements\n      for (const [id, data] of instance.elements) {\n        if (!data || !data.element) {\n          instance.elements.delete(id);\n          continue;\n        }\n        if (!data.element.isConnected) {\n          elementObserver.unobserve(data.element);\n          cleanupElement(data).then(() => {\n            instance.elements.delete(id);\n          });\n        } else {\n          tryAnimateIfVisible(data);\n        }\n      }\n\n      // Process new elements\n      const allDOMs = collectAllDOMs();\n      for (const dom of allDOMs) {\n        if (!observedDOMs.has(dom)) {\n          observeDOM(dom);\n          observedDOMs.add(dom);\n        }\n        const elements = dom.querySelectorAll?.(DATA_USAL_SELECTOR);\n        for (const element of elements) {\n          processElement(element, elementObserver);\n        }\n      }\n      lastScan = Date.now();\n    }\n\n    function handleObserverEvents(events) {\n      const items = Array.isArray(events) ? events : [events];\n      const hasUsalFragment = (target) => !!target.__usalFragment;\n\n      let cancel = null;\n      for (const item of items) {\n        if (item.type === 'attributes') {\n          const attrName = item.attributeName;\n          if (attrName === DATA_USAL_ATTRIBUTE || attrName === DATA_USAL_ID) {\n            processElement(item.target, elementObserver);\n            cancel = true;\n          }\n        }\n        if (cancel === null) {\n          if (hasUsalFragment(item.target)) cancel = true;\n          if (item.type === 'childList') {\n            const hasUsalFragmentChild = [...item.addedNodes, ...item.removedNodes].some(\n              hasUsalFragment\n            );\n            if (hasUsalFragmentChild) cancel = true;\n          }\n        }\n      }\n\n      if (cancel) return;\n\n      const timeSinceLastScan = Date.now() - lastScan;\n      if (timeSinceLastScan >= instance.config.observersDelay) {\n        scanAllDOMs();\n      } else {\n        if (throttleOnTailTimer) clearTimeout(throttleOnTailTimer);\n        throttleOnTailTimer = setTimeout(\n          () => {\n            scanAllDOMs();\n          },\n          Math.max(0, instance.config.observersDelay - timeSinceLastScan)\n        );\n      }\n    }\n\n    scanAllDOMs();\n\n    return () => {\n      clearTimeout(throttleOnTailTimer);\n      domObservers.forEach((obs) => obs.disconnect());\n      resizeObservers.forEach((obs) => obs.disconnect());\n      elementObserver.disconnect();\n      domObservers.clear();\n      resizeObservers.clear();\n      observedDOMs.clear();\n    };\n  }\n\n  // ============================================================================\n  // Initialization\n  // ============================================================================\n\n  function autoInit() {\n    if (!instance.initialized) {\n      instance.initialized = true;\n      instance.observers = setupObservers();\n    }\n  }\n\n  // ============================================================================\n  // Public API\n  // ============================================================================\n\n  const publicAPI = {\n    config(newConfig = {}) {\n      if (arguments.length === 0) return { ...instance.config };\n\n      if (newConfig.defaults) {\n        newConfig.defaults = {\n          ...instance.config.defaults,\n          ...newConfig.defaults,\n        };\n      }\n\n      Object.assign(instance.config, newConfig);\n      return publicAPI;\n    },\n    async destroy() {\n      if (!instance.initialized) return Promise.resolve();\n      if (instance.destroying != null) return instance.destroying;\n      if (instance.destroyTimer) {\n        clearTimeout(instance.destroyTimer);\n      }\n\n      instance.destroying = new Promise((resolve) => {\n        instance.destroyTimer = setTimeout(async () => {\n          instance.destroyTimer = null;\n\n          instance.observers();\n          const elements = Array.from(instance.elements.values());\n\n          await Promise.all(elements.map((data) => cleanupElement(data)));\n\n          instance.elements.clear();\n          instance.observers = () => {};\n          instance.initialized = false;\n          instance.destroying = null;\n          resolve();\n        }, 50);\n      });\n\n      return instance.destroying;\n    },\n\n    async restart() {\n      if (instance.restarting != null) return instance.restarting;\n\n      if (instance.destroyTimer) {\n        clearTimeout(instance.destroyTimer);\n        instance.destroyTimer = null;\n      }\n      if (instance.restartTimer) {\n        clearTimeout(instance.restartTimer);\n      }\n\n      instance.restarting = new Promise((resolve) => {\n        instance.restartTimer = setTimeout(() => {\n          instance.restartTimer = null;\n\n          publicAPI\n            .destroy()\n            .then(\n              () =>\n                new Promise((resolveInit) => {\n                  requestAnimationFrame(() => {\n                    if (document.readyState === 'loading') {\n                      document.addEventListener(\n                        'DOMContentLoaded',\n                        () => {\n                          autoInit();\n                          resolveInit(publicAPI);\n                        },\n                        { once: true }\n                      );\n                    } else {\n                      autoInit();\n                      resolveInit(publicAPI);\n                    }\n                  });\n                })\n            )\n            .then(resolve)\n            .finally(() => {\n              instance.restarting = null;\n            });\n        }, 50);\n      });\n\n      return instance.restarting;\n    },\n\n    initialized: () => instance.initialized,\n    version: '{%%VERSION%%}',\n  };\n\n  // Initialize on DOM ready\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', autoInit, { once: true });\n  } else {\n    requestAnimationFrame(autoInit);\n  }\n\n  return publicAPI;\n})();\n\n// Export for modules\nif (typeof window !== 'undefined' && !window.USAL) {\n  window.USAL = USAL;\n}\n\nexport default USAL;\n"],
  "mappings": "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",
  "names": ["_a", "first"]
}
