Twitter/X Media Batch Downloader Pro

Download all images and videos from any Twitter/X account, including withheld accounts, in original quality — with just one click.

// ==UserScript==
// @name            Twitter/X Media Batch Downloader Pro
// @name:zh         Twitter 媒体批量下载器 Pro
// @name:ja         Twitter メディア一括ダウンローダー Pro
// @description     Download all images and videos from any Twitter/X account, including withheld accounts, in original quality — with just one click.
// @description:zh  从任何 Twitter/X 帐号(包括受限制的帐号)一键下载所有图片和视频,保持原始画质。
// @description:ja  Twitter/X のあらゆるアカウント(制限付きアカウントを含む)から、すべての画像と動画をワンクリックで元の画質のままダウンロード。
// @antifeature     payment Unlock access to the Twitter/X Media Batch Downloader Pro script by becoming a paid member! Join the membership to receive your Patreon auth code.
// @icon            data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyOC4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDojRkNBMzExO30NCjwvc3R5bGU+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjg4LjUsMjI5LjlsMTM4LjIsMTk2LjhIMzI1bC05My4xLTEzMi41TDExNS40LDQyNi43SDg1LjNsMTMzLjMtMTUxLjZMODUuMyw4NS4zSDE4N2w4OC4xLDEyNS41TDM4NS41LDg1LjMNCgloMzAuMUwyODguNSwyMjkuOXogTTM4NS41LDQwNS41TDI3Mi44LDI0Ny44bC0xMy41LTE4LjlsLTg2LjctMTIxLjNoLTQ2LjNsMTA3LjQsMTUwLjNsMTMuNSwxOC45bDkxLjksMTI4LjhIMzg1LjV6Ii8+DQo8Zz4NCgk8cGF0aCBkPSJNNDkwLjcsNjAuNnYzOTAuOGMwLDIxLjctMTcuNiwzOS4zLTM5LjMsMzkuM0g2MC42Yy0yMS43LDAtMzkuMy0xNy42LTM5LjMtMzkuM1Y2MC42YzAtMjEuNywxNy42LTM5LjMsMzkuMy0zOS4zaDM5MC44DQoJCUM0NzMuMSwyMS4zLDQ5MC43LDM4LjksNDkwLjcsNjAuNnogTTQyNi43LDQyNi43TDI4OC41LDIyOS45TDQxNS42LDg1LjNoLTMwLjFMMjc1LjEsMjEwLjhMMTg3LDg1LjNIODUuM2wxMzMuMywxODkuOEw4NS4zLDQyNi43DQoJCWgzMC4xbDExNi41LTEzMi41TDMyNSw0MjYuN0g0MjYuN3oiLz4NCgk8cG9seWdvbiBwb2ludHM9IjI3Mi44LDI0Ny44IDM4NS41LDQwNS41IDMzOS4yLDQwNS41IDI0Ny4zLDI3Ni44IDIzMy43LDI1Ny45IDEyNi4zLDEwNy41IDE3Mi42LDEwNy41IDI1OS4zLDIyOC45IAkiLz4NCjwvZz4NCjwvc3ZnPg0K
// @namespace       https://xbatch.online
// @supportURL      https://www.patreon.com/exyezed
// @homepageURL     https://www.patreon.com/exyezed
// @version         1.0.2
// @author          exyezed
// @license         MIT
// @match           *://twitter.com/*
// @match           *://x.com/*
// @require         https://cdn.jsdelivr.net/npm/[email protected]/dayjs.min.js
// @require         https://cdn.jsdelivr.net/npm/[email protected]/dist/dexie.min.js
// @require         https://cdn.jsdelivr.net/npm/[email protected]/dist/FileSaver.min.js
// @require         https://cdn.jsdelivr.net/npm/[email protected]/i18next.min.js
// @require         https://cdn.jsdelivr.net/npm/[email protected]/dist/preact.min.js
// @require         https://cdn.jsdelivr.net/npm/[email protected]/hooks/dist/hooks.umd.js
// @require         https://cdn.jsdelivr.net/npm/@preact/[email protected]/dist/signals-core.min.js
// @require         https://cdn.jsdelivr.net/npm/@preact/[email protected]/dist/signals.min.js
// @require         https://cdn.jsdelivr.net/npm/[email protected]/umd/index.min.js
// @connect         api.xbatch.online
// @connect         alt.xbatch.online
// @grant           GM_xmlhttpRequest
// @grant           unsafeWindow
// @run-at          document-start
// ==/UserScript==

(function (preact, signals, hooks, i18next, dayjs, Dexie, fileSaverEs, fflate) {
  'use strict';

  var f = 0;
  function u(e, t, n, o, i, u2) {
    t || (t = {});
    var a, c, p = t;
    if ("ref" in p) for (c in p = {}, t) "ref" == c ? a = t[c] : p[c] = t[c];
    var l = { type: e, props: p, key: n, ref: a, __k: null, __: null, __b: 0, __e: null, __c: null, constructor: void 0, __v: --f, __i: -1, __u: 0, __source: i, __self: u2 };
    if ("function" == typeof e && (a = e.defaultProps)) for (c in a) void 0 === p[c] && (p[c] = a[c]);
    return preact.options.vnode && preact.options.vnode(l), l;
  }
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var defaultAttributes = {
    outline: {
      xmlns: "http://www.w3.org/2000/svg",
      width: 24,
      height: 24,
      viewBox: "0 0 24 24",
      fill: "none",
      stroke: "currentColor",
      "stroke-width": 2,
      "stroke-linecap": "round",
      "stroke-linejoin": "round"
    },
    filled: {
      xmlns: "http://www.w3.org/2000/svg",
      width: 24,
      height: 24,
      viewBox: "0 0 24 24",
      fill: "currentColor",
      stroke: "none"
    }
  };
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  const createPreactComponent = (type, iconName, iconNamePascal, iconNode) => {
    const Component2 = ({
      color = "currentColor",
      size = 24,
      stroke = 2,
      title,
      children,
      className = "",
      class: classes = "",
      style,
      ...rest
    }) => preact.h(
      "svg",
      {
        ...defaultAttributes[type],
        width: String(size),
        height: String(size),
        class: [`tabler-icon`, `tabler-icon-${iconName}`, classes, className].join(" "),
        ...type === "filled" ? {
          fill: color
        } : {
          "stroke-width": stroke,
          stroke: color
        },
        style,
        ...rest
      },
      [
        title && preact.h("title", {}, title),
        ...iconNode.map(([tag, attrs]) => preact.h(tag, attrs)),
        ...preact.toChildArray(children)
      ]
    );
    Component2.displayName = `${iconNamePascal}`;
    return Component2;
  };
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconAlertTriangle = createPreactComponent("outline", "alert-triangle", "AlertTriangle", [["path", { "d": "M12 9v4", "key": "svg-0" }], ["path", { "d": "M10.363 3.591l-8.106 13.534a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636 -2.87l-8.106 -13.536a1.914 1.914 0 0 0 -3.274 0z", "key": "svg-1" }], ["path", { "d": "M12 16h.01", "key": "svg-2" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconBook = createPreactComponent("outline", "book", "Book", [["path", { "d": "M3 19a9 9 0 0 1 9 0a9 9 0 0 1 9 0", "key": "svg-0" }], ["path", { "d": "M3 6a9 9 0 0 1 9 0a9 9 0 0 1 9 0", "key": "svg-1" }], ["path", { "d": "M3 6l0 13", "key": "svg-2" }], ["path", { "d": "M12 6l0 13", "key": "svg-3" }], ["path", { "d": "M21 6l0 13", "key": "svg-4" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconBrandChrome = createPreactComponent("outline", "brand-chrome", "BrandChrome", [["path", { "d": "M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 12m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0", "key": "svg-1" }], ["path", { "d": "M12 9h8.4", "key": "svg-2" }], ["path", { "d": "M14.598 13.5l-4.2 7.275", "key": "svg-3" }], ["path", { "d": "M9.402 13.5l-4.2 -7.275", "key": "svg-4" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconBrandPatreon = createPreactComponent("outline", "brand-patreon", "BrandPatreon", [["path", { "d": "M20 8.408c-.003 -2.299 -1.746 -4.182 -3.79 -4.862c-2.54 -.844 -5.888 -.722 -8.312 .453c-2.939 1.425 -3.862 4.545 -3.896 7.656c-.028 2.559 .22 9.297 3.92 9.345c2.75 .036 3.159 -3.603 4.43 -5.356c.906 -1.247 2.071 -1.599 3.506 -1.963c2.465 -.627 4.146 -2.626 4.142 -5.273z", "key": "svg-0" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconBrandTwitter = createPreactComponent("outline", "brand-twitter", "BrandTwitter", [["path", { "d": "M22 4.01c-1 .49 -1.98 .689 -3 .99c-1.121 -1.265 -2.783 -1.335 -4.38 -.737s-2.643 2.06 -2.62 3.737v1c-3.245 .083 -6.135 -1.395 -8 -4c0 0 -4.182 7.433 4 11c-1.872 1.247 -3.739 2.088 -6 2c3.308 1.803 6.913 2.423 10.034 1.517c3.58 -1.04 6.522 -3.723 7.651 -7.742a13.84 13.84 0 0 0 .497 -3.753c0 -.249 1.51 -2.772 1.818 -4.013z", "key": "svg-0" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconChevronLeft = createPreactComponent("outline", "chevron-left", "ChevronLeft", [["path", { "d": "M15 6l-6 6l6 6", "key": "svg-0" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconChevronRight = createPreactComponent("outline", "chevron-right", "ChevronRight", [["path", { "d": "M9 6l6 6l-6 6", "key": "svg-0" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconCircleCheck = createPreactComponent("outline", "circle-check", "CircleCheck", [["path", { "d": "M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0", "key": "svg-0" }], ["path", { "d": "M9 12l2 2l4 -4", "key": "svg-1" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconCircleX = createPreactComponent("outline", "circle-x", "CircleX", [["path", { "d": "M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0", "key": "svg-0" }], ["path", { "d": "M10 10l4 4m0 -4l-4 4", "key": "svg-1" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconCloudDown = createPreactComponent("outline", "cloud-down", "CloudDown", [["path", { "d": "M12 18.004h-5.343c-2.572 -.004 -4.657 -2.011 -4.657 -4.487c0 -2.475 2.085 -4.482 4.657 -4.482c.393 -1.762 1.794 -3.2 3.675 -3.773c1.88 -.572 3.956 -.193 5.444 1c1.488 1.19 2.162 3.007 1.77 4.769h.99c1.38 0 2.573 .813 3.13 1.99", "key": "svg-0" }], ["path", { "d": "M19 16v6", "key": "svg-1" }], ["path", { "d": "M22 19l-3 3l-3 -3", "key": "svg-2" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconCloudUp = createPreactComponent("outline", "cloud-up", "CloudUp", [["path", { "d": "M12 18.004h-5.343c-2.572 -.004 -4.657 -2.011 -4.657 -4.487c0 -2.475 2.085 -4.482 4.657 -4.482c.393 -1.762 1.794 -3.2 3.675 -3.773c1.88 -.572 3.956 -.193 5.444 1c1.488 1.19 2.162 3.007 1.77 4.769h.99c1.38 0 2.57 .811 3.128 1.986", "key": "svg-0" }], ["path", { "d": "M19 22v-6", "key": "svg-1" }], ["path", { "d": "M22 19l-3 -3l-3 3", "key": "svg-2" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconDatabaseExport = createPreactComponent("outline", "database-export", "DatabaseExport", [["path", { "d": "M4 6c0 1.657 3.582 3 8 3s8 -1.343 8 -3s-3.582 -3 -8 -3s-8 1.343 -8 3", "key": "svg-0" }], ["path", { "d": "M4 6v6c0 1.657 3.582 3 8 3c1.118 0 2.183 -.086 3.15 -.241", "key": "svg-1" }], ["path", { "d": "M20 12v-6", "key": "svg-2" }], ["path", { "d": "M4 12v6c0 1.657 3.582 3 8 3c.157 0 .312 -.002 .466 -.005", "key": "svg-3" }], ["path", { "d": "M16 19h6", "key": "svg-4" }], ["path", { "d": "M19 16l3 3l-3 3", "key": "svg-5" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconDatabaseImport = createPreactComponent("outline", "database-import", "DatabaseImport", [["path", { "d": "M4 6c0 1.657 3.582 3 8 3s8 -1.343 8 -3s-3.582 -3 -8 -3s-8 1.343 -8 3", "key": "svg-0" }], ["path", { "d": "M4 6v6c0 1.657 3.582 3 8 3c.856 0 1.68 -.05 2.454 -.144m5.546 -2.856v-6", "key": "svg-1" }], ["path", { "d": "M4 12v6c0 1.657 3.582 3 8 3c.171 0 .341 -.002 .51 -.006", "key": "svg-2" }], ["path", { "d": "M19 22v-6", "key": "svg-3" }], ["path", { "d": "M22 19l-3 -3l-3 3", "key": "svg-4" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconDatabaseSearch = createPreactComponent("outline", "database-search", "DatabaseSearch", [["path", { "d": "M4 6c0 1.657 3.582 3 8 3s8 -1.343 8 -3s-3.582 -3 -8 -3s-8 1.343 -8 3", "key": "svg-0" }], ["path", { "d": "M4 6v6c0 1.657 3.582 3 8 3m8 -3.5v-5.5", "key": "svg-1" }], ["path", { "d": "M4 12v6c0 1.657 3.582 3 8 3", "key": "svg-2" }], ["path", { "d": "M18 18m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0", "key": "svg-3" }], ["path", { "d": "M20.2 20.2l1.8 1.8", "key": "svg-4" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconDatabaseX = createPreactComponent("outline", "database-x", "DatabaseX", [["path", { "d": "M4 6c0 1.657 3.582 3 8 3s8 -1.343 8 -3s-3.582 -3 -8 -3s-8 1.343 -8 3", "key": "svg-0" }], ["path", { "d": "M4 6v6c0 1.657 3.582 3 8 3c.537 0 1.062 -.02 1.57 -.058", "key": "svg-1" }], ["path", { "d": "M20 13.5v-7.5", "key": "svg-2" }], ["path", { "d": "M4 12v6c0 1.657 3.582 3 8 3c.384 0 .762 -.01 1.132 -.03", "key": "svg-3" }], ["path", { "d": "M22 22l-5 -5", "key": "svg-4" }], ["path", { "d": "M17 22l5 -5", "key": "svg-5" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconDatabase = createPreactComponent("outline", "database", "Database", [["path", { "d": "M12 6m-8 0a8 3 0 1 0 16 0a8 3 0 1 0 -16 0", "key": "svg-0" }], ["path", { "d": "M4 6v6a8 3 0 0 0 16 0v-6", "key": "svg-1" }], ["path", { "d": "M4 12v6a8 3 0 0 0 16 0v-6", "key": "svg-2" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconDownload = createPreactComponent("outline", "download", "Download", [["path", { "d": "M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2", "key": "svg-0" }], ["path", { "d": "M7 11l5 5l5 -5", "key": "svg-1" }], ["path", { "d": "M12 4l0 12", "key": "svg-2" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconExclamationCircle = createPreactComponent("outline", "exclamation-circle", "ExclamationCircle", [["path", { "d": "M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 9v4", "key": "svg-1" }], ["path", { "d": "M12 16v.01", "key": "svg-2" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconExternalLink = createPreactComponent("outline", "external-link", "ExternalLink", [["path", { "d": "M12 6h-6a2 2 0 0 0 -2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-6", "key": "svg-0" }], ["path", { "d": "M11 13l9 -9", "key": "svg-1" }], ["path", { "d": "M15 4h5v5", "key": "svg-2" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconEyeOff = createPreactComponent("outline", "eye-off", "EyeOff", [["path", { "d": "M10.585 10.587a2 2 0 0 0 2.829 2.828", "key": "svg-0" }], ["path", { "d": "M16.681 16.673a8.717 8.717 0 0 1 -4.681 1.327c-3.6 0 -6.6 -2 -9 -6c1.272 -2.12 2.712 -3.678 4.32 -4.674m2.86 -1.146a9.055 9.055 0 0 1 1.82 -.18c3.6 0 6.6 2 9 6c-.666 1.11 -1.379 2.067 -2.138 2.87", "key": "svg-1" }], ["path", { "d": "M3 3l18 18", "key": "svg-2" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconEye = createPreactComponent("outline", "eye", "Eye", [["path", { "d": "M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0", "key": "svg-0" }], ["path", { "d": "M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6", "key": "svg-1" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconFileCode = createPreactComponent("outline", "file-code", "FileCode", [["path", { "d": "M14 3v4a1 1 0 0 0 1 1h4", "key": "svg-0" }], ["path", { "d": "M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z", "key": "svg-1" }], ["path", { "d": "M10 13l-1 2l1 2", "key": "svg-2" }], ["path", { "d": "M14 13l1 2l-1 2", "key": "svg-3" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconFileDownload = createPreactComponent("outline", "file-download", "FileDownload", [["path", { "d": "M14 3v4a1 1 0 0 0 1 1h4", "key": "svg-0" }], ["path", { "d": "M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z", "key": "svg-1" }], ["path", { "d": "M12 17v-6", "key": "svg-2" }], ["path", { "d": "M9.5 14.5l2.5 2.5l2.5 -2.5", "key": "svg-3" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconGif = createPreactComponent("outline", "gif", "Gif", [["path", { "d": "M8 8h-2a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h2v-4h-1", "key": "svg-0" }], ["path", { "d": "M12 8v8", "key": "svg-1" }], ["path", { "d": "M16 12h3", "key": "svg-2" }], ["path", { "d": "M20 8h-4v8", "key": "svg-3" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconInfoCircle = createPreactComponent("outline", "info-circle", "InfoCircle", [["path", { "d": "M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 9h.01", "key": "svg-1" }], ["path", { "d": "M11 12h1v4h1", "key": "svg-2" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconLibraryPhoto = createPreactComponent("outline", "library-photo", "LibraryPhoto", [["path", { "d": "M7 3m0 2.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667z", "key": "svg-0" }], ["path", { "d": "M4.012 7.26a2.005 2.005 0 0 0 -1.012 1.737v10c0 1.1 .9 2 2 2h10c.75 0 1.158 -.385 1.5 -1", "key": "svg-1" }], ["path", { "d": "M17 7h.01", "key": "svg-2" }], ["path", { "d": "M7 13l3.644 -3.644a1.21 1.21 0 0 1 1.712 0l3.644 3.644", "key": "svg-3" }], ["path", { "d": "M15 12l1.644 -1.644a1.21 1.21 0 0 1 1.712 0l2.644 2.644", "key": "svg-4" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconPhotoEdit = createPreactComponent("outline", "photo-edit", "PhotoEdit", [["path", { "d": "M15 8h.01", "key": "svg-0" }], ["path", { "d": "M11 20h-4a3 3 0 0 1 -3 -3v-10a3 3 0 0 1 3 -3h10a3 3 0 0 1 3 3v4", "key": "svg-1" }], ["path", { "d": "M4 15l4 -4c.928 -.893 2.072 -.893 3 0l3 3", "key": "svg-2" }], ["path", { "d": "M14 14l1 -1c.31 -.298 .644 -.497 .987 -.596", "key": "svg-3" }], ["path", { "d": "M18.42 15.61a2.1 2.1 0 0 1 2.97 2.97l-3.39 3.42h-3v-3l3.42 -3.39z", "key": "svg-4" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconPhoto = createPreactComponent("outline", "photo", "Photo", [["path", { "d": "M15 8h.01", "key": "svg-0" }], ["path", { "d": "M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12z", "key": "svg-1" }], ["path", { "d": "M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5", "key": "svg-2" }], ["path", { "d": "M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3", "key": "svg-3" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconPlayerPlay = createPreactComponent("outline", "player-play", "PlayerPlay", [["path", { "d": "M7 4v16l13 -8z", "key": "svg-0" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconPlayerStop = createPreactComponent("outline", "player-stop", "PlayerStop", [["path", { "d": "M5 5m0 2a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2z", "key": "svg-0" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconRestore = createPreactComponent("outline", "restore", "Restore", [["path", { "d": "M3.06 13a9 9 0 1 0 .49 -4.087", "key": "svg-0" }], ["path", { "d": "M3 4.001v5h5", "key": "svg-1" }], ["path", { "d": "M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-2" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconSettings = createPreactComponent("outline", "settings", "Settings", [["path", { "d": "M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065z", "key": "svg-0" }], ["path", { "d": "M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0", "key": "svg-1" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconStack2 = createPreactComponent("outline", "stack-2", "Stack2", [["path", { "d": "M12 4l-8 4l8 4l8 -4l-8 -4", "key": "svg-0" }], ["path", { "d": "M4 12l8 4l8 -4", "key": "svg-1" }], ["path", { "d": "M4 16l8 4l8 -4", "key": "svg-2" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconTrash = createPreactComponent("outline", "trash", "Trash", [["path", { "d": "M4 7l16 0", "key": "svg-0" }], ["path", { "d": "M10 11l0 6", "key": "svg-1" }], ["path", { "d": "M14 11l0 6", "key": "svg-2" }], ["path", { "d": "M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12", "key": "svg-3" }], ["path", { "d": "M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3", "key": "svg-4" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconVideo = createPreactComponent("outline", "video", "Video", [["path", { "d": "M15 10l4.553 -2.276a1 1 0 0 1 1.447 .894v6.764a1 1 0 0 1 -1.447 .894l-4.553 -2.276v-4z", "key": "svg-0" }], ["path", { "d": "M3 6m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z", "key": "svg-1" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconWorld = createPreactComponent("outline", "world", "World", [["path", { "d": "M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0", "key": "svg-0" }], ["path", { "d": "M3.6 9h16.8", "key": "svg-1" }], ["path", { "d": "M3.6 15h16.8", "key": "svg-2" }], ["path", { "d": "M11.5 3a17 17 0 0 0 0 18", "key": "svg-3" }], ["path", { "d": "M12.5 3a17 17 0 0 1 0 18", "key": "svg-4" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconWriting = createPreactComponent("outline", "writing", "Writing", [["path", { "d": "M20 17v-12c0 -1.121 -.879 -2 -2 -2s-2 .879 -2 2v12l2 2l2 -2z", "key": "svg-0" }], ["path", { "d": "M16 7h4", "key": "svg-1" }], ["path", { "d": "M18 19h-13a2 2 0 1 1 0 -4h4a2 2 0 1 0 0 -4h-3", "key": "svg-2" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconX = createPreactComponent("outline", "x", "X", [["path", { "d": "M18 6l-12 12", "key": "svg-0" }], ["path", { "d": "M6 6l12 12", "key": "svg-1" }]]);
  /**
   * @license @tabler/icons-preact v3.35.0 - MIT
   *
   * This source code is licensed under the MIT license.
   * See the LICENSE file in the root directory of this source tree.
   */
  var IconUserFilled = createPreactComponent("filled", "user-filled", "UserFilled", [["path", { "d": "M12 2a5 5 0 1 1 -5 5l.005 -.217a5 5 0 0 1 4.995 -4.783z", "key": "svg-0" }], ["path", { "d": "M14 14a5 5 0 0 1 5 5v1a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-1a5 5 0 0 1 5 -5h4z", "key": "svg-1" }]]);
  const ar = { "common": { "Settings": "الإعدادات", "Theme": "السمة", "Change Theme": "تغيير السمة", "Language": "اللغة", "Change Language": "تغيير اللغة", "Date Time Format": "تنسيق التاريخ والوقت", "Debug": "تشخيص الأخطاء", "Global Settings": "الإعدادات العامة", "Version": "الإصدار", "Common Formats:": "التنسيقات الشائعة:", "Date Formats:": "تنسيقات التاريخ:", "Time Formats:": "تنسيقات الوقت:", "Combined Examples:": "أمثلة مجمعة:", "Localized": "محلي", "Reset Settings": "إعادة تعيين الإعدادات", "Are you sure you want to reset settings to defaults?": "هل أنت متأكد من إعادة تعيين الإعدادات إلى القيم الافتراضية؟", "Reset": "إعادة تعيين", "Cancel": "إلغاء", "Chrome": "Chrome", "Userscript": "سكريبت المستخدم", "Website": "الموقع", "Patreon": "Patreon", "Dashboard": "لوحة المراقبة", "Database": "قاعدة البيانات", "Auth": "المصادقة", "Convert Animated GIFs": "تحويل GIF", "Convert GIFs (External)": "تحويل GIF (خارجي)", "Concurrent Downloads": "التنزيلات المتزامنة", "Use 10+ only with fast internet": "استخدم 10+ فقط مع إنترنت سريع", "Smaller size, same quality": "حجم أصغر، نفس الجودة", "Larger size, same quality": "حجم أكبر، نفس الجودة", "Back": "العودة", "Please visit a profile page for auto-detection": "يرجى زيارة صفحة ملف شخصي للاكتشاف التلقائي", "Please configure authentication in the Auth tab first": "يرجى تكوين المصادقة في علامة تبويب المصادقة أولاً", "Invalid username format": "تنسيق اسم المستخدم غير صحيح", "Invalid auth token. Please check your settings.": "رمز المصادقة غير صحيح. يرجى التحقق من إعداداتك.", "Invalid Patreon auth. Please check your settings.": "مصادقة Patreon غير صحيحة. يرجى التحقق من إعداداتك.", "Failed to fetch data": "فشل في جلب البيانات", "Failed to fetch data from all APIs": "فشل جلب البيانات من جميع واجهات برمجة التطبيقات", "Failed to verify auth from all APIs": "فشل التحقق من المصادقة من جميع واجهات برمجة التطبيقات", "Failed to generate token from all APIs": "فشل إنشاء الرمز من جميع واجهات برمجة التطبيقات", "Generating token...": "جارٍ إنشاء الرمز...", "Abort": "إحباط", "Network error occurred": "حدث خطأ في الشبكة", "Request timeout - please try again": "انتهت مهلة الطلب - يرجى المحاولة مرة أخرى", "Failed to parse API response": "فشل تحليل استجابة واجهة برمجة التطبيقات", "Invalid API response structure": "بنية استجابة واجهة برمجة التطبيقات غير صالحة", "Unknown error occurred": "حدث خطأ غير معروف", "HTTP error! status: {{status}}": "خطأ HTTP! الحالة: {{status}}", "Download already in progress": "عملية التنزيل قيد التنفيذ بالفعل", "No media files found": "لم يتم العثور على ملفات وسائط", "Toggle visibility": "إظهار/إخفاء", "Close": "إغلاق", "Converting GIFs...": "...تحويل صور GIF", "Downloading...": "تحميل...", "Download": "تحميل", "Fetching...": "...جارٍ الجلب", "Fetch All": "جلب الكل", "Fetch Video": "جلب الفيديو", "Fetch Image": "جلب الصورة", "Fetch GIF": "جلب GIF", "Posts: {{posts}}": "المنشورات: {{posts}}", "Media: {{media}}": "الوسائط: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "الوسائط الحالية: {{current}} • إجمالي الوسائط: {{total}}", "Failed to download media": "فشل في تحميل الوسائط", "Demo mode is only available for @xbatchdemo": "وضع العرض التجريبي متاح فقط لـ @xbatchdemo", "Auth Token": "رمز المصادقة", "Enter your auth token": "أدخل رمز المصادقة الخاص بك", "Your authentication token for API access": "رمز المصادقة الخاص بك للوصول إلى API", "Patreon Auth": "مصادقة Patreon", "Enter your Patreon auth": "أدخل مصادقة Patreon الخاصة بك", "Your Patreon authentication key": "مفتاح مصادقة Patreon الخاص بك", "Please enter Patreon auth first": "يرجى إدخال مصادقة Patreon أولاً", "Please verify Patreon auth first": "يرجى التحقق من مصادقة Patreon أولاً", "Patreon auth verified successfully": "تم التحقق من مصادقة Patreon بنجاح", "Invalid Patreon auth": "مصادقة Patreon غير صحيحة", "Verification failed. Please try again": "فشل التحقق. يرجى المحاولة مرة أخرى", "Generating": "إنشاء", "Generate": "إنشاء", "Verify": "التحقق", "Token generated successfully": "تم إنشاء الرمز بنجاح ({{current}}/{{total}})", "Failed to generate token": "فشل في إنشاء الرمز", "Token generation failed. Please try again": "فشل إنشاء الرمز. يرجى المحاولة مرة أخرى", "Verifying": "التحقق", "Verified": "تم التحقق", "Use code": "استخدم الرمز", "for Patreon Auth, click Verify to unlock demo. Test at": 'لمصادقة Patreon، انقر "التحقق" لفتح العرض التجريبي. جرّب في', "Need help with Auth Token? See": "بحاجة إلى مساعدة بخصوص رمز المصادقة؟ راجع", "the guide": "الدليل", "Subscribe": "اشترك", "to get your Patreon Auth code and start downloading with ease!": "للحصول على رمز مصادقة Patreon والبدء في التنزيل بسهولة!", "Report bugs or request features:": "أبلغ عن الأخطاء أو اطلب الميزات:", "Import": "استيراد", "Importing...": "...استيراد", "Supports JSON and ZIP formats": "يدعم تنسيقات JSON و ZIP", "Export": "تصدير", "Export All Data": "تصدير كل البيانات", "Exporting...": "...تصدير", "Clear": "مسح", "Filter by Batch": "تصفية حسب الدفعات", "Are you sure to clear all data in the database?": "هل أنت متأكد من مسح جميع البيانات في قاعدة البيانات؟", "Delete Account Data": "حذف بيانات الحساب", "Are you sure you want to delete account data? This action cannot be undone": "هل أنت متأكد من حذف بيانات {{username}}؟ لا يمكن التراجع عن هذا الإجراء.", "Delete": "حذف", "Deleting...": "...حذف", "Overwrite": "استبدال", "Overwrite Existing Data?": "استبدال البيانات الحالية؟", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "بيانات الحساب @{{username}} موجودة بالفعل في قاعدة البيانات. هل تريد استبدالها؟", "No accounts yet": "لا توجد حسابات بعد", "Use Dashboard to fetch data.": "استخدم لوحة المراقبة لجلب البيانات.", "Something went wrong.": "حدث خطأ ما.", "Error:": "خطأ:", "Fetch": "جلب", "Single": "مفرد", "Batch": "دفعات", "Auto Batch": "دفعات تلقائية", "Timeline": "الخط الزمني", "Media": "الوسائط", "Batch Size": "حجم الدُفعة", "Starting Batch": "الدُفعة الابتدائية", "Posts": "المنشورات", "Tweets": "التغريدات", "Replies": "الردود", "All": "الكل", "Image": "صورة", "Video": "فيديو", "GIF": "GIF", "Batch: {{page}}": "الدُفعة: {{page}}", "Start": "بدء", "Stop": "إيقاف", "Prev": "السابق", "Next": "التالي", "Download Current": "تنزيل الحالي", "Download All": "تنزيل الكل", "Use Batch/Auto Batch if single fetch fails": "استخدم الدفعات/الدفعات التلقائية إذا فشل الجلب المفرد", "Load from database": "تحميل من قاعدة البيانات", "Load database": "تحميل قاعدة البيانات", "Home": "البداية", "End": "النهاية", "Failed to load data": "فشل في تحميل البيانات", "Update": "تحديث", "Updating...": "...جارٍ التحديث", "Update will fetch the latest data and overwrite the database. Continue?": "سيقوم التحديث بجلب أحدث البيانات والكتابة فوق قاعدة البيانات. هل تريد المتابعة؟", "Followers": "المتابعون", "Following": "المتابَعون", "Joined": "تاريخ الانضمام", "Open": "فتح", "Preview": "معاينة", "View Database": "عرض قاعدة البيانات", "Converting...": "جارٍ التحويل...", "Convert & Download": "تحويل وتحميل" } };
  const de = { "common": { "Settings": "Einstellungen", "Theme": "Design", "Change Theme": "Design ändern", "Language": "Sprache", "Change Language": "Sprache ändern", "Date Time Format": "Datum-Uhrzeit-Format", "Debug": "Debug", "Global Settings": "Globale Einstellungen", "Version": "Version", "Common Formats:": "Häufige Formate:", "Date Formats:": "Datumsformate:", "Time Formats:": "Zeitformate:", "Combined Examples:": "Kombinierte Beispiele:", "Localized": "Lokalisiert", "Reset Settings": "Einstellungen zurücksetzen", "Are you sure you want to reset settings to defaults?": "Sind Sie sicher, dass Sie die Einstellungen auf Standardwerte zurücksetzen möchten?", "Reset": "Zurücksetzen", "Cancel": "Abbrechen", "Chrome": "Chrome", "Userscript": "Benutzerskript", "Website": "Webseite", "Patreon": "Patreon", "Dashboard": "Dashboard", "Database": "Datenbank", "Auth": "Authentifizierung", "Convert Animated GIFs": "GIFs konvertieren", "Convert GIFs (External)": "GIFs konvertieren (Extern)", "Concurrent Downloads": "Gleichzeitige Downloads", "Use 10+ only with fast internet": "10+ nur bei schneller Internetverbindung verwenden", "Smaller size, same quality": "Kleinere Größe, gleiche Qualität", "Larger size, same quality": "Größere Größe, gleiche Qualität", "Back": "Zurück", "Please visit a profile page for auto-detection": "Bitte besuchen Sie eine Profilseite für die automatische Erkennung", "Please configure authentication in the Auth tab first": "Bitte konfigurieren Sie zuerst die Authentifizierung im Auth-Tab", "Invalid username format": "Ungültiges Benutzernamen-Format", "Invalid auth token. Please check your settings.": "Ungültiger Auth-Token. Bitte überprüfen Sie Ihre Einstellungen.", "Invalid Patreon auth. Please check your settings.": "Ungültige Patreon-Authentifizierung. Bitte überprüfen Sie Ihre Einstellungen.", "Failed to fetch data": "Daten konnten nicht abgerufen werden", "Failed to fetch data from all APIs": "Fehler beim Abrufen der Daten von allen APIs", "Failed to verify auth from all APIs": "Fehler bei der Überprüfung der Authentifizierung über alle APIs", "Failed to generate token from all APIs": "Fehler beim Generieren des Tokens über alle APIs", "Generating token...": "Token wird generiert...", "Abort": "Abbrechen", "Network error occurred": "Es ist ein Netzwerkfehler aufgetreten", "Request timeout - please try again": "Zeitüberschreitung der Anforderung – bitte erneut versuchen", "Failed to parse API response": "API-Antwort konnte nicht analysiert werden", "Invalid API response structure": "Ungültige API-Antwortstruktur", "Unknown error occurred": "Unbekannter Fehler ist aufgetreten", "HTTP error! status: {{status}}": "HTTP-Fehler! Status: {{status}}", "Download already in progress": "Download läuft bereits", "No media files found": "Keine Mediendateien gefunden", "Toggle visibility": "Ein-/Ausblenden", "Close": "Schließen", "Converting GIFs...": "GIFs werden konvertiert...", "Downloading...": "Herunterladen...", "Download": "Herunterladen", "Fetching...": "Abrufen...", "Fetch All": "Alle abrufen", "Fetch Video": "Video abrufen", "Fetch Image": "Bild abrufen", "Fetch GIF": "GIF abrufen", "Posts: {{posts}}": "Beiträge: {{posts}}", "Media: {{media}}": "Medien: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "Aktuelle Medien: {{current}} • Medien gesamt: {{total}}", "Failed to download media": "Medien konnten nicht heruntergeladen werden", "Demo mode is only available for @xbatchdemo": "Der Demo-Modus ist nur für @xbatchdemo verfügbar", "Auth Token": "Auth-Token", "Enter your auth token": "Geben Sie Ihren Auth-Token ein", "Your authentication token for API access": "Ihr Authentifizierungs-Token für API-Zugriff", "Patreon Auth": "Patreon-Authentifizierung", "Enter your Patreon auth": "Geben Sie Ihre Patreon-Authentifizierung ein", "Your Patreon authentication key": "Ihr Patreon-Authentifizierungsschlüssel", "Please enter Patreon auth first": "Bitte geben Sie zuerst die Patreon-Authentifizierung ein", "Please verify Patreon auth first": "Bitte überprüfen Sie zuerst die Patreon-Authentifizierung", "Patreon auth verified successfully": "Patreon-Authentifizierung erfolgreich überprüft", "Invalid Patreon auth": "Ungültige Patreon-Authentifizierung", "Verification failed. Please try again": "Überprüfung fehlgeschlagen. Bitte versuchen Sie es erneut", "Generating": "Generieren", "Generate": "Generieren", "Verify": "Überprüfen", "Token generated successfully": "Token erfolgreich generiert ({{current}}/{{total}})", "Failed to generate token": "Token-Generierung fehlgeschlagen", "Token generation failed. Please try again": "Token-Generierung fehlgeschlagen. Bitte versuchen Sie es erneut", "Verifying": "Überprüfen", "Verified": "Überprüft", "Use code": "Verwenden Sie den Code", "for Patreon Auth, click Verify to unlock demo. Test at": "für die Patreon-Authentifizierung, klicken Sie auf „Überprüfen“, um die Demo freizuschalten. Testen bei", "Need help with Auth Token? See": "Benötigen Sie Hilfe mit dem Auth-Token? Siehe", "the guide": "die Anleitung", "Subscribe": "Abonnieren", "to get your Patreon Auth code and start downloading with ease!": "um Ihren Patreon-Authentifizierungscode zu erhalten und mühelos mit dem Herunterladen zu beginnen!", "Report bugs or request features:": "Fehler melden oder Funktionen anfordern:", "Import": "Importieren", "Importing...": "Importieren...", "Supports JSON and ZIP formats": "Unterstützt JSON- und ZIP-Formate", "Export": "Exportieren", "Export All Data": "Alle Daten exportieren", "Exporting...": "Exportieren...", "Clear": "Löschen", "Filter by Batch": "Nach Stapel filtern", "Are you sure to clear all data in the database?": "Sind Sie sicher, dass Sie alle Daten in der Datenbank löschen möchten?", "Delete Account Data": "Kontodaten löschen", "Are you sure you want to delete account data? This action cannot be undone": "Sind Sie sicher, dass Sie die Daten von {{username}} löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.", "Delete": "Löschen", "Deleting...": "Löschen...", "Overwrite": "Überschreiben", "Overwrite Existing Data?": "Vorhandene Daten überschreiben?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Kontodaten für @{{username}} existieren bereits in der Datenbank. Möchten Sie sie überschreiben?", "No accounts yet": "Noch keine Konten", "Use Dashboard to fetch data.": "Verwenden Sie das Dashboard zum Abrufen von Daten.", "Something went wrong.": "Etwas ist schief gelaufen.", "Error:": "Fehler:", "Fetch": "Abrufen", "Single": "Einzel", "Batch": "Stapel", "Auto Batch": "Auto-Stapel", "Timeline": "Timeline", "Media": "Medien", "Batch Size": "Stapelgröße", "Starting Batch": "Startstapel", "Posts": "Beiträge", "Tweets": "Tweets", "Replies": "Antworten", "All": "Alle", "Image": "Bild", "Video": "Video", "GIF": "GIF", "Batch: {{page}}": "Stapel: {{page}}", "Start": "Start", "Stop": "Stopp", "Prev": "Zurück", "Next": "Weiter", "Download Current": "Aktuelles herunterladen", "Download All": "Alles herunterladen", "Use Batch/Auto Batch if single fetch fails": "Verwende Stapel/Auto-Stapel, wenn Einzelabruf fehlschlägt", "Load from database": "Aus Datenbank laden", "Load database": "Datenbank laden", "Home": "Anfang", "End": "Ende", "Failed to load data": "Daten konnten nicht geladen werden", "Update": "Aktualisieren", "Updating...": "Aktualisierung läuft...", "Update will fetch the latest data and overwrite the database. Continue?": "Das Update holt die neuesten Daten und überschreibt die Datenbank. Fortfahren?", "Followers": "Follower", "Following": "Folge ich", "Joined": "Beigetreten", "Open": "Öffnen", "Preview": "Vorschau", "View Database": "Datenbank anzeigen", "Converting...": "Konvertieren...", "Convert & Download": "Konvertieren & Herunterladen" } };
  const en$1 = { "common": { "Settings": "Settings", "Theme": "Theme", "Change Theme": "Change Theme", "Language": "Language", "Change Language": "Change Language", "Date Time Format": "Date Time Format", "Debug": "Debug", "Global Settings": "Global Settings", "Version": "Version", "Common Formats:": "Common Formats:", "Date Formats:": "Date Formats:", "Time Formats:": "Time Formats:", "Combined Examples:": "Combined Examples:", "Localized": "Localized", "Reset Settings": "Reset Settings", "Are you sure you want to reset settings to defaults?": "Are you sure you want to reset settings to defaults?", "Reset": "Reset", "Cancel": "Cancel", "Chrome": "Chrome", "Userscript": "Userscript", "Website": "Website", "Patreon": "Patreon", "Dashboard": "Dashboard", "Database": "Database", "Auth": "Auth", "Convert Animated GIFs": "Convert GIFs", "Convert GIFs (External)": "Convert GIFs (External)", "Concurrent Downloads": "Concurrent Downloads", "Use 10+ only with fast internet": "Use 10+ only with fast internet", "Smaller size, same quality": "Smaller size, same quality", "Larger size, same quality": "Larger size, same quality", "Back": "Back", "Please visit a profile page for auto-detection": "Please visit a profile page for auto-detection", "Please configure authentication in the Auth tab first": "Please configure authentication in the Auth tab first", "Invalid username format": "Invalid username format", "Invalid auth token. Please check your settings.": "Invalid auth token. Please check your settings.", "Invalid Patreon auth. Please check your settings.": "Invalid Patreon auth. Please check your settings.", "Failed to fetch data": "Failed to fetch data", "Failed to fetch data from all APIs": "Failed to fetch data from all APIs", "Failed to verify auth from all APIs": "Failed to verify auth from all APIs", "Failed to generate token from all APIs": "Failed to generate token from all APIs", "Generating token...": "Generating token...", "Abort": "Abort", "Network error occurred": "Network error occurred", "Request timeout - please try again": "Request timeout - please try again", "Failed to parse API response": "Failed to parse API response", "Invalid API response structure": "Invalid API response structure", "Unknown error occurred": "Unknown error occurred", "HTTP error! status: {{status}}": "HTTP error! status: {{status}}", "Download already in progress": "Download already in progress", "No media files found": "No media files found", "Toggle visibility": "Toggle visibility", "Close": "Close", "Converting GIFs...": "Converting GIFs...", "Downloading...": "Downloading...", "Download": "Download", "Fetching...": "Fetching...", "Fetch All": "Fetch All", "Fetch Video": "Fetch Video", "Fetch Image": "Fetch Image", "Fetch GIF": "Fetch GIF", "Posts: {{posts}}": "Posts: {{posts}}", "Media: {{media}}": "Media: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "Current Media: {{current}} • Total Media: {{total}}", "Failed to download media": "Failed to download media", "Demo mode is only available for @xbatchdemo": "Demo mode is only available for @xbatchdemo", "Auth Token": "Auth Token", "Enter your auth token": "Enter your auth token", "Your authentication token for API access": "Your authentication token for API access", "Patreon Auth": "Patreon Auth", "Enter your Patreon auth": "Enter your Patreon auth", "Your Patreon authentication key": "Your Patreon authentication key", "Please enter Patreon auth first": "Please enter Patreon auth first", "Please verify Patreon auth first": "Please verify Patreon auth first", "Patreon auth verified successfully": "Patreon auth verified successfully", "Invalid Patreon auth": "Invalid Patreon auth", "Verification failed. Please try again": "Verification failed. Please try again", "Generating": "Generating", "Generate": "Generate", "Verify": "Verify", "Token generated successfully": "Token generated successfully ({{current}}/{{total}})", "Failed to generate token": "Failed to generate token", "Token generation failed. Please try again": "Token generation failed. Please try again", "Verifying": "Verifying", "Verified": "Verified", "Use code": "Use code", "for Patreon Auth, click Verify to unlock demo. Test at": "for Patreon Auth, click Verify to unlock demo. Test at", "Need help with Auth Token? See": "Need help with Auth Token? See", "the guide": "the guide", "Subscribe": "Subscribe", "to get your Patreon Auth code and start downloading with ease!": "to get your Patreon Auth code and start downloading with ease!", "Report bugs or request features:": "Report bugs or request features:", "Import": "Import", "Importing...": "Importing...", "Supports JSON and ZIP formats": "Supports JSON and ZIP formats", "Export": "Export", "Export All Data": "Export All Data", "Exporting...": "Exporting...", "Clear": "Clear", "Filter by Batch": "Filter by Batch", "Are you sure to clear all data in the database?": "Are you sure to clear all data in the database?", "Delete Account Data": "Delete Account Data", "Are you sure you want to delete account data? This action cannot be undone": "Are you sure you want to delete {{username}}'s data? This action cannot be undone.", "Delete": "Delete", "Deleting...": "Deleting...", "Overwrite": "Overwrite", "Overwrite Existing Data?": "Overwrite Existing Data?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Account data for @{{username}} already exists in the database. Do you want to overwrite it?", "No accounts yet": "No accounts yet", "Use Dashboard to fetch data.": "Use Dashboard to fetch data.", "Something went wrong.": "Something went wrong.", "Error:": "Error:", "Fetch": "Fetch", "Single": "Single", "Batch": "Batch", "Auto Batch": "Auto Batch", "Timeline": "Timeline", "Media": "Media", "Batch Size": "Batch Size", "Starting Batch": "Starting Batch", "Posts": "Posts", "Tweets": "Tweets", "Replies": "Replies", "All": "All", "Image": "Image", "Video": "Video", "GIF": "GIF", "Batch: {{page}}": "Batch: {{page}}", "Start": "Start", "Stop": "Stop", "Prev": "Prev", "Next": "Next", "Download Current": "Download Current", "Download All": "Download All", "Use Batch/Auto Batch if single fetch fails": "Use Batch/Auto Batch if single fetch fails", "Load from database": "Load from database", "Load database": "Load database", "Home": "Home", "End": "End", "Failed to load data": "Failed to load data", "Update": "Update", "Updating...": "Updating...", "Update will fetch the latest data and overwrite the database. Continue?": "Update will fetch the latest data and overwrite the database. Continue?", "Followers": "Followers", "Following": "Following", "Joined": "Joined", "Open": "Open", "Preview": "Preview", "View Database": "View Database", "Converting...": "Converting...", "Convert & Download": "Convert & Download" } };
  const es = { "common": { "Settings": "Configuración", "Theme": "Tema", "Change Theme": "Cambiar Tema", "Language": "Idioma", "Change Language": "Cambiar idioma", "Date Time Format": "Formato de Fecha y Hora", "Debug": "Depurar", "Global Settings": "Configuración Global", "Version": "Versión", "Common Formats:": "Formatos Comunes:", "Date Formats:": "Formatos de Fecha:", "Time Formats:": "Formatos de Hora:", "Combined Examples:": "Ejemplos Combinados:", "Localized": "Localizado", "Reset Settings": "Restablecer ajustes", "Are you sure you want to reset settings to defaults?": "¿Seguro que quieres restablecer los ajustes a los valores predeterminados?", "Reset": "Restablecer", "Cancel": "Cancelar", "Chrome": "Chrome", "Userscript": "Script de usuario", "Website": "Sitio web", "Patreon": "Patreon", "Dashboard": "Panel de Control", "Database": "Base de Datos", "Auth": "Autenticación", "Convert Animated GIFs": "Convertir GIFs", "Convert GIFs (External)": "Convertir GIFs (Externo)", "Concurrent Downloads": "Descargas simultáneas", "Use 10+ only with fast internet": "Usa 10+ solo con internet rápido", "Smaller size, same quality": "Tamaño más pequeño, misma calidad", "Larger size, same quality": "Tamaño más grande, misma calidad", "Back": "Atrás", "Please visit a profile page for auto-detection": "Visita una página de perfil para detección automática", "Please configure authentication in the Auth tab first": "Configura la autenticación en la pestaña Auth primero", "Invalid username format": "Formato de nombre de usuario no válido", "Invalid auth token. Please check your settings.": "Token de autenticación no válido. Por favor, revisa tu configuración.", "Invalid Patreon auth. Please check your settings.": "Autenticación de Patreon no válida. Por favor, revisa tu configuración.", "Failed to fetch data": "Error al obtener los datos", "Failed to fetch data from all APIs": "Error al obtener los datos de todas las APIs", "Failed to verify auth from all APIs": "Error al verificar la autenticación en todas las APIs", "Failed to generate token from all APIs": "Error al generar el token en todas las APIs", "Generating token...": "Generando token...", "Abort": "Abortar", "Network error occurred": "Se produjo un error de red", "Request timeout - please try again": "Tiempo de espera agotado: inténtalo de nuevo", "Failed to parse API response": "Error al analizar la respuesta de la API", "Invalid API response structure": "Estructura de respuesta de la API no válida", "Unknown error occurred": "Ocurrió un error desconocido", "HTTP error! status: {{status}}": "¡Error HTTP! estado: {{status}}", "Download already in progress": "Ya hay una descarga en curso", "No media files found": "No se encontraron archivos multimedia", "Toggle visibility": "Mostrar/ocultar", "Close": "Cerrar", "Converting GIFs...": "Convirtiendo GIF...", "Downloading...": "Descargando...", "Download": "Descargar", "Fetching...": "Obteniendo...", "Fetch All": "Obtener todo", "Fetch Video": "Obtener video", "Fetch Image": "Obtener imagen", "Fetch GIF": "Obtener GIF", "Posts: {{posts}}": "Publicaciones: {{posts}}", "Media: {{media}}": "Medios: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "Medios actuales: {{current}} • Medios totales: {{total}}", "Failed to download media": "Error al descargar los medios", "Demo mode is only available for @xbatchdemo": "El modo demo solo está disponible para @xbatchdemo", "Auth Token": "Token de autenticación", "Enter your auth token": "Introduce tu token de autenticación", "Your authentication token for API access": "Tu token de autenticación para acceso a la API", "Patreon Auth": "Autenticación de Patreon", "Enter your Patreon auth": "Introduce tu autenticación de Patreon", "Your Patreon authentication key": "Tu clave de autenticación de Patreon", "Please enter Patreon auth first": "Introduce primero la autenticación de Patreon", "Please verify Patreon auth first": "Verifica primero la autenticación de Patreon", "Patreon auth verified successfully": "Autenticación de Patreon verificada correctamente", "Invalid Patreon auth": "Autenticación de Patreon no válida", "Verification failed. Please try again": "La verificación falló. Inténtalo de nuevo", "Generating": "Generando", "Generate": "Generar", "Verify": "Verificar", "Token generated successfully": "Token generado correctamente ({{current}}/{{total}})", "Failed to generate token": "Error al generar el token", "Token generation failed. Please try again": "La generación del token falló. Inténtalo de nuevo", "Verifying": "Verificando", "Verified": "Verificado", "Use code": "Usa el código", "for Patreon Auth, click Verify to unlock demo. Test at": 'para la Autenticación de Patreon, haz clic en "Verificar" para desbloquear la demo. Prueba en', "Need help with Auth Token? See": "¿Necesitas ayuda con el token de autenticación? Consulta", "the guide": "la guía", "Subscribe": "Suscríbete", "to get your Patreon Auth code and start downloading with ease!": "para obtener tu código de autenticación de Patreon y empezar a descargar fácilmente.", "Report bugs or request features:": "Informa errores o solicita funciones:", "Import": "Importar", "Importing...": "Importando...", "Supports JSON and ZIP formats": "Admite formatos JSON y ZIP", "Export": "Exportar", "Export All Data": "Exportar todos los datos", "Exporting...": "Exportando...", "Clear": "Limpiar", "Filter by Batch": "Filtrar por lote", "Are you sure to clear all data in the database?": "¿Estás seguro de que quieres borrar todos los datos de la base de datos?", "Delete Account Data": "Eliminar datos de la cuenta", "Are you sure you want to delete account data? This action cannot be undone": "¿Seguro que quieres eliminar los datos de {{username}}? Esta acción no se puede deshacer.", "Delete": "Eliminar", "Deleting...": "Eliminando...", "Overwrite": "Sobrescribir", "Overwrite Existing Data?": "¿Sobrescribir datos existentes?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Los datos de la cuenta @{{username}} ya existen en la base de datos. ¿Deseas sobrescribirlos?", "No accounts yet": "Todavía no hay cuentas", "Use Dashboard to fetch data.": "Usa el Panel de Control para obtener datos.", "Something went wrong.": "Algo salió mal.", "Error:": "Error:", "Fetch": "Obtener", "Single": "Único", "Batch": "Lote", "Auto Batch": "Lote automático", "Timeline": "Cronología", "Media": "Medios", "Batch Size": "Tamaño del lote", "Starting Batch": "Lote inicial", "Posts": "Publicaciones", "Tweets": "Tweets", "Replies": "Respuestas", "All": "Todo", "Image": "Imagen", "Video": "Video", "GIF": "GIF", "Batch: {{page}}": "Lote: {{page}}", "Start": "Iniciar", "Stop": "Detener", "Prev": "Anterior", "Next": "Siguiente", "Download Current": "Descargar actual", "Download All": "Descargar todo", "Use Batch/Auto Batch if single fetch fails": "Usa Lote/Lote automático si falla la obtención única", "Load from database": "Cargar desde base de datos", "Load database": "Cargar base de datos", "Home": "Inicio", "End": "Fin", "Failed to load data": "Error al cargar los datos", "Update": "Actualizar", "Updating...": "Actualizando...", "Update will fetch the latest data and overwrite the database. Continue?": "La actualización obtendrá los datos más recientes y sobrescribirá la base de datos. ¿Continuar?", "Followers": "Seguidores", "Following": "Siguiendo", "Joined": "Se unió", "Open": "Abrir", "Preview": "Vista previa", "View Database": "Ver base de datos", "Converting...": "Convirtiendo...", "Convert & Download": "Convertir y descargar" } };
  const fr = { "common": { "Settings": "Paramètres", "Theme": "Thème", "Change Theme": "Changer le thème", "Language": "Langue", "Change Language": "Changer la langue", "Date Time Format": "Format date et heure", "Debug": "Débogage", "Global Settings": "Paramètres globaux", "Version": "Version", "Common Formats:": "Formats courants :", "Date Formats:": "Formats de date :", "Time Formats:": "Formats d'heure :", "Combined Examples:": "Exemples combinés :", "Localized": "Localisé", "Reset Settings": "Réinitialiser les paramètres", "Are you sure you want to reset settings to defaults?": "Êtes-vous sûr de vouloir réinitialiser les paramètres par défaut ?", "Reset": "Réinitialiser", "Cancel": "Annuler", "Chrome": "Chrome", "Userscript": "Script utilisateur", "Website": "Site Web", "Patreon": "Patreon", "Dashboard": "Tableau de bord", "Database": "Base de données", "Auth": "Authentification", "Convert Animated GIFs": "Convertir des GIFs", "Convert GIFs (External)": "Convertir des GIFs (Externe)", "Concurrent Downloads": "Téléchargements simultanés", "Use 10+ only with fast internet": "Utilisez 10+ uniquement avec une connexion rapide", "Smaller size, same quality": "Taille plus petite, même qualité", "Larger size, same quality": "Taille plus grande, même qualité", "Back": "Retour", "Please visit a profile page for auto-detection": "Veuillez visiter une page de profil pour la détection automatique", "Please configure authentication in the Auth tab first": "Veuillez d'abord configurer l'authentification dans l'onglet Auth", "Invalid username format": "Format de nom d'utilisateur invalide", "Invalid auth token. Please check your settings.": "Token d'authentification invalide. Veuillez vérifier vos paramètres.", "Invalid Patreon auth. Please check your settings.": "Authentification Patreon invalide. Veuillez vérifier vos paramètres.", "Failed to fetch data": "Échec de récupération des données", "Failed to fetch data from all APIs": "Échec de récupération des données depuis toutes les API", "Failed to verify auth from all APIs": "Échec de vérification de l'authentification depuis toutes les API", "Failed to generate token from all APIs": "Échec de génération du jeton depuis toutes les API", "Generating token...": "Génération du jeton...", "Abort": "Abandonner", "Network error occurred": "Une erreur réseau s'est produite", "Request timeout - please try again": "Délai d’attente dépassé - veuillez réessayer", "Failed to parse API response": "Échec de l’analyse de la réponse de l’API", "Invalid API response structure": "Structure de réponse de l’API invalide", "Unknown error occurred": "Une erreur inconnue s'est produite", "HTTP error! status: {{status}}": "Erreur HTTP ! statut : {{status}}", "Download already in progress": "Téléchargement déjà en cours", "No media files found": "Aucun fichier multimédia trouvé", "Toggle visibility": "Afficher/masquer", "Close": "Fermer", "Converting GIFs...": "Conversion des GIFs...", "Downloading...": "Téléchargement...", "Download": "Télécharger", "Fetching...": "Récupération...", "Fetch All": "Tout récupérer", "Fetch Video": "Récupérer la vidéo", "Fetch Image": "Récupérer l'image", "Fetch GIF": "Récupérer le GIF", "Posts: {{posts}}": "Publications : {{posts}}", "Media: {{media}}": "Médias : {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "Médias actuels : {{current}} • Médias totaux : {{total}}", "Failed to download media": "Échec de téléchargement des médias", "Demo mode is only available for @xbatchdemo": "Le mode démo est uniquement disponible pour @xbatchdemo", "Auth Token": "Token d'authentification", "Enter your auth token": "Entrez votre token d'authentification", "Your authentication token for API access": "Votre token d'authentification pour l'accès API", "Patreon Auth": "Authentification Patreon", "Enter your Patreon auth": "Entrez votre authentification Patreon", "Your Patreon authentication key": "Votre clé d'authentification Patreon", "Please enter Patreon auth first": "Veuillez d'abord saisir l'authentification Patreon", "Please verify Patreon auth first": "Veuillez d'abord vérifier l'authentification Patreon", "Patreon auth verified successfully": "Authentification Patreon vérifiée avec succès", "Invalid Patreon auth": "Authentification Patreon invalide", "Verification failed. Please try again": "Échec de vérification. Veuillez réessayer", "Generating": "Génération", "Generate": "Générer", "Verify": "Vérifier", "Token generated successfully": "Token généré avec succès ({{current}}/{{total}})", "Failed to generate token": "Échec de génération du token", "Token generation failed. Please try again": "Échec de génération du token. Veuillez réessayer", "Verifying": "Vérification", "Verified": "Vérifié", "Use code": "Utilisez le code", "for Patreon Auth, click Verify to unlock demo. Test at": "pour l’authentification Patreon, cliquez sur « Vérifier » pour déverrouiller la démo. Testez sur", "Need help with Auth Token? See": "Besoin d’aide avec le jeton d’authentification ? Voir", "the guide": "le guide", "Subscribe": "S’abonner", "to get your Patreon Auth code and start downloading with ease!": "pour obtenir votre code d’authentification Patreon et commencer à télécharger facilement !", "Report bugs or request features:": "Signalez des bugs ou demandez des fonctionnalités :", "Import": "Importer", "Importing...": "Importation...", "Supports JSON and ZIP formats": "Prend en charge les formats JSON et ZIP", "Export": "Exporter", "Export All Data": "Exporter toutes les données", "Exporting...": "Exportation...", "Clear": "Effacer", "Filter by Batch": "Filtrer par lot", "Are you sure to clear all data in the database?": "Êtes-vous sûr de vouloir effacer toutes les données de la base ?", "Delete Account Data": "Supprimer les données du compte", "Are you sure you want to delete account data? This action cannot be undone": "Êtes-vous sûr de vouloir supprimer les données de {{username}} ? Cette action ne peut pas être annulée.", "Delete": "Supprimer", "Deleting...": "Suppression...", "Overwrite": "Écraser", "Overwrite Existing Data?": "Écraser les données existantes ?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Les données du compte @{{username}} existent déjà dans la base de données. Voulez-vous les écraser ?", "No accounts yet": "Aucun compte pour le moment", "Use Dashboard to fetch data.": "Utilisez le Tableau de bord pour récupérer les données.", "Something went wrong.": "Quelque chose s'est mal passé.", "Error:": "Erreur :", "Fetch": "Récupérer", "Single": "Unique", "Batch": "Lot", "Auto Batch": "Lot automatique", "Timeline": "Chronologie", "Media": "Médias", "Batch Size": "Taille du lot", "Starting Batch": "Lot de départ", "Posts": "Publications", "Tweets": "Tweets", "Replies": "Réponses", "All": "Tout", "Image": "Image", "Video": "Vidéo", "GIF": "GIF", "Batch: {{page}}": "Lot : {{page}}", "Start": "Démarrer", "Stop": "Arrêter", "Prev": "Précédent", "Next": "Suivant", "Download Current": "Télécharger l'actuel", "Download All": "Tout télécharger", "Use Batch/Auto Batch if single fetch fails": "Utilisez Lot/Lot automatique si la récupération unique échoue", "Load from database": "Charger depuis la base de données", "Load database": "Charger la base de données", "Home": "Début", "End": "Fin", "Failed to load data": "Échec du chargement des données", "Update": "Mettre à jour", "Updating...": "Mise à jour en cours...", "Update will fetch the latest data and overwrite the database. Continue?": "La mise à jour récupérera les dernières données et écrasera la base de données. Continuer ?", "Followers": "Abonnés", "Following": "Abonnements", "Joined": "Inscrit", "Open": "Ouvrir", "Preview": "Aperçu", "View Database": "Voir la base de données", "Converting...": "Conversion...", "Convert & Download": "Convertir et télécharger" } };
  const hi = { "common": { "Settings": "सेटिंग्स", "Theme": "थीम", "Change Theme": "थीम बदलें", "Language": "भाषा", "Change Language": "भाषा बदलें", "Date Time Format": "दिनांक समय प्रारूप", "Debug": "डिबग", "Global Settings": "वैश्विक सेटिंग्स", "Version": "संस्करण", "Common Formats:": "सामान्य प्रारूप:", "Date Formats:": "दिनांक प्रारूप:", "Time Formats:": "समय प्रारूप:", "Combined Examples:": "संयुक्त उदाहरण:", "Localized": "स्थानीयकृत", "Reset Settings": "सेटिंग्स रीसेट करें", "Are you sure you want to reset settings to defaults?": "क्या आप वाकई सेटिंग्स को डिफ़ॉल्ट पर रीसेट करना चाहते हैं?", "Reset": "रीसेट करें", "Cancel": "रद्द करें", "Chrome": "Chrome", "Userscript": "यूज़रस्क्रिप्ट", "Website": "वेबसाइट", "Patreon": "Patreon", "Dashboard": "डैशबोर्ड", "Database": "डेटाबेस", "Auth": "प्रमाणीकरण", "Convert Animated GIFs": "GIFs कन्वर्ट करें", "Convert GIFs (External)": "GIFs कन्वर्ट करें (बाहरी)", "Concurrent Downloads": "समकालिक डाउनलोड", "Use 10+ only with fast internet": "10+ का उपयोग केवल तेज़ इंटरनेट पर करें", "Smaller size, same quality": "आकार छोटा, गुणवत्ता समान", "Larger size, same quality": "आकार बड़ा, गुणवत्ता समान", "Back": "वापस", "Please visit a profile page for auto-detection": "कृपया ऑटो-डिटेक्शन के लिए प्रोफ़ाइल पेज पर जाएं", "Please configure authentication in the Auth tab first": "कृपया पहले ऑथ टैब में प्रमाणीकरण कॉन्फ़िगर करें", "Invalid username format": "अमान्य उपयोगकर्ता नाम प्रारूप", "Invalid auth token. Please check your settings.": "अमान्य ऑथ टोकन। कृपया सेटिंग्स जाँचें।", "Invalid Patreon auth. Please check your settings.": "अमान्य Patreon ऑथ। कृपया अपनी सेटिंग्स जाँचें।", "Failed to fetch data": "डेटा लाना विफल", "Failed to fetch data from all APIs": "सभी API से डेटा प्राप्त करने में विफल", "Failed to verify auth from all APIs": "सभी API से ऑथ सत्यापित करने में विफल", "Failed to generate token from all APIs": "सभी API से टोकन जनरेट करने में विफल", "Generating token...": "टोकन जेनरेट किया जा रहा है...", "Abort": "रद्द करें", "Network error occurred": "नेटवर्क त्रुटि हुई", "Request timeout - please try again": "अनुरोध का समय समाप्त — कृपया पुनः प्रयास करें", "Failed to parse API response": "API प्रतिक्रिया पार्स करने में विफल", "Invalid API response structure": "API प्रतिक्रिया संरचना अमान्य है", "Unknown error occurred": "अज्ञात त्रुटि हुई", "HTTP error! status: {{status}}": "HTTP त्रुटि! स्थिति: {{status}}", "Download already in progress": "डाउनलोड पहले से चल रहा है", "No media files found": "कोई मीडिया फ़ाइलें नहीं मिलीं", "Toggle visibility": "दिखाएँ/छुपाएँ", "Close": "बंद करें", "Converting GIFs...": "GIFs कन्वर्ट हो रहे हैं...", "Downloading...": "डाउनलोड हो रहा है...", "Download": "डाउनलोड करें", "Fetching...": "प्राप्त किया जा रहा है...", "Fetch All": "सब कुछ प्राप्त करें", "Fetch Video": "वीडियो प्राप्त करें", "Fetch Image": "छवि प्राप्त करें", "Fetch GIF": "GIF प्राप्त करें", "Posts: {{posts}}": "पोस्ट: {{posts}}", "Media: {{media}}": "मीडिया: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "वर्तमान मीडिया: {{current}} • कुल मीडिया: {{total}}", "Failed to download media": "मीडिया डाउनलोड विफल", "Demo mode is only available for @xbatchdemo": "डेमो मोड केवल @xbatchdemo के लिए उपलब्ध है", "Auth Token": "ऑथ टोकन", "Enter your auth token": "अपना ऑथ टोकन दर्ज करें", "Your authentication token for API access": "API एक्सेस के लिए आपका ऑथेंटिकेशन टोकन", "Patreon Auth": "Patreon ऑथ", "Enter your Patreon auth": "अपना Patreon ऑथ दर्ज करें", "Your Patreon authentication key": "आपकी Patreon प्रमाणीकरण कुंजी", "Please enter Patreon auth first": "कृपया पहले Patreon ऑथ दर्ज करें", "Please verify Patreon auth first": "कृपया पहले Patreon ऑथ सत्यापित करें", "Patreon auth verified successfully": "Patreon ऑथ सफलतापूर्वक सत्यापित", "Invalid Patreon auth": "अमान्य Patreon ऑथ", "Verification failed. Please try again": "सत्यापन विफल। कृपया पुनः प्रयास करें", "Generating": "उत्पन्न किया जा रहा है", "Generate": "उत्पन्न करें", "Verify": "सत्यापित करें", "Token generated successfully": "टोकन सफलतापूर्वक जनरेट हुआ ({{current}}/{{total}})", "Failed to generate token": "टोकन जनरेट करना विफल", "Token generation failed. Please try again": "टोकन जनरेशन विफल। कृपया पुनः प्रयास करें", "Verifying": "सत्यापित किया जा रहा है", "Verified": "सत्यापित", "Use code": "कोड उपयोग करें", "for Patreon Auth, click Verify to unlock demo. Test at": 'Patreon प्रमाणीकरण के लिए, डेमो अनलॉक करने हेतु "सत्यापित करें" पर क्लिक करें। परीक्षण करें:', "Need help with Auth Token? See": "ऑथ टोकन में मदद चाहिए? देखें", "the guide": "मार्गदर्शिका", "Subscribe": "सदस्यता लें", "to get your Patreon Auth code and start downloading with ease!": "अपना Patreon ऑथ कोड प्राप्त करें और आसानी से डाउनलोड शुरू करें!", "Report bugs or request features:": "बग रिपोर्ट करें या फीचर का अनुरोध करें:", "Import": "आयात करें", "Importing...": "आयात हो रहा है...", "Supports JSON and ZIP formats": "JSON और ZIP प्रारूप समर्थित हैं", "Export": "निर्यात करें", "Export All Data": "सभी डेटा निर्यात करें", "Exporting...": "निर्यात हो रहा है...", "Clear": "साफ़ करें", "Filter by Batch": "बैच द्वारा फ़िल्टर करें", "Are you sure to clear all data in the database?": "क्या आप वाकई डेटाबेस का सारा डेटा साफ़ करना चाहते हैं?", "Delete Account Data": "खाता डेटा हटाएँ", "Are you sure you want to delete account data? This action cannot be undone": "क्या आप वाकई {{username}} का डेटा हटाना चाहते हैं? यह क्रिया वापस नहीं की जा सकती।", "Delete": "हटाएं", "Deleting...": "हटा रहे हैं...", "Overwrite": "ओवरराइट करें", "Overwrite Existing Data?": "मौजूदा डेटा ओवरराइट करें?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "@{{username}} के लिए खाता डेटा पहले से ही डेटाबेस में मौजूद है। क्या आप इसे ओवरराइट करना चाहते हैं?", "No accounts yet": "अभी तक कोई खाता नहीं", "Use Dashboard to fetch data.": "डेटा प्राप्त करने के लिए डैशबोर्ड का उपयोग करें।", "Something went wrong.": "कुछ गलत हो गया।", "Error:": "त्रुटि:", "Fetch": "प्राप्त करें", "Single": "एकल", "Batch": "बैच", "Auto Batch": "ऑटो बैच", "Timeline": "टाइमलाइन", "Media": "मीडिया", "Batch Size": "बैच आकार", "Starting Batch": "प्रारंभिक बैच", "Posts": "पोस्ट", "Tweets": "ट्वीट्स", "Replies": "जवाब", "All": "सभी", "Image": "छवि", "Video": "वीडियो", "GIF": "GIF", "Batch: {{page}}": "बैच: {{page}}", "Start": "प्रारंभ", "Stop": "रोकें", "Prev": "पिछला", "Next": "अगला", "Download Current": "वर्तमान डाउनलोड करें", "Download All": "सभी डाउनलोड करें", "Use Batch/Auto Batch if single fetch fails": "यदि एकल प्राप्ति विफल हो, तो बैच/ऑटो बैच का उपयोग करें", "Load from database": "डेटाबेस से लोड करें", "Load database": "डेटाबेस लोड करें", "Home": "होम", "End": "अंत", "Failed to load data": "डेटा लोड करना विफल", "Update": "अपडेट करें", "Updating...": "अपडेट हो रहा है...", "Update will fetch the latest data and overwrite the database. Continue?": "अपडेट नवीनतम डेटा प्राप्त करेगा और डेटाबेस को ओवरराइट करेगा। जारी रखें?", "Followers": "फॉलोवर्स", "Following": "फॉलो कर रहे हैं", "Joined": "जुड़े", "Open": "खोलें", "Preview": "पूर्वावलोकन", "View Database": "डेटाबेस देखें", "Converting...": "कन्वर्ट हो रहा है...", "Convert & Download": "कन्वर्ट करें और डाउनलोड करें" } };
  const ja = { "common": { "Settings": "設定", "Theme": "テーマ", "Change Theme": "テーマを変更", "Language": "言語", "Change Language": "言語を変更", "Date Time Format": "日時フォーマット", "Debug": "デバッグ", "Global Settings": "グローバル設定", "Version": "バージョン", "Common Formats:": "一般的な形式:", "Date Formats:": "日付形式:", "Time Formats:": "時刻形式:", "Combined Examples:": "組み合わせ例:", "Localized": "ローカライズ済み", "Reset Settings": "設定のリセット", "Are you sure you want to reset settings to defaults?": "設定をデフォルトにリセットしてもよろしいですか?", "Reset": "リセット", "Cancel": "キャンセル", "Chrome": "Chrome", "Userscript": "ユーザースクリプト", "Website": "ウェブサイト", "Patreon": "Patreon", "Dashboard": "ダッシュボード", "Database": "データベース", "Auth": "認証", "Convert Animated GIFs": "GIFを変換", "Convert GIFs (External)": "GIFを変換(外部)", "Concurrent Downloads": "同時ダウンロード数", "Use 10+ only with fast internet": "10以上は高速なインターネット環境でのみ使用してください", "Smaller size, same quality": "サイズは小さく、品質は同じです", "Larger size, same quality": "サイズは大きく、品質は同じです", "Back": "戻る", "Please visit a profile page for auto-detection": "プロフィールページを訪問して自動検出してください", "Please configure authentication in the Auth tab first": "最初に認証タブで認証を設定してください", "Invalid username format": "無効なユーザー名形式", "Invalid auth token. Please check your settings.": "無効な認証トークンです。設定を確認してください。", "Invalid Patreon auth. Please check your settings.": "無効なPatreon認証です。設定を確認してください。", "Failed to fetch data": "データ取得に失敗しました", "Failed to fetch data from all APIs": "すべてのAPIからデータ取得に失敗しました", "Failed to verify auth from all APIs": "すべてのAPIで認証の検証に失敗しました", "Failed to generate token from all APIs": "すべてのAPIでトークン生成に失敗しました", "Generating token...": "トークン生成中...", "Abort": "中止", "Network error occurred": "ネットワークエラーが発生しました", "Request timeout - please try again": "リクエストがタイムアウトしました。もう一度お試しください", "Failed to parse API response": "API 応答の解析に失敗しました", "Invalid API response structure": "無効な API 応答構造です", "Unknown error occurred": "不明なエラーが発生しました", "HTTP error! status: {{status}}": "HTTP エラー! ステータス: {{status}}", "Download already in progress": "ダウンロードはすでに進行中です", "No media files found": "メディアファイルが見つかりません", "Toggle visibility": "表示/非表示を切り替え", "Close": "閉じる", "Converting GIFs...": "GIF変換中...", "Downloading...": "ダウンロード中...", "Download": "ダウンロード", "Fetching...": "取得中...", "Fetch All": "すべて取得", "Fetch Video": "ビデオを取得", "Fetch Image": "画像を取得", "Fetch GIF": "GIFを取得", "Posts: {{posts}}": "投稿: {{posts}}", "Media: {{media}}": "メディア: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "現在のメディア: {{current}} • 合計メディア: {{total}}", "Failed to download media": "メディアダウンロードに失敗しました", "Demo mode is only available for @xbatchdemo": "デモモードは @xbatchdemo のみ利用できます", "Auth Token": "認証トークン", "Enter your auth token": "認証トークンを入力", "Your authentication token for API access": "APIアクセス用の認証トークン", "Patreon Auth": "Patreon認証", "Enter your Patreon auth": "Patreon認証を入力", "Your Patreon authentication key": "Patreon認証キー", "Please enter Patreon auth first": "最初にPatreon認証を入力してください", "Please verify Patreon auth first": "最初にPatreon認証を確認してください", "Patreon auth verified successfully": "Patreon認証が正常に確認されました", "Invalid Patreon auth": "無効なPatreon認証", "Verification failed. Please try again": "検証に失敗しました。再試行してください", "Generating": "生成中", "Generate": "生成", "Verify": "確認", "Token generated successfully": "トークンが正常に生成されました ({{current}}/{{total}})", "Failed to generate token": "トークン生成に失敗しました", "Token generation failed. Please try again": "トークン生成に失敗しました。再試行してください", "Verifying": "確認中", "Verified": "確認済み", "Use code": "コードを使用", "for Patreon Auth, click Verify to unlock demo. Test at": "Patreon 認証用。デモを有効にするには「確認」をクリック。テスト先:", "Need help with Auth Token? See": "認証トークンでお困りですか?こちらをご覧ください:", "the guide": "ガイド", "Subscribe": "購読する", "to get your Patreon Auth code and start downloading with ease!": "Patreon 認証コードを入手して、簡単にダウンロードを開始しましょう!", "Report bugs or request features:": "バグ報告や機能リクエストはこちら:", "Import": "インポート", "Importing...": "インポート中...", "Supports JSON and ZIP formats": "JSON および ZIP 形式をサポート", "Export": "エクスポート", "Export All Data": "すべてのデータをエクスポート", "Exporting...": "エクスポート中...", "Clear": "クリア", "Filter by Batch": "バッチでフィルター", "Are you sure to clear all data in the database?": "データベースのすべてのデータをクリアしてもよろしいですか?", "Delete Account Data": "アカウントデータの削除", "Are you sure you want to delete account data? This action cannot be undone": "{{username}}のデータを削除してもよろしいですか?この操作は元に戻せません。", "Delete": "削除", "Deleting...": "削除中...", "Overwrite": "上書き", "Overwrite Existing Data?": "既存のデータを上書きしますか?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "@{{username}} のアカウントデータは既にデータベースに存在します。上書きしますか?", "No accounts yet": "まだアカウントがありません", "Use Dashboard to fetch data.": "ダッシュボードを使用してデータを取得してください。", "Something went wrong.": "何かが間違っています。", "Error:": "エラー:", "Fetch": "取得", "Single": "シングル", "Batch": "バッチ", "Auto Batch": "自動バッチ", "Timeline": "タイムライン", "Media": "メディア", "Batch Size": "バッチサイズ", "Starting Batch": "開始バッチ", "Posts": "投稿", "Tweets": "ツイート", "Replies": "返信", "All": "すべて", "Image": "画像", "Video": "ビデオ", "GIF": "GIF", "Batch: {{page}}": "バッチ: {{page}}", "Start": "開始", "Stop": "停止", "Prev": "前へ", "Next": "次へ", "Download Current": "現在をダウンロード", "Download All": "すべてダウンロード", "Use Batch/Auto Batch if single fetch fails": "単一取得が失敗した場合はバッチ/自動バッチを使用してください", "Load from database": "データベースから読み込む", "Load database": "データベースを読み込む", "Home": "先頭", "End": "末尾", "Failed to load data": "データの読み込みに失敗しました", "Update": "更新", "Updating...": "更新中...", "Update will fetch the latest data and overwrite the database. Continue?": "更新により最新データを取得し、データベースを上書きします。続行しますか?", "Followers": "フォロワー", "Following": "フォロー中", "Joined": "参加日", "Open": "開く", "Preview": "プレビュー", "View Database": "データベースを表示", "Converting...": "変換中...", "Convert & Download": "変換してダウンロード" } };
  const ko = { "common": { "Settings": "설정", "Theme": "테마", "Change Theme": "테마 변경", "Language": "언어", "Change Language": "언어 변경", "Date Time Format": "날짜 시간 형식", "Debug": "디버그", "Global Settings": "전역 설정", "Version": "버전", "Common Formats:": "일반 형식:", "Date Formats:": "날짜 형식:", "Time Formats:": "시간 형식:", "Combined Examples:": "결합 예시:", "Localized": "현지화됨", "Reset Settings": "설정 재설정", "Are you sure you want to reset settings to defaults?": "설정을 기본값으로 재설정하시겠습니까?", "Reset": "재설정", "Cancel": "취소", "Chrome": "Chrome", "Userscript": "유저스크립트", "Website": "웹사이트", "Patreon": "Patreon", "Dashboard": "대시보드", "Database": "데이터베이스", "Auth": "인증", "Convert Animated GIFs": "GIF 변환", "Convert GIFs (External)": "GIF 변환 (외부)", "Concurrent Downloads": "동시 다운로드", "Use 10+ only with fast internet": "빠른 인터넷에서만 10+를 사용하세요", "Smaller size, same quality": "더 작은 용량, 동일한 품질", "Larger size, same quality": "더 큰 용량, 동일한 품질", "Back": "뒤로", "Please visit a profile page for auto-detection": "자동 감지를 위해 프로필 페이지를 방문해주세요", "Please configure authentication in the Auth tab first": "먼저 Auth 탭에서 인증을 구성해주세요", "Invalid username format": "잘못된 사용자명 형식", "Invalid auth token. Please check your settings.": "잘못된 인증 토큰입니다. 설정을 확인해주세요.", "Invalid Patreon auth. Please check your settings.": "잘못된 Patreon 인증입니다. 설정을 확인해주세요.", "Failed to fetch data": "데이터 가져오기 실패", "Failed to fetch data from all APIs": "모든 API에서 데이터를 가져오지 못했습니다", "Failed to verify auth from all APIs": "모든 API에서 인증 확인에 실패했습니다", "Failed to generate token from all APIs": "모든 API에서 토큰 생성에 실패했습니다", "Generating token...": "토큰 생성 중...", "Abort": "중단", "Network error occurred": "네트워크 오류가 발생했습니다", "Request timeout - please try again": "요청 시간 초과 - 다시 시도해 주세요", "Failed to parse API response": "API 응답을 파싱하지 못했습니다", "Invalid API response structure": "잘못된 API 응답 구조입니다", "Unknown error occurred": "알 수 없는 오류가 발생했습니다", "HTTP error! status: {{status}}": "HTTP 오류! 상태: {{status}}", "Download already in progress": "다운로드가 이미 진행 중입니다", "No media files found": "미디어 파일을 찾을 수 없습니다", "Toggle visibility": "표시/숨기기", "Close": "닫기", "Converting GIFs...": "GIF 변환 중...", "Downloading...": "다운로드 중...", "Download": "다운로드", "Fetching...": "가져오는 중...", "Fetch All": "전체 가져오기", "Fetch Video": "비디오 가져오기", "Fetch Image": "이미지 가져오기", "Fetch GIF": "GIF 가져오기", "Posts: {{posts}}": "게시물: {{posts}}", "Media: {{media}}": "미디어: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "현재 미디어: {{current}} • 전체 미디어: {{total}}", "Failed to download media": "미디어 다운로드 실패", "Demo mode is only available for @xbatchdemo": "데모 모드는 @xbatchdemo에게만 제공됩니다", "Auth Token": "인증 토큰", "Enter your auth token": "인증 토큰을 입력하세요", "Your authentication token for API access": "API 접근을 위한 인증 토큰", "Patreon Auth": "Patreon 인증", "Enter your Patreon auth": "Patreon 인증을 입력하세요", "Your Patreon authentication key": "Patreon 인증 키", "Please enter Patreon auth first": "먼저 Patreon 인증을 입력해주세요", "Please verify Patreon auth first": "먼저 Patreon 인증을 확인해주세요", "Patreon auth verified successfully": "Patreon 인증이 성공적으로 확인되었습니다", "Invalid Patreon auth": "잘못된 Patreon 인증", "Verification failed. Please try again": "확인 실패. 다시 시도해주세요", "Generating": "생성 중", "Generate": "생성", "Verify": "확인", "Token generated successfully": "토큰이 성공적으로 생성되었습니다 ({{current}}/{{total}})", "Failed to generate token": "토큰 생성 실패", "Token generation failed. Please try again": "토큰 생성 실패. 다시 시도해주세요", "Verifying": "확인 중", "Verified": "확인됨", "Use code": "코드를 사용", "for Patreon Auth, click Verify to unlock demo. Test at": "Patreon 인증용입니다. 데모를 해제하려면 ‘확인’을 클릭하세요. 테스트:", "Need help with Auth Token? See": "인증 토큰이 필요하신가요? 다음을 참조하세요:", "the guide": "가이드", "Subscribe": "구독하기", "to get your Patreon Auth code and start downloading with ease!": "Patreon 인증 코드를 받아 손쉽게 다운로드를 시작하세요!", "Report bugs or request features:": "버그 신고 또는 기능 요청:", "Import": "가져오기", "Importing...": "가져오는 중...", "Supports JSON and ZIP formats": "JSON 및 ZIP 형식 지원", "Export": "내보내기", "Export All Data": "모든 데이터 내보내기", "Exporting...": "내보내는 중...", "Clear": "삭제", "Filter by Batch": "배치별 필터", "Are you sure to clear all data in the database?": "데이터베이스의 모든 데이터를 삭제하시겠습니까?", "Delete Account Data": "계정 데이터 삭제", "Are you sure you want to delete account data? This action cannot be undone": "{{username}}의 데이터를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.", "Delete": "삭제", "Deleting...": "삭제 중...", "Overwrite": "덮어쓰기", "Overwrite Existing Data?": "기존 데이터를 덮어쓰시겠습니까?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "@{{username}}의 계정 데이터가 이미 데이터베이스에 존재합니다. 덮어쓰시겠습니까?", "No accounts yet": "아직 계정이 없습니다", "Use Dashboard to fetch data.": "대시보드를 사용하여 데이터를 가져와주세요.", "Something went wrong.": "문제가 발생했습니다.", "Error:": "오류:", "Fetch": "가져오기", "Single": "단일", "Batch": "배치", "Auto Batch": "자동 배치", "Timeline": "타임라인", "Media": "미디어", "Batch Size": "배치 크기", "Starting Batch": "시작 배치", "Posts": "게시물", "Tweets": "트윗", "Replies": "답글", "All": "전체", "Image": "이미지", "Video": "비디오", "GIF": "GIF", "Batch: {{page}}": "배치: {{page}}", "Start": "시작", "Stop": "중지", "Prev": "이전", "Next": "다음", "Download Current": "현재 다운로드", "Download All": "모두 다운로드", "Use Batch/Auto Batch if single fetch fails": "단일 가져오기가 실패하면 배치/자동 배치를 사용하세요", "Load from database": "데이터베이스에서 불러오기", "Load database": "데이터베이스 불러오기", "Home": "처음", "End": "끝", "Failed to load data": "데이터 불러오기 실패", "Update": "업데이트", "Updating...": "업데이트 중...", "Update will fetch the latest data and overwrite the database. Continue?": "업데이트는 최신 데이터를 가져와 데이터베이스를 덮어씁니다. 계속하시겠습니까?", "Followers": "팔로워", "Following": "팔로잉", "Joined": "가입일", "Open": "열기", "Preview": "미리보기", "View Database": "데이터베이스 보기", "Converting...": "변환 중...", "Convert & Download": "변환 및 다운로드" } };
  const pt = { "common": { "Settings": "Configurações", "Theme": "Tema", "Change Theme": "Alterar Tema", "Language": "Idioma", "Change Language": "Alterar Idioma", "Date Time Format": "Formato de Data e Hora", "Debug": "Depurar", "Global Settings": "Configurações Globais", "Version": "Versão", "Common Formats:": "Formatos Comuns:", "Date Formats:": "Formatos de Data:", "Time Formats:": "Formatos de Hora:", "Combined Examples:": "Exemplos Combinados:", "Localized": "Localizado", "Reset Settings": "Redefinir configurações", "Are you sure you want to reset settings to defaults?": "Tem certeza de que deseja redefinir as configurações para o padrão?", "Reset": "Redefinir", "Cancel": "Cancelar", "Chrome": "Chrome", "Userscript": "Script de usuário", "Website": "Site", "Patreon": "Patreon", "Dashboard": "Painel", "Database": "Banco de Dados", "Auth": "Autenticação", "Convert Animated GIFs": "Converter GIFs", "Convert GIFs (External)": "Converter GIFs (Externo)", "Concurrent Downloads": "Downloads simultâneos", "Use 10+ only with fast internet": "Use 10+ apenas com internet rápida", "Smaller size, same quality": "Tamanho menor, mesma qualidade", "Larger size, same quality": "Tamanho maior, mesma qualidade", "Back": "Voltar", "Please visit a profile page for auto-detection": "Visite uma página de perfil para detecção automática", "Please configure authentication in the Auth tab first": "Configure a autenticação na aba Auth primeiro", "Invalid username format": "Formato de nome de usuário inválido", "Invalid auth token. Please check your settings.": "Token de autenticação inválido. Verifique suas configurações.", "Invalid Patreon auth. Please check your settings.": "Autenticação do Patreon inválida. Verifique suas configurações.", "Failed to fetch data": "Falha ao buscar os dados", "Failed to fetch data from all APIs": "Falha ao buscar os dados em todas as APIs", "Failed to verify auth from all APIs": "Falha ao verificar a autenticação em todas as APIs", "Failed to generate token from all APIs": "Falha ao gerar o token em todas as APIs", "Generating token...": "Gerando token...", "Abort": "Abortar", "Network error occurred": "Ocorreu um erro de rede", "Request timeout - please try again": "Tempo de requisição esgotado - tente novamente", "Failed to parse API response": "Falha ao analisar a resposta da API", "Invalid API response structure": "Estrutura de resposta da API inválida", "Unknown error occurred": "Ocorreu um erro desconhecido", "HTTP error! status: {{status}}": "Erro HTTP! status: {{status}}", "Download already in progress": "Download já em andamento", "No media files found": "Nenhum arquivo de mídia encontrado", "Toggle visibility": "Mostrar/ocultar", "Close": "Fechar", "Converting GIFs...": "Convertendo GIFs...", "Downloading...": "Baixando...", "Download": "Baixar", "Fetching...": "Obtendo...", "Fetch All": "Obter tudo", "Fetch Video": "Obter vídeo", "Fetch Image": "Obter imagem", "Fetch GIF": "Obter GIF", "Posts: {{posts}}": "Publicações: {{posts}}", "Media: {{media}}": "Mídia: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "Mídia atual: {{current}} • Mídia total: {{total}}", "Failed to download media": "Falha ao baixar a mídia", "Demo mode is only available for @xbatchdemo": "O modo demonstração está disponível apenas para @xbatchdemo", "Auth Token": "Token de autenticação", "Enter your auth token": "Insira seu token de autenticação", "Your authentication token for API access": "Seu token de autenticação para acesso à API", "Patreon Auth": "Autenticação do Patreon", "Enter your Patreon auth": "Insira sua autenticação do Patreon", "Your Patreon authentication key": "Sua chave de autenticação do Patreon", "Please enter Patreon auth first": "Insira primeiro a autenticação do Patreon", "Please verify Patreon auth first": "Verifique primeiro a autenticação do Patreon", "Patreon auth verified successfully": "Autenticação do Patreon verificada com sucesso", "Invalid Patreon auth": "Autenticação do Patreon inválida", "Verification failed. Please try again": "Falha na verificação. Tente novamente", "Generating": "Gerando", "Generate": "Gerar", "Verify": "Verificar", "Token generated successfully": "Token gerado com sucesso ({{current}}/{{total}})", "Failed to generate token": "Falha ao gerar o token", "Token generation failed. Please try again": "Falha na geração do token. Tente novamente", "Verifying": "Verificando", "Verified": "Verificado", "Use code": "Use o código", "for Patreon Auth, click Verify to unlock demo. Test at": 'para Autenticação do Patreon, clique em "Verificar" para desbloquear a demonstração. Teste em', "Need help with Auth Token? See": "Precisa de ajuda com o token de autenticação? Veja", "the guide": "o guia", "Subscribe": "Assine", "to get your Patreon Auth code and start downloading with ease!": "para obter seu código de autenticação do Patreon e começar a baixar com facilidade!", "Report bugs or request features:": "Relate bugs ou solicite recursos:", "Import": "Importar", "Importing...": "Importando...", "Supports JSON and ZIP formats": "Suporta formatos JSON e ZIP", "Export": "Exportar", "Export All Data": "Exportar todos os dados", "Exporting...": "Exportando...", "Clear": "Limpar", "Filter by Batch": "Filtrar por lote", "Are you sure to clear all data in the database?": "Tem certeza de que deseja limpar todos os dados do banco de dados?", "Delete Account Data": "Excluir dados da conta", "Are you sure you want to delete account data? This action cannot be undone": "Tem certeza de que deseja excluir os dados de {{username}}? Esta ação não pode ser desfeita.", "Delete": "Excluir", "Deleting...": "Excluindo...", "Overwrite": "Substituir", "Overwrite Existing Data?": "Substituir dados existentes?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Os dados da conta @{{username}} já existem no banco de dados. Deseja substituí-los?", "No accounts yet": "Ainda não há contas", "Use Dashboard to fetch data.": "Use o Painel para buscar os dados.", "Something went wrong.": "Algo deu errado.", "Error:": "Erro:", "Fetch": "Buscar", "Single": "Único", "Batch": "Lote", "Auto Batch": "Lote automático", "Timeline": "Linha do tempo", "Media": "Mídia", "Batch Size": "Tamanho do lote", "Starting Batch": "Lote inicial", "Posts": "Publicações", "Tweets": "Tweets", "Replies": "Respostas", "All": "Tudo", "Image": "Imagem", "Video": "Vídeo", "GIF": "GIF", "Batch: {{page}}": "Lote: {{page}}", "Start": "Iniciar", "Stop": "Parar", "Prev": "Anterior", "Next": "Próximo", "Download Current": "Baixar atual", "Download All": "Baixar tudo", "Use Batch/Auto Batch if single fetch fails": "Use Lote/Lote automático se a busca única falhar", "Load from database": "Carregar do banco de dados", "Load database": "Carregar banco de dados", "Home": "Início", "End": "Fim", "Failed to load data": "Falha ao carregar os dados", "Update": "Atualizar", "Updating...": "Atualizando...", "Update will fetch the latest data and overwrite the database. Continue?": "A atualização buscará os dados mais recentes e sobrescreverá o banco de dados. Continuar?", "Followers": "Seguidores", "Following": "Seguindo", "Joined": "Entrou em", "Open": "Abrir", "Preview": "Visualizar", "View Database": "Ver banco de dados", "Converting...": "Convertendo...", "Convert & Download": "Converter e baixar" } };
  const ru = { "common": { "Settings": "Настройки", "Theme": "Тема", "Change Theme": "Изменить тему", "Language": "Язык", "Change Language": "Изменить язык", "Date Time Format": "Формат даты и времени", "Debug": "Отладка", "Global Settings": "Глобальные настройки", "Version": "Версия", "Common Formats:": "Общие форматы:", "Date Formats:": "Форматы дат:", "Time Formats:": "Форматы времени:", "Combined Examples:": "Комбинированные примеры:", "Localized": "Локализованный", "Reset Settings": "Сбросить настройки", "Are you sure you want to reset settings to defaults?": "Вы уверены, что хотите сбросить настройки к значениям по умолчанию?", "Reset": "Сброс", "Cancel": "Отмена", "Chrome": "Chrome", "Userscript": "Пользовательский скрипт", "Website": "Сайт", "Patreon": "Patreon", "Dashboard": "Панель управления", "Database": "База данных", "Auth": "Аутентификация", "Convert Animated GIFs": "Конвертировать GIF", "Convert GIFs (External)": "Конвертировать GIF (внешний)", "Concurrent Downloads": "Одновременные загрузки", "Use 10+ only with fast internet": "Используйте 10+ только при быстром интернете", "Smaller size, same quality": "Меньший размер, то же качество", "Larger size, same quality": "Больший размер, то же качество", "Back": "Назад", "Please visit a profile page for auto-detection": "Посетите страницу профиля для автоопределения", "Please configure authentication in the Auth tab first": "Сначала настройте аутентификацию на вкладке Auth", "Invalid username format": "Недопустимый формат имени пользователя", "Invalid auth token. Please check your settings.": "Недействительный токен аутентификации. Проверьте настройки.", "Invalid Patreon auth. Please check your settings.": "Недействительная авторизация Patreon. Проверьте настройки.", "Failed to fetch data": "Не удалось получить данные", "Failed to fetch data from all APIs": "Не удалось получить данные со всех API", "Failed to verify auth from all APIs": "Не удалось проверить авторизацию через все API", "Failed to generate token from all APIs": "Не удалось сгенерировать токен через все API", "Generating token...": "Генерация токена...", "Abort": "Отменить", "Network error occurred": "Произошла сетевая ошибка", "Request timeout - please try again": "Время ожидания запроса истекло — попробуйте снова", "Failed to parse API response": "Не удалось разобрать ответ API", "Invalid API response structure": "Недопустимая структура ответа API", "Unknown error occurred": "Произошла неизвестная ошибка", "HTTP error! status: {{status}}": "Ошибка HTTP! статус: {{status}}", "Download already in progress": "Загрузка уже выполняется", "No media files found": "Медиафайлы не найдены", "Toggle visibility": "Показать/скрыть", "Close": "Закрыть", "Converting GIFs...": "Конвертация GIF...", "Downloading...": "Загрузка...", "Download": "Скачать", "Fetching...": "Получение...", "Fetch All": "Получить всё", "Fetch Video": "Получить видео", "Fetch Image": "Получить изображение", "Fetch GIF": "Получить GIF", "Posts: {{posts}}": "Публикации: {{posts}}", "Media: {{media}}": "Медиа: {{media}}", "Current Media: {{current}} • Total Media: {{total}}": "Текущая медиа: {{current}} • Всего медиа: {{total}}", "Failed to download media": "Не удалось скачать медиа", "Demo mode is only available for @xbatchdemo": "Демо-режим доступен только для @xbatchdemo", "Auth Token": "Токен аутентификации", "Enter your auth token": "Введите токен аутентификации", "Your authentication token for API access": "Ваш токен аутентификации для доступа к API", "Patreon Auth": "Авторизация Patreon", "Enter your Patreon auth": "Введите авторизацию Patreon", "Your Patreon authentication key": "Ваш ключ аутентификации Patreon", "Please enter Patreon auth first": "Сначала введите авторизацию Patreon", "Please verify Patreon auth first": "Сначала подтвердите авторизацию Patreon", "Patreon auth verified successfully": "Авторизация Patreon успешно проверена", "Invalid Patreon auth": "Недействительная авторизация Patreon", "Verification failed. Please try again": "Не удалось выполнить проверку. Попробуйте ещё раз", "Generating": "Генерация...", "Generate": "Создать", "Verify": "Проверить", "Token generated successfully": "Токен успешно сгенерирован ({{current}}/{{total}})", "Failed to generate token": "Не удалось сгенерировать токен", "Token generation failed. Please try again": "Не удалось сгенерировать токен. Попробуйте ещё раз", "Verifying": "Проверка...", "Verified": "Проверено", "Use code": "Используйте код", "for Patreon Auth, click Verify to unlock demo. Test at": "для аутентификации Patreon, нажмите «Проверить», чтобы разблокировать демо. Тест:", "Need help with Auth Token? See": "Нужна помощь с токеном аутентификации? См.", "the guide": "руководство", "Subscribe": "Подписаться", "to get your Patreon Auth code and start downloading with ease!": "чтобы получить код аутентификации Patreon и с лёгкостью начать скачивание!", "Report bugs or request features:": "Сообщить об ошибках или запросить функции:", "Import": "Импорт", "Importing...": "Импорт...", "Supports JSON and ZIP formats": "Поддерживает форматы JSON и ZIP", "Export": "Экспорт", "Export All Data": "Экспортировать все данные", "Exporting...": "Экспорт...", "Clear": "Очистить", "Filter by Batch": "Фильтр по пакетам", "Are you sure to clear all data in the database?": "Вы уверены, что хотите очистить все данные в базе данных?", "Delete Account Data": "Удалить данные аккаунта", "Are you sure you want to delete account data? This action cannot be undone": "Вы уверены, что хотите удалить данные {{username}}? Это действие нельзя отменить.", "Delete": "Удалить", "Deleting...": "Удаление...", "Overwrite": "Перезаписать", "Overwrite Existing Data?": "Перезаписать существующие данные?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Данные аккаунта @{{username}} уже существуют в базе данных. Перезаписать их?", "No accounts yet": "Пока нет аккаунтов", "Use Dashboard to fetch data.": "Используйте панель, чтобы получить данные.", "Something went wrong.": "Что-то пошло не так.", "Error:": "Ошибка:", "Fetch": "Получить", "Single": "Одиночный", "Batch": "Пакет", "Auto Batch": "Автопакет", "Timeline": "Лента", "Media": "Медиа", "Batch Size": "Размер пакета", "Starting Batch": "Начальный пакет", "Posts": "Публикации", "Tweets": "Твиты", "Replies": "Ответы", "All": "Все", "Image": "Изображение", "Video": "Видео", "GIF": "GIF", "Batch: {{page}}": "Пакет: {{page}}", "Start": "Старт", "Stop": "Стоп", "Prev": "Назад", "Next": "Далее", "Download Current": "Скачать текущее", "Download All": "Скачать всё", "Use Batch/Auto Batch if single fetch fails": "Используйте пакет/автопакет, если одиночное получение не удалось", "Load from database": "Загрузить из базы данных", "Load database": "Загрузить базу данных", "Home": "Начало", "End": "Конец", "Failed to load data": "Не удалось загрузить данные", "Update": "Обновить", "Updating...": "Обновление...", "Update will fetch the latest data and overwrite the database. Continue?": "Обновление получит последние данные и перезапишет базу данных. Продолжить?", "Followers": "Подписчики", "Following": "Подписки", "Joined": "Дата регистрации", "Open": "Открыть", "Preview": "Предпросмотр", "View Database": "Просмотреть базу данных", "Converting...": "Конвертация...", "Convert & Download": "Конвертировать и скачать" } };
  const zh_Hans = { "common": { "Settings": "设置", "Theme": "主题", "Change Theme": "更改主题", "Language": "语言", "Change Language": "更改语言", "Date Time Format": "日期时间格式", "Debug": "调试开关", "Global Settings": "全局设置", "Version": "版本", "Common Formats:": "常用格式:", "Date Formats:": "日期格式:", "Time Formats:": "时间格式:", "Combined Examples:": "组合示例:", "Localized": "本地化", "Reset Settings": "重置设置", "Are you sure you want to reset settings to defaults?": "确定要将设置重置为默认值吗?", "Reset": "重置", "Cancel": "取消", "Chrome": "Chrome", "Userscript": "用户脚本", "Website": "网站", "Patreon": "Patreon", "Dashboard": "仪表板", "Database": "数据库", "Auth": "认证", "Convert Animated GIFs": "转换 GIF", "Convert GIFs (External)": "转换 GIF(外部)", "Concurrent Downloads": "并发下载", "Use 10+ only with fast internet": "仅在网络快速时使用 10+", "Smaller size, same quality": "体积更小,质量相同", "Larger size, same quality": "体积更大,质量相同", "Back": "返回", "Please visit a profile page for auto-detection": "请访问个人资料页面进行自动检测", "Please configure authentication in the Auth tab first": "请先在认证选项卡中配置身份验证", "Invalid username format": "无效的用户名格式", "Invalid auth token. Please check your settings.": "无效的认证令牌,请检查您的设置。", "Invalid Patreon auth. Please check your settings.": "无效的 Patreon 认证,请检查您的设置。", "Failed to fetch data": "获取数据失败", "Failed to fetch data from all APIs": "所有 API 均无法获取数据", "Failed to verify auth from all APIs": "所有 API 均无法验证认证", "Failed to generate token from all APIs": "所有 API 均无法生成令牌", "Generating token...": "正在生成令牌...", "Abort": "中止", "Network error occurred": "发生网络错误", "Request timeout - please try again": "请求超时 - 请重试", "Failed to parse API response": "解析 API 响应失败", "Invalid API response structure": "无效的 API 响应结构", "Unknown error occurred": "发生未知错误", "HTTP error! status: {{status}}": "HTTP 错误!状态:{{status}}", "Download already in progress": "下载已在进行中", "No media files found": "未找到媒体文件", "Toggle visibility": "显示/隐藏", "Close": "关闭", "Converting GIFs...": "正在转换 GIF...", "Downloading...": "正在下载...", "Download": "下载", "Fetching...": "正在获取...", "Fetch All": "获取全部", "Fetch Video": "获取视频", "Fetch Image": "获取图片", "Fetch GIF": "获取 GIF", "Posts: {{posts}}": "帖子:{{posts}}", "Media: {{media}}": "媒体:{{media}}", "Current Media: {{current}} • Total Media: {{total}}": "当前媒体:{{current}} • 总媒体:{{total}}", "Failed to download media": "下载媒体失败", "Demo mode is only available for @xbatchdemo": "演示模式仅适用于 @xbatchdemo", "Auth Token": "认证令牌", "Enter your auth token": "输入您的认证令牌", "Your authentication token for API access": "用于 API 访问的身份验证令牌", "Patreon Auth": "Patreon 认证", "Enter your Patreon auth": "输入您的 Patreon 认证", "Your Patreon authentication key": "您的 Patreon 身份验证密钥", "Please enter Patreon auth first": "请先输入 Patreon 认证", "Please verify Patreon auth first": "请先验证 Patreon 认证", "Patreon auth verified successfully": "Patreon 认证验证成功", "Invalid Patreon auth": "无效的 Patreon 认证", "Verification failed. Please try again": "验证失败,请重试", "Generating": "正在生成", "Generate": "生成", "Verify": "验证", "Token generated successfully": "令牌生成成功 ({{current}}/{{total}})", "Failed to generate token": "生成令牌失败", "Token generation failed. Please try again": "令牌生成失败,请重试", "Verifying": "正在验证", "Verified": "已验证", "Use code": "使用代码", "for Patreon Auth, click Verify to unlock demo. Test at": "用于 Patreon 认证,点击“验证”以解锁演示。测试地址:", "Need help with Auth Token? See": "需要获取认证令牌的帮助?请查看", "the guide": "指南", "Subscribe": "订阅", "to get your Patreon Auth code and start downloading with ease!": "即可获取您的 Patreon 认证码,轻松开始下载!", "Report bugs or request features:": "报告问题或请求功能:", "Import": "导入", "Importing...": "正在导入...", "Supports JSON and ZIP formats": "支持 JSON 和 ZIP 格式", "Export": "导出", "Export All Data": "导出全部数据", "Exporting...": "正在导出...", "Clear": "清空", "Filter by Batch": "按批次过滤", "Are you sure to clear all data in the database?": "确定要清空数据库中的所有数据吗?", "Delete Account Data": "删除账户数据", "Are you sure you want to delete account data? This action cannot be undone": "您确定要删除 {{username}} 的数据吗?此操作无法撤销。", "Delete": "删除", "Deleting...": "正在删除...", "Overwrite": "覆盖", "Overwrite Existing Data?": "覆盖现有数据?", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "账户 @{{username}} 的数据已存在于数据库中。您要覆盖吗?", "No accounts yet": "尚未有账户", "Use Dashboard to fetch data.": "使用仪表板获取数据。", "Something went wrong.": "出错了。", "Error:": "错误:", "Fetch": "获取", "Single": "单次", "Batch": "批量", "Auto Batch": "自动批量", "Timeline": "时间线", "Media": "媒体", "Batch Size": "批量大小", "Starting Batch": "起始批次", "Posts": "帖子", "Tweets": "推文", "Replies": "回复", "All": "全部", "Image": "图片", "Video": "视频", "GIF": "GIF", "Batch: {{page}}": "批次:{{page}}", "Start": "开始", "Stop": "停止", "Prev": "上一页", "Next": "下一页", "Download Current": "下载当前", "Download All": "下载全部", "Use Batch/Auto Batch if single fetch fails": "若单次获取失败,请使用批量/自动批量", "Load from database": "从数据库加载", "Load database": "加载数据库", "Home": "首页", "End": "末页", "Failed to load data": "加载数据失败", "Update": "更新", "Updating...": "更新中...", "Update will fetch the latest data and overwrite the database. Continue?": "更新将获取最新数据并覆盖数据库。继续吗?", "Followers": "粉丝", "Following": "正在关注", "Joined": "加入时间", "Open": "打开", "Preview": "预览", "View Database": "查看数据库", "Converting...": "转换中...", "Convert & Download": "转换并下载" } };
  const resources = {
    "ar": ar,
    "de": de,
    "en": en$1,
    "es": es,
    "fr": fr,
    "hi": hi,
    "ja": ja,
    "ko": ko,
    "pt": pt,
    "ru": ru,
    "zh-Hans": zh_Hans
  };
  const logLinesSignal = signals.signal([]);
  const APP_NAME = "twitter-x-media-batch-downloader-pro";
  class Logger {
    index = 0;
    buffer = [];
    bufferTimer = null;
    isDebugEnabled() {
      try {
        const { options: options2 } = require("@/core/options");
        return options2.get("debug") ?? false;
      } catch {
        return false;
      }
    }
    info(line, ...args) {
      if (this.isDebugEnabled()) {
        console.info(`[${APP_NAME}]`, line, ...args);
        this.writeBuffer({ type: "info", line, index: this.index++ });
      }
    }
    warn(line, ...args) {
      if (this.isDebugEnabled()) {
        console.warn(`[${APP_NAME}]`, line, ...args);
        this.writeBuffer({ type: "warn", line, index: this.index++ });
      }
    }
    error(line, ...args) {
      console.error(`[${APP_NAME}]`, line, ...args);
      this.writeBuffer({ type: "error", line, index: this.index++ });
    }
    errorWithBanner(msg, err, ...args) {
      this.error(
        `${msg} (Message: ${err?.message ?? "none"})
  Report bugs: [email protected]`,
        ...args
      );
    }
    debug(...args) {
      if (this.isDebugEnabled()) {
        console.debug(`[${APP_NAME}]`, ...args);
      }
    }
    writeBuffer(log) {
      this.buffer.push(log);
      if (this.bufferTimer) {
        clearTimeout(this.bufferTimer);
      }
      this.bufferTimer = window.setTimeout(() => {
        this.bufferTimer = null;
        this.flushBuffer();
      }, 0);
    }
    flushBuffer() {
      logLinesSignal.value = [...logLinesSignal.value, ...this.buffer];
      this.buffer = [];
    }
  }
  const logger = new Logger();
  function safeJSONParse(text) {
    try {
      return JSON.parse(text);
    } catch (e) {
      logger.error(e.message);
      return null;
    }
  }
  function cx(...classNames) {
    return classNames.filter(Boolean).join(" ");
  }
  function isEqual(obj1, obj2) {
    return JSON.stringify(obj1) === JSON.stringify(obj2);
  }
  function formatDateTime(date, format) {
    if (typeof date === "number" || typeof date === "string") {
      date = dayjs(date);
    }
    return date.format(format);
  }
  function sanitizeFilename(name) {
    return name.replace(/[\\/:*?"<>|]/g, "-").replace(/\s+/g, "_").replace(/_+/g, "_").replace(/^_+|_+$/g, "");
  }
  const version = "1.0.2";
  const pkg = {
    version
  };
  const DEFAULT_APP_OPTIONS = {
    theme: "light",
    debug: false,
    showControlPanel: true,
    disabledExtensions: [
      "HomeTimelineModule",
      "ListTimelineModule",
      "ListSubscribersModule",
      "ListMembersModule"
    ],
    dateTimeFormat: "YYYY-MM-DD HH:mm:ss Z",
    filenamePattern: "{screen_name}_{id}_{type}_{num}_{date}.{ext}",
    language: "",
    version: pkg.version,
    convertAnimatedGifs: true,
    convertGifsExternal: false,
    downloadConcurrency: 1,
    fetchMode: "single",
    timelineType: "media",
    mediaType: "all",
    batchSize: 100,
    startingBatch: 0
  };
  const THEMES = [
    "light",
    "dark",
    "cupcake",
    "bumblebee",
    "emerald",
    "corporate",
    "synthwave",
    "retro",
    "cyberpunk",
    "valentine",
    "halloween",
    "garden",
    "forest",
    "aqua",
    "lofi",
    "pastel",
    "fantasy",
    "wireframe",
    "black",
    "luxury",
    "dracula",
    "cmyk",
    "autumn",
    "business",
    "acid",
    "lemonade",
    "night",
    "coffee",
    "winter",
    "dim",
    "nord",
    "sunset",
    "caramellatte",
    "abyss",
    "silk"
  ];
  const LOCAL_STORAGE_KEY = "twitter-x-media-batch-downloader-pro";
  class AppOptionsManager {
    appOptions = { ...DEFAULT_APP_OPTIONS };
    previous = { ...DEFAULT_APP_OPTIONS };
    signal = new signals.Signal(0);
    constructor() {
      this.loadAppOptions();
    }
    get(key, defaultValue) {
      return this.appOptions[key] ?? defaultValue;
    }
    set(key, value) {
      this.appOptions[key] = value;
      this.saveAppOptions();
    }
    loadAppOptions() {
      this.appOptions = {
        ...this.appOptions,
        ...safeJSONParse(localStorage.getItem(LOCAL_STORAGE_KEY) || "{}")
      };
      let migrated = false;
      const tt = String(this.appOptions.timelineType ?? "");
      if (tt === "posts") {
        this.appOptions.timelineType = "timeline";
        migrated = true;
      } else if (tt === "replies") {
        this.appOptions.timelineType = "with_replies";
        migrated = true;
      }
      if (migrated) {
        logger.info("App options migrated: timelineType updated to new slugs");
        setTimeout(() => this.saveAppOptions(), 0);
      }
      const oldVersion = this.appOptions.version ?? "";
      const newVersion = DEFAULT_APP_OPTIONS.version;
      if (newVersion.startsWith("1.1") && oldVersion.startsWith("1.0")) {
        this.appOptions.disabledExtensions = [
          ...this.appOptions.disabledExtensions ?? [],
          "HomeTimelineModule",
          "ListTimelineModule"
        ];
        logger.info(`App options migrated from v${oldVersion} to v${newVersion}`);
        setTimeout(() => this.saveAppOptions(), 0);
      }
      this.previous = { ...this.appOptions };
      logger.info("App options loaded", this.appOptions);
      this.signal.value++;
    }
    saveAppOptions() {
      const oldValue = this.previous;
      const newValue = {
        ...this.appOptions,
        version: pkg.version
      };
      if (isEqual(oldValue, newValue)) {
        return;
      }
      this.appOptions = newValue;
      localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(this.appOptions));
      this.previous = { ...this.appOptions };
      logger.debug("App options saved", this.appOptions);
      this.signal.value++;
    }
  }
  const appOptionsManager = new AppOptionsManager();
  const LANGUAGES_CONFIG = {
    en: {
      name: "English",
      nameEn: "English",
      test: (code) => /^en/.test(code)
    },
    "zh-Hans": {
      name: "中文",
      nameEn: "Chinese (中文)",
      test: (code) => /^zh/.test(code)
    },
    ar: {
      name: "العربية",
      nameEn: "Arabic (العربية)",
      test: (code) => /^ar/.test(code)
    },
    ja: {
      name: "日本語",
      nameEn: "Japanese (日本語)",
      test: (code) => /^ja/.test(code)
    },
    ko: {
      name: "한국어",
      nameEn: "Korean (한국어)",
      test: (code) => /^ko/.test(code)
    },
    fr: {
      name: "Français",
      nameEn: "French (Français)",
      test: (code) => /^fr/.test(code)
    },
    de: {
      name: "Deutsch",
      nameEn: "German (Deutsch)",
      test: (code) => /^de/.test(code)
    },
    hi: {
      name: "हिन्दी",
      nameEn: "Hindi (हिन्दी)",
      test: (code) => /^hi/.test(code)
    },
    pt: {
      name: "Português",
      nameEn: "Portuguese (Português)",
      test: (code) => /^pt/.test(code)
    },
    ru: {
      name: "Русский",
      nameEn: "Russian (Русский)",
      test: (code) => /^ru/.test(code)
    },
    es: {
      name: "Español",
      nameEn: "Spanish (Español)",
      test: (code) => /^es/.test(code)
    }
  };
  function detectBrowserLanguage() {
    const language = window.navigator.language || "en";
    for (const [langTag, langConf] of Object.entries(LANGUAGES_CONFIG)) {
      if (langConf.test(language)) {
        return langTag;
      }
    }
    return language;
  }
  const languageDetector = {
    type: "languageDetector",
    detect: function() {
      return appOptionsManager.get("language") || detectBrowserLanguage();
    }
  };
  function initI18n() {
    if (i18next.isInitialized) {
      return i18next;
    }
    i18next.on("languageChanged", (lng) => {
      if (!appOptionsManager.get("language")) {
        appOptionsManager.set("language", lng);
      }
    });
    i18next.use(languageDetector).init({
      initImmediate: true,
      defaultNS: "common",
      fallbackLng: "en",
      nsSeparator: "::",
      debug: appOptionsManager.get("debug"),
      resources
    });
    return i18next;
  }
  function useTranslation(ns) {
    const i18n = initI18n();
    const [t, setT] = hooks.useState(() => i18n.getFixedT(null, ns ?? null));
    const isMountedRef = hooks.useRef(true);
    const previousNamespaceRef = hooks.useRef(ns);
    hooks.useEffect(() => {
      isMountedRef.current = true;
      if (previousNamespaceRef.current !== ns) {
        previousNamespaceRef.current = ns;
        setT(() => i18n.getFixedT(null, ns ?? null));
      }
      function boundReset() {
        if (isMountedRef.current) {
          setT(() => i18n.getFixedT(null, ns ?? null));
        }
      }
      i18n.on("languageChanged", boundReset);
      return () => {
        isMountedRef.current = false;
        i18n.off("languageChanged", boundReset);
      };
    }, [ns]);
    return { t, i18n };
  }
  function Trans({ i18nKey, ns = "common" }) {
    const { t } = useTranslation(ns);
    return u("span", { children: t(i18nKey) });
  }
  class ErrorBoundary extends preact.Component {
    state = { error: null };
    static getDerivedStateFromError(err) {
      return { error: err.message };
    }
    componentDidCatch(err) {
      logger.error(err.message, err);
      this.setState({ error: err.message });
    }
    render() {
      const i18n = initI18n();
      const isArabic = (i18n.language || "").startsWith("ar");
      if (this.state.error) {
        return u("div", { class: "alert alert-error alert-soft p-2", children: [
u(IconExclamationCircle, {}),
u("div", { dir: isArabic ? "rtl" : void 0, children: [
u("h3", { class: "font-bold leading-normal", children: u(Trans, { ns: "common", i18nKey: "Something went wrong." }) }),
u("p", { class: "text-xs", children: [
u(Trans, { ns: "common", i18nKey: "Error:" }),
              " ",
              this.state.error
            ] })
          ] })
        ] });
      }
      return this.props.children;
    }
  }
  const API_CONFIG = {
    primary: "https://api.xbatch.online",
    alternate: "https://alt.xbatch.online",
    timeout: 6e4
  };
  const mediaDownloaderAPI = {
    async fetchMediaData(username, authToken, patreonAuth, params) {
      const timelineType = params?.timelineType ?? "media";
      const batchSize = params?.batchSize ?? 100;
      const startingBatch = params?.startingBatch ?? 0;
      const mediaType = params?.mediaType ?? "all";
      const fetchMode = params?.fetchMode;
      let endpoint;
      if (patreonAuth === "xbatchdemo") {
        endpoint = `/demo/media/all/xbatchdemo/${authToken}/xbatchdemo`;
      } else if (fetchMode === "single") {
        endpoint = `/metadata/${encodeURIComponent(timelineType)}/${encodeURIComponent(mediaType)}/${encodeURIComponent(username)}/${encodeURIComponent(authToken)}/${encodeURIComponent(patreonAuth)}`;
      } else {
        endpoint = `/metadata/${encodeURIComponent(timelineType)}/${encodeURIComponent(String(batchSize))}/${encodeURIComponent(String(startingBatch))}/${encodeURIComponent(mediaType)}/${encodeURIComponent(username)}/${encodeURIComponent(authToken)}/${encodeURIComponent(patreonAuth)}`;
      }
      try {
        const response = await this.makeRequest(API_CONFIG.primary + endpoint);
        return response;
      } catch (primaryError) {
        console.warn("Primary API failed, trying alternate:", primaryError);
        try {
          const response = await this.makeRequest(API_CONFIG.alternate + endpoint);
          return response;
        } catch (alternateError) {
          console.error("All APIs failed:", { primaryError, alternateError });
          throw new Error("Failed to fetch data from all APIs");
        }
      }
    },
    async makeRequest(url) {
      return new Promise((resolve, reject) => {
        if (typeof GM_xmlhttpRequest !== "undefined") {
          GM_xmlhttpRequest({
            method: "GET",
            url,
            timeout: API_CONFIG.timeout,
            headers: {
              "Accept": "application/json",
              "Content-Type": "application/json"
            },
            onload: (response) => {
              try {
                if (response.status !== 200) {
                  reject(new Error(`HTTP error! status: ${response.status}`));
                  return;
                }
                const data = JSON.parse(response.responseText);
                if (!this.validateResponse(data)) {
                  reject(new Error("Invalid API response structure"));
                  return;
                }
                resolve(data);
              } catch (parseError) {
                reject(new Error("Failed to parse API response"));
              }
            },
            onerror: () => {
              reject(new Error("Network error occurred"));
            },
            ontimeout: () => {
              reject(new Error("Request timeout - please try again"));
            }
          });
        } else {
          this.makeRequestWithFetch(url).then(resolve).catch(reject);
        }
      });
    },
    async makeRequestWithFetch(url) {
      const controller = new AbortController();
      const timeoutId = setTimeout(() => controller.abort(), API_CONFIG.timeout);
      try {
        const response = await fetch(url, {
          method: "GET",
          signal: controller.signal,
          headers: {
            "Accept": "application/json",
            "Content-Type": "application/json"
          }
        });
        clearTimeout(timeoutId);
        if (!response.ok) {
          throw new Error(`HTTP error! status: ${response.status}`);
        }
        const data = await response.json();
        if (!this.validateResponse(data)) {
          throw new Error("Invalid API response structure");
        }
        return data;
      } catch (error) {
        clearTimeout(timeoutId);
        if (error instanceof Error) {
          if (error.name === "AbortError") {
            throw new Error("Request timeout - please try again");
          }
          throw error;
        }
        throw new Error("Unknown error occurred");
      }
    },
    validateResponse(data) {
      return data && typeof data === "object" && data.account_info && typeof data.account_info === "object" && data.metadata && typeof data.metadata === "object" && Array.isArray(data.timeline);
    },
    formatUsername(username) {
      return username.replace(/^@/, "").trim().toLowerCase();
    },
    validateUsername(username) {
      const cleanUsername = this.formatUsername(username);
      return /^[a-zA-Z0-9_]{1,15}$/.test(cleanUsername);
    },
    validateAuthToken(token) {
      return token.trim().length > 10;
    },
    validatePatreonAuth(auth) {
      return auth.trim().length > 0;
    },
    async verifyPatreonAuth(patreonAuth) {
      if (patreonAuth === "xbatchdemo") {
        return { valid: true };
      }
      const endpoint = `/verify/${patreonAuth}`;
      try {
        const response = await this.makeAuthRequest(API_CONFIG.primary + endpoint);
        return response;
      } catch (primaryError) {
        console.warn("Primary API failed, trying alternate:", primaryError);
        try {
          const response = await this.makeAuthRequest(API_CONFIG.alternate + endpoint);
          return response;
        } catch (alternateError) {
          console.error("All APIs failed:", { primaryError, alternateError });
          throw new Error("Failed to verify auth from all APIs");
        }
      }
    },
    async generateAuthToken(patreonAuth) {
      const endpoint = `/token/${patreonAuth}`;
      try {
        const response = await this.makeAuthRequest(API_CONFIG.primary + endpoint);
        return response;
      } catch (primaryError) {
        console.warn("Primary API failed, trying alternate:", primaryError);
        try {
          const response = await this.makeAuthRequest(API_CONFIG.alternate + endpoint);
          return response;
        } catch (alternateError) {
          console.error("All APIs failed:", { primaryError, alternateError });
          throw new Error("Failed to generate token from all APIs");
        }
      }
    },
    async makeAuthRequest(url) {
      return new Promise((resolve, reject) => {
        if (typeof GM_xmlhttpRequest !== "undefined") {
          GM_xmlhttpRequest({
            method: "GET",
            url,
            timeout: API_CONFIG.timeout,
            headers: {
              "Accept": "application/json",
              "Content-Type": "application/json"
            },
            onload: (response) => {
              try {
                if (response.status !== 200) {
                  reject(new Error(`HTTP error! status: ${response.status}`));
                  return;
                }
                const data = JSON.parse(response.responseText);
                resolve(data);
              } catch (parseError) {
                reject(new Error("Failed to parse API response"));
              }
            },
            onerror: () => {
              reject(new Error("Network error occurred"));
            },
            ontimeout: () => {
              reject(new Error("Request timeout - please try again"));
            }
          });
        } else {
          this.makeAuthRequestWithFetch(url).then(resolve).catch(reject);
        }
      });
    },
    async makeAuthRequestWithFetch(url) {
      const controller = new AbortController();
      const timeoutId = setTimeout(() => controller.abort(), API_CONFIG.timeout);
      try {
        const response = await fetch(url, {
          method: "GET",
          signal: controller.signal,
          headers: {
            "Accept": "application/json",
            "Content-Type": "application/json"
          }
        });
        clearTimeout(timeoutId);
        if (!response.ok) {
          throw new Error(`HTTP error! status: ${response.status}`);
        }
        const data = await response.json();
        return data;
      } catch (error) {
        clearTimeout(timeoutId);
        if (error instanceof Error) {
          if (error.name === "AbortError") {
            throw new Error("Request timeout - please try again");
          }
          throw error;
        }
        throw new Error("Unknown error occurred");
      }
    }
  };
  class MediaDownloaderDB extends Dexie {
    accounts;
    auth_settings;
    constructor() {
      super("TwitterXMediaBatchDownloaderPro");
      this.version(1).stores({
        accounts: "++id, username, cached_at",
        auth_settings: "++id"
      });
      this.version(2).stores({
        accounts: "++id, username, cached_at, batch_identifier",
        auth_settings: "++id"
      });
    }
  }
  const mediaDB = new MediaDownloaderDB();
  const dbState = {
    totalAccounts: signals.signal(0),
    dbChangeSignal: signals.signal(0)
  };
  async function updateTotalCount() {
    try {
      dbState.totalAccounts.value = await mediaDB.accounts.count();
    } catch {
    }
  }
  const mediaDownloaderDB = {
    async saveAccount(data) {
      const account = {
        ...data,
        cached_at: Date.now()
      };
      let existing;
      if (account.batch_mode && account.batch_mode !== "single") {
        const batchAccounts = await mediaDB.accounts.where("username").equals(data.username).filter((acc) => !!(acc.batch_mode && acc.batch_mode !== "single")).toArray();
        if (batchAccounts.length > 0) {
          batchAccounts.sort((a, b) => b.cached_at - a.cached_at);
          existing = batchAccounts[0];
        }
      } else {
        existing = await mediaDB.accounts.where("username").equals(data.username).filter((acc) => !acc.batch_mode || acc.batch_mode === "single").first();
      }
      let id;
      if (existing) {
        await mediaDB.accounts.update(existing.id, account);
        id = existing.id;
      } else {
        id = await mediaDB.accounts.add(account);
      }
      await updateTotalCount();
      dbState.dbChangeSignal.value++;
      return id;
    },
    async insertAccount(data) {
      const id = await mediaDB.accounts.add(data);
      await updateTotalCount();
      dbState.dbChangeSignal.value++;
      return id;
    },
    async getAccounts(page = 1, limit = 3, filterByBatch = false) {
      const offset = (page - 1) * limit;
      let collection = mediaDB.accounts.orderBy("cached_at").reverse();
      if (filterByBatch) {
        collection = collection.filter((acc) => !!(acc.batch_mode && acc.batch_mode !== "single"));
      }
      return await collection.offset(offset).limit(limit).toArray();
    },
    async getAccountsCount(filterByBatch = false) {
      if (filterByBatch) {
        return await mediaDB.accounts.filter((acc) => !!(acc.batch_mode && acc.batch_mode !== "single")).count();
      }
      return await mediaDB.accounts.count();
    },
    async getAccountByUsername(username) {
      return await mediaDB.accounts.where("username").equals(username).first();
    },
    async getAccountsByUsername(username) {
      return await mediaDB.accounts.where("username").equals(username).reverse().sortBy("cached_at");
    },
    async getAccountsByUsernameAndMode(username, mode) {
      if (mode === "single") {
        const account = await mediaDB.accounts.where("username").equals(username).filter((acc) => !acc.batch_mode || acc.batch_mode === "single").first();
        return account ? [account] : [];
      } else {
        return await mediaDB.accounts.where("username").equals(username).filter((acc) => !!(acc.batch_mode && acc.batch_mode !== "single")).toArray();
      }
    },
    async updateAccount(id, data) {
      await mediaDB.accounts.update(id, data);
      dbState.dbChangeSignal.value++;
    },
    async deleteAccount(id) {
      await mediaDB.accounts.delete(id);
      await updateTotalCount();
      dbState.dbChangeSignal.value++;
    },
    async saveAuthSettings(authToken, patreonAuth) {
      const existing = await mediaDB.auth_settings.toCollection().first();
      const base = existing ? { ...existing } : {};
      const settings = {
        ...base,
        auth_token: authToken,
        patreon_auth: patreonAuth,
        updated_at: Date.now(),
        patreon_verified: base.patreon_verified && base.patreon_verified_auth === patreonAuth ? base.patreon_verified : false,
        patreon_verified_auth: base.patreon_verified && base.patreon_verified_auth === patreonAuth ? base.patreon_verified_auth : patreonAuth
      };
      if (existing) {
        await mediaDB.auth_settings.update(existing.id, settings);
        return existing.id;
      } else {
        return await mediaDB.auth_settings.add(settings);
      }
    },
    async setPatreonVerified(verified) {
      const existing = await mediaDB.auth_settings.toCollection().first();
      if (existing) {
        await mediaDB.auth_settings.update(existing.id, {
          patreon_verified: verified,
          patreon_verified_auth: existing.patreon_auth,
          updated_at: Date.now()
        });
      } else {
        await mediaDB.auth_settings.add({
          auth_token: "",
          patreon_auth: "",
          patreon_verified: verified,
          patreon_verified_auth: "",
          updated_at: Date.now()
        });
      }
    },
    async getAuthSettings() {
      return await mediaDB.auth_settings.toCollection().first();
    },
    async getAllAccounts() {
      return await mediaDB.accounts.orderBy("cached_at").reverse().toArray();
    },
    async clearAll() {
      await mediaDB.accounts.clear();
      dbState.totalAccounts.value = 0;
      dbState.dbChangeSignal.value++;
    }
  };
  class Crc32 {
    constructor() {
      this.crc = -1;
    }
    append(data) {
      var crc = this.crc | 0;
      var table = this.table;
      for (var offset = 0, len = data.length | 0; offset < len; offset++) {
        crc = crc >>> 8 ^ table[(crc ^ data[offset]) & 255];
      }
      this.crc = crc;
    }
    get() {
      return ~this.crc;
    }
  }
  Crc32.prototype.table = (() => {
    var i;
    var j2;
    var t;
    var table = [];
    for (i = 0; i < 256; i++) {
      t = i;
      for (j2 = 0; j2 < 8; j2++) {
        t = t & 1 ? t >>> 1 ^ 3988292384 : t >>> 1;
      }
      table[i] = t;
    }
    return table;
  })();
  const getDataHelper = (byteLength) => {
    var uint8 = new Uint8Array(byteLength);
    return {
      array: uint8,
      view: new DataView(uint8.buffer)
    };
  };
  const pump = (zipObj) => zipObj.reader.read().then((chunk) => {
    if (chunk.done) return zipObj.writeFooter();
    const outputData = chunk.value;
    zipObj.crc.append(outputData);
    zipObj.uncompressedLength += outputData.length;
    zipObj.compressedLength += outputData.length;
    zipObj.ctrl.enqueue(outputData);
  });
  function createWriter(underlyingSource) {
    const files = Object.create(null);
    const filenames = [];
    const encoder = new TextEncoder();
    let offset = 0;
    let activeZipIndex = 0;
    let ctrl;
    let activeZipObject, closed;
    function next() {
      activeZipIndex++;
      activeZipObject = files[filenames[activeZipIndex]];
      if (activeZipObject) processNextChunk();
      else if (closed) closeZip();
    }
    var zipWriter = {
      enqueue(fileLike) {
        if (closed)
          throw new TypeError(
            "Cannot enqueue a chunk into a readable stream that is closed or has been requested to be closed"
          );
        let name = fileLike.name.trim();
        const date = new Date(
          typeof fileLike.lastModified === "undefined" ? Date.now() : fileLike.lastModified
        );
        if (fileLike.directory && !name.endsWith("/")) name += "/";
        if (files[name]) throw new Error("File already exists.");
        const nameBuf = encoder.encode(name);
        filenames.push(name);
        const zipObject = files[name] = {
          level: 0,
          ctrl,
          directory: !!fileLike.directory,
          nameBuf,
          comment: encoder.encode(fileLike.comment || ""),
          compressedLength: 0,
          uncompressedLength: 0,
          writeHeader() {
            var header = getDataHelper(26);
            var data = getDataHelper(30 + nameBuf.length);
            zipObject.offset = offset;
            zipObject.header = header;
            if (zipObject.level !== 0 && !zipObject.directory) {
              header.view.setUint16(4, 2048);
            }
            header.view.setUint32(0, 335546376);
            header.view.setUint16(
              6,
              (date.getHours() << 6 | date.getMinutes()) << 5 | date.getSeconds() / 2,
              true
            );
            header.view.setUint16(
              8,
              (date.getFullYear() - 1980 << 4 | date.getMonth() + 1) << 5 | date.getDate(),
              true
            );
            header.view.setUint16(22, nameBuf.length, true);
            data.view.setUint32(0, 1347093252);
            data.array.set(header.array, 4);
            data.array.set(nameBuf, 30);
            offset += data.array.length;
            ctrl.enqueue(data.array);
          },
          writeFooter() {
            var footer = getDataHelper(16);
            footer.view.setUint32(0, 1347094280);
            if (zipObject.crc) {
              zipObject.header.view.setUint32(10, zipObject.crc.get(), true);
              zipObject.header.view.setUint32(14, zipObject.compressedLength, true);
              zipObject.header.view.setUint32(18, zipObject.uncompressedLength, true);
              footer.view.setUint32(4, zipObject.crc.get(), true);
              footer.view.setUint32(8, zipObject.compressedLength, true);
              footer.view.setUint32(12, zipObject.uncompressedLength, true);
            }
            ctrl.enqueue(footer.array);
            offset += zipObject.compressedLength + 16;
            next();
          },
          fileLike
        };
        if (!activeZipObject) {
          activeZipObject = zipObject;
          processNextChunk();
        }
      },
      close() {
        if (closed)
          throw new TypeError(
            "Cannot close a readable stream that has already been requested to be closed"
          );
        if (!activeZipObject) closeZip();
        closed = true;
      }
    };
    function closeZip() {
      var length = 0;
      var index = 0;
      var indexFilename, file;
      for (indexFilename = 0; indexFilename < filenames.length; indexFilename++) {
        file = files[filenames[indexFilename]];
        length += 46 + file.nameBuf.length + file.comment.length;
      }
      const data = getDataHelper(length + 22);
      for (indexFilename = 0; indexFilename < filenames.length; indexFilename++) {
        file = files[filenames[indexFilename]];
        data.view.setUint32(index, 1347092738);
        data.view.setUint16(index + 4, 5120);
        data.array.set(file.header.array, index + 6);
        data.view.setUint16(index + 32, file.comment.length, true);
        if (file.directory) {
          data.view.setUint8(index + 38, 16);
        }
        data.view.setUint32(index + 42, file.offset, true);
        data.array.set(file.nameBuf, index + 46);
        data.array.set(file.comment, index + 46 + file.nameBuf.length);
        index += 46 + file.nameBuf.length + file.comment.length;
      }
      data.view.setUint32(index, 1347093766);
      data.view.setUint16(index + 8, filenames.length, true);
      data.view.setUint16(index + 10, filenames.length, true);
      data.view.setUint32(index + 12, length, true);
      data.view.setUint32(index + 16, offset, true);
      ctrl.enqueue(data.array);
      ctrl.close();
    }
    function processNextChunk() {
      if (!activeZipObject) return;
      if (activeZipObject.directory)
        return activeZipObject.writeFooter(activeZipObject.writeHeader());
      if (activeZipObject.reader) return pump(activeZipObject);
      if (activeZipObject.fileLike.stream) {
        activeZipObject.crc = new Crc32();
        activeZipObject.reader = activeZipObject.fileLike.stream().getReader();
        activeZipObject.writeHeader();
      } else next();
    }
    return new ReadableStream({
      start: (c) => {
        ctrl = c;
        if (underlyingSource.start) Promise.resolve(underlyingSource.start(zipWriter));
      },
      pull() {
        return processNextChunk() || underlyingSource.pull && Promise.resolve(underlyingSource.pull(zipWriter));
      }
    });
  }
  function isFSASupported() {
    return "showSaveFilePicker" in window;
  }
  async function getDownloadStream(filename, useNativePicker = true) {
    if (isFSASupported() && useNativePicker) {
      try {
        logger.info(`Using File System Access API for ${filename}`);
        const fileHandle = await window.showSaveFilePicker({
          suggestedName: filename,
          types: [
            {
              description: "ZIP Archive",
              accept: { "application/zip": [".zip"] }
            }
          ]
        });
        const writable = await fileHandle.createWritable();
        logger.info("FSA writable stream created successfully");
        return writable;
      } catch (error) {
        if (error.name === "AbortError") {
          logger.info("User cancelled file picker");
          throw new Error("Download cancelled");
        }
        logger.warn(`FSA failed, falling back to StreamSaver: ${error.message}`);
      }
    }
    logger.warn("FSA not available, will use blob fallback");
    throw new Error("FSA_NOT_AVAILABLE");
  }
  async function streamToFile(readableStream, filename, useNativePicker = true, onProgress) {
    try {
      const writableStream = await getDownloadStream(filename, useNativePicker);
      if (onProgress) ;
      else {
        await readableStream.pipeTo(writableStream);
      }
      logger.info(`Streaming download completed via FSA: ${filename}`);
    } catch (error) {
      if (error.message === "FSA_NOT_AVAILABLE" || error.name === "AbortError") {
        if (error.name === "AbortError") {
          throw error;
        }
        logger.info(`Fallback to blob download for: ${filename}`);
        await streamToBlobDownload(readableStream, filename, onProgress);
      } else {
        throw error;
      }
    }
  }
  async function streamToBlobDownload(readableStream, filename, onProgress) {
    const chunks = [];
    let bytesWritten = 0;
    const reader = readableStream.getReader();
    try {
      while (true) {
        const { done, value } = await reader.read();
        if (done) break;
        chunks.push(value);
        bytesWritten += value.byteLength || value.length || 0;
        if (onProgress) ;
      }
    } finally {
      reader.releaseLock();
    }
    const blob = new Blob(chunks);
    fileSaverEs.saveAs(blob, filename);
    logger.info(`Blob download completed: ${filename} (${bytesWritten} bytes)`);
  }
  async function zipStreamDownload(zipFilename, files, onProgress, rateLimit = 1e3, concurrency = 1, abortSignal) {
    let current = 0;
    const total = files.length;
    if (concurrency <= 1) {
      const fileIterator = files.values();
      const readableZipStream2 = createWriter({
        async pull(ctrl) {
          if (abortSignal?.aborted) {
            logger.info(`Download aborted. Zipping ${current} files that were downloaded.`);
            ctrl.close();
            return;
          }
          const fileInfo = fileIterator.next();
          if (fileInfo.done) {
            ctrl.close();
          } else {
            const { filename, url } = fileInfo.value;
            const start = Date.now();
            logger.debug(`Start downloading ${filename} from ${url}`);
            try {
              const res = await fetch(url);
              if (abortSignal?.aborted) {
                logger.info(`Download aborted. Zipping ${current} files that were downloaded.`);
                ctrl.close();
                return;
              }
              ctrl.enqueue({
                name: filename,
                stream: () => res.body
              });
              onProgress?.(++current, total, fileInfo.value);
              logger.debug(`Finished downloading ${filename} in ${Date.now() - start}ms`);
              await new Promise((resolve) => setTimeout(resolve, rateLimit));
            } catch (error) {
              if (abortSignal?.aborted) {
                logger.info(`Download aborted. Zipping ${current} files that were downloaded.`);
                ctrl.close();
                return;
              }
              throw error;
            }
          }
        }
      });
      logger.info(`Exporting to ZIP file: ${zipFilename}`);
      logger.info(`Using ${isFSASupported() ? "File System Access API" : "StreamSaver.js"} for streaming`);
      await streamToFile(readableZipStream2, zipFilename);
      return;
    }
    let completed = 0;
    let fileIndex = 0;
    const queue = [];
    let resolveNext = null;
    let isZipClosed = false;
    const downloadWorker = async () => {
      while (fileIndex < files.length) {
        if (abortSignal?.aborted) {
          logger.info("Download aborted, stopping worker");
          fileIndex = files.length;
          break;
        }
        const currentFileIndex = fileIndex++;
        const file = files[currentFileIndex];
        if (!file) continue;
        const start = Date.now();
        logger.debug(`Start downloading ${file.filename} from ${file.url}`);
        try {
          const fetchPromise = fetch(file.url);
          const abortCheckInterval = 100;
          const res = await Promise.race([
            fetchPromise,
            new Promise((_, reject) => {
              const checkInterval = setInterval(() => {
                if (abortSignal?.aborted) {
                  clearInterval(checkInterval);
                  reject(new Error("Download aborted"));
                }
              }, abortCheckInterval);
              fetchPromise.finally(() => clearInterval(checkInterval));
            })
          ]);
          if (abortSignal?.aborted) {
            logger.info("Download aborted after fetching file, stopping");
            fileIndex = files.length;
            break;
          }
          const body = res.body;
          if (!body) {
            logger.error(`No response body for ${file.filename}`);
            continue;
          }
          queue.push({
            name: file.filename,
            stream: () => body,
            original: file
          });
          logger.debug(`Finished downloading ${file.filename} in ${Date.now() - start}ms`);
          if (resolveNext) {
            const resolve = resolveNext;
            resolveNext = null;
            resolve();
          }
        } catch (error) {
          if (abortSignal?.aborted) {
            logger.info("Download aborted during fetch, stopping");
            fileIndex = files.length;
            break;
          }
          logger.error(`Failed to download ${file.filename}:`, error);
        }
      }
      if (resolveNext && !isZipClosed) {
        const resolve = resolveNext;
        resolveNext = null;
        resolve();
      }
    };
    const workers = Array.from({ length: Math.min(concurrency, files.length) }, () => downloadWorker());
    const readableZipStream = createWriter({
      async pull(ctrl) {
        if (abortSignal?.aborted && queue.length === 0) {
          isZipClosed = true;
          logger.info(`Download aborted. Zipping ${completed} files that were downloaded.`);
          ctrl.close();
          return;
        }
        while (queue.length === 0 && fileIndex < files.length && !abortSignal?.aborted) {
          await new Promise((resolve) => {
            resolveNext = resolve;
          });
          if (abortSignal?.aborted) {
            break;
          }
        }
        if (queue.length > 0) {
          const fileData = queue.shift();
          if (fileData) {
            ctrl.enqueue({
              name: fileData.name,
              stream: fileData.stream
            });
            onProgress?.(++completed, total, fileData.original);
          }
        } else if (fileIndex >= files.length || abortSignal?.aborted) {
          isZipClosed = true;
          if (abortSignal?.aborted) {
            logger.info(`Download aborted. Zipping ${completed} files that were downloaded.`);
          }
          ctrl.close();
        }
      }
    });
    logger.info(`Exporting to ZIP file: ${zipFilename}`);
    logger.info(`Using ${isFSASupported() ? "File System Access API" : "StreamSaver.js"} for streaming`);
    logger.info(`Download concurrency: ${concurrency}`);
    await Promise.all([
      streamToFile(readableZipStream, zipFilename),
      ...workers
    ]);
  }
  function getGifShotOptions() {
    return {
      sampleInterval: 10,
      numWorkers: 2,
      numFrames: 30,
      interval: 0.1,
      frameDuration: 0.1,
      crossOrigin: "anonymous"
    };
  }
  function getDefaultExportFromCjs(x) {
    return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
  }
  var gifshot$1 = { exports: {} };
  var hasRequiredGifshot;
  function requireGifshot() {
    if (hasRequiredGifshot) return gifshot$1.exports;
    hasRequiredGifshot = 1;
    (function(module, exports) {
      (function(window2, document2, navigator, undefined$1) {
        var utils = {
          URL: window2.URL || window2.webkitURL || window2.mozURL || window2.msURL,
          getUserMedia: (function() {
            var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
            return getUserMedia ? getUserMedia.bind(navigator) : getUserMedia;
          })(),
          requestAnimFrame: window2.requestAnimationFrame || window2.webkitRequestAnimationFrame || window2.mozRequestAnimationFrame || window2.oRequestAnimationFrame || window2.msRequestAnimationFrame,
          requestTimeout: function requestTimeout(callback, delay) {
            callback = callback || utils.noop;
            delay = delay || 0;
            if (!utils.requestAnimFrame) {
              return setTimeout(callback, delay);
            }
            var start = ( new Date()).getTime();
            var handle = new Object();
            var requestAnimFrame = utils.requestAnimFrame;
            var loop = function loop2() {
              var current = ( new Date()).getTime();
              var delta = current - start;
              delta >= delay ? callback.call() : handle.value = requestAnimFrame(loop2);
            };
            handle.value = requestAnimFrame(loop);
            return handle;
          },
          Blob: window2.Blob || window2.BlobBuilder || window2.WebKitBlobBuilder || window2.MozBlobBuilder || window2.MSBlobBuilder,
          btoa: (function() {
            var btoa = window2.btoa || function(input) {
              var output = "";
              var i = 0;
              var l = input.length;
              var key = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
              var chr1 = void 0;
              var chr2 = void 0;
              var chr3 = void 0;
              var enc1 = void 0;
              var enc2 = void 0;
              var enc3 = void 0;
              var enc4 = void 0;
              while (i < l) {
                chr1 = input.charCodeAt(i++);
                chr2 = input.charCodeAt(i++);
                chr3 = input.charCodeAt(i++);
                enc1 = chr1 >> 2;
                enc2 = (chr1 & 3) << 4 | chr2 >> 4;
                enc3 = (chr2 & 15) << 2 | chr3 >> 6;
                enc4 = chr3 & 63;
                if (isNaN(chr2)) {
                  enc3 = enc4 = 64;
                } else if (isNaN(chr3)) {
                  enc4 = 64;
                }
                output = output + key.charAt(enc1) + key.charAt(enc2) + key.charAt(enc3) + key.charAt(enc4);
              }
              return output;
            };
            return btoa ? btoa.bind(window2) : utils.noop;
          })(),
          isObject: function isObject(obj) {
            return obj && Object.prototype.toString.call(obj) === "[object Object]";
          },
          isEmptyObject: function isEmptyObject(obj) {
            return utils.isObject(obj) && !Object.keys(obj).length;
          },
          isArray: function isArray(arr) {
            return arr && Array.isArray(arr);
          },
          isFunction: function isFunction(func) {
            return func && typeof func === "function";
          },
          isElement: function isElement(elem) {
            return elem && elem.nodeType === 1;
          },
          isString: function isString(value) {
            return typeof value === "string" || Object.prototype.toString.call(value) === "[object String]";
          },
          isSupported: {
            canvas: function canvas() {
              var el = document2.createElement("canvas");
              return el && el.getContext && el.getContext("2d");
            },
            webworkers: function webworkers() {
              return window2.Worker;
            },
            blob: function blob() {
              return utils.Blob;
            },
            Uint8Array: function Uint8Array2() {
              return window2.Uint8Array;
            },
            Uint32Array: function Uint32Array2() {
              return window2.Uint32Array;
            },
            videoCodecs: (function() {
              var testEl = document2.createElement("video");
              var supportObj = {
                "mp4": false,
                "h264": false,
                "ogv": false,
                "ogg": false,
                "webm": false
              };
              try {
                if (testEl && testEl.canPlayType) {
                  supportObj.mp4 = testEl.canPlayType('video/mp4; codecs="mp4v.20.8"') !== "";
                  supportObj.h264 = (testEl.canPlayType('video/mp4; codecs="avc1.42E01E"') || testEl.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"')) !== "";
                  supportObj.ogv = testEl.canPlayType('video/ogg; codecs="theora"') !== "";
                  supportObj.ogg = testEl.canPlayType('video/ogg; codecs="theora"') !== "";
                  supportObj.webm = testEl.canPlayType('video/webm; codecs="vp8, vorbis"') !== -1;
                }
              } catch (e) {
              }
              return supportObj;
            })()
          },
          noop: function noop2() {
          },
          each: function each(collection, callback) {
            var x = void 0;
            var len = void 0;
            if (utils.isArray(collection)) {
              x = -1;
              len = collection.length;
              while (++x < len) {
                if (callback(x, collection[x]) === false) {
                  break;
                }
              }
            } else if (utils.isObject(collection)) {
              for (x in collection) {
                if (collection.hasOwnProperty(x)) {
                  if (callback(x, collection[x]) === false) {
                    break;
                  }
                }
              }
            }
          },
          mergeOptions: function mergeOptions(defaultOptions2, userOptions) {
            if (!utils.isObject(defaultOptions2) || !utils.isObject(userOptions) || !Object.keys) {
              return;
            }
            var newObj = {};
            utils.each(defaultOptions2, function(key, val) {
              newObj[key] = defaultOptions2[key];
            });
            utils.each(userOptions, function(key, val) {
              var currentUserOption = userOptions[key];
              if (!utils.isObject(currentUserOption)) {
                newObj[key] = currentUserOption;
              } else {
                if (!defaultOptions2[key]) {
                  newObj[key] = currentUserOption;
                } else {
                  newObj[key] = utils.mergeOptions(defaultOptions2[key], currentUserOption);
                }
              }
            });
            return newObj;
          },
          setCSSAttr: function setCSSAttr(elem, attr, val) {
            if (!utils.isElement(elem)) {
              return;
            }
            if (utils.isString(attr) && utils.isString(val)) {
              elem.style[attr] = val;
            } else if (utils.isObject(attr)) {
              utils.each(attr, function(key, val2) {
                elem.style[key] = val2;
              });
            }
          },
          removeElement: function removeElement(node) {
            if (!utils.isElement(node)) {
              return;
            }
            if (node.parentNode) {
              node.parentNode.removeChild(node);
            }
          },
          createWebWorker: function createWebWorker(content) {
            if (!utils.isString(content)) {
              return {};
            }
            try {
              var blob = new utils.Blob([content], {
                "type": "text/javascript"
              });
              var objectUrl = utils.URL.createObjectURL(blob);
              var worker = new Worker(objectUrl);
              return {
                "objectUrl": objectUrl,
                "worker": worker
              };
            } catch (e) {
              return "" + e;
            }
          },
          getExtension: function getExtension(src) {
            return src.substr(src.lastIndexOf(".") + 1, src.length);
          },
          getFontSize: function getFontSize() {
            var options2 = arguments.length > 0 && arguments[0] !== undefined$1 ? arguments[0] : {};
            if (!document2.body || options2.resizeFont === false) {
              return options2.fontSize;
            }
            var text = options2.text;
            var containerWidth = options2.gifWidth;
            var fontSize = parseInt(options2.fontSize, 10);
            var minFontSize = parseInt(options2.minFontSize, 10);
            var div = document2.createElement("div");
            var span = document2.createElement("span");
            div.setAttribute("width", containerWidth);
            div.appendChild(span);
            span.innerHTML = text;
            span.style.fontSize = fontSize + "px";
            span.style.textIndent = "-9999px";
            span.style.visibility = "hidden";
            document2.body.appendChild(span);
            while (span.offsetWidth > containerWidth && fontSize >= minFontSize) {
              span.style.fontSize = --fontSize + "px";
            }
            document2.body.removeChild(span);
            return fontSize + "px";
          },
          webWorkerError: false
        };
        var utils$2 = Object.freeze({
          default: utils
        });
        var error = {
          validate: function validate(skipObj) {
            skipObj = utils.isObject(skipObj) ? skipObj : {};
            var errorObj = {};
            utils.each(error.validators, function(indece, currentValidator) {
              var errorCode = currentValidator.errorCode;
              if (!skipObj[errorCode] && !currentValidator.condition) {
                errorObj = currentValidator;
                errorObj.error = true;
                return false;
              }
            });
            delete errorObj.condition;
            return errorObj;
          },
          isValid: function isValid(skipObj) {
            var errorObj = error.validate(skipObj);
            var isValid2 = errorObj.error !== true ? true : false;
            return isValid2;
          },
          validators: [{
            condition: utils.isFunction(utils.getUserMedia),
            errorCode: "getUserMedia",
            errorMsg: "The getUserMedia API is not supported in your browser"
          }, {
            condition: utils.isSupported.canvas(),
            errorCode: "canvas",
            errorMsg: "Canvas elements are not supported in your browser"
          }, {
            condition: utils.isSupported.webworkers(),
            errorCode: "webworkers",
            errorMsg: "The Web Workers API is not supported in your browser"
          }, {
            condition: utils.isFunction(utils.URL),
            errorCode: "window.URL",
            errorMsg: "The window.URL API is not supported in your browser"
          }, {
            condition: utils.isSupported.blob(),
            errorCode: "window.Blob",
            errorMsg: "The window.Blob File API is not supported in your browser"
          }, {
            condition: utils.isSupported.Uint8Array(),
            errorCode: "window.Uint8Array",
            errorMsg: "The window.Uint8Array function constructor is not supported in your browser"
          }, {
            condition: utils.isSupported.Uint32Array(),
            errorCode: "window.Uint32Array",
            errorMsg: "The window.Uint32Array function constructor is not supported in your browser"
          }],
          messages: {
            videoCodecs: {
              errorCode: "videocodec",
              errorMsg: "The video codec you are trying to use is not supported in your browser"
            }
          }
        };
        var error$2 = Object.freeze({
          default: error
        });
        var noop = function noop2() {
        };
        var defaultOptions = {
          sampleInterval: 10,
          numWorkers: 2,
          filter: "",
          gifWidth: 200,
          gifHeight: 200,
          interval: 0.1,
          numFrames: 10,
          frameDuration: 1,
          keepCameraOn: false,
          images: [],
          video: null,
          webcamVideoElement: null,
          cameraStream: null,
          text: "",
          fontWeight: "normal",
          fontSize: "16px",
          minFontSize: "10px",
          resizeFont: false,
          fontFamily: "sans-serif",
          fontColor: "#ffffff",
          textAlign: "center",
          textBaseline: "bottom",
          textXCoordinate: null,
          textYCoordinate: null,
          progressCallback: noop,
          completeCallback: noop,
          saveRenderingContexts: false,
          savedRenderingContexts: [],
          crossOrigin: "Anonymous"
        };
        var defaultOptions$2 = Object.freeze({
          default: defaultOptions
        });
        function isSupported() {
          return error.isValid();
        }
        function isWebCamGIFSupported() {
          return error.isValid();
        }
        function isSupported$1() {
          var options2 = {
            getUserMedia: true
          };
          return error.isValid(options2);
        }
        function isExistingVideoGIFSupported(codecs) {
          var hasValidCodec = false;
          if (utils.isArray(codecs) && codecs.length) {
            utils.each(codecs, function(indece, currentCodec) {
              if (utils.isSupported.videoCodecs[currentCodec]) {
                hasValidCodec = true;
              }
            });
            if (!hasValidCodec) {
              return false;
            }
          } else if (utils.isString(codecs) && codecs.length) {
            if (!utils.isSupported.videoCodecs[codecs]) {
              return false;
            }
          }
          return error.isValid({
            "getUserMedia": true
          });
        }
        function NeuQuant() {
          var netsize = 256;
          var prime1 = 499;
          var prime2 = 491;
          var prime3 = 487;
          var prime4 = 503;
          var minpicturebytes = 3 * prime4;
          var maxnetpos = netsize - 1;
          var netbiasshift = 4;
          var ncycles = 100;
          var intbiasshift = 16;
          var intbias = 1 << intbiasshift;
          var gammashift = 10;
          var betashift = 10;
          var beta = intbias >> betashift;
          var betagamma = intbias << gammashift - betashift;
          var initrad = netsize >> 3;
          var radiusbiasshift = 6;
          var radiusbias = 1 << radiusbiasshift;
          var initradius = initrad * radiusbias;
          var radiusdec = 30;
          var alphabiasshift = 10;
          var initalpha = 1 << alphabiasshift;
          var alphadec;
          var radbiasshift = 8;
          var radbias = 1 << radbiasshift;
          var alpharadbshift = alphabiasshift + radbiasshift;
          var alpharadbias = 1 << alpharadbshift;
          var thepicture;
          var lengthcount;
          var samplefac;
          var network;
          var netindex = [];
          var bias = [];
          var freq = [];
          var radpower = [];
          function NeuQuantConstructor(thepic, len, sample) {
            var i;
            var p;
            thepicture = thepic;
            lengthcount = len;
            samplefac = sample;
            network = new Array(netsize);
            for (i = 0; i < netsize; i++) {
              network[i] = new Array(4);
              p = network[i];
              p[0] = p[1] = p[2] = (i << netbiasshift + 8) / netsize | 0;
              freq[i] = intbias / netsize | 0;
              bias[i] = 0;
            }
          }
          function colorMap() {
            var map2 = [];
            var index = new Array(netsize);
            for (var i = 0; i < netsize; i++) {
              index[network[i][3]] = i;
            }
            var k = 0;
            for (var l = 0; l < netsize; l++) {
              var j2 = index[l];
              map2[k++] = network[j2][0];
              map2[k++] = network[j2][1];
              map2[k++] = network[j2][2];
            }
            return map2;
          }
          function inxbuild() {
            var i;
            var j2;
            var smallpos;
            var smallval;
            var p;
            var q2;
            var previouscol;
            var startpos;
            previouscol = 0;
            startpos = 0;
            for (i = 0; i < netsize; i++) {
              p = network[i];
              smallpos = i;
              smallval = p[1];
              for (j2 = i + 1; j2 < netsize; j2++) {
                q2 = network[j2];
                if (q2[1] < smallval) {
                  smallpos = j2;
                  smallval = q2[1];
                }
              }
              q2 = network[smallpos];
              if (i != smallpos) {
                j2 = q2[0];
                q2[0] = p[0];
                p[0] = j2;
                j2 = q2[1];
                q2[1] = p[1];
                p[1] = j2;
                j2 = q2[2];
                q2[2] = p[2];
                p[2] = j2;
                j2 = q2[3];
                q2[3] = p[3];
                p[3] = j2;
              }
              if (smallval != previouscol) {
                netindex[previouscol] = startpos + i >> 1;
                for (j2 = previouscol + 1; j2 < smallval; j2++) {
                  netindex[j2] = i;
                }
                previouscol = smallval;
                startpos = i;
              }
            }
            netindex[previouscol] = startpos + maxnetpos >> 1;
            for (j2 = previouscol + 1; j2 < 256; j2++) {
              netindex[j2] = maxnetpos;
            }
          }
          function learn() {
            var i;
            var j2;
            var b;
            var g2;
            var r;
            var radius;
            var rad;
            var alpha;
            var step;
            var delta;
            var samplepixels;
            var p;
            var pix;
            var lim;
            if (lengthcount < minpicturebytes) {
              samplefac = 1;
            }
            alphadec = 30 + (samplefac - 1) / 3;
            p = thepicture;
            pix = 0;
            lim = lengthcount;
            samplepixels = lengthcount / (3 * samplefac);
            delta = samplepixels / ncycles | 0;
            alpha = initalpha;
            radius = initradius;
            rad = radius >> radiusbiasshift;
            if (rad <= 1) {
              rad = 0;
            }
            for (i = 0; i < rad; i++) {
              radpower[i] = alpha * ((rad * rad - i * i) * radbias / (rad * rad));
            }
            if (lengthcount < minpicturebytes) {
              step = 3;
            } else if (lengthcount % prime1 !== 0) {
              step = 3 * prime1;
            } else {
              if (lengthcount % prime2 !== 0) {
                step = 3 * prime2;
              } else {
                if (lengthcount % prime3 !== 0) {
                  step = 3 * prime3;
                } else {
                  step = 3 * prime4;
                }
              }
            }
            i = 0;
            while (i < samplepixels) {
              b = (p[pix + 0] & 255) << netbiasshift;
              g2 = (p[pix + 1] & 255) << netbiasshift;
              r = (p[pix + 2] & 255) << netbiasshift;
              j2 = contest(b, g2, r);
              altersingle(alpha, j2, b, g2, r);
              if (rad !== 0) {
                alterneigh(rad, j2, b, g2, r);
              }
              pix += step;
              if (pix >= lim) {
                pix -= lengthcount;
              }
              i++;
              if (delta === 0) {
                delta = 1;
              }
              if (i % delta === 0) {
                alpha -= alpha / alphadec;
                radius -= radius / radiusdec;
                rad = radius >> radiusbiasshift;
                if (rad <= 1) {
                  rad = 0;
                }
                for (j2 = 0; j2 < rad; j2++) {
                  radpower[j2] = alpha * ((rad * rad - j2 * j2) * radbias / (rad * rad));
                }
              }
            }
          }
          function map(b, g2, r) {
            var i;
            var j2;
            var dist;
            var a;
            var bestd;
            var p;
            var best;
            bestd = 1e3;
            best = -1;
            i = netindex[g2];
            j2 = i - 1;
            while (i < netsize || j2 >= 0) {
              if (i < netsize) {
                p = network[i];
                dist = p[1] - g2;
                if (dist >= bestd) {
                  i = netsize;
                } else {
                  i++;
                  if (dist < 0) {
                    dist = -dist;
                  }
                  a = p[0] - b;
                  if (a < 0) {
                    a = -a;
                  }
                  dist += a;
                  if (dist < bestd) {
                    a = p[2] - r;
                    if (a < 0) {
                      a = -a;
                    }
                    dist += a;
                    if (dist < bestd) {
                      bestd = dist;
                      best = p[3];
                    }
                  }
                }
              }
              if (j2 >= 0) {
                p = network[j2];
                dist = g2 - p[1];
                if (dist >= bestd) {
                  j2 = -1;
                } else {
                  j2--;
                  if (dist < 0) {
                    dist = -dist;
                  }
                  a = p[0] - b;
                  if (a < 0) {
                    a = -a;
                  }
                  dist += a;
                  if (dist < bestd) {
                    a = p[2] - r;
                    if (a < 0) {
                      a = -a;
                    }
                    dist += a;
                    if (dist < bestd) {
                      bestd = dist;
                      best = p[3];
                    }
                  }
                }
              }
            }
            return best;
          }
          function process() {
            learn();
            unbiasnet();
            inxbuild();
            return colorMap();
          }
          function unbiasnet() {
            var i;
            for (i = 0; i < netsize; i++) {
              network[i][0] >>= netbiasshift;
              network[i][1] >>= netbiasshift;
              network[i][2] >>= netbiasshift;
              network[i][3] = i;
            }
          }
          function alterneigh(rad, i, b, g2, r) {
            var j2;
            var k;
            var lo;
            var hi2;
            var a;
            var m;
            var p;
            lo = i - rad;
            if (lo < -1) {
              lo = -1;
            }
            hi2 = i + rad;
            if (hi2 > netsize) {
              hi2 = netsize;
            }
            j2 = i + 1;
            k = i - 1;
            m = 1;
            while (j2 < hi2 || k > lo) {
              a = radpower[m++];
              if (j2 < hi2) {
                p = network[j2++];
                try {
                  p[0] -= a * (p[0] - b) / alpharadbias | 0;
                  p[1] -= a * (p[1] - g2) / alpharadbias | 0;
                  p[2] -= a * (p[2] - r) / alpharadbias | 0;
                } catch (e) {
                }
              }
              if (k > lo) {
                p = network[k--];
                try {
                  p[0] -= a * (p[0] - b) / alpharadbias | 0;
                  p[1] -= a * (p[1] - g2) / alpharadbias | 0;
                  p[2] -= a * (p[2] - r) / alpharadbias | 0;
                } catch (e) {
                }
              }
            }
          }
          function altersingle(alpha, i, b, g2, r) {
            var n = network[i];
            var alphaMult = alpha / initalpha;
            n[0] -= alphaMult * (n[0] - b) | 0;
            n[1] -= alphaMult * (n[1] - g2) | 0;
            n[2] -= alphaMult * (n[2] - r) | 0;
          }
          function contest(b, g2, r) {
            var i;
            var dist;
            var a;
            var biasdist;
            var betafreq;
            var bestpos;
            var bestbiaspos;
            var bestd;
            var bestbiasd;
            var n;
            bestd = 2147483647;
            bestbiasd = bestd;
            bestpos = -1;
            bestbiaspos = bestpos;
            for (i = 0; i < netsize; i++) {
              n = network[i];
              dist = n[0] - b;
              if (dist < 0) {
                dist = -dist;
              }
              a = n[1] - g2;
              if (a < 0) {
                a = -a;
              }
              dist += a;
              a = n[2] - r;
              if (a < 0) {
                a = -a;
              }
              dist += a;
              if (dist < bestd) {
                bestd = dist;
                bestpos = i;
              }
              biasdist = dist - (bias[i] >> intbiasshift - netbiasshift);
              if (biasdist < bestbiasd) {
                bestbiasd = biasdist;
                bestbiaspos = i;
              }
              betafreq = freq[i] >> betashift;
              freq[i] -= betafreq;
              bias[i] += betafreq << gammashift;
            }
            freq[bestpos] += beta;
            bias[bestpos] -= betagamma;
            return bestbiaspos;
          }
          NeuQuantConstructor.apply(this, arguments);
          var exports2 = {};
          exports2.map = map;
          exports2.process = process;
          return exports2;
        }
        function workerCode() {
          var self = this;
          try {
            self.onmessage = function(ev) {
              var data = ev.data || {};
              var response;
              if (data.gifshot) {
                response = workerMethods.run(data);
                postMessage(response);
              }
            };
          } catch (e) {
          }
          var workerMethods = {
            dataToRGB: function dataToRGB(data, width, height) {
              var length = width * height * 4;
              var i = 0;
              var rgb = [];
              while (i < length) {
                rgb.push(data[i++]);
                rgb.push(data[i++]);
                rgb.push(data[i++]);
                i++;
              }
              return rgb;
            },
            componentizedPaletteToArray: function componentizedPaletteToArray(paletteRGB) {
              paletteRGB = paletteRGB || [];
              var paletteArray = [];
              for (var i = 0; i < paletteRGB.length; i += 3) {
                var r = paletteRGB[i];
                var g2 = paletteRGB[i + 1];
                var b = paletteRGB[i + 2];
                paletteArray.push(r << 16 | g2 << 8 | b);
              }
              return paletteArray;
            },
"processFrameWithQuantizer": function processFrameWithQuantizer(imageData, width, height, sampleInterval) {
              var rgbComponents = this.dataToRGB(imageData, width, height);
              var nq = new NeuQuant(rgbComponents, rgbComponents.length, sampleInterval);
              var paletteRGB = nq.process();
              var paletteArray = new Uint32Array(this.componentizedPaletteToArray(paletteRGB));
              var numberPixels = width * height;
              var indexedPixels = new Uint8Array(numberPixels);
              var k = 0;
              for (var i = 0; i < numberPixels; i++) {
                var r = rgbComponents[k++];
                var g2 = rgbComponents[k++];
                var b = rgbComponents[k++];
                indexedPixels[i] = nq.map(r, g2, b);
              }
              return {
                pixels: indexedPixels,
                palette: paletteArray
              };
            },
            "run": function run(frame) {
              frame = frame || {};
              var _frame = frame, height = _frame.height;
              _frame.palette;
              var sampleInterval = _frame.sampleInterval, width = _frame.width;
              var imageData = frame.data;
              return this.processFrameWithQuantizer(imageData, width, height, sampleInterval);
            }
          };
          return workerMethods;
        }
        function gifWriter(buf, width, height, gopts) {
          var p = 0;
          gopts = gopts === undefined$1 ? {} : gopts;
          var loop_count = gopts.loop === undefined$1 ? null : gopts.loop;
          var global_palette = gopts.palette === undefined$1 ? null : gopts.palette;
          if (width <= 0 || height <= 0 || width > 65535 || height > 65535) throw "Width/Height invalid.";
          function check_palette_and_num_colors(palette) {
            var num_colors = palette.length;
            if (num_colors < 2 || num_colors > 256 || num_colors & num_colors - 1) throw "Invalid code/color length, must be power of 2 and 2 .. 256.";
            return num_colors;
          }
          buf[p++] = 71;
          buf[p++] = 73;
          buf[p++] = 70;
          buf[p++] = 56;
          buf[p++] = 57;
          buf[p++] = 97;
          var gp_num_colors_pow2 = 0;
          var background = 0;
          buf[p++] = width & 255;
          buf[p++] = width >> 8 & 255;
          buf[p++] = height & 255;
          buf[p++] = height >> 8 & 255;
          buf[p++] = (global_palette !== null ? 128 : 0) |
gp_num_colors_pow2;
          buf[p++] = background;
          buf[p++] = 0;
          if (loop_count !== null) {
            if (loop_count < 0 || loop_count > 65535) throw "Loop count invalid.";
            buf[p++] = 33;
            buf[p++] = 255;
            buf[p++] = 11;
            buf[p++] = 78;
            buf[p++] = 69;
            buf[p++] = 84;
            buf[p++] = 83;
            buf[p++] = 67;
            buf[p++] = 65;
            buf[p++] = 80;
            buf[p++] = 69;
            buf[p++] = 50;
            buf[p++] = 46;
            buf[p++] = 48;
            buf[p++] = 3;
            buf[p++] = 1;
            buf[p++] = loop_count & 255;
            buf[p++] = loop_count >> 8 & 255;
            buf[p++] = 0;
          }
          var ended = false;
          this.addFrame = function(x, y, w, h2, indexed_pixels, opts) {
            if (ended === true) {
              --p;
              ended = false;
            }
            opts = opts === undefined$1 ? {} : opts;
            if (x < 0 || y < 0 || x > 65535 || y > 65535) throw "x/y invalid.";
            if (w <= 0 || h2 <= 0 || w > 65535 || h2 > 65535) throw "Width/Height invalid.";
            if (indexed_pixels.length < w * h2) throw "Not enough pixels for the frame size.";
            var using_local_palette = true;
            var palette = opts.palette;
            if (palette === undefined$1 || palette === null) {
              using_local_palette = false;
              palette = global_palette;
            }
            if (palette === undefined$1 || palette === null) throw "Must supply either a local or global palette.";
            var num_colors = check_palette_and_num_colors(palette);
            var min_code_size = 0;
            while (num_colors >>= 1) {
              ++min_code_size;
            }
            num_colors = 1 << min_code_size;
            var delay = opts.delay === undefined$1 ? 0 : opts.delay;
            var disposal = opts.disposal === undefined$1 ? 0 : opts.disposal;
            if (disposal < 0 || disposal > 3)
              throw "Disposal out of range.";
            var use_transparency = false;
            var transparent_index = 0;
            if (opts.transparent !== undefined$1 && opts.transparent !== null) {
              use_transparency = true;
              transparent_index = opts.transparent;
              if (transparent_index < 0 || transparent_index >= num_colors) throw "Transparent color index.";
            }
            if (disposal !== 0 || use_transparency || delay !== 0) {
              buf[p++] = 33;
              buf[p++] = 249;
              buf[p++] = 4;
              buf[p++] = disposal << 2 | (use_transparency === true ? 1 : 0);
              buf[p++] = delay & 255;
              buf[p++] = delay >> 8 & 255;
              buf[p++] = transparent_index;
              buf[p++] = 0;
            }
            buf[p++] = 44;
            buf[p++] = x & 255;
            buf[p++] = x >> 8 & 255;
            buf[p++] = y & 255;
            buf[p++] = y >> 8 & 255;
            buf[p++] = w & 255;
            buf[p++] = w >> 8 & 255;
            buf[p++] = h2 & 255;
            buf[p++] = h2 >> 8 & 255;
            buf[p++] = using_local_palette === true ? 128 | min_code_size - 1 : 0;
            if (using_local_palette === true) {
              for (var i = 0, il = palette.length; i < il; ++i) {
                var rgb = palette[i];
                buf[p++] = rgb >> 16 & 255;
                buf[p++] = rgb >> 8 & 255;
                buf[p++] = rgb & 255;
              }
            }
            p = GifWriterOutputLZWCodeStream(buf, p, min_code_size < 2 ? 2 : min_code_size, indexed_pixels);
          };
          this.end = function() {
            if (ended === false) {
              buf[p++] = 59;
              ended = true;
            }
            return p;
          };
          function GifWriterOutputLZWCodeStream(buf2, p2, min_code_size, index_stream) {
            buf2[p2++] = min_code_size;
            var cur_subblock = p2++;
            var clear_code = 1 << min_code_size;
            var code_mask = clear_code - 1;
            var eoi_code = clear_code + 1;
            var next_code = eoi_code + 1;
            var cur_code_size = min_code_size + 1;
            var cur_shift = 0;
            var cur = 0;
            function emit_bytes_to_buffer(bit_block_size) {
              while (cur_shift >= bit_block_size) {
                buf2[p2++] = cur & 255;
                cur >>= 8;
                cur_shift -= 8;
                if (p2 === cur_subblock + 256) {
                  buf2[cur_subblock] = 255;
                  cur_subblock = p2++;
                }
              }
            }
            function emit_code(c) {
              cur |= c << cur_shift;
              cur_shift += cur_code_size;
              emit_bytes_to_buffer(8);
            }
            var ib_code = index_stream[0] & code_mask;
            var code_table = {};
            emit_code(clear_code);
            for (var i = 1, il = index_stream.length; i < il; ++i) {
              var k = index_stream[i] & code_mask;
              var cur_key = ib_code << 8 | k;
              var cur_code = code_table[cur_key];
              if (cur_code === undefined$1) {
                cur |= ib_code << cur_shift;
                cur_shift += cur_code_size;
                while (cur_shift >= 8) {
                  buf2[p2++] = cur & 255;
                  cur >>= 8;
                  cur_shift -= 8;
                  if (p2 === cur_subblock + 256) {
                    buf2[cur_subblock] = 255;
                    cur_subblock = p2++;
                  }
                }
                if (next_code === 4096) {
                  emit_code(clear_code);
                  next_code = eoi_code + 1;
                  cur_code_size = min_code_size + 1;
                  code_table = {};
                } else {
                  if (next_code >= 1 << cur_code_size) ++cur_code_size;
                  code_table[cur_key] = next_code++;
                }
                ib_code = k;
              } else {
                ib_code = cur_code;
              }
            }
            emit_code(ib_code);
            emit_code(eoi_code);
            emit_bytes_to_buffer(1);
            if (cur_subblock + 1 === p2) {
              buf2[cur_subblock] = 0;
            } else {
              buf2[cur_subblock] = p2 - cur_subblock - 1;
              buf2[p2++] = 0;
            }
            return p2;
          }
        }
        var noop$2 = function noop2() {
        };
        var AnimatedGIF = function AnimatedGIF2(options2) {
          this.canvas = null;
          this.ctx = null;
          this.repeat = 0;
          this.frames = [];
          this.numRenderedFrames = 0;
          this.onRenderCompleteCallback = noop$2;
          this.onRenderProgressCallback = noop$2;
          this.workers = [];
          this.availableWorkers = [];
          this.generatingGIF = false;
          this.options = options2;
          this.initializeWebWorkers(options2);
        };
        AnimatedGIF.prototype = {
          "workerMethods": workerCode(),
          "initializeWebWorkers": function initializeWebWorkers(options2) {
            var self = this;
            var processFrameWorkerCode = NeuQuant.toString() + "(" + workerCode.toString() + "());";
            var webWorkerObj = void 0;
            var objectUrl = void 0;
            var webWorker = void 0;
            var numWorkers = void 0;
            var x = -1;
            var workerError = "";
            numWorkers = options2.numWorkers;
            while (++x < numWorkers) {
              webWorkerObj = utils.createWebWorker(processFrameWorkerCode);
              if (utils.isObject(webWorkerObj)) {
                objectUrl = webWorkerObj.objectUrl;
                webWorker = webWorkerObj.worker;
                self.workers.push({
                  worker: webWorker,
                  objectUrl
                });
                self.availableWorkers.push(webWorker);
              } else {
                workerError = webWorkerObj;
                utils.webWorkerError = !!webWorkerObj;
              }
            }
            this.workerError = workerError;
            this.canvas = document2.createElement("canvas");
            this.canvas.width = options2.gifWidth;
            this.canvas.height = options2.gifHeight;
            this.ctx = this.canvas.getContext("2d");
            this.frames = [];
          },
getWorker: function getWorker() {
            return this.availableWorkers.pop();
          },
freeWorker: function freeWorker(worker) {
            this.availableWorkers.push(worker);
          },
          byteMap: (function() {
            var byteMap = [];
            for (var i = 0; i < 256; i++) {
              byteMap[i] = String.fromCharCode(i);
            }
            return byteMap;
          })(),
          bufferToString: function bufferToString(buffer) {
            var numberValues = buffer.length;
            var str = "";
            var x = -1;
            while (++x < numberValues) {
              str += this.byteMap[buffer[x]];
            }
            return str;
          },
          onFrameFinished: function onFrameFinished(progressCallback) {
            var self = this;
            var frames = self.frames;
            var options2 = self.options;
            var hasExistingImages = !!(options2.images || []).length;
            var allDone = frames.every(function(frame) {
              return !frame.beingProcessed && frame.done;
            });
            self.numRenderedFrames++;
            if (hasExistingImages) {
              progressCallback(self.numRenderedFrames / frames.length);
            }
            self.onRenderProgressCallback(self.numRenderedFrames * 0.75 / frames.length);
            if (allDone) {
              if (!self.generatingGIF) {
                self.generateGIF(frames, self.onRenderCompleteCallback);
              }
            } else {
              utils.requestTimeout(function() {
                self.processNextFrame();
              }, 1);
            }
          },
          processFrame: function processFrame(position) {
            var AnimatedGifContext = this;
            this.options;
            var _options = this.options, progressCallback = _options.progressCallback, sampleInterval = _options.sampleInterval;
            var frames = this.frames;
            var frame = void 0;
            var worker = void 0;
            var done = function done2() {
              var ev = arguments.length > 0 && arguments[0] !== undefined$1 ? arguments[0] : {};
              var data = ev.data;
              delete frame.data;
              frame.pixels = Array.prototype.slice.call(data.pixels);
              frame.palette = Array.prototype.slice.call(data.palette);
              frame.done = true;
              frame.beingProcessed = false;
              AnimatedGifContext.freeWorker(worker);
              AnimatedGifContext.onFrameFinished(progressCallback);
            };
            frame = frames[position];
            if (frame.beingProcessed || frame.done) {
              this.onFrameFinished();
              return;
            }
            frame.sampleInterval = sampleInterval;
            frame.beingProcessed = true;
            frame.gifshot = true;
            worker = this.getWorker();
            if (worker) {
              worker.onmessage = done;
              worker.postMessage(frame);
            } else {
              done({
                "data": AnimatedGifContext.workerMethods.run(frame)
              });
            }
          },
          startRendering: function startRendering(completeCallback) {
            this.onRenderCompleteCallback = completeCallback;
            for (var i = 0; i < this.options.numWorkers && i < this.frames.length; i++) {
              this.processFrame(i);
            }
          },
          processNextFrame: function processNextFrame() {
            var position = -1;
            for (var i = 0; i < this.frames.length; i++) {
              var frame = this.frames[i];
              if (!frame.done && !frame.beingProcessed) {
                position = i;
                break;
              }
            }
            if (position >= 0) {
              this.processFrame(position);
            }
          },

generateGIF: function generateGIF(frames, callback) {
            var buffer = [];
            var gifOptions = {
              loop: this.repeat
            };
            var options2 = this.options;
            var interval = options2.interval;
            var frameDuration = options2.frameDuration;
            var existingImages2 = options2.images;
            var hasExistingImages = !!existingImages2.length;
            var height = options2.gifHeight;
            var width = options2.gifWidth;
            var gifWriter$$1 = new gifWriter(buffer, width, height, gifOptions);
            var onRenderProgressCallback = this.onRenderProgressCallback;
            var delay = hasExistingImages ? interval * 100 : 0;
            var bufferToString = void 0;
            var gif = void 0;
            this.generatingGIF = true;
            utils.each(frames, function(iterator, frame) {
              var framePalette = frame.palette;
              onRenderProgressCallback(0.75 + 0.25 * frame.position * 1 / frames.length);
              for (var i = 0; i < frameDuration; i++) {
                gifWriter$$1.addFrame(0, 0, width, height, frame.pixels, {
                  palette: framePalette,
                  delay
                });
              }
            });
            gifWriter$$1.end();
            onRenderProgressCallback(1);
            this.frames = [];
            this.generatingGIF = false;
            if (utils.isFunction(callback)) {
              bufferToString = this.bufferToString(buffer);
              gif = "data:image/gif;base64," + utils.btoa(bufferToString);
              callback(gif);
            }
          },
setRepeat: function setRepeat(r) {
            this.repeat = r;
          },
          addFrame: function addFrame(element, gifshotOptions) {
            gifshotOptions = utils.isObject(gifshotOptions) ? gifshotOptions : {};
            var self = this;
            var ctx = self.ctx;
            var options2 = self.options;
            var width = options2.gifWidth;
            var height = options2.gifHeight;
            var fontSize = utils.getFontSize(gifshotOptions);
            var _gifshotOptions = gifshotOptions, filter = _gifshotOptions.filter, fontColor = _gifshotOptions.fontColor, fontFamily = _gifshotOptions.fontFamily, fontWeight = _gifshotOptions.fontWeight;
            _gifshotOptions.gifHeight;
            _gifshotOptions.gifWidth;
            var text = _gifshotOptions.text, textAlign = _gifshotOptions.textAlign, textBaseline = _gifshotOptions.textBaseline;
            var textXCoordinate = gifshotOptions.textXCoordinate ? gifshotOptions.textXCoordinate : textAlign === "left" ? 1 : textAlign === "right" ? width : width / 2;
            var textYCoordinate = gifshotOptions.textYCoordinate ? gifshotOptions.textYCoordinate : textBaseline === "top" ? 1 : textBaseline === "center" ? height / 2 : height;
            var font = fontWeight + " " + fontSize + " " + fontFamily;
            var imageData = void 0;
            try {
              ctx.filter = filter;
              ctx.drawImage(element, 0, 0, width, height);
              if (text) {
                ctx.font = font;
                ctx.fillStyle = fontColor;
                ctx.textAlign = textAlign;
                ctx.textBaseline = textBaseline;
                ctx.fillText(text, textXCoordinate, textYCoordinate);
              }
              imageData = ctx.getImageData(0, 0, width, height);
              self.addFrameImageData(imageData);
            } catch (e) {
              return "" + e;
            }
          },
          addFrameImageData: function addFrameImageData() {
            var imageData = arguments.length > 0 && arguments[0] !== undefined$1 ? arguments[0] : {};
            var frames = this.frames;
            var imageDataArray = imageData.data;
            this.frames.push({
              "data": imageDataArray,
              "width": imageData.width,
              "height": imageData.height,
              "palette": null,
              "dithering": null,
              "done": false,
              "beingProcessed": false,
              "position": frames.length
            });
          },
          onRenderProgress: function onRenderProgress(callback) {
            this.onRenderProgressCallback = callback;
          },
          isRendering: function isRendering() {
            return this.generatingGIF;
          },
          getBase64GIF: function getBase64GIF2(completeCallback) {
            var self = this;
            var onRenderComplete = function onRenderComplete2(gif) {
              self.destroyWorkers();
              utils.requestTimeout(function() {
                completeCallback(gif);
              }, 0);
            };
            self.startRendering(onRenderComplete);
          },
          destroyWorkers: function destroyWorkers() {
            if (this.workerError) {
              return;
            }
            var workers = this.workers;
            utils.each(workers, function(iterator, workerObj) {
              var worker = workerObj.worker;
              var objectUrl = workerObj.objectUrl;
              worker.terminate();
              utils.URL.revokeObjectURL(objectUrl);
            });
          }
        };
        function getBase64GIF(animatedGifInstance, callback) {
          animatedGifInstance.getBase64GIF(function(image) {
            callback({
              error: false,
              errorCode: "",
              errorMsg: "",
              image
            });
          });
        }
        function existingImages() {
          var obj = arguments.length > 0 && arguments[0] !== undefined$1 ? arguments[0] : {};
          var callback = obj.callback, images = obj.images, options2 = obj.options;
          var imagesLength = obj.imagesLength;
          var skipObj = {
            "getUserMedia": true,
            "window.URL": true
          };
          var errorObj = error.validate(skipObj);
          var loadedImages = [];
          var loadedImagesLength = 0;
          var tempImage = void 0;
          var ag = void 0;
          if (errorObj.error) {
            return callback(errorObj);
          }
          ag = new AnimatedGIF(options2);
          utils.each(images, function(index, image) {
            var currentImage = image;
            if (image.src) {
              currentImage = currentImage.src;
            }
            if (utils.isElement(currentImage)) {
              if (options2.crossOrigin) {
                currentImage.crossOrigin = options2.crossOrigin;
              }
              loadedImages[index] = currentImage;
              loadedImagesLength += 1;
              if (loadedImagesLength === imagesLength) {
                addLoadedImagesToGif();
              }
            } else if (utils.isString(currentImage)) {
              tempImage = new Image();
              if (options2.crossOrigin) {
                tempImage.crossOrigin = options2.crossOrigin;
              }
              (function(tempImage2) {
                if (image.text) {
                  tempImage2.text = image.text;
                }
                tempImage2.onerror = function(e) {
                  var obj2 = void 0;
                  --imagesLength;
                  if (imagesLength === 0) {
                    obj2 = {};
                    obj2.error = "None of the requested images was capable of being retrieved";
                    return callback(obj2);
                  }
                };
                tempImage2.onload = function(e) {
                  if (image.text) {
                    loadedImages[index] = {
                      img: tempImage2,
                      text: tempImage2.text
                    };
                  } else {
                    loadedImages[index] = tempImage2;
                  }
                  loadedImagesLength += 1;
                  if (loadedImagesLength === imagesLength) {
                    addLoadedImagesToGif();
                  }
                  utils.removeElement(tempImage2);
                };
                tempImage2.src = currentImage;
              })(tempImage);
              utils.setCSSAttr(tempImage, {
                position: "fixed",
                opacity: "0"
              });
              document2.body.appendChild(tempImage);
            }
          });
          function addLoadedImagesToGif() {
            utils.each(loadedImages, function(index, loadedImage) {
              if (loadedImage) {
                if (loadedImage.text) {
                  ag.addFrame(loadedImage.img, options2, loadedImage.text);
                } else {
                  ag.addFrame(loadedImage, options2);
                }
              }
            });
            getBase64GIF(ag, callback);
          }
        }
        var noop$3 = function noop2() {
        };
        var screenShot = {
          getGIF: function getGIF() {
            var options2 = arguments.length > 0 && arguments[0] !== undefined$1 ? arguments[0] : {};
            var callback = arguments[1];
            callback = utils.isFunction(callback) ? callback : noop$3;
            var canvas = document2.createElement("canvas");
            var context = void 0;
            var existingImages2 = options2.images;
            var hasExistingImages = !!existingImages2.length;
            var cameraStream = options2.cameraStream, crop = options2.crop, filter = options2.filter, fontColor = options2.fontColor, fontFamily = options2.fontFamily, fontWeight = options2.fontWeight, keepCameraOn = options2.keepCameraOn;
            options2.numWorkers;
            var progressCallback = options2.progressCallback, saveRenderingContexts = options2.saveRenderingContexts, savedRenderingContexts = options2.savedRenderingContexts, text = options2.text, textAlign = options2.textAlign, textBaseline = options2.textBaseline, videoElement = options2.videoElement, videoHeight = options2.videoHeight, videoWidth = options2.videoWidth, webcamVideoElement = options2.webcamVideoElement;
            var gifWidth = Number(options2.gifWidth);
            var gifHeight = Number(options2.gifHeight);
            var interval = Number(options2.interval);
            Number(options2.sampleInterval);
            var waitBetweenFrames = hasExistingImages ? 0 : interval * 1e3;
            var renderingContextsToSave = [];
            var numFrames = savedRenderingContexts.length ? savedRenderingContexts.length : options2.numFrames;
            var pendingFrames = numFrames;
            var ag = new AnimatedGIF(options2);
            var fontSize = utils.getFontSize(options2);
            var textXCoordinate = options2.textXCoordinate ? options2.textXCoordinate : textAlign === "left" ? 1 : textAlign === "right" ? gifWidth : gifWidth / 2;
            var textYCoordinate = options2.textYCoordinate ? options2.textYCoordinate : textBaseline === "top" ? 1 : textBaseline === "center" ? gifHeight / 2 : gifHeight;
            var font = fontWeight + " " + fontSize + " " + fontFamily;
            var sourceX = crop ? Math.floor(crop.scaledWidth / 2) : 0;
            var sourceWidth = crop ? videoWidth - crop.scaledWidth : 0;
            var sourceY = crop ? Math.floor(crop.scaledHeight / 2) : 0;
            var sourceHeight = crop ? videoHeight - crop.scaledHeight : 0;
            var captureFrames = function captureSingleFrame() {
              var framesLeft = pendingFrames - 1;
              if (savedRenderingContexts.length) {
                context.putImageData(savedRenderingContexts[numFrames - pendingFrames], 0, 0);
                finishCapture();
              } else {
                drawVideo();
              }
              function drawVideo() {
                try {
                  if (sourceWidth > videoWidth) {
                    sourceWidth = videoWidth;
                  }
                  if (sourceHeight > videoHeight) {
                    sourceHeight = videoHeight;
                  }
                  if (sourceX < 0) {
                    sourceX = 0;
                  }
                  if (sourceY < 0) {
                    sourceY = 0;
                  }
                  context.filter = filter;
                  context.drawImage(videoElement, sourceX, sourceY, sourceWidth, sourceHeight, 0, 0, gifWidth, gifHeight);
                  finishCapture();
                } catch (e) {
                  if (e.name === "NS_ERROR_NOT_AVAILABLE") {
                    utils.requestTimeout(drawVideo, 100);
                  } else {
                    throw e;
                  }
                }
              }
              function finishCapture() {
                var imageData = void 0;
                if (saveRenderingContexts) {
                  renderingContextsToSave.push(context.getImageData(0, 0, gifWidth, gifHeight));
                }
                if (text) {
                  context.font = font;
                  context.fillStyle = fontColor;
                  context.textAlign = textAlign;
                  context.textBaseline = textBaseline;
                  context.fillText(text, textXCoordinate, textYCoordinate);
                }
                imageData = context.getImageData(0, 0, gifWidth, gifHeight);
                ag.addFrameImageData(imageData);
                pendingFrames = framesLeft;
                progressCallback((numFrames - pendingFrames) / numFrames);
                if (framesLeft > 0) {
                  utils.requestTimeout(captureSingleFrame, waitBetweenFrames);
                }
                if (!pendingFrames) {
                  ag.getBase64GIF(function(image) {
                    callback({
                      "error": false,
                      "errorCode": "",
                      "errorMsg": "",
                      "image": image,
                      "cameraStream": cameraStream,
                      "videoElement": videoElement,
                      "webcamVideoElement": webcamVideoElement,
                      "savedRenderingContexts": renderingContextsToSave,
                      "keepCameraOn": keepCameraOn
                    });
                  });
                }
              }
            };
            numFrames = numFrames !== undefined$1 ? numFrames : 10;
            interval = interval !== undefined$1 ? interval : 0.1;
            canvas.width = gifWidth;
            canvas.height = gifHeight;
            context = canvas.getContext("2d");
            (function capture() {
              if (!savedRenderingContexts.length && videoElement.currentTime === 0) {
                utils.requestTimeout(capture, 100);
                return;
              }
              captureFrames();
            })();
          },
          getCropDimensions: function getCropDimensions() {
            var obj = arguments.length > 0 && arguments[0] !== undefined$1 ? arguments[0] : {};
            var width = obj.videoWidth;
            var height = obj.videoHeight;
            var gifWidth = obj.gifWidth;
            var gifHeight = obj.gifHeight;
            var result = {
              width: 0,
              height: 0,
              scaledWidth: 0,
              scaledHeight: 0
            };
            if (width > height) {
              result.width = Math.round(width * (gifHeight / height)) - gifWidth;
              result.scaledWidth = Math.round(result.width * (height / gifHeight));
            } else {
              result.height = Math.round(height * (gifWidth / width)) - gifHeight;
              result.scaledHeight = Math.round(result.height * (width / gifWidth));
            }
            return result;
          }
        };
        var videoStream = {
          loadedData: false,
          defaultVideoDimensions: {
            width: 640,
            height: 480
          },
          findVideoSize: function findVideoSizeMethod(obj) {
            findVideoSizeMethod.attempts = findVideoSizeMethod.attempts || 0;
            var cameraStream = obj.cameraStream, completedCallback = obj.completedCallback, videoElement = obj.videoElement;
            if (!videoElement) {
              return;
            }
            if (videoElement.videoWidth > 0 && videoElement.videoHeight > 0) {
              videoElement.removeEventListener("loadeddata", videoStream.findVideoSize);
              completedCallback({
                videoElement,
                cameraStream,
                videoWidth: videoElement.videoWidth,
                videoHeight: videoElement.videoHeight
              });
            } else {
              if (findVideoSizeMethod.attempts < 10) {
                findVideoSizeMethod.attempts += 1;
                utils.requestTimeout(function() {
                  videoStream.findVideoSize(obj);
                }, 400);
              } else {
                completedCallback({
                  videoElement,
                  cameraStream,
                  videoWidth: videoStream.defaultVideoDimensions.width,
                  videoHeight: videoStream.defaultVideoDimensions.height
                });
              }
            }
          },
          onStreamingTimeout: function onStreamingTimeout(callback) {
            if (utils.isFunction(callback)) {
              callback({
                error: true,
                errorCode: "getUserMedia",
                errorMsg: "There was an issue with the getUserMedia API - Timed out while trying to start streaming",
                image: null,
                cameraStream: {}
              });
            }
          },
          stream: function stream(obj) {
            var existingVideo2 = utils.isArray(obj.existingVideo) ? obj.existingVideo[0] : obj.existingVideo;
            var cameraStream = obj.cameraStream, completedCallback = obj.completedCallback, streamedCallback = obj.streamedCallback, videoElement = obj.videoElement;
            if (utils.isFunction(streamedCallback)) {
              streamedCallback();
            }
            if (existingVideo2) {
              if (utils.isString(existingVideo2)) {
                videoElement.src = existingVideo2;
                videoElement.innerHTML = '<source src="' + existingVideo2 + '" type="video/' + utils.getExtension(existingVideo2) + '" />';
              } else if (existingVideo2 instanceof Blob) {
                try {
                  videoElement.src = utils.URL.createObjectURL(existingVideo2);
                } catch (e) {
                }
                videoElement.innerHTML = '<source src="' + existingVideo2 + '" type="' + existingVideo2.type + '" />';
              }
            } else if (videoElement.mozSrcObject) {
              videoElement.mozSrcObject = cameraStream;
            } else if (utils.URL) {
              try {
                videoElement.srcObject = cameraStream;
                videoElement.src = utils.URL.createObjectURL(cameraStream);
              } catch (e) {
                videoElement.srcObject = cameraStream;
              }
            }
            videoElement.play();
            utils.requestTimeout(function checkLoadedData() {
              checkLoadedData.count = checkLoadedData.count || 0;
              if (videoStream.loadedData === true) {
                videoStream.findVideoSize({
                  videoElement,
                  cameraStream,
                  completedCallback
                });
                videoStream.loadedData = false;
              } else {
                checkLoadedData.count += 1;
                if (checkLoadedData.count > 10) {
                  videoStream.findVideoSize({
                    videoElement,
                    cameraStream,
                    completedCallback
                  });
                } else {
                  checkLoadedData();
                }
              }
            }, 0);
          },
          startStreaming: function startStreaming(obj) {
            var errorCallback = utils.isFunction(obj.error) ? obj.error : utils.noop;
            var streamedCallback = utils.isFunction(obj.streamed) ? obj.streamed : utils.noop;
            var completedCallback = utils.isFunction(obj.completed) ? obj.completed : utils.noop;
            var crossOrigin = obj.crossOrigin, existingVideo2 = obj.existingVideo, lastCameraStream = obj.lastCameraStream, options2 = obj.options, webcamVideoElement = obj.webcamVideoElement;
            var videoElement = utils.isElement(existingVideo2) ? existingVideo2 : webcamVideoElement ? webcamVideoElement : document2.createElement("video");
            if (crossOrigin) {
              videoElement.crossOrigin = options2.crossOrigin;
            }
            videoElement.autoplay = true;
            videoElement.loop = true;
            videoElement.muted = true;
            videoElement.addEventListener("loadeddata", function(event) {
              videoStream.loadedData = true;
              if (options2.offset) {
                videoElement.currentTime = options2.offset;
              }
            });
            if (existingVideo2) {
              videoStream.stream({
                videoElement,
                existingVideo: existingVideo2,
                completedCallback
              });
            } else if (lastCameraStream) {
              videoStream.stream({
                videoElement,
                cameraStream: lastCameraStream,
                streamedCallback,
                completedCallback
              });
            } else {
              utils.getUserMedia({
                video: true
              }, function(stream) {
                videoStream.stream({
                  videoElement,
                  cameraStream: stream,
                  streamedCallback,
                  completedCallback
                });
              }, errorCallback);
            }
          },
          startVideoStreaming: function startVideoStreaming(callback) {
            var options2 = arguments.length > 1 && arguments[1] !== undefined$1 ? arguments[1] : {};
            var timeoutLength = options2.timeout !== undefined$1 ? options2.timeout : 0;
            var originalCallback = options2.callback;
            var webcamVideoElement = options2.webcamVideoElement;
            var noGetUserMediaSupportTimeout = void 0;
            if (timeoutLength > 0) {
              noGetUserMediaSupportTimeout = utils.requestTimeout(function() {
                videoStream.onStreamingTimeout(originalCallback);
              }, 1e4);
            }
            videoStream.startStreaming({
              error: function error2() {
                originalCallback({
                  error: true,
                  errorCode: "getUserMedia",
                  errorMsg: "There was an issue with the getUserMedia API - the user probably denied permission",
                  image: null,
                  cameraStream: {}
                });
              },
              streamed: function streamed() {
                clearTimeout(noGetUserMediaSupportTimeout);
              },
              completed: function completed() {
                var obj = arguments.length > 0 && arguments[0] !== undefined$1 ? arguments[0] : {};
                var cameraStream = obj.cameraStream, videoElement = obj.videoElement, videoHeight = obj.videoHeight, videoWidth = obj.videoWidth;
                callback({
                  cameraStream,
                  videoElement,
                  videoHeight,
                  videoWidth
                });
              },
              lastCameraStream: options2.lastCameraStream,
              webcamVideoElement,
              crossOrigin: options2.crossOrigin,
              options: options2
            });
          },
          stopVideoStreaming: function stopVideoStreaming2(obj) {
            obj = utils.isObject(obj) ? obj : {};
            var _obj = obj, keepCameraOn = _obj.keepCameraOn, videoElement = _obj.videoElement, webcamVideoElement = _obj.webcamVideoElement;
            var cameraStream = obj.cameraStream || {};
            var cameraStreamTracks = cameraStream.getTracks ? cameraStream.getTracks() || [] : [];
            var hasCameraStreamTracks = !!cameraStreamTracks.length;
            var firstCameraStreamTrack = cameraStreamTracks[0];
            if (!keepCameraOn && hasCameraStreamTracks) {
              if (utils.isFunction(firstCameraStreamTrack.stop)) {
                firstCameraStreamTrack.stop();
              }
            }
            if (utils.isElement(videoElement) && !webcamVideoElement) {
              videoElement.pause();
              if (utils.isFunction(utils.URL.revokeObjectURL) && !utils.webWorkerError) {
                if (videoElement.src) {
                  utils.URL.revokeObjectURL(videoElement.src);
                }
              }
              utils.removeElement(videoElement);
            }
          }
        };
        function stopVideoStreaming(options2) {
          options2 = utils.isObject(options2) ? options2 : {};
          videoStream.stopVideoStreaming(options2);
        }
        function createAndGetGIF(obj, callback) {
          var options2 = obj.options || {};
          var images = options2.images, video = options2.video;
          var gifWidth = Number(options2.gifWidth);
          var gifHeight = Number(options2.gifHeight);
          Number(options2.numFrames);
          var cameraStream = obj.cameraStream, videoElement = obj.videoElement, videoWidth = obj.videoWidth, videoHeight = obj.videoHeight;
          var cropDimensions = screenShot.getCropDimensions({
            videoWidth,
            videoHeight,
            gifHeight,
            gifWidth
          });
          var completeCallback = callback;
          options2.crop = cropDimensions;
          options2.videoElement = videoElement;
          options2.videoWidth = videoWidth;
          options2.videoHeight = videoHeight;
          options2.cameraStream = cameraStream;
          if (!utils.isElement(videoElement)) {
            return;
          }
          videoElement.width = gifWidth + cropDimensions.width;
          videoElement.height = gifHeight + cropDimensions.height;
          if (!options2.webcamVideoElement) {
            utils.setCSSAttr(videoElement, {
              position: "fixed",
              opacity: "0"
            });
            document2.body.appendChild(videoElement);
          }
          videoElement.play();
          screenShot.getGIF(options2, function(obj2) {
            if ((!images || !images.length) && (!video || !video.length)) {
              stopVideoStreaming(obj2);
            }
            completeCallback(obj2);
          });
        }
        function existingVideo() {
          var obj = arguments.length > 0 && arguments[0] !== undefined$1 ? arguments[0] : {};
          var callback = obj.callback, existingVideo2 = obj.existingVideo, options2 = obj.options;
          var skipObj = {
            getUserMedia: true,
            "window.URL": true
          };
          var errorObj = error.validate(skipObj);
          var videoType = void 0;
          var videoSrc = void 0;
          if (errorObj.error) {
            return callback(errorObj);
          }
          if (utils.isElement(existingVideo2) && existingVideo2.src) {
            videoSrc = existingVideo2.src;
            videoType = utils.getExtension(videoSrc);
            if (!utils.isSupported.videoCodecs[videoType]) {
              return callback(error.messages.videoCodecs);
            }
          } else if (utils.isArray(existingVideo2)) {
            utils.each(existingVideo2, function(iterator, videoSrc2) {
              if (videoSrc2 instanceof Blob) {
                videoType = videoSrc2.type.substr(videoSrc2.type.lastIndexOf("/") + 1, videoSrc2.length);
              } else {
                videoType = videoSrc2.substr(videoSrc2.lastIndexOf(".") + 1, videoSrc2.length);
              }
              if (utils.isSupported.videoCodecs[videoType]) {
                existingVideo2 = videoSrc2;
                return false;
              }
            });
          }
          videoStream.startStreaming({
            completed: function completed(obj2) {
              obj2.options = options2 || {};
              createAndGetGIF(obj2, callback);
            },
            existingVideo: existingVideo2,
            crossOrigin: options2.crossOrigin,
            options: options2
          });
        }
        function existingWebcam() {
          var obj = arguments.length > 0 && arguments[0] !== undefined$1 ? arguments[0] : {};
          var callback = obj.callback, lastCameraStream = obj.lastCameraStream, options2 = obj.options, webcamVideoElement = obj.webcamVideoElement;
          if (!isWebCamGIFSupported()) {
            return callback(error.validate());
          }
          if (options2.savedRenderingContexts.length) {
            screenShot.getGIF(options2, function(obj2) {
              callback(obj2);
            });
            return;
          }
          videoStream.startVideoStreaming(function() {
            var obj2 = arguments.length > 0 && arguments[0] !== undefined$1 ? arguments[0] : {};
            obj2.options = options2 || {};
            createAndGetGIF(obj2, callback);
          }, {
            lastCameraStream,
            callback,
            webcamVideoElement,
            crossOrigin: options2.crossOrigin
          });
        }
        function createGIF(userOptions, callback) {
          callback = utils.isFunction(userOptions) ? userOptions : callback;
          userOptions = utils.isObject(userOptions) ? userOptions : {};
          if (!utils.isFunction(callback)) {
            return;
          }
          var options2 = utils.mergeOptions(defaultOptions, userOptions) || {};
          var lastCameraStream = userOptions.cameraStream;
          var images = options2.images;
          var imagesLength = images ? images.length : 0;
          var video = options2.video;
          var webcamVideoElement = options2.webcamVideoElement;
          options2 = utils.mergeOptions(options2, {
            "gifWidth": Math.floor(options2.gifWidth),
            "gifHeight": Math.floor(options2.gifHeight)
          });
          if (imagesLength) {
            existingImages({
              "images": images,
              "imagesLength": imagesLength,
              "callback": callback,
              "options": options2
            });
          } else if (video) {
            existingVideo({
              "existingVideo": video,
              callback,
              options: options2
            });
          } else {
            existingWebcam({
              lastCameraStream,
              callback,
              webcamVideoElement,
              options: options2
            });
          }
        }
        function takeSnapShot(userOptions, callback) {
          callback = utils.isFunction(userOptions) ? userOptions : callback;
          userOptions = utils.isObject(userOptions) ? userOptions : {};
          if (!utils.isFunction(callback)) {
            return;
          }
          var mergedOptions = utils.mergeOptions(defaultOptions, userOptions);
          var options2 = utils.mergeOptions(mergedOptions, {
            "interval": 0.1,
            "numFrames": 1,
            "gifWidth": Math.floor(mergedOptions.gifWidth),
            "gifHeight": Math.floor(mergedOptions.gifHeight)
          });
          createGIF(options2, callback);
        }
        var API = {
          "utils": utils$2,
          "error": error$2,
          "defaultOptions": defaultOptions$2,
          "createGIF": createGIF,
          "takeSnapShot": takeSnapShot,
          "stopVideoStreaming": stopVideoStreaming,
          "isSupported": isSupported,
          "isWebCamGIFSupported": isWebCamGIFSupported,
          "isExistingVideoGIFSupported": isExistingVideoGIFSupported,
          "isExistingImagesGIFSupported": isSupported$1,
          "VERSION": "0.4.5"
        };
        {
          module.exports = API;
        }
      })(typeof window !== "undefined" ? window : {}, typeof document !== "undefined" ? document : { createElement: function() {
      } }, typeof window !== "undefined" ? window.navigator : {});
    })(gifshot$1);
    return gifshot$1.exports;
  }
  var gifshotExports = requireGifshot();
  const gifshot = getDefaultExportFromCjs(gifshotExports);
  class MediaDownloader {
    isDownloading = false;
    createdBlobUrls = [];
    abortController = null;
    async downloadAccountMedia(account, onProgress, batchInfo) {
      if (this.isDownloading) {
        throw new Error("Download already in progress");
      }
      this.isDownloading = true;
      this.abortController = new AbortController();
      try {
        const timeline = account.timeline;
        const username = account.username;
        const downloadDate = formatDateTime(Date.now(), "YYYYMMDD_HHmmss");
        let zipFilename;
        if (batchInfo && (batchInfo.mode === "batch" || batchInfo.mode === "auto")) {
          if (batchInfo.page !== void 0) {
            zipFilename = `${username}_${downloadDate}_Batch${batchInfo.page}.zip`;
          } else {
            zipFilename = `${username}_${downloadDate}_Batch.zip`;
          }
        } else {
          zipFilename = `${username}_${downloadDate}.zip`;
        }
        const files = this.createFileList(timeline, username);
        if (files.length === 0) {
          throw new Error("No media files found");
        }
        const shouldConvertGifs = appOptionsManager.get("convertAnimatedGifs") ?? true;
        if (shouldConvertGifs) {
          await this.downloadWithGifConversion(zipFilename, files, onProgress);
        } else {
          const progressCallback = (current, total, file) => {
            const percentage = Math.round(current / total * 100);
            onProgress?.({
              current,
              total,
              percentage,
              currentFile: file?.filename,
              converting: false
            });
          };
          await zipStreamDownload(
            zipFilename,
            files,
            progressCallback,
            500,
            appOptionsManager.get("downloadConcurrency") ?? 1,
            this.abortController?.signal
          );
        }
      } catch (error) {
        if (error?.message !== "Download aborted") {
          throw error;
        }
        logger.info("Download was aborted by user. Files already downloaded will be zipped.");
      } finally {
        this.isDownloading = false;
        this.abortController = null;
        this.createdBlobUrls.forEach((url) => {
          URL.revokeObjectURL(url);
        });
        this.createdBlobUrls = [];
      }
    }
    createFileList(timeline, username) {
      const files = [];
      const usedFilenames = new Set();
      const mediaGroups = {
        photo: timeline.filter((item) => item.type === "photo"),
        video: timeline.filter((item) => item.type === "video"),
        animated_gif: timeline.filter((item) => item.type === "animated_gif")
      };
      Object.entries(mediaGroups).forEach(([type, items]) => {
        if (items.length === 0) return;
        const folderName = type === "photo" ? "image" : type === "animated_gif" ? "gif" : type;
        items.forEach((item) => {
          const extension = this.getFileExtension(item);
          const baseFilename = `${username}_${this.formatDateForFilename(item.date)}_${item.tweet_id}`;
          const filename = this.getUniqueFilename(baseFilename, extension, usedFilenames);
          const fullPath = `${folderName}/${filename}`;
          files.push({
            filename: fullPath,
            url: item.url
          });
          usedFilenames.add(filename);
        });
      });
      return files;
    }
    getFileExtension(item) {
      switch (item.type) {
        case "photo":
          const photoMatch = item.url.match(/format=(\w+)/);
          return photoMatch?.[1] || "jpg";
        case "video":
          return "mp4";
        case "animated_gif":
          const shouldConvertGifs = appOptionsManager.get("convertAnimatedGifs") ?? true;
          return shouldConvertGifs ? "gif" : "mp4";
        default:
          return "unknown";
      }
    }
    formatDateForFilename(dateStr) {
      const m = dateStr.match(/(\d{4})-(\d{2})-(\d{2}).*?(\d{2}):(\d{2}):(\d{2})/);
      if (m) {
        const [, y, mo, d, h2, mi, s] = m;
        return `${y}${mo}${d}_${h2}${mi}${s}`;
      }
      const d2 = new Date(dateStr);
      if (!isNaN(d2.getTime())) {
        const pad = (n) => String(n).padStart(2, "0");
        return `${d2.getFullYear()}${pad(d2.getMonth() + 1)}${pad(d2.getDate())}_${pad(d2.getHours())}${pad(d2.getMinutes())}${pad(d2.getSeconds())}`;
      }
      return dateStr.replace(/\D/g, "");
    }
    getUniqueFilename(baseFilename, extension, usedFilenames) {
      let filename = `${baseFilename}.${extension}`;
      let counter = 1;
      while (usedFilenames.has(filename)) {
        filename = `${baseFilename}_${counter}.${extension}`;
        counter++;
      }
      return filename;
    }
    isDownloadInProgress() {
      return this.isDownloading;
    }
    abortDownload() {
      if (this.abortController) {
        this.abortController.abort();
      }
    }
    async downloadWithGifConversion(zipFilename, files, onProgress) {
      const gifFiles = files.filter((f2) => f2.filename.startsWith("gif/"));
      for (let i = 0; i < gifFiles.length; i++) {
        const gifFile = gifFiles[i];
        if (!gifFile) continue;
        const conversionProgress = Math.round((i + 1) / gifFiles.length * 50);
        onProgress?.({
          current: i,
          total: gifFiles.length,
          percentage: conversionProgress,
          currentFile: gifFile.filename,
          converting: true
        });
        try {
          const gifData = await this.convertVideoToGif(gifFile.url);
          if (gifData) {
            gifFile.url = gifData;
          }
        } catch (error) {
          console.warn("Failed to convert GIF:", error);
        }
      }
      const downloadProgressCallback = (current, total, file) => {
        const downloadProgress = 50 + Math.round(current / total * 50);
        onProgress?.({
          current,
          total,
          percentage: downloadProgress,
          currentFile: file?.filename,
          converting: false
        });
      };
      await zipStreamDownload(
        zipFilename,
        files,
        downloadProgressCallback,
        500,
        appOptionsManager.get("downloadConcurrency") ?? 1,
        this.abortController?.signal
      );
    }
    convertVideoToGif(videoUrl) {
      return new Promise((resolve) => {
        if (!gifshot.isExistingVideoGIFSupported()) {
          console.warn("GIF conversion not supported in this browser");
          resolve(null);
          return;
        }
        const gifOptions = getGifShotOptions();
        {
          this.getVideoDimensions(videoUrl).then(({ width, height }) => {
            gifshot.createGIF({
              video: videoUrl,
              gifWidth: width,
              gifHeight: height,
              ...gifOptions
            }, (obj) => {
              this.handleGifConversionResult(obj, resolve);
            });
          }).catch((error) => {
            console.error("Failed to get video dimensions:", error);
            gifshot.createGIF({
              video: videoUrl,
              ...gifOptions
            }, (obj) => {
              this.handleGifConversionResult(obj, resolve);
            });
          });
        }
      });
    }
    handleGifConversionResult(obj, resolve) {
      if (obj.error) {
        console.error("GIF conversion failed:", obj.errorMsg);
        resolve(null);
      } else if (obj.image) {
        try {
          const dataUrl = obj.image;
          const base64Data = dataUrl.split(",")[1];
          if (!base64Data) {
            resolve(null);
            return;
          }
          const byteCharacters = atob(base64Data);
          const byteNumbers = new Array(byteCharacters.length);
          for (let i = 0; i < byteCharacters.length; i++) {
            byteNumbers[i] = byteCharacters.charCodeAt(i);
          }
          const byteArray = new Uint8Array(byteNumbers);
          const blob = new Blob([byteArray], { type: "image/gif" });
          const blobUrl = URL.createObjectURL(blob);
          this.createdBlobUrls.push(blobUrl);
          resolve(blobUrl);
        } catch (error) {
          console.error("Failed to create blob URL:", error);
          resolve(null);
        }
      } else {
        resolve(null);
      }
    }
    getVideoDimensions(videoUrl) {
      return new Promise((resolve, reject) => {
        const video = document.createElement("video");
        video.crossOrigin = "anonymous";
        video.onloadedmetadata = () => {
          const width = video.videoWidth;
          const height = video.videoHeight;
          video.remove();
          if (width && height) {
            resolve({ width, height });
          } else {
            reject(new Error("Could not determine video dimensions"));
          }
        };
        video.onerror = () => {
          video.remove();
          reject(new Error("Failed to load video for dimension detection"));
        };
        setTimeout(() => {
          video.remove();
          reject(new Error("Timeout while detecting video dimensions"));
        }, 1e4);
        video.src = videoUrl;
      });
    }
  }
  const mediaDownloader = new MediaDownloader();
  const urlParser = {
    getCurrentUsername() {
      try {
        const pathname = window.location.pathname;
        const pathParts = pathname.replace(/^\/+/, "").split("/");
        const username = pathParts[0];
        if (!username) return null;
        const skipPaths = [
          "i",
          "home",
          "explore",
          "notifications",
          "messages",
          "settings",
          "compose",
          "search",
          "hashtag",
          "lists",
          "moments",
          "bookmarks",
          "profile",
          "login",
          "logout",
          "signup",
          "welcome",
          "help",
          "tos",
          "privacy",
          "about",
          "download",
          "jobs",
          "ads",
          "analytics",
          "connect",
          "intent",
          "oauth",
          "account",
          "share"
        ];
        if (skipPaths.includes(username.toLowerCase())) {
          return null;
        }
        if (this.isValidUsername(username)) {
          return username;
        }
        return null;
      } catch (error) {
        console.error("Error parsing URL for username:", error);
        return null;
      }
    },
    isValidUsername(username) {
      if (!username || typeof username !== "string") return false;
      const cleanUsername = username.replace(/^@/, "");
      return /^[a-zA-Z0-9_]{1,15}$/.test(cleanUsername);
    },
    isUserProfilePage() {
      const username = this.getCurrentUsername();
      if (!username) return false;
      const pathname = window.location.pathname;
      const pathParts = pathname.replace(/^\/+/, "").split("/");
      if (pathParts.length === 1) ;
      if (pathParts.length === 2 && pathParts[1] === "") ;
      const profileTabs = ["with_replies", "media", "likes", "followers", "following"];
      if (pathParts.length === 2 && pathParts[1] && profileTabs.includes(pathParts[1])) {
        return true;
      }
      return false;
    },
    onUrlChange(callback) {
      let currentUrl = window.location.href;
      const checkUrlChange = () => {
        const newUrl = window.location.href;
        if (newUrl !== currentUrl) {
          currentUrl = newUrl;
          const username = this.getCurrentUsername();
          callback(username);
        }
      };
      const interval = setInterval(checkUrlChange, 1e3);
      const handlePopState = () => {
        setTimeout(() => {
          const username = this.getCurrentUsername();
          callback(username);
        }, 100);
      };
      window.addEventListener("popstate", handlePopState);
      return () => {
        clearInterval(interval);
        window.removeEventListener("popstate", handlePopState);
      };
    },
    getProfileInfo() {
      return {
        username: this.getCurrentUsername(),
        isProfilePage: this.isUserProfilePage()
      };
    }
  };
  const dashboardState = {
    username: signals.signal(""),
    accountData: signals.signal(null),
    showAccountInfo: signals.signal(false),
    currentAccountUsername: signals.signal(null),
    isLoading: signals.signal(false),
    errorMessage: signals.signal(""),
    isDownloading: signals.signal(false),
    downloadProgress: signals.signal(0),
    downloadError: signals.signal(""),
    isConverting: signals.signal(false),
    currentFile: signals.signal(""),
    downloadingType: signals.signal(null),
    downloadCurrent: signals.signal(0),
    downloadTotal: signals.signal(0),
    detectedUsername: signals.signal(null),
    isProfilePage: signals.signal(false),
    currentPage: signals.signal(0),
    hasMore: signals.signal(false),
    isAutoBatching: signals.signal(false),
    isPaused: signals.signal(false),
    aggregatedTimeline: signals.signal([]),
    currentBatchTimeline: signals.signal([]),
    aggregatedCount: signals.signal(0),
    fetchedPages: signals.signal([]),
    pageMediaCounts: signals.signal({}),
    loadingDirection: signals.signal(null),
    resetForNewAccount(newUsername) {
      const currentUsername = this.currentAccountUsername.value;
      if (currentUsername && newUsername && currentUsername !== newUsername) {
        this.username.value = "";
        this.accountData.value = null;
        this.showAccountInfo.value = false;
        this.isLoading.value = false;
        this.errorMessage.value = "";
        this.downloadProgress.value = 0;
        this.downloadError.value = "";
        this.isDownloading.value = false;
        this.isConverting.value = false;
        this.currentFile.value = "";
        this.downloadingType.value = null;
        this.downloadCurrent.value = 0;
        this.downloadTotal.value = 0;
        this.currentPage.value = 0;
        this.hasMore.value = false;
        this.isAutoBatching.value = false;
        this.isPaused.value = false;
        this.aggregatedTimeline.value = [];
        this.currentBatchTimeline.value = [];
        this.aggregatedCount.value = 0;
        this.fetchedPages.value = [];
        this.pageMediaCounts.value = {};
        this.loadingDirection.value = null;
      }
      this.currentAccountUsername.value = newUsername;
    },
    resetInteractionStates() {
      this.isLoading.value = false;
      this.errorMessage.value = "";
      this.downloadProgress.value = 0;
      this.downloadError.value = "";
      this.isDownloading.value = false;
      this.isConverting.value = false;
      this.currentFile.value = "";
      this.downloadingType.value = null;
      this.downloadCurrent.value = 0;
      this.downloadTotal.value = 0;
    }
  };
  const authState = {
    patreonVerified: signals.signal(false),
    patreonAuth: signals.signal(""),
    authToken: signals.signal("")
  };
  function g(n, t) {
    for (var e in t) n[e] = t[e];
    return n;
  }
  function E(n, t) {
    for (var e in n) if ("__source" !== e && !(e in t)) return true;
    for (var r in t) if ("__source" !== r && n[r] !== t[r]) return true;
    return false;
  }
  function N(n, t) {
    this.props = n, this.context = t;
  }
  (N.prototype = new preact.Component()).isPureReactComponent = true, N.prototype.shouldComponentUpdate = function(n, t) {
    return E(this.props, n) || E(this.state, t);
  };
  var T = preact.options.__b;
  preact.options.__b = function(n) {
    n.type && n.type.__f && n.ref && (n.props.ref = n.ref, n.ref = null), T && T(n);
  };
  var F = preact.options.__e;
  preact.options.__e = function(n, t, e, r) {
    if (n.then) {
      for (var u2, o = t; o = o.__; ) if ((u2 = o.__c) && u2.__c) return null == t.__e && (t.__e = e.__e, t.__k = e.__k), u2.__c(n, t);
    }
    F(n, t, e, r);
  };
  var U = preact.options.unmount;
  function V(n, t, e) {
    return n && (n.__c && n.__c.__H && (n.__c.__H.__.forEach(function(n2) {
      "function" == typeof n2.__c && n2.__c();
    }), n.__c.__H = null), null != (n = g({}, n)).__c && (n.__c.__P === e && (n.__c.__P = t), n.__c.__e = true, n.__c = null), n.__k = n.__k && n.__k.map(function(n2) {
      return V(n2, t, e);
    })), n;
  }
  function W(n, t, e) {
    return n && e && (n.__v = null, n.__k = n.__k && n.__k.map(function(n2) {
      return W(n2, t, e);
    }), n.__c && n.__c.__P === t && (n.__e && e.appendChild(n.__e), n.__c.__e = true, n.__c.__P = e)), n;
  }
  function P() {
    this.__u = 0, this.o = null, this.__b = null;
  }
  function j(n) {
    var t = n.__.__c;
    return t && t.__a && t.__a(n);
  }
  function B() {
    this.i = null, this.l = null;
  }
  preact.options.unmount = function(n) {
    var t = n.__c;
    t && t.__R && t.__R(), t && 32 & n.__u && (n.type = null), U && U(n);
  }, (P.prototype = new preact.Component()).__c = function(n, t) {
    var e = t.__c, r = this;
    null == r.o && (r.o = []), r.o.push(e);
    var u2 = j(r.__v), o = false, i = function() {
      o || (o = true, e.__R = null, u2 ? u2(l) : l());
    };
    e.__R = i;
    var l = function() {
      if (!--r.__u) {
        if (r.state.__a) {
          var n2 = r.state.__a;
          r.__v.__k[0] = W(n2, n2.__c.__P, n2.__c.__O);
        }
        var t2;
        for (r.setState({ __a: r.__b = null }); t2 = r.o.pop(); ) t2.forceUpdate();
      }
    };
    r.__u++ || 32 & t.__u || r.setState({ __a: r.__b = r.__v.__k[0] }), n.then(i, i);
  }, P.prototype.componentWillUnmount = function() {
    this.o = [];
  }, P.prototype.render = function(n, e) {
    if (this.__b) {
      if (this.__v.__k) {
        var r = document.createElement("div"), o = this.__v.__k[0].__c;
        this.__v.__k[0] = V(this.__b, r, o.__O = o.__P);
      }
      this.__b = null;
    }
    var i = e.__a && preact.createElement(preact.Fragment, null, n.fallback);
    return i && (i.__u &= -33), [preact.createElement(preact.Fragment, null, e.__a ? null : n.children), i];
  };
  var H = function(n, t, e) {
    if (++e[1] === e[0] && n.l.delete(t), n.props.revealOrder && ("t" !== n.props.revealOrder[0] || !n.l.size)) for (e = n.i; e; ) {
      for (; e.length > 3; ) e.pop()();
      if (e[1] < e[0]) break;
      n.i = e = e[2];
    }
  };
  function Z(n) {
    return this.getChildContext = function() {
      return n.context;
    }, n.children;
  }
  function Y(n) {
    var e = this, r = n.h;
    if (e.componentWillUnmount = function() {
      preact.render(null, e.v), e.v = null, e.h = null;
    }, e.h && e.h !== r && e.componentWillUnmount(), !e.v) {
      for (var u2 = e.__v; null !== u2 && !u2.__m && null !== u2.__; ) u2 = u2.__;
      e.h = r, e.v = { nodeType: 1, parentNode: r, childNodes: [], __k: { __m: u2.__m }, contains: function() {
        return true;
      }, insertBefore: function(n2, t) {
        this.childNodes.push(n2), e.h.insertBefore(n2, t);
      }, removeChild: function(n2) {
        this.childNodes.splice(this.childNodes.indexOf(n2) >>> 1, 1), e.h.removeChild(n2);
      } };
    }
    preact.render(preact.createElement(Z, { context: e.context }, n.__v), e.v);
  }
  function $(n, e) {
    var r = preact.createElement(Y, { __v: n, h: e });
    return r.containerInfo = e, r;
  }
  (B.prototype = new preact.Component()).__a = function(n) {
    var t = this, e = j(t.__v), r = t.l.get(n);
    return r[0]++, function(u2) {
      var o = function() {
        t.props.revealOrder ? (r.push(u2), H(t, n, r)) : u2();
      };
      e ? e(o) : o();
    };
  }, B.prototype.render = function(n) {
    this.i = null, this.l = new Map();
    var t = preact.toChildArray(n.children);
    n.revealOrder && "b" === n.revealOrder[0] && t.reverse();
    for (var e = t.length; e--; ) this.l.set(t[e], this.i = [1, 0, this.i]);
    return n.children;
  }, B.prototype.componentDidUpdate = B.prototype.componentDidMount = function() {
    var n = this;
    this.l.forEach(function(t, e) {
      H(n, e, t);
    });
  };
  var q = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103, G = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/, J = /^on(Ani|Tra|Tou|BeforeInp|Compo)/, K = /[A-Z0-9]/g, Q = "undefined" != typeof document, X = function(n) {
    return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/ : /fil|che|ra/).test(n);
  };
  preact.Component.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(t) {
    Object.defineProperty(preact.Component.prototype, t, { configurable: true, get: function() {
      return this["UNSAFE_" + t];
    }, set: function(n) {
      Object.defineProperty(this, t, { configurable: true, writable: true, value: n });
    } });
  });
  var en = preact.options.event;
  function rn() {
  }
  function un() {
    return this.cancelBubble;
  }
  function on() {
    return this.defaultPrevented;
  }
  preact.options.event = function(n) {
    return en && (n = en(n)), n.persist = rn, n.isPropagationStopped = un, n.isDefaultPrevented = on, n.nativeEvent = n;
  };
  var cn = { enumerable: false, configurable: true, get: function() {
    return this.class;
  } }, fn = preact.options.vnode;
  preact.options.vnode = function(n) {
    "string" == typeof n.type && (function(n2) {
      var t = n2.props, e = n2.type, u2 = {}, o = -1 === e.indexOf("-");
      for (var i in t) {
        var l = t[i];
        if (!("value" === i && "defaultValue" in t && null == l || Q && "children" === i && "noscript" === e || "class" === i || "className" === i)) {
          var c = i.toLowerCase();
          "defaultValue" === i && "value" in t && null == t.value ? i = "value" : "download" === i && true === l ? l = "" : "translate" === c && "no" === l ? l = false : "o" === c[0] && "n" === c[1] ? "ondoubleclick" === c ? i = "ondblclick" : "onchange" !== c || "input" !== e && "textarea" !== e || X(t.type) ? "onfocus" === c ? i = "onfocusin" : "onblur" === c ? i = "onfocusout" : J.test(i) && (i = c) : c = i = "oninput" : o && G.test(i) ? i = i.replace(K, "-$&").toLowerCase() : null === l && (l = void 0), "oninput" === c && u2[i = c] && (i = "oninputCapture"), u2[i] = l;
        }
      }
      "select" == e && u2.multiple && Array.isArray(u2.value) && (u2.value = preact.toChildArray(t.children).forEach(function(n3) {
        n3.props.selected = -1 != u2.value.indexOf(n3.props.value);
      })), "select" == e && null != u2.defaultValue && (u2.value = preact.toChildArray(t.children).forEach(function(n3) {
        n3.props.selected = u2.multiple ? -1 != u2.defaultValue.indexOf(n3.props.value) : u2.defaultValue == n3.props.value;
      })), t.class && !t.className ? (u2.class = t.class, Object.defineProperty(u2, "className", cn)) : (t.className && !t.class || t.class && t.className) && (u2.class = u2.className = t.className), n2.props = u2;
    })(n), n.$$typeof = q, fn && fn(n);
  };
  var an = preact.options.__r;
  preact.options.__r = function(n) {
    an && an(n), n.__c;
  };
  var sn = preact.options.diffed;
  preact.options.diffed = function(n) {
    sn && sn(n);
    var t = n.props, e = n.__e;
    null != e && "textarea" === n.type && "value" in t && t.value !== e.value && (e.value = null == t.value ? "" : t.value);
  };
  function Title() {
    return u("h2", { class: "text-lg font-bold", children: [
      "Twitter/X Media Batch Downloader ",
u("span", { class: "text-warning", children: "Pro" })
    ] });
  }
  function Modal({ show, onClose, title, children, class: className, actions }) {
    if (!show) {
      return null;
    }
    const modalContent = u("dialog", { class: "modal", open: true, onClose: () => onClose?.(), children: [
u("div", { class: cx("modal-box transition-all duration-300 ease-in-out", className), children: [
u("div", { class: "flex items-center justify-between mb-4", children: [
          title ? u("h2", { class: "text-lg font-bold", children: title }) : u("span", {}),
u("div", { class: "flex items-center gap-2", children: [
            actions,
u("form", { method: "dialog", children: u(
              "button",
              {
                class: "btn btn-sm btn-circle btn-ghost",
                "aria-label": "Close",
                children: u(IconX, { size: 18 })
              }
            ) })
          ] })
        ] }),
u(ErrorBoundary, { children })
      ] }),
u("form", { method: "dialog", class: "modal-backdrop", children: u("button", { "aria-label": "Close", children: "close" }) })
    ] });
    const portalTarget = document.getElementById("tmd-root")?.shadowRoot?.getElementById("tmd-portal-root") || document.getElementById("tmd-root")?.shadowRoot || document.body;
    return $(modalContent, portalTarget);
  }
  function Dashboard({ loadFromDatabaseUsername } = {}) {
    const { t, i18n } = useTranslation();
    const isArabic = (i18n.language || "").startsWith("ar");
    const {
      accountData,
      showAccountInfo,
      detectedUsername,
      isProfilePage,
      isLoading,
      errorMessage,
      isDownloading,
      downloadProgress,
      downloadError,
      isConverting,
      currentFile,
      downloadCurrent,
      downloadTotal
    } = dashboardState;
    const showOverwriteModal = signals.useSignal(false);
    const pendingFetchUsername = signals.useSignal("");
    const pendingFetchParams = signals.useSignal(null);
    const convertGifsExternal = signals.useSignal(appOptionsManager.get("convertGifsExternal") ?? false);
    const mediaType = signals.useSignal(appOptionsManager.get("mediaType") ?? "all");
    const fetchMode = signals.useSignal(appOptionsManager.get("fetchMode") ?? "single");
    const isLoadingFromDB = signals.useSignal(false);
    const hasDBData = signals.useSignal(false);
    const isLoadedFromDB = signals.useSignal(false);
    const isUpdating = signals.useSignal(false);
    const showUpdateConfirmModal = signals.useSignal(false);
    const isRetrying = signals.useSignal(false);
    const retryAbortController = signals.useSignal(null);
    const retryTokenCurrent = signals.useSignal(0);
    const retryTokenTotal = signals.useSignal(0);
    hooks.useEffect(() => {
      const updateUsernameFromUrl = () => {
        const profileInfo = urlParser.getProfileInfo();
        const newDetectedUsername = profileInfo.username;
        dashboardState.resetForNewAccount(newDetectedUsername);
        detectedUsername.value = newDetectedUsername;
        isProfilePage.value = profileInfo.isProfilePage;
        if (newDetectedUsername) {
          checkDBData(newDetectedUsername);
        } else {
          hasDBData.value = false;
        }
      };
      updateUsernameFromUrl();
      (async () => {
        try {
          const settings = await mediaDownloaderDB.getAuthSettings();
          authState.patreonVerified.value = Boolean(settings?.patreon_verified);
          authState.patreonAuth.value = settings?.patreon_auth || "";
        } catch {
        }
      })();
      const cleanup = urlParser.onUrlChange(() => {
        updateUsernameFromUrl();
      });
      return cleanup;
    }, []);
    hooks.useEffect(() => {
      appOptionsManager.signal.subscribe(() => {
        convertGifsExternal.value = appOptionsManager.get("convertGifsExternal") ?? false;
        mediaType.value = appOptionsManager.get("mediaType") ?? "all";
        fetchMode.value = appOptionsManager.get("fetchMode") ?? "single";
      });
    }, []);
    const checkDBData = async (username) => {
      try {
        const cleanUsername = mediaDownloaderAPI.formatUsername(username);
        const fetchMode2 = appOptionsManager.get("fetchMode") ?? "single";
        let count = 0;
        if (fetchMode2 === "single") {
          const singleAccount = await mediaDB.accounts.where("username").equals(cleanUsername).filter((acc) => !acc.batch_mode || acc.batch_mode === "single").count();
          count = singleAccount;
        } else {
          const batchCount = await mediaDB.accounts.where("username").equals(cleanUsername).filter((acc) => !!(acc.batch_mode && acc.batch_mode !== "single")).count();
          count = batchCount;
        }
        hasDBData.value = count > 0;
      } catch {
        hasDBData.value = false;
      }
    };
    hooks.useEffect(() => {
      const unsubscribe = appOptionsManager.signal.subscribe(() => {
        if (detectedUsername.value) {
          checkDBData(detectedUsername.value);
        }
      });
      return unsubscribe;
    }, []);
    hooks.useEffect(() => {
      if (detectedUsername.value) {
        checkDBData(detectedUsername.value);
      }
    }, [dbState.dbChangeSignal.value]);
    hooks.useEffect(() => {
      if (loadFromDatabaseUsername && loadFromDatabaseUsername.value) {
        const username = loadFromDatabaseUsername.value;
        loadFromDatabaseUsername.value = "";
        detectedUsername.value = username;
        handleLoadFromDatabase();
      }
    }, [loadFromDatabaseUsername?.value]);
    const stopRetry = () => {
      isRetrying.value = false;
      isLoading.value = false;
      if (retryAbortController.value) {
        retryAbortController.value.abort();
        retryAbortController.value = null;
      }
      errorMessage.value = "";
    };
    const retryWithTokenGeneration = async (cleanUsername, authSettings) => {
      const controller = new AbortController();
      retryAbortController.value = controller;
      isRetrying.value = true;
      while (isRetrying.value && !controller.signal.aborted) {
        if (!isRetrying.value || controller.signal.aborted) {
          break;
        }
        try {
          console.log("Attempting to generate new token...");
          const tokenResult = await mediaDownloaderAPI.generateAuthToken(authSettings.patreon_auth);
          retryTokenCurrent.value = tokenResult.current_index || 0;
          retryTokenTotal.value = tokenResult.total_tokens || 0;
          if (!isRetrying.value || controller.signal.aborted) {
            break;
          }
          authSettings.auth_token = tokenResult.auth_token;
          authState.authToken.value = tokenResult.auth_token;
          await mediaDownloaderDB.saveAuthSettings(
            tokenResult.auth_token,
            authSettings.patreon_auth
          );
          if (!isRetrying.value || controller.signal.aborted) {
            break;
          }
          await mediaDownloaderDB.setPatreonVerified(true);
          if (!isRetrying.value || controller.signal.aborted) {
            break;
          }
          console.log("Attempting to fetch with new token...");
          isRetrying.value = false;
          await handleFetchMedia(true);
          retryAbortController.value = null;
          return;
        } catch (error) {
          console.error("Retry attempt failed:", error);
          if (!isRetrying.value || controller.signal.aborted) {
            break;
          }
          console.log("Waiting 2 seconds before next retry...");
          const waitCompleted = await new Promise((resolve) => {
            const timeoutId = setTimeout(() => {
              cleanup();
              resolve(true);
            }, 2e3);
            const checkInterval = setInterval(() => {
              if (!isRetrying.value || controller.signal.aborted) {
                cleanup();
                resolve(false);
              }
            }, 100);
            const cleanup = () => {
              clearTimeout(timeoutId);
              clearInterval(checkInterval);
            };
          });
          if (!waitCompleted) {
            console.log("Wait interrupted, stopping retry");
            break;
          }
          console.log("Retrying...");
        }
      }
      console.log("Retry loop ended");
      isRetrying.value = false;
      retryAbortController.value = null;
    };
    const handleFetchMedia = async (skipOverwriteCheck = false) => {
      const rawUsername = detectedUsername.value || "";
      if (!rawUsername) {
        errorMessage.value = t("Please visit a profile page for auto-detection");
        setTimeout(() => errorMessage.value = "", 2e3);
        return;
      }
      const authSettings = await mediaDownloaderDB.getAuthSettings();
      if (!authSettings) {
        errorMessage.value = t("Please configure authentication in the Auth tab first");
        setTimeout(() => errorMessage.value = "", 2e3);
        return;
      }
      const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername);
      if ((authSettings.patreon_auth || "").trim() === "xbatchdemo" && cleanUsername !== "xbatchdemo") {
        errorMessage.value = t("Demo mode is only available for @xbatchdemo");
        setTimeout(() => errorMessage.value = "", 2e3);
        return;
      }
      if (!mediaDownloaderAPI.validateUsername(cleanUsername)) {
        errorMessage.value = t("Invalid username format");
        setTimeout(() => errorMessage.value = "", 2e3);
        return;
      }
      if (!mediaDownloaderAPI.validateAuthToken(authSettings.auth_token)) {
        errorMessage.value = t("Invalid auth token. Please check your settings.");
        setTimeout(() => errorMessage.value = "", 2e3);
        return;
      }
      if (!mediaDownloaderAPI.validatePatreonAuth(authSettings.patreon_auth)) {
        errorMessage.value = t("Invalid Patreon auth. Please check your settings.");
        setTimeout(() => errorMessage.value = "", 2e3);
        return;
      }
      const fetchMode2 = appOptionsManager.get("fetchMode") ?? "single";
      if (!skipOverwriteCheck) {
        const existingAccounts = await mediaDownloaderDB.getAccountsByUsernameAndMode(cleanUsername, fetchMode2);
        if (existingAccounts.length > 0) {
          pendingFetchUsername.value = cleanUsername;
          pendingFetchParams.value = { authSettings };
          showOverwriteModal.value = true;
          return;
        }
      }
      const timelineType = appOptionsManager.get("timelineType") ?? "media";
      const mediaType2 = appOptionsManager.get("mediaType") ?? "all";
      const batchSize = appOptionsManager.get("batchSize") ?? 100;
      const startingBatch = appOptionsManager.get("startingBatch") ?? 0;
      const resetBatchState = () => {
        dashboardState.currentPage.value = startingBatch;
        dashboardState.hasMore.value = false;
        dashboardState.isAutoBatching.value = false;
        dashboardState.isPaused.value = false;
        dashboardState.aggregatedTimeline.value = [];
        dashboardState.currentBatchTimeline.value = [];
        dashboardState.aggregatedCount.value = 0;
        dashboardState.fetchedPages.value = [];
        dashboardState.pageMediaCounts.value = {};
      };
      const fetchPage = async (page, reveal = false) => {
        isLoading.value = true;
        errorMessage.value = "";
        try {
          const data = await mediaDownloaderAPI.fetchMediaData(
            cleanUsername,
            authSettings.auth_token,
            authSettings.patreon_auth,
            {
              timelineType,
              batchSize,
              startingBatch: page,
              mediaType: mediaType2,
              fetchMode: fetchMode2
            }
          );
          accountData.value = data;
          dashboardState.currentBatchTimeline.value = data.timeline;
          dashboardState.hasMore.value = Boolean(data?.metadata?.has_more);
          dashboardState.currentPage.value = data?.metadata?.page ?? page;
          const seen = new Set(dashboardState.aggregatedTimeline.value.map((i) => `${i.tweet_id}|${i.url}`));
          const merged = [...dashboardState.aggregatedTimeline.value];
          if (!dashboardState.fetchedPages.value.includes(page)) {
            dashboardState.fetchedPages.value = [...dashboardState.fetchedPages.value, page];
            let newMediaCount = 0;
            for (const item of data.timeline) {
              const key = `${item.tweet_id}|${item.url}`;
              if (!seen.has(key)) {
                seen.add(key);
                merged.push(item);
                newMediaCount++;
              }
            }
            dashboardState.pageMediaCounts.value = {
              ...dashboardState.pageMediaCounts.value,
              [page]: newMediaCount
            };
            dashboardState.aggregatedTimeline.value = merged;
            dashboardState.aggregatedCount.value = merged.length;
          }
          if (reveal) {
            showAccountInfo.value = true;
          }
        } catch (error) {
          console.error("Fetch error:", error);
          const raw = error instanceof Error ? error.message : "";
          const httpMatch = raw.match(/^HTTP error! status: (\d+)/);
          const msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || t("Failed to fetch data");
          errorMessage.value = msg;
          setTimeout(() => errorMessage.value = "", 2e3);
          throw error;
        } finally {
          isLoading.value = false;
        }
      };
      try {
        resetBatchState();
        isLoadedFromDB.value = false;
        if (fetchMode2 === "single") {
          await fetchPage(startingBatch, true);
        } else if (fetchMode2 === "batch") {
          await fetchPage(startingBatch, true);
        } else {
          dashboardState.isAutoBatching.value = true;
          await fetchPage(startingBatch, true);
          await runAutoLoop();
        }
        if (accountData.value) {
          try {
            const batchIdentifier = fetchMode2 !== "single" ? `${cleanUsername}_${fetchMode2}_${Date.now()}` : void 0;
            const timelineToSave = fetchMode2 !== "single" && dashboardState.aggregatedTimeline.value.length > 0 ? dashboardState.aggregatedTimeline.value : accountData.value.timeline;
            const metadataToSave = fetchMode2 !== "single" && dashboardState.aggregatedTimeline.value.length > 0 ? { ...accountData.value.metadata, new_entries: dashboardState.aggregatedCount.value } : accountData.value.metadata;
            await mediaDownloaderDB.saveAccount({
              username: cleanUsername,
              account_info: accountData.value.account_info,
              metadata: metadataToSave,
              timeline: timelineToSave,
              batch_mode: fetchMode2,
              batch_identifier: batchIdentifier,
              timeline_type: timelineType,
              media_type: mediaType2
            });
            await checkDBData(cleanUsername);
          } catch (error) {
            console.error("Failed to save to database:", error);
          }
        }
      } catch (error) {
        const raw = error instanceof Error ? error.message : "";
        const isDemoMode = (authSettings.patreon_auth || "").trim() === "xbatchdemo";
        if (raw === "Failed to fetch data from all APIs" && !isRetrying.value && !isDemoMode) {
          errorMessage.value = "";
          retryWithTokenGeneration(cleanUsername, authSettings);
        } else if (isDemoMode && raw === "Failed to fetch data from all APIs") {
          const httpMatch = raw.match(/^HTTP error! status: (\d+)/);
          const msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || t("Failed to fetch data");
          errorMessage.value = msg;
          setTimeout(() => errorMessage.value = "", 2e3);
        }
      }
    };
    const confirmOverwrite = async () => {
      showOverwriteModal.value = false;
      pendingFetchUsername.value = "";
      pendingFetchParams.value = null;
      await handleFetchMedia(true);
    };
    const cancelOverwrite = () => {
      showOverwriteModal.value = false;
      pendingFetchUsername.value = "";
      pendingFetchParams.value = null;
    };
    const handleLoadFromDatabase = async () => {
      const rawUsername = detectedUsername.value || "";
      if (!rawUsername) {
        errorMessage.value = t("Please visit a profile page for auto-detection");
        setTimeout(() => errorMessage.value = "", 2e3);
        return;
      }
      const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername);
      isLoadingFromDB.value = true;
      try {
        const fetchMode2 = appOptionsManager.get("fetchMode") ?? "single";
        let accounts;
        if (fetchMode2 === "single") {
          const singleAccount = await mediaDB.accounts.where("username").equals(cleanUsername).filter((acc) => !acc.batch_mode || acc.batch_mode === "single").reverse().sortBy("cached_at");
          accounts = singleAccount;
        } else {
          const batchAccounts = await mediaDB.accounts.where("username").equals(cleanUsername).filter((acc) => !!(acc.batch_mode && acc.batch_mode !== "single")).reverse().sortBy("cached_at");
          accounts = batchAccounts;
        }
        if (accounts.length === 0) {
          return;
        }
        const latestAccount = accounts[0];
        accountData.value = {
          account_info: latestAccount.account_info,
          metadata: latestAccount.metadata,
          timeline: latestAccount.timeline
        };
        dashboardState.currentBatchTimeline.value = latestAccount.timeline;
        dashboardState.aggregatedTimeline.value = latestAccount.timeline;
        dashboardState.aggregatedCount.value = latestAccount.timeline.length;
        showAccountInfo.value = true;
        isLoadedFromDB.value = true;
        if (detectedUsername.value) {
          await checkDBData(detectedUsername.value);
        }
      } catch (error) {
        console.error("Failed to load from database:", error);
        errorMessage.value = t("Failed to load data");
        setTimeout(() => errorMessage.value = "", 2e3);
      } finally {
        isLoadingFromDB.value = false;
      }
    };
    const runAutoLoop = async () => {
      try {
        while (dashboardState.isAutoBatching.value && dashboardState.hasMore.value) {
          try {
            isLoading.value = true;
            const rawUsername = dashboardState.detectedUsername.value || "";
            const authSettings = await mediaDownloaderDB.getAuthSettings();
            if (!rawUsername || !authSettings) break;
            const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername);
            const timelineType = appOptionsManager.get("timelineType") ?? "media";
            const mediaType2 = appOptionsManager.get("mediaType") ?? "all";
            const batchSize = appOptionsManager.get("batchSize") ?? 100;
            const page = dashboardState.currentPage.value + 1;
            const data = await mediaDownloaderAPI.fetchMediaData(
              cleanUsername,
              authSettings.auth_token,
              authSettings.patreon_auth,
              {
                timelineType,
                batchSize,
                startingBatch: page,
                mediaType: mediaType2
              }
            );
            accountData.value = data;
            dashboardState.currentBatchTimeline.value = data.timeline;
            dashboardState.hasMore.value = Boolean(data?.metadata?.has_more);
            dashboardState.currentPage.value = data?.metadata?.page ?? page;
            const seen = new Set(dashboardState.aggregatedTimeline.value.map((i) => `${i.tweet_id}|${i.url}`));
            const merged = [...dashboardState.aggregatedTimeline.value];
            if (!dashboardState.fetchedPages.value.includes(page)) {
              dashboardState.fetchedPages.value = [...dashboardState.fetchedPages.value, page];
              let newMediaCount = 0;
              for (const item of data.timeline) {
                const key = `${item.tweet_id}|${item.url}`;
                if (!seen.has(key)) {
                  seen.add(key);
                  merged.push(item);
                  newMediaCount++;
                }
              }
              dashboardState.pageMediaCounts.value = {
                ...dashboardState.pageMediaCounts.value,
                [page]: newMediaCount
              };
              dashboardState.aggregatedTimeline.value = merged;
              dashboardState.aggregatedCount.value = merged.length;
              await saveAggregatedData();
            }
          } catch (error) {
            console.error("Auto batch error:", error);
            break;
          } finally {
            isLoading.value = false;
          }
        }
      } finally {
        dashboardState.isAutoBatching.value = false;
      }
    };
    const saveAggregatedData = async () => {
      if (!accountData.value) return;
      const fetchMode2 = appOptionsManager.get("fetchMode") ?? "single";
      const rawUsername = detectedUsername.value || "";
      if (fetchMode2 !== "single" && rawUsername && dashboardState.aggregatedTimeline.value.length > 0) {
        try {
          const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername);
          const timelineType = appOptionsManager.get("timelineType") ?? "media";
          const mediaType2 = appOptionsManager.get("mediaType") ?? "all";
          const batchIdentifier = `${cleanUsername}_${fetchMode2}_${Date.now()}`;
          await mediaDownloaderDB.saveAccount({
            username: cleanUsername,
            account_info: accountData.value.account_info,
            metadata: { ...accountData.value.metadata, new_entries: dashboardState.aggregatedCount.value },
            timeline: dashboardState.aggregatedTimeline.value,
            batch_mode: fetchMode2,
            batch_identifier: batchIdentifier,
            timeline_type: timelineType,
            media_type: mediaType2
          });
          await checkDBData(cleanUsername);
        } catch (error) {
          console.error("Failed to save aggregated data:", error);
        }
      }
    };
    const handleBack = async () => {
      if (accountData.value && !isLoadedFromDB.value) {
        await saveAggregatedData();
      }
      showAccountInfo.value = false;
      accountData.value = null;
      isLoadedFromDB.value = false;
      dashboardState.resetInteractionStates();
    };
    const handleUpdateDataClick = () => {
      showUpdateConfirmModal.value = true;
    };
    const cancelUpdate = () => {
      showUpdateConfirmModal.value = false;
    };
    const confirmUpdate = async () => {
      showUpdateConfirmModal.value = false;
      await handleUpdateData();
    };
    const handleUpdateData = async () => {
      isUpdating.value = true;
      const rawUsername = detectedUsername.value || "";
      if (!rawUsername) {
        errorMessage.value = t("Please visit a profile page for auto-detection");
        setTimeout(() => errorMessage.value = "", 2e3);
        return;
      }
      const authSettings = await mediaDownloaderDB.getAuthSettings();
      if (!authSettings) {
        errorMessage.value = t("Please configure authentication in the Auth tab first");
        setTimeout(() => errorMessage.value = "", 2e3);
        return;
      }
      const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername);
      const fetchMode2 = appOptionsManager.get("fetchMode") ?? "single";
      const timelineType = appOptionsManager.get("timelineType") ?? "media";
      const mediaType2 = appOptionsManager.get("mediaType") ?? "all";
      const batchSize = appOptionsManager.get("batchSize") ?? 100;
      const startingBatch = appOptionsManager.get("startingBatch") ?? 0;
      const resetBatchState = () => {
        dashboardState.currentPage.value = startingBatch;
        dashboardState.hasMore.value = false;
        dashboardState.isAutoBatching.value = false;
        dashboardState.isPaused.value = false;
        dashboardState.aggregatedTimeline.value = [];
        dashboardState.currentBatchTimeline.value = [];
        dashboardState.aggregatedCount.value = 0;
        dashboardState.fetchedPages.value = [];
        dashboardState.pageMediaCounts.value = {};
      };
      const fetchPage = async (page, reveal = false) => {
        isLoading.value = true;
        errorMessage.value = "";
        try {
          const data = await mediaDownloaderAPI.fetchMediaData(
            cleanUsername,
            authSettings.auth_token,
            authSettings.patreon_auth,
            {
              timelineType,
              batchSize,
              startingBatch: page,
              mediaType: mediaType2,
              fetchMode: fetchMode2
            }
          );
          accountData.value = data;
          dashboardState.currentBatchTimeline.value = data.timeline;
          dashboardState.hasMore.value = Boolean(data?.metadata?.has_more);
          dashboardState.currentPage.value = data?.metadata?.page ?? page;
          const seen = new Set(dashboardState.aggregatedTimeline.value.map((i) => `${i.tweet_id}|${i.url}`));
          const merged = [...dashboardState.aggregatedTimeline.value];
          if (!dashboardState.fetchedPages.value.includes(page)) {
            dashboardState.fetchedPages.value = [...dashboardState.fetchedPages.value, page];
            let newMediaCount = 0;
            for (const item of data.timeline) {
              const key = `${item.tweet_id}|${item.url}`;
              if (!seen.has(key)) {
                seen.add(key);
                merged.push(item);
                newMediaCount++;
              }
            }
            dashboardState.pageMediaCounts.value = {
              ...dashboardState.pageMediaCounts.value,
              [page]: newMediaCount
            };
            dashboardState.aggregatedTimeline.value = merged;
            dashboardState.aggregatedCount.value = merged.length;
          }
          if (reveal) {
            showAccountInfo.value = true;
          }
          try {
            const batchIdentifier = fetchMode2 !== "single" ? `${cleanUsername}_${fetchMode2}_${Date.now()}` : void 0;
            await mediaDownloaderDB.saveAccount({
              username: cleanUsername,
              account_info: data.account_info,
              metadata: data.metadata,
              timeline: data.timeline,
              batch_mode: fetchMode2,
              batch_identifier: batchIdentifier,
              timeline_type: timelineType,
              media_type: mediaType2
            });
            await checkDBData(cleanUsername);
          } catch {
          }
        } catch (error) {
          console.error("Fetch error:", error);
          const raw = error instanceof Error ? error.message : "";
          const httpMatch = raw.match(/^HTTP error! status: (\d+)/);
          const msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || t("Failed to fetch data");
          errorMessage.value = msg;
          setTimeout(() => errorMessage.value = "", 2e3);
          throw error;
        } finally {
          isLoading.value = false;
        }
      };
      try {
        resetBatchState();
        isLoadedFromDB.value = false;
        if (fetchMode2 === "single") {
          await fetchPage(startingBatch, true);
        } else if (fetchMode2 === "batch") {
          await fetchPage(startingBatch, true);
        } else {
          dashboardState.isAutoBatching.value = true;
          await fetchPage(startingBatch, true);
          await runAutoLoop();
        }
      } catch {
      } finally {
        isUpdating.value = false;
      }
    };
    const handleDownloadMedia = async () => {
      if (!accountData.value) return;
      try {
        dashboardState.downloadingType.value = "all";
        isDownloading.value = true;
        downloadError.value = "";
        downloadProgress.value = 0;
        const aggregatedTimeline = dashboardState.aggregatedTimeline.value.length > 0 ? dashboardState.aggregatedTimeline.value : accountData.value.timeline;
        const account = {
          username: accountData.value.account_info.name,
          account_info: accountData.value.account_info,
          metadata: accountData.value.metadata,
          timeline: aggregatedTimeline,
          cached_at: Date.now()
        };
        const fetchMode2 = appOptionsManager.get("fetchMode") ?? "single";
        const batchInfo = fetchMode2 !== "single" ? { mode: fetchMode2 } : void 0;
        await mediaDownloader.downloadAccountMedia(account, (progress) => {
          downloadProgress.value = progress.percentage;
          isConverting.value = progress.converting || false;
          currentFile.value = progress.currentFile || "";
          dashboardState.downloadCurrent.value = progress.current;
          dashboardState.downloadTotal.value = progress.total;
        }, batchInfo);
      } catch (error) {
        console.error("Download error:", error);
        const raw = error instanceof Error ? error.message : "";
        const httpMatch = raw.match(/^HTTP error! status: (\d+)/);
        const msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || t("Failed to download media");
        downloadError.value = msg;
        setTimeout(() => downloadError.value = "", 2e3);
      } finally {
        dashboardState.downloadingType.value = null;
        isDownloading.value = false;
        downloadProgress.value = 0;
        isConverting.value = false;
        currentFile.value = "";
        dashboardState.downloadCurrent.value = 0;
        dashboardState.downloadTotal.value = 0;
      }
    };
    const handleDownloadCurrent = async () => {
      if (!accountData.value) return;
      try {
        dashboardState.downloadingType.value = "current";
        isDownloading.value = true;
        downloadError.value = "";
        downloadProgress.value = 0;
        const currentTimeline = dashboardState.currentBatchTimeline.value.length > 0 ? dashboardState.currentBatchTimeline.value : accountData.value.timeline;
        const account = {
          username: accountData.value.account_info.name,
          account_info: accountData.value.account_info,
          metadata: accountData.value.metadata,
          timeline: currentTimeline,
          cached_at: Date.now()
        };
        const fetchMode2 = appOptionsManager.get("fetchMode") ?? "single";
        const currentPage = dashboardState.currentPage.value;
        const batchInfo = fetchMode2 !== "single" ? { mode: fetchMode2, page: currentPage } : void 0;
        await mediaDownloader.downloadAccountMedia(account, (progress) => {
          downloadProgress.value = progress.percentage;
          isConverting.value = progress.converting || false;
          currentFile.value = progress.currentFile || "";
          dashboardState.downloadCurrent.value = progress.current;
          dashboardState.downloadTotal.value = progress.total;
        }, batchInfo);
      } catch (error) {
        console.error("Download error:", error);
        const raw = error instanceof Error ? error.message : "";
        const httpMatch = raw.match(/^HTTP error! status: (\d+)/);
        const msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || t("Failed to download media");
        downloadError.value = msg;
        setTimeout(() => downloadError.value = "", 2e3);
      } finally {
        dashboardState.downloadingType.value = null;
        isDownloading.value = false;
        downloadProgress.value = 0;
        isConverting.value = false;
        currentFile.value = "";
        dashboardState.downloadCurrent.value = 0;
        dashboardState.downloadTotal.value = 0;
      }
    };
    const handlePrevBatch = async () => {
      const page = dashboardState.currentPage.value;
      if (page <= 0) return;
      const p = page - 1;
      await handleNavigateBatch(p);
    };
    const handleNextBatch = async () => {
      const p = dashboardState.currentPage.value + 1;
      await handleNavigateBatch(p);
    };
    const handleNavigateBatch = async (page) => {
      const rawUsername = dashboardState.detectedUsername.value || "";
      const authSettings = await mediaDownloaderDB.getAuthSettings();
      if (!rawUsername || !authSettings) return;
      const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername);
      const timelineType = appOptionsManager.get("timelineType") ?? "media";
      const mediaType2 = appOptionsManager.get("mediaType") ?? "all";
      const batchSize = appOptionsManager.get("batchSize") ?? 100;
      try {
        isLoading.value = true;
        const data = await mediaDownloaderAPI.fetchMediaData(
          cleanUsername,
          authSettings.auth_token,
          authSettings.patreon_auth,
          {
            timelineType,
            batchSize,
            startingBatch: page,
            mediaType: mediaType2
          }
        );
        accountData.value = data;
        dashboardState.currentBatchTimeline.value = data.timeline;
        dashboardState.hasMore.value = Boolean(data?.metadata?.has_more);
        dashboardState.currentPage.value = data?.metadata?.page ?? page;
        const seen = new Set(dashboardState.aggregatedTimeline.value.map((i) => `${i.tweet_id}|${i.url}`));
        const merged = [...dashboardState.aggregatedTimeline.value];
        if (!dashboardState.fetchedPages.value.includes(page)) {
          dashboardState.fetchedPages.value = [...dashboardState.fetchedPages.value, page];
          let newMediaCount = 0;
          for (const item of data.timeline) {
            const key = `${item.tweet_id}|${item.url}`;
            if (!seen.has(key)) {
              seen.add(key);
              merged.push(item);
              newMediaCount++;
            }
          }
          dashboardState.pageMediaCounts.value = {
            ...dashboardState.pageMediaCounts.value,
            [page]: newMediaCount
          };
          dashboardState.aggregatedTimeline.value = merged;
          dashboardState.aggregatedCount.value = merged.length;
          await saveAggregatedData();
        }
      } catch (error) {
        console.error("Navigate batch error:", error);
      } finally {
        isLoading.value = false;
        dashboardState.loadingDirection.value = null;
      }
    };
    const handleStartStop = async () => {
      const running = dashboardState.isAutoBatching.value;
      if (running) {
        dashboardState.isAutoBatching.value = false;
      } else {
        dashboardState.isAutoBatching.value = true;
        await runAutoLoop();
      }
    };
    if (showAccountInfo.value && accountData.value) {
      const account = accountData.value.account_info;
      const metadata = accountData.value.metadata;
      return u(preact.Fragment, { children: [
u("div", { class: "space-y-6", children: [
u("div", { class: "flex items-center gap-4 mb-6", children: [
u("div", { class: "flex items-center gap-2", children: [
u("button", { class: "btn btn-sm", onClick: handleBack, children: [
u(IconChevronLeft, { size: 16 }),
                t("Back")
              ] }),
              (isLoadedFromDB.value || isUpdating.value) && u("button", { class: "btn btn-accent btn-sm", onClick: handleUpdateDataClick, disabled: isLoading.value, children: isLoading.value && isUpdating.value ? u(preact.Fragment, { children: [
u("span", { class: "loading loading-spinner loading-xs" }),
                t("Updating...")
              ] }) : u(preact.Fragment, { children: [
u(IconCloudUp, { size: 16 }),
                t("Update")
              ] }) })
            ] }),
u("div", { class: "ml-auto flex items-center gap-2", children: (() => {
              if (isLoadedFromDB.value) {
                return null;
              }
              const page = dashboardState.currentPage.value;
              const isPrevLoading = isLoading.value && dashboardState.loadingDirection.value === "prev";
              const isNextLoading = isLoading.value && dashboardState.loadingDirection.value === "next";
              if (fetchMode.value === "batch") {
                return u(preact.Fragment, { children: [
u("button", { class: "btn btn-primary btn-sm", onClick: () => {
                    dashboardState.loadingDirection.value = "prev";
                    handlePrevBatch();
                  }, disabled: isLoading.value || page <= 0, children: [
                    isPrevLoading ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconChevronLeft, { size: 16 }),
                    t("Prev")
                  ] }),
u("button", { class: "btn btn-primary btn-sm", onClick: () => {
                    dashboardState.loadingDirection.value = "next";
                    handleNextBatch();
                  }, disabled: isLoading.value || !dashboardState.hasMore.value, children: [
                    isNextLoading ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconChevronRight, { size: 16 }),
                    t("Next")
                  ] })
                ] });
              }
              if (fetchMode.value === "auto") {
                const running = dashboardState.isAutoBatching.value;
                return u(preact.Fragment, { children: u("button", { class: "btn btn-secondary btn-sm", onClick: handleStartStop, children: [
                  isLoading.value ? u("span", { class: "loading loading-spinner loading-xs" }) : running ? u(IconPlayerStop, { size: 16 }) : u(IconPlayerPlay, { size: 16 }),
                  running ? t("Stop") : t("Start")
                ] }) });
              }
              return null;
            })() })
          ] }),
u("div", { class: "card bg-base-200 card-border", children: u("div", { class: "card-body p-4", children: u("div", { class: "flex items-center gap-4", children: [
u("div", { class: "avatar", children: u("div", { class: "w-16 rounded-box", children: u(
              "img",
              {
                src: account.profile_image,
                alt: account.nick,
                onError: (e) => {
                  const target = e.target;
                  target.src = 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="gray"%3E%3Ccircle cx="12" cy="12" r="10"/%3E%3C/svg%3E';
                }
              }
            ) }) }),
u("div", { class: "flex-grow", children: [
u("div", { class: "flex items-center gap-2", children: [
u("h3", { class: "font-semibold text-base", children: account.nick }),
                (() => {
                  if (isLoadedFromDB.value) {
                    return null;
                  }
                  const page = dashboardState.currentPage.value;
                  if (fetchMode.value === "batch") {
                    return u("div", { class: "badge badge-soft badge-primary badge-sm", children: isLoading.value ? t("Fetching...") : t("Batch: {{page}}", { page }) });
                  }
                  if (fetchMode.value === "auto") {
                    return u("div", { class: "badge badge-soft badge-secondary badge-sm", children: isLoading.value ? t("Fetching...") : t("Batch: {{page}}", { page }) });
                  }
                  return null;
                })()
              ] }),
u("p", { class: "text-sm opacity-70", children: [
                "@",
                account.name
              ] }),
u("p", { class: "text-sm opacity-50 mt-1", children: [
                t("Posts: {{posts}}", { posts: account.statuses_count.toLocaleString() }),
                " • ",
                (() => {
                  if (isLoadedFromDB.value) {
                    return t("Media: {{media}}", { media: metadata.new_entries.toLocaleString() });
                  }
                  if (fetchMode.value !== "single") {
                    const currentCount = dashboardState.currentBatchTimeline.value?.length || 0;
                    const currentPage = dashboardState.currentPage.value;
                    const pageMediaCounts = dashboardState.pageMediaCounts.value;
                    const fetchedPages = dashboardState.fetchedPages.value;
                    const relevantPages = fetchedPages.filter((p) => p <= currentPage);
                    const totalCount = relevantPages.reduce((sum, page) => {
                      return sum + (pageMediaCounts[page] || 0);
                    }, 0);
                    return t("Current Media: {{current}} • Total Media: {{total}}", {
                      current: currentCount.toLocaleString(),
                      total: totalCount.toLocaleString()
                    });
                  }
                  return t("Media: {{media}}", { media: metadata.new_entries.toLocaleString() });
                })()
              ] })
            ] })
          ] }) }) }),
u("div", { class: "space-y-4", children: [
            isDownloading.value && u("div", { class: "space-y-2", children: [
u("div", { class: "flex justify-between text-sm", children: [
u("span", { children: [
                  isConverting.value ? t("Converting GIFs...") : t("Downloading..."),
                  downloadTotal.value > 0 && ` (${downloadCurrent.value.toLocaleString()}/${downloadTotal.value.toLocaleString()})`
                ] }),
u("span", { children: [
                  downloadProgress.value,
                  "%"
                ] })
              ] }),
u("progress", { class: "progress progress-primary w-full", value: downloadProgress.value, max: "100" }),
              currentFile.value && u("div", { class: "text-xs opacity-70 truncate", children: currentFile.value })
            ] }),
u("div", { class: "flex justify-center gap-2", children: isDownloading.value ? u(
              "button",
              {
                class: "btn btn-error btn-sm",
                onClick: () => mediaDownloader.abortDownload(),
                children: [
u(IconPlayerStop, { size: 16 }),
                  t("Stop")
                ]
              }
            ) : u(preact.Fragment, { children: [
              (() => {
                if (isLoadedFromDB.value) {
                  return null;
                }
                if (fetchMode.value !== "single") {
                  const currentCount = dashboardState.currentBatchTimeline.value?.length || 0;
                  return u(
                    "button",
                    {
                      class: "btn btn-sm",
                      onClick: handleDownloadCurrent,
                      disabled: currentCount === 0,
                      children: [
u(IconDownload, { size: 16 }),
                        t("Download Current")
                      ]
                    }
                  );
                }
                return null;
              })(),
              (() => {
                const labelKey = fetchMode.value === "single" ? "Download" : "Download All";
                return u(
                  "button",
                  {
                    class: "btn btn-neutral btn-sm",
                    onClick: handleDownloadMedia,
                    disabled: (dashboardState.aggregatedCount.value || metadata.new_entries) === 0,
                    children: [
u(IconDownload, { size: 16 }),
                      t(labelKey)
                    ]
                  }
                );
              })()
            ] }) }),
            downloadError.value && u("div", { role: "alert", class: "alert alert-error alert-soft", children: [
u(IconCircleX, { size: 20 }),
u("span", { dir: isArabic ? "rtl" : void 0, children: downloadError.value })
            ] })
          ] })
        ] }),
u(Modal, { show: showUpdateConfirmModal.value, onClose: cancelUpdate, title: t("Update"), class: "max-w-sm", children: u("div", { class: "space-y-2", children: [
u("p", { class: `text-sm${isArabic ? " text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: t("Update will fetch the latest data and overwrite the database. Continue?") }),
u("div", { class: "modal-action", children: [
u(
              "button",
              {
                class: "btn btn-sm btn-ghost",
                onClick: cancelUpdate,
                children: t("Cancel")
              }
            ),
u(
              "button",
              {
                class: "btn btn-sm btn-warning",
                onClick: confirmUpdate,
                children: [
u(IconCloudUp, { size: 16 }),
                  t("Update")
                ]
              }
            )
          ] })
        ] }) })
      ] });
    }
    const handleExternalConvert = async () => {
      const rawUsername = detectedUsername.value || "";
      if (!rawUsername) {
        errorMessage.value = t("Please visit a profile page for auto-detection");
        setTimeout(() => errorMessage.value = "", 2e3);
        return;
      }
      const authSettings = await mediaDownloaderDB.getAuthSettings();
      if (!authSettings) {
        errorMessage.value = t("Please configure authentication in the Auth tab first");
        setTimeout(() => errorMessage.value = "", 2e3);
        return;
      }
      const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername);
      if (!mediaDownloaderAPI.validateUsername(cleanUsername)) {
        errorMessage.value = t("Invalid username format");
        setTimeout(() => errorMessage.value = "", 2e3);
        return;
      }
      const patreonAuth = authSettings.patreon_auth || "";
      const authToken = authSettings.auth_token || "";
      if (!patreonAuth || !authToken) {
        errorMessage.value = t("Please configure authentication in the Auth tab first");
        setTimeout(() => errorMessage.value = "", 2e3);
        return;
      }
      let url;
      if (patreonAuth.trim() === "xbatchdemo") {
        url = `https://convert.xbatch.online/demo/xbatchdemo/${encodeURIComponent(authToken)}/xbatchdemo`;
      } else {
        url = `https://convert.xbatch.online/${encodeURIComponent(patreonAuth)}/${encodeURIComponent(authToken)}/${encodeURIComponent(cleanUsername)}`;
      }
      window.open(url, "_blank", "noopener,noreferrer");
    };
    return u("div", { class: "space-y-4", children: [
u("div", { class: "space-y-4", children: [
        isRetrying.value && u("div", { role: "alert", class: "alert alert-info alert-soft", children: [
u("span", { class: "loading loading-spinner loading-sm" }),
u("span", { dir: isArabic ? "rtl" : void 0, children: [
            t("Generating token..."),
            " ",
            retryTokenTotal.value > 0 && `(${retryTokenCurrent.value}/${retryTokenTotal.value})`
          ] })
        ] }),
u("div", { role: "alert", class: `alert alert-soft ${!authState.patreonVerified.value ? "alert-warning" : "alert-info"}`, children: [
          !authState.patreonVerified.value ? u(IconAlertTriangle, { size: 20 }) : u(IconUserFilled, { size: 20 }),
u("div", { class: "flex-1", dir: isArabic ? "rtl" : void 0, children: !authState.patreonVerified.value ? u("div", { children: t("Please verify Patreon auth first") }) : detectedUsername.value ? u("div", { children: u("span", { dir: "ltr", children: [
            "@",
            detectedUsername.value
          ] }) }) : u("div", { class: "font-semibold", children: t("Please visit a profile page for auto-detection") }) }),
          detectedUsername.value && hasDBData.value && authState.patreonVerified.value && u("div", { class: "tooltip tooltip-left", "data-tip": t("Load from database"), children: u(
            "button",
            {
              class: "btn btn-sm btn-square btn-soft btn-info",
              onClick: handleLoadFromDatabase,
              disabled: isLoadingFromDB.value || !detectedUsername.value,
              "aria-label": t("Load from database"),
              children: isLoadingFromDB.value ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconDatabaseImport, { size: 16 })
            }
          ) })
        ] }),
u("div", { class: "flex justify-center", children: u("div", { class: "join", children: [
u(
            "button",
            {
              class: `btn btn-sm join-item ${isRetrying.value ? "btn-error" : "btn-neutral"}`,
              onClick: () => isRetrying.value ? stopRetry() : handleFetchMedia(),
              disabled: isLoading.value && !isRetrying.value || !detectedUsername.value || !authState.patreonVerified.value,
              children: (() => {
                if (isRetrying.value) {
                  return u(preact.Fragment, { children: [
u(IconPlayerStop, { size: 16 }),
                    t("Abort")
                  ] });
                }
                const fetchKey = mediaType.value === "all" ? "Fetch All" : mediaType.value === "video" ? "Fetch Video" : mediaType.value === "image" ? "Fetch Image" : mediaType.value === "gif" ? "Fetch GIF" : "Fetch";
                if (isLoading.value) {
                  return u(preact.Fragment, { children: [
u("span", { class: "loading loading-spinner loading-xs" }),
                    t("Fetching...")
                  ] });
                }
                return u(preact.Fragment, { children: [
u(IconCloudDown, { size: 16 }),
                  t(fetchKey)
                ] });
              })()
            }
          ),
          convertGifsExternal.value ? u(
            "button",
            {
              class: "btn btn-accent btn-sm join-item",
              onClick: handleExternalConvert,
              disabled: !detectedUsername.value || !authState.patreonVerified.value,
              children: [
u(IconPhotoEdit, { size: 16 }),
                t("Convert Animated GIFs")
              ]
            }
          ) : null
        ] }) }),
        errorMessage.value && u("div", { role: "alert", class: "alert alert-error alert-soft", children: [
u(IconCircleX, { size: 20 }),
u("span", { dir: isArabic ? "rtl" : void 0, children: errorMessage.value })
        ] })
      ] }),
u(Modal, { show: showOverwriteModal.value, onClose: cancelOverwrite, title: t("Overwrite Existing Data?"), class: "max-w-sm", children: u("div", { class: "space-y-2", children: [
u("p", { class: `text-sm${isArabic ? " text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: t("Account data for @{{username}} already exists in the database. Do you want to overwrite it?", { username: pendingFetchUsername.value }) }),
u("div", { class: "modal-action", children: [
u(
            "button",
            {
              class: "btn btn-sm btn-ghost",
              onClick: cancelOverwrite,
              children: t("Cancel")
            }
          ),
u(
            "button",
            {
              class: "btn btn-sm btn-warning",
              onClick: confirmOverwrite,
              children: [
u(IconWriting, { size: 16 }),
                t("Overwrite")
              ]
            }
          )
        ] })
      ] }) })
    ] });
  }
  function ViewDatabaseModal({ isOpen, onClose, account, onDeleteEntry, onLoadDatabase }) {
    const { t } = useTranslation();
    const typeFilter = signals.useSignal("all");
    const currentPage = signals.useSignal(1);
    const deletingEntry = signals.useSignal("");
    const previewUrl = signals.useSignal("");
    const previewType = signals.useSignal("");
    const previewIndex = signals.useSignal(-1);
    const touchStartX = hooks.useRef(0);
    const touchEndX = hooks.useRef(0);
    const previousAccountId = hooks.useRef(void 0);
    const downloadingFiles = signals.useSignal( new Set());
    const convertingFiles = signals.useSignal( new Set());
    hooks.useEffect(() => {
      if (account?.id !== previousAccountId.current) {
        typeFilter.value = "all";
        currentPage.value = 1;
        previousAccountId.current = account?.id;
      }
    }, [account?.id]);
    if (!account) return null;
    const ITEMS_PER_PAGE = 5;
    const filteredTimeline = typeFilter.value === "all" ? account.timeline : account.timeline.filter((item) => item.type === typeFilter.value);
    const totalPages = Math.ceil(filteredTimeline.length / ITEMS_PER_PAGE);
    const startIndex = (currentPage.value - 1) * ITEMS_PER_PAGE;
    const endIndex = startIndex + ITEMS_PER_PAGE;
    const currentItems = filteredTimeline.slice(startIndex, endIndex);
    const handleTypeFilter = (type) => {
      typeFilter.value = type;
      currentPage.value = 1;
    };
    const handleOpenFile = (url) => {
      window.open(url, "_blank", "noopener,noreferrer");
    };
    const handleDownloadFile = async (url, date, type, tweetId) => {
      const fileKey = `${tweetId}_${url}`;
      if (downloadingFiles.value.has(fileKey)) {
        return;
      }
      try {
        downloadingFiles.value = new Set([...downloadingFiles.value, fileKey]);
        const shouldConvertGif = type === "animated_gif" && (appOptionsManager.get("convertAnimatedGifs") ?? true);
        let finalBlob;
        let ext = "jpg";
        if (shouldConvertGif) {
          convertingFiles.value = new Set([...convertingFiles.value, fileKey]);
          try {
            const gifBlob = await convertVideoToGif(url);
            if (gifBlob) {
              finalBlob = gifBlob;
              ext = "gif";
            } else {
              const response = await fetch(url);
              finalBlob = await response.blob();
              ext = "mp4";
            }
          } catch (error) {
            console.warn("GIF conversion failed, downloading original:", error);
            const response = await fetch(url);
            finalBlob = await response.blob();
            ext = "mp4";
          } finally {
            convertingFiles.value = new Set([...convertingFiles.value].filter((k) => k !== fileKey));
          }
        } else {
          const response = await fetch(url);
          finalBlob = await response.blob();
          if (type === "photo") {
            const photoMatch = url.match(/format=(\w+)/);
            ext = photoMatch?.[1] || "jpg";
          } else if (type === "video") {
            ext = "mp4";
          } else if (type === "animated_gif") {
            ext = "mp4";
          }
        }
        const formatDateForFilename = (dateStr2) => {
          const m = dateStr2.match(/(\d{4})-(\d{2})-(\d{2}).*?(\d{2}):(\d{2}):(\d{2})/);
          if (m) {
            const [, y, mo, d, h2, mi, s] = m;
            return `${y}${mo}${d}_${h2}${mi}${s}`;
          }
          const d2 = new Date(dateStr2);
          if (!isNaN(d2.getTime())) {
            const pad = (n) => String(n).padStart(2, "0");
            return `${d2.getFullYear()}${pad(d2.getMonth() + 1)}${pad(d2.getDate())}_${pad(d2.getHours())}${pad(d2.getMinutes())}${pad(d2.getSeconds())}`;
          }
          return dateStr2.replace(/\D/g, "");
        };
        const dateStr = formatDateForFilename(date);
        const filename = `${account.username}_${dateStr}_${tweetId}.${ext}`;
        const link = document.createElement("a");
        link.href = URL.createObjectURL(finalBlob);
        link.download = filename;
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
        URL.revokeObjectURL(link.href);
      } catch (error) {
        console.error("Failed to download file:", error);
      } finally {
        downloadingFiles.value = new Set([...downloadingFiles.value].filter((k) => k !== fileKey));
      }
    };
    const convertVideoToGif = (videoUrl) => {
      return new Promise((resolve) => {
        if (!gifshot.isExistingVideoGIFSupported()) {
          console.warn("GIF conversion not supported in this browser");
          resolve(null);
          return;
        }
        const gifOptions = getGifShotOptions();
        {
          getVideoDimensions(videoUrl).then(({ width, height }) => {
            gifshot.createGIF({
              video: videoUrl,
              gifWidth: width,
              gifHeight: height,
              ...gifOptions
            }, (obj) => {
              handleGifConversionResult(obj, resolve);
            });
          }).catch((error) => {
            console.error("Failed to get video dimensions:", error);
            gifshot.createGIF({
              video: videoUrl,
              ...gifOptions
            }, (obj) => {
              handleGifConversionResult(obj, resolve);
            });
          });
        }
      });
    };
    const handleGifConversionResult = (obj, resolve) => {
      if (obj.error) {
        console.error("GIF conversion failed:", obj.errorMsg);
        resolve(null);
      } else if (obj.image) {
        try {
          const dataUrl = obj.image;
          const base64Data = dataUrl.split(",")[1];
          if (!base64Data) {
            resolve(null);
            return;
          }
          const byteCharacters = atob(base64Data);
          const byteNumbers = new Array(byteCharacters.length);
          for (let i = 0; i < byteCharacters.length; i++) {
            byteNumbers[i] = byteCharacters.charCodeAt(i);
          }
          const byteArray = new Uint8Array(byteNumbers);
          const blob = new Blob([byteArray], { type: "image/gif" });
          resolve(blob);
        } catch (error) {
          console.error("Failed to create blob:", error);
          resolve(null);
        }
      } else {
        resolve(null);
      }
    };
    const getVideoDimensions = (videoUrl) => {
      return new Promise((resolve, reject) => {
        const video = document.createElement("video");
        video.crossOrigin = "anonymous";
        video.onloadedmetadata = () => {
          const width = video.videoWidth;
          const height = video.videoHeight;
          video.remove();
          if (width && height) {
            resolve({ width, height });
          } else {
            reject(new Error("Could not determine video dimensions"));
          }
        };
        video.onerror = () => {
          video.remove();
          reject(new Error("Failed to load video for dimension detection"));
        };
        video.src = videoUrl;
      });
    };
    const handleDeleteEntry = async (tweetId, url) => {
      const key = `${tweetId}|${url}`;
      deletingEntry.value = key;
      try {
        await onDeleteEntry(tweetId, url);
      } finally {
        deletingEntry.value = "";
      }
    };
    const getTypeIcon = (type) => {
      switch (type) {
        case "photo":
          return u(IconPhoto, { size: 16 });
        case "video":
          return u(IconVideo, { size: 16 });
        case "animated_gif":
          return u(IconGif, { size: 16 });
        default:
          return null;
      }
    };
    const formatDate = (timestamp) => {
      const fmt = appOptionsManager.get("dateTimeFormat") || "YYYY-MM-DD HH:mm:ss";
      return dayjs(timestamp).format(fmt);
    };
    const handleSwipeLeft = () => {
      if (previewIndex.value < filteredTimeline.length - 1) {
        const nextItem = filteredTimeline[previewIndex.value + 1];
        if (nextItem) {
          previewIndex.value = previewIndex.value + 1;
          previewUrl.value = nextItem.url;
          previewType.value = nextItem.type;
        }
      }
    };
    const handleSwipeRight = () => {
      if (previewIndex.value > 0) {
        const prevItem = filteredTimeline[previewIndex.value - 1];
        if (prevItem) {
          previewIndex.value = previewIndex.value - 1;
          previewUrl.value = prevItem.url;
          previewType.value = prevItem.type;
        }
      }
    };
    const handleTouchStart = (e) => {
      if (e.touches[0]) {
        touchStartX.current = e.touches[0].clientX;
        touchEndX.current = e.touches[0].clientX;
      }
    };
    const handleTouchMove = (e) => {
      if (e.touches[0]) {
        touchEndX.current = e.touches[0].clientX;
      }
    };
    const handleTouchEnd = () => {
      if (touchStartX.current === 0 || touchEndX.current === 0) {
        touchStartX.current = 0;
        touchEndX.current = 0;
        return;
      }
      const swipeThreshold = 50;
      const diff = touchStartX.current - touchEndX.current;
      if (Math.abs(diff) > swipeThreshold) {
        if (diff > 0) {
          handleSwipeLeft();
        } else {
          handleSwipeRight();
        }
      }
      touchStartX.current = 0;
      touchEndX.current = 0;
    };
    hooks.useEffect(() => {
      if (!previewUrl.value) return;
      const handleKeyDown = (e) => {
        if (e.key === "ArrowLeft" && previewIndex.value > 0) {
          const prevItem = filteredTimeline[previewIndex.value - 1];
          if (prevItem) {
            previewIndex.value = previewIndex.value - 1;
            previewUrl.value = prevItem.url;
            previewType.value = prevItem.type;
          }
        } else if (e.key === "ArrowRight" && previewIndex.value < filteredTimeline.length - 1) {
          const nextItem = filteredTimeline[previewIndex.value + 1];
          if (nextItem) {
            previewIndex.value = previewIndex.value + 1;
            previewUrl.value = nextItem.url;
            previewType.value = nextItem.type;
          }
        } else if (e.key === "Escape") {
          previewUrl.value = "";
          previewType.value = "";
          previewIndex.value = -1;
        }
      };
      window.addEventListener("keydown", handleKeyDown);
      return () => window.removeEventListener("keydown", handleKeyDown);
    }, [previewUrl.value, previewIndex.value, filteredTimeline]);
    return u(preact.Fragment, { children: [
u(Modal, { show: isOpen, onClose, title: t("Database"), children: u("div", { class: "space-y-4", children: [
u("div", { class: "card bg-base-200 border border-base-300", children: u("div", { class: "card-body p-4", children: u("div", { class: "flex items-center gap-4", children: [
u("div", { class: "avatar", children: u("div", { class: "w-16 rounded-box", children: u(
            "img",
            {
              src: account.account_info.profile_image,
              alt: account.account_info.nick,
              onError: (e) => {
                const target = e.target;
                target.src = 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="gray"%3E%3Ccircle cx="12" cy="12" r="10"/%3E%3C/svg%3E';
              }
            }
          ) }) }),
u("div", { class: "flex-grow", children: [
u("h3", { class: "font-semibold text-base", children: [
              account.account_info.nick,
              " ",
u("span", { class: "font-normal opacity-70", children: [
                "(@",
                account.username,
                ")"
              ] })
            ] }),
u("p", { class: "text-xs opacity-60 mb-1", children: [
u("span", { class: "font-bold", children: t("Joined") }),
              " ",
              formatDateTime(account.account_info.date, appOptionsManager.get("dateTimeFormat") || "YYYY-MM-DD HH:mm:ss")
            ] }),
u("div", { class: "flex gap-3 text-xs opacity-60", children: [
u("span", { children: [
u("span", { class: "font-bold", children: account.account_info.statuses_count.toLocaleString() }),
                " ",
                t("Posts")
              ] }),
u("span", { children: [
u("span", { class: "font-bold", children: account.account_info.followers_count.toLocaleString() }),
                " ",
                t("Followers")
              ] }),
u("span", { children: [
u("span", { class: "font-bold", children: account.account_info.friends_count.toLocaleString() }),
                " ",
                t("Following")
              ] })
            ] })
          ] }),
          onLoadDatabase && u("div", { class: "tooltip tooltip-left", "data-tip": t("Load database"), children: u(
            "button",
            {
              class: "btn btn-sm btn-square btn-soft btn-info",
              onClick: onLoadDatabase,
              "aria-label": t("Load database"),
              children: u(IconDatabaseImport, { size: 16 })
            }
          ) })
        ] }) }) }),
u("div", { class: "flex items-center gap-2 justify-between", children: [
u("div", { class: "flex items-center gap-2", children: [
u("div", { class: "tooltip", "data-tip": `${t("All")} (${account.timeline.length.toLocaleString()})`, children: u(
              "button",
              {
                class: `btn btn-sm btn-square ${typeFilter.value === "all" ? "btn-neutral" : "btn-ghost"}`,
                onClick: () => handleTypeFilter("all"),
                "aria-label": t("All"),
                children: u(IconLibraryPhoto, { size: 18 })
              }
            ) }),
u("div", { class: "tooltip", "data-tip": `${t("Image")} (${account.timeline.filter((i) => i.type === "photo").length.toLocaleString()})`, children: u(
              "button",
              {
                class: `btn btn-sm btn-square ${typeFilter.value === "photo" ? "btn-primary" : "btn-ghost"}`,
                onClick: () => handleTypeFilter("photo"),
                "aria-label": t("Image"),
                children: u(IconPhoto, { size: 18 })
              }
            ) }),
u("div", { class: "tooltip", "data-tip": `${t("Video")} (${account.timeline.filter((i) => i.type === "video").length.toLocaleString()})`, children: u(
              "button",
              {
                class: `btn btn-sm btn-square ${typeFilter.value === "video" ? "btn-secondary" : "btn-ghost"}`,
                onClick: () => handleTypeFilter("video"),
                "aria-label": t("Video"),
                children: u(IconVideo, { size: 18 })
              }
            ) }),
u("div", { class: "tooltip", "data-tip": `${t("GIF")} (${account.timeline.filter((i) => i.type === "animated_gif").length.toLocaleString()})`, children: u(
              "button",
              {
                class: `btn btn-sm btn-square ${typeFilter.value === "animated_gif" ? "btn-accent" : "btn-ghost"}`,
                onClick: () => handleTypeFilter("animated_gif"),
                "aria-label": t("GIF"),
                children: u(IconGif, { size: 18 })
              }
            ) })
          ] }),
          totalPages > 1 && u("div", { class: "join", children: [
u("div", { class: "tooltip tooltip-left", "data-tip": t("Home"), children: u(
              "button",
              {
                class: "join-item btn btn-sm",
                onClick: () => currentPage.value = 1,
                disabled: currentPage.value === 1,
                "aria-label": t("Home"),
                children: "«"
              }
            ) }),
u("div", { class: "tooltip tooltip-left", "data-tip": t("End"), children: u(
              "button",
              {
                class: "join-item btn btn-sm",
                onClick: () => currentPage.value = totalPages,
                disabled: currentPage.value === totalPages,
                "aria-label": t("End"),
                children: "»"
              }
            ) })
          ] })
        ] }),
u("div", { class: "space-y-4", children: currentItems.map((item) => {
          const key = `${item.tweet_id}|${item.url}`;
          const fileKey = `${item.tweet_id}_${item.url}`;
          const isDeleting = deletingEntry.value === key;
          const isDownloading = downloadingFiles.value.has(fileKey);
          const isConverting = convertingFiles.value.has(fileKey);
          return u("div", { class: "relative w-full", children: [
u(
              "button",
              {
                class: "btn btn-circle btn-xs btn-error absolute -top-2 -right-2 z-10",
                onClick: () => handleDeleteEntry(item.tweet_id, item.url),
                disabled: isDeleting || isDownloading,
                children: isDeleting ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconTrash, { size: 12 })
              }
            ),
u("div", { class: "card bg-base-200 border border-base-300", children: u("div", { class: "card-body p-3", children: u("div", { class: "flex items-center gap-3", children: [
u("div", { class: "flex-shrink-0", children: u("div", { class: `btn btn-xs btn-square btn-soft no-animation pointer-events-none ${item.type === "photo" ? "btn-primary" : item.type === "video" ? "btn-secondary" : "btn-accent"}`, children: getTypeIcon(item.type) }) }),
u("div", { class: "flex-grow min-w-0", children: [
u(
                  "a",
                  {
                    class: "link link-hover text-sm font-mono",
                    href: `https://x.com/${account.username}/status/${item.tweet_id}`,
                    target: "_blank",
                    rel: "noopener noreferrer",
                    children: item.tweet_id
                  }
                ),
u("p", { class: "text-xs opacity-60", children: formatDate(item.date) })
              ] }),
u("div", { class: "flex-shrink-0 flex items-center gap-1", children: [
u("div", { class: "tooltip tooltip-left", "data-tip": t("Preview"), children: u(
                  "button",
                  {
                    class: "btn btn-xs btn-square",
                    onClick: () => {
                      const itemIndex = filteredTimeline.findIndex((i) => `${i.tweet_id}|${i.url}` === key);
                      previewIndex.value = itemIndex;
                      previewUrl.value = item.url;
                      previewType.value = item.type;
                    },
                    "aria-label": t("Preview"),
                    disabled: isDeleting,
                    children: u(IconEye, { size: 14 })
                  }
                ) }),
u("div", { class: "tooltip tooltip-left", "data-tip": t("Open"), children: u(
                  "button",
                  {
                    class: "btn btn-xs btn-square",
                    onClick: () => handleOpenFile(item.url),
                    "aria-label": t("Open"),
                    disabled: isDeleting,
                    children: u(IconExternalLink, { size: 14 })
                  }
                ) }),
u("div", { class: "tooltip tooltip-left", "data-tip": isConverting ? t("Converting...") : item.type === "animated_gif" && (appOptionsManager.get("convertAnimatedGifs") ?? true) ? t("Convert & Download") : t("Download"), children: u(
                  "button",
                  {
                    class: `btn btn-xs btn-square ${isConverting ? "btn-warning" : "btn-success"}`,
                    onClick: () => handleDownloadFile(item.url, item.date, item.type, item.tweet_id),
                    "aria-label": isConverting ? t("Converting...") : item.type === "animated_gif" && (appOptionsManager.get("convertAnimatedGifs") ?? true) ? t("Convert & Download") : t("Download"),
                    disabled: isDeleting || isDownloading,
                    children: isDownloading ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconFileDownload, { size: 14 })
                  }
                ) })
              ] })
            ] }) }) })
          ] }, key);
        }) }),
        totalPages > 1 && u("div", { class: "flex justify-center", children: u("div", { class: "join", children: [
u(
            "button",
            {
              class: "join-item btn btn-sm",
              onClick: () => currentPage.value = Math.max(1, currentPage.value - 1),
              disabled: currentPage.value === 1,
              children: "«"
            }
          ),
u("button", { class: "join-item btn btn-sm", children: [
            currentPage.value,
            "/",
            totalPages
          ] }),
u(
            "button",
            {
              class: "join-item btn btn-sm",
              onClick: () => currentPage.value = Math.min(totalPages, currentPage.value + 1),
              disabled: currentPage.value === totalPages,
              children: "»"
            }
          )
        ] }) }),
        filteredTimeline.length === 0 && u("div", { class: "text-center py-8 opacity-50", children: u("p", { children: t("No media files found") }) })
      ] }) }),
      previewUrl.value && $(
u(
          "div",
          {
            class: "fixed inset-0 bg-black/90 backdrop-blur-sm flex items-center justify-center z-[1000]",
            onTouchStart: handleTouchStart,
            onTouchMove: handleTouchMove,
            onTouchEnd: handleTouchEnd,
            children: [
u(
                "button",
                {
                  class: "btn btn-square btn-error absolute top-4 right-4 z-10",
                  onClick: () => {
                    previewUrl.value = "";
                    previewType.value = "";
                    previewIndex.value = -1;
                  },
                  "aria-label": t("Close"),
                  children: u(IconX, { size: 24 })
                }
              ),
u("div", { class: "absolute bottom-4 left-1/2 transform -translate-x-1/2 btn btn-neutral", children: u("span", { class: "text-base", children: [
                (previewIndex.value + 1).toLocaleString(),
                " / ",
                filteredTimeline.length.toLocaleString()
              ] }) }),
              previewIndex.value > 0 && u(
                "button",
                {
                  class: "btn btn-circle btn-lg btn-neutral absolute left-4 hidden md:flex",
                  onClick: () => {
                    const prevItem = filteredTimeline[previewIndex.value - 1];
                    if (prevItem) {
                      previewIndex.value = previewIndex.value - 1;
                      previewUrl.value = prevItem.url;
                      previewType.value = prevItem.type;
                    }
                  },
                  "aria-label": t("Prev"),
                  children: u(IconChevronLeft, { size: 32 })
                }
              ),
              previewIndex.value < filteredTimeline.length - 1 && u(
                "button",
                {
                  class: "btn btn-circle btn-lg btn-neutral absolute right-4 hidden md:flex",
                  onClick: () => {
                    const nextItem = filteredTimeline[previewIndex.value + 1];
                    if (nextItem) {
                      previewIndex.value = previewIndex.value + 1;
                      previewUrl.value = nextItem.url;
                      previewType.value = nextItem.type;
                    }
                  },
                  "aria-label": t("Next"),
                  children: u(IconChevronRight, { size: 32 })
                }
              ),
              previewType.value === "photo" ? u(
                "img",
                {
                  src: previewUrl.value,
                  alt: "Preview",
                  class: "max-w-full max-h-full object-contain"
                }
              ) : u(
                "video",
                {
                  src: previewUrl.value,
                  controls: true,
                  autoplay: true,
                  class: "max-w-full max-h-full"
                }
              )
            ]
          }
        ),
        document.getElementById("tmd-root")?.shadowRoot?.getElementById("tmd-portal-root") || document.getElementById("tmd-root")?.shadowRoot || document.body
      )
    ] });
  }
  function Database({ isVisible, onCountChange, onLoadToDashboard } = {}) {
    const { t, i18n } = useTranslation();
    const isArabic = (i18n.language || "").startsWith("ar");
    const accounts = signals.useSignal([]);
    const currentPage = signals.useSignal(1);
    const totalPages = signals.useSignal(1);
    const isLoading = signals.useSignal(true);
    const exportingId = signals.useSignal(null);
    const deletingId = signals.useSignal(null);
    const accountToDelete = signals.useSignal(null);
    const showDeleteModal = signals.useSignal(false);
    const isImporting = signals.useSignal(false);
    const isExportingAll = signals.useSignal(false);
    const totalCount = signals.useSignal(0);
    const showClearModal = signals.useSignal(false);
    const isClearingAll = signals.useSignal(false);
    const fileInputRef = hooks.useRef(null);
    const filterByBatch = signals.useSignal(false);
    const hasInitialLoad = signals.useSignal(false);
    const showViewModal = signals.useSignal(false);
    const viewingAccount = signals.useSignal(null);
    const batchCount = signals.useSignal(0);
    const handleImportClick = () => fileInputRef.current?.click();
    const processJsonFile = async (text, fileName) => {
      try {
        const data = JSON.parse(text);
        const account = {
          username: data.username,
          account_info: data.account_info,
          metadata: data.metadata,
          timeline: data.timeline,
          cached_at: data.cached_at || Date.now(),
          batch_mode: data.batch_mode,
          batch_identifier: data.batch_identifier,
          timeline_type: data.timeline_type,
          media_type: data.media_type
        };
        if (!account.username || !account.account_info || !account.metadata || !Array.isArray(account.timeline)) {
          console.warn("Skipped invalid account export file:", fileName);
          return;
        }
        await mediaDownloaderDB.insertAccount(account);
      } catch (err) {
        console.error("Failed to process file:", fileName, err);
      }
    };
    const importAccounts = async (files) => {
      isImporting.value = true;
      try {
        for (const file of Array.from(files)) {
          try {
            if (file.name.toLowerCase().endsWith(".zip")) {
              const arrayBuffer = await file.arrayBuffer();
              const uint8Array = new Uint8Array(arrayBuffer);
              fflate.unzip(uint8Array, async (err, unzipped) => {
                if (err) {
                  console.error("Failed to unzip file:", file.name, err);
                  return;
                }
                for (const [fileName, fileData] of Object.entries(unzipped)) {
                  if (fileName.toLowerCase().endsWith(".json")) {
                    const text = new TextDecoder().decode(fileData);
                    await processJsonFile(text, fileName);
                  }
                }
                await loadAccounts();
                currentPage.value = 1;
              });
            } else if (file.name.toLowerCase().endsWith(".json")) {
              const text = await file.text();
              await processJsonFile(text, file.name);
            } else {
              console.warn("Skipped unsupported file type:", file.name);
            }
          } catch (err) {
            console.error("Failed to import file:", file.name, err);
          }
        }
        await loadAccounts();
        currentPage.value = 1;
      } finally {
        isImporting.value = false;
      }
    };
    const onFilesSelected = async (e) => {
      const input = e.currentTarget;
      const files = input.files;
      if (files && files.length) {
        await importAccounts(files);
      }
      input.value = "";
    };
    const ITEMS_PER_PAGE = 3;
    const dateFormat = signals.useSignal(appOptionsManager.get("dateTimeFormat"));
    hooks.useEffect(() => {
      appOptionsManager.signal.subscribe(() => {
        dateFormat.value = appOptionsManager.get("dateTimeFormat");
      });
    }, []);
    hooks.useEffect(() => {
      loadAccounts();
    }, [currentPage.value]);
    hooks.useEffect(() => {
      currentPage.value = 1;
      loadAccounts();
    }, [filterByBatch.value]);
    hooks.useEffect(() => {
      if (isVisible && !hasInitialLoad.value) {
        loadAccounts();
      }
    }, [isVisible]);
    hooks.useEffect(() => {
      if (hasInitialLoad.value) {
        loadAccounts();
      }
    }, [dbState.dbChangeSignal.value]);
    const loadAccounts = async () => {
      try {
        isLoading.value = true;
        const [accountsData, totalCountValue, batchCountValue] = await Promise.all([
          mediaDownloaderDB.getAccounts(currentPage.value, ITEMS_PER_PAGE, filterByBatch.value),
          mediaDownloaderDB.getAccountsCount(filterByBatch.value),
          mediaDownloaderDB.getAccountsCount(true)
        ]);
        accounts.value = accountsData;
        totalCount.value = totalCountValue;
        batchCount.value = batchCountValue;
        totalPages.value = Math.ceil(totalCountValue / ITEMS_PER_PAGE);
        onCountChange?.(totalCountValue);
        hasInitialLoad.value = true;
      } catch (error) {
        console.error("Failed to load accounts:", error);
      } finally {
        isLoading.value = false;
      }
    };
    const exportAccount = async (account) => {
      if (!account.id) return;
      try {
        exportingId.value = account.id;
        const fmt = dateFormat.value || appOptionsManager.get("dateTimeFormat") || "YYYY-MM-DD HH:mm:ss";
        const now = dayjs();
        const exportData = {
          username: account.username,
          account_info: account.account_info,
          metadata: account.metadata,
          timeline: account.timeline,
          cached_at: account.cached_at,
          batch_mode: account.batch_mode,
          batch_identifier: account.batch_identifier,
          timeline_type: account.timeline_type,
          media_type: account.media_type,
          cached_at_formatted: dayjs(account.cached_at).format(fmt),
          exported_at: now.valueOf(),
          exported_at_formatted: now.format(fmt),
          date_time_format: fmt
        };
        const filenameTs = now.format("YYYYMMDD_HHmmss");
        const batchSuffix = account.batch_mode && account.batch_mode !== "single" ? "_Batch" : "";
        const filename = `${sanitizeFilename(account.username)}_${filenameTs}${batchSuffix}.json`;
        const blob = new Blob([JSON.stringify(exportData, null, 2)], {
          type: "application/json"
        });
        fileSaverEs.saveAs(blob, filename);
      } catch (error) {
        console.error("Failed to export account:", error);
      } finally {
        exportingId.value = null;
      }
    };
    const openDeleteDialog = (account) => {
      console.log("Opening delete dialog for:", account.username);
      accountToDelete.value = account;
      showDeleteModal.value = true;
    };
    const confirmDelete = async () => {
      const account = accountToDelete.value;
      if (!account?.id) return;
      try {
        deletingId.value = account.id;
        await mediaDownloaderDB.deleteAccount(account.id);
        await loadAccounts();
        showDeleteModal.value = false;
      } catch (error) {
        console.error("Failed to delete account:", error);
      } finally {
        deletingId.value = null;
        accountToDelete.value = null;
      }
    };
    const closeDeleteDialog = () => {
      showDeleteModal.value = false;
      accountToDelete.value = null;
    };
    const openClearDialog = () => {
      showClearModal.value = true;
    };
    const closeClearDialog = () => {
      showClearModal.value = false;
    };
    const handleDeleteEntry = async (tweetId, url) => {
      if (!viewingAccount.value?.id) return;
      try {
        const account = viewingAccount.value;
        const updatedTimeline = account.timeline.filter(
          (item) => !(item.tweet_id === tweetId && item.url === url)
        );
        await mediaDownloaderDB.updateAccount(account.id, {
          ...account,
          timeline: updatedTimeline,
          metadata: {
            ...account.metadata,
            new_entries: updatedTimeline.length
          }
        });
        viewingAccount.value = {
          ...account,
          timeline: updatedTimeline,
          metadata: {
            ...account.metadata,
            new_entries: updatedTimeline.length
          }
        };
        await loadAccounts();
      } catch (error) {
        console.error("Failed to delete entry:", error);
      }
    };
    const handleLoadDatabase = () => {
      if (!viewingAccount.value?.username || !onLoadToDashboard) return;
      const username = viewingAccount.value.username;
      showViewModal.value = false;
      requestAnimationFrame(() => {
        onLoadToDashboard(username);
        viewingAccount.value = null;
      });
    };
    const confirmClearAll = async () => {
      try {
        isClearingAll.value = true;
        await mediaDownloaderDB.clearAll();
        currentPage.value = 1;
        await loadAccounts();
        showClearModal.value = false;
      } catch (error) {
        console.error("Failed to clear database:", error);
      } finally {
        isClearingAll.value = false;
      }
    };
    const formatDate = (timestamp) => {
      const fmt = dateFormat.value || appOptionsManager.get("dateTimeFormat") || "YYYY-MM-DD HH:mm:ss";
      return dayjs(timestamp).format(fmt);
    };
    const formatTimeAgo = (timestamp) => {
      const now = dayjs();
      const then = dayjs(timestamp);
      const diff = now.diff(then, "second");
      const years = Math.floor(diff / (365 * 24 * 60 * 60));
      const days = Math.floor(diff % (365 * 24 * 60 * 60) / (24 * 60 * 60));
      const hours = Math.floor(diff % (24 * 60 * 60) / (60 * 60));
      const minutes = Math.floor(diff % (60 * 60) / 60);
      const seconds = diff % 60;
      const parts = [];
      if (years > 0) parts.push(`${years}y`);
      if (days > 0) parts.push(`${days}d`);
      if (hours > 0) parts.push(`${hours}h`);
      if (minutes > 0) parts.push(`${minutes}m`);
      if (seconds > 0 && parts.length === 0) parts.push(`${seconds}s`);
      return parts.slice(0, 2).join(" ") + " ago";
    };
    const goToPage = (page) => {
      if (page >= 1 && page <= totalPages.value) {
        currentPage.value = page;
      }
    };
    const exportAllAccounts = async () => {
      try {
        isExportingAll.value = true;
        const allAccounts = await mediaDownloaderDB.getAllAccounts();
        if (!allAccounts.length) return;
        const fmt = dateFormat.value || appOptionsManager.get("dateTimeFormat") || "YYYY-MM-DD HH:mm:ss";
        const now = dayjs();
        const exportTs = now.format("YYYYMMDD_HHmmss");
        const files = allAccounts.map((account) => {
          const exportData = {
            username: account.username,
            account_info: account.account_info,
            metadata: account.metadata,
            timeline: account.timeline,
            cached_at: account.cached_at,
            batch_mode: account.batch_mode,
            batch_identifier: account.batch_identifier,
            timeline_type: account.timeline_type,
            media_type: account.media_type,
            cached_at_formatted: dayjs(account.cached_at).format(fmt),
            exported_at: now.valueOf(),
            exported_at_formatted: now.format(fmt),
            date_time_format: fmt
          };
          const batchSuffix = account.batch_mode && account.batch_mode !== "single" ? "_Batch" : "";
          const fileName = `${sanitizeFilename(account.username)}_${exportTs}${batchSuffix}.json`;
          const content = JSON.stringify(exportData, null, 2);
          const blob = new Blob([content], { type: "application/json" });
          return { name: fileName, blob };
        });
        let index = 0;
        const readableZipStream = createWriter({
          pull(ctrl) {
            if (index >= files.length) {
              ctrl.close();
              return;
            }
            const file = files[index];
            if (!file) {
              ctrl.close();
              return;
            }
            index += 1;
            ctrl.enqueue({
              name: file.name,
              stream: () => file.blob.stream()
            });
          }
        });
        const chunks = [];
        const writableOutputStream = new WritableStream({
          write(chunk) {
            chunks.push(chunk);
          }
        });
        await readableZipStream.pipeTo(writableOutputStream);
        const arrayBuffer = await new Blob(chunks).arrayBuffer();
        const zipBlob = new Blob([arrayBuffer]);
        const zipFilename = `twitter-x-media-batch-downloader-pro_${exportTs}.zip`;
        fileSaverEs.saveAs(zipBlob, zipFilename);
      } catch (error) {
        console.error("Failed to export all accounts:", error);
      } finally {
        isExportingAll.value = false;
      }
    };
    if (isLoading.value) {
      return u("div", { class: "space-y-6", children: [
u("div", { class: "flex items-center justify-between", children: [
u("div", { class: "flex items-center gap-2", children: [
u("div", { class: "skeleton h-8 w-24" }),
u("div", { class: "skeleton h-8 w-24" })
          ] }),
u("div", { class: "flex items-center gap-2", children: [
u("div", { class: "skeleton h-8 w-8" }),
u("div", { class: "skeleton h-8 w-8" })
          ] })
        ] }),
        [1, 2, 3].map((i) => u("div", { class: "card bg-base-200 border border-base-300 w-full", children: u("div", { class: "card-body p-4", children: u("div", { class: "flex items-center gap-4", children: [
u("div", { class: "skeleton w-16 h-16 rounded-xl shrink-0" }),
u("div", { class: "flex-grow space-y-2", children: [
u("div", { class: "skeleton h-4 w-32" }),
u("div", { class: "skeleton h-3 w-24" }),
u("div", { class: "flex gap-2", children: [
u("div", { class: "skeleton h-5 w-16" }),
u("div", { class: "skeleton h-5 w-16" }),
u("div", { class: "skeleton h-5 w-12" })
            ] }),
u("div", { class: "skeleton h-3 w-40" })
          ] }),
u("div", { class: "skeleton w-8 h-8 rounded-lg shrink-0" })
        ] }) }) }, i))
      ] });
    }
    return u(preact.Fragment, { children: [
u("div", { class: "space-y-6", children: [
u("div", { class: "flex items-center justify-between", children: [
u("div", { class: "flex items-center gap-2", children: [
u(
              "input",
              {
                type: "file",
                class: "hidden",
                ref: fileInputRef,
                accept: ".json,.zip,application/json,application/zip",
                multiple: true,
                onChange: onFilesSelected
              }
            ),
u("div", { class: "tooltip tooltip-right", "data-tip": t("Supports JSON and ZIP formats"), children: u(
              "button",
              {
                class: "btn btn-primary btn-sm",
                onClick: handleImportClick,
                disabled: isImporting.value,
                children: isImporting.value ? u(preact.Fragment, { children: [
u("span", { class: "loading loading-spinner loading-xs" }),
                  t("Importing...")
                ] }) : u(preact.Fragment, { children: [
u(IconDatabaseImport, { size: 16 }),
                  t("Import")
                ] })
              }
            ) }),
u("div", { class: "tooltip tooltip-right", "data-tip": t("Export All Data"), children: u(
              "button",
              {
                class: "btn btn-secondary btn-sm",
                onClick: async () => {
                  await exportAllAccounts();
                },
                "aria-label": t("Export All Data"),
                disabled: isExportingAll.value || isImporting.value || totalCount.value === 0,
                children: isExportingAll.value ? u(preact.Fragment, { children: [
u("span", { class: "loading loading-spinner loading-xs" }),
                  t("Exporting...")
                ] }) : u(preact.Fragment, { children: [
u(IconDatabaseExport, { size: 16 }),
                  t("Export")
                ] })
              }
            ) })
          ] }),
u("div", { class: "flex items-center gap-2", children: [
u("div", { class: "tooltip tooltip-left", "data-tip": t("Filter by Batch"), children: u(
              "button",
              {
                class: `btn btn-sm btn-square ${filterByBatch.value ? "btn-active btn-info" : "btn"}`,
                "aria-label": t("Filter by Batch"),
                onClick: () => filterByBatch.value = !filterByBatch.value,
                disabled: isImporting.value || isExportingAll.value || isClearingAll.value || batchCount.value === 0,
                children: u(IconStack2, { size: 16 })
              }
            ) }),
u("div", { class: "tooltip tooltip-left", "data-tip": t("Clear"), children: u(
              "button",
              {
                class: "btn btn-warning btn-sm btn-square",
                "aria-label": t("Clear"),
                onClick: openClearDialog,
                disabled: isImporting.value || isExportingAll.value || isClearingAll.value || totalCount.value === 0,
                children: u(IconDatabaseX, { size: 16 })
              }
            ) })
          ] })
        ] }),
        accounts.value.map((account) => u("div", { class: "relative w-full", children: [
u(
            "button",
            {
              class: "btn btn-circle btn-xs btn-error absolute -top-2 -right-2 z-10",
              onClick: () => openDeleteDialog(account),
              children: deletingId.value === account.id ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconTrash, { size: 12 })
            }
          ),
u("div", { class: "card bg-base-200 border border-base-300 w-full", children: u("div", { class: "card-body p-4", children: u("div", { class: "flex items-center gap-4", children: [
u("div", { class: "avatar", children: u("div", { class: "w-16 rounded-xl", children: u(
              "img",
              {
                src: account.account_info.profile_image,
                alt: account.account_info.nick,
                onError: (e) => {
                  const target = e.target;
                  target.src = 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="gray"%3E%3Ccircle cx="12" cy="12" r="10"/%3E%3C/svg%3E';
                }
              }
            ) }) }),
u("div", { class: "flex-grow", children: [
u("div", { class: "flex items-center gap-2", children: [
u("h3", { class: "font-semibold text-base", children: account.account_info.nick }),
                account.batch_mode && account.batch_mode !== "single" && u("div", { class: "badge badge-soft badge-info badge-sm", children: t("Batch") })
              ] }),
u("p", { class: "text-sm opacity-70", children: u(
                "a",
                {
                  class: "link link-hover",
                  href: `https://x.com/${account.username}`,
                  target: "_blank",
                  rel: "noopener noreferrer",
                  children: [
                    "@",
                    account.username
                  ]
                }
              ) }),
u("div", { class: "flex gap-2 mt-1", children: [
                account.timeline_type && u("div", { class: "badge badge-soft badge-primary badge-sm", children: t(account.timeline_type === "media" ? "Media" : account.timeline_type === "timeline" ? "Timeline" : account.timeline_type === "tweets" ? "Tweets" : "Replies") }),
                account.media_type && u("div", { class: "badge badge-soft badge-secondary badge-sm", children: t(account.media_type === "all" ? "All" : account.media_type === "image" ? "Image" : account.media_type === "video" ? "Video" : "GIF") }),
u("div", { class: "badge badge-soft badge-accent badge-sm", children: account.metadata.new_entries.toLocaleString() })
              ] }),
u("p", { class: "text-xs opacity-50 mt-1", children: formatDate(account.cached_at) }),
u("p", { class: "text-xs opacity-40 mt-0.5", children: formatTimeAgo(account.cached_at) })
            ] }),
u("div", { class: "flex items-center gap-1", children: [
u("div", { class: "tooltip tooltip-left", "data-tip": t("View Database"), children: u(
                "button",
                {
                  class: "btn btn-sm btn-square",
                  "aria-label": t("View Database"),
                  onClick: () => {
                    viewingAccount.value = account;
                    showViewModal.value = true;
                  },
                  disabled: deletingId.value === account.id,
                  children: u(IconDatabaseSearch, { size: 16 })
                }
              ) }),
u("div", { class: "tooltip tooltip-left", "data-tip": t("Export"), children: u(
                "button",
                {
                  class: "btn btn-accent btn-sm btn-square",
                  "aria-label": t("Export"),
                  onClick: () => exportAccount(account),
                  disabled: exportingId.value === account.id || deletingId.value === account.id,
                  children: exportingId.value === account.id ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconDatabaseExport, { size: 16 })
                }
              ) })
            ] })
          ] }) }) })
        ] }, account.id)),
        accounts.value.length === 0 && u("div", { class: "text-center", children: [
u("div", { class: "opacity-50 mb-2", children: u(IconDatabase, { size: 36, class: "mx-auto" }) }),
u("p", { class: "text-sm font-medium mb-1", children: t("No accounts yet") }),
u("p", { class: "text-xs opacity-70", children: t("Use Dashboard to fetch data.") })
        ] }),
        totalPages.value > 1 && u("div", { class: "flex justify-center", children: u("div", { class: "join", children: [
u(
            "button",
            {
              class: "join-item btn btn-sm",
              onClick: () => goToPage(currentPage.value - 1),
              disabled: currentPage.value === 1,
              children: "«"
            }
          ),
u("button", { class: "join-item btn btn-sm", children: [
            currentPage.value,
            "/",
            totalPages.value
          ] }),
u(
            "button",
            {
              class: "join-item btn btn-sm",
              onClick: () => goToPage(currentPage.value + 1),
              disabled: currentPage.value === totalPages.value,
              children: "»"
            }
          )
        ] }) })
      ] }),
u(Modal, { show: showDeleteModal.value, onClose: closeDeleteDialog, title: t("Delete Account Data"), class: "max-w-sm", children: u("div", { class: "space-y-2", children: [
u("p", { class: `text-sm${isArabic ? " text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: t("Are you sure you want to delete account data? This action cannot be undone", { username: accountToDelete.value?.username || "" }) }),
u("div", { class: "modal-action", children: [
u(
            "button",
            {
              class: "btn btn-sm btn-ghost",
              onClick: closeDeleteDialog,
              children: t("Cancel")
            }
          ),
u(
            "button",
            {
              class: "btn btn-sm btn-error",
              onClick: confirmDelete,
              disabled: deletingId.value === accountToDelete.value?.id,
              children: deletingId.value === accountToDelete.value?.id ? u(preact.Fragment, { children: [
u("span", { class: "loading loading-spinner loading-xs" }),
                t("Deleting...")
              ] }) : u(preact.Fragment, { children: [
u(IconTrash, { size: 16 }),
                t("Delete")
              ] })
            }
          )
        ] })
      ] }) }),
u(Modal, { show: showClearModal.value, onClose: closeClearDialog, title: t("Clear"), class: "max-w-sm", children: u("div", { class: "space-y-2", children: [
u("p", { class: `text-sm${isArabic ? " text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: t("Are you sure to clear all data in the database?") }),
u("div", { class: "modal-action", children: [
u(
            "button",
            {
              class: "btn btn-sm btn-ghost",
              onClick: closeClearDialog,
              children: t("Cancel")
            }
          ),
u(
            "button",
            {
              class: "btn btn-sm btn-warning",
              onClick: confirmClearAll,
              disabled: isClearingAll.value,
              children: isClearingAll.value ? u(preact.Fragment, { children: [
u("span", { class: "loading loading-spinner loading-xs" }),
                t("Deleting...")
              ] }) : u(preact.Fragment, { children: [
u(IconDatabaseX, { size: 16 }),
                t("Clear")
              ] })
            }
          )
        ] })
      ] }) }),
u(
        ViewDatabaseModal,
        {
          isOpen: showViewModal.value,
          onClose: () => {
            showViewModal.value = false;
            viewingAccount.value = null;
          },
          account: viewingAccount.value,
          onDeleteEntry: handleDeleteEntry,
          onLoadDatabase: handleLoadDatabase
        }
      )
    ] });
  }
  function Auth() {
    const { t, i18n } = useTranslation();
    const isArabic = (i18n.language || "").startsWith("ar");
    const authToken = signals.useSignal("");
    const patreonAuth = signals.useSignal("");
    const showAuthToken = signals.useSignal(false);
    const showPatreonAuth = signals.useSignal(false);
    const isPatreonValid = signals.useSignal(false);
    const isVerifying = signals.useSignal(false);
    const isGenerating = signals.useSignal(false);
    const verificationMessage = signals.useSignal("");
    const verificationSuccess = signals.useSignal(false);
    const generationMessage = signals.useSignal("");
    const generationSuccess = signals.useSignal(false);
    hooks.useEffect(() => {
      loadAuthSettings();
    }, []);
    hooks.useEffect(() => {
      const updateLocalToken = () => {
        if (authState.authToken.value && authState.authToken.value !== authToken.value) {
          authToken.value = authState.authToken.value;
        }
      };
      updateLocalToken();
      const unsubscribe = authState.authToken.subscribe(updateLocalToken);
      return unsubscribe;
    }, []);
    const loadAuthSettings = async () => {
      try {
        const settings = await mediaDownloaderDB.getAuthSettings();
        if (settings) {
          authToken.value = settings.auth_token;
          patreonAuth.value = settings.patreon_auth;
          isPatreonValid.value = Boolean(settings.patreon_verified) && settings.patreon_verified_auth === settings.patreon_auth;
          authState.authToken.value = settings.auth_token;
          authState.patreonAuth.value = settings.patreon_auth;
          authState.patreonVerified.value = isPatreonValid.value;
        }
      } catch (error) {
        console.error("Failed to load auth settings:", error);
      }
    };
    const autoSaveAuthToken = async (value) => {
      try {
        await mediaDownloaderDB.saveAuthSettings(value, patreonAuth.value);
        authState.authToken.value = value;
      } catch (error) {
        console.error("Failed to auto-save auth token:", error);
      }
    };
    const autoSavePatreonAuth = async (value) => {
      try {
        await mediaDownloaderDB.saveAuthSettings(authToken.value, value);
        await mediaDownloaderDB.setPatreonVerified(false);
        authState.patreonAuth.value = value;
        authState.patreonVerified.value = false;
      } catch (error) {
        console.error("Failed to auto-save patreon auth:", error);
      }
      isPatreonValid.value = false;
      verificationMessage.value = "";
    };
    const verifyPatreonAuth = async () => {
      if (!patreonAuth.value.trim()) {
        verificationMessage.value = t("Please enter Patreon auth first");
        setTimeout(() => verificationMessage.value = "", 2e3);
        return;
      }
      try {
        isVerifying.value = true;
        verificationMessage.value = "";
        const data = await mediaDownloaderAPI.verifyPatreonAuth(patreonAuth.value);
        isPatreonValid.value = data.valid;
        await mediaDownloaderDB.setPatreonVerified(data.valid);
        authState.patreonVerified.value = data.valid;
        verificationSuccess.value = data.valid;
        verificationMessage.value = data.valid ? t("Patreon auth verified successfully") : t("Invalid Patreon auth");
        setTimeout(() => verificationMessage.value = "", 2e3);
      } catch (error) {
        console.error("Verification error:", error);
        const raw = error instanceof Error ? error.message : "";
        const httpMatch = raw.match(/^HTTP error! status: (\d+)/);
        const msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || t("Verification failed. Please try again");
        verificationSuccess.value = false;
        verificationMessage.value = msg;
        setTimeout(() => verificationMessage.value = "", 2e3);
      } finally {
        isVerifying.value = false;
      }
    };
    const generateAuthToken = async () => {
      if (!isPatreonValid.value) {
        generationMessage.value = t("Please verify Patreon auth first");
        setTimeout(() => generationMessage.value = "", 2e3);
        return;
      }
      try {
        isGenerating.value = true;
        generationMessage.value = "";
        const data = await mediaDownloaderAPI.generateAuthToken(patreonAuth.value);
        if (data.auth_token) {
          authToken.value = data.auth_token;
          await autoSaveAuthToken(data.auth_token);
          authState.authToken.value = data.auth_token;
          generationSuccess.value = true;
          generationMessage.value = t("Token generated successfully", { current: data.current_index, total: data.total_tokens });
        } else {
          generationSuccess.value = false;
          generationMessage.value = t("Failed to generate token");
        }
        setTimeout(() => generationMessage.value = "", 2e3);
      } catch (error) {
        console.error("Generation error:", error);
        const raw = error instanceof Error ? error.message : "";
        const httpMatch = raw.match(/^HTTP error! status: (\d+)/);
        const msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || t("Token generation failed. Please try again");
        generationSuccess.value = false;
        generationMessage.value = msg;
        setTimeout(() => generationMessage.value = "", 2e3);
      } finally {
        isGenerating.value = false;
      }
    };
    return u("div", { class: "space-y-6", children: u("div", { class: "space-y-4", children: [
u("div", { children: [
u("label", { class: "label mb-1", children: u("span", { class: "text-sm", children: t("Patreon Auth") }) }),
u("div", { class: "join w-full", children: [
u("div", { class: "flex-1", children: u("label", { class: "input input-bordered input-sm join-item flex items-center gap-2 w-full", children: [
u("svg", { class: "h-4 w-4 opacity-50", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: u(
              "g",
              {
                strokeLinejoin: "round",
                strokeLinecap: "round",
                strokeWidth: "2.5",
                fill: "none",
                stroke: "currentColor",
                children: [
u("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10" }),
u("path", { d: "m9 12 2 2 4-4" })
                ]
              }
            ) }),
u(
              "input",
              {
                type: showPatreonAuth.value ? "text" : "password",
                class: "grow font-mono",
                placeholder: t("Enter your Patreon auth"),
                value: patreonAuth.value,
                onInput: (e) => {
                  const value = e.target.value;
                  patreonAuth.value = value;
                  autoSavePatreonAuth(value);
                }
              }
            ),
u(
              "span",
              {
                class: "cursor-pointer opacity-70 hover:opacity-100",
                onClick: () => showPatreonAuth.value = !showPatreonAuth.value,
                "aria-label": t("Toggle visibility"),
                children: showPatreonAuth.value ? u(IconEyeOff, { size: 14 }) : u(IconEye, { size: 14 })
              }
            )
          ] }) }),
u(
            "button",
            {
              class: `btn btn-sm join-item w-28 ${isPatreonValid.value ? "btn-success" : "btn-neutral"}`,
              onClick: verifyPatreonAuth,
              disabled: isVerifying.value || !patreonAuth.value.trim(),
              children: isVerifying.value ? u(preact.Fragment, { children: [
u("span", { class: "loading loading-spinner loading-xs" }),
                t("Verifying"),
                "..."
              ] }) : isPatreonValid.value ? u(preact.Fragment, { children: [
u(IconCircleCheck, { size: 16 }),
                t("Verified")
              ] }) : t("Verify")
            }
          )
        ] }),
        verificationMessage.value && u("div", { role: "alert", class: `alert alert-soft mt-2 ${verificationSuccess.value ? "alert-success" : "alert-error"}`, children: [
          verificationSuccess.value ? u(IconCircleCheck, { size: 20 }) : u(IconCircleX, { size: 20 }),
u("span", { dir: isArabic ? "rtl" : void 0, children: verificationMessage.value })
        ] })
      ] }),
u("div", { children: [
u("label", { class: "label mb-1", children: u("span", { class: "text-sm", children: t("Auth Token") }) }),
u("div", { class: "join w-full", children: [
u("div", { class: "flex-1", children: u("label", { class: "input input-bordered input-sm join-item flex items-center gap-2 w-full", children: [
u("svg", { class: "h-4 w-4 opacity-50", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: u(
              "g",
              {
                strokeLinejoin: "round",
                strokeLinecap: "round",
                strokeWidth: "2.5",
                fill: "none",
                stroke: "currentColor",
                children: [
u("rect", { width: "18", height: "11", x: "3", y: "11", rx: "2", ry: "2" }),
u("circle", { cx: "12", cy: "12", r: "2" }),
u("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })
                ]
              }
            ) }),
u(
              "input",
              {
                type: showAuthToken.value ? "text" : "password",
                class: "grow font-mono",
                placeholder: t("Enter your auth token"),
                value: authToken.value,
                onInput: (e) => {
                  const value = e.target.value;
                  authToken.value = value;
                  autoSaveAuthToken(value);
                }
              }
            ),
u(
              "span",
              {
                class: "cursor-pointer opacity-70 hover:opacity-100",
                onClick: () => showAuthToken.value = !showAuthToken.value,
                "aria-label": t("Toggle visibility"),
                children: showAuthToken.value ? u(IconEyeOff, { size: 14 }) : u(IconEye, { size: 14 })
              }
            )
          ] }) }),
u(
            "button",
            {
              class: "btn btn-neutral btn-sm join-item w-28",
              onClick: generateAuthToken,
              disabled: isGenerating.value || !isPatreonValid.value || patreonAuth.value.trim() === "xbatchdemo",
              children: isGenerating.value ? u(preact.Fragment, { children: [
u("span", { class: "loading loading-spinner loading-xs" }),
                t("Generating"),
                "..."
              ] }) : t("Generate")
            }
          )
        ] }),
        generationMessage.value && u("div", { role: "alert", class: `alert alert-soft mt-2 ${generationSuccess.value ? "alert-success" : "alert-error"}`, children: [
          generationSuccess.value ? u(IconCircleCheck, { size: 20 }) : u(IconCircleX, { size: 20 }),
u("span", { dir: isArabic ? "rtl" : void 0, children: generationMessage.value })
        ] })
      ] }),
u("div", { class: `mt-3 rounded-box bg-base-200 p-2 text-xs space-y-1 ${isArabic ? "text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: [
u("div", { children: [
          "• ",
          t("Use code"),
          " ",
u(
            "button",
            {
              type: "button",
              class: "text-primary opacity-80 hover:opacity-100 cursor-pointer",
              onClick: () => {
                patreonAuth.value = "xbatchdemo";
                autoSavePatreonAuth("xbatchdemo");
              },
              children: "xbatchdemo"
            }
          ),
          " ",
          t("for Patreon Auth, click Verify to unlock demo. Test at"),
          " ",
u("a", { class: "text-primary opacity-80 hover:opacity-100", href: "https://x.com/xbatchdemo", target: "_blank", rel: "noopener noreferrer", dir: "ltr", children: " @xbatchdemo" })
        ] }),
u("div", { children: [
          "• ",
          t("Need help with Auth Token? See"),
          " ",
u("a", { class: "text-primary opacity-80 hover:opacity-100", href: "https://www.patreon.com/posts/how-to-obtain-127206894", target: "_blank", rel: "noopener noreferrer", children: t("the guide") })
        ] }),
u("div", { children: [
          "• ",
u("a", { class: "text-primary opacity-80 hover:opacity-100", href: "https://www.patreon.com/exyezed/membership", target: "_blank", rel: "noopener noreferrer", children: t("Subscribe") }),
          " ",
          t("to get your Patreon Auth code and start downloading with ease!")
        ] }),
u("div", { children: [
          "• ",
          t("Report bugs or request features:"),
          " ",
u("a", { class: "text-primary opacity-80 hover:opacity-100", href: "mailto:[email protected]", children: "[email protected]" })
        ] })
      ] })
    ] }) });
  }
  function Settings() {
    const { t } = useTranslation();
    const [, force] = hooks.useState(0);
    const fetchMode = appOptionsManager.get("fetchMode") ?? "single";
    const isBatching = fetchMode !== "single";
    return u("div", { class: "space-y-4", children: [
u("div", { class: "flex items-center justify-between", children: [
u("span", { class: "text-sm flex items-center gap-1", children: [
          t("Fetch"),
u("div", { class: "tooltip tooltip-right", "data-tip": t("Use Batch/Auto Batch if single fetch fails"), children: u(IconInfoCircle, { size: 14, class: "opacity-70" }) })
        ] }),
u("div", { class: "flex flex-wrap items-center gap-3 justify-start", children: ["single", "batch", "auto"].map((mode) => u("label", { class: "label cursor-pointer gap-2", children: [
u(
            "input",
            {
              type: "radio",
              name: "fetch-mode",
              class: "radio radio-sm radio-primary",
              checked: (appOptionsManager.get("fetchMode") ?? "single") === mode,
              onChange: () => {
                appOptionsManager.set("fetchMode", mode);
                force((x) => x + 1);
              }
            }
          ),
u("span", { class: "label-text capitalize text-xs", children: mode === "auto" ? t("Auto Batch") : mode === "batch" ? t("Batch") : t("Single") })
        ] }, mode)) })
      ] }),
u("div", { class: "flex items-center justify-between", children: [
u("span", { class: "text-sm", children: t("Batch Size") }),
u(
          "input",
          {
            type: "text",
            class: `input input-bordered input-sm w-12 text-right ${!isBatching ? "opacity-50" : ""}`,
            value: String(appOptionsManager.get("batchSize") ?? 100),
            onInput: (e) => {
              const raw = e.target.value;
              const digits = raw.replace(/\D+/g, "");
              const v = parseInt(digits || "100", 10);
              const safe = Number.isFinite(v) && v >= 1 ? v : 100;
              appOptionsManager.set("batchSize", safe);
              force((x) => x + 1);
            },
            disabled: !isBatching
          }
        )
      ] }),
u("div", { class: "flex items-center justify-between", children: [
u("span", { class: "text-sm", children: t("Starting Batch") }),
u(
          "input",
          {
            type: "text",
            class: `input input-bordered input-sm w-12 text-right ${!isBatching ? "opacity-50" : ""}`,
            value: String(appOptionsManager.get("startingBatch") ?? 0),
            onInput: (e) => {
              const raw = e.target.value;
              const digits = raw.replace(/\D+/g, "");
              const v = parseInt(digits || "0", 10);
              const safe = Number.isFinite(v) && v >= 0 ? v : 0;
              appOptionsManager.set("startingBatch", safe);
              force((x) => x + 1);
            },
            disabled: !isBatching
          }
        )
      ] }),
u("div", { class: "divider my-2" }),
u("div", { class: "flex items-center justify-between", children: [
u("span", { class: "text-sm", children: t("Timeline") }),
u("div", { class: "flex flex-wrap items-center gap-3 justify-start", children: [
          { value: "media", label: "Media" },
          { value: "timeline", label: "Posts" },
          { value: "tweets", label: "Tweets" },
          { value: "with_replies", label: "Replies" }
        ].map((opt) => u("label", { class: "label cursor-pointer gap-2", children: [
u(
            "input",
            {
              type: "radio",
              name: "timeline-type",
              class: "radio radio-sm radio-primary",
              checked: (appOptionsManager.get("timelineType") ?? "media") === opt.value,
              onChange: () => {
                appOptionsManager.set("timelineType", opt.value);
                force((x) => x + 1);
              }
            }
          ),
u("span", { class: "label-text capitalize text-xs", children: t(opt.label) })
        ] }, opt.value)) })
      ] }),
u("div", { class: "flex items-center justify-between", children: [
u("span", { class: "text-sm", children: t("Media") }),
u("div", { class: "flex flex-wrap items-center gap-3 justify-start", children: [
          { value: "all", label: "All" },
          { value: "image", label: "Image" },
          { value: "video", label: "Video" },
          { value: "gif", label: "GIF" }
        ].map((opt) => u("label", { class: "label cursor-pointer gap-2", children: [
u(
            "input",
            {
              type: "radio",
              name: "media-type",
              class: "radio radio-sm radio-primary",
              checked: (appOptionsManager.get("mediaType") ?? "all") === opt.value,
              onChange: () => {
                appOptionsManager.set("mediaType", opt.value);
                force((x) => x + 1);
              }
            }
          ),
u("span", { class: "label-text capitalize text-xs", children: t(opt.label) })
        ] }, opt.value)) })
      ] }),
u("div", { class: "divider my-2" }),
u("div", { class: "flex justify-between items-center", children: [
u("span", { class: "text-sm flex items-center gap-1", children: [
          t("Convert Animated GIFs"),
u("div", { class: "tooltip tooltip-right", "data-tip": t("Larger size, same quality"), children: u(IconInfoCircle, { size: 14, class: "opacity-70" }) })
        ] }),
u(
          "input",
          {
            type: "checkbox",
            class: "toggle toggle-primary",
            checked: appOptionsManager.get("convertAnimatedGifs") ?? true,
            onChange: (e) => {
              const checked = e.target.checked;
              appOptionsManager.set("convertAnimatedGifs", checked);
              if (checked) {
                appOptionsManager.set("convertGifsExternal", false);
              }
              force((x) => x + 1);
            }
          }
        )
      ] }),
u("div", { class: "flex justify-between items-center", children: [
u("span", { class: "text-sm flex items-center gap-1", children: [
          t("Convert GIFs (External)"),
u("div", { class: "tooltip tooltip-right", "data-tip": t("Smaller size, same quality"), children: u(IconInfoCircle, { size: 14, class: "opacity-70" }) })
        ] }),
u(
          "input",
          {
            type: "checkbox",
            class: "toggle toggle-primary",
            checked: appOptionsManager.get("convertGifsExternal") ?? false,
            onChange: (e) => {
              const checked = e.target.checked;
              appOptionsManager.set("convertGifsExternal", checked);
              if (checked) {
                appOptionsManager.set("convertAnimatedGifs", false);
              }
              force((x) => x + 1);
            }
          }
        )
      ] }),
u("div", { class: "flex items-center justify-between", children: [
u("span", { class: "text-sm flex items-center gap-1", children: [
          t("Concurrent Downloads"),
u("div", { class: "tooltip tooltip-right", "data-tip": t("Use 10+ only with fast internet"), children: u(IconInfoCircle, { size: 14, class: "opacity-70" }) })
        ] }),
u("div", { class: "flex-1", children: u("div", { class: "flex justify-end", children: (() => {
          const allowed = Array.from({ length: 10 }, (_, i) => (i + 1) * 5);
          appOptionsManager.get("downloadConcurrency") ?? 10;
          allowed[0] ?? 10;
          for (const v of allowed) {
          }
          return u(
            "input",
            {
              type: "text",
              class: "input input-bordered input-sm w-12 text-right",
              value: String(appOptionsManager.get("downloadConcurrency") ?? 10),
              onInput: (e) => {
                const raw = e.target.value;
                const digits = raw.replace(/\D+/g, "");
                const v = parseInt(digits || "10", 10);
                const safe = Number.isFinite(v) && v >= 1 ? v : 10;
                appOptionsManager.set("downloadConcurrency", safe);
                force((x) => x + 1);
              },
              "aria-label": t("Concurrent Downloads")
            }
          );
        })() }) })
      ] })
    ] });
  }
  function ThemeSelector({
    dropdownClasses = "",
    btnClasses = "btn-ghost",
    contentClasses = "mt-16"
  }) {
    const { t } = useTranslation();
    const currentTheme = signals.useSignal(appOptionsManager.get("theme"));
    hooks.useEffect(() => {
      const unsub = appOptionsManager.signal.subscribe(() => {
        currentTheme.value = appOptionsManager.get("theme");
      });
      return () => {
        try {
          unsub?.();
        } catch {
        }
      };
    }, []);
    hooks.useEffect(() => {
      document.documentElement.setAttribute("data-theme", currentTheme.value || "light");
    }, [currentTheme.value]);
    const handleThemeChange = (theme) => {
      currentTheme.value = theme;
      appOptionsManager.set("theme", theme);
      document.documentElement.setAttribute("data-theme", theme);
    };
    return u("div", { class: cx("dropdown dropdown-end block", dropdownClasses), children: [
u(
        "div",
        {
          tabIndex: 0,
          role: "button",
          class: cx("btn group btn-sm gap-1.5 px-1.5 justify-start", btnClasses),
          "aria-label": t("Change Theme"),
          children: [
u("div", { class: "bg-base-100 group-hover:border-base-content/20 border-base-content/10 grid shrink-0 grid-cols-2 gap-0.5 rounded-md border p-1 transition-colors", children: [
u("div", { class: "bg-base-content size-1 rounded-full" }),
u("div", { class: "bg-primary size-1 rounded-full" }),
u("div", { class: "bg-secondary size-1 rounded-full" }),
u("div", { class: "bg-accent size-1 rounded-full" })
            ] }),
u("div", { class: "w-24 truncate text-xs capitalize text-left", children: currentTheme.value || "light" }),
u(
              "svg",
              {
                width: "12px",
                height: "12px",
                class: "mt-px hidden size-2 fill-current opacity-60 sm:inline-block ml-auto",
                xmlns: "http://www.w3.org/2000/svg",
                viewBox: "0 0 2048 2048",
                children: u("path", { d: "M1799 349l242 241-1017 1017L7 590l242-241 775 775 775-775z" })
              }
            )
          ]
        }
      ),
u(
        "div",
        {
          tabIndex: 0,
          class: cx(
            "dropdown-content bg-base-200 text-base-content rounded-box mt-2 max-h-60 overflow-y-auto border-[length:var(--border)] border-white/5 shadow-2xl outline-[length:var(--border)] outline-black/5",
            contentClasses
          ),
          children: u("ul", { class: "menu w-56", children: [
u("li", { class: "menu-title text-xs", children: t("Change Theme") }),
            THEMES.map((theme) => u("li", { children: u(
              "button",
              {
                class: cx(
                  "gap-3 px-2",
                  currentTheme.value === theme && "[&_svg]:visible"
                ),
                onClick: () => handleThemeChange(theme),
                children: [
u(
                    "div",
                    {
                      "data-theme": theme,
                      class: "bg-base-100 grid shrink-0 grid-cols-2 gap-0.5 rounded-md p-1 shadow-sm",
                      children: [
u("div", { class: "bg-base-content size-1 rounded-full" }),
u("div", { class: "bg-primary size-1 rounded-full" }),
u("div", { class: "bg-secondary size-1 rounded-full" }),
u("div", { class: "bg-accent size-1 rounded-full" })
                      ]
                    }
                  ),
u("div", { class: "w-32 truncate capitalize", children: theme }),
u(
                    "svg",
                    {
                      xmlns: "http://www.w3.org/2000/svg",
                      width: "16",
                      height: "16",
                      viewBox: "0 0 24 24",
                      fill: "currentColor",
                      class: "invisible h-3 w-3 shrink-0",
                      children: u("path", { d: "M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z" })
                    }
                  )
                ]
              }
            ) }, theme))
          ] })
        }
      )
    ] });
  }
  const flagUS = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-us'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23bd3d44'%20d='M0%200h640v480H0'/%3e%3cpath%20stroke='%23fff'%20stroke-width='37'%20d='M0%2055.3h640M0%20129h640M0%20203h640M0%20277h640M0%20351h640M0%20425h640'/%3e%3cpath%20fill='%23192f5d'%20d='M0%200h364.8v258.5H0'/%3e%3cmarker%20id='us-a'%20markerHeight='30'%20markerWidth='30'%3e%3cpath%20fill='%23fff'%20d='m14%200%209%2027L0%2010h28L5%2027z'/%3e%3c/marker%3e%3cpath%20fill='none'%20marker-mid='url(%23us-a)'%20d='m0%200%2016%2011h61%2061%2061%2061%2060L47%2037h61%2061%2060%2061L16%2063h61%2061%2061%2061%2060L47%2089h61%2061%2060%2061L16%20115h61%2061%2061%2061%2060L47%20141h61%2061%2060%2061L16%20166h61%2061%2061%2061%2060L47%20192h61%2061%2060%2061L16%20218h61%2061%2061%2061%2060z'/%3e%3c/svg%3e";
  const flagCN = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-cn'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cpath%20id='cn-a'%20fill='%23ff0'%20d='M-.6.8%200-1%20.6.8-1-.3h2z'/%3e%3c/defs%3e%3cpath%20fill='%23ee1c25'%20d='M0%200h640v480H0z'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(71.9991%200%200%2072%20120%20120)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(-12.33562%20-20.5871%2020.58684%20-12.33577%20240.3%2048)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(-3.38573%20-23.75998%2023.75968%20-3.38578%20288%2095.8)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(6.5991%20-23.0749%2023.0746%206.59919%20288%20168)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(14.9991%20-18.73557%2018.73533%2014.99929%20240%20216)'/%3e%3c/svg%3e";
  const flagSA = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sa'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='sa-a'%3e%3cpath%20fill-opacity='.7'%20d='M-85.3%200h682.6v512H-85.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23sa-a)'%20transform='translate(80)scale(.9375)'%3e%3cpath%20fill='%23165d31'%20d='M-128%200h768v512h-768z'/%3e%3cpath%20fill='%23fff'%20d='M65.5%20145.1c-.8%2012-2%2033%208.3%2035.2%2012.3%201.2%205.5-20.8%2010-24.8.8-2%202.3-2%202.4.5v18.7c0%206%204%207.8%207%209%203.2-.2%205.4%200%206.6%203l1.6%2032.3s7.4%202.2%207.8-18.1c.3-12-2.4-21.9-.8-24.2%200-2.3%203-2.4%205-1.3%203.2%202.2%204.6%205%209.6%204%207.6-2.2%2012.2-5.9%2012.3-11.7a47%2047%200%200%200-3.5-16.6c.4-1-1.4-3.7-1-4.7%201.3%202.2%203.4%202%203.8%200-1.3-4.2-3.3-8.3-6.5-10-2.7-2.4-6.7-2-8%203-.8%205.7%202%2012.4%206.1%2018%20.9%202.1%202.1%205.7%201.6%208.9q-3.4%201.8-6.3-1.2s-6-4.5-6-5.6c1.6-10.2.3-11.4-.6-14.3-.6-3.9-2.5-5.2-4-7.8-1.5-1.6-3.5-1.6-4.5%200-2.7%204.6-1.4%2014.5.5%2019%201.4%204.1%203.5%206.7%202.5%206.7-.8%202.3-2.5%201.7-3.8-1a67%2067%200%200%201-2.1-17.4c-.5-4.6-1.1-14.4-4.2-17-1.8-2.4-4.5-1.2-5.5%201a82%2082%200%200%200%20.3%2013.4c2%207.4%202.7%2014%203.7%2021.5.3%2010.1-5.8%204.4-5.5-.7a45%2045%200%200%200-.3-19.4c-1-2.6-2.1-3.2-4.6-2.8-1.9%200-6.8%205.3-8.2%2014.3%200%200-1.2%204.6-1.7%208.7-.7%204.6-3.7%208-5.9-.6-1.8-6.3-3-21.6-6-18z'/%3e%3cpath%20fill='%23fff'%20d='m99%20194.2-32%2015.4c.3-7.3%2015.1-20.4%2025.3-20.5%206.5.1%204.9%202.5%206.6%205.1z'/%3e%3cpath%20fill='%23fff'%20d='M93.3%20204.2c-16.8%2043.5%2039.5%2049.6%2045.8%201.8.6-2%203-3.9%203.4-.7-1.3%2043.3-43.6%2046.2-50.8%2032.6a42%2042%200%200%201-2.5-14.6c-1-8.5-5.5-5.2-6.2%203.2-.7%204.7-.5%206-.5%2010.5%202.2%2034.2%2056.7%2019.5%2065.6-8.7%204.7-15.6-.8-27.1%201.7-27.1%205.4%205.8%2013%20.8%2014.7-1.2.7-1%202.5-1.7%203.7-.4%204.2%203%2011.6%201.6%2013.2-3.7q1.4-8%201.8-16.2c-3.5%201-6%201.7-6.3%203.2l-.7%204.6c-.3%201.5-3.2%201.5-3.4-.4-1.3-6-6.7-6.7-10%202.5-2.1%201.8-6.1%202.2-6.5-.5.5-6.2-2-7-7-4.1l-4.8-36.2c2%200%204%201.5%205.9-.9-2-6.5-6.5-19.7-9-20.7-1.1-1.4-2.1-.5-3.7-.1-2.6.8-5%203-4.2%207.4%203%2018.8%205%2033.1%208.1%2052%20.5%202.1-1.3%205-3.7%204.7-4-2.7-5-8.2-12-8-5%200-10.6%205.5-11.3%2010.7-.9%204.2-1.2%208.7%200%2012.3%203.5%204.2%207.7%203.8%2011.4%202.9%203-1.3%205.5-4.3%206.6-3.6.7.9.1%2010.9-14.3%2018.5-8.7%204-15.7%204.8-19.4-2.3-2.3-4.5.2-21.4-5.6-17.5'/%3e%3cpath%20fill='%23fff'%20d='M165%20160c3.3-1.2%2019.3-19.6%2019.3-19.6l-2.4-2q-1.3-1.1%200-2.2c4-2.4%202.7-7.4.7-9.8a10%2010%200%200%200-8.7.1c-2.8%202.7-3.4%207-1.2%209.6%202.1%201%204.2%203.2%202.8%204.4-6.6%207-24.5%2019.1-22.4%2019.5.4.6%2011.5.6%2011.8%200zm-97%2065c-6%209.6-6.5%2023.9-3.2%2028.2%201.8%202%204.7%202.9%206.8%202.2%203.8-1.6%205.5-9.3%204.6-12q-1.8-3-3.6-.7c-2.6%205.4-3.7%201.7-4-1.3a70%2070%200%200%201%20.8-15.2c.7-4.2%200-3-1.4-1.2m257.1-15.3c-5.8-12.6-13.9-25-16.4-29.7a558%20558%200%200%200-24.8-36c-6.2-7.4%2010.2%203.1-2-11.7l-8.9-7.5c-2-1.4-6.8-4-7.6.2-.4%203.8-.2%205.8.4%208.9.5%202%203.5%205.5%205%207.5a565%20565%200%200%201%2053.8%2086.5c2.6-1.3%202-16.1.5-18.2'/%3e%3cpath%20fill='%23fff'%20d='M299.6%20251.5c-1.2%201.3%202.8%206.8%208%206.8%208.6-1%2016.2-5.8%2023.2-18.6a33%2033%200%200%200%205.3-14.2%20317%20317%200%200%200-5.8-72.4c-.3-2%200-4.4.2-5%20.6-.7%202.5%200%203.5-1.7%201.5-1.5-4-14-7-18.7-1-2.2-1.5-3.6-3.3.2a27%2027%200%200%200-3%2013.6c4.1%2028.5%205.4%2053.4%208%2081.9.3%202.8-.1%206.8-2%208.4a80%2080%200%200%201-27.1%2019.7m116.5-.1c-6.2%203.6-6.2%207.7-1.2%207.8%208.6-1%2018.8-1.7%2025.8-12.3a41%2041%200%200%200%204.2-16%20303%20303%200%200%200-4.7-71.4c-.2-2-1.1-6.7-.8-7.3.6-1.4%203.4.1%204.4-1.5%201.4-1.5-7.3-12.7-10.4-17.5-1-2.2-1.4-3.6-3.3.2a22%2022%200%200%200-1.8%2013.6c4.6%2031%208%2054.2%208.7%2081.6-.4%202.6-.5%204-1.7%207.3-2.7%203.4-5.7%207.8-8.5%209.9-2.8%202-8.8%204-10.7%205.6'/%3e%3cpath%20fill='%23fff'%20d='M420.7%20223.7q.1-10.9-.1-19a34%2034%200%200%200-3-13.5c-1.8-4.1-.7-7.4-1.6-11.8-.8-4.4-.6-11-1.8-16.1-.4-2-1.4-8.5-1.1-9.2.5-1.4%202.4%200%203.4-1.6%201.4-1.5-5-18-8.2-22.7-1.1-2.1-3.3-1.4-5.8%202-2.5%202.3-1.6%207.4-.6%2012.3%206.1%2032.3%2010.8%2061.6%209.8%2092.3-.4%202.6%209-7.8%209-12.7m-45.7-40c-3.9-.2-12-7.7-14.4-12a8%208%200%200%201%20.4-6.5c1.5-1%203.7-2%205.4-1%200%200%201.7%202.4%201.4%202.7%202%201%203%20.5%203.2-.4.1-1.5-.6-2.4-.6-4%20.9-4.6%206-5.3%208-2.4%201.4%201.8%202%205.5%202.1%208%200%201.3-2-.2-3.3%200-1.1.4-1.4%201.8-1.5%203-.2%203.3-.6%208.6-.7%2012.5zm-71.8%2048c1-9.8-.4-27.3-.5-33.1A477%20477%200%200%200%20299%20154c-1.2-8.4%203.4.9%202.8-4-1.5-8.3-6.1-14-11.6-21.5-1.7-2.5-1.7-3-4.4.6-3%206.7-.4%2011.4.4%2016.7%203.9%2017.2%206.2%2033%207.3%2048.7a393%20393%200%200%201%20.4%2049c3%20.1%207.6-4.7%209.3-11.8'/%3e%3cpath%20fill='%23fff'%20d='M434%20216c-6.9-11.6-17.2-24-20-28.7a658%20658%200%200%200-29.2-37.8c-8.5-9%204-1.5-1.6-8.5-4.7-5.1-6-6.8-10.1-9.9-2-1.3-3.2-3.8-4%20.5a83%2083%200%200%200-.2%2011.2c0%201.7%201.8%205%203.4%207%2020.7%2025.5%2043.4%2051.5%2061.6%2084.2%202.6-1.3%201.7-16%200-18z'/%3e%3cpath%20fill='%23165d31'%20d='M122.6%20194.7c-.5.9-1.6%202-1.2%203.1q1%201.4%202.6%201.3c1.1%200%202.7.3%203-.3q1-1.2.6-3.3c-1.2-3-4.4-1.8-5-.8'/%3e%3cpath%20fill='%23fff'%20d='M354.2%20362.5c9.2.4%2015.2.5%2023.3%201.4l9.6-1c10.6-1%2011%2015.1%2011%2015.1%200%209.5-3.7%2010-8.4%2011-2.7.4-4-1.6-5.5-3.6a14%2014%200%200%201-7%20.4l-11.5-.5c-4-.3-6.2.5-10.3.1-.8%201.3-2%203.1-4.4%202.6-2-.3-4.5-6-3.8-10.5%201.5-3.2%201-2.1%201-3.5-37.6-1-75.5-2.7-112.3-2.2-28.8.1-57.2%201.3-85.7%202.5-15.2-.2-26.8-2.6-34.8-14.3.8%200%2038.8%202.1%2049.9%201.4%2020.5-.2%2039.3-1.9%2060.2-2.5%2041.2.7%2082.1.7%20123.3%203.6-4-2.7-4-9%202-10.6.5-.4.8%203.1%201.7%203%204.9-.3%202.7%206.3%201.7%207.6M188.6%20135.3c-6.2%2017.8%203.6%2037.4%2010.4%2035.5%205%202%208-7.4%2010-17.6%201.5-2.9%202.5-3.2%203.2-1.7-.2%2013.6%201%2016.7%204.5%2020.8%207.8%206%2014.3.8%2014.8.3l6-6.1q2.2-2.2%205.1-.3c1.9%201.7%201.6%204.6%205.6%206.6%203.4%201.4%2010.5.4%2012.2-2.5%202.2-3.9%202.8-5.2%203.8-6.6%201.6-2.1%204.3-1.2%204.3-.5-.3%201.2-1.9%202.3-.8%204.5%202%201.4%202.4.5%203.5.2%204-2%207-10.6%207-10.6.1-3.2-1.7-3-2.9-2.2l-3.1%202.1c-2%20.3-5.7%201.6-7.6-1.3-1.9-3.4-1.9-8.3-3.3-11.8%200-.2-2.6-5.5-.2-5.8%201.2.2%203.7.9%204.1-1.2%201.2-2.1-2.6-8-5.3-11-2.3-2.5-5.5-2.8-8.6-.2-2.2%202-1.9%204.2-2.3%206.3a10%2010%200%200%200%202%208.7c2.2%204.2%206.1%209.7%204.8%2017.5%200%200-2.3%203.6-6.3%203.1-1.7-.3-4.4-1-5.8-11.8-1.1-8%20.2-19.4-3.2-24.7-1.3-3.3-2.2-6.4-5.2-.9-.8%202.2-4.3%205.5-1.8%2012.2a36%2036%200%200%201%202%2019c-1.5%202.2-1.8%202.9-3.7%205-2.6%203-5.5%202.2-7.7%201.1-2-1.3-3.6-2-4.6-6.5.2-7%20.6-18.5-.7-20.9-1.9-3.8-5-2.4-6.3-1.2a48%2048%200%200%200-11.5%2023.5c-1.8%205.8-3.7%204.1-5%201.8-3.2-3-3.5-26.7-7.4-22.8'/%3e%3cpath%20fill='%23fff'%20d='M207.4%20174.1c2.9-2%201.6-3.4%205.8.8a72%2072%200%200%201%209.2%2031.3c-.2%202.6%201.6%204.2%202.5%203.6.4-6%2015.1-14.4%2028.6-15.6%202-.5%201-4.4%201.3-6.4-.8-7.5%204.2-14.3%2011.2-14.8%209.6%201.4%2012.8%206.5%2013%2014.2-1.1%2015-16.7%2017.5-25.4%2018.7-1.3.5-1.9%201.1%200%201.8l36.6.2%201.9%201c.2%201-.6.2-2%202.6a30%2030%200%200%200-3.7%2011.5c-10.9%203.6-22.2%205-33.6%206.5-4%202-6%204.7-5.2%207.7%201.4%203.3%2010.2%206.7%2010.2%206.8%201.7%201%203.6%203.5-.5%208.6-17.8-.8-31.7-8.4-36.5-19.1-1.4-1.1-3%200-4%201.4-7%209-13.8%2017-25.7%2021.4-7%201.8-14.3-1.1-17.7-5.7-2.3-2.7-2.2-5.6-3-6.2-3.9%201.7-36.9%2015.7-32.7%209.1%208-8.5%2022-14.9%2034.2-23.3.9-2.9%202.5-12.5%207.3-15.6.3%200-.7%205.6-.6%208%200%202-.2%202.7.2%202.2.9-.5%2015.7-12.2%2017-15.8%201.4-2%20.3-7.2.3-7.4-2.8-7.2-6.7-7.8-8.1-11.4-1.3-4.7-.7-10.1%202-11.7q3.7-3.1%207.9.5c3%202.7%205.6%208%206.4%2011.9-.5%201.5-4-1-5-.3a16%2016%200%200%201%203.7%207.8c2%208.2%201.4%2011.4-.6%2016.7-6.6%2013.9-15%2018-22.4%2023.2-.2%200-.3%203.5%202.4%205.4%201%201%204.9%201.5%209.4%200a55%2055%200%200%200%2022.3-23.3%2051%2051%200%200%200-2.4-22.2c-2.9-6.7-6.3-16.2-6.3-16.4-.1-4.2.2-5.6%202-7.7m-95.8-38.6c4.2%202%2012.2%201.1%2011.8-5.7l-.2-3.1c-.8-2-3.2-1.5-3.7.5-.2.7.3%201.8-.3%202.1-.4.4-1.7.2-1.7-1.7q-.1-1-.7-1.6-.2-.2-.9-.2c-.6%200-.6.1-.9.6l-.3%201.6q-.1.9-.8%201c-.6%200-.5%200-1-.2q-.4-.3-.5-1l-.3-1.6q-.3-.4-1-.6c-2.3%200-2.5%202.7-2.3%203.7-.2.2-.3%204.9%202.8%206.2'/%3e%3cpath%20fill='%23fff'%20d='M235.1%20187.7c4.2%202%2014.3.9%2011.8-5.6l-.2-3.2c-.9-2-3.2-1.5-3.7.6-.2.6.3%201.7-.4%202-.3.4-1.7.2-1.6-1.6q-.1-1-.7-1.7-.3-.2-1-.2c-.5%200-.5.2-.8.7q-.3.7-.3%201.6-.2.8-.9%201c-.5%200-.4%200-.8-.3q-.5-.3-.6-.9l-.3-1.6q-.3-.5-1-.6c-2.3%200-2.5%202.6-2.4%203.6-.1.2-.2%205%203%206.2zm72-21.6c4.2%202%2012.1%201.1%2011.8-5.6l-.2-3.2c-.9-2-3.2-1.5-3.7.5-.2.7.3%201.8-.4%202.2-.3.3-1.7.1-1.6-1.8q-.1-1-.7-1.6-.3-.2-1-.2t-.8.7l-.3%201.5q-.1%201-.9%201c-.8%200-.4%200-.8-.2q-.5-.3-.6-.9%200-1-.3-1.7-.4-.4-1-.5c-2.3%200-2.5%202.6-2.4%203.6-.1.2-.2%204.9%203%206.2zm37.3%2054.3c-7.3%208.3-4.1%2022-2.4%2025%202.4%204.8%204.3%207.9%209%2010.3%204.3%203.1%207.7%201.2%209.5-1%204.3-4.5%204.4-16%206.4-18.2%201.4-4.2%205-3.5%206.7-1.6a17%2017%200%200%200%206.2%205.3c4%203.5%208.8%204.2%2013.6%201%203.2-1.9%205.3-4.2%207.2-8.9%202-5.6%201-31.6.5-47l-4.2-21.5c0-.2-.5-10.2-1-12.5%200-1-.3-1.3.7-1.2%201.1%201%201.2%201%202%201.3%201%20.2%202-1.7%201.3-3.3l-10-18.6c-.8-.8-1.9-1.6-3.2.2a7%207%200%200%200-2.4%205.5l1.3%2013.3%204%2022.6c1.3%2016%201.6%2029.2%202.9%2045.3-.2%206.8-2.3%2012.7-4.3%2013.6%200%200-3%201.7-5-.2-1.5-.6-7.4-9.9-7.4-9.9-3-2.7-5-2-7.1%200-6%205.8-8.6%2016.4-12.7%2023.8-1%201.7-4%203-7.2-.1-8.2-11.3-3.4-27.3-4.4-23.2M309%20126.7c3.8%201.5%206.4%209.2%205.6%2013-.8%204.5-2.8%209.5-4.2%208.9-1.6-.6%201-4.6-.5-8.8-.8-2.8-6-7.8-5.4-9.2-1-3.1%202.2-4.5%204.5-4z'/%3e%3cpath%20fill='%23fff'%20d='M356.6%20225c.7-9.2-.6-14.8-.8-20.2s-6.1-46.6-7.3-50.6c-1.5-7.8%205.7-1%204.9-5.6-2.5-5.6-8.6-13.9-10.5-18.8-1.2-2-.7-4-3.3-.5a42%2042%200%200%200-2.3%2019.2c6.2%2032.3%2012.5%2059.1%2011.5%2089.8%203%200%206.3-6.7%207.8-13.3m64.4-85.3c3.5%201.7%205.5%2011.3%205.1%2014-.7%205-2.5%2010.4-3.8%209.7-1.5-.6.3-7.4-.4-9.5-.8-3-5.5-8.4-5-10-1-3.4%202-4.8%204.1-4.2m-255.7%2067.9c3.3%201.3%205.3%208.3%205%2010.3-.8%203.7-2.5%207.7-3.8%207.1-1.3-.4.3-5.4-.3-7-.3-3.7-4.9-5.7-4.8-7.3-.8-3%202-3.5%204-3.1z'/%3e%3cpath%20fill='%23165d31'%20d='M244.9%20218.2c4.2.2%206.3%203.6%202.4%205-4%201.3-7.7%202.4-7.8%208%201.5%208-2%205.2-4%204.2-2.4-1.8-9.2-6-10.2-15-.1-2.1%201.6-4%204.3-4%204%201.1%2010%201.2%2015.3%201.8'/%3e%3cpath%20fill='%23fff'%20d='M77.4%20124.4c4.8%201.4%205.1%208.6%204.8%2010.7-.7%203.8-2.4%207.9-3.6%207.4-1.4-.5%200-5.7-.7-7.3-.7-2.2-4.8-6.4-4.4-7.6-.9-2.5%202-3.7%203.9-3.2m95.9%2033.6c-3.8%202-5.2%208-2.9%2011.6%202.2%203%205.6%201.9%206%201.9%203.7.4%205.9-6.9%205.9-6.9s.1-2-4.2%201.9c-1.9.3-2-.4-2.5-1.4a9%209%200%200%201%20.5-5.7c.7-1.8-.7-2.6-2.8-1.4m28-36.4c-2%201.3-5.7%205.2-5.8%209.6-.1%202.5-.6%202.5%201%204%201.3%201.8%202.4%201.7%204.8.4a5%205%200%200%200%202.3-3.4c.6-2.8-3%201.4-3.4-1.8-.8-3%201.5-4.2%203.7-7%200-2%200-3.3-2.7-1.8zm22.4%204a60%2060%200%200%200-1.6%2011.1c-.6%202.8%203%204%204.5.4%202.4-6.5%202.4-9.3%202.6-12-.7-4.3-3.6-4.2-5.5.5m142%2072.3c.4-.5%2020-14.4%2020-14.4%202-.7%201.5%207.2.6%207.1a78%2078%200%200%201-20.7%2014.3c-1%20.7-1.9-5.3%200-7zm17.7-.2c3.5%201.7%204.9%2011.8%204.5%2014.5%200%205.4-3.3%209.6-4.7%209-1.4-.7.2-6.7-.5-8.8-.8-3-3.7-8.5-3.2-10.1-1-3.4%201.8-5.2%204-4.6zm-116%2043.4a26%2026%200%200%201%205.6-4.9c2-1%203.8.8%203.7.7.3%202-1.2%203.7-.7%206.3.4%201%20.7%202.2%202.6%201.8%203.1-2.5%206-2.7%209-2.8%202.5.1%202.6%204.2%201%204.2-5.7%201.2-8.2%202.8-12.3%204.3-2%201.2-3.6-.3-3.6-.4s-1.1-1.1-.4-3.7q.3-3.2-2.4-3c-1.2.8-2.4%201.2-3-.3q-.6-1.4.5-2.2m136.6%205.4c.8%201%201.4%202-.1%203.8l-3.7%203.2c-.6%201-1%202.8%201%203.3%203.6%201%2012-4.5%2012-4.6%201.4-1%201-3%20.8-3-.8-.9-2.6-.3-3.8-.5-.6%200-2.5-.2-1.6-2a11%2011%200%200%200%201.6-2.9q.9-1.7-2-2.7c-2.1-.4-3-.2-5.3%200q-1.6.2-1.9%202.3c.1%202.3%201.5%202.2%203%203z'/%3e%3cpath%20fill='%23165d31'%20d='M268.1%20189.7c-.5%201-2.3%201-4%200s-2.7-2.6-2.1-3.5%202.3-.9%204%200%202.6%202.6%202.1%203.5m-89-53.6c-1%20.3-2.4-.6-3-2s-.3-2.6.7-2.9%202.3.7%203%202%20.3%202.7-.8%203zM355.2%20375c9.4.4%2018.2%200%2027.5.5%201.7%201.5.5%205-.6%204.8l-7.8-.3c-.1-3-7.7-2.5-7.5.1-4.1.5-7.8-.1-12-.3-1.2-1.5-1-4.2.4-4.8'/%3e%3c/g%3e%3c/svg%3e";
  const flagJP = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-jp'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='jp-a'%3e%3cpath%20fill-opacity='.7'%20d='M-88%2032h640v480H-88z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23jp-a)'%20transform='translate(88%20-32)'%3e%3cpath%20fill='%23fff'%20d='M-128%2032h720v480h-720z'/%3e%3ccircle%20cx='523.1'%20cy='344.1'%20r='194.9'%20fill='%23bc002d'%20transform='translate(-168.4%208.6)scale(.76554)'/%3e%3c/g%3e%3c/svg%3e";
  const flagKR = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-kr'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='kr-a'%3e%3cpath%20fill-opacity='.7'%20d='M-95.8-.4h682.7v512H-95.8z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23kr-a)'%20transform='translate(89.8%20.4)scale(.9375)'%3e%3cpath%20fill='%23fff'%20d='M-95.8-.4H587v512H-95.8Z'/%3e%3cg%20transform='rotate(-56.3%20361.6%20-101.3)scale(10.66667)'%3e%3cg%20id='kr-c'%3e%3cpath%20id='kr-b'%20fill='%23000001'%20d='M-6-26H6v2H-6Zm0%203H6v2H-6Zm0%203H6v2H-6Z'/%3e%3cuse%20xlink:href='%23kr-b'%20width='100%25'%20height='100%25'%20y='44'/%3e%3c/g%3e%3cpath%20stroke='%23fff'%20d='M0%2017v10'/%3e%3cpath%20fill='%23cd2e3a'%20d='M0-12a12%2012%200%200%201%200%2024Z'/%3e%3cpath%20fill='%230047a0'%20d='M0-12a12%2012%200%200%200%200%2024A6%206%200%200%200%200%200Z'/%3e%3ccircle%20cy='-6'%20r='6'%20fill='%23cd2e3a'/%3e%3c/g%3e%3cg%20transform='rotate(-123.7%20191.2%2062.2)scale(10.66667)'%3e%3cuse%20xlink:href='%23kr-c'%20width='100%25'%20height='100%25'/%3e%3cpath%20stroke='%23fff'%20d='M0-23.5v3M0%2017v3.5m0%203v3'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e";
  const flagFR = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-fr'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23000091'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23e1000f'%20d='M426.7%200H640v480H426.7z'/%3e%3c/svg%3e";
  const flagDE = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-de'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fc0'%20d='M0%20320h640v160H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='red'%20d='M0%20160h640v160H0z'/%3e%3c/svg%3e";
  const flagIN = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-in'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23f93'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3cpath%20fill='%23128807'%20d='M0%20320h640v160H0z'/%3e%3cg%20transform='matrix(3.2%200%200%203.2%20320%20240)'%3e%3ccircle%20r='20'%20fill='%23008'/%3e%3ccircle%20r='17.5'%20fill='%23fff'/%3e%3ccircle%20r='3.5'%20fill='%23008'/%3e%3cg%20id='in-d'%3e%3cg%20id='in-c'%3e%3cg%20id='in-b'%3e%3cg%20id='in-a'%20fill='%23008'%3e%3ccircle%20r='.9'%20transform='rotate(7.5%20-8.8%20133.5)'/%3e%3cpath%20d='M0%2017.5.6%207%200%202l-.6%205z'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-a'%20width='100%25'%20height='100%25'%20transform='rotate(15)'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-b'%20width='100%25'%20height='100%25'%20transform='rotate(30)'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-c'%20width='100%25'%20height='100%25'%20transform='rotate(60)'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-d'%20width='100%25'%20height='100%25'%20transform='rotate(120)'/%3e%3cuse%20xlink:href='%23in-d'%20width='100%25'%20height='100%25'%20transform='rotate(-120)'/%3e%3c/g%3e%3c/svg%3e";
  const flagPT = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-pt'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='red'%20d='M256%200h384v480H256z'/%3e%3cpath%20fill='%23060'%20d='M0%200h256v480H0z'/%3e%3cg%20fill='%23ff0'%20fill-rule='evenodd'%20stroke='%23000'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='.6'%3e%3cpath%20d='M339.5%20306.2c-32.3-1-180-93.2-181-108l8.1-13.5c14.7%2021.3%20165.7%20111%20180.6%20107.8z'/%3e%3cpath%20d='M164.9%20182.8c-2.9%207.8%2038.6%2033.4%2088.4%2063.8s92.9%2049%2096%2046.4l1.5-2.8q-.9%201.6-4.3.6c-13.5-3.9-48.6-20-92.1-46.4-43.6-26.4-81.4-50.7-87.3-61a6%206%200%200%201-.6-3.1h-.2l-1.2%202.2zm175.3%20123.8q-.7%201.3-3.5.8c-12-1.3-48.6-19.1-91.9-45-50.4-30.2-92-57.6-87.4-64.8l1.2-2.2.2.1c-4%2012.2%2082.1%2061.4%2087.2%2064.6%2049.8%2030.8%2091.8%2048.9%2095.5%2044.2z'/%3e%3cpath%20d='M256.2%20207.2c32.2-.3%2072-4.4%2095-13.6l-5-8c-13.5%207.5-53.5%2012.5-90.3%2013.2-43.4-.4-74.1-4.5-89.5-14.8l-4.6%208.6c28.2%2012%2057.2%2014.5%2094.4%2014.6'/%3e%3cpath%20d='M352.5%20193.8c-.8%201.3-15.8%206.4-37.8%2010.2a381%20381%200%200%201-58.6%204.3%20416%20416%200%200%201-56.2-3.6c-23.1-3.6-35-8.6-39.5-10.4l1.1-2.2c12.7%205%2024.7%208%2038.7%2010.2A412%20412%200%200%200%20256%20206a392%20392%200%200%200%2058.3-4.3c22.5-3.7%2034.8-8.4%2036.6-10.5zm-4.4-8.1c-2.4%202-14.6%206.3-36%209.7a388%20388%200%200%201-55.8%204c-22%200-40.1-1.6-53.8-3.6-21.8-2.8-33.4-8-37.6-9.4l1.3-2.2c3.3%201.7%2014.4%206.2%2036.5%209.3a385%20385%200%200%200%2053.6%203.4%20384%20384%200%200%200%2055.4-4c21.5-3%2033.1-8.4%2034.9-9.8zM150.3%20246c19.8%2010.7%2063.9%2016%20105.6%2016.4%2038%20.1%2087.4-5.8%20105.9-15.6l-.5-10.7c-5.8%209-58.8%2017.7-105.8%2017.4s-90.7-7.6-105.3-17v9.5'/%3e%3cpath%20d='M362.8%20244.5v2.5c-2.8%203.4-20.2%208.4-42%2012a434%20434%200%200%201-65.4%204.4%20400%20400%200%200%201-62-4.3%20155%20155%200%200%201-44.4-12v-2.9c9.7%206.4%2035.9%2011.2%2044.7%2012.6%2015.8%202.4%2036.1%204.2%2061.7%204.2%2026.9%200%2048.4-1.9%2065-4.4%2015.7-2.3%2038-8.2%2042.4-12.1m0-9v2.5c-2.8%203.3-20.2%208.3-42%2011.9a434%20434%200%200%201-65.4%204.5%20414%20414%200%200%201-62-4.3%20155%20155%200%200%201-44.4-12v-3c9.7%206.5%2036%2011.2%2044.7%2012.6a408%20408%200%200%200%2061.7%204.3c26.9%200%2048.5-2%2065-4.5%2015.7-2.2%2038-8.1%2042.4-12m-107%2068.8c-45.6-.2-84.7-12.4-93-14.4l6%209.4a250%20250%200%200%200%2087.4%2014.3c34.7-1%2065-3.7%2086.3-14.1l6.2-9.8c-14.5%206.9-64%2014.6-93%2014.6'/%3e%3cpath%20d='m344.9%20297.3-2.8%204c-10%203.6-26%207.4-32.6%208.4a296%20296%200%200%201-53.7%205c-40.4-.6-73.5-8.5-89-15.3l-1.3-2.1.2-.4%202.1.9a287%20287%200%200%200%2088.2%2014.5c18.8%200%2037.5-2.1%2052.6-4.8%2023.2-4.7%2032.6-8.2%2035.5-9.8l.7-.4zm5.3-8.8-2%203.5c-5.4%202-20%206.2-41.3%209.2-14%201.9-22.7%203.8-50.6%204.3a347%20347%200%200%201-94.2-14L161%20289a390%20390%200%200%200%2095.4%2014c25.5-.5%2036.4-2.4%2050.3-4.3%2024.8-3.8%2037.3-8%2041-9.1v-.2l2.6-1z'/%3e%3cpath%20d='M350.8%20237.6c.1%2030-15.3%2057-27.6%2068.8a99%2099%200%200%201-67.8%2028.2c-30.3.5-58.8-19.2-66.5-27.9a101%20101%200%200%201-27.5-67.4c1.8-32.8%2014.7-55.6%2033.3-71.3a100%20100%200%200%201%2064.2-22.7%2098%2098%200%200%201%2071%2035.6c12.5%2015.2%2018%2031.7%2020.9%2056.7M255.6%20135a106%20106%200%200%201%20106%20105.2%20105.6%20105.6%200%201%201-211.4%200c-.1-58%2047.3-105.2%20105.4-105.2'/%3e%3cpath%20d='M255.9%20134.5c58.2%200%20105.6%2047.4%20105.6%20105.6S314.1%20345.7%20256%20345.7s-105.6-47.4-105.6-105.6S197.8%20134.5%20256%20134.5zM152.6%20240c0%2056.8%2046.7%20103.3%20103.3%20103.3S359.2%20296.8%20359.2%20240s-46.7-103.3-103.3-103.3S152.6%20183.2%20152.6%20240'/%3e%3cpath%20d='M256%20143.3a97%2097%200%200%201%2096.7%2096.7%2097%2097%200%200%201-96.7%2096.8c-53%200-96.7-43.6-96.7-96.8a97%2097%200%200%201%2096.7-96.7M161.6%20240c0%2052%2042.6%2094.4%2094.4%2094.4s94.4-42.5%2094.4-94.4-42.6-94.4-94.4-94.4a95%2095%200%200%200-94.4%2094.4'/%3e%3cpath%20d='M260.3%20134h-9.1v212.3h9z'/%3e%3cpath%20d='M259.3%20132.8h2.3v214.7h-2.2V132.8zm-9%200h2.4v214.7h-2.3z'/%3e%3cpath%20d='M361.6%20244.2v-7.8l-6.4-6-36.3-9.6-52.2-5.3-63%203.2-44.8%2010.6-9%206.7v7.9l22.9-10.3%2054.4-8.5h52.3l38.4%204.2%2026.6%206.4z'/%3e%3cpath%20d='M256%20223.8c24.9%200%2049%202.3%2068.3%206%2019.8%204%2033.7%209%2038.5%2014.5v2.8c-5.8-7-24.5-12-39-15-19-3.6-43-6-67.9-6-26.1%200-50.5%202.6-69.3%206.2-15%203-35.1%209-37.6%2014.8v-2.9c1.3-4%2016.3-10%2037.3-14.3%2018.9-3.7%2043.3-6.1%2069.6-6.1zm0-9.1a383%20383%200%200%201%2068.3%206c19.8%204%2033.7%209%2038.5%2014.6v2.7c-5.8-6.9-24.5-12-39-14.9-19-3.7-43-6-67.9-6a376%20376%200%200%200-69.2%206.2c-14.5%202.7-35.4%208.9-37.7%2014.7v-2.8c1.4-4%2016.6-10.3%2037.3-14.3%2019-3.7%2043.3-6.2%2069.7-6.2m-.6-46.2c39.3-.2%2073.6%205.5%2089.3%2013.5l5.7%2010c-13.6-7.4-50.6-15-94.9-14-36.1.3-74.7%204-94%2014.4l6.8-11.4c15.9-8.3%2053.3-12.5%2087.1-12.5'/%3e%3cpath%20d='M256%20176.7a354%20354%200%200%201%2061.3%204.3c16%203%2031.3%207.4%2033.5%209.8l1.7%203c-5.3-3.4-18.6-7.3-35.6-10.5s-38.7-4.3-61-4.2c-25.3-.1-45%201.2-61.8%204.2a109%20109%200%200%200-33.3%2010.3l1.7-3.1c6-3%2015.3-6.7%2031.1-9.6%2017.5-3.2%2037.4-4.1%2062.4-4.2m0-9c21.4-.2%2042.6%201%2059.1%204a96%2096%200%200%201%2030.6%2010l2.5%204c-4.2-4.7-20-9.2-34.1-11.6-16.4-2.9-36.7-4-58.1-4.2a361%20361%200%200%200-59.5%204.4%2097%2097%200%200%200-29.6%209.1l2.2-3.3c5.8-3%2015.2-5.8%2027-8.1a357%20357%200%200%201%2059.9-4.4zM308.4%20284a276%20276%200%200%200-52.5-4c-65.5.8-86.6%2013.5-89.2%2017.3l-5-8c16.8-12%2052.4-18.8%2094.6-18.2q32.9.5%2056.6%205l-4.5%208'/%3e%3cpath%20d='M255.6%20278.9c18.2.3%2036%201%2053.3%204.2l-1.2%202.2c-16-3-33.2-4-52-4-24.3-.2-48.7%202.1-70%208.2-6.7%201.9-17.8%206.2-19%209.8l-1.2-2c.4-2.2%207-6.6%2019.6-10%2024.4-7%2047.2-8.3%2070.5-8.4m.8-9.2a327%20327%200%200%201%2057.3%205l-1.3%202.3a299%20299%200%200%200-56-4.9c-24.2%200-49.9%201.8-73.3%208.6-7.5%202.2-20.6%207-21%2010.7l-1.2-2.2c.2-3.4%2011.5-7.9%2021.7-10.8%2023.5-6.9%2049.3-8.6%2073.8-8.7'/%3e%3cpath%20d='m349.4%20290.5-7.8%2012.3-22.7-20.1-58.6-39.5-66.2-36.3-34.3-11.7%207.3-13.6%202.5-1.3%2021.3%205.3%2070.4%2036.3%2040.6%2025.6L336%20272l13.9%2016z'/%3e%3cpath%20d='M158.6%20195.5c6-4%2050.2%2015.6%2096.6%2043.6%2046.1%2028%2090.3%2059.6%2086.3%2065.5l-1.3%202.1-.6.5c.1-.1.8-1%200-3.1-2-6.5-33.4-31.5-85.3-62.9-50.7-30.1-92.9-48.3-97-43.1zM351%20290.4c3.8-7.6-37.2-38.5-88.1-68.6-52-29.5-89.6-46.9-96.5-41.7L165%20183l.4-.5c1.2-1%203.3-1%204.2-1%2011.8.2%2045.5%2015.7%2092.8%2042.8%2020.8%2012%2087.6%2055%2087.3%2067%200%201%20.1%201.2-.3%201.8l1.7-2.6z'/%3e%3c/g%3e%3cg%20transform='translate(0%2026.7)scale(1.06667)'%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.7'%20d='M180.6%20211a59%2059%200%200%200%2017.5%2041.7%2059%2059%200%200%200%2041.8%2017.6%2059%2059%200%200%200%2042-17.4%2059%2059%200%200%200%2017.4-41.8v-79.2l-118.7-.2z'/%3e%3cpath%20fill='red'%20stroke='%23000'%20stroke-width='.5'%20d='M183%20211.1a56%2056%200%200%200%2016.8%2040%2057%2057%200%200%200%2040.2%2016.8%2057%2057%200%200%200%2040.2-16.6%2056%2056%200%200%200%2016.7-40v-77H183v76.8m91-53.7v48.9l-.1%205.1a33%2033%200%200%201-10%2024%2034%2034%200%200%201-24%2010c-9.4%200-17.7-4-23.9-10.2a34%2034%200%200%201-10-24v-54z'/%3e%3cg%20id='pt-e'%3e%3cg%20id='pt-d'%20fill='%23ff0'%20stroke='%23000'%20stroke-width='.5'%3e%3cpath%20stroke='none'%20d='M190.2%20154.4c.1-5.5%204-6.8%204-6.8.1%200%204.3%201.4%204.3%206.9z'/%3e%3cpath%20d='m186.8%20147.7-.7%206.3h4.2c0-5.2%204-6%204-6%20.1%200%204%201.1%204.1%206h4.2l-.8-6.4zm-1%206.4h17q.5%200%20.6.7%200%20.8-.6.8h-17q-.5%200-.6-.8%200-.7.7-.7z'/%3e%3cpath%20d='M192%20154c0-3.3%202.3-4.2%202.3-4.2s2.3%201%202.3%204.2H192m-5.8-9h16.3q.5.1.6.8%200%20.5-.6.6h-16.3q-.5%200-.6-.7%200-.5.6-.6zm.4%201.5H202q.5%200%20.6.7t-.6.7h-15.5q-.6%200-.6-.7t.6-.7zm5-10.6h1.2v.8h.9v-.8h1.3v.9h.9v-1h1.2v2q0%20.6-.5.6h-4.4q-.5%200-.6-.5zm4.6%202.7.3%206.4h-4.3l.3-6.5h3.7'/%3e%3cpath%20id='pt-a'%20d='M191%20141.6v3.4h-4v-3.4z'/%3e%3cuse%20xlink:href='%23pt-a'%20width='100%25'%20height='100%25'%20x='10.6'/%3e%3cpath%20id='pt-b'%20d='M186.3%20139h1.2v1h.9v-1h1.2v1h.9v-1h1.2v2q0%20.6-.5.6h-4.3l-.6-.6z'/%3e%3cuse%20xlink:href='%23pt-b'%20width='100%25'%20height='100%25'%20x='10.6'/%3e%3cpath%20fill='%23000001'%20stroke='none'%20d='M193.9%20140.6c0-.6.9-.6.9%200v1.6h-.9z'/%3e%3cpath%20id='pt-c'%20fill='%23000001'%20stroke='none'%20d='M188.6%20142.8c0-.6.8-.6.8%200v1.2h-.8z'/%3e%3cuse%20xlink:href='%23pt-c'%20width='100%25'%20height='100%25'%20x='10.6'/%3e%3c/g%3e%3cuse%20xlink:href='%23pt-d'%20width='100%25'%20height='100%25'%20y='46.3'/%3e%3cuse%20xlink:href='%23pt-d'%20width='100%25'%20height='100%25'%20transform='rotate(-45.2%20312.8%20180)'/%3e%3c/g%3e%3cuse%20xlink:href='%23pt-d'%20width='100%25'%20height='100%25'%20x='45.7'/%3e%3cuse%20xlink:href='%23pt-e'%20width='100%25'%20height='100%25'%20transform='matrix(-1%200%200%201%20479.8%200)'/%3e%3cg%20id='pt-f'%20fill='%23fff'%3e%3cpath%20fill='%23039'%20d='M232.6%20202.4a8%208%200%200%200%202.2%205.7%207%207%200%200%200%205.3%202.4q3.2-.2%205.3-2.4a8%208%200%200%200%202.2-5.7v-10.8h-15z'/%3e%3ccircle%20cx='236.1'%20cy='195.7'%20r='1.5'/%3e%3ccircle%20cx='244.4'%20cy='195.7'%20r='1.5'/%3e%3ccircle%20cx='240.2'%20cy='199.7'%20r='1.5'/%3e%3ccircle%20cx='236.1'%20cy='203.9'%20r='1.5'/%3e%3ccircle%20cx='244.4'%20cy='203.9'%20r='1.5'/%3e%3c/g%3e%3cuse%20xlink:href='%23pt-f'%20width='100%25'%20height='100%25'%20y='-26'/%3e%3cuse%20xlink:href='%23pt-f'%20width='100%25'%20height='100%25'%20x='-20.8'/%3e%3cuse%20xlink:href='%23pt-f'%20width='100%25'%20height='100%25'%20x='20.8'/%3e%3cuse%20xlink:href='%23pt-f'%20width='100%25'%20height='100%25'%20y='25.8'/%3e%3c/g%3e%3c/svg%3e";
  const flagRU = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ru'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%230039a6'%20d='M0%20160h640v160H0z'/%3e%3cpath%20fill='%23d52b1e'%20d='M0%20320h640v160H0z'/%3e%3c/svg%3e";
  const flagES = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-es'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23AA151B'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23F1BF00'%20d='M0%20120h640v240H0z'/%3e%3cpath%20fill='%23ad1519'%20d='m127.3%20213.3-.8-.1-1-1-.7-.4-.6-.8s-.7-1.1-.4-2q.5-1.2%201.4-1.5l1.5-.5%201-.4%201.3-.3.5-.3%201-.2%201-.2%201.6.1h4.8c.4%200%201.2.3%201.4.4l2%20.7c.5.1%201.6.3%202.2.6q.8.5%201.1%201l.5%201v1.1l-.5.8-.6%201-.8.6s-.5.5-1%20.4-4.8-.8-7.6-.8-7.3.9-7.3.9'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='m127.3%20213.3-.8-.1-1-1-.7-.4-.6-.8s-.7-1.1-.4-2q.5-1.2%201.4-1.5l1.5-.5%201-.4%201.3-.3.5-.3%201-.2%201-.2%201.6.1h4.8c.4%200%201.2.3%201.4.4l2%20.7c.5.1%201.6.3%202.2.6q.8.5%201.1%201l.5%201v1.1l-.5.8-.6%201-.8.6s-.5.5-1%20.4-4.8-.8-7.6-.8-7.3.9-7.3.9z'/%3e%3cpath%20fill='%23c8b100'%20d='M133.3%20207q.1-2.1%201.3-2.3%201.3.1%201.4%202.4c0%201.3-.6%202.4-1.4%202.4s-1.3-1.1-1.3-2.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M133.3%20207q.1-2.1%201.3-2.3%201.3.1%201.4%202.4c0%201.3-.6%202.4-1.4%202.4s-1.3-1.1-1.3-2.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M134%20207q0-2%20.7-2.1c.3%200%20.6%201%20.6%202.1q0%202-.6%202.2c-.4%200-.6-1-.6-2.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M134%20207q0-2%20.7-2.1c.3%200%20.6%201%20.6%202.1q0%202-.6%202.2c-.4%200-.6-1-.6-2.2z'/%3e%3cpath%20fill='%23c8b100'%20d='M133.8%20204.5q.1-.7.8-.8%201%200%201%20.8-.1.8-1%20.9c-.9.1-.8-.4-.8-.9'/%3e%3cpath%20fill='%23c8b100'%20d='M135.3%20204.2v.6h-1.4v-.6h.5V203h-.7v-.6h.7v-.5h.5v.5h.6v.6h-.6v1.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M135.3%20204.2v.6h-1.4v-.6h.5V203h-.7v-.6h.7v-.5h.5v.5h.6v.6h-.6v1.2h.4'/%3e%3cpath%20fill='%23c8b100'%20d='M135.9%20204.2v.6h-2.5v-.6h1V203h-.7v-.6h.7v-.5h.5v.5h.6v.6h-.6v1.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M135.9%20204.2v.6h-2.5v-.6h1V203h-.7v-.6h.7v-.5h.5v.5h.6v.6h-.6v1.2h1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M134.9%20203.7q.6.2.6.8-.1.8-.8.9-1%200-1-.9%200-.6.7-.8'/%3e%3cpath%20fill='%23c8b100'%20d='M134.7%20213.2H130v-1.1l-.3-1.2-.2-1.5c-1.3-1.7-2.5-2.8-2.9-2.5q.1-.5.5-.7c1.1-.7%203.5%201%205.2%203.6l.5.7h3.8l.4-.7c1.8-2.7%204.1-4.3%205.2-3.6q.4.2.5.7c-.4-.3-1.6.8-2.9%202.5l-.2%201.5-.2%201.2-.1%201.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M134.7%20213.2H130v-1.1l-.3-1.2-.2-1.5c-1.3-1.7-2.5-2.8-2.9-2.5q.1-.5.5-.7c1.1-.7%203.5%201%205.2%203.6l.5.7h3.8l.4-.7c1.8-2.7%204.1-4.3%205.2-3.6q.4.2.5.7c-.4-.3-1.6.8-2.9%202.5l-.2%201.5-.2%201.2-.1%201.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M126.8%20206.8c1-.5%203%201.1%204.6%203.6m11-3.6c-.8-.5-2.8%201.1-4.5%203.6'/%3e%3cpath%20fill='%23c8b100'%20d='m127.8%20215.3-.5-1a27%2027%200%200%201%2014.7%200l-.5.8-.3.8a23%2023%200%200%200-6.6-.8c-2.6%200-5.2.3-6.5.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m127.8%20215.3-.5-1a27%2027%200%200%201%2014.7%200l-.5.8-.3.8a23%2023%200%200%200-6.6-.8c-2.6%200-5.2.3-6.5.8l-.3-.6'/%3e%3cpath%20fill='%23c8b100'%20d='M134.6%20217.7c2.4%200%205-.4%205.9-.6q1-.3%201-.8%200-.3-.4-.4c-1.4-.5-4-.8-6.5-.8s-5%20.3-6.4.8q-.3%200-.4.3%200%20.6%201%20.9c1%20.2%203.5.6%205.8.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M134.6%20217.7c2.4%200%205-.4%205.9-.6q1-.3%201-.8%200-.3-.4-.4c-1.4-.5-4-.8-6.5-.8s-5%20.3-6.4.8q-.3%200-.4.3%200%20.6%201%20.9c1%20.2%203.5.6%205.8.6z'/%3e%3cpath%20fill='%23c8b100'%20d='m142.1%20213.2-.5-.5s-.6.3-1.3.2c-.6%200-.9-1-.9-1s-.7.7-1.3.7-1-.6-1-.6-.7.5-1.3.4-1.2-.8-1.2-.8-.6.8-1.2.8c-.6.1-1-.5-1-.5s-.4.6-1.1.7-1.4-.6-1.4-.6-.5.7-1%201c-.5%200-1.2-.4-1.2-.4l-.2.5-.3.1.2.5a27%2027%200%200%201%207.2-.9q4.5%200%207.4%201z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m142.1%20213.2-.5-.5s-.6.3-1.3.2c-.6%200-.9-1-.9-1s-.7.7-1.3.7-1-.6-1-.6-.7.5-1.3.4-1.2-.8-1.2-.8-.6.8-1.2.8c-.6.1-1-.5-1-.5s-.4.6-1.1.7-1.4-.6-1.4-.6-.5.7-1%201c-.5%200-1.2-.4-1.2-.4l-.2.5-.3.1.2.5a27%2027%200%200%201%207.2-.9q4.5%200%207.4%201z'/%3e%3cpath%20fill='%23c8b100'%20d='M134.7%20210.7h.2v.4q0%201%201%201a1%201%200%200%200%201-.7l.2-.3v.4q.3.8%201.1.8%201%200%201-1v-.1l.4-.4.2.5-.1.4a1%201%200%200%200%201%201q.6%200%20.9-.5l.2-.2v.3q0%20.5.4.7l1-.4.7-.7v.4s-.5.8-1%201q-.3.4-.8.3-.5%200-.7-.6-.3.3-.7.2-1%200-1.4-.8-.5.5-1.1.5a2%202%200%200%201-1.2-.6l-1%20.4a2%202%200%200%201-1.3-.6%201.6%201.6%200%200%201-2.4.2%202%202%200%200%201-1.2.6l-1.1-.5q-.4.8-1.4.8l-.7-.2q-.2.5-.7.6t-.9-.2l-1-1%20.1-.5.8.7q.8.5.9.4.4-.1.4-.7v-.3l.2.2q.3.5.9.5a1%201%200%200%200%201-1v-.9l.4.4v.1q.1%201%201%201t1.1-.9v-.3l.2.3q.3.6%201%20.7%201%200%201.1-1v-.3h.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M134.7%20210.7h.2v.4q0%201%201%201a1%201%200%200%200%201-.7l.2-.3v.4q.3.8%201.1.8%201%200%201-1v-.1l.4-.4.2.5-.1.4a1%201%200%200%200%201%201q.6%200%20.9-.5l.2-.2v.3q0%20.5.4.7l1-.4.7-.7v.4s-.5.8-1%201q-.3.4-.8.3-.5%200-.7-.6-.3.3-.7.2-1%200-1.4-.8-.5.5-1.1.5a2%202%200%200%201-1.2-.6l-1%20.4a2%202%200%200%201-1.3-.6%201.6%201.6%200%200%201-2.4.2%202%202%200%200%201-1.2.6l-1.1-.5q-.4.8-1.4.8l-.7-.2q-.2.5-.7.6t-.9-.2l-1-1%20.1-.5.8.7q.8.5.9.4.4-.1.4-.7v-.3l.2.2q.3.5.9.5a1%201%200%200%200%201-1v-.9l.4.4v.1q.1%201%201%201t1.1-.9v-.3l.2.3q.3.6%201%20.7%201%200%201.1-1v-.3h.3z'/%3e%3cpath%20fill='%23c8b100'%20d='M134.6%20213.3q-4.5%200-7.3%201l-.3-.2.1-.3a27%2027%200%200%201%207.5-1q4.6%200%207.6%201l.1.3-.3.2a27%2027%200%200%200-7.4-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='M134.6%20213.3q-4.5%200-7.3%201l-.3-.2.1-.3a27%2027%200%200%201%207.5-1q4.6%200%207.6%201l.1.3-.3.2a27%2027%200%200%200-7.4-1z'/%3e%3cpath%20fill='%23fff'%20d='M131.8%20214.4q0-.4.5-.4a.4.4%200%200%201%20.4.4q0%20.3-.4.4a.4.4%200%200%201-.5-.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M131.8%20214.4q0-.4.5-.4a.4.4%200%200%201%20.4.4q0%20.3-.4.4a.4.4%200%200%201-.5-.4z'/%3e%3cpath%20fill='%23ad1519'%20d='M134.7%20214.5h-1q-.2%200-.3-.3l.3-.3h2l.2.3-.3.3h-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M134.7%20214.5h-1q-.2%200-.3-.3l.3-.3h2l.2.3-.3.3h-1'/%3e%3cpath%20fill='%23058e6e'%20d='M130%20214.9h-.7q-.2%200-.3-.2l.2-.3.7-.1.7-.1q.3%200%20.4.2a.3.3%200%200%201-.3.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M130%20214.9h-.7q-.2%200-.3-.2l.2-.3.7-.1.7-.1q.3%200%20.4.2a.3.3%200%200%201-.3.4h-.7'/%3e%3cpath%20fill='%23ad1519'%20d='m127.3%20215.3.3-.4h.7l-.4.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m127.3%20215.3.3-.4h.7l-.4.6-.6-.2'/%3e%3cpath%20fill='%23fff'%20d='M136.6%20214.4q0-.4.4-.4a.4.4%200%200%201%20.5.4.4.4%200%200%201-.5.4.4.4%200%200%201-.4-.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M136.6%20214.4q0-.4.4-.4a.4.4%200%200%201%20.5.4.4.4%200%200%201-.5.4.4.4%200%200%201-.4-.4z'/%3e%3cpath%20fill='%23058e6e'%20d='M139.3%20214.9h.6a.3.3%200%200%200%20.4-.2l-.3-.3-.6-.1-.7-.1q-.3%200-.4.2%200%20.3.3.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M139.3%20214.9h.6a.3.3%200%200%200%20.4-.2l-.3-.3-.6-.1-.7-.1q-.3%200-.4.2%200%20.3.3.4h.7'/%3e%3cpath%20fill='%23ad1519'%20d='m142%20215.4-.3-.5h-.7l.3.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m142%20215.4-.3-.5h-.7l.3.6.6-.1'/%3e%3cpath%20fill='%23ad1519'%20d='M134.6%20217.1a25%2025%200%200%201-6-.6%2026%2026%200%200%201%2012.1%200q-2.5.6-6%20.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='M134.6%20217.1a25%2025%200%200%201-6-.6%2026%2026%200%200%201%2012.1%200q-2.5.6-6%20.6z'/%3e%3cpath%20fill='%23c8b100'%20d='m142%20212-.1-.3q-.3%200-.4.2%200%20.4.2.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m142%20212-.1-.3q-.3%200-.4.2%200%20.4.2.4z'/%3e%3cpath%20fill='%23c8b100'%20d='M137.3%20211.2q0-.3-.2-.4l-.2.3q0%20.3.2.4l.3-.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M137.3%20211.2q0-.3-.2-.4l-.2.3q0%20.3.2.4l.3-.3z'/%3e%3cpath%20fill='%23c8b100'%20d='m132%20211.2.1-.4q.3%200%20.3.3t-.2.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m132%20211.2.1-.4q.3%200%20.3.3t-.2.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m127.3%20212%20.1-.3q.3%200%20.4.2%200%20.4-.2.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m127.3%20212%20.1-.3q.3%200%20.4.2%200%20.4-.2.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m134.6%20208.5-.8.5.6%201.3.2.1.2-.1.7-1.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m134.6%20208.5-.8.5.6%201.3.2.1.2-.1.7-1.3-.9-.5'/%3e%3cpath%20fill='%23c8b100'%20d='m132.8%20210.5.4.5%201.3-.4.1-.2-.1-.2-1.3-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m132.8%20210.5.4.5%201.3-.4.1-.2-.1-.2-1.3-.3-.4.6'/%3e%3cpath%20fill='%23c8b100'%20d='m136.4%20210.5-.3.5-1.3-.4-.2-.2.2-.2%201.3-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m136.4%20210.5-.3.5-1.3-.4-.2-.2.2-.2%201.3-.3.3.6'/%3e%3cpath%20fill='%23c8b100'%20d='m129.3%20209-.7.7.9%201%20.2.1.1-.1.3-1.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m129.3%20209-.7.7.9%201%20.2.1.1-.1.3-1.3-.8-.3'/%3e%3cpath%20fill='%23c8b100'%20d='m128%20211.2.4.5%201.2-.6v-.2l-.1-.2-1.3-.1-.3.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m128%20211.2.4.5%201.2-.6v-.2l-.1-.2-1.3-.1-.3.6'/%3e%3cpath%20fill='%23c8b100'%20d='m131.5%20210.5-.3.6H130l-.2-.2.1-.3%201.2-.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m131.5%20210.5-.3.6H130l-.2-.2.1-.3%201.2-.6.5.5'/%3e%3cpath%20fill='%23c8b100'%20d='M126.6%20211.4v.6l-1.4.2-.2-.1v-.2l1-.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M126.6%20211.4v.6l-1.4.2-.2-.1v-.2l1-.9.6.4'/%3e%3cpath%20fill='%23c8b100'%20d='M129.2%20210.9q0-.5.5-.5t.5.5l-.5.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M129.2%20210.9q0-.5.5-.5t.5.5l-.5.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m140%20209%20.7.7-.9%201-.2.1-.1-.1-.3-1.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m140%20209%20.7.7-.9%201-.2.1-.1-.1-.3-1.3.8-.3'/%3e%3cpath%20fill='%23c8b100'%20d='m141.4%20211.2-.5.5-1.2-.6v-.2l.1-.2%201.3-.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m141.4%20211.2-.5.5-1.2-.6v-.2l.1-.2%201.3-.1.3.6'/%3e%3cpath%20fill='%23c8b100'%20d='m137.8%20210.5.3.6h1.3l.2-.2-.1-.3-1.2-.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m137.8%20210.5.3.6h1.3l.2-.2-.1-.3-1.2-.6-.5.5'/%3e%3cpath%20fill='%23c8b100'%20d='m142.5%20211.4.1.6%201.3.2.2-.1v-.2l-1-.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m142.5%20211.4.1.6%201.3.2.2-.1v-.2l-1-.9-.6.4'/%3e%3cpath%20fill='%23c8b100'%20d='m134.2%20210.4.4-.4q.5%200%20.5.4l-.5.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m134.2%20210.4.4-.4q.5%200%20.5.4l-.5.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M139.1%20210.9q.1-.5.5-.5l.5.5-.5.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M139.1%20210.9q.1-.5.5-.5l.5.5-.5.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m124.8%20212.2-.6-.7c-.2-.2-.7-.3-.7-.3q0-.2.6-.3l.4.2v-.2s.3%200%20.4.3v1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m124.8%20212.2-.6-.7c-.2-.2-.7-.3-.7-.3q0-.2.6-.3l.4.2v-.2s.3%200%20.4.3v1z'/%3e%3cpath%20fill='%23c8b100'%20d='M124.8%20212q.3-.3.5%200t.2.5l-.5-.1q-.3-.2-.2-.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M124.8%20212q.3-.3.5%200t.2.5l-.5-.1q-.3-.2-.2-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='m144.3%20212.2.6-.7.7-.3q0-.2-.6-.3l-.4.2v-.2s-.3%200-.4.3v.7z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m144.3%20212.2.6-.7.7-.3q0-.2-.6-.3l-.4.2v-.2s-.3%200-.4.3v.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M144.3%20212q-.1-.3-.5%200-.3.2-.1.5l.5-.1q.3-.2.1-.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M144.3%20212q-.1-.3-.5%200-.3.2-.1.5l.5-.1q.3-.2.1-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M124%20223h21.4v-5.5H124z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M124%20223h21.4v-5.5H124z'/%3e%3cpath%20fill='%23c8b100'%20d='M126.2%20226.8h16.9a1.4%201.4%200%200%201-1-1.2q.1-1%201-1.3h-16.9q1%20.3%201%201.3a1.3%201.3%200%200%201-1%201.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M126.2%20226.8h16.9a1.4%201.4%200%200%201-1-1.2q.1-1%201-1.3h-16.9q1%20.3%201%201.3a1.3%201.3%200%200%201-1%201.2z'/%3e%3cpath%20fill='%23c8b100'%20d='M126.6%20226.8h16q1%200%201%20.7t-1%20.8h-16q-.9-.1-1-.8%200-1%201-.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M126.6%20226.8h16q1%200%201%20.7t-1%20.8h-16q-.9-.1-1-.8%200-1%201-.8z'/%3e%3cpath%20fill='%23c8b100'%20d='M126.6%20223h16q1%20.1%201%20.7t-1%20.6h-16q-.9%200-1-.6.1-.5%201-.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M126.6%20223h16q1%20.1%201%20.7t-1%20.6h-16q-.9%200-1-.6.1-.5%201-.6z'/%3e%3cpath%20fill='%23005bbf'%20d='M149.6%20317.4q-2.2%200-3.7-.8a8%208%200%200%200-3.8-.8q-2.1%200-3.7.8a8%208%200%200%201-3.8.8q-2.3%200-3.7-.8a8%208%200%200%200-3.7-.8%208%208%200%200%200-3.7.8%208%208%200%200%201-3.8.8v2.4q2.3%200%203.8-.9a8%208%200%200%201%203.7-.8q2.2%200%203.7.8c1.5.8%202.2.9%203.7.9a8%208%200%200%200%203.8-.9q1.6-.8%203.7-.8%202.3%200%203.8.8c1.5.8%202.2.9%203.7.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M149.6%20317.4q-2.2%200-3.7-.8a8%208%200%200%200-3.8-.8q-2.1%200-3.7.8a8%208%200%200%201-3.8.8q-2.3%200-3.7-.8a8%208%200%200%200-3.7-.8%208%208%200%200%200-3.7.8%208%208%200%200%201-3.8.8v2.4q2.3%200%203.8-.9a8%208%200%200%201%203.7-.8q2.2%200%203.7.8c1.5.8%202.2.9%203.7.9a8%208%200%200%200%203.8-.9q1.6-.8%203.7-.8%202.3%200%203.8.8c1.5.8%202.2.9%203.7.9z'/%3e%3cpath%20fill='%23ccc'%20d='M149.6%20319.8a8%208%200%200%201-3.7-.9%208%208%200%200%200-3.8-.8q-2.1%200-3.7.8c-1.6.8-2.3.9-3.8.9s-2.8-.4-3.7-.9a8%208%200%200%200-3.7-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.9v2.3q2.3%200%203.8-.9a8%208%200%200%201%203.7-.7q2.2%200%203.7.7a8%208%200%200%200%207.5%200%209%209%200%200%201%207.5.1%208%208%200%200%200%203.7.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M149.6%20319.8a8%208%200%200%201-3.7-.9%208%208%200%200%200-3.8-.8q-2.1%200-3.7.8c-1.6.8-2.3.9-3.8.9s-2.8-.4-3.7-.9a8%208%200%200%200-3.7-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.9v2.3q2.3%200%203.8-.9a8%208%200%200%201%203.7-.7q2.2%200%203.7.7a8%208%200%200%200%207.5%200%209%209%200%200%201%207.5.1%208%208%200%200%200%203.7.8v-2.3'/%3e%3cpath%20fill='%23005bbf'%20d='M149.6%20322a7%207%200%200%201-3.7-.8%208%208%200%200%200-3.8-.7q-2.1%200-3.7.7-1.5.9-3.8.9c-2.3%200-2.8-.4-3.7-.9a8%208%200%200%200-3.7-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.9v2.3q2.3%200%203.8-.9a10%2010%200%200%201%207.4%200%207%207%200%200%200%203.7.9%208%208%200%200%200%203.8-.8q1.6-.8%203.7-.8%202.3%200%203.8.8c1.5.8%202.2.8%203.7.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M149.6%20322a7%207%200%200%201-3.7-.8%208%208%200%200%200-3.8-.7q-2.1%200-3.7.7-1.5.9-3.8.9c-2.3%200-2.8-.4-3.7-.9a8%208%200%200%200-3.7-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.9v2.3q2.3%200%203.8-.9a10%2010%200%200%201%207.4%200%207%207%200%200%200%203.7.9%208%208%200%200%200%203.8-.8q1.6-.8%203.7-.8%202.3%200%203.8.8c1.5.8%202.2.8%203.7.8V322'/%3e%3cpath%20fill='%23ccc'%20d='M149.6%20326.7a8%208%200%200%201-3.7-.8q-1.6-.8-3.7-.8a8%208%200%200%200-3.8.8q-1.5.8-3.8.8a7%207%200%200%201-3.7-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.7.8c-1.5.8-2.3.8-3.8.8v-2.3a8%208%200%200%200%203.8-.9%2010%2010%200%200%201%207.4%200%208%208%200%200%200%203.7.9%208%208%200%200%200%203.8-.8q1.5-.8%203.8-.8t3.7.8c1.5.8%202.3.8%203.7.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M149.6%20326.7a8%208%200%200%201-3.7-.8q-1.6-.8-3.7-.8a8%208%200%200%200-3.8.8q-1.5.8-3.8.8a7%207%200%200%201-3.7-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.7.8c-1.5.8-2.3.8-3.8.8v-2.3a8%208%200%200%200%203.8-.9%2010%2010%200%200%201%207.4%200%208%208%200%200%200%203.7.9%208%208%200%200%200%203.8-.8q1.5-.8%203.8-.8t3.7.8c1.5.8%202.3.8%203.7.8v2.3'/%3e%3cpath%20fill='%23005bbf'%20d='M149.6%20329a8%208%200%200%201-3.7-.8q-1.6-.8-3.7-.8a8%208%200%200%200-3.8.8q-1.5.8-3.8.8a7%207%200%200%201-3.7-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.7.8c-1.5.8-2.3.8-3.8.8v-2.3a8%208%200%200%200%203.8-.8q1.5-.8%203.7-.8t3.7.7a8%208%200%200%200%207.5%200q1.5-.6%203.8-.7t3.7.8c1.5.8%202.2.8%203.7.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M149.6%20329a8%208%200%200%201-3.7-.8q-1.6-.8-3.7-.8a8%208%200%200%200-3.8.8q-1.5.8-3.8.8a7%207%200%200%201-3.7-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.7.8c-1.5.8-2.3.8-3.8.8v-2.3a8%208%200%200%200%203.8-.8q1.5-.8%203.7-.8t3.7.7a8%208%200%200%200%207.5%200q1.5-.6%203.8-.7t3.7.8c1.5.8%202.2.8%203.7.8z'/%3e%3cpath%20fill='%23c8b100'%20d='m126.2%20308%20.2.5c0%201.5-1.3%202.6-2.7%202.6h22a3%203%200%200%201-2.7-2.6v-.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='m126.2%20308%20.2.5c0%201.5-1.3%202.6-2.7%202.6h22a3%203%200%200%201-2.7-2.6v-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M126.6%20306.5h16q1%200%201%20.8%200%20.6-1%20.7h-16q-.9%200-1-.8.1-.6%201-.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M126.6%20306.5h16q1%200%201%20.8%200%20.6-1%20.7h-16q-.9%200-1-.8.1-.6%201-.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M123.7%20316.7h22V311h-22z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M123.7%20316.7h22V311h-22z'/%3e%3cpath%20fill='%23ad1519'%20d='M122%20286.7c-2.2%201.2-3.7%202.5-3.4%203.2q.2.8%201.8%201.6c1.5%201.1%202.5%203%201.7%204a5.5%205.5%200%200%200-.1-8.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M122%20286.7c-2.2%201.2-3.7%202.5-3.4%203.2q.2.8%201.8%201.6c1.5%201.1%202.5%203%201.7%204a5.5%205.5%200%200%200-.1-8.8z'/%3e%3cpath%20fill='%23ccc'%20d='M126.8%20305.6h15.6V229h-15.6v76.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M138%20229.2v76.3m1.7-76.3v76.3m-12.9%200h15.6v-76.4h-15.6v76.5z'/%3e%3cpath%20fill='%23ad1519'%20d='M158.4%20257.7a50%2050%200%200%200-23.3-2c-9.4%201.6-16.5%205.3-15.9%208.4v.2l-3.5-8.2c-.6-3.3%207.2-7.5%2017.6-9.2a43%2043%200%200%201%209.2-.7c6.6%200%2012.4.8%2015.8%202.1v9.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M158.4%20257.7a50%2050%200%200%200-23.3-2c-9.4%201.6-16.5%205.3-15.9%208.4v.2l-3.5-8.2c-.6-3.3%207.2-7.5%2017.6-9.2a43%2043%200%200%201%209.2-.7c6.6%200%2012.4.8%2015.8%202.1v9.4'/%3e%3cpath%20fill='%23ad1519'%20d='M126.8%20267.3c-4.3-.3-7.3-1.4-7.6-3.2q-.3-2.2%203.8-4.5l3.8.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M126.8%20267.3c-4.3-.3-7.3-1.4-7.6-3.2q-.3-2.2%203.8-4.5l3.8.3v7.4'/%3e%3cpath%20fill='%23ad1519'%20d='M142.5%20261.5q4.1.6%205.7%201.9l.1.2c.5%201-1.9%203-5.9%205.4v-7.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M142.5%20261.5q4.1.6%205.7%201.9l.1.2c.5%201-1.9%203-5.9%205.4v-7.5'/%3e%3cpath%20fill='%23ad1519'%20d='M117.1%20282c-.4-1.2%203.8-3.6%209.8-5.8l7.8-3.2c8.3-3.7%2014.4-7.9%2013.6-9.4v-.2c.4.4%201%208%201%208%20.8%201.3-4.8%205.5-12.4%209.1-2.5%201.2-7.6%203-10%204-4.4%201.4-8.7%204.3-8.3%205.3l-1.5-7.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M117.1%20282c-.4-1.2%203.8-3.6%209.8-5.8l7.8-3.2c8.3-3.7%2014.4-7.9%2013.6-9.4v-.2c.4.4%201%208%201%208%20.8%201.3-4.8%205.5-12.4%209.1-2.5%201.2-7.6%203-10%204-4.4%201.4-8.7%204.3-8.3%205.3l-1.5-7.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M125.8%20254c1.9-.6%203.1-1.5%202.5-3q-.6-1.3-2.8-.6l-2.6%201%202.3%205.8.8-.3.8-.3zm-1.2-2.7.7-.3q1-.3%201.4.8.4.8-.5%201.5l-.6.3zm7.3-2.5-.9.3h-.8l1.3%206.1%204.3-.8-.2-.4v-.4l-2.5.6zm8.4%205.2q1.2-3.3%202.7-6.4h-1l-1.8%204.6-2.4-4.3-1%20.1h-1l3.5%206zm8.8-4.7.4-.9a3%203%200%200%200-1.7-.6q-2.6%200-2.8%201.7c-.2%202.1%203.2%202%203%203.4q-.2%201-1.4.8-1.3%200-1.4-1.2h-.3l-.4%201.1a4%204%200%200%200%201.8.6q2.7.2%203.2-1.7c.2-2-3.3-2.1-3.1-3.4q0-.8%201.3-.7%201%200%201.2.9z'/%3e%3cpath%20fill='%23ad1519'%20d='M277.9%20211.6s-.7.8-1.3.9c-.5%200-1.1-.5-1.1-.5s-.5.5-1%20.6-1.4-.6-1.4-.6l-1%201-1.1-.3c-.1-.1-.3.4-.7.6h-.4l-.6-.4-.7-.7-.5-.3-.4-1v-.5q0-1%202.2-1.7a4%204%200%200%201%202%200q.9-.8%203-.8c2.1%200%202.4.3%203%20.7a6%206%200%200%201%202.9-.7q2.1%200%203%20.8.8-.3%202%200%202.2.6%202.2%201.7v.5l-.4%201-.6.3-.6.7-.6.3s-.3.2-.4%200q-.6-.3-.7-.5c-.1-.2-.6.4-1%20.2s-1-1-1-1-.9.8-1.4.7c-.6-.1-1-.6-1-.6s-.7.6-1.2.5-1.2-.9-1.2-.9'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.9%20211.6s-.7.8-1.3.9c-.5%200-1.1-.5-1.1-.5s-.5.5-1%20.6-1.4-.6-1.4-.6l-1%201-1.1-.3c-.1-.1-.3.4-.7.6h-.4l-.6-.4-.7-.7-.5-.3-.4-1v-.5q0-1%202.2-1.7a4%204%200%200%201%202%200q.9-.8%203-.8c2.1%200%202.4.3%203%20.7a6%206%200%200%201%202.9-.7q2.1%200%203%20.8.8-.3%202%200%202.2.6%202.2%201.7v.5l-.4%201-.6.3-.6.7-.6.3s-.3.2-.4%200q-.6-.3-.7-.5c-.1-.2-.6.4-1%20.2s-1-1-1-1-.9.8-1.4.7c-.6-.1-1-.6-1-.6s-.7.6-1.2.5-1.2-.9-1.2-.9z'/%3e%3cpath%20fill='%23c8b100'%20d='M276.5%20207.6c0-1%20.6-2%201.3-2s1.3%201%201.3%202-.5%201.8-1.3%201.8q-1.2-.1-1.3-1.9'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M276.5%20207.6c0-1%20.6-2%201.3-2s1.3%201%201.3%202-.5%201.8-1.3%201.8q-1.2-.1-1.3-1.9z'/%3e%3cpath%20fill='%23c8b100'%20d='M277.3%20207.6q0-1.7.5-1.8.6.2.7%201.8c.1%201.6-.3%201.7-.6%201.7q-.6-.2-.6-1.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.3%20207.6q0-1.7.5-1.8.6.2.7%201.8c.1%201.6-.3%201.7-.6%201.7q-.6-.2-.6-1.8z'/%3e%3cpath%20fill='%23c8b100'%20d='m271%20215.3-.5-1a27%2027%200%200%201%2014.8%200l-.6.8-.3.8a23%2023%200%200%200-6.6-.8c-2.6%200-5.2.3-6.6.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m271%20215.3-.5-1a27%2027%200%200%201%2014.8%200l-.6.8-.3.8a23%2023%200%200%200-6.6-.8c-2.6%200-5.2.3-6.6.8l-.2-.6'/%3e%3cpath%20fill='%23c8b100'%20d='M277.8%20217.7c2.4%200%205-.4%205.9-.6q1-.3%201-.8%200-.3-.4-.4a24%2024%200%200%200-6.5-.8c-2.5%200-5%20.3-6.4.8q-.3%200-.4.3%200%20.6%201%20.9c1%20.2%203.5.6%205.8.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.8%20217.7c2.4%200%205-.4%205.9-.6q1-.3%201-.8%200-.3-.4-.4a24%2024%200%200%200-6.5-.8c-2.5%200-5%20.3-6.4.8q-.3%200-.4.3%200%20.6%201%20.9c1%20.2%203.5.6%205.8.6z'/%3e%3cpath%20fill='%23fff'%20d='M283.5%20208.4q0-.3.4-.4.5%200%20.5.4t-.5.4a.4.4%200%200%201-.4-.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M283.5%20208.4q0-.3.4-.4.5%200%20.5.4t-.5.4a.4.4%200%200%201-.4-.4zm-.2-1.4a.4.4%200%200%201%20.4-.4q.4%200%20.4.4t-.4.4a.4.4%200%200%201-.4-.4zm-1.1-1q0-.3.4-.3t.4.4-.4.4a.4.4%200%200%201-.4-.5zm-1.4-.4q0-.3.4-.4.5%200%20.5.4t-.4.4q-.5-.1-.5-.4zm-1.4%200q0-.3.5-.3t.4.4q0%20.3-.4.4a.4.4%200%200%201-.5-.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linecap='round'%20stroke-width='.3'%20d='m287.8%20211.2.2-1a2.7%202.7%200%200%200-2.7-2.8q-.8%200-1.3.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m283%20209.2.2-.8q-.2-1.8-2.5-2-1%200-1.6.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M288.2%20210q0-.5.4-.5t.4.4-.4.4q-.5%200-.4-.4zm-.2-1.6q0-.3.4-.4a.4.4%200%200%201%20.5.4q0%20.3-.4.4-.5%200-.5-.4zm-1-1.1a.4.4%200%200%201%20.5-.4q.3%200%20.4.4a.4.4%200%200%201-.4.4.4.4%200%200%201-.5-.4zm-1.3-.7q0-.4.5-.4t.4.4q0%20.5-.4.5a.4.4%200%200%201-.5-.5zm-1.4.1q0-.3.5-.4.6%200%20.4.4t-.4.4q-.4-.1-.5-.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m285.3%20213.2-.5-.5s-.6.3-1.3.2c-.6%200-.9-1-.9-1s-.7.7-1.3.7-1-.6-1-.6-.7.5-1.3.4-1.2-.8-1.2-.8-.6.8-1.2.8c-.6.1-1-.5-1-.5s-.3.6-1.1.7-1.4-.6-1.4-.6-.4.7-1%201c-.5%200-1.2-.4-1.2-.4l-.1.5-.3.1.1.5a27%2027%200%200%201%207.3-.9q4.3%200%207.3%201l.2-.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m285.3%20213.2-.5-.5s-.6.3-1.3.2c-.6%200-.9-1-.9-1s-.7.7-1.3.7-1-.6-1-.6-.7.5-1.3.4-1.2-.8-1.2-.8-.6.8-1.2.8c-.6.1-1-.5-1-.5s-.3.6-1.1.7-1.4-.6-1.4-.6-.4.7-1%201c-.5%200-1.2-.4-1.2-.4l-.1.5-.3.1.1.5a27%2027%200%200%201%207.3-.9q4.3%200%207.3%201l.2-.6z'/%3e%3cpath%20fill='%23fff'%20d='M271.3%20208.4q0-.3.4-.4.5%200%20.4.4a.4.4%200%200%201-.4.4.4.4%200%200%201-.4-.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M271.3%20208.4q0-.3.4-.4.5%200%20.4.4a.4.4%200%200%201-.4.4.4.4%200%200%201-.4-.4zm.2-1.4q0-.4.4-.4t.5.4q0%20.5-.5.4a.4.4%200%200%201-.4-.4zm1-1q.1-.3.5-.3t.5.4q0%20.3-.5.4a.4.4%200%200%201-.4-.5zm1.4-.4q0-.3.5-.4.6%200%20.4.4t-.4.4q-.4-.1-.5-.4zm1.4%200q0-.3.5-.3.3%200%20.4.4%200%20.3-.4.4a.4.4%200%200%201-.5-.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linecap='round'%20stroke-width='.3'%20d='m267.8%20211.2-.2-1a2.7%202.7%200%200%201%202.7-2.8q.8%200%201.4.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m272.7%20209.2-.3-.8c0-1%201.2-2%202.6-2a3%203%200%200%201%201.5.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M266.6%20210q0-.5.4-.5t.4.4a.4.4%200%200%201-.4.4q-.3%200-.4-.4zm.1-1.6q.1-.3.5-.4.5%200%20.4.4t-.4.4q-.4-.1-.4-.4zm1-1.1q0-.4.5-.4a.4.4%200%200%201%20.4.4.4.4%200%200%201-.4.4.4.4%200%200%201-.5-.4zm1.3-.7q0-.4.5-.4.3%200%20.4.4%200%20.5-.4.5a.4.4%200%200%201-.5-.5zm1.4.1q0-.3.5-.4a.4.4%200%200%201%20.4.4.4.4%200%200%201-.4.4q-.5%200-.5-.4z'/%3e%3cpath%20fill='%23c8b100'%20d='M277.9%20210.7h.2v.4q.1%201%201%201a1%201%200%200%200%201-.7l.2-.3v.4q.3.8%201.1.8%201%200%201-1v-.1l.4-.4.2.5-.1.4a1%201%200%200%200%201%201q.6%200%20.9-.5l.2-.2v.3q0%20.5.4.7l1-.4c1-.5.7-.7.7-.7v.4s-.5.8-1%201q-.3.4-.8.3-.5%200-.7-.6l-.7.2q-1%200-1.4-.8l-1.1.5q-.8%200-1.2-.6l-1%20.4q-.9%200-1.4-.6-.4.6-1.2.6-.6%200-1-.4a2%202%200%200%201-1.3.6q-.6%200-1.1-.5-.4.8-1.4.8-.4%200-.7-.2-.2.5-.7.6t-.9-.2l-1-1%20.1-.5.8.7q.8.5.9.4.4-.1.4-.7v-.3l.2.2q.3.5.9.5a1%201%200%200%200%201-1v-.9l.4.4v.1q.1%201%201%201t1.1-.9v-.3l.2.3q.4.6%201%20.7%201%200%201.1-1v-.3h.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.9%20210.7h.2v.4q.1%201%201%201a1%201%200%200%200%201-.7l.2-.3v.4q.3.8%201.1.8%201%200%201-1v-.1l.4-.4.2.5-.1.4a1%201%200%200%200%201%201q.6%200%20.9-.5l.2-.2v.3q0%20.5.4.7l1-.4c1-.5.7-.7.7-.7v.4s-.5.8-1%201q-.3.4-.8.3-.5%200-.7-.6l-.7.2q-1%200-1.4-.8l-1.1.5q-.8%200-1.2-.6l-1%20.4q-.9%200-1.4-.6-.4.6-1.2.6-.6%200-1-.4a2%202%200%200%201-1.3.6q-.6%200-1.1-.5-.4.8-1.4.8-.4%200-.7-.2-.2.5-.7.6t-.9-.2l-1-1%20.1-.5.8.7q.8.5.9.4.4-.1.4-.7v-.3l.2.2q.3.5.9.5a1%201%200%200%200%201-1v-.9l.4.4v.1q.1%201%201%201t1.1-.9v-.3l.2.3q.4.6%201%20.7%201%200%201.1-1v-.3h.2z'/%3e%3cpath%20fill='%23c8b100'%20d='M277.8%20213.3q-4.5%200-7.3%201l-.3-.2.1-.3q3-1%207.5-1t7.6%201l.1.3-.3.2a27%2027%200%200%200-7.4-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.8%20213.3q-4.5%200-7.3%201l-.3-.2.1-.3q3-1%207.5-1t7.6%201l.1.3-.3.2a27%2027%200%200%200-7.4-1z'/%3e%3cpath%20fill='%23fff'%20d='M275%20214.4q0-.4.5-.4a.4.4%200%200%201%20.4.4.4.4%200%200%201-.4.4q-.5%200-.5-.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M275%20214.4q0-.4.5-.4a.4.4%200%200%201%20.4.4.4.4%200%200%201-.4.4q-.5%200-.5-.4z'/%3e%3cpath%20fill='%23ad1519'%20d='M277.9%20214.5h-1q-.2%200-.3-.3l.3-.3h2l.2.3-.3.3h-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.9%20214.5h-1q-.2%200-.3-.3l.3-.3h2l.2.3-.3.3h-1'/%3e%3cpath%20fill='%23058e6e'%20d='M273.2%20214.9h-.6a.3.3%200%200%201-.4-.2l.3-.3.6-.1.7-.1q.3%200%20.4.2a.3.3%200%200%201-.3.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M273.2%20214.9h-.6a.3.3%200%200%201-.4-.2l.3-.3.6-.1.7-.1q.3%200%20.4.2a.3.3%200%200%201-.3.4h-.7'/%3e%3cpath%20fill='%23ad1519'%20d='m270.5%20215.3.3-.4h.7l-.4.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m270.5%20215.3.3-.4h.7l-.4.6-.6-.2'/%3e%3cpath%20fill='%23fff'%20d='M279.8%20214.4q0-.4.4-.4t.5.4q0%20.3-.5.4a.4.4%200%200%201-.4-.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M279.8%20214.4q0-.4.4-.4t.5.4q0%20.3-.5.4a.4.4%200%200%201-.4-.4z'/%3e%3cpath%20fill='%23058e6e'%20d='M282.5%20214.9h.7l.3-.2-.2-.3-.7-.1-.7-.1q-.3%200-.4.2%200%20.3.3.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M282.5%20214.9h.7l.3-.2-.2-.3-.7-.1-.7-.1q-.3%200-.4.2%200%20.3.3.4h.7'/%3e%3cpath%20fill='%23ad1519'%20d='m285.1%20215.4-.2-.5h-.7l.3.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m285.1%20215.4-.2-.5h-.7l.3.6.6-.1'/%3e%3cpath%20fill='%23ad1519'%20d='M277.8%20217.1a25%2025%200%200%201-6-.6%2025%2025%200%200%201%206-.7q3.6%200%206.1.7-2.5.6-6%20.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='M277.8%20217.1a25%2025%200%200%201-6-.6%2025%2025%200%200%201%206-.7q3.6%200%206.1.7-2.5.6-6%20.6z'/%3e%3cpath%20fill='%23c8b100'%20d='m285.2%20212-.1-.3q-.3%200-.4.2l.1.4q.3%200%20.4-.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m285.2%20212-.1-.3q-.3%200-.4.2l.1.4q.3%200%20.4-.3z'/%3e%3cpath%20fill='%23c8b100'%20d='M280.6%20211.2q0-.3-.3-.4l-.2.3q0%20.3.2.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M280.6%20211.2q0-.3-.3-.4l-.2.3q0%20.3.2.4z'/%3e%3cpath%20fill='%23c8b100'%20d='M275.2%20211.2q0-.3.2-.4l.3.3-.2.4q-.3%200-.3-.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M275.2%20211.2q0-.3.2-.4l.3.3-.2.4q-.3%200-.3-.3z'/%3e%3cpath%20fill='%23c8b100'%20d='m270.5%20212%20.1-.3q.3%200%20.4.2l-.1.4q-.3%200-.4-.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m270.5%20212%20.1-.3q.3%200%20.4.2l-.1.4q-.3%200-.4-.3z'/%3e%3cpath%20fill='%23c8b100'%20d='m277.8%20208.5-.8.5.6%201.3.2.1.3-.1.6-1.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m277.8%20208.5-.8.5.6%201.3.2.1.3-.1.6-1.3-.9-.5'/%3e%3cpath%20fill='%23c8b100'%20d='m276%20210.5.4.5%201.3-.4.1-.2-.1-.2-1.3-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m276%20210.5.4.5%201.3-.4.1-.2-.1-.2-1.3-.3-.4.6'/%3e%3cpath%20fill='%23c8b100'%20d='m279.6%20210.5-.3.5-1.3-.4-.1-.2v-.2l1.4-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m279.6%20210.5-.3.5-1.3-.4-.1-.2v-.2l1.4-.3.4.6'/%3e%3cpath%20fill='%23c8b100'%20d='m272.5%20209-.7.7.9%201%20.2.1.2-.1.2-1.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m272.5%20209-.7.7.9%201%20.2.1.2-.1.2-1.3-.8-.3'/%3e%3cpath%20fill='%23c8b100'%20d='m271.1%20211.2.5.5%201.2-.6v-.2l-.1-.2-1.3-.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m271.1%20211.2.5.5%201.2-.6v-.2l-.1-.2-1.3-.1-.3.6'/%3e%3cpath%20fill='%23c8b100'%20d='m274.7%20210.5-.3.6h-1.3l-.2-.2.1-.3%201.2-.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m274.7%20210.5-.3.6h-1.3l-.2-.2.1-.3%201.2-.6.5.5'/%3e%3cpath%20fill='%23c8b100'%20d='M269.8%20211.4v.6l-1.4.2-.2-.1v-.2l1-.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M269.8%20211.4v.6l-1.4.2-.2-.1v-.2l1-.9.6.4'/%3e%3cpath%20fill='%23c8b100'%20d='M272.4%20210.9q0-.5.5-.5l.5.5-.5.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M272.4%20210.9q0-.5.5-.5l.5.5-.5.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m283.2%20209%20.7.7-.9%201-.2.1-.1-.1-.3-1.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m283.2%20209%20.7.7-.9%201-.2.1-.1-.1-.3-1.3.8-.3'/%3e%3cpath%20fill='%23c8b100'%20d='m284.6%20211.2-.5.5-1.2-.6v-.2l.1-.2%201.3-.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m284.6%20211.2-.5.5-1.2-.6v-.2l.1-.2%201.3-.1.3.6'/%3e%3cpath%20fill='%23c8b100'%20d='m281%20210.5.3.6h1.3l.2-.2-.1-.3-1.2-.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m281%20210.5.3.6h1.3l.2-.2-.1-.3-1.2-.6-.5.5'/%3e%3cpath%20fill='%23c8b100'%20d='M285.7%20211.4v.6l1.4.2.2-.1v-.2l-1-.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M285.7%20211.4v.6l1.4.2.2-.1v-.2l-1-.9-.6.4'/%3e%3cpath%20fill='%23c8b100'%20d='M277.4%20210.4q0-.3.5-.4.4%200%20.4.4t-.4.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.4%20210.4q0-.3.5-.4.4%200%20.4.4t-.4.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M282.3%20210.9q.1-.5.5-.5t.5.5q0%20.6-.5.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M282.3%20210.9q.1-.5.5-.5t.5.5q0%20.6-.5.4z'/%3e%3cpath%20fill='%23c8b100'%20d='M277%20205.4q.1-.8.8-.8%201%200%201%20.8c0%20.8-.5.8-1%20.8a1%201%200%200%201-.8-.8'/%3e%3cpath%20fill='%23c8b100'%20d='M278.5%20205.1v.6H277v-.6h.4v-1.3h-.5v-.5h.5v-.6h.6v.6h.6v.6h-.6v1.2h.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M278.5%20205.1v.6H277v-.6h.4v-1.3h-.5v-.5h.5v-.6h.6v.6h.6v.6h-.6v1.2h.4z'/%3e%3cpath%20fill='%23c8b100'%20d='M279%20205.1v.6h-2.4v-.6h1v-1.3h-.7v-.5h.6v-.6h.6v.6h.6v.6h-.6v1.2h1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M278.1%20204.6q.6.1.6.8t-.9.8a1%201%200%200%201-.8-.8q0-.6.6-.8'/%3e%3cpath%20fill='%23c8b100'%20d='m268%20212.2-.6-.7-.7-.3q0-.2.6-.3.3%200%20.4.2v-.2s.3%200%20.4.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m268%20212.2-.6-.7-.7-.3q0-.2.6-.3.3%200%20.4.2v-.2s.3%200%20.4.3z'/%3e%3cpath%20fill='%23c8b100'%20d='M268%20212q.3-.3.5%200%20.4.2.1.5l-.5-.1q-.2-.2%200-.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M268%20212q.3-.3.5%200%20.4.2.1.5l-.5-.1q-.2-.2%200-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='m287.5%20212.2.6-.7c.2-.2.7-.3.7-.3q0-.2-.6-.3l-.4.2v-.2s-.3%200-.4.3v.7z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m287.5%20212.2.6-.7c.2-.2.7-.3.7-.3q0-.2-.6-.3l-.4.2v-.2s-.3%200-.4.3v.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M287.5%20212q-.2-.3-.5%200t-.1.5l.5-.1q.3-.2.1-.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M287.5%20212q-.2-.3-.5%200t-.1.5l.5-.1q.3-.2.1-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M267.2%20223h21.4v-5.5h-21.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M267.2%20223h21.4v-5.5h-21.4z'/%3e%3cpath%20fill='%23c8b100'%20d='M286.3%20226.8h-16.9q1-.4%201-1.2%200-1-1-1.3h17-.1q-1%20.3-1%201.3%200%20.8%201%201.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M286.3%20226.8h-16.9q1-.4%201-1.2%200-1-1-1.3h17-.1q-1%20.3-1%201.3%200%20.8%201%201.2z'/%3e%3cpath%20fill='%23c8b100'%20d='M269.9%20226.8h16q1%200%201%20.7t-1%20.8h-16q-1-.1-1-.8.1-1%201-.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M269.9%20226.8h16q1%200%201%20.7t-1%20.8h-16q-1-.1-1-.8.1-1%201-.8z'/%3e%3cpath%20fill='%23c8b100'%20d='M269.9%20223h16q1%20.1%201%20.7t-1%20.6h-16q-1%200-1-.6t1-.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M269.9%20223h16q1%20.1%201%20.7t-1%20.6h-16q-1%200-1-.6t1-.6z'/%3e%3cpath%20fill='%23005bbf'%20d='M263%20317.4q2.1%200%203.7-.8a8%208%200%200%201%203.7-.8q2.2%200%203.8.8c1.6.8%202.3.8%203.7.8q2.3%200%203.8-.8a8%208%200%200%201%203.6-.8%208%208%200%200%201%203.7.8q1.6.8%203.8.8v2.4a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.8q-2.2%200-3.6.8-1.5.8-3.8.9a8%208%200%200%201-3.7-.9%208%208%200%200%200-3.8-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.9v-2.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M263%20317.4q2.1%200%203.7-.8a8%208%200%200%201%203.7-.8q2.2%200%203.8.8c1.6.8%202.3.8%203.7.8q2.3%200%203.8-.8a8%208%200%200%201%203.6-.8%208%208%200%200%201%203.7.8q1.6.8%203.8.8v2.4a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.8q-2.2%200-3.6.8-1.5.8-3.8.9a8%208%200%200%201-3.7-.9%208%208%200%200%200-3.8-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.9v-2.4z'/%3e%3cpath%20fill='%23ccc'%20d='M263%20319.8q2.1%200%203.7-.9c1.6-.9%202.3-.8%203.7-.8q2.2%200%203.8.8c1.6.8%202.3.9%203.7.9a8%208%200%200%200%203.8-.9%208%208%200%200%201%203.6-.8q2.3%200%203.7.8%201.6.8%203.8.9v2.3a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.6.7-1.5.8-3.8.9a7%207%200%200%201-3.7-.9q-1.5-.6-3.8-.7a8%208%200%200%200-3.7.7%208%208%200%200%201-3.8.9v-2.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M263%20319.8q2.1%200%203.7-.9c1.6-.9%202.3-.8%203.7-.8q2.2%200%203.8.8c1.6.8%202.3.9%203.7.9a8%208%200%200%200%203.8-.9%208%208%200%200%201%203.6-.8q2.3%200%203.7.8%201.6.8%203.8.9v2.3a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.6.7-1.5.8-3.8.9a7%207%200%200%201-3.7-.9q-1.5-.6-3.8-.7a8%208%200%200%200-3.7.7%208%208%200%200%201-3.8.9v-2.3'/%3e%3cpath%20fill='%23005bbf'%20d='M263%20322q2.1%200%203.7-.8%201.6-.6%203.7-.7%202.2%200%203.8.7c1.6.7%202.3.9%203.7.9a8%208%200%200%200%203.8-.9%208%208%200%200%201%203.6-.8%208%208%200%200%201%203.7.8q1.6.8%203.8.9v2.3a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.6.7-1.5.9-3.8.9t-3.7-.8a8%208%200%200%200-3.8-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.8V322'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M263%20322q2.1%200%203.7-.8%201.6-.6%203.7-.7%202.2%200%203.8.7c1.6.7%202.3.9%203.7.9a8%208%200%200%200%203.8-.9%208%208%200%200%201%203.6-.8%208%208%200%200%201%203.7.8q1.6.8%203.8.9v2.3a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.6.7-1.5.9-3.8.9t-3.7-.8a8%208%200%200%200-3.8-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.8V322'/%3e%3cpath%20fill='%23ccc'%20d='M263%20326.7a8%208%200%200%200%203.7-.8q1.6-.8%203.7-.8%202.2%200%203.8.8c1.6.8%202.3.8%203.7.8q2.3%200%203.8-.9a8%208%200%200%201%203.6-.7q2.3%200%203.7.8a8%208%200%200%200%203.8.8v-2.3a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.6.7-1.5.8-3.8.9t-3.7-.8a8%208%200%200%200-3.8-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.8v2.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M263%20326.7a8%208%200%200%200%203.7-.8q1.6-.8%203.7-.8%202.2%200%203.8.8c1.6.8%202.3.8%203.7.8q2.3%200%203.8-.9a8%208%200%200%201%203.6-.7q2.3%200%203.7.8a8%208%200%200%200%203.8.8v-2.3a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.6.7-1.5.8-3.8.9t-3.7-.8a8%208%200%200%200-3.8-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.8v2.3'/%3e%3cpath%20fill='%23005bbf'%20d='M263%20329a8%208%200%200%200%203.7-.8q1.6-.8%203.7-.8%202.2%200%203.8.8c1.6.8%202.3.8%203.7.8a8%208%200%200%200%203.8-.9%208%208%200%200%201%203.6-.7q2.3%200%203.7.8%201.6.8%203.8.8v-2.3a8%208%200%200%201-3.8-.8%208%208%200%200%200-3.7-.8%208%208%200%200%200-3.6.7%208%208%200%200%201-3.8.9q-2.2%200-3.7-.8t-3.8-.8q-2.1%200-3.7.8c-1.6.8-2.3.8-3.8.8v2.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M263%20329a8%208%200%200%200%203.7-.8q1.6-.8%203.7-.8%202.2%200%203.8.8c1.6.8%202.3.8%203.7.8a8%208%200%200%200%203.8-.9%208%208%200%200%201%203.6-.7q2.3%200%203.7.8%201.6.8%203.8.8v-2.3a8%208%200%200%201-3.8-.8%208%208%200%200%200-3.7-.8%208%208%200%200%200-3.6.7%208%208%200%200%201-3.8.9q-2.2%200-3.7-.8t-3.8-.8q-2.1%200-3.7.8c-1.6.8-2.3.8-3.8.8v2.3z'/%3e%3cpath%20fill='%23c8b100'%20d='m286.3%20308-.1.5c0%201.5%201.2%202.6%202.7%202.6h-22c1.5%200%202.7-1.2%202.7-2.6l-.1-.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='m286.3%20308-.1.5c0%201.5%201.2%202.6%202.7%202.6h-22c1.5%200%202.7-1.2%202.7-2.6l-.1-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M269.9%20306.5h16q1%200%201%20.8%200%20.6-1%20.7h-16q-1%200-1-.8.1-.6%201-.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M269.9%20306.5h16q1%200%201%20.8%200%20.6-1%20.7h-16q-1%200-1-.8.1-.6%201-.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M266.9%20316.7h22V311h-22z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M266.9%20316.7h22V311h-22z'/%3e%3cpath%20fill='%23ad1519'%20d='M290.6%20286.7c2.1%201.2%203.6%202.5%203.4%203.2q-.2.8-1.8%201.6c-1.6%201.1-2.5%203-1.8%204a5.5%205.5%200%200%201%20.2-8.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M290.6%20286.7c2.1%201.2%203.6%202.5%203.4%203.2q-.2.8-1.8%201.6c-1.6%201.1-2.5%203-1.8%204a5.5%205.5%200%200%201%20.2-8.8z'/%3e%3cpath%20fill='%23ccc'%20d='M270.1%20305.6h15.6V229h-15.6v76.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M281.4%20229.1v76.3m1.8-76.3v76.3m-13%20.2h15.5V229h-15.6v76.5z'/%3e%3cpath%20fill='%23ad1519'%20d='M254.2%20257.7a50%2050%200%200%201%2023.3-2c9.3%201.6%2016.4%205.3%2015.9%208.4v.2l3.5-8.2c.6-3.3-7.3-7.5-17.6-9.2a54%2054%200%200%200-9.2-.7c-6.7%200-12.4.8-15.9%202.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M254.2%20257.7a50%2050%200%200%201%2023.3-2c9.3%201.6%2016.4%205.3%2015.9%208.4v.2l3.5-8.2c.6-3.3-7.3-7.5-17.6-9.2a54%2054%200%200%200-9.2-.7c-6.7%200-12.4.8-15.9%202.1v9.4'/%3e%3cpath%20fill='%23ad1519'%20d='M285.7%20267.3c4.4-.3%207.3-1.4%207.7-3.2q.2-2.2-3.8-4.5l-3.9.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M285.7%20267.3c4.4-.3%207.3-1.4%207.7-3.2q.2-2.2-3.8-4.5l-3.9.3v7.4'/%3e%3cpath%20fill='%23ad1519'%20d='M270%20261.5a13%2013%200%200%200-5.7%201.9v.2c-.5%201%201.8%203%205.8%205.4v-7.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M270%20261.5a13%2013%200%200%200-5.7%201.9v.2c-.5%201%201.8%203%205.8%205.4v-7.5'/%3e%3cpath%20fill='%23ad1519'%20d='M295.4%20282c.4-1.2-3.8-3.6-9.7-5.8-2.8-1-5-2-7.8-3.2-8.3-3.7-14.4-7.9-13.6-9.4v-.2c-.4.4-1%208-1%208-.8%201.3%204.8%205.5%2012.4%209.1%202.4%201.2%207.6%203%2010%204%204.3%201.4%208.7%204.3%208.3%205.3l1.4-7.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M295.4%20282c.4-1.2-3.8-3.6-9.7-5.8-2.8-1-5-2-7.8-3.2-8.3-3.7-14.4-7.9-13.6-9.4v-.2c-.4.4-1%208-1%208-.8%201.3%204.8%205.5%2012.4%209.1%202.4%201.2%207.6%203%2010%204%204.3%201.4%208.7%204.3%208.3%205.3l1.4-7.7z'/%3e%3cpath%20fill='%23c8b100'%20d='m263.9%20254.4%202.1-6.6h-.5l-.5.1-1.4%204.8q-1.6-2-2.7-4.1l-1%20.2h-1l4%205.7h.5zm6-6.6h-1.8v6.2h4.2v-.7h-2.6zm6.8%201%202%20.3v-.7l-5.8-.5v.8h2l-.4%205.6h1.6l.5-5.4m2.4%206%20.8.2.8.2.7-2.9.6%201.2.8%202.1%201%20.2q.6%200%201%20.3l-.3-.7-1.3-2.9q1.6%200%202.1-1.2.3-.8-.7-1.5-.8-.4-1.7-.5l-2.4-.5zm3-5.2c.7.2%201.5.3%201.5%201v.5q-.5%201.3-2%20.9zm8%207-.2%202%20.8.5.9.5.5-7-.7-.3-6.1%203.8.5.3.4.2%201.7-1.2%202.3%201.3zm-1.7-1.5%202-1.4-.2%202.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M182.2%20192.4c0-1%201-2%202-2s2.2%201%202.2%202c0%201.1-1%202-2.1%202a2%202%200%200%201-2.1-2z'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.3'%20d='M205.7%20175.4c6.3%200%2012%201%2015.7%202.4a32%2032%200%200%200%2014.6%202.3c2.7%200%206.5.8%2010.3%202.4a27%2027%200%200%201%207.4%204.7l-1.5%201.4-.4%203.8-4.1%204.7-2%201.8-5%203.9-2.5.2-.7%202.1-31.6-3.7-31.7%203.7-.8-2.1-2.5-.2-4.9-4-2-1.7-4.1-4.7-.5-3.8-1.5-1.4a28%2028%200%200%201%207.5-4.7%2026%2026%200%200%201%2010.2-2.4q3%20.3%206.6-.2a30%2030%200%200%200%208-2q5.6-2.4%2015.5-2.5z'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M206.2%20217.1c-11.8%200-22.4-1.4-29.9-3.6a1%201%200%200%201-.8-1.2q0-.8.8-1.2a109%20109%200%200%201%2029.9-3.6c11.7%200%2022.3%201.4%2029.8%203.6a1.3%201.3%200%200%201%200%202.4c-7.5%202.2-18%203.6-29.8%203.6'/%3e%3cpath%20fill='%23ad1519'%20d='M206.1%20215.6c-10.6%200-20.2-1.2-27.5-3.1%207.3-2%2016.9-3%2027.5-3.1a115%20115%200%200%201%2027.6%203c-7.3%202-17%203.2-27.6%203.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M206.9%20215.7v-6.3m-1.7%206.3v-6.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M203.6%20215.7v-6.3m-1.6%206.3v-6.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M200.6%20215.7v-6.3m-2.8%205.9v-5.7m1.3%205.8v-6m-3.8%205.6v-5.2m1.3%205.4v-5.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M192%20214.8V210m1%204.7V210m1.2%205v-5m-3.4%204.7v-4.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.5'%20d='M189.7%20214.5v-4.2m-1.2%204.1v-4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.6'%20d='M186%20214v-3m1.3%203.2v-3.5m-2.5%203.1V211'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.7'%20d='M183.7%20213.6v-2.3m-1.3%202v-1.8m-1.2%201.6v-1.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.9'%20d='M179.8%20212.8v-.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M213.7%20215.3v-5.8m-2.9%206v-6.1m-2.1%206.2v-6.3'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M206%20207.4a108%20108%200%200%200-30%203.9c.6-.3.5-1-.3-3-1-2.5-2.4-2.4-2.4-2.4%208.3-2.5%2020-4%2032.8-4a123%20123%200%200%201%2033%204s-1.5-.1-2.5%202.3q-1.2%202.8-.2%203c-7.5-2.2-18.4-3.7-30.3-3.7'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M206.1%20201.9c-12.9%200-24.5%201.5-32.8%204a1%201%200%200%201-1.3-.6%201%201%200%200%201%20.7-1.3%20121%20121%200%200%201%2033.4-4.2c13.2%200%2025.2%201.7%2033.5%204.2q1%20.4.7%201.3t-1.3.6c-8.4-2.5-20-4-32.9-4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M206.1%20215.6c-10.6%200-20.2-1.2-27.5-3.1%207.3-2%2016.9-3%2027.5-3.1a115%20115%200%200%201%2027.6%203c-7.3%202-17%203.2-27.6%203.2z'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M197%20204.8q0-.9%201-1%20.9.1%201%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.4'%20d='M206.1%20205.6H203a1%201%200%200%201%200-2h6.4q.9.1%201%201%200%201.2-1%201h-3.2'/%3e%3cpath%20fill='%23058e6e'%20stroke='%23000'%20stroke-width='.4'%20d='m190.3%20206.5-2.3.2q-.9%200-1.2-.8a1%201%200%200%201%201-1.1l2.2-.3%202.4-.3q.9%200%201.1.9%200%20.9-.9%201l-2.3.4'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M181%20206.7q.1-1%201.1-1t1%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.4'%20d='m174%20208.5%201.2-1.6%203.3.4-2.6%202-1.8-.8'/%3e%3cpath%20fill='%23058e6e'%20stroke='%23000'%20stroke-width='.4'%20d='m222%20206.5%202.3.2q.9%200%201.1-.8a1%201%200%200%200-.9-1.1l-2.2-.3-2.4-.3a1%201%200%200%200-1.1.9q0%20.9.9%201l2.3.4'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M213.3%20204.8q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1m15.8%201.9q.1-1%201-1t1.1%201q0%20.9-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.4'%20d='m238.2%20208.5-1.1-1.6-3.3.4%202.6%202%201.8-.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M177.3%20212.8c7.4-2.1%2017.6-3.4%2028.8-3.4%2011.3%200%2021.4%201.3%2028.9%203.4'/%3e%3cpath%20fill='%23c8b100'%20d='m182.3%20183.8%201.4%201%202-3.2a7%207%200%200%201-3.6-7.2c.2-4.1%205.2-7.6%2011.7-7.6q5%20.1%208.5%202.4l.2-1.8a17%2017%200%200%200-8.7-2.1c-7.4%200-13.2%204.1-13.5%209.1a9%209%200%200%200%203%207.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='m182.3%20183.8%201.4%201%202-3.2a7%207%200%200%201-3.6-7.2c.2-4.1%205.2-7.6%2011.7-7.6q5%20.1%208.5%202.4l.2-1.8a17%2017%200%200%200-8.7-2.1c-7.4%200-13.2%204.1-13.5%209.1a9%209%200%200%200%203%207.6l-1%201.8'/%3e%3cpath%20fill='%23c8b100'%20d='M182.4%20183.8a9%209%200%200%201-4-7.3q.2-5%205.3-8a9%209%200%200%200-3.4%206.8%209%209%200%200%200%203%206.7z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M182.4%20183.8a9%209%200%200%201-4-7.3q.2-5%205.3-8a9%209%200%200%200-3.4%206.8%209%209%200%200%200%203%206.7l-.9%201.8'/%3e%3cpath%20fill='%23c8b100'%20d='M160.1%20187.1a9%209%200%200%201-2.3-5.9q0-2%201-3.8c2-4.2%208.4-7.2%2016-7.2q3%200%205.9.6l-1%201.4a26%2026%200%200%200-4.9-.4c-7%200-12.8%202.7-14.5%206.3a7%207%200%200%200-.7%203.1%207%207%200%200%200%202.7%205.6l-2.6%204.1-1.3-1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M160.1%20187.1a9%209%200%200%201-2.3-5.9q0-2%201-3.8c2-4.2%208.4-7.2%2016-7.2q3%200%205.9.6l-1%201.4a26%2026%200%200%200-4.9-.4c-7%200-12.8%202.7-14.5%206.3a7%207%200%200%200-.7%203.1%207%207%200%200%200%202.7%205.6l-2.6%204.1-1.3-1z'/%3e%3cpath%20fill='%23c8b100'%20d='M162.7%20173.3a11%2011%200%200%200-4%204.1%209%209%200%200%200-.9%203.8q.1%203.5%202.3%205.9l-1.5%202.5a10%2010%200%200%201-2.3-6.5c0-4%202.5-7.5%206.4-9.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M162.7%20173.3a11%2011%200%200%200-4%204.1%209%209%200%200%200-.9%203.8q.1%203.5%202.3%205.9l-1.5%202.5a10%2010%200%200%201-2.3-6.5c0-4%202.5-7.5%206.4-9.8z'/%3e%3cpath%20fill='%23c8b100'%20d='M206%20164.4c1.7%200%203.2%201.1%203.5%202.6q.4%202.1.4%204.5v1.1c.1%203.3.6%206.3%201.3%208.1l-5.2%205-5.2-5c.7-1.8%201.2-4.8%201.3-8.1v-1.1q0-2.4.4-4.5c.3-1.5%201.8-2.6%203.5-2.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M206%20164.4c1.7%200%203.2%201.1%203.5%202.6q.4%202.1.4%204.5v1.1c.1%203.3.6%206.3%201.3%208.1l-5.2%205-5.2-5c.7-1.8%201.2-4.8%201.3-8.1v-1.1q0-2.4.4-4.5c.3-1.5%201.8-2.6%203.5-2.6z'/%3e%3cpath%20fill='%23c8b100'%20d='M206%20166q1.6.1%201.8%201.4.3%201.8.4%204.2v1q.2%205%201.2%207.7l-3.4%203.2-3.4-3.2q1-2.7%201.2-7.7v-1l.4-4.2a2%202%200%200%201%201.8-1.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M206%20166q1.6.1%201.8%201.4.3%201.8.4%204.2v1q.2%205%201.2%207.7l-3.4%203.2-3.4-3.2q1-2.7%201.2-7.7v-1l.4-4.2a2%202%200%200%201%201.8-1.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m229.7%20183.8-1.3%201-2-3.2a7%207%200%200%200%203.6-6.3v-.9c-.2-4.1-5.3-7.6-11.7-7.6a15%2015%200%200%200-8.5%202.4l-.2-1.8a17%2017%200%200%201%208.7-2.1c7.4%200%2013.2%204.1%2013.4%209.1a9%209%200%200%201-3%207.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='m229.7%20183.8-1.3%201-2-3.2a7%207%200%200%200%203.6-6.3v-.9c-.2-4.1-5.3-7.6-11.7-7.6a15%2015%200%200%200-8.5%202.4l-.2-1.8a17%2017%200%200%201%208.7-2.1c7.4%200%2013.2%204.1%2013.4%209.1a9%209%200%200%201-3%207.6l1%201.8'/%3e%3cpath%20fill='%23c8b100'%20d='M229.6%20183.8a9%209%200%200%200%204.1-7.3c0-3.2-2.1-6.1-5.3-8a9%209%200%200%201%203.4%206.8%209%209%200%200%201-3.2%206.7z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M229.6%20183.8a9%209%200%200%200%204.1-7.3c0-3.2-2.1-6.1-5.3-8a9%209%200%200%201%203.4%206.8%209%209%200%200%201-3.2%206.7l1%201.8'/%3e%3cpath%20fill='%23c8b100'%20d='M252%20187.1a9%209%200%200%200%202.2-5.9%209%209%200%200%200-.9-3.8c-2-4.2-8.4-7.2-16-7.2a29%2029%200%200%200-6%20.6l1%201.4a25%2025%200%200%201%205-.4c7%200%2012.8%202.7%2014.4%206.3q.7%201.5.7%203.1a7%207%200%200%201-2.6%205.6l2.5%204.1%201.3-1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M252%20187.1a9%209%200%200%200%202.2-5.9%209%209%200%200%200-.9-3.8c-2-4.2-8.4-7.2-16-7.2a29%2029%200%200%200-6%20.6l1%201.4a25%2025%200%200%201%205-.4c7%200%2012.8%202.7%2014.4%206.3q.7%201.5.7%203.1a7%207%200%200%201-2.6%205.6l2.5%204.1%201.3-1z'/%3e%3cpath%20fill='%23c8b100'%20d='M249.3%20173.3a11%2011%200%200%201%204%204.1%209%209%200%200%201%20.9%203.8%209%209%200%200%201-2.3%205.9l1.6%202.5a10%2010%200%200%200%202.3-6.5c0-4-2.6-7.5-6.5-9.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M249.3%20173.3a11%2011%200%200%201%204%204.1%209%209%200%200%201%20.9%203.8%209%209%200%200%201-2.3%205.9l1.6%202.5a10%2010%200%200%200%202.3-6.5c0-4-2.6-7.5-6.5-9.8z'/%3e%3cpath%20fill='%23fff'%20d='M204.2%20181.4q.1-1.7%201.8-1.8c1.7-.1%201.9.8%201.9%201.8s-.9%201.7-1.9%201.7a2%202%200%200%201-1.8-1.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M204.2%20181.4q.1-1.7%201.8-1.8c1.7-.1%201.9.8%201.9%201.8s-.9%201.7-1.9%201.7a2%202%200%200%201-1.8-1.7z'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M204.2%20178q.1-1.7%201.8-1.8c1.7-.1%201.9.8%201.9%201.8s-.9%201.7-1.9%201.7a2%202%200%200%201-1.8-1.7m.4-3.7q.1-1.2%201.4-1.3%201.4.1%201.5%201.3-.1%201.3-1.5%201.4c-1.4.1-1.4-.6-1.4-1.4m.4-3.3q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1m.2-2.8q.1-.8.8-.8t.9.8q0%20.7-.9.8a1%201%200%200%201-.8-.8'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='m206.2%20191.8%201.2.2a4.6%204.6%200%200%200%204.5%206%205%205%200%200%200%204.4-3c.1%200%20.5-1.7.7-1.7s.1%201.8.2%201.7c.3%202.3%202.4%203.8%204.7%203.8a4.6%204.6%200%200%200%204.7-5l1.5-1.5.7%202a4%204%200%200%200-.4%201.9%204.4%204.4%200%200%200%204.5%204.2q2.5%200%203.8-1.9l.9-1.2v1.5c0%201.5.6%202.8%202%203%200%200%201.7.1%204-1.6%202.1-1.7%203.3-3.1%203.3-3.1l.2%201.7s-1.8%202.8-3.8%204c-1%20.6-2.7%201.3-4%201q-2.1-.5-3-2.6a7%207%200%200%201-3.3%201%207%207%200%200%201-6.1-3.7%207%207%200%200%201-10.4-.3%207%207%200%200%201-4.6%201.8%207%207%200%200%201-5.7-3%207%207%200%200%201-5.7%203%207%207%200%200%201-4.7-1.8%207%207%200%200%201-10.4.3%207%207%200%200%201-6%203.7%207%207%200%200%201-3.4-1q-.8%202.1-3%202.7c-1.2.2-2.9-.5-4-1.1-2-1.2-3.8-4-3.8-4l.2-1.7s1.2%201.4%203.4%203.1%203.9%201.6%203.9%201.6c1.4-.2%202-1.5%202-3v-1.5l1%201.2a5%205%200%200%200%203.7%202c2.5%200%204.5-2%204.5-4.3a4%204%200%200%200-.4-2l.8-1.9%201.5%201.5v.6c0%202.4%202%204.4%204.6%204.4%202.4%200%204.4-1.5%204.7-3.8%200%200%200-1.6.2-1.7s.6%201.7.7%201.6a5%205%200%200%200%204.5%203.1%204.6%204.6%200%200%200%204.5-6l1.2-.2'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M238.6%20197.7q.4-1.4-.6-1.8-.9-.2-1.5%201.1-.4%201.4.6%201.8.9.2%201.5-1.1m-20.5-4c0-.8-.3-1.6-1-1.6q-.8%200-1.2%201.4%200%201.3.9%201.6%201-.1%201.3-1.4m-23.9%200c0-.8.4-1.6%201-1.6q1%200%201.2%201.4%200%201.3-.9%201.6-1-.1-1.2-1.4m-20.6%204q-.3-1.4.6-1.8%201-.2%201.5%201.1t-.5%201.8q-1%20.2-1.6-1.1'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M182.7%20184a5%205%200%200%201%202.2%202.9s0-.3.6-.6%201-.3%201-.3l-.1%201.3-.3%202.2-.7%201.6a2%202%200%200%200-1.5-.4%202%202%200%200%200-1.2.9s-.7-.6-1.2-1.3l-1.1-2-.7-1.1s.5-.2%201.1%200q.9.1.8.2a5%205%200%200%201%201-3.4m.4%209.8-.6-1q0-.7.3-1.2s-.9-.5-1.8-.7c-.7-.2-2-.2-2.3-.2h-1l.2.5.5.7a5%205%200%200%200-3%202%205%205%200%200%200%203.5%201l-.2.8v.6l1-.4c.3-.1%201.5-.5%202-1%20.8-.4%201.5-1.1%201.5-1.1m2.7-.5.2-1.1-.6-1%201.4-1.3%202-.9%201.1-.4v.6l-.2.8a5%205%200%200%201%203.4%201%205%205%200%200%201-2.9%202l.7%201.2h-1c-.4%200-1.6%200-2.3-.2l-1.8-.7'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.4'%20d='M182.2%20192.4c0-1%201-2%202-2s2.2%201%202.2%202c0%201.1-1%202-2.1%202a2%202%200%200%201-2.1-2'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M206.1%20180.8a6%206%200%200%201%201.9%203.7s.2-.3.9-.5q1.1-.3%201.2-.2l-.5%201.4-.8%202.4-1%201.7a2%202%200%200%200-1.7-.7q-1%200-1.6.7-.2-.1-1-1.7l-.8-2.4-.5-1.4%201.2.2q1%20.4.9.5.2-2.2%201.8-3.7'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M204.6%20191.8a2%202%200%200%201-.5-1.2q0-.8.4-1.3s-.8-.7-1.8-1c-.7-.4-2-.7-2.5-.7l-1.2-.2.2.6.4.9a6%206%200%200%200-3.7%201.7q1.6%201.5%203.7%201.6l-.4%201-.2.6%201.2-.2c.4-.1%201.8-.4%202.5-.7%201-.4%201.9-1%201.9-1m3%200a2%202%200%200%200%20.1-2.6s.9-.7%201.8-1a8%208%200%200%201%202.5-.7l1.2-.3-.1.7-.4.9q2.2.2%203.6%201.7a6%206%200%200%201-3.6%201.6l.5%201.6-1.2-.2-2.5-.7c-1-.4-1.8-1-1.8-1m22-8a5%205%200%200%200-2.2%203l-.7-.6-1-.3.2%201.3c0%20.3%200%201.3.3%202.2q.4%201.6.6%201.6a2%202%200%200%201%201.5-.4q.9.2%201.3.9l1.1-1.3q1-1.4%201.1-2l.7-1.1s-.4-.2-1%200l-1%20.2a5%205%200%200%200-1-3.4m-.3%209.8q.5-.4.6-1l-.2-1.2s.8-.5%201.7-.7c.7-.2%202-.2%202.3-.2h1.1l-.3.5-.4.7a5%205%200%200%201%202.9%202%205%205%200%200%201-3.5%201l.2.8v.6l-1-.4c-.3-.1-1.4-.5-2-1-.8-.4-1.4-1.1-1.4-1.1m-2.8-.5-.2-1.1q0-.7.6-1s-.6-.8-1.4-1.3c-.6-.4-1.7-.8-2-.9l-1-.4v.6l.2.8a5%205%200%200%200-3.5%201q1%201.4%203%202l-.5.7-.3.5h1c.4%200%201.7%200%202.3-.2l1.8-.7'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.4'%20d='M226%20192.4c0-1%201-2%202-2s2.1%201%202.1%202a2%202%200%200%201-2%202%202%202%200%200%201-2.1-2m23.2%204.4c-.4-.5-1.4-.4-2.2.2q-1.2%201.2-.5%202.2%201%20.8%202.3-.3c.7-.6%201-1.6.5-2'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='m246.3%20198%20.7-1c.7-.6%201.8-.7%202.3-.2l.1.2s1-2%202.3-2.6%203.4-.5%203.4-.5a3%203%200%200%200-2.9-2.8%203%203%200%200%200-2.4%201l-.2-1s-1.3.3-1.9%201.8%200%203.6%200%203.6-.3-.9-.7-1.5a8%208%200%200%200-2.4-1.6l-1.3-.7-.1.5v.8a8%208%200%200%200-3.7.5%205%205%200%200%200%202.5%202.2l-.8.7-.4.5%201.3.2%202.5.2%201.7-.2m-80.3%200q0-.6-.7-1c-.7-.7-1.7-.8-2.2-.3l-.2.3s-1-2-2.3-2.7-3.3-.5-3.3-.5a3%203%200%200%201%202.8-2.8q1.6%200%202.4%201l.2-1s1.3.3%202%201.8c.5%201.5-.1%203.6-.1%203.6s.3-.9.8-1.5a8%208%200%200%201%202.4-1.6l1.3-.7v1.3a8%208%200%200%201%203.7.5%205%205%200%200%201-2.5%202.2l.8.7.4.5-1.2.2-2.6.2-1.7-.2'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.4'%20d='M163%20196.8q1-.7%202.4.3%201.2%201%20.4%202c-.5.6-1.5.5-2.2-.2s-1-1.6-.5-2m41-6.3q.2-1.8%202-2c1.8-.2%202.1.9%202.1%202%200%201-1%202-2%202a2%202%200%200%201-2.1-2'/%3e%3cpath%20fill='%23005bbf'%20stroke='%23000'%20stroke-width='.3'%20d='M201.8%20160.6c0-2.2%201.9-4%204.3-4s4.2%201.8%204.2%204-1.9%204-4.3%204a4%204%200%200%201-4.2-4'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.3'%20d='M205%20149.3v2.2h-2.4v2.2h2.3v6.3H202l-.2.6q0%20.9.3%201.6h7.9q.3-.7.3-1.6l-.2-.6h-2.8v-6.3h2.3v-2.2h-2.3v-2.2z'/%3e%3cpath%20fill='%23ccc'%20d='M206.5%20330.6a82%2082%200%200%201-35.5-8.2%2023%2023%200%200%201-12.8-20.4v-32h96.4v32a23%2023%200%200%201-12.8%2020.4%2081%2081%200%200%201-35.3%208.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.5'%20d='M206.5%20330.6a82%2082%200%200%201-35.5-8.2%2023%2023%200%200%201-12.8-20.4v-32h96.4v32a23%2023%200%200%201-12.8%2020.4%2081%2081%200%200%201-35.3%208.2z'/%3e%3cpath%20fill='%23ccc'%20d='M206.3%20270h48.3v-53.5h-48.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.5'%20d='M206.3%20270h48.3v-53.5h-48.3z'/%3e%3cpath%20fill='%23ad1519'%20d='M206.3%20302c0%2012.6-10.7%2022.9-24%2022.9s-24.2-10.3-24.2-23v-32h48.2v32'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.5'%20d='M168.6%20320.9c1.5.8%203.6%202%205.8%202.6l-.1-54.7h-5.7z'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.5'%20d='M158%20301.6a24%2024%200%200%200%205.5%2015v-47.5h-5.4z'/%3e%3cpath%20fill='%23c7b500'%20stroke='%23000'%20stroke-width='.5'%20d='M179.4%20324.7a27%2027%200%200%200%205.6%200v-55.9h-5.6v56z'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.5'%20d='M190%20323.5a19%2019%200%200%200%205.8-2.5v-52.2H190z'/%3e%3cpath%20fill='%23ad1519'%20d='M158.1%20270h48.2v-53.5H158z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.5'%20d='M158.1%20270h48.2v-53.5H158z'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.5'%20d='M201%20316c2.4-2%204.6-6.8%205.4-12.2l.1-35H201l.1%2047.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.5'%20d='M206.3%20302c0%2012.6-10.7%2022.9-24%2022.9s-24.2-10.3-24.2-23v-32h48.2v32'/%3e%3cpath%20fill='%23ad1519'%20d='M254.6%20270v32c0%2012.6-10.8%2022.9-24.1%2022.9s-24.2-10.3-24.2-23v-32h48.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.5'%20d='M254.6%20270v32c0%2012.6-10.8%2022.9-24.1%2022.9s-24.2-10.3-24.2-23v-32h48.3'/%3e%3cpath%20fill='%23c8b100'%20d='m215.1%20294.1.1.5q-.1%201-1.1%201a1%201%200%200%201-1.1-1v-.5h-1.5a2.5%202.5%200%200%200%201.8%202.9v3.9h1.6V297a3%203%200%200%200%201.7-1.6h4.4v-1.2zm21.8%200v1.2h-4l-.3.6%204.6%205.2-1.2%201-4.6-5.3-.2.1v8.7h-1.6V297h-.2l-4.8%205.2-1.2-1%204.7-5.3-.2-.4h-4V294h13zm2.6%200v1.2h4.4q.5%201.2%201.7%201.6v3.9h1.6V297a3%203%200%200%200%201.8-2.4v-.5h-1.6l.1.5q-.1%201-1%201-1.1%200-1.2-1l.1-.5zm-6.7%2022.1a16%2016%200%200%200%203.7-1l.8%201.4a18%2018%200%200%201-4.3%201.2%203%203%200%200%201-2.6%202%203%203%200%200%201-2.5-2%2018%2018%200%200%201-4.6-1.2l.8-1.4q2%20.8%204%201a3%203%200%200%201%201.5-1.3v-6.7h1.6v6.7q1.1.3%201.6%201.4zm-11-2.2-.8%201.4a17%2017%200%200%201-3.6-3.1q-1.4.3-2.5-.5a2.4%202.4%200%200%201-.3-3.5l.1-.1a15%2015%200%200%201-1.3-4.8h1.7a13%2013%200%200%200%201%204q.8%200%201.4.2l4.1-4.5%201.3%201-4.1%204.5q.8%201.5-.1%202.8a15%2015%200%200%200%203.1%202.6m-6-4.8q.6-.7%201.5%200c.9.7.5%201%20.1%201.4a1%201%200%200%201-1.6.1%201%201%200%200%201%200-1.5m-2.2-4.5-1.6-.3-.3-4.3%201.7-.6v2.5q0%201.4.2%202.7m1.4-5.3%201.7.4v2.2c0-.8.3%202.1.3%202.1l-1.7.6-.3-2.7zm5.6%2013.7a16%2016%200%200%200%204.8%202.6l.4-1.6a14%2014%200%200%201-4-2zm-.8%201.4a17%2017%200%200%200%204.8%202.6l-1.2%201.1a19%2019%200%200%201-4-2zm2.2-9.4%201.6.7%203-3.3-1-1.4zm-1.3-1-1-1.4%203-3.3%201.6.7zm18.1%209.9.8%201.4a17%2017%200%200%200%203.6-3.1q1.4.3%202.5-.5a2.4%202.4%200%200%200%20.3-3.5l-.1-.1a15%2015%200%200%200%201.3-4.8h-1.7a13%2013%200%200%201-1%204l-1.4.2-4.1-4.5-1.3%201%204.1%204.5a2.4%202.4%200%200%200%20.1%202.8%2015%2015%200%200%201-3.1%202.6m6-4.8a1%201%200%200%200-1.5%200%201%201%200%200%200-.1%201.4%201%201%200%200%200%201.6.1%201%201%200%200%200%200-1.5m2.2-4.5%201.6-.3.3-4.3-1.7-.6v2.5q0%201.5-.2%202.8zm-1.4-5.3-1.7.4v2.2c0-.8-.3%202.1-.3%202.1l1.7.6.3-2.7zm-5.6%2013.7a16%2016%200%200%201-4.8%202.6l-.4-1.6a14%2014%200%200%200%204-2zm.8%201.4a17%2017%200%200%201-4.8%202.6l1.2%201.1a19%2019%200%200%200%204-2zm-2.2-9.4-1.6.7-2.9-3.3%201-1.4zm1.3-1%201-1.4-3-3.3-1.6.7zm-20.1-8.7.5%201.6h4.5l.5-1.6zm21.1%200-.5%201.6h-4.5l-.5-1.6zm-11.6%2021.9q.1-1%201.1-1a1%201%200%200%201%201.1%201q-.1%201-1%201a1%201%200%200%201-1.2-1m1.9-7.8%201.7-.4v-4.3l-1.7-.5zm-1.6%200-1.7-.4v-4.3l1.7-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M211.5%20294.2q.4-1.5%201.8-2V287h1.6v5.3q1.3.5%201.7%201.6h4.4v.3h-6a1%201%200%200%200-1-.6q-.6%200-1%20.6zm12.2%200v-.3h4.1l.2-.3-5-5.7%201.2-1%205%205.6.2-.1V285h1.6v7.3h.3l4.9-5.5%201.2%201-4.9%205.5.3.6h4v.3zm21.6%200a1%201%200%200%201%201-.6q.7%200%201%20.6h1.6q-.4-1.5-1.8-2V287h-1.6v5.3q-1.2.4-1.7%201.6h-4.4v.3zm-30.2-15%206%206.8%201.3-1-6.1-6.7.3-.6h4.4V276h-4.4a3%203%200%200%200-2.5-1.7%202.6%202.6%200%200%200-2.7%202.5%203%203%200%200%200%201.8%202.4v5.2h1.6v-5.2zm32%200v5.3h-1.7v-5.2l-.4-.2-6%206.8-1.3-1%206.2-6.9-.1-.3h-4.5V276h4.5a3%203%200%200%201%202.4-1.7%202.6%202.6%200%200%201%202.7%202.5%202.5%202.5%200%200%201-1.9%202.4zm-16.1%200v3.3h-1.7v-3.2a3%203%200%200%201-1.7-1.6h-4V276h4a3%203%200%200%201%202.5-1.7q2%20.1%202.5%201.7h4v1.6h-4a3%203%200%200%201-1.6%201.6m-17.8%204-1.7.4v4.3l1.7.5zm1.6%200%201.7.4v4.3l-1.7.5zm30.6%200-1.7.4v4.3l1.7.5zm1.6%200%201.7.4v4.3l-1.7.5zm-25.5.8%201.6-.7%202.9%203.3-1%201.4zm-1.3%201-1%201.4%203%203.3%201.6-.7zm18.5-1.1-1.6-.7-3%203.3%201%201.4zm1.2%201%201%201.4-3%203.3-1.5-.7zm-20.3%209%20.5-1.6h4.5l.5%201.6zm-6.7-17q0-1%201.2-1a1%201%200%200%201%201%201q0%201-1%201a1%201%200%200%201-1.2-1m12.1.8-.5%201.6H220l-.5-1.6zm0-1.6-.5-1.6H220l-.5%201.6zm15.7%2017.8-.5-1.6h-4.5l-.5%201.6zm4.4-17q.1-1%201.1-1a1%201%200%200%201%201.1%201q-.1%201-1%201a1%201%200%200%201-1.2-1m-16.1%200q.1-1%201.1-1a1%201%200%200%201%201.1%201q-.1%201-1.1%201a1%201%200%200%201-1.1-1m6.2.8.5%201.6h4.6l.5-1.6zm0-1.6.5-1.6h4.6l.5%201.6zm-5.9%205-1.7.5v4.3l1.7.5V281m1.7%200%201.6.5v4.3l-1.6.5z'/%3e%3cpath%20fill='none'%20stroke='%23c8b100'%20stroke-width='.3'%20d='M232.7%20316.3a16%2016%200%200%200%203.7-1.1l.8%201.4a18%2018%200%200%201-4.3%201.2%203%203%200%200%201-2.6%202%203%203%200%200%201-2.5-2%2018%2018%200%200%201-4.6-1.2l.8-1.4q2%20.8%204%201a3%203%200%200%201%201.5-1.3v-6.7h1.6v6.7q1.1.3%201.6%201.4zm-4.7-20.4-.2-.5h-4V294h4l.2-.4-5-5.6%201.2-1%205%205.5h.2V285h1.7v7.3h.2l4.9-5.5%201.2%201-4.9%205.5.3.6h4v1.5h-4q0%20.3-.3.5l4.7%205.3-1.3%201-4.6-5.3-.2.1v8.7h-1.6V297l-.2-.1-4.8%205.3-1.2-1%204.7-5.3m-12.8-16.7%206%206.8%201.3-1-6.1-6.7.3-.6h4.4V276h-4.4a3%203%200%200%200-2.5-1.7%202.6%202.6%200%200%200-2.6%202.5%203%203%200%200%200%201.7%202.4v5.2h1.6v-5.2zm6.5%2034.8-.8%201.4a17%2017%200%200%201-3.6-3.1q-1.4.3-2.5-.5a2.4%202.4%200%200%201-.3-3.5l.1-.1a15%2015%200%200%201-1.2-4.8h1.6a13%2013%200%200%200%201%204q.8%200%201.4.2l4.1-4.5%201.3%201-4.1%204.5q.8%201.5-.1%202.8a15%2015%200%200%200%203.1%202.6zm-8.4-13.1V297a3%203%200%200%201-1.8-2.4q.2-1.6%201.8-2.4V287h1.6v5.3q1.3.4%201.7%201.6h4.4v1.5h-4.4a3%203%200%200%201-1.6%201.6v3.9h-1.7m2.3%208.3q.7-.7%201.6%200c.9.7.5%201%20.1%201.4a1%201%200%200%201-1.6.1%201%201%200%200%201%200-1.5zm-2-4.5-1.7-.3-.3-4.3%201.7-.6v2.5q0%201.4.3%202.7zm1.4-5.3%201.6.4v2.2c0-.8.3%202.1.3%202.1l-1.7.6-.3-2.7v-2.6zm5.5%2013.7a16%2016%200%200%200%204.8%202.6l.4-1.6a14%2014%200%200%201-4-2l-1.2%201m-.8%201.4a17%2017%200%200%200%204.8%202.6l-1.2%201.1a19%2019%200%200%201-4-2l.4-1.7'/%3e%3cpath%20fill='none'%20stroke='%23c8b100'%20stroke-width='.3'%20d='m221.9%20305.1%201.6.7%203-3.3-1-1.4-3.6%204m-1.3-1-1-1.4%203-3.3%201.6.7-3.6%204m-7.6-9.5q.1-1%201-1%201.1.1%201.2%201-.1%201-1.1%201.1a1%201%200%200%201-1.1-1zm25.7%2019.4.8%201.4a17%2017%200%200%200%203.6-3.1q1.4.3%202.6-.5a2.4%202.4%200%200%200%20.2-3.5l-.1-.1a15%2015%200%200%200%201.3-4.8h-1.7a13%2013%200%200%201-1%204l-1.4.2-4.1-4.5-1.3%201%204.1%204.5a2.4%202.4%200%200%200%20.1%202.8%2015%2015%200%200%201-3%202.6zm8.4-13.1V297a3%203%200%200%200%201.8-2.4q0-1.6-1.8-2.4V287h-1.6v5.3q-1.2.4-1.7%201.6h-4.4v1.5h4.4q.5%201.2%201.7%201.6v3.9zm-2.3%208.3a1%201%200%200%200-1.6%200%201%201%200%200%200-.1%201.4%201%201%200%200%200%201.6.1%201%201%200%200%200%200-1.5zm2-4.5%201.7-.3.3-4.3-1.7-.6v2.5q0%201.4-.2%202.7zm-1.3-5.3-1.7.4v2.2c0-.8-.3%202.1-.3%202.1l1.7.6.3-2.7v-2.6m1.6-20.1v5.2h-1.6v-5.2l-.4-.2-6%206.8-1.2-1%206-7v-.2h-4.5V276h4.4a3%203%200%200%201%202.5-1.7%202.6%202.6%200%200%201%202.6%202.5%203%203%200%200%201-1.8%202.4zm-16%200v3.2h-1.7v-3.2a3%203%200%200%201-1.7-1.6h-4V276h4q.7-1.6%202.5-1.7c1.8-.1%202.2.7%202.5%201.7h4v1.6h-4a3%203%200%200%201-1.6%201.6zm8.8%2033.8a16%2016%200%200%201-4.8%202.6l-.4-1.6a14%2014%200%200%200%204-2l1.2%201m.8%201.4a17%2017%200%200%201-4.8%202.6l1.2%201.1a19%2019%200%200%200%204-2l-.4-1.7m-27.4-31.4-1.7.5v4.3l1.7.5v-5.2m1.7%200%201.6.4v4.3l-1.6.5V283m30.5%200-1.7.5v4.3l1.7.5V283'/%3e%3cpath%20fill='none'%20stroke='%23c8b100'%20stroke-width='.3'%20d='m247.1%20283.1%201.7.5v4.3l-1.7.5V283m-8.6%2022-1.6.7-2.9-3.3%201-1.4%203.5%204m1.3-1%201-1.4-3-3.3-1.6.7%203.6%204m-18.2-20%201.6-.7%203%203.3-1%201.4-3.6-4m-1.3%201-1%201.4%203%203.3%201.6-.7-3.6-4m18.5-1.1-1.6-.7-3%203.3%201%201.4%203.6-4m1.2%201%201%201.4-3%203.2-1.5-.6%203.5-4m-20.3%209%20.5-1.6h4.5l.5%201.6h-5.5m0%201.5.5%201.6h4.5l.5-1.6h-5.5M213%20277q0-1%201.2-1%201%200%201%201c0%201-.4%201-1%201a1%201%200%200%201-1.2-1zm12.1.8-.5%201.6h-4.5l-.5-1.6h5.5m0-1.6-.5-1.6h-4.5l-.5%201.6h5.5m20.1%2018.5q.1-.9%201.1-1%201%20.1%201.1%201-.1%201-1%201.1a1%201%200%200%201-1.2-1zm-4.4-.7-.5-1.6h-4.5l-.5%201.6h5.5m0%201.5-.5%201.6h-4.5l-.5-1.6h5.5m-11.6%2021.9q.1-1%201.1-1t1.1%201c.1%201-.5%201-1%201a1%201%200%200%201-1.2-1zm1.9-7.8%201.7-.4v-4.3l-1.7-.5v5.2m-1.6%200-1.7-.4v-4.3l1.7-.5v5.2m15.7-32.6q.1-1%201.1-1a1%201%200%200%201%201.1%201q-.1%201-1%201a1%201%200%200%201-1.2-1zm-16.1%200q.1-1%201.1-1a1%201%200%200%201%201.1%201q-.1%201-1%201a1%201%200%200%201-1.2-1zm6.2.8.5%201.6h4.6l.5-1.6h-5.5m0-1.6.4-1.6h4.6l.5%201.6h-5.5m-6%205-1.6.5v4.3l1.6.5V281m1.7%200%201.6.5v4.3l-1.6.5V281'/%3e%3cpath%20fill='%23058e6e'%20d='M227.7%20294.7a2.6%202.6%200%200%201%202.6-2.5%202.6%202.6%200%200%201%202.6%202.5%202.6%202.6%200%200%201-2.6%202.4c-1.4%200-2.6-1-2.6-2.4'/%3e%3cpath%20fill='%23db4446'%20d='M230.9%20229.7v-.6l.1-.3-2.3-.1a6%206%200%200%201-2.3-1.2q-1-1-1.6-1.2c-1.3-.2-2.3.4-2.3.4s1%20.4%201.7%201.3%201.5%201.3%201.8%201.4c.6.2%202.6%200%203.1.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M230.9%20229.7v-.6l.1-.3-2.3-.1a6%206%200%200%201-2.3-1.2q-1-1-1.6-1.2c-1.3-.2-2.3.4-2.3.4s1%20.4%201.7%201.3%201.5%201.3%201.8%201.4c.6.2%202.6%200%203.1.1z'/%3e%3cpath%20fill='%23ed72aa'%20stroke='%23000'%20stroke-width='.4'%20d='M238.1%20227.5v1.4c.2.6-.1%201.2%200%201.5q0%20.5.3.9l.2.9-.7-.5-.6-.4v1l.6%201.1%201%201.3c.2.5.1%201.4.1%201.4s-.4-.7-.8-.8l-1.2-.7s.7.8.7%201.5l-.3%201.6c-.1.2-.3-.7-.8-1.1l-1-.9s.4%201.2.4%202v2.3l-.9-1-1-.7c0-.2.5.6.6%201.1s.3%202.3%201.8%204.5c1%201.3%202.3%203.6%205.3%202.9s1.9-4.8%201.3-6.7a17%2017%200%200%201-1-4.6c0-.8.6-2.9.5-3.3a8%208%200%200%201%20.2-3.1l.9-2.3.4-1.3.1-1.3.7%201.3.1%201.5s.1-1%201-1.6%201.8-1.1%202-1.4l.3-.5c-.1%200%200%201.8-.6%202.6l-1.7%202s.7-.3%201.2-.3h.9s-.6.4-1.4%201.6c-.8%201-.5%201.2-1%202.1s-1%201-1.7%201.5c-1%20.8-.5%204.2-.4%204.7.2.5%202%204.5%202%205.5s.2%203.2-1.5%204.6c-1.1%201-3%201-3.4%201.2-.4.3-1.2%201.1-1.2%202.8s.6%202%201%202.4c.6.5%201.2.2%201.3.6l.5.7q.3.3.2.8c0%20.3-.8%201.1-1.1%201.7l-.8%202.4c0%20.2-.1%201%20.1%201.3%200%200%20.9%201%20.3%201.2-.4.2-.8-.2-1-.2l-.9.5q-.3-.1-.4-.8l-.1-.7q-.3%200-.4.5c0%20.2%200%20.8-.3.8l-.8-.5c-.2%200-.8-.2-.8-.4q.1-.6.7-1%20.8-.1.5-.5t-.7%200c-.3.4-.8%200-.7-.2v-.8c0-.2-.4-.5.1-.8s.8.2%201.4.1q.8%200%201-.6.3-.6-.2-1.4l-.9-.8-.3-.9v2.2l-.7-.8c-.3-.3-.6-1.3-.6-1.3v1.3l.2.8c-.1.1-.8-.7-1-.8l-1-1-.4-1.4v-1.5l.4-1h-1.4c-.7%200-1.2-.3-1.5.2q-.4.8.2%202.8.5%201.8.4%202.1l-.7.8h-.9l-1.2-.3h-1.3l-1.1-.3c-.3.1-.8.3-.6.7q.1.8-.5.7l-.9-.2q-.8%200-.8-.4t.4-.7q.3-.5%200-.5h-.6q-.3.4-.8.4-.3-.1-.4-1c-.1-.9-.7-1.2%200-1.1.5%200%201.3.4%201.4%200q.2-.4-.2-.7c-.4-.3-.8-.4-.3-.7l.7-.5c.1-.2.4-.8.7-.6.6.2%200%20.7.6%201.3s1%201%202%20.8q1.4%200%201.3-.5l-.1-1v-1s-.4.3-.5.6l-.4.8v-2l-.2-.8-.3.9-.1%201s-.7-.5-.5-1.5l.1-2c.2-.3.7-1.5%202-1.6h2.6l2-.3s-2.8-1.4-3.5-1.9a10%2010%200%200%201-2-2l-.6-1.6s-.5%200-1%20.3l-1.2%201-.7%201%20.1-1.2v-.8s-.4%201.2-1%201.7l-1.4%201v-.8l.2-1s-.4.8-1.1%201c-.7%200-1.8%200-1.9.4q.2.8%200%201.4c0%20.3-.4.5-.4.5l-.8-.4-.7.2c-.1.1-.3-.4-.2-.7s.7-.6.5-.8l-.8.2c-.3.1-.8.3-.8-.2q.2-.6%200-1%200-.4.2-.6l1.2-.1q0-.4-.8-.6-1-.2-.5-.8.3-.2.5-.6c.1-.2.2-.7.7-.5.5.3.4.8%201%201a4%204%200%200%200%202-.2l1.5-1%201.5-1-1-.8q-.5-.7-1-1l-1.8-.6-1.7-.5.8-.3q.4-.5.8-.6h.3-1.4c-.3-.1-1-.6-1.3-.6l-.8.1s.8-.4%201.4-.5l1-.1s-.9-.3-1.1-.6l-.6-1q-.2-.3-.6-.5l-1%20.3q-.6%200-.6-.6l-.1-.5c-.2-.3-.6-.8-.2-1h1.4q-.2-.4-.8-.8c-.4-.2-1-.5-.7-.8l.8-.5c.2-.3.3-1%20.7-.7.4.2.8%201.2%201.1%201.1s.3-.8.3-1c0-.4%200-1%20.2-.9l1%20.5q.8-.1%201%20.2%200%20.5-.6%201-.4.6-.3%201.4.4%201%201.2%201.4t1.7.9c.5.3%201.7%201.2%202.1%201.3l.8.4s.5-.2%201.1-.2%202.1%200%202.6-.2%201.3-.6%201-1c-.1-.6-1.3-1-1.2-1.4q0-.5%201.2-.4c.8%200%201.8.1%202-1q.5-1.4-.8-1.8c-1-.2-1.8-.2-2-1q-.4-1-.2-1.1.3-.3%201.4-.4%201.3%200%201.9-.2l.6-.9c.3-.2%201.4-.4%201.4-.4s1.4.7%202.7%201.7l2.2%202.1'/%3e%3cpath%20d='m228.1%20226.8-.2-.6v-.3s.8%200%20.7.3q0%20.2-.3.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m228.1%20226.8-.2-.6v-.3s.8%200%20.7.3q0%20.2-.3.3z'/%3e%3cpath%20d='M232%20225.4v-.4s.7%200%201%20.3c.5.4.9%201%20.9%201l-.8-.4h-.5l-.3-.1v-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M232%20225.4v-.4s.7%200%201%20.3c.5.4.9%201%20.9%201l-.8-.4h-.5l-.3-.1v-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m237.3%20231.3-.4-.7-.3-.4'/%3e%3cpath%20fill='%23db4446'%20d='M217.4%20226.6s.5.4.8.4h.8s.2-.5.1-.8c-.2-1.2-1.2-1.4-1.2-1.4s.3.7.1%201z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M217.4%20226.6s.5.4.8.4h.8s.2-.5.1-.8c-.2-1.2-1.2-1.4-1.2-1.4s.3.7.1%201z'/%3e%3cpath%20fill='%23db4446'%20d='M215.2%20227.6s-.4-.7-1.3-.6-1.4.8-1.4.8h1.2c.3.3.4%201%20.4%201l.7-.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M215.2%20227.6s-.4-.7-1.3-.6-1.4.8-1.4.8h1.2c.3.3.4%201%20.4%201l.7-.6z'/%3e%3cpath%20fill='%23db4446'%20d='M214.2%20230.6s-.8.1-1.2.6-.3%201.3-.3%201.3.4-.5.9-.5l1%20.2-.1-.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M214.2%20230.6s-.8.1-1.2.6-.3%201.3-.3%201.3.4-.5.9-.5l1%20.2-.1-.8z'/%3e%3cpath%20d='m228.2%20230.5.3-.5.3.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m228.2%20230.5.3-.5.3.5h-.7'/%3e%3cpath%20d='m229%20230.5.3-.5.4.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m229%20230.5.3-.5.4.5h-.8'/%3e%3cpath%20d='m228.6%20227.3.8.3-.7.4-.1-.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m228.6%20227.3.8.3-.7.4-.1-.6'/%3e%3cpath%20d='m229.5%20227.6.7.2-.5.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m229.5%20227.6.7.2-.5.4-.2-.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M224.2%20233.7s-.7.2-1%20.6q-.4.9-.3%201c.1.1.6-.5%201.5-.3l1.2.3%201.3-.3s-.7.8-.7%201.3l.2%201.1c0%20.7-.6%201.6-.6%201.6l1-.3%201.7-.8.9-1s-.2%201%200%201.4l.2%201.6.8-.6q.5-.2.9-.7l.3-1s0%20.8.4%201.3l.6%201.6s.3-.8.6-1.1l.7-1-.1-.9.4.8m-11%20.6s.5-.8%201-1l1.1-.8.9-.4m1%205%201.3-.8%201-1'/%3e%3cpath%20fill='%23db4446'%20d='M216.6%20240.4s-.4-.5-1.1-.3c-.7%200-1.2.9-1.2.9s.6-.2%201-.1.6.4.6.4l.4-.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M216.6%20240.4s-.4-.5-1.1-.3c-.7%200-1.2.9-1.2.9s.6-.2%201-.1.6.4.6.4l.4-.4z'/%3e%3cpath%20fill='%23db4446'%20d='M215.8%20243.2s-.6%200-1.1.3c-.5.4-.5%201.2-.5%201.2s.4-.4.8-.3l.9.2v-.6c.2-.4-.1-.8-.1-.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M215.8%20243.2s-.6%200-1.1.3c-.5.4-.5%201.2-.5%201.2s.4-.4.8-.3l.9.2v-.6c.2-.4-.1-.8-.1-.8z'/%3e%3cpath%20fill='%23db4446'%20d='M217.2%20245.8s0%20.8.3%201.3c.4.5%201.1.5%201.1.5l-.3-.7.3-.8q.1-.1-.7-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M217.2%20245.8s0%20.8.3%201.3c.4.5%201.1.5%201.1.5l-.3-.7.3-.8q.1-.1-.7-.3zm16%201.3s2%201.2%201.9%202.2c0%201-1%202.3-1%202.3'/%3e%3cpath%20fill='%23db4446'%20d='M224.2%20252.6s-.4-.6-1.1-.6-1.4.7-1.4.7.8-.1%201%20.2l.5.6.5-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M224.2%20252.6s-.4-.6-1.1-.6-1.4.7-1.4.7.8-.1%201%20.2l.5.6.5-.3z'/%3e%3cpath%20fill='%23db4446'%20d='M222.2%20255.3s-1-.1-1.4.3-.4%201.3-.4%201.3.6-.6%201-.5q.9.1%201%20.3v-.7l-.3-.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M222.2%20255.3s-1-.1-1.4.3-.4%201.3-.4%201.3.6-.6%201-.5q.9.1%201%20.3v-.7l-.3-.7z'/%3e%3cpath%20fill='%23db4446'%20d='M224%20258.1s-.3.7%200%201.1%201%20.8%201%20.8-.3-.4-.2-.8c.1-.3.7-.8.7-.8l-1.4-.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M224%20258.1s-.3.7%200%201.1%201%20.8%201%20.8-.3-.4-.2-.8c.1-.3.7-.8.7-.8l-1.4-.2z'/%3e%3cpath%20fill='%23db4446'%20d='M236%20259.3s-.8-.2-1.2%200c-.5.3-.8%201.4-.8%201.4s.7-.6%201.2-.5q.9.1%201%20.3v-.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M236%20259.3s-.8-.2-1.2%200c-.5.3-.8%201.4-.8%201.4s.7-.6%201.2-.5q.9.1%201%20.3v-.8z'/%3e%3cpath%20fill='%23db4446'%20d='M236.4%20262.2s-.6.6-.4%201.1l.6%201s0-.7.2-1l1-.3-.7-.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M236.4%20262.2s-.6.6-.4%201.1l.6%201s0-.7.2-1l1-.3-.7-.5z'/%3e%3cpath%20fill='%23db4446'%20d='M239.4%20263s-.3.8.2%201.3l1%20.5q-.2-.3-.2-1.1.3-.7.5-.7l-.8-.2-.7.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M239.4%20263s-.3.8.2%201.3l1%20.5q-.2-.3-.2-1.1.3-.7.5-.7l-.8-.2-.7.3z'/%3e%3cpath%20fill='%23ffd691'%20stroke='%23000'%20stroke-width='.5'%20d='M208.8%20316.4q3%201%203%203.8c0%202.3-2.2%204-5%204-3%200-5.3-1.7-5.3-4%200-1.7%201-3.6%203-3.8l-.2-.4-.7-.7h1.2l.8.5.5-.7.6-.5.6.6.3.5.7-.4.8-.3s0%20.4-.2.7l-.1.7'/%3e%3cpath%20fill='%23058e6e'%20stroke='%23000'%20stroke-width='.5'%20d='M206.3%20326.7s-3.8-2.6-5.5-3c-2-.4-4.5%200-5.5%200%200%200%201.2.8%201.8%201.4.5.5%202.3%201.5%203.3%201.8%203%20.8%206-.2%206-.2m1%20.2s2.4-2.5%205-2.9c3-.4%205%20.3%206.2.6l-1.5.8c-.5.3-2%201.5-4%201.6-2%200-4.4-.3-4.8-.2l-.9.1'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.5'%20d='M206.7%20323.8a5%205%200%200%201%200-7.1%205%205%200%200%201%201.5%203.5%205%205%200%200%201-1.5%203.6'/%3e%3cpath%20fill='%23058e6e'%20stroke='%23000'%20stroke-width='.5'%20d='M205.7%20329s.6-1.5.6-2.7l-.1-2.1h.8s.3%201.1.3%202l-.1%202.4-.7.1-.8.3'/%3e%3cpath%20fill='%23fff'%20d='M254%20190.7q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M254%20190.7q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M255.4%20188.2q.1-1%201.1-1t1%201c0%201-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M255.4%20188.2q.1-1%201.1-1t1%201c0%201-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M256.4%20185.2q.1-.9%201-1%201%20.1%201.1%201c.1.9-.5%201-1%201a1%201%200%200%201-1.1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M256.4%20185.2q.1-.9%201-1%201%20.1%201.1%201c.1.9-.5%201-1%201a1%201%200%200%201-1.1-1z'/%3e%3cpath%20fill='%23fff'%20d='M256.5%20182q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M256.5%20182q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M255.7%20179q.1-1%201-1%201.1%200%201.2%201c.1%201-.5%201-1.1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M255.7%20179q.1-1%201-1%201.1%200%201.2%201c.1%201-.5%201-1.1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M254.1%20176.1q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M254.1%20176.1q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M252%20173.8q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M252%20173.8q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M249.4%20171.8q.1-.9%201.1-1a1%201%200%200%201%200%202q-1%200-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M249.4%20171.8q.1-.9%201.1-1a1%201%200%200%201%200%202q-1%200-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M246.5%20170.3q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M246.5%20170.3q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M243.3%20169.1q.1-.9%201.1-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M243.3%20169.1q.1-.9%201.1-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M239.9%20168.5q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M239.9%20168.5q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M236.6%20168.3q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M236.6%20168.3q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M233.3%20168.5q.1-1%201-1t1.1%201c.1%201-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M233.3%20168.5q.1-1%201-1t1.1%201c.1%201-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M230.1%20168.5q.1-1%201-1t1.1%201c.1%201-.5%201-1%201a1%201%200%200%201-1.1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M230.1%20168.5q.1-1%201-1t1.1%201c.1%201-.5%201-1%201a1%201%200%200%201-1.1-1z'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M231.7%20171.2q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1m.6%203.1q0-1%201-1c1%200%201%20.4%201%201q0%20.9-1%201a1%201%200%200%201-1-1m0%203q.2-.9%201.1-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1m-1%202.8q.1-.9%201-1%201%20.1%201.1%201%200%201-1%201a1%201%200%200%201-1-1m-1.9%202.6q.1-.9%201-1%201.1.1%201.2%201%200%201.2-1.1%201-1%200-1-1'/%3e%3cpath%20fill='%23fff'%20d='M227.6%20166.5q.1-.9%201.1-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M227.6%20166.5q.1-.9%201.1-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M224.8%20165q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M224.8%20165q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M221.6%20164q.1-1%201-1t1.1%201q-.1.9-1%201-1-.1-1.1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M221.6%20164q.1-1%201-1t1.1%201q-.1.9-1%201-1-.1-1.1-1z'/%3e%3cpath%20fill='%23fff'%20d='M218.3%20163.4q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1.1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M218.3%20163.4q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1.1-1z'/%3e%3cpath%20fill='%23fff'%20d='M215%20163.5q.1-1%201.1-1t1%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M215%20163.5q.1-1%201.1-1t1%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M211.7%20164q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M211.7%20164q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M208.6%20165.1q.1-.9%201-1%201%20.1%201.1%201c.1.9-.5%201-1%201a1%201%200%200%201-1.1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M208.6%20165.1q.1-.9%201-1%201%20.1%201.1%201c.1.9-.5%201-1%201a1%201%200%200%201-1.1-1z'/%3e%3cpath%20fill='%23fff'%20d='M156%20190.7q0-.9%201-1c1-.1%201%20.5%201%201q0%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M156%20190.7q0-.9%201-1c1-.1%201%20.5%201%201q0%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M154.5%20188.2q.1-1%201-1t1%201c0%201-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M154.5%20188.2q.1-1%201-1t1%201c0%201-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M153.5%20185.2q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M153.5%20185.2q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M153.4%20182q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M153.4%20182q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M154.2%20179q.1-1%201-1t1%201c0%201-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M154.2%20179q.1-1%201-1t1%201c0%201-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M155.8%20176.1q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M155.8%20176.1q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M158%20173.8q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M158%20173.8q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M160.5%20171.8q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M160.5%20171.8q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M163.5%20170.3q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M163.5%20170.3q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M166.6%20169.1q.1-.9%201-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M166.6%20169.1q.1-.9%201-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M170%20168.5q.1-.9%201.1-1a1%201%200%200%201%200%202q-1%200-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M170%20168.5q.1-.9%201.1-1a1%201%200%200%201%200%202q-1%200-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M173.4%20168.3q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M173.4%20168.3q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M176.6%20168.5q.1-1%201-1t1.1%201c.1%201-.5%201-1%201a1%201%200%200%201-1.1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M176.6%20168.5q.1-1%201-1t1.1%201c.1%201-.5%201-1%201a1%201%200%200%201-1.1-1z'/%3e%3cpath%20fill='%23fff'%20d='M179.8%20168.5q.1-1%201-1%201.1%200%201.2%201c.1%201-.5%201-1.1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M179.8%20168.5q.1-1%201-1%201.1%200%201.2%201c.1%201-.5%201-1.1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M178.2%20171.2q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1m-.7%203.1q0-1%201-1c1%200%201%20.4%201%201q0%20.9-1%201a1%201%200%200%201-1-1m-.2%203q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1m.9%202.8q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1.1-1m1.8%202.6q.1-.9%201-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1'/%3e%3cpath%20fill='%23fff'%20d='M182.3%20166.5q.1-.9%201-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M182.3%20166.5q.1-.9%201-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M185.2%20165q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M185.2%20165q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M188.3%20164q.1-1%201-1t1.1%201q0%20.9-1%201c-1%20.1-1-.5-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M188.3%20164q.1-1%201-1t1.1%201q0%20.9-1%201c-1%20.1-1-.5-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M191.6%20163.4q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M191.6%20163.4q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M194.9%20163.5q0-1%201-1c1%200%201%20.4%201%201q0%20.9-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M194.9%20163.5q0-1%201-1c1%200%201%20.4%201%201q0%20.9-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M198.2%20164q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M198.2%20164q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M201.3%20165.1q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M201.3%20165.1q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M174.7%20228.9h-1v-1h-1.5v3.6h1.6v2.5h-3.4v7h1.8v14.3h-3.5v7.3h27.2v-7.3h-3.5V241h1.8v-7h-3.4v-2.5h1.6V228h-1.6v.9h-.8v-1h-1.6v1h-1.1v-1h-1.6v3.6h1.6v2.5H184v-7.8h1.7v-3.5H184v.9h-1v-1h-1.5v1h-.9v-1H179v3.6h1.7v7.8h-3.3v-2.5h1.6V228h-1.6v.9h-.9v-1h-1.8zm-6%2033.7H196m-27.3-1.8H196m-27.3-1.8H196m-27.3-1.7H196m-27.3-2H196m-23.8-1.6h20.2m-20.2-1.8h20.2m-20.2-2h20.2m-20.2-1.7h20.2m-20.2-1.8h20.2m-20.2-1.8h20.2m-20.2-1.7h20.2m-22-1.8h23.8m-23.8-1.8h23.8m-23.8-1.8h23.8m-23.8-1.8h23.8m-20.4-1.7h17m-10.2-1.8h3.4m-3.4-1.8h3.4m-3.4-1.8h3.4m-3.4-1.7h3.4m-5.1-2.2h6.8m-12%207.5h3.6m-5-2.2h6.6m-6.7%2032.6v-1.8m0-1.8v-1.7m-1.8%201.7v1.8m3.4%200V259m1.7%203.6v-1.8m0-1.8v-1.7m0-2v-1.6m0-1.8v-2m-1.7%207.4v-2m-3.4%202v-2m7%200v2m1.5-2v-1.6m-5.1-1.8v1.8m3.5-1.8v1.8m3.3-1.8v1.8M179%20252v-2m1.7-1.7v1.7m0-5.3v1.8m-1.7-3.6v1.8m1.7-3.5v1.7m-3.3-1.7v1.7m-3.5-1.7v1.7m-1.6-3.5v1.8m3.3-1.8v1.8m3.4-1.8v1.8m1.7-3.6v1.8m-3.3-1.8v1.8m-3.5-1.8v1.8m-1.6-3.6v1.8m6.7-1.8v1.8m-3.4-5.3v1.8m15.3-1.8h-3.5m5-2.2h-6.6m6.7%2032.6v-1.8m0-1.8v-1.7m1.8%201.7v1.8m-3.4%200V259m-1.7%203.6v-1.8m0-1.8v-1.7m0-2v-1.6m0-1.8v-2m1.7%207.4v-2m3.4%202v-2m-7%200v2m-1.5-2v-1.6m5.1-1.8v1.8m-3.5-1.8v1.8m-3.3-1.8v1.8m1.7-1.8v-2m-1.7-1.7v1.7m0-5.3v1.8m1.7-3.6v1.8m-1.7-3.5v1.7m3.3-1.7v1.7m3.5-1.7v1.7m1.6-3.5v1.8m-3.3-1.8v1.8m-3.4-1.8v1.8m-1.7-3.6v1.8m3.3-1.8v1.8m3.5-1.8v1.8m1.6-3.6v1.8m-6.7-1.8v1.8m3.4-5.3v1.8m-7%2018v-2m0-5.4v-1.8m0%205.4v-1.8m0-5.3v-1.8m0-1.8v-1.7m0-3.6v-1.8m0-1.7v-1.8m-8.3%204.6h3.5m3.3-5.3h3.4m3.3%205.3h3.5'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M186.8%20262.6v-4.7c0-.8-.4-3.5-4.6-3.5-4%200-4.4%202.7-4.4%203.5v4.7z'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='m179.3%20258.2-2.2-.3c0-.9.2-2.2.9-2.6l2%201.5c-.3.2-.7%201-.7%201.4zm6%200%202.2-.3c0-.9-.2-2.2-.9-2.6l-2%201.5c.3.2.7%201%20.7%201.4zm-2.2-2.3%201-2-2-.4-1.7.4%201.1%202zm-4.2-5.5v-4.9c0-1.3-1-2.4-2.5-2.4s-2.4%201-2.4%202.4v4.9zm6.8%200v-4.9c0-1.3%201-2.4%202.5-2.4s2.4%201%202.4%202.4v4.9zm-1.7-12%20.4-4.4h-4.2l.2%204.4zm3.3%200-.4-4.4h4.4l-.5%204.4zm-10%200%20.2-4.4h-4.2l.5%204.4z'/%3e%3cpath%20fill='%230039f0'%20d='M185.3%20262.6v-4c0-.7-.5-2.7-3.1-2.7-2.4%200-2.9%202-2.9%202.7v4zm-6.9-12.7v-4.2c0-1-.6-2.2-2-2.2s-2%201.1-2%202.2v4.3h4zm7.8%200v-4.2c0-1%20.7-2.2%202-2.2s2%201.1%202%202.2v4.3h-4z'/%3e%3cpath%20fill='%23ad1519'%20d='M190.8%20269.8c0-9.7%207-17.6%2015.6-17.6s15.6%207.9%2015.6%2017.6-7%2017.5-15.6%2017.5-15.6-7.8-15.6-17.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.6'%20d='M190.8%20269.8c0-9.7%207-17.6%2015.6-17.6s15.6%207.9%2015.6%2017.6-7%2017.5-15.6%2017.5-15.6-7.8-15.6-17.5z'/%3e%3cpath%20fill='%23005bbf'%20d='M195.4%20269.7c0-7%205-12.8%2011-12.8s11%205.7%2011%2012.8-5%2013-11%2013-11-5.8-11-13'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.6'%20d='M195.4%20269.7c0-7%205-12.8%2011-12.8s11%205.7%2011%2012.8-5%2013-11%2013-11-5.8-11-13z'/%3e%3cpath%20fill='%23c8b100'%20d='M201.2%20260.9s-1.3%201.4-1.3%202.7a6%206%200%200%200%20.6%202.4q-.4-.8-1.4-.8-1.3.1-1.4%201.3l.2.8.5.9q.2-.5%201-.5%201.1%200%201%201v.2h-1.2v1h1l-.8%201.5%201-.4.8.9.8-.9%201%20.4-.7-1.5h1v-1h-1.1v-.3a1%201%200%200%201%201-1q.6%200%201%20.6l.4-1%20.2-.7a1.4%201.4%200%200%200-1.4-1.3q-1%200-1.4.9s.6-1.2.6-2.5-1.4-2.7-1.4-2.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='M201.2%20260.9s-1.3%201.4-1.3%202.7a6%206%200%200%200%20.6%202.4q-.4-.8-1.4-.8-1.3.1-1.4%201.3l.2.8.5.9q.2-.5%201-.5%201.1%200%201%201v.2h-1.2v1h1l-.8%201.5%201-.4.8.9.8-.9%201%20.4-.7-1.5h1v-1h-1.1v-.3a1%201%200%200%201%201-1q.6%200%201%20.6l.4-1%20.2-.7a1.4%201.4%200%200%200-1.4-1.3q-1%200-1.4.9s.6-1.2.6-2.5-1.4-2.7-1.4-2.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M199.2%20269.9h4.1v-1h-4.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M199.2%20269.9h4.1v-1h-4.1z'/%3e%3cpath%20fill='%23c8b100'%20d='M211.4%20260.9s-1.3%201.4-1.3%202.7.6%202.4.6%202.4q-.3-.8-1.4-.8-1.3.1-1.4%201.3l.2.8.5.9q.3-.5%201-.5a1%201%200%200%201%201%201v.2h-1.2v1h1l-.8%201.5%201-.4.8.9.8-.9%201%20.4-.7-1.5h1v-1h-1.1v-.3a1%201%200%200%201%201-1q.7%200%201%20.6l.4-1%20.2-.7a1.4%201.4%200%200%200-1.4-1.3q-1%200-1.4.9s.6-1.2.6-2.5-1.4-2.7-1.4-2.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='M211.4%20260.9s-1.3%201.4-1.3%202.7.6%202.4.6%202.4q-.3-.8-1.4-.8-1.3.1-1.4%201.3l.2.8.5.9q.3-.5%201-.5a1%201%200%200%201%201%201v.2h-1.2v1h1l-.8%201.5%201-.4.8.9.8-.9%201%20.4-.7-1.5h1v-1h-1.1v-.3a1%201%200%200%201%201-1q.7%200%201%20.6l.4-1%20.2-.7a1.4%201.4%200%200%200-1.4-1.3q-1%200-1.4.9s.6-1.2.6-2.5-1.4-2.7-1.4-2.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M209.4%20269.9h4.1v-1h-4.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M209.4%20269.9h4.1v-1h-4.1z'/%3e%3cpath%20fill='%23c8b100'%20d='M206.3%20269.6s-1.3%201.5-1.3%202.8.6%202.4.6%202.4q-.3-.8-1.4-.9-1.3.1-1.4%201.4l.2.7.5%201q.2-.6%201-.6a1%201%200%200%201%201%201v.3h-1.2v1h1l-.8%201.5%201-.4.8.9.8-1%201%20.5-.7-1.5h1v-1h-1.1v-.3a1%201%200%200%201%201-1q.6%200%20.9.6l.5-1%20.2-.7a1.4%201.4%200%200%200-1.4-1.4q-1%200-1.4%201s.6-1.2.6-2.5-1.4-2.7-1.4-2.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='M206.3%20269.6s-1.3%201.5-1.3%202.8.6%202.4.6%202.4q-.3-.8-1.4-.9-1.3.1-1.4%201.4l.2.7.5%201q.2-.6%201-.6a1%201%200%200%201%201%201v.3h-1.2v1h1l-.8%201.5%201-.4.8.9.8-1%201%20.5-.7-1.5h1v-1h-1.1v-.3a1%201%200%200%201%201-1q.6%200%20.9.6l.5-1%20.2-.7a1.4%201.4%200%200%200-1.4-1.4q-1%200-1.4%201s.6-1.2.6-2.5-1.4-2.7-1.4-2.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M204.3%20278.6h4.1v-1h-4.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M204.3%20278.6h4.1v-1h-4.1z'/%3e%3cpath%20fill='%23c8b100'%20d='M237.6%20223.4h-.3l-.3.4q-.4.3-.8%200l-.1-.4h-.5q-.4-.3-.1-.7v-.5h-.3l-.1.2q-.3.4-.7.2v-.2h-.3c-.5.2-.7-1-.7-1.2l-.2.2s.2.7.1%201.2l-.3%201.2a9%209%200%200%201%202.9%201.6%209%209%200%200%201%202.2%202.3l1.2-.5c.6-.2%201.3-.2%201.3-.2l.2-.2c-.3%200-1.5.1-1.5-.4v-.2h-.2q-.3-.3%200-.7l.2-.1v-.3h-.3l-.2.1q-.4.5-.8%200l-.1-.4h-.5q-.4-.3%200-.8l.2-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M237.6%20223.4h-.3l-.3.4q-.4.3-.8%200l-.1-.4h-.5q-.4-.3-.1-.7v-.5h-.3l-.1.2q-.3.4-.7.2v-.2h-.3c-.5.2-.7-1-.7-1.2l-.2.2s.2.7.1%201.2l-.3%201.2a9%209%200%200%201%202.9%201.6%209%209%200%200%201%202.2%202.3l1.2-.5c.6-.2%201.3-.2%201.3-.2l.2-.2c-.3%200-1.5.1-1.5-.4v-.2h-.2q-.3-.3%200-.7l.2-.1v-.3h-.3l-.2.1q-.4.5-.8%200l-.1-.4h-.5q-.4-.3%200-.8l.2-.3z'/%3e%3cpath%20d='M235.4%20224h.2v.3h-.1q-.1-.1%200-.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M235.4%20224h.2v.3h-.1q-.1-.1%200-.2z'/%3e%3cpath%20d='m236.3%20224.8-.3-.2v-.2h.1l.4.3.3.2v.2h-.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='m236.3%20224.8-.3-.2v-.2h.1l.4.3.3.2v.2h-.2l-.3-.3'/%3e%3cpath%20d='m234.6%20223.7-.2-.2s-.1%200%200-.1l.3.1.3.1v.2h-.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='m234.6%20223.7-.2-.2s-.1%200%200-.1l.3.1.3.1v.2h-.1l-.3-.1'/%3e%3cpath%20d='M233.7%20223h.2v.2h-.2s-.1-.1%200-.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M233.7%20223h.2v.2h-.2s-.1-.1%200-.2z'/%3e%3cpath%20d='M237.3%20225.5v-.2h-.3l.1.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M237.3%20225.5v-.2h-.3l.1.2z'/%3e%3cpath%20d='m237.9%20226.2.2.2h.1v-.2l-.2-.2-.2-.2h-.1v.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='m237.9%20226.2.2.2h.1v-.2l-.2-.2-.2-.2h-.1v.2l.2.2'/%3e%3cpath%20d='M238.8%20227v-.3h-.3v.2h.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M238.8%20227v-.3h-.3v.2h.3z'/%3e%3cpath%20fill='%23c8b100'%20d='M236.2%20221.1h-.6l-.1.9v.1h.2l.7-.5-.3-.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M236.2%20221.1h-.6l-.1.9v.1h.2l.7-.5-.3-.5'/%3e%3cpath%20fill='%23c8b100'%20d='M234.6%20221.6v.5l.9.1h.1v-.2l-.5-.7z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M234.6%20221.6v.5l.9.1h.1v-.2l-.5-.7-.5.3'/%3e%3cpath%20fill='%23c8b100'%20d='m236.4%20222.6-.4.3-.6-.7v-.1h1.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m236.4%20222.6-.4.3-.6-.7v-.1h1.1v.5'/%3e%3cpath%20fill='%23c8b100'%20d='M235.3%20222h.4v.3h-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M235.3%20222h.4v.3h-.3z'/%3e%3cpath%20fill='%23c8b100'%20d='m233.2%20221.1-.2-.7-.4-.4s.4-.2.8.1%200%20.9%200%20.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m233.2%20221.1-.2-.7-.4-.4s.4-.2.8.1%200%20.9%200%20.9z'/%3e%3cpath%20fill='%23c8b100'%20d='m234.2%20221.4-.4.4-.6-.6v-.2h1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m234.2%20221.4-.4.4-.6-.6v-.2h1v.4'/%3e%3cpath%20fill='%23c8b100'%20d='m233.1%20221%20.3-.1v.3q0%20.3-.2.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m233.1%20221%20.3-.1v.3q0%20.3-.2.2z'/%3e%3cpath%20fill='%23c8b100'%20d='M238.3%20222.5h-.5l-.3.7v.2h.2l.8-.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M238.3%20222.5h-.5l-.3.7v.2h.2l.8-.4-.2-.5'/%3e%3cpath%20fill='%23c8b100'%20d='M236.7%20222.8v.5l.8.2h.1v-.2l-.4-.7z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M236.7%20222.8v.5l.8.2h.1v-.2l-.4-.7-.5.2'/%3e%3cpath%20fill='%23c8b100'%20d='m238.4%20224-.5.2-.4-.7v-.2h.1l.9.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m238.4%20224-.5.2-.4-.7v-.2h.1l.9.2-.1.5'/%3e%3cpath%20fill='%23c8b100'%20d='M237.3%20223.2h.4v.4h-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M237.3%20223.2h.4v.4h-.3z'/%3e%3cpath%20fill='%23c8b100'%20d='m240.2%20224.3.1.5-.8.3h-.2v-.2l.4-.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m240.2%20224.3.1.5-.8.3h-.2v-.2l.4-.8.5.2'/%3e%3cpath%20fill='%23c8b100'%20d='m240%20225.8-.5.1-.3-.8v-.1h.2l.8.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m240%20225.8-.5.1-.3-.8v-.1h.2l.8.3-.1.5'/%3e%3cpath%20fill='%23c8b100'%20d='m238.6%20224.3-.2.5.9.3h.1v-.1l-.3-.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m238.6%20224.3-.2.5.9.3h.1v-.1l-.3-.8-.5.1'/%3e%3cpath%20fill='%23c8b100'%20d='M239.5%20225.2v-.3h-.4v.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M239.5%20225.2v-.3h-.4v.3z'/%3e%3cpath%20fill='%23c8b100'%20d='M240.8%20227h.8l.5.3s.1-.4-.3-.7c-.3-.3-.8.2-.8.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M240.8%20227h.8l.5.3s.1-.4-.3-.7c-.3-.3-.8.2-.8.2z'/%3e%3cpath%20fill='%23c8b100'%20d='m240.3%20226.1-.3.5.8.5v-.1h.2l-.1-1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m240.3%20226.1-.3.5.8.5v-.1h.2l-.1-1-.6.1'/%3e%3cpath%20fill='%23c8b100'%20d='M241%20227s.1-.1%200-.2h-.3q-.3%200-.1.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M241%20227s.1-.1%200-.2h-.3q-.3%200-.1.2zm38-21.9v.6h-2.4v-.6h1v-1.3h-.7v-.5h.6v-.6h.6v.6h.6v.6h-.6v1.2h1'/%3e%3cpath%20fill='none'%20d='M134.4%20217.1v-1.2m-.4%201.2v-1.2m-.2%201.2v-1.2m-.3%201.2v-1.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M133.2%20217.1v-1.2m-.5%201.1v-1m.2%201v-1m-.7%201v-1m.2%201v-1m-.9%201v-1m.2%201v-1m.3%201v-1m-.7%201v-1m-.3.9v-.8m-.1.8v-.8m-.5.7v-.6m.2.6v-.6m-.4.5v-.5m-.2.5v-.4m-.3.3v-.3m-.3.3v-.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M129.2%20216.6v-.2'/%3e%3cpath%20fill='none'%20d='M135.7%20217v-1m-.5%201v-1m-.4%201.2V216m143%201.1V216m-.4%201.1V216m-.3%201.1V216m-.3%201.2V216'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M276.6%20217.1V216m-.6%201v-1m.3%201v-1m-.8%201v-1m.3%201v-1m-.9%201v-1m.2%201v-1m.2%201v-1m-.6%201v-1m-.3.9v-.8m-.2.8v-.8m-.4.7v-.6m.2.6v-.6m-.5.6v-.6m-.2.5v-.4m-.3.4v-.4m-.2.3v-.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M272.6%20216.6v-.2'/%3e%3cpath%20fill='none'%20d='M279.1%20217v-1m-.6%201v-1m-.4%201.1V216'/%3e%3c/svg%3e";
  const FLAG_MAP = {
    en: flagUS,
    "zh-Hans": flagCN,
    ar: flagSA,
    ja: flagJP,
    ko: flagKR,
    fr: flagFR,
    de: flagDE,
    hi: flagIN,
    pt: flagPT,
    ru: flagRU,
    es: flagES
  };
  function LanguageSelector({
    dropdownClasses = "",
    btnClasses = "btn-ghost",
    contentClasses = "mt-16"
  }) {
    const { t, i18n } = useTranslation();
    const currentLang = signals.useSignal(appOptionsManager.get("language") || i18n.language || "en");
    hooks.useEffect(() => {
      const onLng = (lng) => {
        currentLang.value = lng || appOptionsManager.get("language") || "en";
      };
      i18n.on("languageChanged", onLng);
      const unsub = appOptionsManager.signal.subscribe(() => {
        const optLng = appOptionsManager.get("language");
        if (optLng && optLng !== currentLang.value) currentLang.value = optLng;
      });
      return () => {
        try {
          i18n.off("languageChanged", onLng);
        } catch {
        }
        try {
          unsub?.();
        } catch {
        }
      };
    }, []);
    const setLanguage = (code) => {
      currentLang.value = code;
      appOptionsManager.set("language", code);
      i18n.changeLanguage(code);
    };
    const currentLabel = LANGUAGES_CONFIG[currentLang.value]?.nameEn || currentLang.value;
    const currentFlag = FLAG_MAP[currentLang.value] || flagUS;
    return u("div", { class: cx("dropdown dropdown-end block", dropdownClasses), children: [
u(
        "div",
        {
          tabIndex: 0,
          role: "button",
          class: cx("btn group btn-sm gap-1.5 px-1.5 justify-start", btnClasses),
          "aria-label": t("Change Language"),
          children: [
u("div", { class: "w-5 flex items-center justify-center", children: u("img", { src: currentFlag, alt: "", class: "h-3 w-4 rounded-sm object-cover border border-base-content/10 bg-base-100" }) }),
u("div", { class: "w-24 truncate text-xs text-left", children: currentLabel }),
u(
              "svg",
              {
                width: "12px",
                height: "12px",
                class: "mt-px hidden size-2 fill-current opacity-60 sm:inline-block ml-auto",
                xmlns: "http://www.w3.org/2000/svg",
                viewBox: "0 0 2048 2048",
                children: u("path", { d: "M1799 349l242 241-1017 1017L7 590l242-241 775 775 775-775z" })
              }
            )
          ]
        }
      ),
u(
        "div",
        {
          tabIndex: 0,
          class: cx(
            "dropdown-content bg-base-200 text-base-content rounded-box mt-2 max-h-60 overflow-y-auto border-[length:var(--border)] border-white/5 shadow-2xl outline-[length:var(--border)] outline-black/5",
            contentClasses
          ),
          children: u("ul", { class: "menu w-64", children: [
u("li", { class: "menu-title text-xs", children: t("Change Language") }),
            Object.entries(LANGUAGES_CONFIG).map(([langTag, langConf]) => u("li", { children: u(
              "button",
              {
                class: cx("gap-3 px-2", currentLang.value === langTag && "[&_svg]:visible"),
                onClick: () => setLanguage(langTag),
                children: [
u("img", { src: FLAG_MAP[langTag] || flagUS, alt: "", class: "h-3 w-4 rounded-sm object-cover border border-base-content/10 bg-base-100" }),
u("div", { class: "flex-1 min-w-0 truncate", children: langConf.nameEn }),
u(
                    "svg",
                    {
                      xmlns: "http://www.w3.org/2000/svg",
                      width: "16",
                      height: "16",
                      viewBox: "0 0 24 24",
                      fill: "currentColor",
                      class: "invisible h-3 w-3 shrink-0",
                      children: u("path", { d: "M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z" })
                    }
                  )
                ]
              }
            ) }, langTag))
          ] })
        }
      )
    ] });
  }
  var localizedFormat$2 = { exports: {} };
  var localizedFormat$1 = localizedFormat$2.exports;
  var hasRequiredLocalizedFormat;
  function requireLocalizedFormat() {
    if (hasRequiredLocalizedFormat) return localizedFormat$2.exports;
    hasRequiredLocalizedFormat = 1;
    (function(module, exports) {
      !(function(e, t) {
        module.exports = t();
      })(localizedFormat$1, (function() {
        var e = { LTS: "h:mm:ss A", LT: "h:mm A", L: "MM/DD/YYYY", LL: "MMMM D, YYYY", LLL: "MMMM D, YYYY h:mm A", LLLL: "dddd, MMMM D, YYYY h:mm A" };
        return function(t, o, n) {
          var r = o.prototype, i = r.format;
          n.en.formats = e, r.format = function(t2) {
            void 0 === t2 && (t2 = "YYYY-MM-DDTHH:mm:ssZ");
            var o2 = this.$locale().formats, n2 = (function(t3, o3) {
              return t3.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g, (function(t4, n3, r2) {
                var i2 = r2 && r2.toUpperCase();
                return n3 || o3[r2] || e[r2] || o3[i2].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, (function(e2, t5, o4) {
                  return t5 || o4.slice(1);
                }));
              }));
            })(t2, void 0 === o2 ? {} : o2);
            return i.call(this, n2);
          };
        };
      }));
    })(localizedFormat$2);
    return localizedFormat$2.exports;
  }
  var localizedFormatExports = requireLocalizedFormat();
  const localizedFormat = getDefaultExportFromCjs(localizedFormatExports);
  dayjs.extend(localizedFormat);
  function GlobalSettingsModal({ isOpen, onClose }) {
    const { t, i18n } = useTranslation();
    const isArabic = (i18n.language || "").startsWith("ar");
    const showResetConfirm = signals.useSignal(false);
    const now = dayjs();
    const dateExamples = [
      { token: "YYYY-MM-DD", value: now.format("YYYY-MM-DD"), localized: false },
      { token: "DD/MM/YYYY", value: now.format("DD/MM/YYYY"), localized: false },
      { token: "MMM DD, YYYY", value: now.format("MMM DD, YYYY"), localized: false },
      { token: "L", value: now.format("L"), localized: true },
      { token: "LL", value: now.format("LL"), localized: true }
    ];
    const timeExamples = [
      { token: "HH:mm:ss", value: now.format("HH:mm:ss"), localized: false },
      { token: "hh:mm A", value: now.format("hh:mm A"), localized: false },
      { token: "LT", value: now.format("LT"), localized: true },
      { token: "LTS", value: now.format("LTS"), localized: true }
    ];
    const combinedExamples = [
      { token: "YYYY-MM-DD HH:mm:ss Z", value: now.format("YYYY-MM-DD HH:mm:ss Z"), localized: false },
      { token: "MMM DD, YYYY [at] hh:mm A", value: now.format("MMM DD, YYYY [at] hh:mm A"), localized: false },
      { token: "LLL", value: now.format("LLL"), localized: true }
    ];
    return u(
      Modal,
      {
        show: isOpen,
        onClose,
        title: t("Global Settings"),
        actions: u(
          "button",
          {
            class: "btn btn-sm btn-circle btn-ghost",
            onClick: () => showResetConfirm.value = true,
            children: u(IconRestore, { size: 16 })
          }
        ),
        children: [
u("div", { class: "space-y-4", children: [
u("div", { class: "flex justify-between items-center", children: [
u("span", { class: "text-sm", children: t("Theme") }),
u(
                ThemeSelector,
                {
                  dropdownClasses: "",
                  btnClasses: "btn-sm",
                  contentClasses: "mt-2"
                }
              )
            ] }),
u("div", { class: "flex justify-between items-center", children: [
u("span", { class: "text-sm", children: t("Language") }),
u(
                LanguageSelector,
                {
                  dropdownClasses: "",
                  btnClasses: "btn-sm",
                  contentClasses: "mt-2"
                }
              )
            ] }),
u("div", { class: "flex justify-between items-center", children: [
u("div", { class: "flex items-center", children: u("span", { class: "text-sm", children: t("Date Time Format") }) }),
u(
                "input",
                {
                  type: "text",
                  class: "input input-bordered input-sm w-52",
                  value: appOptionsManager.get("dateTimeFormat"),
                  onChange: (e) => {
                    appOptionsManager.set("dateTimeFormat", e.target?.value);
                  }
                }
              )
            ] }),
u("div", { class: "flex justify-between items-center", children: [
u("span", { class: "text-sm", children: t("Debug") }),
u(
                "input",
                {
                  type: "checkbox",
                  class: "toggle toggle-primary",
                  checked: appOptionsManager.get("debug"),
                  onChange: (e) => {
                    appOptionsManager.set("debug", e.target?.checked);
                  }
                }
              )
            ] }),
u("div", { class: `mt-1 rounded-box bg-base-200 p-2 text-xs relative ${isArabic ? "text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: [
u("div", { class: "font-semibold mb-2", children: t("Common Formats:") }),
u(
                "a",
                {
                  href: "https://day.js.org/docs/en/display/format",
                  target: "_blank",
                  rel: "noopener noreferrer",
                  class: `absolute ${isArabic ? "left-2" : "right-2"} top-2 cursor-pointer opacity-70 hover:opacity-100`,
                  children: u(IconBook, { size: 14 })
                }
              ),
u("div", { class: "grid gap-3 sm:grid-cols-2", children: [
u("div", { children: [
u("div", { class: "font-medium mb-1", children: t("Date Formats:") }),
u("ul", { class: "space-y-1.5", children: dateExamples.map((ex) => u("li", { class: "flex items-center gap-2.5", children: [
u("span", { class: "font-mono px-2 py-0.5 rounded border border-base-300 bg-base-200/70 text-base-content/90", dir: "ltr", children: ex.token }),
u("span", { class: "opacity-60", children: isArabic ? "←" : "→" }),
u("span", { dir: "ltr", children: ex.value }),
                    ex.localized ? u("span", { class: "opacity-60", children: [
                      " (",
                      t("Localized"),
                      ")"
                    ] }) : null
                  ] }, ex.token)) })
                ] }),
u("div", { children: [
u("div", { class: "font-medium mb-1", children: t("Time Formats:") }),
u("ul", { class: "space-y-1.5", children: timeExamples.map((ex) => u("li", { class: "flex items-center gap-2.5", children: [
u("span", { class: "font-mono px-2 py-0.5 rounded border border-base-300 bg-base-200/70 text-base-content/90", dir: "ltr", children: ex.token }),
u("span", { class: "opacity-60", children: isArabic ? "←" : "→" }),
u("span", { dir: "ltr", children: ex.value }),
                    ex.localized ? u("span", { class: "opacity-60", children: [
                      " (",
                      t("Localized"),
                      ")"
                    ] }) : null
                  ] }, ex.token)) })
                ] })
              ] }),
u("div", { class: "divider my-2" }),
u("div", { children: [
u("div", { class: "font-medium mb-1", children: t("Combined Examples:") }),
u("ul", { class: "space-y-1.5", children: combinedExamples.map((ex) => u("li", { class: "flex items-center gap-2.5", children: [
u("span", { class: "font-mono px-2 py-0.5 rounded border border-base-300 bg-base-200/70 text-base-content/90", dir: "ltr", children: ex.token }),
u("span", { class: "opacity-60", children: isArabic ? "←" : "→" }),
u("span", { class: "break-all", dir: "ltr", children: ex.value }),
                  ex.localized ? u("span", { class: "opacity-60", children: [
                    " (",
                    t("Localized"),
                    ")"
                  ] }) : null
                ] }, ex.token)) })
              ] })
            ] })
          ] }),
u("div", { class: `rounded-box bg-base-200 p-2 text-xs mt-3 flex items-center justify-between ${isArabic ? "flex-row-reverse" : ""}`, children: [
u("div", { children: [
u("span", { class: "font-semibold", children: [
                t("Version"),
                ":"
              ] }),
              " ",
u("span", { class: "opacity-80", children: pkg.version })
            ] }),
u("div", { class: "flex items-center gap-4", children: [
              typeof GM_info !== "undefined" && GM_info?.scriptHandler ? u(
                "a",
                {
                  class: "flex items-center gap-1 opacity-80 hover:opacity-100",
                  href: "https://chromewebstore.google.com/detail/aboccmnimgpjehlplnanplbhlccohhhn",
                  target: "_blank",
                  rel: "noopener noreferrer",
                  children: [
u(IconBrandChrome, { size: 14 }),
                    " ",
                    t("Chrome")
                  ]
                }
              ) : u(
                "a",
                {
                  class: "flex items-center gap-1 opacity-80 hover:opacity-100",
                  href: "https://greasyfork.org/en/scripts/551198",
                  target: "_blank",
                  rel: "noopener noreferrer",
                  children: [
u(IconFileCode, { size: 14 }),
                    " ",
                    t("Userscript")
                  ]
                }
              ),
u(
                "a",
                {
                  class: "flex items-center gap-1 opacity-80 hover:opacity-100",
                  href: "https://xbatch.online",
                  target: "_blank",
                  rel: "noopener noreferrer",
                  children: [
u(IconWorld, { size: 14 }),
                    " ",
                    t("Website")
                  ]
                }
              ),
u(
                "a",
                {
                  class: "flex items-center gap-1 opacity-80 hover:opacity-100",
                  href: "https://patreon.com/exyezed",
                  target: "_blank",
                  rel: "noopener noreferrer",
                  children: [
u(IconBrandPatreon, { size: 14 }),
                    " ",
                    t("Patreon")
                  ]
                }
              )
            ] })
          ] }),
u(Modal, { show: showResetConfirm.value, onClose: () => showResetConfirm.value = false, title: t("Reset Settings"), class: "max-w-sm", children: u("div", { class: "space-y-2", children: [
u("p", { class: `text-sm${isArabic ? " text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: t("Are you sure you want to reset settings to defaults?") }),
u("div", { class: "modal-action", children: [
u("button", { class: "btn btn-sm btn-ghost", onClick: () => showResetConfirm.value = false, children: t("Cancel") }),
u(
                "button",
                {
                  class: "btn btn-sm btn-warning",
                  onClick: () => {
                    appOptionsManager.set("theme", "light");
                    appOptionsManager.set("language", "en");
                    appOptionsManager.set("debug", false);
                    appOptionsManager.set("dateTimeFormat", "YYYY-MM-DD HH:mm:ss Z");
                    appOptionsManager.set("fetchMode", "single");
                    appOptionsManager.set("batchSize", 100);
                    appOptionsManager.set("startingBatch", 0);
                    appOptionsManager.set("timelineType", "media");
                    appOptionsManager.set("mediaType", "all");
                    appOptionsManager.set("convertAnimatedGifs", false);
                    appOptionsManager.set("convertGifsExternal", false);
                    appOptionsManager.set("downloadConcurrency", 1);
                    i18n.changeLanguage("en");
                    showResetConfirm.value = false;
                  },
                  children: u("span", { class: "flex items-center gap-2", children: [
u(IconRestore, { size: 16 }),
                    t("Reset")
                  ] })
                }
              )
            ] })
          ] }) })
        ]
      }
    );
  }
  function MediaDownloaderModal({ isOpen, onClose }) {
    const { t } = useTranslation();
    const activeTab = signals.useSignal("dashboard");
    const showGlobalSettings = signals.useSignal(false);
    const loadFromDatabaseUsername = signals.useSignal("");
    hooks.useEffect(() => {
      (async () => {
        try {
          const n = await mediaDownloaderDB.getAccountsCount();
          dbState.totalAccounts.value = n;
        } catch {
        }
      })();
    }, []);
    if (!isOpen) return null;
    const tabs = [
      { id: "dashboard", label: t("Dashboard") },
      { id: "auth", label: t("Auth") },
      { id: "settings", label: t("Settings") },
      { id: "database", label: t("Database") }
    ];
    return u("div", { class: "modal modal-open", children: [
u("div", { class: "modal-box transition-all duration-300 ease-in-out", children: [
u("div", { class: "flex items-center justify-between mb-4", children: [
u(Title, {}),
u("div", { class: "flex items-center gap-2", children: [
u(
              "button",
              {
                class: "btn btn-sm btn-circle btn-ghost",
                onClick: () => showGlobalSettings.value = true,
                children: u(IconSettings, { size: 18 })
              }
            ),
u(
              "button",
              {
                class: "btn btn-sm btn-circle btn-ghost",
                onClick: onClose,
                children: u(IconX, { size: 18 })
              }
            )
          ] })
        ] }),
u("div", { role: "tablist", class: "tabs tabs-lift mb-4", children: tabs.map((tab) => {
          const isActive = activeTab.value === tab.id;
          const isDatabase = tab.id === "database";
          const cls = `tab ${isActive ? "tab-active" : ""} ${isDatabase ? "relative" : ""}`;
          return u(
            "a",
            {
              role: "tab",
              class: cls,
              onClick: () => activeTab.value = tab.id,
              children: [
                tab.label,
                isDatabase && dbState.totalAccounts.value > 0 && u("span", { class: "badge badge-accent badge-sm absolute -top-2 -right-2", children: dbState.totalAccounts.value })
              ]
            },
            tab.id
          );
        }) }),
u("div", { class: "flex-1 transition-[height,max-height] duration-300 ease-in-out", children: [
u("div", { class: activeTab.value === "dashboard" ? "block" : "hidden", children: u(
            Dashboard,
            {
              loadFromDatabaseUsername
            }
          ) }),
u("div", { class: activeTab.value === "database" ? "block" : "hidden", children: u(
            Database,
            {
              isVisible: activeTab.value === "database",
              onLoadToDashboard: (username) => {
                loadFromDatabaseUsername.value = username;
                activeTab.value = "dashboard";
              }
            }
          ) }),
u("div", { class: activeTab.value === "auth" ? "block" : "hidden", children: u(Auth, {}) }),
u("div", { class: activeTab.value === "settings" ? "block" : "hidden", children: u(Settings, {}) })
        ] })
      ] }),
u("div", { class: "modal-backdrop", onClick: onClose }),
u(
        GlobalSettingsModal,
        {
          isOpen: showGlobalSettings.value,
          onClose: () => showGlobalSettings.value = false
        }
      )
    ] });
  }
  function MediaDownloaderApp() {
    useTranslation();
    const currentTheme = signals.useSignal(appOptionsManager.get("theme"));
    const showMediaDownloader = signals.useSignal(false);
    const toggleMediaDownloader = () => {
      showMediaDownloader.value = !showMediaDownloader.value;
    };
    appOptionsManager.signal.subscribe(() => {
      currentTheme.value = appOptionsManager.get("theme");
    });
    return u(preact.Fragment, { children: [
u("style", { children: `
          @keyframes sparkle {
            0%, 100% { filter: drop-shadow(0 0 8px rgba(29, 155, 240, 0.8)) drop-shadow(0 0 16px rgba(29, 155, 240, 0.6)); }
            50% { filter: drop-shadow(0 0 12px rgba(29, 155, 240, 1)) drop-shadow(0 0 20px rgba(29, 155, 240, 0.8)) drop-shadow(0 0 28px rgba(29, 155, 240, 0.6)); }
          }
          .sparkle-icon {
            animation: sparkle 2s ease-in-out infinite;
          }
        ` }),
u(
        "div",
        {
          onClick: toggleMediaDownloader,
          class: `sparkle-icon fixed top-[50%] left-[-15px] cursor-pointer transition-all duration-300 z-50 ${showMediaDownloader.value ? "translate-x-[15px] rotate-[15deg]" : ""} hover:translate-x-[15px] hover:rotate-[15deg]`,
          children: [
u(IconBrandTwitter, { size: 48, "stroke-width": 1.25, class: "text-white" }),
            dashboardState.isDownloading.value && !showMediaDownloader.value && u("div", { class: "absolute -bottom-1 -right-1 flex items-center justify-center", children: u(
              "div",
              {
                class: "radial-progress text-info bg-base-100",
                style: `--value:${dashboardState.downloadProgress.value}; --size:2rem; --thickness:4px;`,
                role: "progressbar",
                "aria-valuenow": Math.round(dashboardState.downloadProgress.value),
                children: u("span", { class: "text-[10px] font-bold", children: Math.round(dashboardState.downloadProgress.value) })
              }
            ) })
          ]
        }
      ),
u("div", { "data-theme": currentTheme.value, children: [
u(ErrorBoundary, { children: u(
          MediaDownloaderModal,
          {
            isOpen: showMediaDownloader.value,
            onClose: () => showMediaDownloader.value = false
          }
        ) }),
u("div", { id: "tmd-portal-root" })
      ] })
    ] });
  }
  const styles = `/*! tailwindcss v4.1.14 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--leading-normal:1.5;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:where(:root),:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}@media (prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=dark]:checked),[data-theme=dark]{color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=cupcake]:checked),[data-theme=cupcake]{color-scheme:light;--color-base-100:oklch(97.788% .004 56.375);--color-base-200:oklch(93.982% .007 61.449);--color-base-300:oklch(91.586% .006 53.44);--color-base-content:oklch(23.574% .066 313.189);--color-primary:oklch(85% .138 181.071);--color-primary-content:oklch(43% .078 188.216);--color-secondary:oklch(89% .061 343.231);--color-secondary-content:oklch(45% .187 3.815);--color-accent:oklch(90% .076 70.697);--color-accent-content:oklch(47% .157 37.304);--color-neutral:oklch(27% .006 286.033);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(68% .169 237.323);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(69% .17 162.48);--color-success-content:oklch(26% .051 172.552);--color-warning:oklch(79% .184 86.047);--color-warning-content:oklch(28% .066 53.813);--color-error:oklch(64% .246 16.439);--color-error-content:oklch(27% .105 12.094);--radius-selector:1rem;--radius-field:2rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:2px;--depth:1;--noise:0}:root:has(input.theme-controller[value=bumblebee]:checked),[data-theme=bumblebee]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(97% 0 0);--color-base-300:oklch(92% 0 0);--color-base-content:oklch(20% 0 0);--color-primary:oklch(85% .199 91.936);--color-primary-content:oklch(42% .095 57.708);--color-secondary:oklch(75% .183 55.934);--color-secondary-content:oklch(40% .123 38.172);--color-accent:oklch(0% 0 0);--color-accent-content:oklch(100% 0 0);--color-neutral:oklch(37% .01 67.558);--color-neutral-content:oklch(92% .003 48.717);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(39% .09 240.876);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(70% .191 22.216);--color-error-content:oklch(39% .141 25.723);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=emerald]:checked),[data-theme=emerald]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(93% 0 0);--color-base-300:oklch(86% 0 0);--color-base-content:oklch(35.519% .032 262.988);--color-primary:oklch(76.662% .135 153.45);--color-primary-content:oklch(33.387% .04 162.24);--color-secondary:oklch(61.302% .202 261.294);--color-secondary-content:oklch(100% 0 0);--color-accent:oklch(72.772% .149 33.2);--color-accent-content:oklch(0% 0 0);--color-neutral:oklch(35.519% .032 262.988);--color-neutral-content:oklch(98.462% .001 247.838);--color-info:oklch(72.06% .191 231.6);--color-info-content:oklch(0% 0 0);--color-success:oklch(64.8% .15 160);--color-success-content:oklch(0% 0 0);--color-warning:oklch(84.71% .199 83.87);--color-warning-content:oklch(0% 0 0);--color-error:oklch(71.76% .221 22.18);--color-error-content:oklch(0% 0 0);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=corporate]:checked),[data-theme=corporate]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(93% 0 0);--color-base-300:oklch(86% 0 0);--color-base-content:oklch(22.389% .031 278.072);--color-primary:oklch(58% .158 241.966);--color-primary-content:oklch(100% 0 0);--color-secondary:oklch(55% .046 257.417);--color-secondary-content:oklch(100% 0 0);--color-accent:oklch(60% .118 184.704);--color-accent-content:oklch(100% 0 0);--color-neutral:oklch(0% 0 0);--color-neutral-content:oklch(100% 0 0);--color-info:oklch(60% .126 221.723);--color-info-content:oklch(100% 0 0);--color-success:oklch(62% .194 149.214);--color-success-content:oklch(100% 0 0);--color-warning:oklch(85% .199 91.936);--color-warning-content:oklch(0% 0 0);--color-error:oklch(70% .191 22.216);--color-error-content:oklch(0% 0 0);--radius-selector:.25rem;--radius-field:.25rem;--radius-box:.25rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=synthwave]:checked),[data-theme=synthwave]{color-scheme:dark;--color-base-100:oklch(15% .09 281.288);--color-base-200:oklch(20% .09 281.288);--color-base-300:oklch(25% .09 281.288);--color-base-content:oklch(78% .115 274.713);--color-primary:oklch(71% .202 349.761);--color-primary-content:oklch(28% .109 3.907);--color-secondary:oklch(82% .111 230.318);--color-secondary-content:oklch(29% .066 243.157);--color-accent:oklch(75% .183 55.934);--color-accent-content:oklch(26% .079 36.259);--color-neutral:oklch(45% .24 277.023);--color-neutral-content:oklch(87% .065 274.039);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(77% .152 181.912);--color-success-content:oklch(27% .046 192.524);--color-warning:oklch(90% .182 98.111);--color-warning-content:oklch(42% .095 57.708);--color-error:oklch(73.7% .121 32.639);--color-error-content:oklch(23.501% .096 290.329);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=retro]:checked),[data-theme=retro]{color-scheme:light;--color-base-100:oklch(91.637% .034 90.515);--color-base-200:oklch(88.272% .049 91.774);--color-base-300:oklch(84.133% .065 90.856);--color-base-content:oklch(41% .112 45.904);--color-primary:oklch(80% .114 19.571);--color-primary-content:oklch(39% .141 25.723);--color-secondary:oklch(92% .084 155.995);--color-secondary-content:oklch(44% .119 151.328);--color-accent:oklch(68% .162 75.834);--color-accent-content:oklch(41% .112 45.904);--color-neutral:oklch(44% .011 73.639);--color-neutral-content:oklch(86% .005 56.366);--color-info:oklch(58% .158 241.966);--color-info-content:oklch(96% .059 95.617);--color-success:oklch(51% .096 186.391);--color-success-content:oklch(96% .059 95.617);--color-warning:oklch(64% .222 41.116);--color-warning-content:oklch(96% .059 95.617);--color-error:oklch(70% .191 22.216);--color-error-content:oklch(40% .123 38.172);--radius-selector:.25rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=cyberpunk]:checked),[data-theme=cyberpunk]{color-scheme:light;--color-base-100:oklch(94.51% .179 104.32);--color-base-200:oklch(91.51% .179 104.32);--color-base-300:oklch(85.51% .179 104.32);--color-base-content:oklch(0% 0 0);--color-primary:oklch(74.22% .209 6.35);--color-primary-content:oklch(14.844% .041 6.35);--color-secondary:oklch(83.33% .184 204.72);--color-secondary-content:oklch(16.666% .036 204.72);--color-accent:oklch(71.86% .217 310.43);--color-accent-content:oklch(14.372% .043 310.43);--color-neutral:oklch(23.04% .065 269.31);--color-neutral-content:oklch(94.51% .179 104.32);--color-info:oklch(72.06% .191 231.6);--color-info-content:oklch(0% 0 0);--color-success:oklch(64.8% .15 160);--color-success-content:oklch(0% 0 0);--color-warning:oklch(84.71% .199 83.87);--color-warning-content:oklch(0% 0 0);--color-error:oklch(71.76% .221 22.18);--color-error-content:oklch(0% 0 0);--radius-selector:0rem;--radius-field:0rem;--radius-box:0rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=valentine]:checked),[data-theme=valentine]{color-scheme:light;--color-base-100:oklch(97% .014 343.198);--color-base-200:oklch(94% .028 342.258);--color-base-300:oklch(89% .061 343.231);--color-base-content:oklch(52% .223 3.958);--color-primary:oklch(65% .241 354.308);--color-primary-content:oklch(100% 0 0);--color-secondary:oklch(62% .265 303.9);--color-secondary-content:oklch(97% .014 308.299);--color-accent:oklch(82% .111 230.318);--color-accent-content:oklch(39% .09 240.876);--color-neutral:oklch(40% .153 2.432);--color-neutral-content:oklch(89% .061 343.231);--color-info:oklch(86% .127 207.078);--color-info-content:oklch(44% .11 240.79);--color-success:oklch(84% .143 164.978);--color-success-content:oklch(43% .095 166.913);--color-warning:oklch(75% .183 55.934);--color-warning-content:oklch(26% .079 36.259);--color-error:oklch(63% .237 25.331);--color-error-content:oklch(97% .013 17.38);--radius-selector:1rem;--radius-field:2rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=halloween]:checked),[data-theme=halloween]{color-scheme:dark;--color-base-100:oklch(21% .006 56.043);--color-base-200:oklch(14% .004 49.25);--color-base-300:oklch(0% 0 0);--color-base-content:oklch(84.955% 0 0);--color-primary:oklch(77.48% .204 60.62);--color-primary-content:oklch(19.693% .004 196.779);--color-secondary:oklch(45.98% .248 305.03);--color-secondary-content:oklch(89.196% .049 305.03);--color-accent:oklch(64.8% .223 136.073);--color-accent-content:oklch(0% 0 0);--color-neutral:oklch(24.371% .046 65.681);--color-neutral-content:oklch(84.874% .009 65.681);--color-info:oklch(54.615% .215 262.88);--color-info-content:oklch(90.923% .043 262.88);--color-success:oklch(62.705% .169 149.213);--color-success-content:oklch(12.541% .033 149.213);--color-warning:oklch(66.584% .157 58.318);--color-warning-content:oklch(13.316% .031 58.318);--color-error:oklch(65.72% .199 27.33);--color-error-content:oklch(13.144% .039 27.33);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=garden]:checked),[data-theme=garden]{color-scheme:light;--color-base-100:oklch(92.951% .002 17.197);--color-base-200:oklch(86.445% .002 17.197);--color-base-300:oklch(79.938% .001 17.197);--color-base-content:oklch(16.961% .001 17.32);--color-primary:oklch(62.45% .278 3.836);--color-primary-content:oklch(100% 0 0);--color-secondary:oklch(48.495% .11 355.095);--color-secondary-content:oklch(89.699% .022 355.095);--color-accent:oklch(56.273% .054 154.39);--color-accent-content:oklch(100% 0 0);--color-neutral:oklch(24.155% .049 89.07);--color-neutral-content:oklch(92.951% .002 17.197);--color-info:oklch(72.06% .191 231.6);--color-info-content:oklch(0% 0 0);--color-success:oklch(64.8% .15 160);--color-success-content:oklch(0% 0 0);--color-warning:oklch(84.71% .199 83.87);--color-warning-content:oklch(0% 0 0);--color-error:oklch(71.76% .221 22.18);--color-error-content:oklch(0% 0 0);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=forest]:checked),[data-theme=forest]{color-scheme:dark;--color-base-100:oklch(20.84% .008 17.911);--color-base-200:oklch(18.522% .007 17.911);--color-base-300:oklch(16.203% .007 17.911);--color-base-content:oklch(83.768% .001 17.911);--color-primary:oklch(68.628% .185 148.958);--color-primary-content:oklch(0% 0 0);--color-secondary:oklch(69.776% .135 168.327);--color-secondary-content:oklch(13.955% .027 168.327);--color-accent:oklch(70.628% .119 185.713);--color-accent-content:oklch(14.125% .023 185.713);--color-neutral:oklch(30.698% .039 171.364);--color-neutral-content:oklch(86.139% .007 171.364);--color-info:oklch(72.06% .191 231.6);--color-info-content:oklch(0% 0 0);--color-success:oklch(64.8% .15 160);--color-success-content:oklch(0% 0 0);--color-warning:oklch(84.71% .199 83.87);--color-warning-content:oklch(0% 0 0);--color-error:oklch(71.76% .221 22.18);--color-error-content:oklch(0% 0 0);--radius-selector:1rem;--radius-field:2rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=aqua]:checked),[data-theme=aqua]{color-scheme:dark;--color-base-100:oklch(37% .146 265.522);--color-base-200:oklch(28% .091 267.935);--color-base-300:oklch(22% .091 267.935);--color-base-content:oklch(90% .058 230.902);--color-primary:oklch(85.661% .144 198.645);--color-primary-content:oklch(40.124% .068 197.603);--color-secondary:oklch(60.682% .108 309.782);--color-secondary-content:oklch(96% .016 293.756);--color-accent:oklch(93.426% .102 94.555);--color-accent-content:oklch(18.685% .02 94.555);--color-neutral:oklch(27% .146 265.522);--color-neutral-content:oklch(80% .146 265.522);--color-info:oklch(54.615% .215 262.88);--color-info-content:oklch(90.923% .043 262.88);--color-success:oklch(62.705% .169 149.213);--color-success-content:oklch(12.541% .033 149.213);--color-warning:oklch(66.584% .157 58.318);--color-warning-content:oklch(27% .077 45.635);--color-error:oklch(73.95% .19 27.33);--color-error-content:oklch(14.79% .038 27.33);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=lofi]:checked),[data-theme=lofi]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(97% 0 0);--color-base-300:oklch(94% 0 0);--color-base-content:oklch(0% 0 0);--color-primary:oklch(15.906% 0 0);--color-primary-content:oklch(100% 0 0);--color-secondary:oklch(21.455% .001 17.278);--color-secondary-content:oklch(100% 0 0);--color-accent:oklch(26.861% 0 0);--color-accent-content:oklch(100% 0 0);--color-neutral:oklch(0% 0 0);--color-neutral-content:oklch(100% 0 0);--color-info:oklch(79.54% .103 205.9);--color-info-content:oklch(15.908% .02 205.9);--color-success:oklch(90.13% .153 164.14);--color-success-content:oklch(18.026% .03 164.14);--color-warning:oklch(88.37% .135 79.94);--color-warning-content:oklch(17.674% .027 79.94);--color-error:oklch(78.66% .15 28.47);--color-error-content:oklch(15.732% .03 28.47);--radius-selector:2rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=pastel]:checked),[data-theme=pastel]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98.462% .001 247.838);--color-base-300:oklch(92.462% .001 247.838);--color-base-content:oklch(20% 0 0);--color-primary:oklch(90% .063 306.703);--color-primary-content:oklch(49% .265 301.924);--color-secondary:oklch(89% .058 10.001);--color-secondary-content:oklch(51% .222 16.935);--color-accent:oklch(90% .093 164.15);--color-accent-content:oklch(50% .118 165.612);--color-neutral:oklch(55% .046 257.417);--color-neutral-content:oklch(92% .013 255.508);--color-info:oklch(86% .127 207.078);--color-info-content:oklch(52% .105 223.128);--color-success:oklch(87% .15 154.449);--color-success-content:oklch(52% .154 150.069);--color-warning:oklch(83% .128 66.29);--color-warning-content:oklch(55% .195 38.402);--color-error:oklch(80% .114 19.571);--color-error-content:oklch(50% .213 27.518);--radius-selector:1rem;--radius-field:2rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:2px;--depth:0;--noise:0}:root:has(input.theme-controller[value=fantasy]:checked),[data-theme=fantasy]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(93% 0 0);--color-base-300:oklch(86% 0 0);--color-base-content:oklch(27.807% .029 256.847);--color-primary:oklch(37.45% .189 325.02);--color-primary-content:oklch(87.49% .037 325.02);--color-secondary:oklch(53.92% .162 241.36);--color-secondary-content:oklch(90.784% .032 241.36);--color-accent:oklch(75.98% .204 56.72);--color-accent-content:oklch(15.196% .04 56.72);--color-neutral:oklch(27.807% .029 256.847);--color-neutral-content:oklch(85.561% .005 256.847);--color-info:oklch(72.06% .191 231.6);--color-info-content:oklch(0% 0 0);--color-success:oklch(64.8% .15 160);--color-success-content:oklch(0% 0 0);--color-warning:oklch(84.71% .199 83.87);--color-warning-content:oklch(0% 0 0);--color-error:oklch(71.76% .221 22.18);--color-error-content:oklch(0% 0 0);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=wireframe]:checked),[data-theme=wireframe]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(97% 0 0);--color-base-300:oklch(94% 0 0);--color-base-content:oklch(20% 0 0);--color-primary:oklch(87% 0 0);--color-primary-content:oklch(26% 0 0);--color-secondary:oklch(87% 0 0);--color-secondary-content:oklch(26% 0 0);--color-accent:oklch(87% 0 0);--color-accent-content:oklch(26% 0 0);--color-neutral:oklch(87% 0 0);--color-neutral-content:oklch(26% 0 0);--color-info:oklch(44% .11 240.79);--color-info-content:oklch(90% .058 230.902);--color-success:oklch(43% .095 166.913);--color-success-content:oklch(90% .093 164.15);--color-warning:oklch(47% .137 46.201);--color-warning-content:oklch(92% .12 95.746);--color-error:oklch(44% .177 26.899);--color-error-content:oklch(88% .062 18.334);--radius-selector:0rem;--radius-field:.25rem;--radius-box:.25rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=black]:checked),[data-theme=black]{color-scheme:dark;--color-base-100:oklch(0% 0 0);--color-base-200:oklch(19% 0 0);--color-base-300:oklch(22% 0 0);--color-base-content:oklch(87.609% 0 0);--color-primary:oklch(35% 0 0);--color-primary-content:oklch(100% 0 0);--color-secondary:oklch(35% 0 0);--color-secondary-content:oklch(100% 0 0);--color-accent:oklch(35% 0 0);--color-accent-content:oklch(100% 0 0);--color-neutral:oklch(35% 0 0);--color-neutral-content:oklch(100% 0 0);--color-info:oklch(45.201% .313 264.052);--color-info-content:oklch(89.04% .062 264.052);--color-success:oklch(51.975% .176 142.495);--color-success-content:oklch(90.395% .035 142.495);--color-warning:oklch(96.798% .211 109.769);--color-warning-content:oklch(19.359% .042 109.769);--color-error:oklch(62.795% .257 29.233);--color-error-content:oklch(12.559% .051 29.233);--radius-selector:0rem;--radius-field:0rem;--radius-box:0rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=luxury]:checked),[data-theme=luxury]{color-scheme:dark;--color-base-100:oklch(14.076% .004 285.822);--color-base-200:oklch(20.219% .004 308.229);--color-base-300:oklch(23.219% .004 308.229);--color-base-content:oklch(75.687% .123 76.89);--color-primary:oklch(100% 0 0);--color-primary-content:oklch(20% 0 0);--color-secondary:oklch(27.581% .064 261.069);--color-secondary-content:oklch(85.516% .012 261.069);--color-accent:oklch(36.674% .051 338.825);--color-accent-content:oklch(87.334% .01 338.825);--color-neutral:oklch(24.27% .057 59.825);--color-neutral-content:oklch(93.203% .089 90.861);--color-info:oklch(79.061% .121 237.133);--color-info-content:oklch(15.812% .024 237.133);--color-success:oklch(78.119% .192 132.154);--color-success-content:oklch(15.623% .038 132.154);--color-warning:oklch(86.127% .136 102.891);--color-warning-content:oklch(17.225% .027 102.891);--color-error:oklch(71.753% .176 22.568);--color-error-content:oklch(14.35% .035 22.568);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=dracula]:checked),[data-theme=dracula]{color-scheme:dark;--color-base-100:oklch(28.822% .022 277.508);--color-base-200:oklch(26.805% .02 277.508);--color-base-300:oklch(24.787% .019 277.508);--color-base-content:oklch(97.747% .007 106.545);--color-primary:oklch(75.461% .183 346.812);--color-primary-content:oklch(15.092% .036 346.812);--color-secondary:oklch(74.202% .148 301.883);--color-secondary-content:oklch(14.84% .029 301.883);--color-accent:oklch(83.392% .124 66.558);--color-accent-content:oklch(16.678% .024 66.558);--color-neutral:oklch(39.445% .032 275.524);--color-neutral-content:oklch(87.889% .006 275.524);--color-info:oklch(88.263% .093 212.846);--color-info-content:oklch(17.652% .018 212.846);--color-success:oklch(87.099% .219 148.024);--color-success-content:oklch(17.419% .043 148.024);--color-warning:oklch(95.533% .134 112.757);--color-warning-content:oklch(19.106% .026 112.757);--color-error:oklch(68.22% .206 24.43);--color-error-content:oklch(13.644% .041 24.43);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=cmyk]:checked),[data-theme=cmyk]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(95% 0 0);--color-base-300:oklch(90% 0 0);--color-base-content:oklch(20% 0 0);--color-primary:oklch(71.772% .133 239.443);--color-primary-content:oklch(14.354% .026 239.443);--color-secondary:oklch(64.476% .202 359.339);--color-secondary-content:oklch(12.895% .04 359.339);--color-accent:oklch(94.228% .189 105.306);--color-accent-content:oklch(18.845% .037 105.306);--color-neutral:oklch(21.778% 0 0);--color-neutral-content:oklch(84.355% 0 0);--color-info:oklch(68.475% .094 217.284);--color-info-content:oklch(13.695% .018 217.284);--color-success:oklch(46.949% .162 321.406);--color-success-content:oklch(89.389% .032 321.406);--color-warning:oklch(71.236% .159 52.023);--color-warning-content:oklch(14.247% .031 52.023);--color-error:oklch(62.013% .208 28.717);--color-error-content:oklch(12.402% .041 28.717);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=autumn]:checked),[data-theme=autumn]{color-scheme:light;--color-base-100:oklch(95.814% 0 0);--color-base-200:oklch(89.107% 0 0);--color-base-300:oklch(82.4% 0 0);--color-base-content:oklch(19.162% 0 0);--color-primary:oklch(40.723% .161 17.53);--color-primary-content:oklch(88.144% .032 17.53);--color-secondary:oklch(61.676% .169 23.865);--color-secondary-content:oklch(12.335% .033 23.865);--color-accent:oklch(73.425% .094 60.729);--color-accent-content:oklch(14.685% .018 60.729);--color-neutral:oklch(54.367% .037 51.902);--color-neutral-content:oklch(90.873% .007 51.902);--color-info:oklch(69.224% .097 207.284);--color-info-content:oklch(13.844% .019 207.284);--color-success:oklch(60.995% .08 174.616);--color-success-content:oklch(12.199% .016 174.616);--color-warning:oklch(70.081% .164 56.844);--color-warning-content:oklch(14.016% .032 56.844);--color-error:oklch(53.07% .241 24.16);--color-error-content:oklch(90.614% .048 24.16);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=business]:checked),[data-theme=business]{color-scheme:dark;--color-base-100:oklch(24.353% 0 0);--color-base-200:oklch(22.648% 0 0);--color-base-300:oklch(20.944% 0 0);--color-base-content:oklch(84.87% 0 0);--color-primary:oklch(41.703% .099 251.473);--color-primary-content:oklch(88.34% .019 251.473);--color-secondary:oklch(64.092% .027 229.389);--color-secondary-content:oklch(12.818% .005 229.389);--color-accent:oklch(67.271% .167 35.791);--color-accent-content:oklch(13.454% .033 35.791);--color-neutral:oklch(27.441% .013 253.041);--color-neutral-content:oklch(85.488% .002 253.041);--color-info:oklch(62.616% .143 240.033);--color-info-content:oklch(12.523% .028 240.033);--color-success:oklch(70.226% .094 156.596);--color-success-content:oklch(14.045% .018 156.596);--color-warning:oklch(77.482% .115 81.519);--color-warning-content:oklch(15.496% .023 81.519);--color-error:oklch(51.61% .146 29.674);--color-error-content:oklch(90.322% .029 29.674);--radius-selector:0rem;--radius-field:.25rem;--radius-box:.25rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=acid]:checked),[data-theme=acid]{color-scheme:light;--color-base-100:oklch(98% 0 0);--color-base-200:oklch(95% 0 0);--color-base-300:oklch(91% 0 0);--color-base-content:oklch(0% 0 0);--color-primary:oklch(71.9% .357 330.759);--color-primary-content:oklch(14.38% .071 330.759);--color-secondary:oklch(73.37% .224 48.25);--color-secondary-content:oklch(14.674% .044 48.25);--color-accent:oklch(92.78% .264 122.962);--color-accent-content:oklch(18.556% .052 122.962);--color-neutral:oklch(21.31% .128 278.68);--color-neutral-content:oklch(84.262% .025 278.68);--color-info:oklch(60.72% .227 252.05);--color-info-content:oklch(12.144% .045 252.05);--color-success:oklch(85.72% .266 158.53);--color-success-content:oklch(17.144% .053 158.53);--color-warning:oklch(91.01% .212 100.5);--color-warning-content:oklch(18.202% .042 100.5);--color-error:oklch(64.84% .293 29.349);--color-error-content:oklch(12.968% .058 29.349);--radius-selector:1rem;--radius-field:1rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=lemonade]:checked),[data-theme=lemonade]{color-scheme:light;--color-base-100:oklch(98.71% .02 123.72);--color-base-200:oklch(91.8% .018 123.72);--color-base-300:oklch(84.89% .017 123.72);--color-base-content:oklch(19.742% .004 123.72);--color-primary:oklch(58.92% .199 134.6);--color-primary-content:oklch(11.784% .039 134.6);--color-secondary:oklch(77.75% .196 111.09);--color-secondary-content:oklch(15.55% .039 111.09);--color-accent:oklch(85.39% .201 100.73);--color-accent-content:oklch(17.078% .04 100.73);--color-neutral:oklch(30.98% .075 108.6);--color-neutral-content:oklch(86.196% .015 108.6);--color-info:oklch(86.19% .047 224.14);--color-info-content:oklch(17.238% .009 224.14);--color-success:oklch(86.19% .047 157.85);--color-success-content:oklch(17.238% .009 157.85);--color-warning:oklch(86.19% .047 102.15);--color-warning-content:oklch(17.238% .009 102.15);--color-error:oklch(86.19% .047 25.85);--color-error-content:oklch(17.238% .009 25.85);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=night]:checked),[data-theme=night]{color-scheme:dark;--color-base-100:oklch(20.768% .039 265.754);--color-base-200:oklch(19.314% .037 265.754);--color-base-300:oklch(17.86% .034 265.754);--color-base-content:oklch(84.153% .007 265.754);--color-primary:oklch(75.351% .138 232.661);--color-primary-content:oklch(15.07% .027 232.661);--color-secondary:oklch(68.011% .158 276.934);--color-secondary-content:oklch(13.602% .031 276.934);--color-accent:oklch(72.36% .176 350.048);--color-accent-content:oklch(14.472% .035 350.048);--color-neutral:oklch(27.949% .036 260.03);--color-neutral-content:oklch(85.589% .007 260.03);--color-info:oklch(68.455% .148 237.251);--color-info-content:oklch(0% 0 0);--color-success:oklch(78.452% .132 181.911);--color-success-content:oklch(15.69% .026 181.911);--color-warning:oklch(83.242% .139 82.95);--color-warning-content:oklch(16.648% .027 82.95);--color-error:oklch(71.785% .17 13.118);--color-error-content:oklch(14.357% .034 13.118);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=coffee]:checked),[data-theme=coffee]{color-scheme:dark;--color-base-100:oklch(24% .023 329.708);--color-base-200:oklch(21% .021 329.708);--color-base-300:oklch(16% .019 329.708);--color-base-content:oklch(72.354% .092 79.129);--color-primary:oklch(71.996% .123 62.756);--color-primary-content:oklch(14.399% .024 62.756);--color-secondary:oklch(34.465% .029 199.194);--color-secondary-content:oklch(86.893% .005 199.194);--color-accent:oklch(42.621% .074 224.389);--color-accent-content:oklch(88.524% .014 224.389);--color-neutral:oklch(16.51% .015 326.261);--color-neutral-content:oklch(83.302% .003 326.261);--color-info:oklch(79.49% .063 184.558);--color-info-content:oklch(15.898% .012 184.558);--color-success:oklch(74.722% .072 131.116);--color-success-content:oklch(14.944% .014 131.116);--color-warning:oklch(88.15% .14 87.722);--color-warning-content:oklch(17.63% .028 87.722);--color-error:oklch(77.318% .128 31.871);--color-error-content:oklch(15.463% .025 31.871);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=winter]:checked),[data-theme=winter]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(97.466% .011 259.822);--color-base-300:oklch(93.268% .016 262.751);--color-base-content:oklch(41.886% .053 255.824);--color-primary:oklch(56.86% .255 257.57);--color-primary-content:oklch(91.372% .051 257.57);--color-secondary:oklch(42.551% .161 282.339);--color-secondary-content:oklch(88.51% .032 282.339);--color-accent:oklch(59.939% .191 335.171);--color-accent-content:oklch(11.988% .038 335.171);--color-neutral:oklch(19.616% .063 257.651);--color-neutral-content:oklch(83.923% .012 257.651);--color-info:oklch(88.127% .085 214.515);--color-info-content:oklch(17.625% .017 214.515);--color-success:oklch(80.494% .077 197.823);--color-success-content:oklch(16.098% .015 197.823);--color-warning:oklch(89.172% .045 71.47);--color-warning-content:oklch(17.834% .009 71.47);--color-error:oklch(73.092% .11 20.076);--color-error-content:oklch(14.618% .022 20.076);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=dim]:checked),[data-theme=dim]{color-scheme:dark;--color-base-100:oklch(30.857% .023 264.149);--color-base-200:oklch(28.036% .019 264.182);--color-base-300:oklch(26.346% .018 262.177);--color-base-content:oklch(82.901% .031 222.959);--color-primary:oklch(86.133% .141 139.549);--color-primary-content:oklch(17.226% .028 139.549);--color-secondary:oklch(73.375% .165 35.353);--color-secondary-content:oklch(14.675% .033 35.353);--color-accent:oklch(74.229% .133 311.379);--color-accent-content:oklch(14.845% .026 311.379);--color-neutral:oklch(24.731% .02 264.094);--color-neutral-content:oklch(82.901% .031 222.959);--color-info:oklch(86.078% .142 206.182);--color-info-content:oklch(17.215% .028 206.182);--color-success:oklch(86.171% .142 166.534);--color-success-content:oklch(17.234% .028 166.534);--color-warning:oklch(86.163% .142 94.818);--color-warning-content:oklch(17.232% .028 94.818);--color-error:oklch(82.418% .099 33.756);--color-error-content:oklch(16.483% .019 33.756);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=nord]:checked),[data-theme=nord]{color-scheme:light;--color-base-100:oklch(95.127% .007 260.731);--color-base-200:oklch(93.299% .01 261.788);--color-base-300:oklch(89.925% .016 262.749);--color-base-content:oklch(32.437% .022 264.182);--color-primary:oklch(59.435% .077 254.027);--color-primary-content:oklch(11.887% .015 254.027);--color-secondary:oklch(69.651% .059 248.687);--color-secondary-content:oklch(13.93% .011 248.687);--color-accent:oklch(77.464% .062 217.469);--color-accent-content:oklch(15.492% .012 217.469);--color-neutral:oklch(45.229% .035 264.131);--color-neutral-content:oklch(89.925% .016 262.749);--color-info:oklch(69.207% .062 332.664);--color-info-content:oklch(13.841% .012 332.664);--color-success:oklch(76.827% .074 131.063);--color-success-content:oklch(15.365% .014 131.063);--color-warning:oklch(85.486% .089 84.093);--color-warning-content:oklch(17.097% .017 84.093);--color-error:oklch(60.61% .12 15.341);--color-error-content:oklch(12.122% .024 15.341);--radius-selector:1rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=sunset]:checked),[data-theme=sunset]{color-scheme:dark;--color-base-100:oklch(22% .019 237.69);--color-base-200:oklch(20% .019 237.69);--color-base-300:oklch(18% .019 237.69);--color-base-content:oklch(77.383% .043 245.096);--color-primary:oklch(74.703% .158 39.947);--color-primary-content:oklch(14.94% .031 39.947);--color-secondary:oklch(72.537% .177 2.72);--color-secondary-content:oklch(14.507% .035 2.72);--color-accent:oklch(71.294% .166 299.844);--color-accent-content:oklch(14.258% .033 299.844);--color-neutral:oklch(26% .019 237.69);--color-neutral-content:oklch(70% .019 237.69);--color-info:oklch(85.559% .085 206.015);--color-info-content:oklch(17.111% .017 206.015);--color-success:oklch(85.56% .085 144.778);--color-success-content:oklch(17.112% .017 144.778);--color-warning:oklch(85.569% .084 74.427);--color-warning-content:oklch(17.113% .016 74.427);--color-error:oklch(85.511% .078 16.886);--color-error-content:oklch(17.102% .015 16.886);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=caramellatte]:checked),[data-theme=caramellatte]{color-scheme:light;--color-base-100:oklch(98% .016 73.684);--color-base-200:oklch(95% .038 75.164);--color-base-300:oklch(90% .076 70.697);--color-base-content:oklch(40% .123 38.172);--color-primary:oklch(0% 0 0);--color-primary-content:oklch(100% 0 0);--color-secondary:oklch(22.45% .075 37.85);--color-secondary-content:oklch(90% .076 70.697);--color-accent:oklch(46.44% .111 37.85);--color-accent-content:oklch(90% .076 70.697);--color-neutral:oklch(55% .195 38.402);--color-neutral-content:oklch(98% .016 73.684);--color-info:oklch(42% .199 265.638);--color-info-content:oklch(90% .076 70.697);--color-success:oklch(43% .095 166.913);--color-success-content:oklch(90% .076 70.697);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(70% .191 22.216);--color-error-content:oklch(39% .141 25.723);--radius-selector:2rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:2px;--depth:1;--noise:1}:root:has(input.theme-controller[value=abyss]:checked),[data-theme=abyss]{color-scheme:dark;--color-base-100:oklch(20% .08 209);--color-base-200:oklch(15% .08 209);--color-base-300:oklch(10% .08 209);--color-base-content:oklch(90% .076 70.697);--color-primary:oklch(92% .2653 125);--color-primary-content:oklch(50% .2653 125);--color-secondary:oklch(83.27% .0764 298.3);--color-secondary-content:oklch(43.27% .0764 298.3);--color-accent:oklch(43% 0 0);--color-accent-content:oklch(98% 0 0);--color-neutral:oklch(30% .08 209);--color-neutral-content:oklch(90% .076 70.697);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(79% .209 151.711);--color-success-content:oklch(26% .065 152.934);--color-warning:oklch(84.8% .1962 84.62);--color-warning-content:oklch(44.8% .1962 84.62);--color-error:oklch(65% .1985 24.22);--color-error-content:oklch(27% .1985 24.22);--radius-selector:2rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=silk]:checked),[data-theme=silk]{color-scheme:light;--color-base-100:oklch(97% .0035 67.78);--color-base-200:oklch(95% .0081 61.42);--color-base-300:oklch(90% .0081 61.42);--color-base-content:oklch(40% .0081 61.42);--color-primary:oklch(23.27% .0249 284.3);--color-primary-content:oklch(94.22% .2505 117.44);--color-secondary:oklch(23.27% .0249 284.3);--color-secondary-content:oklch(73.92% .2135 50.94);--color-accent:oklch(23.27% .0249 284.3);--color-accent-content:oklch(88.92% .2061 189.9);--color-neutral:oklch(20% 0 0);--color-neutral-content:oklch(80% .0081 61.42);--color-info:oklch(80.39% .1148 241.68);--color-info-content:oklch(30.39% .1148 241.68);--color-success:oklch(83.92% .0901 136.87);--color-success-content:oklch(23.92% .0901 136.87);--color-warning:oklch(83.92% .1085 80);--color-warning-content:oklch(43.92% .1085 80);--color-error:oklch(75.1% .1814 22.37);--color-error-content:oklch(35.1% .1814 22.37);--radius-selector:2rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:2px;--depth:1;--noise:0}:root{--fx-noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E");scrollbar-color:currentColor #0000}@supports (color:color-mix(in lab,red,red)){:root{scrollbar-color:color-mix(in oklch,currentColor 35%,#0000)#0000}}@property --radialprogress{syntax: "<percentage>"; inherits: true; initial-value: 0%;}:root:has(.modal-open,.modal[open],.modal:target,.modal-toggle:checked,.drawer:not([class*=drawer-open])>.drawer-toggle:checked){overflow:hidden}:where(:root:has(.modal-open,.modal[open],.modal:target,.modal-toggle:checked,.drawer:not(.drawer-open)>.drawer-toggle:checked)){scrollbar-gutter:stable;background-image:linear-gradient(var(--color-base-100),var(--color-base-100));--root-bg:var(--color-base-100)}@supports (color:color-mix(in lab,red,red)){:where(:root:has(.modal-open,.modal[open],.modal:target,.modal-toggle:checked,.drawer:not(.drawer-open)>.drawer-toggle:checked)){--root-bg:color-mix(in srgb,var(--color-base-100),oklch(0% 0 0) 40%)}}:where(.modal[open],.modal-open,.modal-toggle:checked+.modal):not(.modal-start,.modal-end){scrollbar-gutter:stable}:root,[data-theme]{background-color:var(--root-bg,var(--color-base-100));color:var(--color-base-content)}}@layer components;@layer utilities{.diff{webkit-user-select:none;-webkit-user-select:none;user-select:none;direction:ltr;grid-template-rows:1fr 1.8rem 1fr;grid-template-columns:auto 1fr;width:100%;display:grid;position:relative;overflow:hidden;container-type:inline-size}.diff:focus-visible,.diff:has(.diff-item-1:focus-visible){outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px;outline-color:var(--color-base-content)}.diff:focus-visible .diff-resizer{min-width:95cqi;max-width:95cqi}.diff:has(.diff-item-1:focus-visible){outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px}.diff:has(.diff-item-1:focus-visible) .diff-resizer{min-width:5cqi;max-width:5cqi}@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){.diff:focus .diff-resizer{min-width:5cqi;max-width:5cqi}.diff:has(.diff-item-1:focus) .diff-resizer{min-width:95cqi;max-width:95cqi}}.modal{pointer-events:none;visibility:hidden;width:100%;max-width:none;height:100%;max-height:none;color:inherit;transition:translate .3s ease-out,visibility .3s allow-discrete,background-color .3s ease-out,opacity .1s ease-out;overscroll-behavior:contain;z-index:999;scrollbar-gutter:auto;background-color:#0000;place-items:center;margin:0;padding:0;display:grid;position:fixed;inset:0;overflow:hidden}.modal::backdrop{display:none}.modal.modal-open,.modal[open],.modal:target{pointer-events:auto;visibility:visible;opacity:1;background-color:#0006}:is(.modal.modal-open,.modal[open],.modal:target) .modal-box{opacity:1;translate:0;scale:1}@starting-style{.modal.modal-open,.modal[open],.modal:target{visibility:hidden;opacity:0}}.tooltip{--tt-bg:var(--color-neutral);--tt-off: calc(100% + .5rem) ;--tt-tail: calc(100% + 1px + .25rem) ;display:inline-block;position:relative}.tooltip>:where(.tooltip-content),.tooltip:where([data-tip]):before{border-radius:var(--radius-field);text-align:center;white-space:normal;max-width:20rem;color:var(--color-neutral-content);opacity:0;background-color:var(--tt-bg);pointer-events:none;z-index:2;--tw-content:attr(data-tip);content:var(--tw-content);width:max-content;padding-block:.25rem;padding-inline:.5rem;font-size:.875rem;line-height:1.25;position:absolute}@media (prefers-reduced-motion:no-preference){.tooltip>:where(.tooltip-content),.tooltip:where([data-tip]):before,.tooltip:after{transition:opacity .2s cubic-bezier(.4,0,.2,1) 75ms,transform .2s cubic-bezier(.4,0,.2,1) 75ms}}.tooltip:after{opacity:0;background-color:var(--tt-bg);content:"";pointer-events:none;--mask-tooltip:url("data:image/svg+xml,%3Csvg width='10' height='4' viewBox='0 0 8 4' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0.500009 1C3.5 1 3.00001 4 5.00001 4C7 4 6.5 1 9.5 1C10 1 10 0.499897 10 0H0C-1.99338e-08 0.5 0 1 0.500009 1Z' fill='black'/%3E%3C/svg%3E%0A");width:.625rem;height:.25rem;-webkit-mask-position:-1px 0;mask-position:-1px 0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:var(--mask-tooltip);mask-image:var(--mask-tooltip);display:block;position:absolute}:is(.tooltip.tooltip-open,.tooltip[data-tip]:not([data-tip=""]):hover,.tooltip:not(:has(.tooltip-content:empty)):has(.tooltip-content):hover,.tooltip:has(:focus-visible))>.tooltip-content,:is(.tooltip.tooltip-open,.tooltip[data-tip]:not([data-tip=""]):hover,.tooltip:not(:has(.tooltip-content:empty)):has(.tooltip-content):hover,.tooltip:has(:focus-visible))[data-tip]:before,:is(.tooltip.tooltip-open,.tooltip[data-tip]:not([data-tip=""]):hover,.tooltip:not(:has(.tooltip-content:empty)):has(.tooltip-content):hover,.tooltip:has(:focus-visible)):after{opacity:1;--tt-pos:0rem}@media (prefers-reduced-motion:no-preference){:is(.tooltip.tooltip-open,.tooltip[data-tip]:not([data-tip=""]):hover,.tooltip:not(:has(.tooltip-content:empty)):has(.tooltip-content):hover,.tooltip:has(:focus-visible))>.tooltip-content,:is(.tooltip.tooltip-open,.tooltip[data-tip]:not([data-tip=""]):hover,.tooltip:not(:has(.tooltip-content:empty)):has(.tooltip-content):hover,.tooltip:has(:focus-visible))[data-tip]:before,:is(.tooltip.tooltip-open,.tooltip[data-tip]:not([data-tip=""]):hover,.tooltip:not(:has(.tooltip-content:empty)):has(.tooltip-content):hover,.tooltip:has(:focus-visible)):after{transition:opacity .2s cubic-bezier(.4,0,.2,1),transform .2s cubic-bezier(.4,0,.2,1)}}.tooltip>.tooltip-content,.tooltip[data-tip]:before{transform:translate(-50%)translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-off)50%}.tooltip:after{transform:translate(-50%)translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-tail)50%}.tab{cursor:pointer;appearance:none;text-align:center;webkit-user-select:none;-webkit-user-select:none;user-select:none;flex-wrap:wrap;justify-content:center;align-items:center;display:inline-flex;position:relative}@media (hover:hover){.tab:hover{color:var(--color-base-content)}}.tab{--tab-p:1rem;--tab-bg:var(--color-base-100);--tab-border-color:var(--color-base-300);--tab-radius-ss:0;--tab-radius-se:0;--tab-radius-es:0;--tab-radius-ee:0;--tab-order:0;--tab-radius-min:calc(.75rem - var(--border));order:var(--tab-order);height:var(--tab-height);border-color:#0000;padding-inline-start:var(--tab-p);padding-inline-end:var(--tab-p);font-size:.875rem}.tab:is(input[type=radio]){min-width:fit-content}.tab:is(input[type=radio]):after{content:attr(aria-label)}.tab:is(label){position:relative}.tab:is(label) input{cursor:pointer;appearance:none;opacity:0;position:absolute;inset:0}:is(.tab:checked,.tab:is(label:has(:checked)),.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content{height:calc(100% - var(--tab-height) + var(--border));display:block}.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){color:color-mix(in oklab,var(--color-base-content)50%,transparent)}}.tab:not(input):empty{cursor:default;flex-grow:1}.tab:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.tab:focus{outline-offset:2px;outline:2px solid #0000}}.tab:focus-visible,.tab:is(label:has(:checked:focus-visible)){outline-offset:-5px;outline:2px solid}.tab[disabled]{pointer-events:none;opacity:.4}.menu{--menu-active-fg:var(--color-neutral-content);--menu-active-bg:var(--color-neutral);flex-flow:column wrap;width:fit-content;padding:.5rem;font-size:.875rem;display:flex}.menu :where(li ul){white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem;position:relative}.menu :where(li ul):before{background-color:var(--color-base-content);opacity:.1;width:var(--border);content:"";inset-inline-start:0;position:absolute;top:.75rem;bottom:.75rem}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}.menu :where(li:not(.menu-title)>:not(ul,details,.menu-title,.btn)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);text-align:start;text-wrap:balance;-webkit-user-select:none;user-select:none;grid-auto-columns:minmax(auto,max-content) auto max-content;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:grid}.menu :where(li>details>summary){--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li>details>summary){outline-offset:2px;outline:2px solid #0000}}.menu :where(li>details>summary)::-webkit-details-marker{display:none}:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{translate:0 1px;rotate:45deg}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{color:var(--color-base-content);--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){box-shadow:inset 0 1px #00000003,inset 0 -1px #ffffff03}.menu :where(li:empty){background-color:var(--color-base-content);opacity:.1;height:1px;margin:.5rem 1rem}.menu :where(li){flex-flow:column wrap;flex-shrink:0;align-items:stretch;display:flex;position:relative}.menu :where(li) .badge{justify-self:flex-end}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{outline-offset:2px;outline:2px solid #0000}}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise)}:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):not(:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):active){box-shadow:0 2px calc(var(--depth)*3px) -2px var(--menu-active-bg)}.menu :where(li).menu-disabled{pointer-events:none;color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.menu :where(li).menu-disabled{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.menu .dropdown:focus-within .menu-dropdown-toggle:after{translate:0 1px;rotate:45deg}.menu .dropdown-content{margin-top:.5rem;padding:.5rem}.menu .dropdown-content:before{display:none}.dropdown{position-area:var(--anchor-v,bottom)var(--anchor-h,span-right);display:inline-block;position:relative}.dropdown>:not(summary):focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.dropdown>:not(summary):focus{outline-offset:2px;outline:2px solid #0000}}.dropdown .dropdown-content{position:absolute}.dropdown:not(details,.dropdown-open,.dropdown-hover:hover,:focus-within) .dropdown-content{transform-origin:top;opacity:0;display:none;scale:95%}.dropdown[popover],.dropdown .dropdown-content{z-index:999}@media (prefers-reduced-motion:no-preference){.dropdown[popover],.dropdown .dropdown-content{transition-behavior:allow-discrete;transition-property:opacity,scale,display;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);animation:.2s dropdown}}@starting-style{.dropdown[popover],.dropdown .dropdown-content{opacity:0;scale:95%}}:is(.dropdown.dropdown-open,.dropdown:not(.dropdown-hover):focus,.dropdown:focus-within)>[tabindex]:first-child{pointer-events:none}:is(.dropdown.dropdown-open,.dropdown:not(.dropdown-hover):focus,.dropdown:focus-within) .dropdown-content{opacity:1}.dropdown.dropdown-hover:hover .dropdown-content{opacity:1;scale:100%}.dropdown:is(details) summary::-webkit-details-marker{display:none}:is(.dropdown.dropdown-open,.dropdown:focus,.dropdown:focus-within) .dropdown-content{scale:100%}.dropdown:where([popover]){background:0 0}.dropdown[popover]{color:inherit;position:fixed}@supports not (position-area:bottom){.dropdown[popover]{margin:auto}.dropdown[popover].dropdown-open:not(:popover-open){transform-origin:top;opacity:0;display:none;scale:95%}.dropdown[popover]::backdrop{background-color:oklab(0% none none/.3)}}.dropdown[popover]:not(.dropdown-open,:popover-open){transform-origin:top;opacity:0;display:none;scale:95%}:where(.btn){width:unset}.btn{cursor:pointer;text-align:center;vertical-align:middle;outline-offset:2px;webkit-user-select:none;-webkit-user-select:none;user-select:none;padding-inline:var(--btn-p);color:var(--btn-fg);--tw-prose-links:var(--btn-fg);height:var(--size);font-size:var(--fontsize,.875rem);outline-color:var(--btn-color,var(--color-base-content));background-color:var(--btn-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--btn-noise);border-width:var(--border);border-style:solid;border-color:var(--btn-border);text-shadow:0 .5px oklch(100% 0 0/calc(var(--depth)*.15));touch-action:manipulation;box-shadow:0 .5px 0 .5px oklch(100% 0 0/calc(var(--depth)*6%)) inset,var(--btn-shadow);--size:calc(var(--size-field,.25rem)*10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-p:1rem;--btn-border:var(--btn-bg);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-wrap:nowrap;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;font-weight:600;transition-property:color,background-color,border-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:inline-flex}@supports (color:color-mix(in lab,red,red)){.btn{--btn-border:color-mix(in oklab,var(--btn-bg),#000 calc(var(--depth)*5%))}}.btn{--btn-shadow:0 3px 2px -2px var(--btn-bg),0 4px 3px -2px var(--btn-bg)}@supports (color:color-mix(in lab,red,red)){.btn{--btn-shadow:0 3px 2px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000),0 4px 3px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000)}}.btn{--btn-noise:var(--fx-noise)}.prose .btn{text-decoration-line:none}@media (hover:hover){.btn:hover{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab,red,red)){.btn:hover{--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}}.btn:focus-visible,.btn:has(:focus-visible){isolation:isolate;outline-width:2px;outline-style:solid}.btn:active:not(.btn-active){--btn-bg:var(--btn-color,var(--color-base-200));translate:0 .5px}@supports (color:color-mix(in lab,red,red)){.btn:active:not(.btn-active){--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 5%)}}.btn:active:not(.btn-active){--btn-border:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab,red,red)){.btn:active:not(.btn-active){--btn-border:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}.btn:active:not(.btn-active){--btn-shadow:0 0 0 0 oklch(0% 0 0/0),0 0 0 0 oklch(0% 0 0/0)}.btn:is(:disabled,[disabled],.btn-disabled):not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn:is(:disabled,[disabled],.btn-disabled):not(.btn-link,.btn-ghost){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.btn:is(:disabled,[disabled],.btn-disabled):not(.btn-link,.btn-ghost){box-shadow:none}.btn:is(:disabled,[disabled],.btn-disabled){pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn:is(:disabled,[disabled],.btn-disabled){--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}@media (hover:hover){.btn:is(:disabled,[disabled],.btn-disabled):hover{pointer-events:none;background-color:var(--color-neutral)}@supports (color:color-mix(in lab,red,red)){.btn:is(:disabled,[disabled],.btn-disabled):hover{background-color:color-mix(in oklab,var(--color-neutral)20%,transparent)}}.btn:is(:disabled,[disabled],.btn-disabled):hover{--btn-border:#0000;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn:is(:disabled,[disabled],.btn-disabled):hover{--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}}.btn:is(input[type=checkbox],input[type=radio]){appearance:none}.btn:is(input[type=checkbox],input[type=radio]):after{content:attr(aria-label)}.btn:where(input:checked:not(.filter .btn)){--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content);isolation:isolate}.loading{pointer-events:none;aspect-ratio:1;vertical-align:middle;width:calc(var(--size-selector,.25rem)*6);background-color:currentColor;display:inline-block;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.tabs-lift{--tabs-height:auto;--tabs-direction:row}.tabs-lift>.tab{--tab-border:0 0 var(--border)0;--tab-radius-ss:min(var(--radius-field),var(--tab-radius-min));--tab-radius-se:min(var(--radius-field),var(--tab-radius-min));--tab-radius-es:0;--tab-radius-ee:0;--tab-paddings:var(--border)var(--tab-p)0 var(--tab-p);--tab-border-colors:#0000 #0000 var(--tab-border-color)#0000;--tab-corner-width: calc(100% + min(var(--radius-field),var(--tab-radius-min))*2) ;--tab-corner-height:min(var(--radius-field),var(--tab-radius-min));--tab-corner-position:top left,top right;border-width:var(--tab-border);padding:var(--tab-paddings);border-color:var(--tab-border-colors);border-start-start-radius:var(--tab-radius-ss);border-start-end-radius:var(--tab-radius-se);border-end-end-radius:var(--tab-radius-ee);border-end-start-radius:var(--tab-radius-es)}.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked)){--tab-border:var(--border)var(--border)0 var(--border);--tab-border-colors:var(--tab-border-color)var(--tab-border-color)#0000 var(--tab-border-color);--tab-paddings:0 calc(var(--tab-p) - var(--border))var(--border)calc(var(--tab-p) - var(--border));--tab-inset:auto auto 0 auto;--tab-grad:calc(69% - var(--border));--radius-start:radial-gradient(circle at top left,#0000 var(--tab-grad),var(--tab-border-color)calc(var(--tab-grad) + .25px),var(--tab-border-color)calc(var(--tab-grad) + var(--border)),var(--tab-bg)calc(var(--tab-grad) + var(--border) + .25px));--radius-end:radial-gradient(circle at top right,#0000 var(--tab-grad),var(--tab-border-color)calc(var(--tab-grad) + .25px),var(--tab-border-color)calc(var(--tab-grad) + var(--border)),var(--tab-bg)calc(var(--tab-grad) + var(--border) + .25px));background-color:var(--tab-bg)}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):before{z-index:1;content:"";width:var(--tab-corner-width);height:var(--tab-corner-height);background-position:var(--tab-corner-position);background-image:var(--radius-start),var(--radius-end);background-size:min(var(--radius-field),var(--tab-radius-min))min(var(--radius-field),var(--tab-radius-min));inset:var(--tab-inset);background-repeat:no-repeat;display:block;position:absolute}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):first-child:before{--radius-start:none}[dir=rtl] :is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):first-child:before{transform:rotateY(180deg)}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):last-child:before{--radius-end:none}[dir=rtl] :is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):last-child:before{transform:rotateY(180deg)}.tabs-lift:has(>.tab-content)>.tab:first-child:not(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){--tab-border-colors:var(--tab-border-color)var(--tab-border-color)#0000 var(--tab-border-color)}.tabs-lift>.tab-content{--tabcontent-margin:calc(-1*var(--border))0 0 0;--tabcontent-radius-ss:0;--tabcontent-radius-se:var(--radius-box);--tabcontent-radius-es:var(--radius-box);--tabcontent-radius-ee:var(--radius-box)}:is(.tabs-lift :checked,.tabs-lift label:has(:checked),.tabs-lift :is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content:first-child,:is(.tabs-lift :checked,.tabs-lift label:has(:checked),.tabs-lift :is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content:nth-child(n+3){--tabcontent-radius-ss:var(--radius-box)}.radial-progress{height:var(--size);width:var(--size);vertical-align:middle;box-sizing:content-box;--value:0;--size:5rem;--thickness:calc(var(--size)/10);--radialprogress:calc(var(--value)*1%);background-color:#0000;border-radius:3.40282e38px;place-content:center;transition:--radialprogress .3s linear;display:inline-grid;position:relative}.radial-progress:before{content:"";background:radial-gradient(farthest-side,currentColor 98%,#0000)top/var(--thickness)var(--thickness)no-repeat,conic-gradient(currentColor var(--radialprogress),#0000 0);webkit-mask:radial-gradient(farthest-side,#0000 calc(100% - var(--thickness)),#000 calc(100% + .5px - var(--thickness)));-webkit-mask:radial-gradient(farthest-side,#0000 calc(100% - var(--thickness)),#000 calc(100% + .5px - var(--thickness)));mask:radial-gradient(farthest-side,#0000 calc(100% - var(--thickness)),#000 calc(100% + .5px - var(--thickness)));border-radius:3.40282e38px;position:absolute;inset:0}.radial-progress:after{content:"";inset:calc(50% - var(--thickness)/2);transform:rotate(calc(var(--value)*3.6deg - 90deg))translate(calc(var(--size)/2 - 50%));background-color:currentColor;border-radius:3.40282e38px;transition:transform .3s linear;position:absolute}.list{flex-direction:column;font-size:.875rem;display:flex}.list :where(.list-row){--list-grid-cols:minmax(0,auto)1fr;border-radius:var(--radius-box);word-break:break-word;grid-auto-flow:column;grid-template-columns:var(--list-grid-cols);gap:1rem;padding:1rem;display:grid;position:relative}.list :where(.list-row):has(.list-col-grow:first-child){--list-grid-cols:1fr}.list :where(.list-row):has(.list-col-grow:nth-child(2)){--list-grid-cols:minmax(0,auto)1fr}.list :where(.list-row):has(.list-col-grow:nth-child(3)){--list-grid-cols:minmax(0,auto)minmax(0,auto)1fr}.list :where(.list-row):has(.list-col-grow:nth-child(4)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list :where(.list-row):has(.list-col-grow:nth-child(5)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list :where(.list-row):has(.list-col-grow:nth-child(6)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list :where(.list-row) :not(.list-col-wrap){grid-row-start:1}:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{content:"";border-bottom:var(--border)solid;inset-inline:var(--radius-box);border-color:var(--color-base-content);position:absolute;bottom:0}@supports (color:color-mix(in lab,red,red)){:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{border-color:color-mix(in oklab,var(--color-base-content)5%,transparent)}}.toggle{border:var(--border)solid currentColor;color:var(--input-color);cursor:pointer;appearance:none;vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--toggle-p),var(--radius-selector-max)) + min(var(--border),var(--radius-selector-max)));padding:var(--toggle-p);flex-shrink:0;grid-template-columns:0fr 1fr 1fr;place-content:center;display:inline-grid;position:relative;box-shadow:inset 0 1px}@supports (color:color-mix(in lab,red,red)){.toggle{box-shadow:0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000) inset}}.toggle{--input-color:var(--color-base-content);transition:color .3s,grid-template-columns .2s}@supports (color:color-mix(in lab,red,red)){.toggle{--input-color:color-mix(in oklab,var(--color-base-content)50%,#0000)}}.toggle{--toggle-p:calc(var(--size)*.125);--size:calc(var(--size-selector,.25rem)*6);width:calc((var(--size)*2) - (var(--border) + var(--toggle-p))*2);height:var(--size)}.toggle>*{z-index:1;cursor:pointer;appearance:none;background-color:#0000;border:none;grid-column:2/span 1;grid-row-start:1;height:100%;padding:.125rem;transition:opacity .2s,rotate .4s}.toggle>:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.toggle>:focus{outline-offset:2px;outline:2px solid #0000}}.toggle>:nth-child(2){color:var(--color-base-100);rotate:none}.toggle>:nth-child(3){color:var(--color-base-100);opacity:0;rotate:-15deg}.toggle:has(:checked)>:nth-child(2){opacity:0;rotate:15deg}.toggle:has(:checked)>:nth-child(3){opacity:1;rotate:none}.toggle:before{aspect-ratio:1;border-radius:var(--radius-selector);--tw-content:"";content:var(--tw-content);height:100%;box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px currentColor;background-color:currentColor;grid-row-start:1;grid-column-start:2;transition:background-color .1s,translate .2s,inset-inline-start .2s;position:relative;inset-inline-start:0;translate:0}@supports (color:color-mix(in lab,red,red)){.toggle:before{box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000)}}.toggle:before{background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise)}@media (forced-colors:active){.toggle:before{outline-style:var(--tw-outline-style);outline-offset:-1px;outline-width:1px}}@media print{.toggle:before{outline-offset:-1rem;outline:.25rem solid}}.toggle:focus-visible,.toggle:has(:focus-visible){outline-offset:2px;outline:2px solid}.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked){background-color:var(--color-base-100);--input-color:var(--color-base-content);grid-template-columns:1fr 1fr 0fr}:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{background-color:currentColor}@starting-style{:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{opacity:0}}.toggle:indeterminate{grid-template-columns:.5fr 1fr .5fr}.toggle:disabled{cursor:not-allowed;opacity:.3}.toggle:disabled:before{border:var(--border)solid currentColor;background-color:#0000}.input{cursor:text;border:var(--border)solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;white-space:nowrap;width:clamp(3rem,20rem,100%);height:var(--size);touch-action:manipulation;border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.5rem;padding-inline:.75rem;font-size:.875rem;display:inline-flex;position:relative}@supports (color:color-mix(in lab,red,red)){.input{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset}}.input{--size:calc(var(--size-field,.25rem)*10);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.input{--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000)}}.input:where(input){display:inline-flex}.input :where(input){appearance:none;background-color:#0000;border:none;width:100%;height:100%;display:inline-flex}.input :where(input):focus,.input :where(input):focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.input :where(input):focus,.input :where(input):focus-within{outline-offset:2px;outline:2px solid #0000}}.input :where(input[type=url]),.input :where(input[type=email]){direction:ltr}.input :where(input[type=date]){display:inline-flex}.input:focus,.input:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab,red,red)){.input:focus,.input:focus-within{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)}}.input:focus,.input:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate;z-index:1}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{box-shadow:none}.input:has(>input[disabled])>input[disabled]{cursor:not-allowed}.input::-webkit-date-and-time-value{text-align:inherit}.input[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input::-webkit-calendar-picker-indicator{position:absolute;inset-inline-end:.75em}.input:has(>input[type=date]) :where(input[type=date]){webkit-appearance:none;appearance:none;display:inline-flex}.input:has(>input[type=date]) input[type=date]::-webkit-calendar-picker-indicator{cursor:pointer;width:1em;height:1em;position:absolute;inset-inline-end:.75em}.table{border-radius:var(--radius-box);text-align:left;width:100%;font-size:.875rem;position:relative}.table:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right}@media (hover:hover){:is(.table tr.row-hover,.table tr.row-hover:nth-child(2n)):hover{background-color:var(--color-base-200)}}.table :where(th,td){vertical-align:middle;padding-block:.75rem;padding-inline:1rem}.table :where(thead,tfoot){white-space:nowrap;color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.table :where(thead,tfoot){color:color-mix(in oklab,var(--color-base-content)60%,transparent)}}.table :where(thead,tfoot){font-size:.875rem;font-weight:600}.table :where(tfoot){border-top:var(--border)solid var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.table :where(tfoot){border-top:var(--border)solid color-mix(in oklch,var(--color-base-content)5%,#0000)}}.table :where(.table-pin-rows thead tr){z-index:1;background-color:var(--color-base-100);position:sticky;top:0}.table :where(.table-pin-rows tfoot tr){z-index:1;background-color:var(--color-base-100);position:sticky;bottom:0}.table :where(.table-pin-cols tr th){background-color:var(--color-base-100);position:sticky;left:0;right:0}.table :where(thead tr,tbody tr:not(:last-child)){border-bottom:var(--border)solid var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.table :where(thead tr,tbody tr:not(:last-child)){border-bottom:var(--border)solid color-mix(in oklch,var(--color-base-content)5%,#0000)}}.timeline{display:flex;position:relative}.timeline>li{grid-template-rows:var(--timeline-row-start,minmax(0,1fr))auto var(--timeline-row-end,minmax(0,1fr));grid-template-columns:var(--timeline-col-start,minmax(0,1fr))auto var(--timeline-col-end,minmax(0,1fr));flex-shrink:0;align-items:center;display:grid;position:relative}.timeline>li>hr{border:none;width:100%}.timeline>li>hr:first-child{grid-row-start:2;grid-column-start:1}.timeline>li>hr:last-child{grid-area:2/3/auto/none}@media print{.timeline>li>hr{border:.1px solid var(--color-base-300)}}.timeline :where(hr){background-color:var(--color-base-300);height:.25rem}.timeline:has(.timeline-middle hr):first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.timeline:has(.timeline-middle hr):last-child,.timeline:not(:has(.timeline-middle)) :first-child hr:last-child{border-start-start-radius:var(--radius-selector);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--radius-selector)}.timeline:not(:has(.timeline-middle)) :last-child hr:first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.card{border-radius:var(--radius-box);outline-offset:2px;outline:0 solid #0000;flex-direction:column;transition:outline .2s ease-in-out;display:flex;position:relative}.card:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.card:focus{outline-offset:2px;outline:2px solid #0000}}.card:focus-visible{outline-color:currentColor}.card :where(figure:first-child){border-start-start-radius:inherit;border-start-end-radius:inherit;border-end-end-radius:unset;border-end-start-radius:unset;overflow:hidden}.card :where(figure:last-child){border-start-start-radius:unset;border-start-end-radius:unset;border-end-end-radius:inherit;border-end-start-radius:inherit;overflow:hidden}.card:where(.card-border){border:var(--border)solid var(--color-base-200)}.card:where(.card-dash){border:var(--border)dashed var(--color-base-200)}.card.image-full{display:grid}.card.image-full>*{grid-row-start:1;grid-column-start:1}.card.image-full>.card-body{color:var(--color-neutral-content);position:relative}.card.image-full :where(figure){border-radius:inherit;overflow:hidden}.card.image-full>figure img{object-fit:cover;filter:brightness(28%);height:100%}.card figure{justify-content:center;align-items:center;display:flex}.card:has(>input:is(input[type=checkbox],input[type=radio])){cursor:pointer;-webkit-user-select:none;user-select:none}.card:has(>:checked){outline:2px solid}.avatar{vertical-align:middle;display:inline-flex;position:relative}.avatar>div{aspect-ratio:1;display:block;overflow:hidden}.avatar img{object-fit:cover;width:100%;height:100%}.checkbox{border:var(--border)solid var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.checkbox{border:var(--border)solid var(--input-color,color-mix(in oklab,var(--color-base-content)20%,#0000))}}.checkbox{cursor:pointer;appearance:none;border-radius:var(--radius-selector);vertical-align:middle;color:var(--color-base-content);box-shadow:0 1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 0 #0000 inset,0 0 #0000;--size:calc(var(--size-selector,.25rem)*6);width:var(--size);height:var(--size);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);flex-shrink:0;padding:.25rem;transition:background-color .2s,box-shadow .2s;display:inline-block;position:relative}.checkbox:before{--tw-content:"";content:var(--tw-content);opacity:0;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,70% 80%,70% 100%);width:100%;height:100%;box-shadow:0 3px oklch(100% 0 0/calc(var(--depth)*.1)) inset;background-color:currentColor;font-size:1rem;line-height:.75;transition:clip-path .3s .1s,opacity .1s .1s,rotate .3s .1s,translate .3s .1s;display:block;rotate:45deg}.checkbox:focus-visible{outline:2px solid var(--input-color,currentColor);outline-offset:2px}.checkbox:checked,.checkbox[aria-checked=true]{background-color:var(--input-color,#0000);box-shadow:0 0 #0000 inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px oklch(0% 0 0/calc(var(--depth)*.1))}:is(.checkbox:checked,.checkbox[aria-checked=true]):before{clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 0%,70% 0%,70% 100%);opacity:1}@media (forced-colors:active){:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:none}}@media print{:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:none}}.checkbox:indeterminate{background-color:var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.checkbox:indeterminate{background-color:var(--input-color,color-mix(in oklab,var(--color-base-content)20%,#0000))}}.checkbox:indeterminate:before{opacity:1;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,80% 80%,80% 100%);translate:0 -35%;rotate:none}.checkbox:disabled{cursor:not-allowed;opacity:.2}.radio{cursor:pointer;appearance:none;vertical-align:middle;border:var(--border)solid var(--input-color,currentColor);border-radius:3.40282e38px;flex-shrink:0;padding:.25rem;display:inline-block;position:relative}@supports (color:color-mix(in lab,red,red)){.radio{border:var(--border)solid var(--input-color,color-mix(in srgb,currentColor 20%,#0000))}}.radio{box-shadow:0 1px oklch(0% 0 0/calc(var(--depth)*.1)) inset;--size:calc(var(--size-selector,.25rem)*6);width:var(--size);height:var(--size);color:var(--input-color,currentColor)}.radio:before{--tw-content:"";content:var(--tw-content);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);border-radius:3.40282e38px;width:100%;height:100%;display:block}.radio:focus-visible{outline:2px solid}.radio:checked,.radio[aria-checked=true]{background-color:var(--color-base-100);border-color:currentColor}@media (prefers-reduced-motion:no-preference){.radio:checked,.radio[aria-checked=true]{animation:.2s ease-out radio}}:is(.radio:checked,.radio[aria-checked=true]):before{box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px oklch(0% 0 0/calc(var(--depth)*.1));background-color:currentColor}@media (forced-colors:active){:is(.radio:checked,.radio[aria-checked=true]):before{outline-style:var(--tw-outline-style);outline-offset:-1px;outline-width:1px}}@media print{:is(.radio:checked,.radio[aria-checked=true]):before{outline-offset:-1rem;outline:.25rem solid}}.radio:disabled{cursor:not-allowed;opacity:.2}.progress{appearance:none;border-radius:var(--radius-box);background-color:currentColor;width:100%;height:.5rem;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.progress{background-color:color-mix(in oklab,currentcolor 20%,transparent)}}.progress{color:var(--color-base-content)}.progress:indeterminate{background-image:repeating-linear-gradient(90deg,currentColor -1% 10%,#0000 10% 90%);background-position-x:15%;background-size:200%}@media (prefers-reduced-motion:no-preference){.progress:indeterminate{animation:5s ease-in-out infinite progress}}@supports ((-moz-appearance:none)){.progress:indeterminate::-moz-progress-bar{background-color:#0000}@media (prefers-reduced-motion:no-preference){.progress:indeterminate::-moz-progress-bar{background-image:repeating-linear-gradient(90deg,currentColor -1% 10%,#0000 10% 90%);background-position-x:15%;background-size:200%;animation:5s ease-in-out infinite progress}}.progress::-moz-progress-bar{border-radius:var(--radius-box);background-color:currentColor}}@supports ((-webkit-appearance:none)){.progress::-webkit-progress-bar{border-radius:var(--radius-box);background-color:#0000}.progress::-webkit-progress-value{border-radius:var(--radius-box);background-color:currentColor}}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.tooltip-left>.tooltip-content,.tooltip-left[data-tip]:before{transform:translate(calc(var(--tt-pos,.25rem) - .25rem))translateY(-50%);inset:50% var(--tt-off)auto auto}.tooltip-left:after{transform:translate(var(--tt-pos,.25rem))translateY(-50%)rotate(-90deg);inset:50% calc(var(--tt-tail) + 1px)auto auto}.tooltip-right>.tooltip-content,.tooltip-right[data-tip]:before{transform:translate(calc(var(--tt-pos,-.25rem) + .25rem))translateY(-50%);inset:50% auto auto var(--tt-off)}.tooltip-right:after{transform:translate(var(--tt-pos,-.25rem))translateY(-50%)rotate(90deg);inset:50% auto auto calc(var(--tt-tail) + 1px)}.inset-0{inset:calc(var(--spacing)*0)}.dropdown-end{--anchor-h:span-left}.dropdown-end :where(.dropdown-content){inset-inline-end:0;translate:0}[dir=rtl] :is(.dropdown-end :where(.dropdown-content)){translate:0}.dropdown-end.dropdown-left{--anchor-h:left;--anchor-v:span-top}.dropdown-end.dropdown-left .dropdown-content{top:auto;bottom:0}.dropdown-end.dropdown-right{--anchor-h:right;--anchor-v:span-top}.dropdown-end.dropdown-right .dropdown-content{top:auto;bottom:0}.-top-2{top:calc(var(--spacing)*-2)}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-\\[50\\%\\]{top:50%}.-right-1{right:calc(var(--spacing)*-1)}.-right-2{right:calc(var(--spacing)*-2)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.-bottom-1{bottom:calc(var(--spacing)*-1)}.bottom-4{bottom:calc(var(--spacing)*4)}.left-1\\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-4{left:calc(var(--spacing)*4)}.left-\\[-15px\\]{left:-15px}.btn-active{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab,red,red)){.btn-active{--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}.btn-active{--btn-shadow:0 0 0 0 oklch(0% 0 0/0),0 0 0 0 oklch(0% 0 0/0);isolation:isolate}.modal-backdrop{color:#0000;z-index:-1;grid-row-start:1;grid-column-start:1;place-self:stretch stretch;display:grid}.modal-backdrop button{cursor:pointer}.z-10{z-index:10}.z-50{z-index:50}.z-\\[1000\\]{z-index:1000}.modal-box{background-color:var(--color-base-100);border-top-left-radius:var(--modal-tl,var(--radius-box));border-top-right-radius:var(--modal-tr,var(--radius-box));border-bottom-left-radius:var(--modal-bl,var(--radius-box));border-bottom-right-radius:var(--modal-br,var(--radius-box));opacity:0;overscroll-behavior:contain;grid-row-start:1;grid-column-start:1;width:91.6667%;max-width:32rem;max-height:100vh;padding:1.5rem;transition:translate .3s ease-out,scale .3s ease-out,opacity .2s ease-out 50ms,box-shadow .3s ease-out;overflow-y:auto;scale:95%;box-shadow:0 25px 50px -12px #00000040}.divider{white-space:nowrap;height:1rem;margin:var(--divider-m,1rem 0);--divider-color:var(--color-base-content);flex-direction:row;align-self:stretch;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.divider{--divider-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.divider:before,.divider:after{content:"";background-color:var(--divider-color);flex-grow:1;width:100%;height:.125rem}@media print{.divider:before,.divider:after{border:.5px solid}}.divider:not(:empty){gap:1rem}.filter{flex-wrap:wrap;display:flex}.filter input[type=radio]{width:auto}.filter input{opacity:1;transition:margin .1s,opacity .3s,padding .3s,border-width .1s;overflow:hidden;scale:1}.filter input:not(:last-child){margin-inline-end:.25rem}.filter input.filter-reset{aspect-ratio:1}.filter input.filter-reset:after{content:"×"}.filter:not(:has(input:checked:not(.filter-reset))) .filter-reset,.filter:not(:has(input:checked:not(.filter-reset))) input[type=reset],.filter:has(input:checked:not(.filter-reset)) input:not(:checked,.filter-reset,input[type=reset]){opacity:0;border-width:0;width:0;margin-inline:0;padding-inline:0;scale:0}.mx-auto{margin-inline:auto}.input-sm{--size:calc(var(--size-field,.25rem)*8);font-size:.75rem}.input-sm[type=number]::-webkit-inner-spin-button{margin-block:-.5rem;margin-inline-end:-.75rem}.my-2{margin-block:calc(var(--spacing)*2)}.label{white-space:nowrap;color:currentColor;align-items:center;gap:.375rem;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.label{color:color-mix(in oklab,currentcolor 60%,transparent)}}.label:has(input){cursor:pointer}.label:is(.input>*,.select>*){white-space:nowrap;height:calc(100% - .5rem);font-size:inherit;align-items:center;padding-inline:.75rem;display:flex}.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border)solid currentColor;margin-inline:-.75rem .75rem}@supports (color:color-mix(in lab,red,red)){.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border)solid color-mix(in oklab,currentColor 10%,#0000)}}.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border)solid currentColor;margin-inline:.75rem -.75rem}@supports (color:color-mix(in lab,red,red)){.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border)solid color-mix(in oklab,currentColor 10%,#0000)}}.join-item:where(:not(:first-child,:disabled,[disabled],.btn-disabled)){margin-block-start:0;margin-inline-start:calc(var(--border,1px)*-1)}.join-item:where(:is(:disabled,[disabled],.btn-disabled)){border-width:var(--border,1px)0 var(--border,1px)var(--border,1px)}.modal-action{justify-content:flex-end;gap:.5rem;margin-top:1.5rem;display:flex}.mt-0\\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-px{margin-top:1px}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.ml-auto{margin-left:auto}.status{aspect-ratio:1;border-radius:var(--radius-selector);background-color:var(--color-base-content);width:.5rem;height:.5rem;display:inline-block}@supports (color:color-mix(in lab,red,red)){.status{background-color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.status{vertical-align:middle;color:#0000004d;background-position:50%;background-repeat:no-repeat}@supports (color:color-mix(in lab,red,red)){.status{color:color-mix(in oklab,var(--color-black)30%,transparent)}}.status{background-image:radial-gradient(circle at 35% 30%,oklch(1 0 0/calc(var(--depth)*.5)),#0000);box-shadow:0 2px 3px -1px}@supports (color:color-mix(in lab,red,red)){.status{box-shadow:0 2px 3px -1px color-mix(in oklab,currentColor calc(var(--depth)*100%),#0000)}}.badge{border-radius:var(--radius-selector);vertical-align:middle;color:var(--badge-fg);border:var(--border)solid var(--badge-color,var(--color-base-200));width:fit-content;padding-inline:calc(.25rem*3 - var(--border));background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);background-color:var(--badge-bg);--badge-bg:var(--badge-color,var(--color-base-100));--badge-fg:var(--color-base-content);--size:calc(var(--size-selector,.25rem)*6);height:var(--size);justify-content:center;align-items:center;gap:.5rem;font-size:.875rem;display:inline-flex}.tabs{--tabs-height:auto;--tabs-direction:row;--tab-height:calc(var(--size-field,.25rem)*10);height:var(--tabs-height);flex-wrap:wrap;flex-direction:var(--tabs-direction);display:flex}.footer{grid-auto-flow:row;place-items:start;gap:2.5rem 1rem;width:100%;font-size:.875rem;line-height:1.25rem;display:grid}.footer>*{place-items:start;gap:.5rem;display:grid}.footer.footer-center{text-align:center;grid-auto-flow:column dense;place-items:center}.footer.footer-center>*{place-items:center}.card-body{padding:var(--card-p,1.5rem);font-size:var(--card-fs,.875rem);flex-direction:column;flex:auto;gap:.5rem;display:flex}.card-body :where(p){flex-grow:1}.alert{border-radius:var(--radius-box);color:var(--color-base-content);background-color:var(--alert-color,var(--color-base-200));text-align:start;border:var(--border)solid var(--color-base-200);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);box-shadow:0 3px 0 -2px oklch(100% 0 0/calc(var(--depth)*.08)) inset,0 1px #000,0 4px 3px -2px oklch(0% 0 0/calc(var(--depth)*.08));grid-template-columns:auto;grid-auto-flow:column;justify-content:start;place-items:center start;gap:1rem;padding-block:.75rem;padding-inline:1rem;font-size:.875rem;line-height:1.25rem;display:grid}@supports (color:color-mix(in lab,red,red)){.alert{box-shadow:0 3px 0 -2px oklch(100% 0 0/calc(var(--depth)*.08)) inset,0 1px color-mix(in oklab,color-mix(in oklab,#000 20%,var(--alert-color,var(--color-base-200)))calc(var(--depth)*20%),#0000),0 4px 3px -2px oklch(0% 0 0/calc(var(--depth)*.08))}}.alert:has(:nth-child(2)){grid-template-columns:auto minmax(auto,1fr)}.alert.alert-outline{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none}.alert.alert-dash{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none;border-style:dashed}.alert.alert-soft{color:var(--alert-color,var(--color-base-content));background:var(--alert-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.alert.alert-soft{background:color-mix(in oklab,var(--alert-color,var(--color-base-content))8%,var(--color-base-100))}}.alert.alert-soft{border-color:var(--alert-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.alert.alert-soft{border-color:color-mix(in oklab,var(--alert-color,var(--color-base-content))10%,var(--color-base-100))}}.alert.alert-soft{box-shadow:none;background-image:none}.join{--join-ss:0;--join-se:0;--join-es:0;--join-ee:0;align-items:stretch;display:inline-flex}.join :where(.join-item){border-start-start-radius:var(--join-ss,0);border-start-end-radius:var(--join-se,0);border-end-end-radius:var(--join-ee,0);border-end-start-radius:var(--join-es,0)}.join :where(.join-item) *{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>.join-item:where(:first-child),.join :first-child:not(:last-child) :where(.join-item){--join-ss:var(--radius-field);--join-se:0;--join-es:var(--radius-field);--join-ee:0}.join>.join-item:where(:last-child),.join :last-child:not(:first-child) :where(.join-item){--join-ss:0;--join-se:var(--radius-field);--join-es:0;--join-ee:var(--radius-field)}.join>.join-item:where(:only-child),.join :only-child :where(.join-item){--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.table{display:table}.btn-circle{width:var(--size);height:var(--size);border-radius:3.40282e38px;padding-inline:0}.btn-square{width:var(--size);height:var(--size);padding-inline:0}.size-1{width:calc(var(--spacing)*1);height:calc(var(--spacing)*1)}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-8{height:calc(var(--spacing)*8)}.h-16{height:calc(var(--spacing)*16)}.max-h-60{max-height:calc(var(--spacing)*60)}.max-h-full{max-height:100%}.loading-sm{width:calc(var(--size-selector,.25rem)*5)}.loading-xs{width:calc(var(--size-selector,.25rem)*4)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-8{width:calc(var(--spacing)*8)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-40{width:calc(var(--spacing)*40)}.w-52{width:calc(var(--spacing)*52)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-full{width:100%}.max-w-full{max-width:100%}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.-translate-x-1\\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\\[15px\\]{--tw-translate-x:15px;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-\\[15deg\\]{rotate:15deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skeleton{border-radius:var(--radius-box);background-color:var(--color-base-300)}@media (prefers-reduced-motion:reduce){.skeleton{transition-duration:15s}}.skeleton{will-change:background-position;background-image:linear-gradient(105deg,#0000 0% 40%,var(--color-base-100)50%,#0000 60% 100%);background-position-x:-50%;background-repeat:no-repeat;background-size:200%}@media (prefers-reduced-motion:no-preference){.skeleton{animation:1.8s ease-in-out infinite skeleton}}.link{cursor:pointer;text-decoration-line:underline}.link:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.link:focus{outline-offset:2px;outline:2px solid #0000}}.link:focus-visible{outline-offset:2px;outline:2px solid}.cursor-pointer{cursor:pointer}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-box{border-radius:var(--radius-box)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-\\[length\\:var\\(--border\\)\\]{border-style:var(--tw-border-style);border-width:var(--border)}.badge-soft{color:var(--badge-color,var(--color-base-content));background-color:var(--badge-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.badge-soft{background-color:color-mix(in oklab,var(--badge-color,var(--color-base-content))8%,var(--color-base-100))}}.badge-soft{border-color:var(--badge-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.badge-soft{border-color:color-mix(in oklab,var(--badge-color,var(--color-base-content))10%,var(--color-base-100))}}.badge-soft{background-image:none}.alert-error{border-color:var(--color-error);color:var(--color-error-content);--alert-color:var(--color-error)}.alert-info{border-color:var(--color-info);color:var(--color-info-content);--alert-color:var(--color-info)}.alert-success{border-color:var(--color-success);color:var(--color-success-content);--alert-color:var(--color-success)}.alert-warning{border-color:var(--color-warning);color:var(--color-warning-content);--alert-color:var(--color-warning)}.border-base-300{border-color:var(--color-base-300)}.border-base-content\\/10{border-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.border-base-content\\/10{border-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.border-white\\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\\/5{border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.bg-accent{background-color:var(--color-accent)}.bg-base-100{background-color:var(--color-base-100)}.bg-base-200,.bg-base-200\\/70{background-color:var(--color-base-200)}@supports (color:color-mix(in lab,red,red)){.bg-base-200\\/70{background-color:color-mix(in oklab,var(--color-base-200)70%,transparent)}}.bg-base-content{background-color:var(--color-base-content)}.bg-black\\/90{background-color:#000000e6}@supports (color:color-mix(in lab,red,red)){.bg-black\\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}}.bg-primary{background-color:var(--color-primary)}.bg-secondary{background-color:var(--color-secondary)}.loading-spinner{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E")}.fill-current{fill:currentColor}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.radio-sm{padding:.1875rem}.radio-sm[type=radio]{--size:calc(var(--size-selector,.25rem)*5)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.menu-title{color:var(--color-base-content);padding-block:.5rem;padding-inline:.75rem}@supports (color:color-mix(in lab,red,red)){.menu-title{color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}.menu-title{font-size:.875rem;font-weight:600}.badge-sm{--size:calc(var(--size-selector,.25rem)*5);padding-inline:calc(.25rem*2.5 - var(--border));font-size:.75rem}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-8{padding-block:calc(var(--spacing)*8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[10px\\]{font-size:10px}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.break-all{word-break:break-all}.progress-primary{color:var(--color-primary)}.text-base-content,.text-base-content\\/90{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.text-base-content\\/90{color:color-mix(in oklab,var(--color-base-content)90%,transparent)}}.text-info{color:var(--color-info)}.text-primary{color:var(--color-primary)}.text-warning{color:var(--color-warning)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.link-hover{text-decoration-line:none}@media (hover:hover){.link-hover:hover{text-decoration-line:underline}}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline-\\[length\\:var\\(--border\\)\\]{outline-style:var(--tw-outline-style);outline-width:var(--border)}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible){--btn-shadow:"";--btn-bg:#0000;--btn-border:#0000;--btn-noise:none}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible):not(:disabled,[disabled],.btn-disabled){--btn-fg:currentColor;outline-color:currentColor}@media (hover:none){.btn-ghost:hover:not(.btn-active,:active,:focus-visible,:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-bg:#0000;--btn-border:#0000;--btn-noise:none;--btn-fg:currentColor}}.outline-black\\/5{outline-color:#0000000d}@supports (color:color-mix(in lab,red,red)){.outline-black\\/5{outline-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition-\\[height\\,max-height\\]{transition-property:height,max-height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-fg:var(--btn-color,var(--color-base-content));--btn-bg:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,:disabled,[disabled],.btn-disabled){--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-content))8%,var(--color-base-100))}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,:disabled,[disabled],.btn-disabled){--btn-border:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,:disabled,[disabled],.btn-disabled){--btn-border:color-mix(in oklab,var(--btn-color,var(--color-base-content))10%,var(--color-base-100))}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,:disabled,[disabled],.btn-disabled){--btn-noise:none}@media (hover:none){.btn-soft:hover:not(.btn-active,:active,:focus-visible,:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-fg:var(--btn-color,var(--color-base-content));--btn-bg:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.btn-soft:hover:not(.btn-active,:active,:focus-visible,:disabled,[disabled],.btn-disabled){--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-content))8%,var(--color-base-100))}}.btn-soft:hover:not(.btn-active,:active,:focus-visible,:disabled,[disabled],.btn-disabled){--btn-border:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.btn-soft:hover:not(.btn-active,:active,:focus-visible,:disabled,[disabled],.btn-disabled){--btn-border:color-mix(in oklab,var(--btn-color,var(--color-base-content))10%,var(--color-base-100))}}.btn-soft:hover:not(.btn-active,:active,:focus-visible,:disabled,[disabled],.btn-disabled){--btn-noise:none}}.btn-lg{--fontsize:1.125rem;--btn-p:1.25rem;--size:calc(var(--size-field,.25rem)*12)}.btn-sm{--fontsize:.75rem;--btn-p:.75rem;--size:calc(var(--size-field,.25rem)*8)}.btn-xs{--fontsize:.6875rem;--btn-p:.5rem;--size:calc(var(--size-field,.25rem)*6)}.badge-accent{--badge-color:var(--color-accent);--badge-fg:var(--color-accent-content)}.badge-info{--badge-color:var(--color-info);--badge-fg:var(--color-info-content)}.badge-primary{--badge-color:var(--color-primary);--badge-fg:var(--color-primary-content)}.badge-secondary{--badge-color:var(--color-secondary);--badge-fg:var(--color-secondary-content)}.btn-accent{--btn-color:var(--color-accent);--btn-fg:var(--color-accent-content)}.btn-error{--btn-color:var(--color-error);--btn-fg:var(--color-error-content)}.btn-info{--btn-color:var(--color-info);--btn-fg:var(--color-info-content)}.btn-neutral{--btn-color:var(--color-neutral);--btn-fg:var(--color-neutral-content)}.btn-primary{--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content)}.btn-secondary{--btn-color:var(--color-secondary);--btn-fg:var(--color-secondary-content)}.btn-success{--btn-color:var(--color-success);--btn-fg:var(--color-success-content)}.btn-warning{--btn-color:var(--color-warning);--btn-fg:var(--color-warning-content)}.radio-primary,.toggle-primary:checked,.toggle-primary[aria-checked=true]{--input-color:var(--color-primary)}@media (hover:hover){.group-hover\\:border-base-content\\/20:is(:where(.group):hover *){border-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.group-hover\\:border-base-content\\/20:is(:where(.group):hover *){border-color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.hover\\:translate-x-\\[15px\\]:hover{--tw-translate-x:15px;translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\\:rotate-\\[15deg\\]:hover{rotate:15deg}.hover\\:opacity-100:hover{opacity:1}}@media (min-width:40rem){.sm\\:inline-block{display:inline-block}.sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:48rem){.md\\:flex{display:flex}}.\\[\\&_svg\\]\\:visible svg{visibility:visible}}@keyframes rating{0%,40%{filter:brightness(1.05)contrast(1.05);scale:1.1}}@keyframes dropdown{0%{opacity:0}}@keyframes radio{0%{padding:5px}50%{padding:3px}}@keyframes toast{0%{opacity:0;scale:.9}to{opacity:1;scale:1}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}@keyframes progress{50%{background-position-x:-115%}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}`;
  dayjs.extend(localizedFormat);
  function mountApp() {
    const root = document.createElement("div");
    root.id = "tmd-root";
    document.body.append(root);
    const shadowRoot = root.attachShadow({ mode: "open" });
    shadowRoot.adoptedStyleSheets = [prepareStyles()];
    preact.render( u(MediaDownloaderApp, {}), shadowRoot);
  }
  function prepareStyles() {
    const shadowSheet = new CSSStyleSheet();
    shadowSheet.replaceSync(styles.replace(/:root/gu, ":host"));
    const globalSheet = new CSSStyleSheet();
    for (const rule of shadowSheet.cssRules) {
      if (rule instanceof CSSPropertyRule) {
        globalSheet.insertRule(rule.cssText);
      }
    }
    document.adoptedStyleSheets.push(globalSheet);
    return shadowSheet;
  }
  if (document.readyState === "loading") {
    document.addEventListener("DOMContentLoaded", mountApp);
  } else {
    mountApp();
  }

})(preact, preactSignals, preactHooks, i18next, dayjs, Dexie, FileSaver, fflate);