[
  {
    "path": ".eslintignore",
    "content": "src/components/Canvas.tsx\r\nsrc/components/ImagePicker.tsx\r\nsrc/components/Stage.tsx\r\n*.tsx"
  },
  {
    "path": ".eslintrc",
    "content": "{\n    \"extends\": [\n      \"react-app\",\n      \"eslint-config-react-app/base\"\n    ]\n  }"
  },
  {
    "path": ".gitignore",
    "content": "# Logs\r\nlogs\r\n*.log\r\nnpm-debug.log*\r\nyarn-debug.log*\r\nyarn-error.log*\r\nlerna-debug.log*\r\n\r\n# Diagnostic reports (https://nodejs.org/api/report.html)\r\nreport.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json\r\n\r\n# Runtime data\r\npids\r\n*.pid\r\n*.seed\r\n*.pid.lock\r\n\r\n# Directory for instrumented libs generated by jscoverage/JSCover\r\nlib-cov\r\n\r\n# Coverage directory used by tools like istanbul\r\ncoverage\r\n*.lcov\r\n\r\n# nyc test coverage\r\n.nyc_output\r\n\r\n# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)\r\n.grunt\r\n\r\n# Bower dependency directory (https://bower.io/)\r\nbower_components\r\n\r\n# node-waf configuration\r\n.lock-wscript\r\n\r\n# Compiled binary addons (https://nodejs.org/api/addons.html)\r\nbuild/Release\r\n\r\n# Dependency directories\r\nnode_modules/\r\njspm_packages/\r\n\r\n# TypeScript v1 declaration files\r\ntypings/\r\n\r\n# TypeScript cache\r\n*.tsbuildinfo\r\n\r\n# Optional npm cache directory\r\n.npm\r\n\r\n# Optional eslint cache\r\n.eslintcache\r\n\r\n# Microbundle cache\r\n.rpt2_cache/\r\n.rts2_cache_cjs/\r\n.rts2_cache_es/\r\n.rts2_cache_umd/\r\n\r\n# Optional REPL history\r\n.node_repl_history\r\n\r\n# Output of 'npm pack'\r\n*.tgz\r\n\r\n# Yarn Integrity file\r\n.yarn-integrity\r\n\r\n# dotenv environment variables file\r\n.env\r\n.env.test\r\n\r\n# parcel-bundler cache (https://parceljs.org/)\r\n.cache\r\n\r\n# Next.js build output\r\n.next\r\n\r\n# Nuxt.js build / generate output\r\n.nuxt\r\ndist\r\n\r\n# Gatsby files\r\n.cache/\r\n# Comment in the public line in if your project uses Gatsby and *not* Next.js\r\n# https://nextjs.org/blog/next-9-1#public-directory-support\r\n# public\r\n\r\n# vuepress build output\r\n.vuepress/dist\r\n\r\n# Serverless directories\r\n.serverless/\r\n\r\n# FuseBox cache\r\n.fusebox/\r\n\r\n# DynamoDB Local files\r\n.dynamodb/\r\n\r\n# TernJS port file\r\n.tern-port\r\n# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\r\n\r\n# dependencies\r\n/node_modules\r\n/.pnp\r\n.pnp.js\r\n\r\n# testing\r\n/coverage\r\n\r\n# production\r\n/build\r\n\r\n# misc\r\n.DS_Store\r\n.env.local\r\n.env.development.local\r\n.env.test.local\r\n.env.production.local\r\n\r\nnpm-debug.log*\r\nyarn-debug.log*\r\nyarn-error.log*\r\n"
  },
  {
    "path": "README.md",
    "content": "# Meta's Segment Anything Model (SAM) Demo Site\r\n\r\n## About\r\n\r\n<!--Image / Video annotation based on Meta's Segment Anything Model (SAM). \\-->\r\nThis repository is based on their demo website,\r\n[segment-anything.com](https://segment-anything.com).\r\n\r\n## Usage\r\n\r\nTo use this repository, clone it and install the required packages\r\nby doing:\r\n\r\n```bash\r\ngit clone https://github.com/MiscellaneousStuff/meta-sam-demo\r\ncd meta-sam-demo\r\nnpm i\r\n```\r\n\r\nThen run it like a regular react app:\r\n\r\n```bash\r\nnpm run start\r\n```\r\n\r\nTo actually use the site when it is deployed, navigate to:\r\n`http://localhost:3000/`. By default, the site re-directs to the\r\ndemo page, however, all of the original pages are included and you\r\ncan uncomment out whatever you want to run.\r\n\r\n<!--\r\n## Overview\r\n\r\nThe demo website uses two quantized models\r\n- Prompt Encoder: `interactive_module_quantized_592547_2023_03_19_sam6_long_uncertain.onnx`\r\n- Mask Decoder: `interactive_module_quantized_592547_2023_03_20_sam6_long_all_masks_extra_data_with_ious.onnx`\r\n-->\r\n\r\n# Getting Started with Create React App\r\n\r\nThis project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).\r\n\r\n## Available Scripts\r\n\r\nIn the project directory, you can run:\r\n\r\n### `npm start`\r\n\r\nRuns the app in the development mode.\\\r\nOpen [http://localhost:3000](http://localhost:3000) to view it in the browser.\r\n\r\nThe page will reload if you make edits.\\\r\nYou will also see any lint errors in the console.\r\n\r\n### `npm test`\r\n\r\nLaunches the test runner in the interactive watch mode.\\\r\nSee the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.\r\n\r\n### `npm run build`\r\n\r\nBuilds the app for production to the `build` folder.\\\r\nIt correctly bundles React in production mode and optimizes the build for the best performance.\r\n\r\nThe build is minified and the filenames include the hashes.\\\r\nYour app is ready to be deployed!\r\n\r\nSee the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.\r\n\r\n### `npm run eject`\r\n\r\n**Note: this is a one-way operation. Once you `eject`, you can’t go back!**\r\n\r\nIf you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.\r\n\r\nInstead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.\r\n\r\nYou don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.\r\n\r\n## Learn More\r\n\r\nYou can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).\r\n\r\nTo learn React, check out the [React documentation](https://reactjs.org/)."
  },
  {
    "path": "package.json",
    "content": "{\r\n  \"name\": \"meta-sam-rip\",\r\n  \"version\": \"0.1.0\",\r\n  \"private\": true,\r\n  \"dependencies\": {\r\n    \"@remix-run/router\": \"^1.5.0\",\r\n    \"@testing-library/jest-dom\": \"^5.16.5\",\r\n    \"@testing-library/react\": \"^13.4.0\",\r\n    \"@testing-library/user-event\": \"^13.5.0\",\r\n    \"@types/jest\": \"^27.5.2\",\r\n    \"@types/node\": \"^16.18.23\",\r\n    \"@types/react\": \"^18.0.33\",\r\n    \"@types/react-dom\": \"^18.0.11\",\r\n    \"attr-accept\": \"^2.2.2\",\r\n    \"copy-webpack-plugin\": \"^11.0.0\",\r\n    \"css-loader\": \"^6.7.3\",\r\n    \"file-selector\": \"^0.6.0\",\r\n    \"its-fine\": \"^1.1.0\",\r\n    \"konva\": \"^8.4.3\",\r\n    \"lz-string\": \"^1.5.0\",\r\n    \"node-sass\": \"^8.0.0\",\r\n    \"onnxruntime-common\": \"^1.14.0\",\r\n    \"onnxruntime-web\": \"^1.14.0\",\r\n    \"process\": \"^0.11.10\",\r\n    \"react\": \"^18.2.0\",\r\n    \"react-cookie\": \"^4.1.1\",\r\n    \"react-cookie-consent\": \"^8.0.1\",\r\n    \"react-daisyui\": \"^3.1.2\",\r\n    \"react-dom\": \"^18.2.0\",\r\n    \"react-dropzone\": \"^14.2.3\",\r\n    \"react-ga4\": \"^2.1.0\",\r\n    \"react-icons\": \"^4.8.0\",\r\n    \"react-konva\": \"^18.2.5\",\r\n    \"react-photo-album\": \"^2.0.3\",\r\n    \"react-reconciler\": \"^0.29.0\",\r\n    \"react-router-dom\": \"^6.10.0\",\r\n    \"react-scripts\": \"5.0.1\",\r\n    \"react-swipeable\": \"^7.0.0\",\r\n    \"sass\": \"^1.61.0\",\r\n    \"scheduler\": \"^0.23.0\",\r\n    \"style-loader\": \"^3.3.2\",\r\n    \"swipeable\": \"^1.0.5\",\r\n    \"tslib\": \"^2.5.0\",\r\n    \"typescript\": \"^4.9.5\",\r\n    \"underscore\": \"^1.13.6\",\r\n    \"web-vitals\": \"^2.1.4\"\r\n  },\r\n  \"scripts\": {\r\n    \"start\": \"react-scripts start\",\r\n    \"build\": \"react-scripts build\",\r\n    \"test\": \"react-scripts test\",\r\n    \"eject\": \"react-scripts eject\"\r\n  },\r\n  \"eslintConfig\": {\r\n    \"extends\": [\r\n      \"react-app\",\r\n      \"react-app/jest\"\r\n    ]\r\n  },\r\n  \"browserslist\": {\r\n    \"production\": [\r\n      \">0.2%\",\r\n      \"not dead\",\r\n      \"not op_mini all\"\r\n    ],\r\n    \"development\": [\r\n      \"last 1 chrome version\",\r\n      \"last 1 firefox version\",\r\n      \"last 1 safari version\"\r\n    ]\r\n  },\r\n  \"devDependencies\": {\r\n    \"@types/underscore\": \"^1.11.4\",\r\n    \"webpack-cli\": \"^5.0.1\"\r\n  }\r\n}\r\n"
  },
  {
    "path": "public/assets/manifest.json",
    "content": "{\n  \"icons\": [\n    {\n      \"src\": \"M_Favicon_16x16.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"16x16\"\n    },\n    {\n      \"src\": \"M_Favicon_32x32.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"32x32\"\n    },\n    {\n      \"src\": \"M_Favicon_192x192.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"192x192\"\n    },\n    {\n      \"src\": \"M_Favicon_512x512.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"512x512\"\n    }\n  ],\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}"
  },
  {
    "path": "public/index.html",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\" />\r\n    <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.ico\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\r\n    <meta name=\"theme-color\" content=\"#000000\" />\r\n    <meta\r\n      name=\"description\"\r\n      content=\"Web site created using create-react-app\"\r\n    />\r\n    <link rel=\"apple-touch-icon\" href=\"%PUBLIC_URL%/logo192.png\" />\r\n    <!--\r\n      manifest.json provides metadata used when your web app is installed on a\r\n      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/\r\n    -->\r\n    <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\" />\r\n    <!--\r\n      Notice the use of %PUBLIC_URL% in the tags above.\r\n      It will be replaced with the URL of the `public` folder during the build.\r\n      Only files inside the `public` folder can be referenced from the HTML.\r\n\r\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\r\n      work correctly both with client-side routing and a non-root public URL.\r\n      Learn how to configure a non-root public URL by running `npm run build`.\r\n    -->\r\n    <title>React App</title>\r\n    <style>/*\r\n      ! tailwindcss v3.2.3 | MIT License | https://tailwindcss.com\r\n      *//*\r\n      1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\r\n      2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\r\n      */\r\n      \r\n      *,\r\n      ::before,\r\n      ::after {\r\n        box-sizing: border-box; /* 1 */\r\n        border-width: 0; /* 2 */\r\n        border-style: solid; /* 2 */\r\n        border-color: #e5e7eb; /* 2 */\r\n      }\r\n      \r\n      ::before,\r\n      ::after {\r\n        --tw-content: '';\r\n      }\r\n      \r\n      /*\r\n      1. Use a consistent sensible line-height in all browsers.\r\n      2. Prevent adjustments of font size after orientation changes in iOS.\r\n      3. Use a more readable tab size.\r\n      4. Use the user's configured `sans` font-family by default.\r\n      5. Use the user's configured `sans` font-feature-settings by default.\r\n      */\r\n      \r\n      html {\r\n        line-height: 1.5; /* 1 */\r\n        -webkit-text-size-adjust: 100%; /* 2 */\r\n        -moz-tab-size: 4; /* 3 */\r\n        -o-tab-size: 4;\r\n           tab-size: 4; /* 3 */\r\n        font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; /* 4 */\r\n        font-feature-settings: normal; /* 5 */\r\n      }\r\n      \r\n      /*\r\n      1. Remove the margin in all browsers.\r\n      2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\r\n      */\r\n      \r\n      body {\r\n        margin: 0; /* 1 */\r\n        line-height: inherit; /* 2 */\r\n      }\r\n      \r\n      /*\r\n      1. Add the correct height in Firefox.\r\n      2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\r\n      3. Ensure horizontal rules are visible by default.\r\n      */\r\n      \r\n      hr {\r\n        height: 0; /* 1 */\r\n        color: inherit; /* 2 */\r\n        border-top-width: 1px; /* 3 */\r\n      }\r\n      \r\n      /*\r\n      Add the correct text decoration in Chrome, Edge, and Safari.\r\n      */\r\n      \r\n      abbr:where([title]) {\r\n        text-decoration: underline;\r\n        -webkit-text-decoration: underline dotted currentColor;\r\n                text-decoration: underline dotted currentColor;\r\n      }\r\n      \r\n      /*\r\n      Remove the default font size and weight for headings.\r\n      */\r\n      \r\n      h1,\r\n      h2,\r\n      h3,\r\n      h4,\r\n      h5,\r\n      h6 {\r\n        font-size: inherit;\r\n        font-weight: inherit;\r\n      }\r\n      \r\n      /*\r\n      Reset links to optimize for opt-in styling instead of opt-out.\r\n      */\r\n      \r\n      a {\r\n        color: inherit;\r\n        text-decoration: inherit;\r\n      }\r\n      \r\n      /*\r\n      Add the correct font weight in Edge and Safari.\r\n      */\r\n      \r\n      b,\r\n      strong {\r\n        font-weight: bolder;\r\n      }\r\n      \r\n      /*\r\n      1. Use the user's configured `mono` font family by default.\r\n      2. Correct the odd `em` font sizing in all browsers.\r\n      */\r\n      \r\n      code,\r\n      kbd,\r\n      samp,\r\n      pre {\r\n        font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\r\n        font-size: 1em; /* 2 */\r\n      }\r\n      \r\n      /*\r\n      Add the correct font size in all browsers.\r\n      */\r\n      \r\n      small {\r\n        font-size: 80%;\r\n      }\r\n      \r\n      /*\r\n      Prevent `sub` and `sup` elements from affecting the line height in all browsers.\r\n      */\r\n      \r\n      sub,\r\n      sup {\r\n        font-size: 75%;\r\n        line-height: 0;\r\n        position: relative;\r\n        vertical-align: baseline;\r\n      }\r\n      \r\n      sub {\r\n        bottom: -0.25em;\r\n      }\r\n      \r\n      sup {\r\n        top: -0.5em;\r\n      }\r\n      \r\n      /*\r\n      1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\r\n      2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\r\n      3. Remove gaps between table borders by default.\r\n      */\r\n      \r\n      table {\r\n        text-indent: 0; /* 1 */\r\n        border-color: inherit; /* 2 */\r\n        border-collapse: collapse; /* 3 */\r\n      }\r\n      \r\n      /*\r\n      1. Change the font styles in all browsers.\r\n      2. Remove the margin in Firefox and Safari.\r\n      3. Remove default padding in all browsers.\r\n      */\r\n      \r\n      button,\r\n      input,\r\n      optgroup,\r\n      select,\r\n      textarea {\r\n        font-family: inherit; /* 1 */\r\n        font-size: 100%; /* 1 */\r\n        font-weight: inherit; /* 1 */\r\n        line-height: inherit; /* 1 */\r\n        color: inherit; /* 1 */\r\n        margin: 0; /* 2 */\r\n        padding: 0; /* 3 */\r\n      }\r\n      \r\n      /*\r\n      Remove the inheritance of text transform in Edge and Firefox.\r\n      */\r\n      \r\n      button,\r\n      select {\r\n        text-transform: none;\r\n      }\r\n      \r\n      /*\r\n      1. Correct the inability to style clickable types in iOS and Safari.\r\n      2. Remove default button styles.\r\n      */\r\n      \r\n      button,\r\n      [type='button'],\r\n      [type='reset'],\r\n      [type='submit'] {\r\n        -webkit-appearance: button; /* 1 */\r\n        background-color: transparent; /* 2 */\r\n        background-image: none; /* 2 */\r\n      }\r\n      \r\n      /*\r\n      Use the modern Firefox focus style for all focusable elements.\r\n      */\r\n      \r\n      :-moz-focusring {\r\n        outline: auto;\r\n      }\r\n      \r\n      /*\r\n      Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\r\n      */\r\n      \r\n      :-moz-ui-invalid {\r\n        box-shadow: none;\r\n      }\r\n      \r\n      /*\r\n      Add the correct vertical alignment in Chrome and Firefox.\r\n      */\r\n      \r\n      progress {\r\n        vertical-align: baseline;\r\n      }\r\n      \r\n      /*\r\n      Correct the cursor style of increment and decrement buttons in Safari.\r\n      */\r\n      \r\n      ::-webkit-inner-spin-button,\r\n      ::-webkit-outer-spin-button {\r\n        height: auto;\r\n      }\r\n      \r\n      /*\r\n      1. Correct the odd appearance in Chrome and Safari.\r\n      2. Correct the outline style in Safari.\r\n      */\r\n      \r\n      [type='search'] {\r\n        -webkit-appearance: textfield; /* 1 */\r\n        outline-offset: -2px; /* 2 */\r\n      }\r\n      \r\n      /*\r\n      Remove the inner padding in Chrome and Safari on macOS.\r\n      */\r\n      \r\n      ::-webkit-search-decoration {\r\n        -webkit-appearance: none;\r\n      }\r\n      \r\n      /*\r\n      1. Correct the inability to style clickable types in iOS and Safari.\r\n      2. Change font properties to `inherit` in Safari.\r\n      */\r\n      \r\n      ::-webkit-file-upload-button {\r\n        -webkit-appearance: button; /* 1 */\r\n        font: inherit; /* 2 */\r\n      }\r\n      \r\n      /*\r\n      Add the correct display in Chrome and Safari.\r\n      */\r\n      \r\n      summary {\r\n        display: list-item;\r\n      }\r\n      \r\n      /*\r\n      Removes the default spacing and border for appropriate elements.\r\n      */\r\n      \r\n      blockquote,\r\n      dl,\r\n      dd,\r\n      h1,\r\n      h2,\r\n      h3,\r\n      h4,\r\n      h5,\r\n      h6,\r\n      hr,\r\n      figure,\r\n      p,\r\n      pre {\r\n        margin: 0;\r\n      }\r\n      \r\n      fieldset {\r\n        margin: 0;\r\n        padding: 0;\r\n      }\r\n      \r\n      legend {\r\n        padding: 0;\r\n      }\r\n      \r\n      ol,\r\n      ul,\r\n      menu {\r\n        list-style: none;\r\n        margin: 0;\r\n        padding: 0;\r\n      }\r\n      \r\n      /*\r\n      Prevent resizing textareas horizontally by default.\r\n      */\r\n      \r\n      textarea {\r\n        resize: vertical;\r\n      }\r\n      \r\n      /*\r\n      1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\r\n      2. Set the default placeholder color to the user's configured gray 400 color.\r\n      */\r\n      \r\n      input::-moz-placeholder, textarea::-moz-placeholder {\r\n        opacity: 1; /* 1 */\r\n        color: #9ca3af; /* 2 */\r\n      }\r\n      \r\n      input::placeholder,\r\n      textarea::placeholder {\r\n        opacity: 1; /* 1 */\r\n        color: #9ca3af; /* 2 */\r\n      }\r\n      \r\n      /*\r\n      Set the default cursor for buttons.\r\n      */\r\n      \r\n      button,\r\n      [role=\"button\"] {\r\n        cursor: pointer;\r\n      }\r\n      \r\n      /*\r\n      Make sure disabled buttons don't get the pointer cursor.\r\n      */\r\n      :disabled {\r\n        cursor: default;\r\n      }\r\n      \r\n      /*\r\n      1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\r\n      2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\r\n         This can trigger a poorly considered lint error in some tools but is included by design.\r\n      */\r\n      \r\n      img,\r\n      svg,\r\n      video,\r\n      canvas,\r\n      audio,\r\n      iframe,\r\n      embed,\r\n      object {\r\n        display: block; /* 1 */\r\n        vertical-align: middle; /* 2 */\r\n      }\r\n      \r\n      /*\r\n      Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\r\n      */\r\n      \r\n      img,\r\n      video {\r\n        max-width: 100%;\r\n        height: auto;\r\n      }\r\n      \r\n      /* Make elements with the HTML hidden attribute stay hidden by default */\r\n      [hidden] {\r\n        display: none;\r\n      }\r\n      \r\n      :root,\r\n      [data-theme] {\r\n        background-color: hsla(var(--b1) / 1);\r\n        background-color: hsla(var(--b1) / var(--tw-bg-opacity, 1));\r\n        color: hsla(var(--bc) / 1);\r\n        color: hsla(var(--bc) / var(--tw-text-opacity, 1));\r\n      }\r\n      \r\n      html {\r\n        -webkit-tap-highlight-color: transparent;\r\n      }\r\n      \r\n      :root {\r\n        color-scheme: light;\r\n        --pf: 213.21 100% 35.137%;\r\n        --sf: 200.87 29.114% 12.392%;\r\n        --af: 254.48 61.702% 43.137%;\r\n        --nf: 219 14.085% 22.275%;\r\n        --rounded-box: 1rem;\r\n        --rounded-btn: 0.5rem;\r\n        --rounded-badge: 1.9rem;\r\n        --animation-btn: 0.25s;\r\n        --animation-input: .2s;\r\n        --btn-text-case: uppercase;\r\n        --btn-focus-scale: 0.95;\r\n        --border-btn: 1px;\r\n        --tab-border: 1px;\r\n        --tab-radius: 0.5rem;\r\n        --p: 213.21 100% 43.922%;\r\n        --pc: 0 0% 100%;\r\n        --s: 200.87 29.114% 15.49%;\r\n        --sc: 0 0% 100%;\r\n        --a: 254.48 61.702% 53.922%;\r\n        --ac: 0 0% 100%;\r\n        --n: 219 14.085% 27.843%;\r\n        --nc: 0 0% 100%;\r\n        --b1: 0 0% 100%;\r\n        --b2: 0 0% 94.902%;\r\n        --b3: 180 1.9608% 90%;\r\n        --bc: 215 27.907% 16.863%;\r\n        --in: 180 100% 30.392%;\r\n        --inc: 0 0% 100%;\r\n        --su: 122.14 82.353% 33.333%;\r\n        --suc: 0 0% 100%;\r\n        --wa: 29.333 95.745% 53.922%;\r\n        --wac: 0 0% 100%;\r\n        --er: 350.53 90.476% 41.176%;\r\n        --erc: 0 0% 100%;\r\n      }\r\n        @font-face {\r\n          font-family: \"Optimistic Display\";\r\n          src: url(https://segment-anything.com/00b3d823558b881dce9a.woff2) format(\"woff2\"),\r\n            url(https://segment-anything.com/6c81699829fbd7f43942.woff) format(\"woff\");\r\n          font-weight: 500;\r\n        }\r\n      \r\n        @font-face {\r\n          font-family: \"Optimistic Display\";\r\n          src: url(https://segment-anything.com/bf66944526569a1510c4.woff2) format(\"woff2\"),\r\n            url(https://segment-anything.com/91e9d0e7fe8aee0cbb04.woff) format(\"woff\");\r\n          font-weight: 600;\r\n        }\r\n      \r\n        @font-face {\r\n          font-family: \"Optimistic Display\";\r\n          src: url(https://segment-anything.com/51a4a9e272be3172ab61.woff2) format(\"woff2\"),\r\n            url(https://segment-anything.com/312386eaac0e264fd6fd.woff) format(\"woff\");\r\n          font-weight: 700;\r\n        }\r\n      \r\n        @font-face {\r\n          font-family: \"Optimistic Text\";\r\n          src: url(https://segment-anything.com/2ff26b7f6d7161df3519.woff2) format(\"woff2\"),\r\n            url(https://segment-anything.com/63786953f4ea2cf026e3.woff) format(\"woff\");\r\n          font-weight: 400;\r\n        }\r\n      \r\n        @font-face {\r\n          font-family: \"Optimistic Text\";\r\n          src: url(https://segment-anything.com/ccba622cc2abfbee2cab.woff2) format(\"woff2\"),\r\n            url(https://segment-anything.com/9c43f344e5aa9b87a998.woff) format(\"woff\");\r\n          font-weight: 500;\r\n        }\r\n      \r\n        @font-face {\r\n          font-family: \"Optimistic Text\";\r\n          src: url(https://segment-anything.com/d8de14329f4431eb4efe.woff2) format(\"woff2\"),\r\n            url(https://segment-anything.com/717fd895acaeee1281f2.woff) format(\"woff\");\r\n          font-weight: 700;\r\n        }\r\n      \r\n        @font-face {\r\n          font-family: \"Optimistic Text\";\r\n          src: url(https://segment-anything.com/5c7c0c1c43def3c09c8f.woff2) format(\"woff2\"),\r\n            url(https://segment-anything.com/cc0ac0e99162ed97dd4c.woff) format(\"woff\");\r\n          font-weight: 800;\r\n        }\r\n      \r\n      *, ::before, ::after {\r\n        --tw-border-spacing-x: 0;\r\n        --tw-border-spacing-y: 0;\r\n        --tw-translate-x: 0;\r\n        --tw-translate-y: 0;\r\n        --tw-rotate: 0;\r\n        --tw-skew-x: 0;\r\n        --tw-skew-y: 0;\r\n        --tw-scale-x: 1;\r\n        --tw-scale-y: 1;\r\n        --tw-pan-x:  ;\r\n        --tw-pan-y:  ;\r\n        --tw-pinch-zoom:  ;\r\n        --tw-scroll-snap-strictness: proximity;\r\n        --tw-ordinal:  ;\r\n        --tw-slashed-zero:  ;\r\n        --tw-numeric-figure:  ;\r\n        --tw-numeric-spacing:  ;\r\n        --tw-numeric-fraction:  ;\r\n        --tw-ring-inset:  ;\r\n        --tw-ring-offset-width: 0px;\r\n        --tw-ring-offset-color: #fff;\r\n        --tw-ring-color: rgba(59, 130, 246, 0.5);\r\n        --tw-ring-offset-shadow: 0 0 rgba(0,0,0,0);\r\n        --tw-ring-shadow: 0 0 rgba(0,0,0,0);\r\n        --tw-shadow: 0 0 rgba(0,0,0,0);\r\n        --tw-shadow-colored: 0 0 rgba(0,0,0,0);\r\n        --tw-blur:  ;\r\n        --tw-brightness:  ;\r\n        --tw-contrast:  ;\r\n        --tw-grayscale:  ;\r\n        --tw-hue-rotate:  ;\r\n        --tw-invert:  ;\r\n        --tw-saturate:  ;\r\n        --tw-sepia:  ;\r\n        --tw-drop-shadow:  ;\r\n        --tw-backdrop-blur:  ;\r\n        --tw-backdrop-brightness:  ;\r\n        --tw-backdrop-contrast:  ;\r\n        --tw-backdrop-grayscale:  ;\r\n        --tw-backdrop-hue-rotate:  ;\r\n        --tw-backdrop-invert:  ;\r\n        --tw-backdrop-opacity:  ;\r\n        --tw-backdrop-saturate:  ;\r\n        --tw-backdrop-sepia:  ;\r\n      }\r\n      \r\n      ::backdrop {\r\n        --tw-border-spacing-x: 0;\r\n        --tw-border-spacing-y: 0;\r\n        --tw-translate-x: 0;\r\n        --tw-translate-y: 0;\r\n        --tw-rotate: 0;\r\n        --tw-skew-x: 0;\r\n        --tw-skew-y: 0;\r\n        --tw-scale-x: 1;\r\n        --tw-scale-y: 1;\r\n        --tw-pan-x:  ;\r\n        --tw-pan-y:  ;\r\n        --tw-pinch-zoom:  ;\r\n        --tw-scroll-snap-strictness: proximity;\r\n        --tw-ordinal:  ;\r\n        --tw-slashed-zero:  ;\r\n        --tw-numeric-figure:  ;\r\n        --tw-numeric-spacing:  ;\r\n        --tw-numeric-fraction:  ;\r\n        --tw-ring-inset:  ;\r\n        --tw-ring-offset-width: 0px;\r\n        --tw-ring-offset-color: #fff;\r\n        --tw-ring-color: rgba(59, 130, 246, 0.5);\r\n        --tw-ring-offset-shadow: 0 0 rgba(0,0,0,0);\r\n        --tw-ring-shadow: 0 0 rgba(0,0,0,0);\r\n        --tw-shadow: 0 0 rgba(0,0,0,0);\r\n        --tw-shadow-colored: 0 0 rgba(0,0,0,0);\r\n        --tw-blur:  ;\r\n        --tw-brightness:  ;\r\n        --tw-contrast:  ;\r\n        --tw-grayscale:  ;\r\n        --tw-hue-rotate:  ;\r\n        --tw-invert:  ;\r\n        --tw-saturate:  ;\r\n        --tw-sepia:  ;\r\n        --tw-drop-shadow:  ;\r\n        --tw-backdrop-blur:  ;\r\n        --tw-backdrop-brightness:  ;\r\n        --tw-backdrop-contrast:  ;\r\n        --tw-backdrop-grayscale:  ;\r\n        --tw-backdrop-hue-rotate:  ;\r\n        --tw-backdrop-invert:  ;\r\n        --tw-backdrop-opacity:  ;\r\n        --tw-backdrop-saturate:  ;\r\n        --tw-backdrop-sepia:  ;\r\n      }\r\n      .container {\r\n        width: 100%;\r\n      }\r\n      @media (min-width: 640px) {\r\n      \r\n        .container {\r\n          max-width: 640px;\r\n        }\r\n      }\r\n      @media (min-width: 768px) {\r\n      \r\n        .container {\r\n          max-width: 768px;\r\n        }\r\n      }\r\n      @media (min-width: 1024px) {\r\n      \r\n        .container {\r\n          max-width: 1024px;\r\n        }\r\n      }\r\n      @media (min-width: 1280px) {\r\n      \r\n        .container {\r\n          max-width: 1280px;\r\n        }\r\n      }\r\n      @media (min-width: 1536px) {\r\n      \r\n        .container {\r\n          max-width: 1536px;\r\n        }\r\n      }\r\n      .prose {\r\n        color: var(--tw-prose-body);\r\n        max-width: 100%;\r\n      }\r\n      .prose :where([class~=\"lead\"]):not(:where([class~=\"not-prose\"] *)) {\r\n        color: var(--tw-prose-lead);\r\n        font-size: 1.25em;\r\n        line-height: 1.6;\r\n        margin-top: 1.2em;\r\n        margin-bottom: 1.2em;\r\n      }\r\n      .prose :where(a):not(:where([class~=\"not-prose\"] *)) {\r\n        color: var(--tw-prose-links);\r\n        text-decoration: none;\r\n        font-weight: 500;\r\n      }\r\n      .prose :where(strong):not(:where([class~=\"not-prose\"] *)) {\r\n        color: var(--tw-prose-bold);\r\n        font-weight: 600;\r\n      }\r\n      .prose :where(a strong):not(:where([class~=\"not-prose\"] *)) {\r\n        color: inherit;\r\n      }\r\n      .prose :where(blockquote strong):not(:where([class~=\"not-prose\"] *)) {\r\n        color: inherit;\r\n      }\r\n      .prose :where(thead th strong):not(:where([class~=\"not-prose\"] *)) {\r\n        color: inherit;\r\n      }\r\n      .prose :where(ol):not(:where([class~=\"not-prose\"] *)) {\r\n        list-style-type: decimal;\r\n        margin-top: 1.25em;\r\n        margin-bottom: 1.25em;\r\n        padding-left: 1.625em;\r\n      }\r\n      .prose :where(ol[type=\"A\"]):not(:where([class~=\"not-prose\"] *)) {\r\n        list-style-type: upper-alpha;\r\n      }\r\n      .prose :where(ol[type=\"a\"]):not(:where([class~=\"not-prose\"] *)) {\r\n        list-style-type: lower-alpha;\r\n      }\r\n      .prose :where(ol[type=\"A\" s]):not(:where([class~=\"not-prose\"] *)) {\r\n        list-style-type: upper-alpha;\r\n      }\r\n      .prose :where(ol[type=\"a\" s]):not(:where([class~=\"not-prose\"] *)) {\r\n        list-style-type: lower-alpha;\r\n      }\r\n      .prose :where(ol[type=\"I\"]):not(:where([class~=\"not-prose\"] *)) {\r\n        list-style-type: upper-roman;\r\n      }\r\n      .prose :where(ol[type=\"i\"]):not(:where([class~=\"not-prose\"] *)) {\r\n        list-style-type: lower-roman;\r\n      }\r\n      .prose :where(ol[type=\"I\" s]):not(:where([class~=\"not-prose\"] *)) {\r\n        list-style-type: upper-roman;\r\n      }\r\n      .prose :where(ol[type=\"i\" s]):not(:where([class~=\"not-prose\"] *)) {\r\n        list-style-type: lower-roman;\r\n      }\r\n      .prose :where(ol[type=\"1\"]):not(:where([class~=\"not-prose\"] *)) {\r\n        list-style-type: decimal;\r\n      }\r\n      .prose :where(ul):not(:where([class~=\"not-prose\"] *)) {\r\n        list-style-type: disc;\r\n        margin-top: 1.25em;\r\n        margin-bottom: 1.25em;\r\n        padding-left: 1.625em;\r\n      }\r\n      .prose :where(ol > li):not(:where([class~=\"not-prose\"] *))::marker {\r\n        font-weight: 400;\r\n        color: var(--tw-prose-counters);\r\n      }\r\n      .prose :where(ul > li):not(:where([class~=\"not-prose\"] *))::marker {\r\n        color: var(--tw-prose-bullets);\r\n      }\r\n      .prose :where(hr):not(:where([class~=\"not-prose\"] *)) {\r\n        border-color: var(--tw-prose-hr);\r\n        border-top-width: 1px;\r\n        margin-top: 3em;\r\n        margin-bottom: 3em;\r\n      }\r\n      .prose :where(blockquote):not(:where([class~=\"not-prose\"] *)) {\r\n        font-weight: 500;\r\n        font-style: italic;\r\n        color: var(--tw-prose-quotes);\r\n        border-left-width: 0.25rem;\r\n        border-left-color: var(--tw-prose-quote-borders);\r\n        quotes: \"\\201C\"\"\\201D\"\"\\2018\"\"\\2019\";\r\n        margin-top: 1.6em;\r\n        margin-bottom: 1.6em;\r\n        padding-left: 1em;\r\n      }\r\n      .prose :where(blockquote p:first-of-type):not(:where([class~=\"not-prose\"] *))::before {\r\n        content: open-quote;\r\n      }\r\n      .prose :where(blockquote p:last-of-type):not(:where([class~=\"not-prose\"] *))::after {\r\n        content: close-quote;\r\n      }\r\n      .prose :where(h1):not(:where([class~=\"not-prose\"] *)) {\r\n        color: var(--tw-prose-headings);\r\n        font-weight: 800;\r\n        font-size: 2.25em;\r\n        margin-top: 0;\r\n        margin-bottom: 0.8888889em;\r\n        line-height: 1.1111111;\r\n      }\r\n      .prose :where(h1 strong):not(:where([class~=\"not-prose\"] *)) {\r\n        font-weight: 900;\r\n        color: inherit;\r\n      }\r\n      .prose :where(h2):not(:where([class~=\"not-prose\"] *)) {\r\n        color: var(--tw-prose-headings);\r\n        font-weight: 700;\r\n        font-size: 1.5em;\r\n        margin-top: 2em;\r\n        margin-bottom: 1em;\r\n        line-height: 1.3333333;\r\n      }\r\n      .prose :where(h2 strong):not(:where([class~=\"not-prose\"] *)) {\r\n        font-weight: 800;\r\n        color: inherit;\r\n      }\r\n      .prose :where(h3):not(:where([class~=\"not-prose\"] *)) {\r\n        color: var(--tw-prose-headings);\r\n        font-weight: 600;\r\n        font-size: 1.25em;\r\n        margin-top: 1.6em;\r\n        margin-bottom: 0.6em;\r\n        line-height: 1.6;\r\n      }\r\n      .prose :where(h3 strong):not(:where([class~=\"not-prose\"] *)) {\r\n        font-weight: 700;\r\n        color: inherit;\r\n      }\r\n      .prose :where(h4):not(:where([class~=\"not-prose\"] *)) {\r\n        color: var(--tw-prose-headings);\r\n        font-weight: 600;\r\n        margin-top: 1.5em;\r\n        margin-bottom: 0.5em;\r\n        line-height: 1.5;\r\n      }\r\n      .prose :where(h4 strong):not(:where([class~=\"not-prose\"] *)) {\r\n        font-weight: 700;\r\n        color: inherit;\r\n      }\r\n      .prose :where(img):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 2em;\r\n        margin-bottom: 2em;\r\n      }\r\n      .prose :where(figure > *):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0;\r\n        margin-bottom: 0;\r\n      }\r\n      .prose :where(figcaption):not(:where([class~=\"not-prose\"] *)) {\r\n        color: var(--tw-prose-captions);\r\n        font-size: 0.875em;\r\n        line-height: 1.4285714;\r\n        margin-top: 0.8571429em;\r\n      }\r\n      .prose :where(code):not(:where([class~=\"not-prose\"] *)) {\r\n        color: var(--tw-prose-code);\r\n        font-weight: 600;\r\n        font-size: 0.875em;\r\n      }\r\n      .prose :where(code):not(:where([class~=\"not-prose\"] *))::before {\r\n        content: \"`\";\r\n      }\r\n      .prose :where(code):not(:where([class~=\"not-prose\"] *))::after {\r\n        content: \"`\";\r\n      }\r\n      .prose :where(a code):not(:where([class~=\"not-prose\"] *)) {\r\n        color: inherit;\r\n      }\r\n      .prose :where(h1 code):not(:where([class~=\"not-prose\"] *)) {\r\n        color: inherit;\r\n      }\r\n      .prose :where(h2 code):not(:where([class~=\"not-prose\"] *)) {\r\n        color: inherit;\r\n        font-size: 0.875em;\r\n      }\r\n      .prose :where(h3 code):not(:where([class~=\"not-prose\"] *)) {\r\n        color: inherit;\r\n        font-size: 0.9em;\r\n      }\r\n      .prose :where(h4 code):not(:where([class~=\"not-prose\"] *)) {\r\n        color: inherit;\r\n      }\r\n      .prose :where(blockquote code):not(:where([class~=\"not-prose\"] *)) {\r\n        color: inherit;\r\n      }\r\n      .prose :where(thead th code):not(:where([class~=\"not-prose\"] *)) {\r\n        color: inherit;\r\n      }\r\n      .prose :where(pre):not(:where([class~=\"not-prose\"] *)) {\r\n        color: var(--tw-prose-pre-code);\r\n        background-color: var(--tw-prose-pre-bg);\r\n        overflow-x: auto;\r\n        font-weight: 400;\r\n        font-size: 0.875em;\r\n        line-height: 1.7142857;\r\n        margin-top: 1.7142857em;\r\n        margin-bottom: 1.7142857em;\r\n        border-radius: 0.375rem;\r\n        padding-top: 0.8571429em;\r\n        padding-right: 1.1428571em;\r\n        padding-bottom: 0.8571429em;\r\n        padding-left: 1.1428571em;\r\n      }\r\n      .prose :where(pre code):not(:where([class~=\"not-prose\"] *)) {\r\n        background-color: transparent;\r\n        border-width: 0;\r\n        border-radius: 0;\r\n        padding: 0;\r\n        font-weight: inherit;\r\n        color: inherit;\r\n        font-size: inherit;\r\n        font-family: inherit;\r\n        line-height: inherit;\r\n      }\r\n      .prose :where(pre code):not(:where([class~=\"not-prose\"] *))::before {\r\n        content: none;\r\n      }\r\n      .prose :where(pre code):not(:where([class~=\"not-prose\"] *))::after {\r\n        content: none;\r\n      }\r\n      .prose :where(table):not(:where([class~=\"not-prose\"] *)) {\r\n        width: 100%;\r\n        table-layout: auto;\r\n        text-align: left;\r\n        margin-top: 2em;\r\n        margin-bottom: 2em;\r\n        font-size: 0.875em;\r\n        line-height: 1.7142857;\r\n      }\r\n      .prose :where(thead):not(:where([class~=\"not-prose\"] *)) {\r\n        border-bottom-width: 1px;\r\n        border-bottom-color: var(--tw-prose-th-borders);\r\n      }\r\n      .prose :where(thead th):not(:where([class~=\"not-prose\"] *)) {\r\n        color: var(--tw-prose-headings);\r\n        font-weight: 600;\r\n        vertical-align: bottom;\r\n        padding-right: 0.5714286em;\r\n        padding-bottom: 0.5714286em;\r\n        padding-left: 0.5714286em;\r\n      }\r\n      .prose :where(tbody tr):not(:where([class~=\"not-prose\"] *)) {\r\n        border-bottom-width: 1px;\r\n        border-bottom-color: var(--tw-prose-td-borders);\r\n      }\r\n      .prose :where(tbody tr:last-child):not(:where([class~=\"not-prose\"] *)) {\r\n        border-bottom-width: 0;\r\n      }\r\n      .prose :where(tbody td):not(:where([class~=\"not-prose\"] *)) {\r\n        vertical-align: baseline;\r\n      }\r\n      .prose :where(tfoot):not(:where([class~=\"not-prose\"] *)) {\r\n        border-top-width: 1px;\r\n        border-top-color: var(--tw-prose-th-borders);\r\n      }\r\n      .prose :where(tfoot td):not(:where([class~=\"not-prose\"] *)) {\r\n        vertical-align: top;\r\n      }\r\n      .prose {\r\n        --tw-prose-body: #374151;\r\n        --tw-prose-headings: #111827;\r\n        --tw-prose-lead: #4b5563;\r\n        --tw-prose-links: #111827;\r\n        --tw-prose-bold: #111827;\r\n        --tw-prose-counters: #6b7280;\r\n        --tw-prose-bullets: #d1d5db;\r\n        --tw-prose-hr: #e5e7eb;\r\n        --tw-prose-quotes: #111827;\r\n        --tw-prose-quote-borders: #e5e7eb;\r\n        --tw-prose-captions: #6b7280;\r\n        --tw-prose-code: #111827;\r\n        --tw-prose-pre-code: #e5e7eb;\r\n        --tw-prose-pre-bg: #1f2937;\r\n        --tw-prose-th-borders: #d1d5db;\r\n        --tw-prose-td-borders: #e5e7eb;\r\n        --tw-prose-invert-body: #d1d5db;\r\n        --tw-prose-invert-headings: #fff;\r\n        --tw-prose-invert-lead: #9ca3af;\r\n        --tw-prose-invert-links: #fff;\r\n        --tw-prose-invert-bold: #fff;\r\n        --tw-prose-invert-counters: #9ca3af;\r\n        --tw-prose-invert-bullets: #4b5563;\r\n        --tw-prose-invert-hr: #374151;\r\n        --tw-prose-invert-quotes: #f3f4f6;\r\n        --tw-prose-invert-quote-borders: #374151;\r\n        --tw-prose-invert-captions: #9ca3af;\r\n        --tw-prose-invert-code: #fff;\r\n        --tw-prose-invert-pre-code: #d1d5db;\r\n        --tw-prose-invert-pre-bg: rgba(0, 0, 0, 0.5);\r\n        --tw-prose-invert-th-borders: #4b5563;\r\n        --tw-prose-invert-td-borders: #374151;\r\n        font-size: 1rem;\r\n        line-height: 1.75;\r\n      }\r\n      .prose :where(p):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.25em;\r\n        margin-bottom: 1.25em;\r\n      }\r\n      .prose :where(video):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 2em;\r\n        margin-bottom: 2em;\r\n      }\r\n      .prose :where(figure):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 2em;\r\n        margin-bottom: 2em;\r\n      }\r\n      .prose :where(li):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0.5em;\r\n        margin-bottom: 0.5em;\r\n      }\r\n      .prose :where(ol > li):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-left: 0.375em;\r\n      }\r\n      .prose :where(ul > li):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-left: 0.375em;\r\n      }\r\n      .prose :where(.prose > ul > li p):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0.75em;\r\n        margin-bottom: 0.75em;\r\n      }\r\n      .prose :where(.prose > ul > li > *:first-child):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.25em;\r\n      }\r\n      .prose :where(.prose > ul > li > *:last-child):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-bottom: 1.25em;\r\n      }\r\n      .prose :where(.prose > ol > li > *:first-child):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.25em;\r\n      }\r\n      .prose :where(.prose > ol > li > *:last-child):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-bottom: 1.25em;\r\n      }\r\n      .prose :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0.75em;\r\n        margin-bottom: 0.75em;\r\n      }\r\n      .prose :where(hr + *):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0;\r\n      }\r\n      .prose :where(h2 + *):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0;\r\n      }\r\n      .prose :where(h3 + *):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0;\r\n      }\r\n      .prose :where(h4 + *):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0;\r\n      }\r\n      .prose :where(thead th:first-child):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-left: 0;\r\n      }\r\n      .prose :where(thead th:last-child):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-right: 0;\r\n      }\r\n      .prose :where(tbody td, tfoot td):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-top: 0.5714286em;\r\n        padding-right: 0.5714286em;\r\n        padding-bottom: 0.5714286em;\r\n        padding-left: 0.5714286em;\r\n      }\r\n      .prose :where(tbody td:first-child, tfoot td:first-child):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-left: 0;\r\n      }\r\n      .prose :where(tbody td:last-child, tfoot td:last-child):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-right: 0;\r\n      }\r\n      .prose :where(.prose > :first-child):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0;\r\n      }\r\n      .prose :where(.prose > :last-child):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-bottom: 0;\r\n      }\r\n      .prose-sm {\r\n        font-size: 0.875rem;\r\n        line-height: 1.7142857;\r\n      }\r\n      .prose-sm :where(p):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.1428571em;\r\n        margin-bottom: 1.1428571em;\r\n      }\r\n      .prose-sm :where([class~=\"lead\"]):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 1.2857143em;\r\n        line-height: 1.5555556;\r\n        margin-top: 0.8888889em;\r\n        margin-bottom: 0.8888889em;\r\n      }\r\n      .prose-sm :where(blockquote):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.3333333em;\r\n        margin-bottom: 1.3333333em;\r\n        padding-left: 1.1111111em;\r\n      }\r\n      .prose-sm :where(h1):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 2.1428571em;\r\n        margin-top: 0;\r\n        margin-bottom: 0.8em;\r\n        line-height: 1.2;\r\n      }\r\n      .prose-sm :where(h2):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 1.4285714em;\r\n        margin-top: 1.6em;\r\n        margin-bottom: 0.8em;\r\n        line-height: 1.4;\r\n      }\r\n      .prose-sm :where(h3):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 1.2857143em;\r\n        margin-top: 1.5555556em;\r\n        margin-bottom: 0.4444444em;\r\n        line-height: 1.5555556;\r\n      }\r\n      .prose-sm :where(h4):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.4285714em;\r\n        margin-bottom: 0.5714286em;\r\n        line-height: 1.4285714;\r\n      }\r\n      .prose-sm :where(img):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.7142857em;\r\n        margin-bottom: 1.7142857em;\r\n      }\r\n      .prose-sm :where(video):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.7142857em;\r\n        margin-bottom: 1.7142857em;\r\n      }\r\n      .prose-sm :where(figure):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.7142857em;\r\n        margin-bottom: 1.7142857em;\r\n      }\r\n      .prose-sm :where(figure > *):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0;\r\n        margin-bottom: 0;\r\n      }\r\n      .prose-sm :where(figcaption):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 0.8571429em;\r\n        line-height: 1.3333333;\r\n        margin-top: 0.6666667em;\r\n      }\r\n      .prose-sm :where(code):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 0.8571429em;\r\n      }\r\n      .prose-sm :where(h2 code):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 0.9em;\r\n      }\r\n      .prose-sm :where(h3 code):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 0.8888889em;\r\n      }\r\n      .prose-sm :where(pre):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 0.8571429em;\r\n        line-height: 1.6666667;\r\n        margin-top: 1.6666667em;\r\n        margin-bottom: 1.6666667em;\r\n        border-radius: 0.25rem;\r\n        padding-top: 0.6666667em;\r\n        padding-right: 1em;\r\n        padding-bottom: 0.6666667em;\r\n        padding-left: 1em;\r\n      }\r\n      .prose-sm :where(ol):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.1428571em;\r\n        margin-bottom: 1.1428571em;\r\n        padding-left: 1.5714286em;\r\n      }\r\n      .prose-sm :where(ul):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.1428571em;\r\n        margin-bottom: 1.1428571em;\r\n        padding-left: 1.5714286em;\r\n      }\r\n      .prose-sm :where(li):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0.2857143em;\r\n        margin-bottom: 0.2857143em;\r\n      }\r\n      .prose-sm :where(ol > li):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-left: 0.4285714em;\r\n      }\r\n      .prose-sm :where(ul > li):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-left: 0.4285714em;\r\n      }\r\n      .prose-sm :where(.prose-sm > ul > li p):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0.5714286em;\r\n        margin-bottom: 0.5714286em;\r\n      }\r\n      .prose-sm :where(.prose-sm > ul > li > *:first-child):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.1428571em;\r\n      }\r\n      .prose-sm :where(.prose-sm > ul > li > *:last-child):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-bottom: 1.1428571em;\r\n      }\r\n      .prose-sm :where(.prose-sm > ol > li > *:first-child):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.1428571em;\r\n      }\r\n      .prose-sm :where(.prose-sm > ol > li > *:last-child):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-bottom: 1.1428571em;\r\n      }\r\n      .prose-sm :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0.5714286em;\r\n        margin-bottom: 0.5714286em;\r\n      }\r\n      .prose-sm :where(hr):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 2.8571429em;\r\n        margin-bottom: 2.8571429em;\r\n      }\r\n      .prose-sm :where(hr + *):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0;\r\n      }\r\n      .prose-sm :where(h2 + *):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0;\r\n      }\r\n      .prose-sm :where(h3 + *):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0;\r\n      }\r\n      .prose-sm :where(h4 + *):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0;\r\n      }\r\n      .prose-sm :where(table):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 0.8571429em;\r\n        line-height: 1.5;\r\n      }\r\n      .prose-sm :where(thead th):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-right: 1em;\r\n        padding-bottom: 0.6666667em;\r\n        padding-left: 1em;\r\n      }\r\n      .prose-sm :where(thead th:first-child):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-left: 0;\r\n      }\r\n      .prose-sm :where(thead th:last-child):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-right: 0;\r\n      }\r\n      .prose-sm :where(tbody td, tfoot td):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-top: 0.6666667em;\r\n        padding-right: 1em;\r\n        padding-bottom: 0.6666667em;\r\n        padding-left: 1em;\r\n      }\r\n      .prose-sm :where(tbody td:first-child, tfoot td:first-child):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-left: 0;\r\n      }\r\n      .prose-sm :where(tbody td:last-child, tfoot td:last-child):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-right: 0;\r\n      }\r\n      .prose-sm :where(.prose-sm > :first-child):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0;\r\n      }\r\n      .prose-sm :where(.prose-sm > :last-child):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-bottom: 0;\r\n      }\r\n      .prose-lg {\r\n        font-size: 1.125rem;\r\n        line-height: 1.7777778;\r\n      }\r\n      .prose-lg :where(p):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.3333333em;\r\n        margin-bottom: 1.3333333em;\r\n      }\r\n      .prose-lg :where([class~=\"lead\"]):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 1.2222222em;\r\n        line-height: 1.4545455;\r\n        margin-top: 1.0909091em;\r\n        margin-bottom: 1.0909091em;\r\n      }\r\n      .prose-lg :where(blockquote):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.6666667em;\r\n        margin-bottom: 1.6666667em;\r\n        padding-left: 1em;\r\n      }\r\n      .prose-lg :where(h1):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 2.6666667em;\r\n        margin-top: 0;\r\n        margin-bottom: 0.8333333em;\r\n        line-height: 1;\r\n      }\r\n      .prose-lg :where(h2):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 1.6666667em;\r\n        margin-top: 1.8666667em;\r\n        margin-bottom: 1.0666667em;\r\n        line-height: 1.3333333;\r\n      }\r\n      .prose-lg :where(h3):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 1.3333333em;\r\n        margin-top: 1.6666667em;\r\n        margin-bottom: 0.6666667em;\r\n        line-height: 1.5;\r\n      }\r\n      .prose-lg :where(h4):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.7777778em;\r\n        margin-bottom: 0.4444444em;\r\n        line-height: 1.5555556;\r\n      }\r\n      .prose-lg :where(img):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.7777778em;\r\n        margin-bottom: 1.7777778em;\r\n      }\r\n      .prose-lg :where(video):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.7777778em;\r\n        margin-bottom: 1.7777778em;\r\n      }\r\n      .prose-lg :where(figure):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.7777778em;\r\n        margin-bottom: 1.7777778em;\r\n      }\r\n      .prose-lg :where(figure > *):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0;\r\n        margin-bottom: 0;\r\n      }\r\n      .prose-lg :where(figcaption):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 0.8888889em;\r\n        line-height: 1.5;\r\n        margin-top: 1em;\r\n      }\r\n      .prose-lg :where(code):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 0.8888889em;\r\n      }\r\n      .prose-lg :where(h2 code):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 0.8666667em;\r\n      }\r\n      .prose-lg :where(h3 code):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 0.875em;\r\n      }\r\n      .prose-lg :where(pre):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 0.8888889em;\r\n        line-height: 1.75;\r\n        margin-top: 2em;\r\n        margin-bottom: 2em;\r\n        border-radius: 0.375rem;\r\n        padding-top: 1em;\r\n        padding-right: 1.5em;\r\n        padding-bottom: 1em;\r\n        padding-left: 1.5em;\r\n      }\r\n      .prose-lg :where(ol):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.3333333em;\r\n        margin-bottom: 1.3333333em;\r\n        padding-left: 1.5555556em;\r\n      }\r\n      .prose-lg :where(ul):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.3333333em;\r\n        margin-bottom: 1.3333333em;\r\n        padding-left: 1.5555556em;\r\n      }\r\n      .prose-lg :where(li):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0.6666667em;\r\n        margin-bottom: 0.6666667em;\r\n      }\r\n      .prose-lg :where(ol > li):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-left: 0.4444444em;\r\n      }\r\n      .prose-lg :where(ul > li):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-left: 0.4444444em;\r\n      }\r\n      .prose-lg :where(.prose-lg > ul > li p):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0.8888889em;\r\n        margin-bottom: 0.8888889em;\r\n      }\r\n      .prose-lg :where(.prose-lg > ul > li > *:first-child):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.3333333em;\r\n      }\r\n      .prose-lg :where(.prose-lg > ul > li > *:last-child):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-bottom: 1.3333333em;\r\n      }\r\n      .prose-lg :where(.prose-lg > ol > li > *:first-child):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 1.3333333em;\r\n      }\r\n      .prose-lg :where(.prose-lg > ol > li > *:last-child):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-bottom: 1.3333333em;\r\n      }\r\n      .prose-lg :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0.8888889em;\r\n        margin-bottom: 0.8888889em;\r\n      }\r\n      .prose-lg :where(hr):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 3.1111111em;\r\n        margin-bottom: 3.1111111em;\r\n      }\r\n      .prose-lg :where(hr + *):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0;\r\n      }\r\n      .prose-lg :where(h2 + *):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0;\r\n      }\r\n      .prose-lg :where(h3 + *):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0;\r\n      }\r\n      .prose-lg :where(h4 + *):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0;\r\n      }\r\n      .prose-lg :where(table):not(:where([class~=\"not-prose\"] *)) {\r\n        font-size: 0.8888889em;\r\n        line-height: 1.5;\r\n      }\r\n      .prose-lg :where(thead th):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-right: 0.75em;\r\n        padding-bottom: 0.75em;\r\n        padding-left: 0.75em;\r\n      }\r\n      .prose-lg :where(thead th:first-child):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-left: 0;\r\n      }\r\n      .prose-lg :where(thead th:last-child):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-right: 0;\r\n      }\r\n      .prose-lg :where(tbody td, tfoot td):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-top: 0.75em;\r\n        padding-right: 0.75em;\r\n        padding-bottom: 0.75em;\r\n        padding-left: 0.75em;\r\n      }\r\n      .prose-lg :where(tbody td:first-child, tfoot td:first-child):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-left: 0;\r\n      }\r\n      .prose-lg :where(tbody td:last-child, tfoot td:last-child):not(:where([class~=\"not-prose\"] *)) {\r\n        padding-right: 0;\r\n      }\r\n      .prose-lg :where(.prose-lg > :first-child):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-top: 0;\r\n      }\r\n      .prose-lg :where(.prose-lg > :last-child):not(:where([class~=\"not-prose\"] *)) {\r\n        margin-bottom: 0;\r\n      }\r\n      .alert {\r\n        display: flex;\r\n        width: 100%;\r\n        flex-direction: column;\r\n        align-items: center;\r\n        justify-content: space-between;\r\n        gap: 1rem;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--b2, var(--b1)) / var(--tw-bg-opacity));\r\n        padding: 1rem;\r\n        border-radius: 1rem;\r\n        border-radius: var(--rounded-box, 1rem);\r\n      }\r\n      .alert > :not([hidden]) ~ :not([hidden]) {\r\n        --tw-space-y-reverse: 0;\r\n        margin-top: calc(0.5rem * (1 - var(--tw-space-y-reverse)));\r\n        margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\r\n        margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\r\n      }\r\n      @media (min-width: 768px) {\r\n      \r\n        .alert {\r\n          flex-direction: row;\r\n        }\r\n      \r\n        .alert > :not([hidden]) ~ :not([hidden]) {\r\n          --tw-space-y-reverse: 0;\r\n          margin-top: calc(0px * (1 - var(--tw-space-y-reverse)));\r\n          margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));\r\n          margin-bottom: calc(0px * var(--tw-space-y-reverse));\r\n        }\r\n      }\r\n      .alert > :where(*) {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 0.5rem;\r\n      }\r\n      .artboard {\r\n        width: 100%;\r\n      }\r\n      .avatar {\r\n        position: relative;\r\n        display: inline-flex;\r\n      }\r\n      .avatar > div {\r\n        display: block;\r\n        aspect-ratio: 1 / 1;\r\n        overflow: hidden;\r\n      }\r\n      .avatar img {\r\n        height: 100%;\r\n        width: 100%;\r\n        -o-object-fit: cover;\r\n           object-fit: cover;\r\n      }\r\n      .avatar.placeholder > div {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n      }\r\n      .badge {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\r\n        transition-duration: 200ms;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n        height: 1.25rem;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n        width: -moz-fit-content;\r\n        width: fit-content;\r\n        padding-left: 0.563rem;\r\n        padding-right: 0.563rem;\r\n        border-width: 1px;\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--n) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        border-radius: 1.9rem;\r\n        border-radius: var(--rounded-badge, 1.9rem);\r\n      }\r\n      .btm-nav {\r\n        position: fixed;\r\n        bottom: 0px;\r\n        left: 0px;\r\n        right: 0px;\r\n        display: flex;\r\n        width: 100%;\r\n        flex-direction: row;\r\n        align-items: center;\r\n        justify-content: space-around;\r\n        padding-bottom: env(safe-area-inset-bottom);\r\n        height: 4rem;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n        color: currentColor;\r\n      }\r\n      .btm-nav>* {\r\n        position: relative;\r\n        display: flex;\r\n        height: 100%;\r\n        flex-basis: 100%;\r\n        cursor: pointer;\r\n        flex-direction: column;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 0.25rem;\r\n        border-color: currentColor;\r\n      }\r\n      .breadcrumbs {\r\n        max-width: 100%;\r\n        overflow-x: auto;\r\n        padding-top: 0.5rem;\r\n        padding-bottom: 0.5rem;\r\n      }\r\n      .breadcrumbs > ul,.breadcrumbs > ol {\r\n        display: flex;\r\n        align-items: center;\r\n        white-space: nowrap;\r\n        min-height: -moz-min-content;\r\n        min-height: min-content;\r\n      }\r\n      .breadcrumbs > ul > li, .breadcrumbs > ol > li {\r\n        display: flex;\r\n        align-items: center;\r\n      }\r\n      .breadcrumbs > ul > li > a, .breadcrumbs > ol > li > a {\r\n        display: flex;\r\n        cursor: pointer;\r\n        align-items: center;\r\n      }\r\n      .breadcrumbs > ul > li > a:hover, .breadcrumbs > ol > li > a:hover {\r\n        text-decoration-line: underline;\r\n      }\r\n      .btn {\r\n        display: inline-flex;\r\n        flex-shrink: 0;\r\n        cursor: pointer;\r\n        -webkit-user-select: none;\r\n           -moz-user-select: none;\r\n                user-select: none;\r\n        flex-wrap: wrap;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-color: transparent;\r\n        border-color: hsl(var(--n) / var(--tw-border-opacity));\r\n        text-align: center;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\r\n        transition-duration: 200ms;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n        border-radius: 0.5rem;\r\n        border-radius: var(--rounded-btn, 0.5rem);\r\n        height: 3rem;\r\n        padding-left: 1rem;\r\n        padding-right: 1rem;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n        line-height: 1em;\r\n        min-height: 3rem;\r\n        font-weight: 600;\r\n        text-transform: uppercase;\r\n        text-transform: var(--btn-text-case, uppercase);\r\n        text-decoration-line: none;\r\n        border-width: 1px;\r\n        border-width: var(--border-btn, 1px);\r\n        animation: button-pop 0.25s ease-out;\r\n        animation: button-pop var(--animation-btn, 0.25s) ease-out;\r\n        --tw-border-opacity: 1;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n      }\r\n      .btn-disabled,\r\n        .btn[disabled] {\r\n        pointer-events: none;\r\n      }\r\n      .btn-square {\r\n        height: 3rem;\r\n        width: 3rem;\r\n        padding: 0px;\r\n      }\r\n      .btn-circle {\r\n        height: 3rem;\r\n        width: 3rem;\r\n        border-radius: 9999px;\r\n        padding: 0px;\r\n      }\r\n      .btn.loading,\r\n          .btn.loading:hover {\r\n        pointer-events: none;\r\n      }\r\n      .btn.\\!loading,\r\n          .btn.\\!loading:hover {\r\n        pointer-events: none !important;\r\n      }\r\n      .btn.loading:before {\r\n        margin-right: 0.5rem;\r\n        height: 1rem;\r\n        width: 1rem;\r\n        border-radius: 9999px;\r\n        border-width: 2px;\r\n        animation: spin 2s linear infinite;\r\n        content: \"\";\r\n        border-top-color: transparent;\r\n        border-left-color: transparent;\r\n        border-bottom-color: currentColor;\r\n        border-right-color: currentColor;\r\n      }\r\n      .btn.\\!loading:before {\r\n        margin-right: 0.5rem !important;\r\n        height: 1rem !important;\r\n        width: 1rem !important;\r\n        border-radius: 9999px !important;\r\n        border-width: 2px !important;\r\n        animation: spin 2s linear infinite !important;\r\n        content: \"\" !important;\r\n        border-top-color: transparent !important;\r\n        border-left-color: transparent !important;\r\n        border-bottom-color: currentColor !important;\r\n        border-right-color: currentColor !important;\r\n      }\r\n      @media (prefers-reduced-motion: reduce) {\r\n      \r\n        .btn.loading:before {\r\n          animation: spin 10s linear infinite;\r\n        }\r\n      \r\n        .btn.\\!loading:before {\r\n          animation: spin 10s linear infinite !important;\r\n        }\r\n      }\r\n      @keyframes spin {\r\n      \r\n        from {\r\n          transform: rotate(0deg);\r\n        }\r\n      \r\n        to {\r\n          transform: rotate(360deg);\r\n        }\r\n      }\r\n      .btn-group {\r\n        display: inline-flex;\r\n      }\r\n      .btn-group > input[type=\"radio\"].btn {\r\n        -webkit-appearance: none;\r\n           -moz-appearance: none;\r\n                appearance: none;\r\n      }\r\n      .btn-group > input[type=\"radio\"].btn:before {\r\n        content: attr(data-title);\r\n      }\r\n      .card {\r\n        position: relative;\r\n        display: flex;\r\n        flex-direction: column;\r\n        border-radius: 1rem;\r\n        border-radius: var(--rounded-box, 1rem);\r\n      }\r\n      .card:focus {\r\n        outline: 2px solid transparent;\r\n        outline-offset: 2px;\r\n      }\r\n      .card-body {\r\n        display: flex;\r\n        flex: 1 1 auto;\r\n        flex-direction: column;\r\n        padding: 2rem;\r\n        padding: var(--padding-card, 2rem);\r\n        gap: 0.5rem;\r\n      }\r\n      .card-body :where(p) {\r\n        flex-grow: 1;\r\n      }\r\n      .card-actions {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        align-items: flex-start;\r\n        gap: 0.5rem;\r\n      }\r\n      .card figure {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n      }\r\n      .card.image-full {\r\n        display: grid;\r\n      }\r\n      .card.image-full:before {\r\n        position: relative;\r\n        content: \"\";\r\n        z-index: 10;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n        opacity: 0.75;\r\n        border-radius: 1rem;\r\n        border-radius: var(--rounded-box, 1rem);\r\n      }\r\n      .card.image-full:before,\r\n          .card.image-full > * {\r\n        grid-column-start: 1;\r\n        grid-row-start: 1;\r\n      }\r\n      .card.image-full > figure img {\r\n        height: 100%;\r\n        -o-object-fit: cover;\r\n           object-fit: cover;\r\n      }\r\n      .card.image-full > .card-body {\r\n        position: relative;\r\n        z-index: 20;\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n      }\r\n      .carousel {\r\n        display: flex;\r\n        overflow-x: scroll;\r\n        scroll-snap-type: x mandatory;\r\n        scroll-behavior: smooth;\r\n        -ms-overflow-style: none;\r\n        scrollbar-width: none;\r\n      }\r\n      .carousel-vertical {\r\n        flex-direction: column;\r\n        overflow-y: scroll;\r\n        scroll-snap-type: y mandatory;\r\n      }\r\n      .carousel-item {\r\n        box-sizing: content-box;\r\n        display: flex;\r\n        flex: none;\r\n        scroll-snap-align: start;\r\n      }\r\n      .carousel-center .carousel-item {\r\n        scroll-snap-align: center;\r\n      }\r\n      .carousel-end .carousel-item {\r\n        scroll-snap-align: end;\r\n      }\r\n      .chat {\r\n        display: grid;\r\n        grid-template-columns: repeat(2, minmax(0, 1fr));\r\n        grid-column-gap: 0.75rem;\r\n        -moz-column-gap: 0.75rem;\r\n             column-gap: 0.75rem;\r\n        padding-top: 0.25rem;\r\n        padding-bottom: 0.25rem;\r\n      }\r\n      .chat-image {\r\n        grid-row: span 2 / span 2;\r\n        align-self: flex-end;\r\n      }\r\n      .chat-header {\r\n        grid-row-start: 1;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n      }\r\n      .chat-footer {\r\n        grid-row-start: 3;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n      }\r\n      .chat-bubble {\r\n        position: relative;\r\n        display: block;\r\n        width: -moz-fit-content;\r\n        width: fit-content;\r\n        padding-left: 1rem;\r\n        padding-right: 1rem;\r\n        padding-top: 0.5rem;\r\n        padding-bottom: 0.5rem;\r\n        max-width: 90%;\r\n        border-radius: 1rem;\r\n        border-radius: var(--rounded-box, 1rem);\r\n        min-height: 2.75rem;\r\n        min-width: 2.75rem;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n      }\r\n      .chat-bubble:before {\r\n        position: absolute;\r\n        bottom: 0px;\r\n        height: 0.75rem;\r\n        width: 0.75rem;\r\n        background-color: inherit;\r\n        content: \"\";\r\n        -webkit-mask-size: contain;\r\n        mask-size: contain;\r\n        -webkit-mask-repeat: no-repeat;\r\n        mask-repeat: no-repeat;\r\n        -webkit-mask-position: center;\r\n        mask-position: center;\r\n      }\r\n      .chat-start {\r\n        align-items: start;\r\n        justify-items: start;\r\n        place-items: start;\r\n        grid-template-columns: auto 1fr;\r\n      }\r\n      .chat-start .chat-header {\r\n        grid-column-start: 2;\r\n      }\r\n      .chat-start .chat-footer {\r\n        grid-column-start: 2;\r\n      }\r\n      .chat-start .chat-image {\r\n        grid-column-start: 1;\r\n      }\r\n      .chat-start .chat-bubble {\r\n        grid-column-start: 2;\r\n        border-bottom-left-radius: 0px;\r\n      }\r\n      .chat-start .chat-bubble:before {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%273%27 height=%273%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m 0 3 L 3 3 L 3 0 C 3 1 1 3 0 3%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%273%27 height=%273%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m 0 3 L 3 3 L 3 0 C 3 1 1 3 0 3%27/%3e%3c/svg%3e\");\r\n        left: -0.75rem;\r\n      }\r\n      [dir=\"rtl\"] .chat-start .chat-bubble:before {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%273%27 height=%273%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m 0 3 L 1 3 L 3 3 C 2 3 0 1 0 0%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%273%27 height=%273%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m 0 3 L 1 3 L 3 3 C 2 3 0 1 0 0%27/%3e%3c/svg%3e\");\r\n      }\r\n      .chat-end {\r\n        align-items: end;\r\n        justify-items: end;\r\n        place-items: end;\r\n        grid-template-columns: 1fr auto;\r\n      }\r\n      .chat-end .chat-header {\r\n        grid-column-start: 1;\r\n      }\r\n      .chat-end .chat-footer {\r\n        grid-column-start: 1;\r\n      }\r\n      .chat-end .chat-image {\r\n        grid-column-start: 2;\r\n      }\r\n      .chat-end .chat-bubble {\r\n        grid-column-start: 1;\r\n        border-bottom-right-radius: 0px;\r\n      }\r\n      .chat-end .chat-bubble:before {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%273%27 height=%273%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m 0 3 L 1 3 L 3 3 C 2 3 0 1 0 0%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%273%27 height=%273%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m 0 3 L 1 3 L 3 3 C 2 3 0 1 0 0%27/%3e%3c/svg%3e\");\r\n        left: 100%;\r\n      }\r\n      [dir=\"rtl\"] .chat-end .chat-bubble:before {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%273%27 height=%273%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m 0 3 L 3 3 L 3 0 C 3 1 1 3 0 3%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%273%27 height=%273%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m 0 3 L 3 3 L 3 0 C 3 1 1 3 0 3%27/%3e%3c/svg%3e\");\r\n      }\r\n      .checkbox {\r\n        flex-shrink: 0;\r\n        --chkbg: var(--bc);\r\n        --chkfg: var(--b1);\r\n        height: 1.5rem;\r\n        width: 1.5rem;\r\n        cursor: pointer;\r\n        -webkit-appearance: none;\r\n           -moz-appearance: none;\r\n                appearance: none;\r\n        border-width: 1px;\r\n        border-color: hsl(var(--bc) / var(--tw-border-opacity));\r\n        --tw-border-opacity: 0.2;\r\n        border-radius: 0.5rem;\r\n        border-radius: var(--rounded-btn, 0.5rem);\r\n      }\r\n      .\\!checkbox {\r\n        flex-shrink: 0 !important;\r\n        --chkbg: var(--bc) !important;\r\n        --chkfg: var(--b1) !important;\r\n        height: 1.5rem !important;\r\n        width: 1.5rem !important;\r\n        cursor: pointer !important;\r\n        -webkit-appearance: none !important;\r\n           -moz-appearance: none !important;\r\n                appearance: none !important;\r\n        border-width: 1px !important;\r\n        border-color: hsl(var(--bc) / var(--tw-border-opacity)) !important;\r\n        --tw-border-opacity: 0.2 !important;\r\n        border-radius: 0.5rem !important;\r\n        border-radius: var(--rounded-btn, 0.5rem) !important;\r\n      }\r\n      .collapse.collapse {\r\n        visibility: visible;\r\n      }\r\n      .collapse {\r\n        position: relative;\r\n        display: grid;\r\n        overflow: hidden;\r\n        grid-template-rows: 1fr auto;\r\n      }\r\n      .collapse-title,\r\n      .collapse > input[type=\"checkbox\"],\r\n      .collapse-content {\r\n        grid-column-start: 1;\r\n        grid-row-start: 1;\r\n      }\r\n      .collapse > input[type=\"checkbox\"] {\r\n        -webkit-appearance: none;\r\n           -moz-appearance: none;\r\n                appearance: none;\r\n        opacity: 0;\r\n      }\r\n      .collapse-content {\r\n        grid-row-start: 2;\r\n        overflow: hidden;\r\n        max-height: 0px;\r\n        padding-left: 1rem;\r\n        padding-right: 1rem;\r\n        cursor: inherit;\r\n        transition: padding 0.2s ease-in-out, background-color 0.2s ease-in-out;\r\n      }\r\n      .collapse-open .collapse-content,\r\n      .collapse:focus:not(.collapse-close) .collapse-content,\r\n      .collapse:not(.collapse-close)\r\n        input[type=\"checkbox\"]:checked\r\n        ~ .collapse-content {\r\n        max-height: none;\r\n      }\r\n      :root .countdown {\r\n        line-height: 1em;\r\n      }\r\n      .countdown {\r\n        display: inline-flex;\r\n      }\r\n      .countdown > * {\r\n        height: 1em;\r\n        display: inline-block;\r\n        overflow-y: hidden;\r\n      }\r\n      .countdown > *:before {\r\n        position: relative;\r\n        content: \"00\\A 01\\A 02\\A 03\\A 04\\A 05\\A 06\\A 07\\A 08\\A 09\\A 10\\A 11\\A 12\\A 13\\A 14\\A 15\\A 16\\A 17\\A 18\\A 19\\A 20\\A 21\\A 22\\A 23\\A 24\\A 25\\A 26\\A 27\\A 28\\A 29\\A 30\\A 31\\A 32\\A 33\\A 34\\A 35\\A 36\\A 37\\A 38\\A 39\\A 40\\A 41\\A 42\\A 43\\A 44\\A 45\\A 46\\A 47\\A 48\\A 49\\A 50\\A 51\\A 52\\A 53\\A 54\\A 55\\A 56\\A 57\\A 58\\A 59\\A 60\\A 61\\A 62\\A 63\\A 64\\A 65\\A 66\\A 67\\A 68\\A 69\\A 70\\A 71\\A 72\\A 73\\A 74\\A 75\\A 76\\A 77\\A 78\\A 79\\A 80\\A 81\\A 82\\A 83\\A 84\\A 85\\A 86\\A 87\\A 88\\A 89\\A 90\\A 91\\A 92\\A 93\\A 94\\A 95\\A 96\\A 97\\A 98\\A 99\\A\";\r\n        white-space: pre;\r\n        top: calc(var(--value) * -1em);\r\n        text-align: center;\r\n        transition: all 1s cubic-bezier(1, 0, 0, 1);\r\n      }\r\n      .divider {\r\n        display: flex;\r\n        flex-direction: row;\r\n        align-items: center;\r\n        align-self: stretch;\r\n        margin-top: 1rem;\r\n        margin-bottom: 1rem;\r\n        height: 1rem;\r\n        white-space: nowrap;\r\n      }\r\n      .divider:before,\r\n        .divider:after {\r\n        content: \"\";\r\n        flex-grow: 1;\r\n        height: 0.125rem;\r\n        width: 100%;\r\n      }\r\n      .drawer {\r\n        display: grid;\r\n        width: 100%;\r\n        overflow: hidden;\r\n        height: 100vh;\r\n        height: 100dvh;\r\n      }\r\n      .drawer.drawer-end {\r\n        direction: rtl;\r\n      }\r\n      .drawer.drawer-end > * {\r\n        direction: ltr;\r\n      }\r\n      .drawer.drawer-end > .drawer-toggle ~ .drawer-side > .drawer-overlay + * {\r\n        --tw-translate-x: 100%;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n        justify-self: end;\r\n      }\r\n      .drawer.drawer-end > .drawer-toggle:checked ~ .drawer-side > .drawer-overlay + * {\r\n        --tw-translate-x: 0px;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      :where(.drawer-toggle ~ .drawer-content) {\r\n        height: inherit;\r\n      }\r\n      .drawer-toggle {\r\n        position: absolute;\r\n        height: 0px;\r\n        width: 0px;\r\n        -webkit-appearance: none;\r\n           -moz-appearance: none;\r\n                appearance: none;\r\n        opacity: 0;\r\n      }\r\n      .drawer-toggle ~ .drawer-content {\r\n        z-index: 0;\r\n        grid-column-start: 1;\r\n        grid-row-start: 1;\r\n        overflow-y: auto;\r\n        transition-property: all;\r\n        transition-duration: 300ms;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n      }\r\n      .drawer-toggle ~ .drawer-side {\r\n        grid-column-start: 1;\r\n        grid-row-start: 1;\r\n        display: grid;\r\n        max-height: 100vh;\r\n        overflow-x: hidden;\r\n      }\r\n      .drawer-toggle ~ .drawer-side > .drawer-overlay {\r\n        visibility: hidden;\r\n        grid-column-start: 1;\r\n        grid-row-start: 1;\r\n        opacity: 0;\r\n        cursor: pointer;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--nf, var(--n)) / var(--tw-bg-opacity));\r\n        transition-property: all;\r\n        transition-duration: 300ms;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n      }\r\n      .drawer-toggle ~ .drawer-side > .drawer-overlay + * {\r\n        z-index: 10;\r\n        grid-column-start: 1;\r\n        grid-row-start: 1;\r\n        --tw-translate-x: -100%;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n        transition-property: all;\r\n        transition-duration: 300ms;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n      }\r\n      .drawer-toggle:checked ~ .drawer-side {\r\n        isolation: isolate;\r\n        overflow-y: auto;\r\n        overflow-x: hidden;\r\n      }\r\n      .drawer-toggle:checked ~ .drawer-side > .drawer-overlay {\r\n        visibility: visible;\r\n        opacity: 0.999999;\r\n        --tw-bg-opacity: 0.4;\r\n      }\r\n      .drawer-toggle:checked ~ .drawer-side > .drawer-overlay + * {\r\n        --tw-translate-x: 0px;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      [dir=\"rtl\"] .drawer-toggle ~ .drawer-side > .drawer-overlay + * {\r\n        --tw-translate-x: 100%;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      [dir=\"rtl\"] .drawer-toggle:checked ~ .drawer-side > .drawer-overlay + * {\r\n        --tw-translate-x: 0px;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      [dir=\"rtl\"] .drawer.drawer-end > .drawer-toggle ~ .drawer-side > .drawer-overlay + * {\r\n        --tw-translate-x: -100%;\r\n      }\r\n      [dir=\"rtl\"] .drawer.drawer-end > .drawer-toggle:checked ~ .drawer-side > .drawer-overlay + * {\r\n        --tw-translate-x: 0px;\r\n      }\r\n      [dir=\"rtl\"] .drawer.drawer-end > .drawer-toggle:checked ~ .drawer-content {\r\n        --tw-translate-x: 0.5rem;\r\n      }\r\n      @media (min-width: 1024px) {\r\n      \r\n        .drawer-mobile {\r\n          grid-auto-columns: max-content auto;\r\n        }\r\n      \r\n        .drawer-mobile > .drawer-toggle ~ .drawer-content {\r\n          height: auto;\r\n        }\r\n      \r\n        @media (min-width: 1024px) {\r\n      \r\n          .drawer-mobile > .drawer-toggle ~ .drawer-content {\r\n            grid-column-start: 2;\r\n          }\r\n      \r\n          .drawer-mobile > .drawer-toggle ~ .drawer-side > .drawer-overlay {\r\n            visibility: visible;\r\n          }\r\n      \r\n          .drawer-mobile > .drawer-toggle ~ .drawer-side > .drawer-overlay + * {\r\n            --tw-translate-x: 0px;\r\n            transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n          }\r\n      \r\n          .drawer-mobile.drawer-end > .drawer-toggle ~ .drawer-content {\r\n            grid-column-start: 1;\r\n          }\r\n      \r\n          .drawer-mobile.drawer-end > .drawer-toggle ~ .drawer-side {\r\n            grid-column-start: 2;\r\n          }\r\n      \r\n          .drawer-mobile.drawer-end > .drawer-toggle ~ .drawer-side > .drawer-overlay {\r\n            visibility: visible;\r\n          }\r\n      \r\n          .drawer-mobile.drawer-end > .drawer-toggle ~ .drawer-side > .drawer-overlay + * {\r\n            --tw-translate-x: 0px;\r\n            transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n          }\r\n        }\r\n      \r\n        .drawer-mobile > .drawer-toggle ~ .drawer-side {\r\n          overflow-y: auto;\r\n        }\r\n      \r\n        .drawer-mobile.drawer-end {\r\n          grid-auto-columns: auto max-content;\r\n          direction: ltr;\r\n        }\r\n      \r\n        .drawer-mobile.drawer-end > .drawer-toggle ~ .drawer-content {\r\n          height: auto;\r\n        }\r\n      \r\n        .drawer-mobile.drawer-end > .drawer-toggle ~ .drawer-side {\r\n          overflow-y: auto;\r\n        }\r\n      \r\n        .drawer-mobile > .drawer-toggle:checked ~ .drawer-content {\r\n          --tw-translate-x: 0px;\r\n          transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n        }\r\n      }\r\n      .dropdown {\r\n        position: relative;\r\n        display: inline-block;\r\n      }\r\n      .dropdown > *:focus {\r\n        outline: 2px solid transparent;\r\n        outline-offset: 2px;\r\n      }\r\n      .dropdown .dropdown-content {\r\n        visibility: hidden;\r\n        position: absolute;\r\n        z-index: 50;\r\n        opacity: 0;\r\n        transform-origin: top;\r\n        --tw-scale-x: .95;\r\n        --tw-scale-y: .95;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\r\n        transition-duration: 200ms;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n      }\r\n      .dropdown-end .dropdown-content {\r\n        right: 0px;\r\n      }\r\n      .dropdown-left .dropdown-content {\r\n        top: 0px;\r\n        right: 100%;\r\n        bottom: auto;\r\n        transform-origin: right;\r\n      }\r\n      .dropdown-right .dropdown-content {\r\n        left: 100%;\r\n        top: 0px;\r\n        bottom: auto;\r\n        transform-origin: left;\r\n      }\r\n      .dropdown-bottom .dropdown-content {\r\n        bottom: auto;\r\n        top: 100%;\r\n        transform-origin: top;\r\n      }\r\n      .dropdown-top .dropdown-content {\r\n        bottom: 100%;\r\n        top: auto;\r\n        transform-origin: bottom;\r\n      }\r\n      .dropdown-end.dropdown-right .dropdown-content {\r\n        bottom: 0px;\r\n        top: auto;\r\n      }\r\n      .dropdown-end.dropdown-left .dropdown-content {\r\n        bottom: 0px;\r\n        top: auto;\r\n      }\r\n      .dropdown.dropdown-open .dropdown-content,\r\n      .dropdown.dropdown-hover:hover .dropdown-content,\r\n      .dropdown:not(.dropdown-hover):focus .dropdown-content,\r\n      .dropdown:not(.dropdown-hover)[focus-within] .dropdown-content {\r\n        visibility: visible;\r\n        opacity: 1;\r\n      }\r\n      .dropdown.dropdown-open .dropdown-content,\r\n      .dropdown.dropdown-hover:hover .dropdown-content,\r\n      .dropdown:not(.dropdown-hover):focus .dropdown-content,\r\n      .dropdown:not(.dropdown-hover):focus-within .dropdown-content {\r\n        visibility: visible;\r\n        opacity: 1;\r\n      }\r\n      .file-input {\r\n        height: 3rem;\r\n        flex-shrink: 1;\r\n        padding-right: 1rem;\r\n        font-size: 1rem;\r\n        line-height: 2;\r\n        line-height: 1.5rem;\r\n        overflow: hidden;\r\n        border-width: 1px;\r\n        border-color: hsl(var(--bc) / var(--tw-border-opacity));\r\n        --tw-border-opacity: 0;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n        border-radius: 0.5rem;\r\n        border-radius: var(--rounded-btn, 0.5rem);\r\n      }\r\n      .file-input::file-selector-button {\r\n        margin-right: 1rem;\r\n        display: inline-flex;\r\n        height: 2.875rem;\r\n        min-height: 2.875rem;\r\n        flex-shrink: 0;\r\n        cursor: pointer;\r\n        -webkit-user-select: none;\r\n           -moz-user-select: none;\r\n                user-select: none;\r\n        flex-wrap: wrap;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-color: transparent;\r\n        border-color: hsl(var(--n) / var(--tw-border-opacity));\r\n        padding-left: 1rem;\r\n        padding-right: 1rem;\r\n        text-align: center;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n        line-height: 1em;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\r\n        transition-duration: 200ms;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n        --tw-border-opacity: 1;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n        font-weight: 600;\r\n        text-transform: uppercase;\r\n        text-transform: var(--btn-text-case, uppercase);\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        text-decoration-line: none;\r\n        border-width: 1px;\r\n        border-width: var(--border-btn, 1px);\r\n        animation: button-pop 0.25s ease-out;\r\n        animation: button-pop var(--animation-btn, 0.25s) ease-out;\r\n      }\r\n      .footer {\r\n        display: grid;\r\n        width: 100%;\r\n        grid-auto-flow: row;\r\n        align-items: start;\r\n        justify-items: start;\r\n        place-items: start;\r\n        grid-row-gap: 2.5rem;\r\n        row-gap: 2.5rem;\r\n        grid-column-gap: 1rem;\r\n        -moz-column-gap: 1rem;\r\n             column-gap: 1rem;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n      }\r\n      .footer > * {\r\n        display: grid;\r\n        align-items: start;\r\n        justify-items: start;\r\n        place-items: start;\r\n        grid-gap: 0.5rem;\r\n        gap: 0.5rem;\r\n      }\r\n      .footer-center {\r\n        align-items: center;\r\n        justify-items: center;\r\n        place-items: center;\r\n        text-align: center;\r\n      }\r\n      .footer-center > * {\r\n        align-items: center;\r\n        justify-items: center;\r\n        place-items: center;\r\n      }\r\n      @media (min-width: 48rem) {\r\n      \r\n        .footer {\r\n          grid-auto-flow: column;\r\n        }\r\n      \r\n        .footer-center {\r\n          grid-auto-flow: row dense;\r\n        }\r\n      }\r\n      .form-control {\r\n        display: flex;\r\n        flex-direction: column;\r\n      }\r\n      .label {\r\n        display: flex;\r\n        -webkit-user-select: none;\r\n           -moz-user-select: none;\r\n                user-select: none;\r\n        align-items: center;\r\n        justify-content: space-between;\r\n        padding-left: 0.25rem;\r\n        padding-right: 0.25rem;\r\n        padding-top: 0.5rem;\r\n        padding-bottom: 0.5rem;\r\n      }\r\n      .hero {\r\n        display: grid;\r\n        width: 100%;\r\n        align-items: center;\r\n        justify-items: center;\r\n        place-items: center;\r\n        background-size: cover;\r\n        background-position: center;\r\n      }\r\n      .hero > * {\r\n        grid-column-start: 1;\r\n        grid-row-start: 1;\r\n      }\r\n      .hero-overlay {\r\n        grid-column-start: 1;\r\n        grid-row-start: 1;\r\n        height: 100%;\r\n        width: 100%;\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n        --tw-bg-opacity: 0.5;\r\n      }\r\n      .hero-content {\r\n        z-index: 0;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        max-width: 80rem;\r\n        gap: 1rem;\r\n        padding: 1rem;\r\n      }\r\n      .indicator {\r\n        position: relative;\r\n        display: inline-flex;\r\n        width: -moz-max-content;\r\n        width: max-content;\r\n      }\r\n      .indicator :where(.indicator-item) {\r\n        z-index: 1;\r\n        position: absolute;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n        white-space: nowrap;\r\n      }\r\n      .input {\r\n        flex-shrink: 1;\r\n        height: 3rem;\r\n        padding-left: 1rem;\r\n        padding-right: 1rem;\r\n        font-size: 1rem;\r\n        line-height: 2;\r\n        line-height: 1.5rem;\r\n        border-width: 1px;\r\n        border-color: hsl(var(--bc) / var(--tw-border-opacity));\r\n        --tw-border-opacity: 0;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n        border-radius: 0.5rem;\r\n        border-radius: var(--rounded-btn, 0.5rem);\r\n      }\r\n      .input-group {\r\n        display: flex;\r\n        width: 100%;\r\n        align-items: stretch;\r\n      }\r\n      .input-group > .input {\r\n        isolation: isolate;\r\n      }\r\n      .input-group > *,\r\n        .input-group > .input,\r\n        .input-group > .textarea,\r\n        .input-group > .select {\r\n        border-radius: 0px;\r\n      }\r\n      .input-group-md {\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n        line-height: 2;\r\n      }\r\n      .input-group-lg {\r\n        font-size: 1.125rem;\r\n        line-height: 1.75rem;\r\n        line-height: 2;\r\n      }\r\n      .input-group-sm {\r\n        font-size: 0.875rem;\r\n        line-height: 2rem;\r\n      }\r\n      .input-group-xs {\r\n        font-size: 0.75rem;\r\n        line-height: 1rem;\r\n        line-height: 1.625;\r\n      }\r\n      .input-group :where(span) {\r\n        display: flex;\r\n        align-items: center;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b2) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--b3, var(--b2)) / var(--tw-bg-opacity));\r\n        padding-left: 1rem;\r\n        padding-right: 1rem;\r\n      }\r\n      .input-group > :first-child {\r\n        border-top-left-radius: 0.5rem;\r\n        border-top-left-radius: var(--rounded-btn, 0.5rem);\r\n        border-top-right-radius: 0;\r\n        border-bottom-left-radius: 0.5rem;\r\n        border-bottom-left-radius: var(--rounded-btn, 0.5rem);\r\n        border-bottom-right-radius: 0;\r\n      }\r\n      .input-group > :last-child {\r\n        border-top-left-radius: 0;\r\n        border-top-right-radius: 0.5rem;\r\n        border-top-right-radius: var(--rounded-btn, 0.5rem);\r\n        border-bottom-left-radius: 0;\r\n        border-bottom-right-radius: 0.5rem;\r\n        border-bottom-right-radius: var(--rounded-btn, 0.5rem);\r\n      }\r\n      .input-group-vertical {\r\n        flex-direction: column;\r\n      }\r\n      .input-group-vertical :first-child {\r\n        border-top-left-radius: 0.5rem;\r\n        border-top-left-radius: var(--rounded-btn, 0.5rem);\r\n        border-top-right-radius: 0.5rem;\r\n        border-top-right-radius: var(--rounded-btn, 0.5rem);\r\n        border-bottom-left-radius: 0;\r\n        border-bottom-right-radius: 0;\r\n      }\r\n      .input-group-vertical :last-child {\r\n        border-top-left-radius: 0;\r\n        border-top-right-radius: 0;\r\n        border-bottom-left-radius: 0.5rem;\r\n        border-bottom-left-radius: var(--rounded-btn, 0.5rem);\r\n        border-bottom-right-radius: 0.5rem;\r\n        border-bottom-right-radius: var(--rounded-btn, 0.5rem);\r\n      }\r\n      .kbd {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-width: 1px;\r\n        border-color: hsl(var(--bc) / var(--tw-border-opacity));\r\n        --tw-border-opacity: 0.2;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--b2, var(--b1)) / var(--tw-bg-opacity));\r\n        padding-left: 0.5rem;\r\n        padding-right: 0.5rem;\r\n        border-radius: 0.5rem;\r\n        border-radius: var(--rounded-btn, 0.5rem);\r\n        border-bottom-width: 2px;\r\n        min-height: 2.2em;\r\n        min-width: 2.2em;\r\n      }\r\n      .link {\r\n        cursor: pointer;\r\n        text-decoration-line: underline;\r\n      }\r\n      .link-hover {\r\n        text-decoration-line: none;\r\n      }\r\n      .link-hover:hover {\r\n        text-decoration-line: underline;\r\n      }\r\n      .mask {\r\n        -webkit-mask-size: contain;\r\n        mask-size: contain;\r\n        -webkit-mask-repeat: no-repeat;\r\n        mask-repeat: no-repeat;\r\n        -webkit-mask-position: center;\r\n        mask-position: center;\r\n      }\r\n      .mask-half-1 {\r\n        -webkit-mask-size: 200%;\r\n        mask-size: 200%;\r\n        -webkit-mask-position: left;\r\n        mask-position: left;\r\n      }\r\n      .mask-half-2 {\r\n        -webkit-mask-size: 200%;\r\n        mask-size: 200%;\r\n        -webkit-mask-position: right;\r\n        mask-position: right;\r\n      }\r\n      .menu {\r\n        display: flex;\r\n        flex-direction: column;\r\n        flex-wrap: wrap;\r\n      }\r\n      .menu.horizontal {\r\n        display: inline-flex;\r\n        flex-direction: row;\r\n      }\r\n      .menu.horizontal :where(li) {\r\n        flex-direction: row;\r\n      }\r\n      :where(.menu li) {\r\n        position: relative;\r\n        display: flex;\r\n        flex-shrink: 0;\r\n        flex-direction: column;\r\n        flex-wrap: wrap;\r\n        align-items: stretch;\r\n      }\r\n      .menu :where(li:not(.menu-title)) > :where(*:not(ul)) {\r\n        display: flex;\r\n      }\r\n      .menu :where(li:not(.disabled):not(.menu-title)) > :where(*:not(ul)) {\r\n        cursor: pointer;\r\n        -webkit-user-select: none;\r\n           -moz-user-select: none;\r\n                user-select: none;\r\n        align-items: center;\r\n        outline: 2px solid transparent;\r\n        outline-offset: 2px;\r\n      }\r\n      .menu > :where(li > *:not(ul):focus) {\r\n        outline: 2px solid transparent;\r\n        outline-offset: 2px;\r\n      }\r\n      .menu > :where(li.disabled > *:not(ul):focus) {\r\n        cursor: auto;\r\n      }\r\n      .menu > :where(li) :where(ul) {\r\n        display: flex;\r\n        flex-direction: column;\r\n        align-items: stretch;\r\n      }\r\n      .menu > :where(li) > :where(ul) {\r\n        position: absolute;\r\n        display: none;\r\n        top: auto;\r\n        top: initial;\r\n        left: 100%;\r\n        border-top-left-radius: inherit;\r\n        border-top-right-radius: inherit;\r\n        border-bottom-right-radius: inherit;\r\n        border-bottom-left-radius: inherit;\r\n      }\r\n      .menu > :where(li:hover) > :where(ul) {\r\n        display: flex;\r\n      }\r\n      .menu > :where(li:focus) > :where(ul) {\r\n        display: flex;\r\n      }\r\n      .mockup-code {\r\n        position: relative;\r\n        overflow: hidden;\r\n        overflow-x: auto;\r\n        min-width: 18rem;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n        padding-top: 1.25rem;\r\n        padding-bottom: 1.25rem;\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        border-radius: 1rem;\r\n        border-radius: var(--rounded-box, 1rem);\r\n      }\r\n      .mockup-code pre[data-prefix]:before {\r\n        content: attr(data-prefix);\r\n        display: inline-block;\r\n        text-align: right;\r\n        width: 2rem;\r\n        opacity: 0.5;\r\n      }\r\n      .mockup-window {\r\n        position: relative;\r\n        overflow: hidden;\r\n        overflow-x: auto;\r\n        padding-top: 1.25rem;\r\n        border-radius: 1rem;\r\n        border-radius: var(--rounded-box, 1rem);\r\n      }\r\n      .mockup-window pre[data-prefix]:before {\r\n        content: attr(data-prefix);\r\n        display: inline-block;\r\n        text-align: right;\r\n      }\r\n      .modal {\r\n        pointer-events: none;\r\n        visibility: hidden;\r\n        position: fixed;\r\n        top: 0px;\r\n        right: 0px;\r\n        bottom: 0px;\r\n        left: 0px;\r\n        display: flex;\r\n        justify-content: center;\r\n        opacity: 0;\r\n        z-index: 999;\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--nf, var(--n)) / var(--tw-bg-opacity));\r\n        --tw-bg-opacity: 0.4;\r\n        transition-duration: 200ms;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n        transition-property: transform, opacity, visibility;\r\n        overflow-y: hidden;\r\n        overscroll-behavior: contain;\r\n      }\r\n      :where(.modal) {\r\n        align-items: center;\r\n      }\r\n      .modal-box {\r\n        max-height: calc(100vh - 5em);\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n        padding: 1.5rem;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\r\n        transition-duration: 200ms;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n        width: 91.666667%;\r\n        max-width: 32rem;\r\n        --tw-scale-x: .9;\r\n        --tw-scale-y: .9;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n        border-top-left-radius: 1rem;\r\n        border-top-left-radius: var(--rounded-box, 1rem);\r\n        border-top-right-radius: 1rem;\r\n        border-top-right-radius: var(--rounded-box, 1rem);\r\n        border-bottom-left-radius: 1rem;\r\n        border-bottom-left-radius: var(--rounded-box, 1rem);\r\n        border-bottom-right-radius: 1rem;\r\n        border-bottom-right-radius: var(--rounded-box, 1rem);\r\n        box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);\r\n        overflow-y: auto;\r\n        overscroll-behavior: contain;\r\n      }\r\n      .modal-open,\r\n      .modal:target,\r\n      .modal-toggle:checked + .modal {\r\n        pointer-events: auto;\r\n        visibility: visible;\r\n        opacity: 1;\r\n      }\r\n      .modal-action {\r\n        display: flex;\r\n        margin-top: 1.5rem;\r\n        justify-content: flex-end;\r\n      }\r\n      .modal-toggle {\r\n        position: fixed;\r\n        height: 0px;\r\n        width: 0px;\r\n        -webkit-appearance: none;\r\n           -moz-appearance: none;\r\n                appearance: none;\r\n        opacity: 0;\r\n      }\r\n      .navbar {\r\n        display: flex;\r\n        align-items: center;\r\n        padding: 0.5rem;\r\n        padding: var(--navbar-padding, 0.5rem);\r\n        min-height: 4rem;\r\n        width: 100%;\r\n      }\r\n      :where(.navbar > *) {\r\n        display: inline-flex;\r\n        align-items: center;\r\n      }\r\n      .navbar-start {\r\n        width: 50%;\r\n        justify-content: flex-start;\r\n      }\r\n      .navbar-center {\r\n        flex-shrink: 0;\r\n      }\r\n      .navbar-end {\r\n        width: 50%;\r\n        justify-content: flex-end;\r\n      }\r\n      .progress {\r\n        position: relative;\r\n        width: 100%;\r\n        -webkit-appearance: none;\r\n           -moz-appearance: none;\r\n                appearance: none;\r\n        overflow: hidden;\r\n        height: 0.5rem;\r\n        border-radius: 1rem;\r\n        border-radius: var(--rounded-box, 1rem);\r\n      }\r\n      .radial-progress {\r\n        position: relative;\r\n        display: inline-grid;\r\n        height: var(--size);\r\n        width: var(--size);\r\n        align-content: center;\r\n        justify-content: center;\r\n        place-content: center;\r\n        border-radius: 9999px;\r\n        background-color: transparent;\r\n        vertical-align: middle;\r\n        box-sizing: content-box;\r\n        --value: 0;\r\n        --size: 5rem;\r\n        --thickness: calc(var(--size) / 10);\r\n      }\r\n      .radial-progress::-moz-progress-bar {\r\n        -moz-appearance: none;\r\n             appearance: none;\r\n        background-color: transparent;\r\n      }\r\n      .radial-progress::-webkit-progress-value {\r\n        -webkit-appearance: none;\r\n                appearance: none;\r\n        background-color: transparent;\r\n      }\r\n      .radial-progress::-webkit-progress-bar {\r\n        -webkit-appearance: none;\r\n                appearance: none;\r\n        background-color: transparent;\r\n      }\r\n      .radial-progress:before,\r\n      .radial-progress:after {\r\n        position: absolute;\r\n        border-radius: 9999px;\r\n        content: \"\";\r\n      }\r\n      .radial-progress:before {\r\n        top: 0px;\r\n        right: 0px;\r\n        bottom: 0px;\r\n        left: 0px;\r\n        background: radial-gradient(farthest-side, currentColor 98%, rgba(0,0,0,0)) top/var(--thickness) var(--thickness) no-repeat, conic-gradient(currentColor calc(var(--value) * 1%), rgba(0,0,0,0) 0);\r\n        -webkit-mask: radial-gradient(farthest-side, rgba(0,0,0,0) calc(99% - var(--thickness)), #000 calc(100% - var(--thickness)));\r\n        mask: radial-gradient(farthest-side, rgba(0,0,0,0) calc(99% - var(--thickness)), #000 calc(100% - var(--thickness)));\r\n      }\r\n      .radial-progress:after {\r\n        top: calc(50% - var(--thickness) / 2);\r\n        right: calc(50% - var(--thickness) / 2);\r\n        bottom: calc(50% - var(--thickness) / 2);\r\n        left: calc(50% - var(--thickness) / 2);\r\n        transform: rotate(calc(var(--value) * 3.6deg - 90deg)) translate(calc(var(--size) / 2 - 50%));\r\n        background-color: currentColor;\r\n      }\r\n      .radio {\r\n        flex-shrink: 0;\r\n        --chkbg: var(--bc);\r\n        height: 1.5rem;\r\n        width: 1.5rem;\r\n        cursor: pointer;\r\n        -webkit-appearance: none;\r\n           -moz-appearance: none;\r\n                appearance: none;\r\n        border-radius: 9999px;\r\n        border-width: 1px;\r\n        border-color: hsl(var(--bc) / var(--tw-border-opacity));\r\n        --tw-border-opacity: 0.2;\r\n        transition: background, box-shadow 0.2s ease-in-out;\r\n        transition: background, box-shadow var(--animation-input, 0.2s) ease-in-out;\r\n      }\r\n      .range {\r\n        height: 1.5rem;\r\n        width: 100%;\r\n        cursor: pointer;\r\n        -moz-appearance: none;\r\n             appearance: none;\r\n        -webkit-appearance: none;\r\n        --range-shdw: var(--bc);\r\n        overflow: hidden;\r\n        background-color: transparent;\r\n        border-radius: 1rem;\r\n        border-radius: var(--rounded-box, 1rem);\r\n      }\r\n      .\\!range {\r\n        height: 1.5rem !important;\r\n        width: 100% !important;\r\n        cursor: pointer !important;\r\n        -moz-appearance: none !important;\r\n             appearance: none !important;\r\n        -webkit-appearance: none !important;\r\n        --range-shdw: var(--bc) !important;\r\n        overflow: hidden !important;\r\n        background-color: transparent !important;\r\n        border-radius: 1rem !important;\r\n        border-radius: var(--rounded-box, 1rem) !important;\r\n      }\r\n      .range:focus {\r\n        outline: none;\r\n      }\r\n      .\\!range:focus {\r\n        outline: none !important;\r\n      }\r\n      .rating {\r\n        position: relative;\r\n        display: inline-flex;\r\n      }\r\n      .rating :where(input) {\r\n        cursor: pointer;\r\n        border-radius: 0px;\r\n        animation: rating-pop 0.25s ease-out;\r\n        animation: rating-pop var(--animation-input, 0.25s) ease-out;\r\n        height: 1.5rem;\r\n        width: 1.5rem;\r\n        background-color: hsl(var(--bc) / var(--tw-bg-opacity));\r\n        --tw-bg-opacity: 1;\r\n      }\r\n      .select {\r\n        display: inline-flex;\r\n        flex-shrink: 0;\r\n        cursor: pointer;\r\n        -webkit-user-select: none;\r\n           -moz-user-select: none;\r\n                user-select: none;\r\n        -webkit-appearance: none;\r\n           -moz-appearance: none;\r\n                appearance: none;\r\n        height: 3rem;\r\n        padding-left: 1rem;\r\n        padding-right: 2.5rem;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n        line-height: 2;\r\n        min-height: 3rem;\r\n        border-width: 1px;\r\n        border-color: hsl(var(--bc) / var(--tw-border-opacity));\r\n        --tw-border-opacity: 0;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n        font-weight: 600;\r\n        border-radius: 0.5rem;\r\n        border-radius: var(--rounded-btn, 0.5rem);\r\n        background-image: linear-gradient(45deg, transparent 50%, currentColor 50%), linear-gradient(135deg, currentColor 50%, transparent 50%);\r\n        background-position: calc(100% - 20px) calc(1px + 50%), calc(100% - 16px) calc(1px + 50%);\r\n        background-size: 4px 4px, 4px 4px;\r\n        background-repeat: no-repeat;\r\n      }\r\n      .select[multiple] {\r\n        height: auto;\r\n      }\r\n      .stack {\r\n        display: inline-grid;\r\n        align-items: center;\r\n        justify-items: center;\r\n        place-items: center;\r\n        align-items: flex-end;\r\n      }\r\n      .stack > * {\r\n        grid-column-start: 1;\r\n        grid-row-start: 1;\r\n        transform: translateY(10%) scale(0.9);\r\n        z-index: 1;\r\n        width: 100%;\r\n        opacity: 0.6;\r\n      }\r\n      .stack > *:nth-child(2) {\r\n        transform: translateY(5%) scale(0.95);\r\n        z-index: 2;\r\n        opacity: 0.8;\r\n      }\r\n      .stack > *:nth-child(1) {\r\n        transform: translateY(0) scale(1);\r\n        z-index: 3;\r\n        opacity: 1;\r\n      }\r\n      .stats {\r\n        display: inline-grid;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--bc) / var(--tw-text-opacity));\r\n        border-radius: 1rem;\r\n        border-radius: var(--rounded-box, 1rem);\r\n      }\r\n      :where(.stats) {\r\n        grid-auto-flow: column;\r\n        overflow-x: auto;\r\n      }\r\n      .stat {\r\n        display: inline-grid;\r\n        width: 100%;\r\n        grid-template-columns: repeat(1, 1fr);\r\n        -moz-column-gap: 1rem;\r\n             column-gap: 1rem;\r\n        border-color: hsl(var(--bc) / var(--tw-border-opacity));\r\n        --tw-border-opacity: 0.1;\r\n        padding-left: 1.5rem;\r\n        padding-right: 1.5rem;\r\n        padding-top: 1rem;\r\n        padding-bottom: 1rem;\r\n      }\r\n      .stat-figure {\r\n        grid-column-start: 2;\r\n        grid-row: span 3 / span 3;\r\n        grid-row-start: 1;\r\n        align-self: center;\r\n        justify-self: center;\r\n        place-self: center;\r\n        justify-self: end;\r\n      }\r\n      .stat-title {\r\n        grid-column-start: 1;\r\n        white-space: nowrap;\r\n        color: hsl(var(--bc) / 0.6);\r\n      }\r\n      .stat-value {\r\n        grid-column-start: 1;\r\n        white-space: nowrap;\r\n        font-size: 2.25rem;\r\n        line-height: 2.5rem;\r\n        font-weight: 800;\r\n      }\r\n      .stat-desc {\r\n        grid-column-start: 1;\r\n        white-space: nowrap;\r\n        font-size: 0.75rem;\r\n        line-height: 1rem;\r\n        color: hsl(var(--bc) / 0.6);\r\n      }\r\n      .stat-actions {\r\n        grid-column-start: 1;\r\n        white-space: nowrap;\r\n        margin-top: 1rem;\r\n      }\r\n      .steps {\r\n        display: inline-grid;\r\n        grid-auto-flow: column;\r\n        overflow: hidden;\r\n        overflow-x: auto;\r\n        counter-reset: step;\r\n        grid-auto-columns: 1fr;\r\n      }\r\n      .steps .step {\r\n        display: grid;\r\n        grid-template-columns: repeat(1, minmax(0, 1fr));\r\n        grid-template-columns: auto;\r\n        grid-template-rows: repeat(2, minmax(0, 1fr));\r\n        grid-template-rows: 40px 1fr;\r\n        align-items: center;\r\n        justify-items: center;\r\n        place-items: center;\r\n        text-align: center;\r\n        min-width: 4rem;\r\n      }\r\n      .swap {\r\n        position: relative;\r\n        display: inline-grid;\r\n        -webkit-user-select: none;\r\n           -moz-user-select: none;\r\n                user-select: none;\r\n        align-content: center;\r\n        justify-content: center;\r\n        place-content: center;\r\n        cursor: pointer;\r\n      }\r\n      .swap > * {\r\n        grid-column-start: 1;\r\n        grid-row-start: 1;\r\n        transition-duration: 300ms;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n        transition-property: transform, opacity;\r\n      }\r\n      .swap input {\r\n        -webkit-appearance: none;\r\n           -moz-appearance: none;\r\n                appearance: none;\r\n      }\r\n      .swap .swap-on,\r\n      .swap .swap-indeterminate,\r\n      .swap input:indeterminate ~ .swap-on {\r\n        opacity: 0;\r\n      }\r\n      .swap input:checked ~ .swap-off,\r\n      .swap.swap-active .swap-off,\r\n      .swap input:indeterminate ~ .swap-off {\r\n        opacity: 0;\r\n      }\r\n      .swap input:checked ~ .swap-on,\r\n      .swap-active .swap-on,\r\n      .swap input:indeterminate ~ .swap-indeterminate {\r\n        opacity: 1;\r\n      }\r\n      .tabs {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        align-items: flex-end;\r\n      }\r\n      .tab {\r\n        position: relative;\r\n        display: inline-flex;\r\n        cursor: pointer;\r\n        -webkit-user-select: none;\r\n           -moz-user-select: none;\r\n                user-select: none;\r\n        flex-wrap: wrap;\r\n        align-items: center;\r\n        justify-content: center;\r\n        text-align: center;\r\n        height: 2rem;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n        line-height: 2;\r\n        --tab-padding: 1rem;\r\n        --tw-text-opacity: 0.5;\r\n        --tab-color: hsla(var(--bc) / var(--tw-text-opacity, 1));\r\n        --tab-bg: hsla(var(--b1) / var(--tw-bg-opacity, 1));\r\n        --tab-border-color: hsla(var(--b3) / var(--tw-bg-opacity, 1));\r\n        color: var(--tab-color);\r\n        padding-left: 1rem;\r\n        padding-left: var(--tab-padding, 1rem);\r\n        padding-right: 1rem;\r\n        padding-right: var(--tab-padding, 1rem);\r\n      }\r\n      .table {\r\n        position: relative;\r\n        text-align: left;\r\n      }\r\n      .table th:first-child {\r\n        position: sticky;\r\n        position: -webkit-sticky;\r\n        left: 0px;\r\n        z-index: 11;\r\n      }\r\n      .textarea {\r\n        flex-shrink: 1;\r\n        min-height: 3rem;\r\n        padding-top: 0.5rem;\r\n        padding-bottom: 0.5rem;\r\n        padding-left: 1rem;\r\n        padding-right: 1rem;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n        line-height: 2;\r\n        border-width: 1px;\r\n        border-color: hsl(var(--bc) / var(--tw-border-opacity));\r\n        --tw-border-opacity: 0;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n        border-radius: 0.5rem;\r\n        border-radius: var(--rounded-btn, 0.5rem);\r\n      }\r\n      .toast {\r\n        position: fixed;\r\n        display: flex;\r\n        min-width: -moz-fit-content;\r\n        min-width: fit-content;\r\n        flex-direction: column;\r\n        gap: 0.5rem;\r\n        padding: 1rem;\r\n      }\r\n      .toggle {\r\n        flex-shrink: 0;\r\n        --tglbg: hsl(var(--b1));\r\n        --handleoffset: 1.5rem;\r\n        --handleoffsetcalculator: calc(var(--handleoffset) * -1);\r\n        --togglehandleborder: 0 0;\r\n        height: 1.5rem;\r\n        width: 3rem;\r\n        cursor: pointer;\r\n        -webkit-appearance: none;\r\n           -moz-appearance: none;\r\n                appearance: none;\r\n        border-width: 1px;\r\n        border-color: hsl(var(--bc) / var(--tw-border-opacity));\r\n        --tw-border-opacity: 0.2;\r\n        background-color: hsl(var(--bc) / var(--tw-bg-opacity));\r\n        --tw-bg-opacity: 0.5;\r\n        transition-duration: 300ms;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n        border-radius: 1.9rem;\r\n        border-radius: var(--rounded-badge, 1.9rem);\r\n        transition: background, box-shadow 0.2s ease-in-out;\r\n        transition: background, box-shadow var(--animation-input, 0.2s) ease-in-out;\r\n        box-shadow: var(--handleoffsetcalculator) 0 0 2px var(--tglbg) inset, 0 0 0 2px var(--tglbg) inset, var(--togglehandleborder);\r\n      }\r\n      .tooltip {\r\n        position: relative;\r\n        display: inline-block;\r\n        --tooltip-offset: calc(100% + 1px + var(--tooltip-tail, 0px));\r\n        text-align: center;\r\n        --tooltip-tail: 3px;\r\n        --tooltip-color: hsl(var(--n));\r\n        --tooltip-text-color: hsl(var(--nc));\r\n        --tooltip-tail-offset: calc(100% + 1px - var(--tooltip-tail));\r\n      }\r\n      .tooltip:before {\r\n        position: absolute;\r\n        pointer-events: none;\r\n        z-index: 1;\r\n        content: var(--tw-content);\r\n        --tw-content: attr(data-tip);\r\n        max-width: 20rem;\r\n        border-radius: 0.25rem;\r\n        padding-left: 0.5rem;\r\n        padding-right: 0.5rem;\r\n        padding-top: 0.25rem;\r\n        padding-bottom: 0.25rem;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n        background-color: var(--tooltip-color);\r\n        color: var(--tooltip-text-color);\r\n        width: -moz-max-content;\r\n        width: max-content;\r\n      }\r\n      .tooltip:before, .tooltip-top:before {\r\n        transform: translateX(-50%);\r\n        top: auto;\r\n        left: 50%;\r\n        right: auto;\r\n        bottom: var(--tooltip-offset);\r\n      }\r\n      .tooltip-bottom:before {\r\n        transform: translateX(-50%);\r\n        top: var(--tooltip-offset);\r\n        left: 50%;\r\n        right: auto;\r\n        bottom: auto;\r\n      }\r\n      .tooltip-left:before {\r\n        transform: translateY(-50%);\r\n        top: 50%;\r\n        left: auto;\r\n        right: var(--tooltip-offset);\r\n        bottom: auto;\r\n      }\r\n      .tooltip-right:before {\r\n        transform: translateY(-50%);\r\n        top: 50%;\r\n        left: var(--tooltip-offset);\r\n        right: auto;\r\n        bottom: auto;\r\n      }\r\n      .alert-info {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--in) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--inc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .alert-success {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--su) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--suc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .alert-warning {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--wa) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--wac, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .alert-error {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--er) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--erc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .avatar-group {\r\n        display: flex;\r\n        overflow: hidden;\r\n      }\r\n      .avatar-group :where(.avatar) {\r\n        overflow: hidden;\r\n        border-radius: 9999px;\r\n        border-width: 4px;\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--b1) / var(--tw-border-opacity));\r\n      }\r\n      .badge-primary {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--p) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--pc) / var(--tw-text-opacity));\r\n      }\r\n      .badge-secondary {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--s) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--s) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--sc) / var(--tw-text-opacity));\r\n      }\r\n      .badge-accent {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--a) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--a) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--ac) / var(--tw-text-opacity));\r\n      }\r\n      .badge-info {\r\n        border-color: transparent;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--in) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--inc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .badge-success {\r\n        border-color: transparent;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--su) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--suc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .badge-warning {\r\n        border-color: transparent;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--wa) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--wac, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .badge-error {\r\n        border-color: transparent;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--er) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--erc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .badge-ghost {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--b1) / var(--tw-border-opacity));\r\n        border-color: hsl(var(--b2, var(--b1)) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--b2, var(--b1)) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--bc) / var(--tw-text-opacity));\r\n      }\r\n      .badge-outline {\r\n        border-color: currentColor;\r\n        --tw-border-opacity: 0.5;\r\n        background-color: transparent;\r\n        color: currentColor;\r\n      }\r\n      .badge-outline.badge-primary {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--p) / var(--tw-text-opacity));\r\n      }\r\n      .badge-outline.badge-secondary {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--s) / var(--tw-text-opacity));\r\n      }\r\n      .badge-outline.badge-accent {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--a) / var(--tw-text-opacity));\r\n      }\r\n      .badge-outline.badge-info {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--in) / var(--tw-text-opacity));\r\n      }\r\n      .badge-outline.badge-success {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--su) / var(--tw-text-opacity));\r\n      }\r\n      .badge-outline.badge-warning {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--wa) / var(--tw-text-opacity));\r\n      }\r\n      .badge-outline.badge-error {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--er) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline .badge {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--n) / var(--tw-border-opacity));\r\n        border-color: hsl(var(--nf, var(--n)) / var(--tw-border-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-primary .badge {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--p) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--pc) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-secondary .badge {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--s) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--s) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--sc) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-accent .badge {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--a) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--a) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--ac) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline .badge.outline {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--n) / var(--tw-border-opacity));\r\n        border-color: hsl(var(--nf, var(--n)) / var(--tw-border-opacity));\r\n        background-color: transparent;\r\n      }\r\n      .btn-outline.btn-primary .badge-outline {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n        background-color: transparent;\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--p) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-secondary .badge-outline {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--s) / var(--tw-border-opacity));\r\n        background-color: transparent;\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--s) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-accent .badge-outline {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--a) / var(--tw-border-opacity));\r\n        background-color: transparent;\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--a) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-info .badge-outline {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--in) / var(--tw-border-opacity));\r\n        background-color: transparent;\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--in) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-success .badge-outline {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--su) / var(--tw-border-opacity));\r\n        background-color: transparent;\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--su) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-warning .badge-outline {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--wa) / var(--tw-border-opacity));\r\n        background-color: transparent;\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--wa) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-error .badge-outline {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--er) / var(--tw-border-opacity));\r\n        background-color: transparent;\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--er) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline:hover .badge {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--b1) / var(--tw-border-opacity));\r\n        border-color: hsl(var(--b2, var(--b1)) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--b2, var(--b1)) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--bc) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline:hover .badge.outline {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--b1) / var(--tw-border-opacity));\r\n        border-color: hsl(var(--b2, var(--b1)) / var(--tw-border-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-primary:hover .badge {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--pc) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--pc) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--p) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-primary:hover .badge.outline {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--pc) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--p) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--pf, var(--p)) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--pc) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-secondary:hover .badge {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--sc) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--sc) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--s) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-secondary:hover .badge.outline {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--sc) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--s) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--sf, var(--s)) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--sc) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-accent:hover .badge {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--ac) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--ac) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--a) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-accent:hover .badge.outline {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--ac) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--a) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--af, var(--a)) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--ac) / var(--tw-text-opacity));\r\n      }\r\n      .btm-nav>*:not(.active) {\r\n        padding-top: 0.125rem;\r\n      }\r\n      .btm-nav>*:where(.active) {\r\n        border-top-width: 2px;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n      }\r\n      .btm-nav>*.disabled,\r\n          .btm-nav>*.disabled:hover,\r\n          .btm-nav>*[disabled],\r\n          .btm-nav>*[disabled]:hover {\r\n        pointer-events: none;\r\n        --tw-border-opacity: 0;\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n        --tw-bg-opacity: 0.1;\r\n        color: hsl(var(--bc) / var(--tw-text-opacity));\r\n        --tw-text-opacity: 0.2;\r\n      }\r\n      .btm-nav>* .label {\r\n        font-size: 1rem;\r\n        line-height: 1.5rem;\r\n      }\r\n      .breadcrumbs > ul > li > a:focus, .breadcrumbs > ol > li > a:focus {\r\n        outline: 2px solid transparent;\r\n        outline-offset: 2px;\r\n      }\r\n      .breadcrumbs > ul > li > a.focus-visible, .breadcrumbs > ol > li > a.focus-visible {\r\n        outline: 2px solid currentColor;\r\n        outline-offset: 2px;\r\n      }\r\n      .breadcrumbs > ul > li > a:focus-visible, .breadcrumbs > ol > li > a:focus-visible {\r\n        outline: 2px solid currentColor;\r\n        outline-offset: 2px;\r\n      }\r\n      .breadcrumbs > ul > li + *:before, .breadcrumbs > ol > li + *:before {\r\n        content: \"\";\r\n        margin-left: 0.5rem;\r\n        margin-right: 0.75rem;\r\n        display: block;\r\n        height: 0.375rem;\r\n        width: 0.375rem;\r\n        --tw-rotate: 45deg;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n        opacity: 0.4;\r\n        border-top: 1px solid;\r\n        border-right: 1px solid;\r\n        background-color: transparent;\r\n      }\r\n      [dir=\"rtl\"] .breadcrumbs > ul > li + *:before,\r\n      [dir=\"rtl\"] .breadcrumbs > ol > li + *:before {\r\n        --tw-rotate: -135deg;\r\n      }\r\n      .btn:active:hover,\r\n        .btn:active:focus {\r\n        animation: none;\r\n        transform: scale(0.95);\r\n        transform: scale(var(--btn-focus-scale, 0.95));\r\n      }\r\n      .btn:hover,\r\n          .btn-active {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--n) / var(--tw-border-opacity));\r\n        border-color: hsl(var(--nf, var(--n)) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--nf, var(--n)) / var(--tw-bg-opacity));\r\n      }\r\n      .btn.focus-visible {\r\n        outline: 2px solid hsl(var(--nf));\r\n        outline-offset: 2px;\r\n      }\r\n      .btn:focus-visible {\r\n        outline: 2px solid hsl(var(--nf));\r\n        outline-offset: 2px;\r\n      }\r\n      .btn-primary {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--p) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--pc) / var(--tw-text-opacity));\r\n      }\r\n      .btn-primary:hover,\r\n          .btn-primary.btn-active {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n        border-color: hsl(var(--pf, var(--p)) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--p) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--pf, var(--p)) / var(--tw-bg-opacity));\r\n      }\r\n      .btn-primary.focus-visible {\r\n        outline: 2px solid hsl(var(--p));\r\n      }\r\n      .btn-primary:focus-visible {\r\n        outline: 2px solid hsl(var(--p));\r\n      }\r\n      .btn-secondary {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--s) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--s) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--sc) / var(--tw-text-opacity));\r\n      }\r\n      .btn-secondary:hover,\r\n          .btn-secondary.btn-active {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--s) / var(--tw-border-opacity));\r\n        border-color: hsl(var(--sf, var(--s)) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--s) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--sf, var(--s)) / var(--tw-bg-opacity));\r\n      }\r\n      .btn-secondary.focus-visible {\r\n        outline: 2px solid hsl(var(--s));\r\n      }\r\n      .btn-secondary:focus-visible {\r\n        outline: 2px solid hsl(var(--s));\r\n      }\r\n      .btn-accent {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--a) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--a) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--ac) / var(--tw-text-opacity));\r\n      }\r\n      .btn-accent:hover,\r\n          .btn-accent.btn-active {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--a) / var(--tw-border-opacity));\r\n        border-color: hsl(var(--af, var(--a)) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--a) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--af, var(--a)) / var(--tw-bg-opacity));\r\n      }\r\n      .btn-accent.focus-visible {\r\n        outline: 2px solid hsl(var(--a));\r\n      }\r\n      .btn-accent:focus-visible {\r\n        outline: 2px solid hsl(var(--a));\r\n      }\r\n      .btn-info {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--in) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--in) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--inc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .btn-info:hover,\r\n          .btn-info.btn-active {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--in) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--in) / var(--tw-bg-opacity));\r\n      }\r\n      .btn-info.focus-visible {\r\n        outline: 2px solid hsl(var(--in));\r\n      }\r\n      .btn-info:focus-visible {\r\n        outline: 2px solid hsl(var(--in));\r\n      }\r\n      .btn-success {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--su) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--su) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--suc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .btn-success:hover,\r\n          .btn-success.btn-active {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--su) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--su) / var(--tw-bg-opacity));\r\n      }\r\n      .btn-success.focus-visible {\r\n        outline: 2px solid hsl(var(--su));\r\n      }\r\n      .btn-success:focus-visible {\r\n        outline: 2px solid hsl(var(--su));\r\n      }\r\n      .btn-warning {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--wa) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--wa) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--wac, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .btn-warning:hover,\r\n          .btn-warning.btn-active {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--wa) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--wa) / var(--tw-bg-opacity));\r\n      }\r\n      .btn-warning.focus-visible {\r\n        outline: 2px solid hsl(var(--wa));\r\n      }\r\n      .btn-warning:focus-visible {\r\n        outline: 2px solid hsl(var(--wa));\r\n      }\r\n      .btn-error {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--er) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--er) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--erc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .btn-error:hover,\r\n          .btn-error.btn-active {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--er) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--er) / var(--tw-bg-opacity));\r\n      }\r\n      .btn-error.focus-visible {\r\n        outline: 2px solid hsl(var(--er));\r\n      }\r\n      .btn-error:focus-visible {\r\n        outline: 2px solid hsl(var(--er));\r\n      }\r\n      .btn.glass:hover,\r\n          .btn.glass.btn-active {\r\n        --glass-opacity: 25%;\r\n        --glass-border-opacity: 15%;\r\n      }\r\n      .btn.glass.focus-visible {\r\n        outline: 2px solid currentColor;\r\n      }\r\n      .btn.glass:focus-visible {\r\n        outline: 2px solid currentColor;\r\n      }\r\n      .btn-ghost {\r\n        border-width: 1px;\r\n        border-color: transparent;\r\n        background-color: transparent;\r\n        color: currentColor;\r\n      }\r\n      .btn-ghost:hover,\r\n          .btn-ghost.btn-active {\r\n        --tw-border-opacity: 0;\r\n        background-color: hsl(var(--bc) / var(--tw-bg-opacity));\r\n        --tw-bg-opacity: 0.2;\r\n      }\r\n      .btn-ghost.focus-visible {\r\n        outline: 2px solid currentColor;\r\n      }\r\n      .btn-ghost:focus-visible {\r\n        outline: 2px solid currentColor;\r\n      }\r\n      .btn-link {\r\n        border-color: transparent;\r\n        background-color: transparent;\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--p) / var(--tw-text-opacity));\r\n        text-decoration-line: underline;\r\n      }\r\n      .btn-link:hover,\r\n          .btn-link.btn-active {\r\n        border-color: transparent;\r\n        background-color: transparent;\r\n        text-decoration-line: underline;\r\n      }\r\n      .btn-link.focus-visible {\r\n        outline: 2px solid currentColor;\r\n      }\r\n      .btn-link:focus-visible {\r\n        outline: 2px solid currentColor;\r\n      }\r\n      .btn-outline {\r\n        border-color: currentColor;\r\n        background-color: transparent;\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--bc) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline:hover,\r\n          .btn-outline.btn-active {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--bc) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--bc) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--b1) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-primary {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--p) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-primary:hover,\r\n            .btn-outline.btn-primary.btn-active {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n        border-color: hsl(var(--pf, var(--p)) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--p) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--pf, var(--p)) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--pc) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-secondary {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--s) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-secondary:hover,\r\n            .btn-outline.btn-secondary.btn-active {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--s) / var(--tw-border-opacity));\r\n        border-color: hsl(var(--sf, var(--s)) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--s) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--sf, var(--s)) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--sc) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-accent {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--a) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-accent:hover,\r\n            .btn-outline.btn-accent.btn-active {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--a) / var(--tw-border-opacity));\r\n        border-color: hsl(var(--af, var(--a)) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--a) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--af, var(--a)) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--ac) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-success {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--su) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-success:hover,\r\n            .btn-outline.btn-success.btn-active {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--su) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--su) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--suc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-info {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--in) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-info:hover,\r\n            .btn-outline.btn-info.btn-active {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--in) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--in) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--inc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-warning {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--wa) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-warning:hover,\r\n            .btn-outline.btn-warning.btn-active {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--wa) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--wa) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--wac, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-error {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--er) / var(--tw-text-opacity));\r\n      }\r\n      .btn-outline.btn-error:hover,\r\n            .btn-outline.btn-error.btn-active {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--er) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--er) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--erc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .btn-disabled,\r\n        .btn-disabled:hover,\r\n        .btn[disabled],\r\n        .btn[disabled]:hover {\r\n        --tw-border-opacity: 0;\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n        --tw-bg-opacity: 0.2;\r\n        color: hsl(var(--bc) / var(--tw-text-opacity));\r\n        --tw-text-opacity: 0.2;\r\n      }\r\n      .btn.loading.btn-square:before,\r\n          .btn.loading.btn-circle:before {\r\n        margin-right: 0px;\r\n      }\r\n      .btn.\\!loading.btn-square:before,\r\n          .btn.\\!loading.btn-circle:before {\r\n        margin-right: 0px !important;\r\n      }\r\n      .btn.loading.btn-xl:before,\r\n          .btn.loading.btn-lg:before {\r\n        height: 1.25rem;\r\n        width: 1.25rem;\r\n      }\r\n      .btn.\\!loading.btn-xl:before,\r\n          .btn.\\!loading.btn-lg:before {\r\n        height: 1.25rem !important;\r\n        width: 1.25rem !important;\r\n      }\r\n      .btn.loading.btn-sm:before,\r\n          .btn.loading.btn-xs:before {\r\n        height: 0.75rem;\r\n        width: 0.75rem;\r\n      }\r\n      .btn.\\!loading.btn-sm:before,\r\n          .btn.\\!loading.btn-xs:before {\r\n        height: 0.75rem !important;\r\n        width: 0.75rem !important;\r\n      }\r\n      .btn-group > input[type=\"radio\"]:checked.btn,\r\n        .btn-group > .btn-active {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--p) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--pc) / var(--tw-text-opacity));\r\n      }\r\n      .btn-group > input[type=\"radio\"]:checked.btn.focus-visible, .btn-group > .btn-active.focus-visible {\r\n        outline: 2px solid hsl(var(--p));\r\n      }\r\n      .btn-group > input[type=\"radio\"]:checked.btn:focus-visible, .btn-group > .btn-active:focus-visible {\r\n        outline: 2px solid hsl(var(--p));\r\n      }\r\n      @keyframes button-pop {\r\n      \r\n        0% {\r\n          transform: scale(0.95);\r\n          transform: scale(var(--btn-focus-scale, 0.95));\r\n        }\r\n      \r\n        40% {\r\n          transform: scale(1.02);\r\n        }\r\n      \r\n        100% {\r\n          transform: scale(1);\r\n        }\r\n      }\r\n      [dir=\"ltr\"] .card :where(figure:first-child) {\r\n        border-top-left-radius: inherit;\r\n      }\r\n      [dir=\"rtl\"] .card :where(figure:first-child) {\r\n        border-top-right-radius: inherit;\r\n      }\r\n      [dir=\"ltr\"] .card :where(figure:first-child) {\r\n        border-top-right-radius: inherit;\r\n      }\r\n      [dir=\"rtl\"] .card :where(figure:first-child) {\r\n        border-top-left-radius: inherit;\r\n      }\r\n      [dir=\"ltr\"] .card :where(figure:first-child) {\r\n        border-bottom-left-radius: 0;\r\n        border-bottom-left-radius: initial;\r\n      }\r\n      [dir=\"rtl\"] .card :where(figure:first-child) {\r\n        border-bottom-right-radius: 0;\r\n        border-bottom-right-radius: initial;\r\n      }\r\n      [dir=\"ltr\"] .card :where(figure:first-child) {\r\n        border-bottom-right-radius: 0;\r\n        border-bottom-right-radius: initial;\r\n      }\r\n      [dir=\"rtl\"] .card :where(figure:first-child) {\r\n        border-bottom-left-radius: 0;\r\n        border-bottom-left-radius: initial;\r\n      }\r\n      .card :where(figure:first-child) {\r\n        overflow: hidden;\r\n      }\r\n      [dir=\"ltr\"] .card :where(figure:last-child) {\r\n        border-top-left-radius: 0;\r\n        border-top-left-radius: initial;\r\n      }\r\n      [dir=\"rtl\"] .card :where(figure:last-child) {\r\n        border-top-right-radius: 0;\r\n        border-top-right-radius: initial;\r\n      }\r\n      [dir=\"ltr\"] .card :where(figure:last-child) {\r\n        border-top-right-radius: 0;\r\n        border-top-right-radius: initial;\r\n      }\r\n      [dir=\"rtl\"] .card :where(figure:last-child) {\r\n        border-top-left-radius: 0;\r\n        border-top-left-radius: initial;\r\n      }\r\n      [dir=\"ltr\"] .card :where(figure:last-child) {\r\n        border-bottom-left-radius: inherit;\r\n      }\r\n      [dir=\"rtl\"] .card :where(figure:last-child) {\r\n        border-bottom-right-radius: inherit;\r\n      }\r\n      [dir=\"ltr\"] .card :where(figure:last-child) {\r\n        border-bottom-right-radius: inherit;\r\n      }\r\n      [dir=\"rtl\"] .card :where(figure:last-child) {\r\n        border-bottom-left-radius: inherit;\r\n      }\r\n      .card :where(figure:last-child) {\r\n        overflow: hidden;\r\n      }\r\n      .card.focus-visible {\r\n        outline: 2px solid currentColor;\r\n        outline-offset: 2px;\r\n      }\r\n      .card:focus-visible {\r\n        outline: 2px solid currentColor;\r\n        outline-offset: 2px;\r\n      }\r\n      .card.bordered {\r\n        border-width: 1px;\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--b1) / var(--tw-border-opacity));\r\n        border-color: hsl(var(--b2, var(--b1)) / var(--tw-border-opacity));\r\n      }\r\n      .card-bordered {\r\n        border-width: 1px;\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--b1) / var(--tw-border-opacity));\r\n        border-color: hsl(var(--b2, var(--b1)) / var(--tw-border-opacity));\r\n      }\r\n      .card.compact .card-body {\r\n        padding: 1rem;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n      }\r\n      .card-title {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 0.5rem;\r\n        font-size: 1.25rem;\r\n        line-height: 1.75rem;\r\n        font-weight: 600;\r\n      }\r\n      .card.image-full :where(figure) {\r\n        overflow: hidden;\r\n        border-radius: inherit;\r\n      }\r\n      .carousel::-webkit-scrollbar {\r\n        display: none;\r\n      }\r\n      .chat-bubble-primary {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--p) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--pc) / var(--tw-text-opacity));\r\n      }\r\n      .chat-bubble-secondary {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--s) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--sc) / var(--tw-text-opacity));\r\n      }\r\n      .chat-bubble-accent {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--a) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--ac) / var(--tw-text-opacity));\r\n      }\r\n      .chat-bubble-info {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--in) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--inc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .chat-bubble-success {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--su) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--suc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .chat-bubble-warning {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--wa) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--wac, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .chat-bubble-error {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--er) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--erc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .checkbox.focus-visible {\r\n        outline: 2px solid hsl(var(--bc));\r\n        outline-offset: 2px;\r\n      }\r\n      .checkbox:focus-visible {\r\n        outline: 2px solid hsl(var(--bc));\r\n        outline-offset: 2px;\r\n      }\r\n      .\\!checkbox.focus-visible {\r\n        outline: 2px solid hsl(var(--bc)) !important;\r\n        outline-offset: 2px !important;\r\n      }\r\n      .\\!checkbox:focus-visible {\r\n        outline: 2px solid hsl(var(--bc)) !important;\r\n        outline-offset: 2px !important;\r\n      }\r\n      .checkbox:checked,\r\n        .checkbox[checked=\"true\"],\r\n        .checkbox[aria-checked=\"true\"] {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--bc) / var(--tw-bg-opacity));\r\n        background-repeat: no-repeat;\r\n        animation: checkmark 0.2s ease-in-out;\r\n        animation: checkmark var(--animation-input, 0.2s) ease-in-out;\r\n        background-image: linear-gradient(-45deg, transparent 65%, hsl(var(--chkbg)) 65.99%), linear-gradient(45deg, transparent 75%, hsl(var(--chkbg)) 75.99%), linear-gradient(-45deg, hsl(var(--chkbg)) 40%, transparent 40.99%), linear-gradient(45deg, hsl(var(--chkbg)) 30%, hsl(var(--chkfg)) 30.99%, hsl(var(--chkfg)) 40%, transparent 40.99%), linear-gradient(-45deg, hsl(var(--chkfg)) 50%, hsl(var(--chkbg)) 50.99%);\r\n      }\r\n      .\\!checkbox:checked,\r\n        .\\!checkbox[checked=\"true\"],\r\n        .\\!checkbox[aria-checked=\"true\"] {\r\n        --tw-bg-opacity: 1 !important;\r\n        background-color: hsl(var(--bc) / var(--tw-bg-opacity)) !important;\r\n        background-repeat: no-repeat !important;\r\n        animation: checkmark 0.2s ease-in-out !important;\r\n        animation: checkmark var(--animation-input, 0.2s) ease-in-out !important;\r\n        background-image: linear-gradient(-45deg, transparent 65%, hsl(var(--chkbg)) 65.99%), linear-gradient(45deg, transparent 75%, hsl(var(--chkbg)) 75.99%), linear-gradient(-45deg, hsl(var(--chkbg)) 40%, transparent 40.99%), linear-gradient(45deg, hsl(var(--chkbg)) 30%, hsl(var(--chkfg)) 30.99%, hsl(var(--chkfg)) 40%, transparent 40.99%), linear-gradient(-45deg, hsl(var(--chkfg)) 50%, hsl(var(--chkbg)) 50.99%) !important;\r\n      }\r\n      .checkbox:indeterminate {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--bc) / var(--tw-bg-opacity));\r\n        background-repeat: no-repeat;\r\n        animation: checkmark 0.2s ease-in-out;\r\n        animation: checkmark var(--animation-input, 0.2s) ease-in-out;\r\n        background-image: linear-gradient(90deg, transparent 80%, hsl(var(--chkbg)) 80%), linear-gradient(-90deg, transparent 80%, hsl(var(--chkbg)) 80%), linear-gradient(0deg, hsl(var(--chkbg)) 43%, hsl(var(--chkfg)) 43%, hsl(var(--chkfg)) 57%, hsl(var(--chkbg)) 57%);\r\n      }\r\n      .\\!checkbox:indeterminate {\r\n        --tw-bg-opacity: 1 !important;\r\n        background-color: hsl(var(--bc) / var(--tw-bg-opacity)) !important;\r\n        background-repeat: no-repeat !important;\r\n        animation: checkmark 0.2s ease-in-out !important;\r\n        animation: checkmark var(--animation-input, 0.2s) ease-in-out !important;\r\n        background-image: linear-gradient(90deg, transparent 80%, hsl(var(--chkbg)) 80%), linear-gradient(-90deg, transparent 80%, hsl(var(--chkbg)) 80%), linear-gradient(0deg, hsl(var(--chkbg)) 43%, hsl(var(--chkfg)) 43%, hsl(var(--chkfg)) 57%, hsl(var(--chkbg)) 57%) !important;\r\n      }\r\n      .checkbox-primary {\r\n        --chkbg: var(--p);\r\n        --chkfg: var(--pc);\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n      }\r\n      .checkbox-primary:hover {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n      }\r\n      .checkbox-primary.focus-visible {\r\n        outline: 2px solid hsl(var(--p));\r\n      }\r\n      .checkbox-primary:focus-visible {\r\n        outline: 2px solid hsl(var(--p));\r\n      }\r\n      .checkbox-primary:checked,\r\n          .checkbox-primary[checked=\"true\"],\r\n          .checkbox-primary[aria-checked=\"true\"] {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--p) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--pc) / var(--tw-text-opacity));\r\n      }\r\n      .checkbox-secondary {\r\n        --chkbg: var(--s);\r\n        --chkfg: var(--sc);\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--s) / var(--tw-border-opacity));\r\n      }\r\n      .checkbox-secondary:hover {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--s) / var(--tw-border-opacity));\r\n      }\r\n      .checkbox-secondary.focus-visible {\r\n        outline: 2px solid hsl(var(--s));\r\n      }\r\n      .checkbox-secondary:focus-visible {\r\n        outline: 2px solid hsl(var(--s));\r\n      }\r\n      .checkbox-secondary:checked,\r\n          .checkbox-secondary[checked=\"true\"],\r\n          .checkbox-secondary[aria-checked=\"true\"] {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--s) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--s) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--sc) / var(--tw-text-opacity));\r\n      }\r\n      .checkbox-accent {\r\n        --chkbg: var(--a);\r\n        --chkfg: var(--ac);\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--a) / var(--tw-border-opacity));\r\n      }\r\n      .checkbox-accent:hover {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--a) / var(--tw-border-opacity));\r\n      }\r\n      .checkbox-accent.focus-visible {\r\n        outline: 2px solid hsl(var(--a));\r\n      }\r\n      .checkbox-accent:focus-visible {\r\n        outline: 2px solid hsl(var(--a));\r\n      }\r\n      .checkbox-accent:checked,\r\n          .checkbox-accent[checked=\"true\"],\r\n          .checkbox-accent[aria-checked=\"true\"] {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--a) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--a) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--ac) / var(--tw-text-opacity));\r\n      }\r\n      .checkbox-success {\r\n        --chkbg: var(--su);\r\n        --chkfg: var(--suc);\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--su) / var(--tw-border-opacity));\r\n      }\r\n      .checkbox-success:hover {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--su) / var(--tw-border-opacity));\r\n      }\r\n      .checkbox-success.focus-visible {\r\n        outline: 2px solid hsl(var(--su));\r\n      }\r\n      .checkbox-success:focus-visible {\r\n        outline: 2px solid hsl(var(--su));\r\n      }\r\n      .checkbox-success:checked,\r\n          .checkbox-success[checked=\"true\"],\r\n          .checkbox-success[aria-checked=true] {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--su) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--su) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--suc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .checkbox-warning {\r\n        --chkbg: var(--wa);\r\n        --chkfg: var(--wac);\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--wa) / var(--tw-border-opacity));\r\n      }\r\n      .checkbox-warning:hover {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--wa) / var(--tw-border-opacity));\r\n      }\r\n      .checkbox-warning.focus-visible {\r\n        outline: 2px solid hsl(var(--wa));\r\n      }\r\n      .checkbox-warning:focus-visible {\r\n        outline: 2px solid hsl(var(--wa));\r\n      }\r\n      .checkbox-warning:checked,\r\n          .checkbox-warning[checked=\"true\"],\r\n          .checkbox-warning[aria-checked=true] {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--wa) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--wa) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--wac, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .checkbox-info {\r\n        --chkbg: var(--in);\r\n        --chkfg: var(--inc);\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--in) / var(--tw-border-opacity));\r\n      }\r\n      .checkbox-info:hover {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--in) / var(--tw-border-opacity));\r\n      }\r\n      .checkbox-info.focus-visible {\r\n        outline: 2px solid hsl(var(--in));\r\n      }\r\n      .checkbox-info:focus-visible {\r\n        outline: 2px solid hsl(var(--in));\r\n      }\r\n      .checkbox-info:checked,\r\n          .checkbox-info[checked=\"true\"],\r\n          .checkbox-info[aria-checked=true] {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--in) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--in) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--inc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .checkbox-error {\r\n        --chkbg: var(--er);\r\n        --chkfg: var(--erc);\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--er) / var(--tw-border-opacity));\r\n      }\r\n      .checkbox-error:hover {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--er) / var(--tw-border-opacity));\r\n      }\r\n      .checkbox-error.focus-visible {\r\n        outline: 2px solid hsl(var(--er));\r\n      }\r\n      .checkbox-error:focus-visible {\r\n        outline: 2px solid hsl(var(--er));\r\n      }\r\n      .checkbox-error:checked,\r\n          .checkbox-error[checked=\"true\"],\r\n          .checkbox-error[aria-checked=true] {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--er) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--er) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--erc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .checkbox:disabled {\r\n        cursor: not-allowed;\r\n        border-color: transparent;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--bc) / var(--tw-bg-opacity));\r\n        opacity: 0.2;\r\n      }\r\n      .\\!checkbox:disabled {\r\n        cursor: not-allowed !important;\r\n        border-color: transparent !important;\r\n        --tw-bg-opacity: 1 !important;\r\n        background-color: hsl(var(--bc) / var(--tw-bg-opacity)) !important;\r\n        opacity: 0.2 !important;\r\n      }\r\n      @keyframes checkmark {\r\n      \r\n        0% {\r\n          background-position-y: 5px;\r\n        }\r\n      \r\n        50% {\r\n          background-position-y: -2px;\r\n        }\r\n      \r\n        100% {\r\n          background-position-y: 0;\r\n        }\r\n      }\r\n      .checkbox-mark {\r\n        display: none;\r\n      }\r\n      [dir=\"rtl\"] .checkbox:checked,\r\n          [dir=\"rtl\"] .checkbox[checked=\"true\"],\r\n          [dir=\"rtl\"] .checkbox[aria-checked=\"true\"] {\r\n        background-image: linear-gradient(45deg, transparent 65%, hsl(var(--chkbg)) 65.99%), linear-gradient(-45deg, transparent 75%, hsl(var(--chkbg)) 75.99%), linear-gradient(45deg, hsl(var(--chkbg)) 40%, transparent 40.99%), linear-gradient(-45deg, hsl(var(--chkbg)) 30%, hsl(var(--chkfg)) 30.99%, hsl(var(--chkfg)) 40%, transparent 40.99%), linear-gradient(45deg, hsl(var(--chkfg)) 50%, hsl(var(--chkbg)) 50.99%);\r\n      }\r\n      [dir=\"rtl\"] .\\!checkbox:checked,\r\n          [dir=\"rtl\"] .\\!checkbox[checked=\"true\"],\r\n          [dir=\"rtl\"] .\\!checkbox[aria-checked=\"true\"] {\r\n        background-image: linear-gradient(45deg, transparent 65%, hsl(var(--chkbg)) 65.99%), linear-gradient(-45deg, transparent 75%, hsl(var(--chkbg)) 75.99%), linear-gradient(45deg, hsl(var(--chkbg)) 40%, transparent 40.99%), linear-gradient(-45deg, hsl(var(--chkbg)) 30%, hsl(var(--chkfg)) 30.99%, hsl(var(--chkfg)) 40%, transparent 40.99%), linear-gradient(45deg, hsl(var(--chkfg)) 50%, hsl(var(--chkbg)) 50.99%) !important;\r\n      }\r\n      .collapse.focus-visible {\r\n        outline: 2px solid hsl(var(--nf));\r\n        outline-offset: 2px;\r\n      }\r\n      .collapse:focus-visible {\r\n        outline: 2px solid hsl(var(--nf));\r\n        outline-offset: 2px;\r\n      }\r\n      .collapse-arrow .collapse-title:after {\r\n        position: absolute;\r\n        display: block;\r\n        height: 0.5rem;\r\n        width: 0.5rem;\r\n        --tw-translate-y: -100%;\r\n        --tw-rotate: 45deg;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n        transition-property: all;\r\n        transition-duration: 150ms;\r\n        transition-duration: 0.2s;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n        top: 50%;\r\n        right: 1.4rem;\r\n        content: \"\";\r\n        transform-origin: 75% 75%;\r\n        box-shadow: 2px 2px;\r\n        pointer-events: none;\r\n      }\r\n      [dir=\"rtl\"] .collapse-arrow .collapse-title:after {\r\n        --tw-rotate: -45deg;\r\n      }\r\n      .collapse-plus .collapse-title:after {\r\n        position: absolute;\r\n        display: block;\r\n        height: 0.5rem;\r\n        width: 0.5rem;\r\n        transition-property: all;\r\n        transition-duration: 300ms;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n        top: 0.9rem;\r\n        right: 1.4rem;\r\n        content: \"+\";\r\n        pointer-events: none;\r\n      }\r\n      .collapse:not(.collapse-open):not(.collapse-close) input[type=\"checkbox\"],\r\n      .collapse:not(.collapse-open):not(.collapse-close) .collapse-title {\r\n        cursor: pointer;\r\n      }\r\n      .collapse:focus:not(.collapse-open):not(.collapse-close) .collapse-title {\r\n        cursor: inherit;\r\n      }\r\n      .collapse-title {\r\n        position: relative;\r\n      }\r\n      :where(.collapse > input[type=\"checkbox\"]) {\r\n        z-index: 1;\r\n      }\r\n      .collapse-title,\r\n      :where(.collapse > input[type=\"checkbox\"]) {\r\n        width: 100%;\r\n        padding: 1rem;\r\n        padding-right: 3rem;\r\n        min-height: 3.75rem;\r\n        transition: background-color 0.2s ease-in-out;\r\n      }\r\n      .collapse-open :where(.collapse-content),\r\n      .collapse:focus:not(.collapse-close) :where(.collapse-content),\r\n      .collapse:not(.collapse-close) :where(input[type=\"checkbox\"]:checked ~ .collapse-content) {\r\n        padding-bottom: 1rem;\r\n        transition: padding 0.2s ease-in-out, background-color 0.2s ease-in-out;\r\n      }\r\n      .collapse-open.collapse-arrow .collapse-title:after,\r\n      .collapse-arrow:focus:not(.collapse-close) .collapse-title:after,\r\n      .collapse-arrow:not(.collapse-close) input[type=\"checkbox\"]:checked ~ .collapse-title:after {\r\n        --tw-translate-y: -50%;\r\n        --tw-rotate: 225deg;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      [dir=\"rtl\"] .collapse-open.collapse-arrow .collapse-title:after,\r\n      [dir=\"rtl\"] .collapse-arrow:focus:not(.collapse-close) .collapse-title:after,\r\n      [dir=\"rtl\"] .collapse-arrow:not(.collapse-close) input[type=\"checkbox\"]:checked ~ .collapse-title:after {\r\n        --tw-rotate: 135deg;\r\n      }\r\n      .collapse-open.collapse-plus .collapse-title:after,\r\n      .collapse-plus:focus:not(.collapse-close) .collapse-title:after,\r\n      .collapse-plus:not(.collapse-close) input[type=\"checkbox\"]:checked ~ .collapse-title:after {\r\n        content: \"−\";\r\n      }\r\n      .divider:before {\r\n        background-color: hsl(var(--bc) / var(--tw-bg-opacity));\r\n        --tw-bg-opacity: 0.1;\r\n      }\r\n      .divider:after {\r\n        background-color: hsl(var(--bc) / var(--tw-bg-opacity));\r\n        --tw-bg-opacity: 0.1;\r\n      }\r\n      .divider:not(:empty) {\r\n        gap: 1rem;\r\n      }\r\n      .drawer.drawer-end > .drawer-toggle:checked ~ .drawer-content {\r\n        --tw-translate-x: -0.5rem;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .drawer-toggle:checked ~ .drawer-content {\r\n        --tw-translate-x: 0.5rem;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .drawer-toggle.focus-visible ~ .drawer-content .drawer-button {\r\n        outline: 2px solid hsl(var(--nf));\r\n        outline-offset: 2px;\r\n      }\r\n      .drawer-toggle:focus-visible ~ .drawer-content .drawer-button {\r\n        outline: 2px solid hsl(var(--nf));\r\n        outline-offset: 2px;\r\n      }\r\n      .drawer-toggle.focus-visible ~ .drawer-content .drawer-button.btn-primary {\r\n        outline: 2px solid hsl(var(--p));\r\n      }\r\n      .drawer-toggle:focus-visible ~ .drawer-content .drawer-button.btn-primary {\r\n        outline: 2px solid hsl(var(--p));\r\n      }\r\n      .drawer-toggle.focus-visible ~ .drawer-content .drawer-button.btn-secondary {\r\n        outline: 2px solid hsl(var(--s));\r\n      }\r\n      .drawer-toggle:focus-visible ~ .drawer-content .drawer-button.btn-secondary {\r\n        outline: 2px solid hsl(var(--s));\r\n      }\r\n      .drawer-toggle.focus-visible ~ .drawer-content .drawer-button.btn-accent {\r\n        outline: 2px solid hsl(var(--a));\r\n      }\r\n      .drawer-toggle:focus-visible ~ .drawer-content .drawer-button.btn-accent {\r\n        outline: 2px solid hsl(var(--a));\r\n      }\r\n      .drawer-toggle.focus-visible ~ .drawer-content .drawer-button.btn-info {\r\n        outline: 2px solid hsl(var(--in));\r\n      }\r\n      .drawer-toggle:focus-visible ~ .drawer-content .drawer-button.btn-info {\r\n        outline: 2px solid hsl(var(--in));\r\n      }\r\n      .drawer-toggle.focus-visible ~ .drawer-content .drawer-button.btn-success {\r\n        outline: 2px solid hsl(var(--su));\r\n      }\r\n      .drawer-toggle:focus-visible ~ .drawer-content .drawer-button.btn-success {\r\n        outline: 2px solid hsl(var(--su));\r\n      }\r\n      .drawer-toggle.focus-visible ~ .drawer-content .drawer-button.btn-warning {\r\n        outline: 2px solid hsl(var(--wa));\r\n      }\r\n      .drawer-toggle:focus-visible ~ .drawer-content .drawer-button.btn-warning {\r\n        outline: 2px solid hsl(var(--wa));\r\n      }\r\n      .drawer-toggle.focus-visible ~ .drawer-content .drawer-button.btn-error {\r\n        outline: 2px solid hsl(var(--er));\r\n      }\r\n      .drawer-toggle:focus-visible ~ .drawer-content .drawer-button.btn-error {\r\n        outline: 2px solid hsl(var(--er));\r\n      }\r\n      .drawer-toggle.focus-visible ~ .drawer-content .drawer-button.glass {\r\n        outline: 2px solid currentColor;\r\n      }\r\n      .drawer-toggle:focus-visible ~ .drawer-content .drawer-button.glass {\r\n        outline: 2px solid currentColor;\r\n      }\r\n      .drawer-toggle.focus-visible ~ .drawer-content .drawer-button.btn-ghost {\r\n        outline: 2px solid currentColor;\r\n      }\r\n      .drawer-toggle:focus-visible ~ .drawer-content .drawer-button.btn-ghost {\r\n        outline: 2px solid currentColor;\r\n      }\r\n      .drawer-toggle.focus-visible ~ .drawer-content .drawer-button.btn-link {\r\n        outline: 2px solid currentColor;\r\n      }\r\n      .drawer-toggle:focus-visible ~ .drawer-content .drawer-button.btn-link {\r\n        outline: 2px solid currentColor;\r\n      }\r\n      .dropdown.dropdown-open .dropdown-content,\r\n      .dropdown.dropdown-hover:hover .dropdown-content,\r\n      .dropdown:focus .dropdown-content,\r\n      .dropdown[focus-within] .dropdown-content {\r\n        --tw-scale-x: 1;\r\n        --tw-scale-y: 1;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .dropdown.dropdown-open .dropdown-content,\r\n      .dropdown.dropdown-hover:hover .dropdown-content,\r\n      .dropdown:focus .dropdown-content,\r\n      .dropdown:focus-within .dropdown-content {\r\n        --tw-scale-x: 1;\r\n        --tw-scale-y: 1;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .file-input-bordered {\r\n        --tw-border-opacity: 0.2;\r\n      }\r\n      .file-input:focus {\r\n        outline: 2px solid hsla(var(--bc) / 0.2);\r\n        outline-offset: 2px;\r\n      }\r\n      .file-input-ghost {\r\n        --tw-bg-opacity: 0.05;\r\n      }\r\n      .file-input-ghost:focus {\r\n        --tw-bg-opacity: 1;\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--bc) / var(--tw-text-opacity));\r\n        box-shadow: none;\r\n      }\r\n      .file-input-ghost::file-selector-button {\r\n        border-width: 1px;\r\n        border-color: transparent;\r\n        background-color: transparent;\r\n        color: currentColor;\r\n      }\r\n      .file-input-primary {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n      }\r\n      .file-input-primary:focus {\r\n        outline: 2px solid hsl(var(--p));\r\n      }\r\n      .file-input-primary::file-selector-button {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--p) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--pc) / var(--tw-text-opacity));\r\n      }\r\n      .file-input-secondary {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--s) / var(--tw-border-opacity));\r\n      }\r\n      .file-input-secondary:focus {\r\n        outline: 2px solid hsl(var(--s));\r\n      }\r\n      .file-input-secondary::file-selector-button {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--s) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--s) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--sc) / var(--tw-text-opacity));\r\n      }\r\n      .file-input-accent {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--a) / var(--tw-border-opacity));\r\n      }\r\n      .file-input-accent:focus {\r\n        outline: 2px solid hsl(var(--a));\r\n      }\r\n      .file-input-accent::file-selector-button {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--a) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--a) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--ac) / var(--tw-text-opacity));\r\n      }\r\n      .file-input-info {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--in) / var(--tw-border-opacity));\r\n      }\r\n      .file-input-info:focus {\r\n        outline: 2px solid hsl(var(--in));\r\n      }\r\n      .file-input-info::file-selector-button {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--in) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--in) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--inc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .file-input-success {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--su) / var(--tw-border-opacity));\r\n      }\r\n      .file-input-success:focus {\r\n        outline: 2px solid hsl(var(--su));\r\n      }\r\n      .file-input-success::file-selector-button {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--su) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--su) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--suc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .file-input-warning {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--wa) / var(--tw-border-opacity));\r\n      }\r\n      .file-input-warning:focus {\r\n        outline: 2px solid hsl(var(--wa));\r\n      }\r\n      .file-input-warning::file-selector-button {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--wa) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--wa) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--wac, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .file-input-error {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--er) / var(--tw-border-opacity));\r\n      }\r\n      .file-input-error:focus {\r\n        outline: 2px solid hsl(var(--er));\r\n      }\r\n      .file-input-error::file-selector-button {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--er) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--er) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--erc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .file-input-disabled,\r\n        .file-input[disabled] {\r\n        cursor: not-allowed;\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--b1) / var(--tw-border-opacity));\r\n        border-color: hsl(var(--b2, var(--b1)) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--b2, var(--b1)) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 0.2;\r\n      }\r\n      .file-input-disabled::-moz-placeholder, .file-input[disabled]::-moz-placeholder {\r\n        color: hsl(var(--bc) / var(--tw-placeholder-opacity));\r\n        --tw-placeholder-opacity: 0.2;\r\n      }\r\n      .file-input-disabled::placeholder,\r\n        .file-input[disabled]::placeholder {\r\n        color: hsl(var(--bc) / var(--tw-placeholder-opacity));\r\n        --tw-placeholder-opacity: 0.2;\r\n      }\r\n      .file-input-disabled::file-selector-button, .file-input[disabled]::file-selector-button {\r\n        --tw-border-opacity: 0;\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n        --tw-bg-opacity: 0.2;\r\n        color: hsl(var(--bc) / var(--tw-text-opacity));\r\n        --tw-text-opacity: 0.2;\r\n      }\r\n      .footer-title {\r\n        margin-bottom: 0.5rem;\r\n        font-weight: 700;\r\n        text-transform: uppercase;\r\n        opacity: 0.5;\r\n      }\r\n      .label-text {\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--bc) / var(--tw-text-opacity));\r\n      }\r\n      .label-text-alt {\r\n        font-size: 0.75rem;\r\n        line-height: 1rem;\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--bc) / var(--tw-text-opacity));\r\n      }\r\n      .label a:hover {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--bc) / var(--tw-text-opacity));\r\n      }\r\n      .input[list]::-webkit-calendar-picker-indicator {\r\n        line-height: 1em;\r\n      }\r\n      .input-bordered {\r\n        --tw-border-opacity: 0.2;\r\n      }\r\n      .input:focus {\r\n        outline: 2px solid hsla(var(--bc) / 0.2);\r\n        outline-offset: 2px;\r\n      }\r\n      .input-ghost {\r\n        --tw-bg-opacity: 0.05;\r\n      }\r\n      .input-ghost:focus {\r\n        --tw-bg-opacity: 1;\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--bc) / var(--tw-text-opacity));\r\n        box-shadow: none;\r\n      }\r\n      .input-primary {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n      }\r\n      .input-primary:focus {\r\n        outline: 2px solid hsl(var(--p));\r\n      }\r\n      .input-secondary {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--s) / var(--tw-border-opacity));\r\n      }\r\n      .input-secondary:focus {\r\n        outline: 2px solid hsl(var(--s));\r\n      }\r\n      .input-accent {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--a) / var(--tw-border-opacity));\r\n      }\r\n      .input-accent:focus {\r\n        outline: 2px solid hsl(var(--a));\r\n      }\r\n      .input-info {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--in) / var(--tw-border-opacity));\r\n      }\r\n      .input-info:focus {\r\n        outline: 2px solid hsl(var(--in));\r\n      }\r\n      .input-success {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--su) / var(--tw-border-opacity));\r\n      }\r\n      .input-success:focus {\r\n        outline: 2px solid hsl(var(--su));\r\n      }\r\n      .input-warning {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--wa) / var(--tw-border-opacity));\r\n      }\r\n      .input-warning:focus {\r\n        outline: 2px solid hsl(var(--wa));\r\n      }\r\n      .input-error {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--er) / var(--tw-border-opacity));\r\n      }\r\n      .input-error:focus {\r\n        outline: 2px solid hsl(var(--er));\r\n      }\r\n      .input-disabled,\r\n        .input[disabled] {\r\n        cursor: not-allowed;\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--b1) / var(--tw-border-opacity));\r\n        border-color: hsl(var(--b2, var(--b1)) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--b2, var(--b1)) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 0.2;\r\n      }\r\n      .input-disabled::-moz-placeholder, .input[disabled]::-moz-placeholder {\r\n        color: hsl(var(--bc) / var(--tw-placeholder-opacity));\r\n        --tw-placeholder-opacity: 0.2;\r\n      }\r\n      .input-disabled::placeholder,\r\n        .input[disabled]::placeholder {\r\n        color: hsl(var(--bc) / var(--tw-placeholder-opacity));\r\n        --tw-placeholder-opacity: 0.2;\r\n      }\r\n      .link-primary {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--p) / var(--tw-text-opacity));\r\n      }\r\n      .link-primary:hover {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--p) / var(--tw-text-opacity));\r\n        color: hsl(var(--pf, var(--p)) / var(--tw-text-opacity));\r\n      }\r\n      .link-secondary {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--s) / var(--tw-text-opacity));\r\n      }\r\n      .link-secondary:hover {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--s) / var(--tw-text-opacity));\r\n        color: hsl(var(--sf, var(--s)) / var(--tw-text-opacity));\r\n      }\r\n      .link-accent {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--a) / var(--tw-text-opacity));\r\n      }\r\n      .link-accent:hover {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--a) / var(--tw-text-opacity));\r\n        color: hsl(var(--af, var(--a)) / var(--tw-text-opacity));\r\n      }\r\n      .link-neutral {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--n) / var(--tw-text-opacity));\r\n      }\r\n      .link-neutral:hover {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--n) / var(--tw-text-opacity));\r\n        color: hsl(var(--nf, var(--n)) / var(--tw-text-opacity));\r\n      }\r\n      .link-success {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--su) / var(--tw-text-opacity));\r\n      }\r\n      .link-success:hover {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--su) / var(--tw-text-opacity));\r\n      }\r\n      .link-info {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--in) / var(--tw-text-opacity));\r\n      }\r\n      .link-info:hover {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--in) / var(--tw-text-opacity));\r\n      }\r\n      .link-warning {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--wa) / var(--tw-text-opacity));\r\n      }\r\n      .link-warning:hover {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--wa) / var(--tw-text-opacity));\r\n      }\r\n      .link-error {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--er) / var(--tw-text-opacity));\r\n      }\r\n      .link-error:hover {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--er) / var(--tw-text-opacity));\r\n      }\r\n      .link:focus {\r\n        outline: 2px solid transparent;\r\n        outline-offset: 2px;\r\n      }\r\n      .link.focus-visible {\r\n        outline: 2px solid currentColor;\r\n        outline-offset: 2px;\r\n      }\r\n      .link:focus-visible {\r\n        outline: 2px solid currentColor;\r\n        outline-offset: 2px;\r\n      }\r\n      .mask-squircle {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%27200%27 height=%27200%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath d=%27M100 0C20 0 0 20 0 100s20 100 100 100 100-20 100-100S180 0 100 0Z%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%27200%27 height=%27200%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath d=%27M100 0C20 0 0 20 0 100s20 100 100 100 100-20 100-100S180 0 100 0Z%27/%3e%3c/svg%3e\");\r\n      }\r\n      .mask-decagon {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%27192%27 height=%27200%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m96 0 58.779 19.098 36.327 50v61.804l-36.327 50L96 200l-58.779-19.098-36.327-50V69.098l36.327-50z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%27192%27 height=%27200%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m96 0 58.779 19.098 36.327 50v61.804l-36.327 50L96 200l-58.779-19.098-36.327-50V69.098l36.327-50z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n      }\r\n      .mask-diamond {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%27200%27 height=%27200%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m100 0 100 100-100 100L0 100z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%27200%27 height=%27200%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m100 0 100 100-100 100L0 100z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n      }\r\n      .mask-heart {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%27200%27 height=%27185%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath d=%27M100 184.606a15.384 15.384 0 0 1-8.653-2.678C53.565 156.28 37.205 138.695 28.182 127.7 8.952 104.264-.254 80.202.005 54.146.308 24.287 24.264 0 53.406 0c21.192 0 35.869 11.937 44.416 21.879a2.884 2.884 0 0 0 4.356 0C110.725 11.927 125.402 0 146.594 0c29.142 0 53.098 24.287 53.4 54.151.26 26.061-8.956 50.122-28.176 73.554-9.023 10.994-25.383 28.58-63.165 54.228a15.384 15.384 0 0 1-8.653 2.673Z%27 fill=%27black%27 fill-rule=%27nonzero%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%27200%27 height=%27185%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath d=%27M100 184.606a15.384 15.384 0 0 1-8.653-2.678C53.565 156.28 37.205 138.695 28.182 127.7 8.952 104.264-.254 80.202.005 54.146.308 24.287 24.264 0 53.406 0c21.192 0 35.869 11.937 44.416 21.879a2.884 2.884 0 0 0 4.356 0C110.725 11.927 125.402 0 146.594 0c29.142 0 53.098 24.287 53.4 54.151.26 26.061-8.956 50.122-28.176 73.554-9.023 10.994-25.383 28.58-63.165 54.228a15.384 15.384 0 0 1-8.653 2.673Z%27 fill=%27black%27 fill-rule=%27nonzero%27/%3e%3c/svg%3e\");\r\n      }\r\n      .mask-hexagon {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%27182%27 height=%27201%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath d=%27M.3 65.486c0-9.196 6.687-20.063 14.211-25.078l61.86-35.946c8.36-5.016 20.899-5.016 29.258 0l61.86 35.946c8.36 5.015 14.211 15.882 14.211 25.078v71.055c0 9.196-6.687 20.063-14.211 25.079l-61.86 35.945c-8.36 4.18-20.899 4.18-29.258 0L14.51 161.62C6.151 157.44.3 145.737.3 136.54V65.486Z%27 fill=%27black%27 fill-rule=%27nonzero%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%27182%27 height=%27201%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath d=%27M.3 65.486c0-9.196 6.687-20.063 14.211-25.078l61.86-35.946c8.36-5.016 20.899-5.016 29.258 0l61.86 35.946c8.36 5.015 14.211 15.882 14.211 25.078v71.055c0 9.196-6.687 20.063-14.211 25.079l-61.86 35.945c-8.36 4.18-20.899 4.18-29.258 0L14.51 161.62C6.151 157.44.3 145.737.3 136.54V65.486Z%27 fill=%27black%27 fill-rule=%27nonzero%27/%3e%3c/svg%3e\");\r\n      }\r\n      .mask-hexagon-2 {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%27200%27 height=%27182%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath d=%27M64.786 181.4c-9.196 0-20.063-6.687-25.079-14.21L3.762 105.33c-5.016-8.36-5.016-20.9 0-29.259l35.945-61.86C44.723 5.851 55.59 0 64.786 0h71.055c9.196 0 20.063 6.688 25.079 14.211l35.945 61.86c4.18 8.36 4.18 20.899 0 29.258l-35.945 61.86c-4.18 8.36-15.883 14.211-25.079 14.211H64.786Z%27 fill=%27black%27 fill-rule=%27nonzero%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%27200%27 height=%27182%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath d=%27M64.786 181.4c-9.196 0-20.063-6.687-25.079-14.21L3.762 105.33c-5.016-8.36-5.016-20.9 0-29.259l35.945-61.86C44.723 5.851 55.59 0 64.786 0h71.055c9.196 0 20.063 6.688 25.079 14.211l35.945 61.86c4.18 8.36 4.18 20.899 0 29.258l-35.945 61.86c-4.18 8.36-15.883 14.211-25.079 14.211H64.786Z%27 fill=%27black%27 fill-rule=%27nonzero%27/%3e%3c/svg%3e\");\r\n      }\r\n      .mask-circle {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%27200%27 height=%27200%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3ccircle fill=%27black%27 cx=%27100%27 cy=%27100%27 r=%27100%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%27200%27 height=%27200%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3ccircle fill=%27black%27 cx=%27100%27 cy=%27100%27 r=%27100%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n      }\r\n      .mask-parallelogram {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%27200%27 height=%27154%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27M46.154 0H200l-46.154 153.846H0z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%27200%27 height=%27154%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27M46.154 0H200l-46.154 153.846H0z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n      }\r\n      .mask-parallelogram-2 {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%27200%27 height=%27154%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27M153.846 0H0l46.154 153.846H200z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%27200%27 height=%27154%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27M153.846 0H0l46.154 153.846H200z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n      }\r\n      .mask-parallelogram-3 {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%27154%27 height=%27201%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27M.077 47.077v153.846l153.846-46.154V.923z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%27154%27 height=%27201%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27M.077 47.077v153.846l153.846-46.154V.923z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n      }\r\n      .mask-parallelogram-4 {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%27154%27 height=%27201%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27M153.923 47.077v153.846L.077 154.77V.923z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%27154%27 height=%27201%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27M153.923 47.077v153.846L.077 154.77V.923z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n      }\r\n      .mask-pentagon {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%27192%27 height=%27181%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m96 0 95.106 69.098-36.327 111.804H37.22L.894 69.098z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%27192%27 height=%27181%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m96 0 95.106 69.098-36.327 111.804H37.22L.894 69.098z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n      }\r\n      .mask-square {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%27200%27 height=%27200%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27M0 0h200v200H0z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%27200%27 height=%27200%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27M0 0h200v200H0z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n      }\r\n      .mask-star {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%27192%27 height=%27180%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m96 137.263-58.779 42.024 22.163-68.389L.894 68.481l72.476-.243L96 0l22.63 68.238 72.476.243-58.49 42.417 22.163 68.389z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%27192%27 height=%27180%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m96 137.263-58.779 42.024 22.163-68.389L.894 68.481l72.476-.243L96 0l22.63 68.238 72.476.243-58.49 42.417 22.163 68.389z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n      }\r\n      .mask-star-2 {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%27192%27 height=%27180%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m96 153.044-58.779 26.243 7.02-63.513L.894 68.481l63.117-13.01L96 0l31.989 55.472 63.117 13.01-43.347 47.292 7.02 63.513z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%27192%27 height=%27180%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m96 153.044-58.779 26.243 7.02-63.513L.894 68.481l63.117-13.01L96 0l31.989 55.472 63.117 13.01-43.347 47.292 7.02 63.513z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n      }\r\n      .mask-triangle {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%27174%27 height=%27149%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m87 148.476-86.603.185L43.86 74.423 87 0l43.14 74.423 43.463 74.238z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%27174%27 height=%27149%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m87 148.476-86.603.185L43.86 74.423 87 0l43.14 74.423 43.463 74.238z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n      }\r\n      .mask-triangle-2 {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%27174%27 height=%27150%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m87 .738 86.603-.184-43.463 74.238L87 149.214 43.86 74.792.397.554z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%27174%27 height=%27150%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m87 .738 86.603-.184-43.463 74.238L87 149.214 43.86 74.792.397.554z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n      }\r\n      .mask-triangle-3 {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%27150%27 height=%27174%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m149.369 87.107.185 86.603-74.239-43.463L.893 87.107l74.422-43.14L149.554.505z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%27150%27 height=%27174%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27m149.369 87.107.185 86.603-74.239-43.463L.893 87.107l74.422-43.14L149.554.505z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n      }\r\n      .mask-triangle-4 {\r\n        -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width=%27150%27 height=%27174%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27M.631 87.107.446.505l74.239 43.462 74.422 43.14-74.422 43.14L.446 173.71z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n        mask-image: url(\"data:image/svg+xml,%3csvg width=%27150%27 height=%27174%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath fill=%27black%27 d=%27M.631 87.107.446.505l74.239 43.462 74.422 43.14-74.422 43.14L.446 173.71z%27 fill-rule=%27evenodd%27/%3e%3c/svg%3e\");\r\n      }\r\n      .menu.horizontal > li.bordered > a,\r\n              .menu.horizontal > li.bordered > button,\r\n              .menu.horizontal > li.bordered > span {\r\n        border-left-width: 0px;\r\n        border-bottom-width: 4px;\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n      }\r\n      .menu[class*=\" px-\"]:not(.menu[class*=\" px-0\"]) li > *,\r\n        .menu[class^=\"px-\"]:not(.menu[class^=\"px-0\"]) li > *,\r\n        .menu[class*=\" p-\"]:not(.menu[class*=\" p-0\"]) li > *,\r\n        .menu[class^=\"p-\"]:not(.menu[class^=\"p-0\"]) li > * {\r\n        border-radius: 0.5rem;\r\n        border-radius: var(--rounded-btn, 0.5rem);\r\n      }\r\n      .menu :where(li.bordered > *) {\r\n        border-left-width: 4px;\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n      }\r\n      .menu :where(li) > :where(*:not(ul)) {\r\n        gap: 0.75rem;\r\n        padding-left: 1rem;\r\n        padding-right: 1rem;\r\n        padding-top: 0.75rem;\r\n        padding-bottom: 0.75rem;\r\n        color: currentColor;\r\n      }\r\n      .menu :where(li:not(.menu-title):not(:empty)) > :where(*:not(ul):focus),\r\n        .menu :where(li:not(.menu-title):not(:empty)) > :where(*:not(ul):hover) {\r\n        background-color: hsl(var(--bc) / var(--tw-bg-opacity));\r\n        --tw-bg-opacity: 0.1;\r\n      }\r\n      .menu :where(li:not(.menu-title):not(:empty)) > :where(:not(ul).active),\r\n        .menu :where(li:not(.menu-title):not(:empty)) > :where(*:not(ul):active) {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--p) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--pc) / var(--tw-text-opacity));\r\n      }\r\n      .menu :where(li:empty) {\r\n        margin-left: 1rem;\r\n        margin-right: 1rem;\r\n        margin-top: 0.5rem;\r\n        margin-bottom: 0.5rem;\r\n        height: 1px;\r\n        background-color: hsl(var(--bc) / var(--tw-bg-opacity));\r\n        --tw-bg-opacity: 0.1;\r\n      }\r\n      .menu li.disabled > * {\r\n        -webkit-user-select: none;\r\n           -moz-user-select: none;\r\n                user-select: none;\r\n        color: hsl(var(--bc) / var(--tw-text-opacity));\r\n        --tw-text-opacity: 0.2;\r\n      }\r\n      .menu li.disabled > *:hover {\r\n        background-color: transparent;\r\n      }\r\n      .menu li.hover-bordered a {\r\n        border-left-width: 4px;\r\n        border-color: transparent;\r\n      }\r\n      .menu li.hover-bordered a:hover {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n      }\r\n      .menu.compact li > a,\r\n            .menu.compact li > span {\r\n        padding-top: 0.5rem;\r\n        padding-bottom: 0.5rem;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n      }\r\n      .menu .menu-title {\r\n        font-size: 0.75rem;\r\n        line-height: 1rem;\r\n        font-weight: 700;\r\n        opacity: 0.4;\r\n      }\r\n      .menu .menu-title > * {\r\n        padding-top: 0.25rem;\r\n        padding-bottom: 0.25rem;\r\n      }\r\n      .menu :where(li:not(.disabled)) > :where(*:not(ul)) {\r\n        outline: 2px solid transparent;\r\n        outline-offset: 2px;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\r\n        transition-duration: 200ms;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n      }\r\n      .menu > :where(li:first-child) {\r\n        border-top-left-radius: inherit;\r\n        border-top-right-radius: inherit;\r\n        border-bottom-right-radius: 0;\r\n        border-bottom-right-radius: initial;\r\n        border-bottom-left-radius: 0;\r\n        border-bottom-left-radius: initial;\r\n      }\r\n      .menu > :where(li:first-child) > :where(:not(ul)) {\r\n        border-top-left-radius: inherit;\r\n        border-top-right-radius: inherit;\r\n        border-bottom-right-radius: 0;\r\n        border-bottom-right-radius: initial;\r\n        border-bottom-left-radius: 0;\r\n        border-bottom-left-radius: initial;\r\n      }\r\n      .menu > :where(li:last-child) {\r\n        border-top-left-radius: 0;\r\n        border-top-left-radius: initial;\r\n        border-top-right-radius: 0;\r\n        border-top-right-radius: initial;\r\n        border-bottom-right-radius: inherit;\r\n        border-bottom-left-radius: inherit;\r\n      }\r\n      .menu > :where(li:last-child) > :where(:not(ul)) {\r\n        border-top-left-radius: 0;\r\n        border-top-left-radius: initial;\r\n        border-top-right-radius: 0;\r\n        border-top-right-radius: initial;\r\n        border-bottom-right-radius: inherit;\r\n        border-bottom-left-radius: inherit;\r\n      }\r\n      .menu > :where(li) > :where(ul) :where(li) {\r\n        width: 100%;\r\n        white-space: nowrap;\r\n      }\r\n      .menu > :where(li) > :where(ul) :where(li) :where(ul) {\r\n        padding-left: 1rem;\r\n      }\r\n      .menu > :where(li) > :where(ul) :where(li) > :where(:not(ul)) {\r\n        width: 100%;\r\n        white-space: nowrap;\r\n      }\r\n      .menu > :where(li) > :where(ul) > :where(li:first-child) {\r\n        border-top-left-radius: inherit;\r\n        border-top-right-radius: inherit;\r\n        border-bottom-right-radius: 0;\r\n        border-bottom-right-radius: initial;\r\n        border-bottom-left-radius: 0;\r\n        border-bottom-left-radius: initial;\r\n      }\r\n      .menu > :where(li) > :where(ul) > :where(li:first-child) > :where(:not(ul)) {\r\n        border-top-left-radius: inherit;\r\n        border-top-right-radius: inherit;\r\n        border-bottom-right-radius: 0;\r\n        border-bottom-right-radius: initial;\r\n        border-bottom-left-radius: 0;\r\n        border-bottom-left-radius: initial;\r\n      }\r\n      .menu > :where(li) > :where(ul) > :where(li:last-child) {\r\n        border-top-left-radius: 0;\r\n        border-top-left-radius: initial;\r\n        border-top-right-radius: 0;\r\n        border-top-right-radius: initial;\r\n        border-bottom-right-radius: inherit;\r\n        border-bottom-left-radius: inherit;\r\n      }\r\n      .menu > :where(li) > :where(ul) > :where(li:last-child) > :where(:not(ul)) {\r\n        border-top-left-radius: 0;\r\n        border-top-left-radius: initial;\r\n        border-top-right-radius: 0;\r\n        border-top-right-radius: initial;\r\n        border-bottom-right-radius: inherit;\r\n        border-bottom-left-radius: inherit;\r\n      }\r\n      .mockup-code:before {\r\n        content: \"\";\r\n        margin-bottom: 1rem;\r\n        display: block;\r\n        height: 0.75rem;\r\n        width: 0.75rem;\r\n        border-radius: 9999px;\r\n        opacity: 0.3;\r\n        box-shadow: 1.4em 0, 2.8em 0, 4.2em 0;\r\n      }\r\n      .mockup-code pre {\r\n        padding-right: 1.25rem;\r\n      }\r\n      .mockup-code pre:before {\r\n        content: \"\";\r\n        margin-right: 2ch;\r\n      }\r\n      .mockup-window:before {\r\n        content: \"\";\r\n        margin-bottom: 1rem;\r\n        display: block;\r\n        height: 0.75rem;\r\n        width: 0.75rem;\r\n        border-radius: 9999px;\r\n        opacity: 0.3;\r\n        box-shadow: 1.4em 0, 2.8em 0, 4.2em 0;\r\n      }\r\n      .mockup-phone {\r\n        display: inline-block;\r\n        border: 4px solid #444;\r\n        border-radius: 50px;\r\n        background-color: #000;\r\n        padding: 10px;\r\n        margin: 0 auto;\r\n        overflow: hidden;\r\n      }\r\n      .mockup-phone .camera {\r\n        position: relative;\r\n        top: 0px;\r\n        left: 0px;\r\n        background: #000;\r\n        height: 25px;\r\n        width: 150px;\r\n        margin: 0 auto;\r\n        border-bottom-left-radius: 17px;\r\n        border-bottom-right-radius: 17px;\r\n        z-index: 11;\r\n      }\r\n      .mockup-phone .camera:before {\r\n        content: \"\";\r\n        position: absolute;\r\n        top: 35%;\r\n        left: 50%;\r\n        width: 50px;\r\n        height: 4px;\r\n        border-radius: 5px;\r\n        background-color: #0c0b0e;\r\n        transform: translate(-50%, -50%);\r\n      }\r\n      .mockup-phone .camera:after {\r\n        content: \"\";\r\n        position: absolute;\r\n        top: 20%;\r\n        left: 70%;\r\n        width: 8px;\r\n        height: 8px;\r\n        border-radius: 5px;\r\n        background-color: #0f0b25;\r\n      }\r\n      .mockup-phone .display {\r\n        overflow: hidden;\r\n        border-radius: 40px;\r\n        margin-top: -25px;\r\n      }\r\n      .modal-open .modal-box,\r\n      .modal-toggle:checked + .modal .modal-box,\r\n      .modal:target .modal-box {\r\n        --tw-translate-y: 0px;\r\n        --tw-scale-x: 1;\r\n        --tw-scale-y: 1;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .modal-action > :not([hidden]) ~ :not([hidden]) {\r\n        --tw-space-x-reverse: 0;\r\n        margin-right: calc(0.5rem * var(--tw-space-x-reverse));\r\n        margin-left: calc(0.5rem * (1 - var(--tw-space-x-reverse)));\r\n        margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));\r\n      }\r\n      .progress::-moz-progress-bar {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n      }\r\n      .progress:indeterminate::after {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n        content: \"\";\r\n        position: absolute;\r\n        top: 0px;\r\n        bottom: 0px;\r\n        left: -40%;\r\n        width: 33.333333%;\r\n        border-radius: 1rem;\r\n        border-radius: var(--rounded-box, 1rem);\r\n        animation: progress-loading 5s infinite ease-in-out;\r\n      }\r\n      .progress::-webkit-progress-bar {\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n        --tw-bg-opacity: 0.2;\r\n        border-radius: 1rem;\r\n        border-radius: var(--rounded-box, 1rem);\r\n      }\r\n      .progress::-webkit-progress-value {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--nf, var(--n)) / var(--tw-bg-opacity));\r\n        border-radius: 1rem;\r\n        border-radius: var(--rounded-box, 1rem);\r\n      }\r\n      @keyframes progress-loading {\r\n      \r\n        50% {\r\n          left: 107%;\r\n        }\r\n      }\r\n      .radio.focus-visible {\r\n        outline: 2px solid hsl(var(--bc));\r\n        outline-offset: 2px;\r\n      }\r\n      .radio:focus-visible {\r\n        outline: 2px solid hsl(var(--bc));\r\n        outline-offset: 2px;\r\n      }\r\n      .radio:checked,\r\n        .radio[aria-checked=true] {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--bc) / var(--tw-bg-opacity));\r\n        animation: radiomark 0.2s ease-in-out;\r\n        animation: radiomark var(--animation-input, 0.2s) ease-in-out;\r\n        box-shadow: 0 0 0 4px hsl(var(--b1)) inset, 0 0 0 4px hsl(var(--b1)) inset;\r\n      }\r\n      .radio-primary {\r\n        --chkbg: var(--p);\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n      }\r\n      .radio-primary:hover {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n      }\r\n      .radio-primary.focus-visible {\r\n        outline: 2px solid hsl(var(--p));\r\n      }\r\n      .radio-primary:focus-visible {\r\n        outline: 2px solid hsl(var(--p));\r\n      }\r\n      .radio-primary:checked,\r\n          .radio-primary[aria-checked=true] {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--p) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--pc) / var(--tw-text-opacity));\r\n      }\r\n      .radio-secondary {\r\n        --chkbg: var(--s);\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--s) / var(--tw-border-opacity));\r\n      }\r\n      .radio-secondary:hover {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--s) / var(--tw-border-opacity));\r\n      }\r\n      .radio-secondary.focus-visible {\r\n        outline: 2px solid hsl(var(--s));\r\n      }\r\n      .radio-secondary:focus-visible {\r\n        outline: 2px solid hsl(var(--s));\r\n      }\r\n      .radio-secondary:checked,\r\n          .radio-secondary[aria-checked=true] {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--s) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--s) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--sc) / var(--tw-text-opacity));\r\n      }\r\n      .radio-accent {\r\n        --chkbg: var(--a);\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--a) / var(--tw-border-opacity));\r\n      }\r\n      .radio-accent:hover {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--a) / var(--tw-border-opacity));\r\n      }\r\n      .radio-accent.focus-visible {\r\n        outline: 2px solid hsl(var(--a));\r\n      }\r\n      .radio-accent:focus-visible {\r\n        outline: 2px solid hsl(var(--a));\r\n      }\r\n      .radio-accent:checked,\r\n          .radio-accent[aria-checked=true] {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--a) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--a) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--ac) / var(--tw-text-opacity));\r\n      }\r\n      .radio-success {\r\n        --chkbg: var(--su);\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--su) / var(--tw-border-opacity));\r\n      }\r\n      .radio-success:hover {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--su) / var(--tw-border-opacity));\r\n      }\r\n      .radio-success.focus-visible {\r\n        outline: 2px solid hsl(var(--su));\r\n      }\r\n      .radio-success:focus-visible {\r\n        outline: 2px solid hsl(var(--su));\r\n      }\r\n      .radio-success:checked,\r\n          .radio-success[aria-checked=true] {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--su) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--su) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--suc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .radio-warning {\r\n        --chkbg: var(--wa);\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--wa) / var(--tw-border-opacity));\r\n      }\r\n      .radio-warning:hover {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--wa) / var(--tw-border-opacity));\r\n      }\r\n      .radio-warning.focus-visible {\r\n        outline: 2px solid hsl(var(--wa));\r\n      }\r\n      .radio-warning:focus-visible {\r\n        outline: 2px solid hsl(var(--wa));\r\n      }\r\n      .radio-warning:checked,\r\n          .radio-warning[aria-checked=true] {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--wa) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--wa) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--wac, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .radio-info {\r\n        --chkbg: var(--in);\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--in) / var(--tw-border-opacity));\r\n      }\r\n      .radio-info:hover {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--in) / var(--tw-border-opacity));\r\n      }\r\n      .radio-info.focus-visible {\r\n        outline: 2px solid hsl(var(--in));\r\n      }\r\n      .radio-info:focus-visible {\r\n        outline: 2px solid hsl(var(--in));\r\n      }\r\n      .radio-info:checked,\r\n          .radio-info[aria-checked=true] {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--in) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--in) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--inc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .radio-error {\r\n        --chkbg: var(--er);\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--er) / var(--tw-border-opacity));\r\n      }\r\n      .radio-error:hover {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--er) / var(--tw-border-opacity));\r\n      }\r\n      .radio-error.focus-visible {\r\n        outline: 2px solid hsl(var(--er));\r\n      }\r\n      .radio-error:focus-visible {\r\n        outline: 2px solid hsl(var(--er));\r\n      }\r\n      .radio-error:checked,\r\n          .radio-error[aria-checked=true] {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--er) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--er) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--erc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .radio:disabled {\r\n        cursor: not-allowed;\r\n        opacity: 0.2;\r\n      }\r\n      @keyframes radiomark {\r\n      \r\n        0% {\r\n          box-shadow: 0 0 0 12px hsl(var(--b1)) inset, 0 0 0 12px hsl(var(--b1)) inset;\r\n        }\r\n      \r\n        50% {\r\n          box-shadow: 0 0 0 3px hsl(var(--b1)) inset, 0 0 0 3px hsl(var(--b1)) inset;\r\n        }\r\n      \r\n        100% {\r\n          box-shadow: 0 0 0 4px hsl(var(--b1)) inset, 0 0 0 4px hsl(var(--b1)) inset;\r\n        }\r\n      }\r\n      .radio-mark {\r\n        display: none;\r\n      }\r\n      .range.focus-visible::-webkit-slider-thumb {\r\n        --focus-shadow: 0 0 0 6px hsl(var(--b1)) inset, 0 0 0 2rem hsl(var(--range-shdw)) inset;\r\n      }\r\n      .range:focus-visible::-webkit-slider-thumb {\r\n        --focus-shadow: 0 0 0 6px hsl(var(--b1)) inset, 0 0 0 2rem hsl(var(--range-shdw)) inset;\r\n      }\r\n      .\\!range.focus-visible::-webkit-slider-thumb {\r\n        --focus-shadow: 0 0 0 6px hsl(var(--b1)) inset, 0 0 0 2rem hsl(var(--range-shdw)) inset !important;\r\n      }\r\n      .\\!range:focus-visible::-webkit-slider-thumb {\r\n        --focus-shadow: 0 0 0 6px hsl(var(--b1)) inset, 0 0 0 2rem hsl(var(--range-shdw)) inset !important;\r\n      }\r\n      .range.focus-visible::-moz-range-thumb {\r\n        --focus-shadow: 0 0 0 6px hsl(var(--b1)) inset, 0 0 0 2rem hsl(var(--range-shdw)) inset;\r\n      }\r\n      .range:focus-visible::-moz-range-thumb {\r\n        --focus-shadow: 0 0 0 6px hsl(var(--b1)) inset, 0 0 0 2rem hsl(var(--range-shdw)) inset;\r\n      }\r\n      .\\!range.focus-visible::-moz-range-thumb {\r\n        --focus-shadow: 0 0 0 6px hsl(var(--b1)) inset, 0 0 0 2rem hsl(var(--range-shdw)) inset !important;\r\n      }\r\n      .\\!range:focus-visible::-moz-range-thumb {\r\n        --focus-shadow: 0 0 0 6px hsl(var(--b1)) inset, 0 0 0 2rem hsl(var(--range-shdw)) inset !important;\r\n      }\r\n      .range::-webkit-slider-runnable-track {\r\n        height: 0.5rem;\r\n        width: 100%;\r\n        border-radius: 1rem;\r\n        border-radius: var(--rounded-box, 1rem);\r\n        background-color: hsla(var(--bc) / 0.1);\r\n      }\r\n      .\\!range::-webkit-slider-runnable-track {\r\n        height: 0.5rem !important;\r\n        width: 100% !important;\r\n        border-radius: 1rem !important;\r\n        border-radius: var(--rounded-box, 1rem) !important;\r\n        background-color: hsla(var(--bc) / 0.1) !important;\r\n      }\r\n      .range::-moz-range-track {\r\n        height: 0.5rem;\r\n        width: 100%;\r\n        border-radius: 1rem;\r\n        border-radius: var(--rounded-box, 1rem);\r\n        background-color: hsla(var(--bc) / 0.1);\r\n      }\r\n      .\\!range::-moz-range-track {\r\n        height: 0.5rem !important;\r\n        width: 100% !important;\r\n        border-radius: 1rem !important;\r\n        border-radius: var(--rounded-box, 1rem) !important;\r\n        background-color: hsla(var(--bc) / 0.1) !important;\r\n      }\r\n      .range::-webkit-slider-thumb {\r\n        background-color: hsl(var(--b1));\r\n        position: relative;\r\n        height: 1.5rem;\r\n        width: 1.5rem;\r\n        border-style: none;\r\n        border-radius: 1rem;\r\n        border-radius: var(--rounded-box, 1rem);\r\n        appearance: none;\r\n        -webkit-appearance: none;\r\n        top: 50%;\r\n        color: hsl(var(--range-shdw));\r\n        transform: translateY(-50%);\r\n        --filler-size: 100rem;\r\n        --filler-offset: 0.6rem;\r\n        box-shadow: 0 0 0 3px hsl(var(--range-shdw)) inset, 0 0, calc(var(--filler-size) * -1 - var(--filler-offset)) 0 0 var(--filler-size);\r\n        box-shadow: 0 0 0 3px hsl(var(--range-shdw)) inset, var(--focus-shadow, 0 0), calc(var(--filler-size) * -1 - var(--filler-offset)) 0 0 var(--filler-size);\r\n      }\r\n      .\\!range::-webkit-slider-thumb {\r\n        background-color: hsl(var(--b1)) !important;\r\n        position: relative !important;\r\n        height: 1.5rem !important;\r\n        width: 1.5rem !important;\r\n        border-style: none !important;\r\n        border-radius: 1rem !important;\r\n        border-radius: var(--rounded-box, 1rem) !important;\r\n        appearance: none !important;\r\n        -webkit-appearance: none !important;\r\n        top: 50% !important;\r\n        color: hsl(var(--range-shdw)) !important;\r\n        transform: translateY(-50%) !important;\r\n        --filler-size: 100rem !important;\r\n        --filler-offset: 0.6rem !important;\r\n        box-shadow: 0 0 0 3px hsl(var(--range-shdw)) inset, 0 0, calc(var(--filler-size) * -1 - var(--filler-offset)) 0 0 var(--filler-size) !important;\r\n        box-shadow: 0 0 0 3px hsl(var(--range-shdw)) inset, var(--focus-shadow, 0 0), calc(var(--filler-size) * -1 - var(--filler-offset)) 0 0 var(--filler-size) !important;\r\n      }\r\n      .range::-moz-range-thumb {\r\n        background-color: hsl(var(--b1));\r\n        position: relative;\r\n        height: 1.5rem;\r\n        width: 1.5rem;\r\n        border-style: none;\r\n        border-radius: 1rem;\r\n        border-radius: var(--rounded-box, 1rem);\r\n        top: 50%;\r\n        color: hsl(var(--range-shdw));\r\n        --filler-size: 100rem;\r\n        --filler-offset: 0.5rem;\r\n        box-shadow: 0 0 0 3px hsl(var(--range-shdw)) inset, 0 0, calc(var(--filler-size) * -1 - var(--filler-offset)) 0 0 var(--filler-size);\r\n        box-shadow: 0 0 0 3px hsl(var(--range-shdw)) inset, var(--focus-shadow, 0 0), calc(var(--filler-size) * -1 - var(--filler-offset)) 0 0 var(--filler-size);\r\n      }\r\n      .\\!range::-moz-range-thumb {\r\n        background-color: hsl(var(--b1)) !important;\r\n        position: relative !important;\r\n        height: 1.5rem !important;\r\n        width: 1.5rem !important;\r\n        border-style: none !important;\r\n        border-radius: 1rem !important;\r\n        border-radius: var(--rounded-box, 1rem) !important;\r\n        top: 50% !important;\r\n        color: hsl(var(--range-shdw)) !important;\r\n        --filler-size: 100rem !important;\r\n        --filler-offset: 0.5rem !important;\r\n        box-shadow: 0 0 0 3px hsl(var(--range-shdw)) inset, 0 0, calc(var(--filler-size) * -1 - var(--filler-offset)) 0 0 var(--filler-size) !important;\r\n        box-shadow: 0 0 0 3px hsl(var(--range-shdw)) inset, var(--focus-shadow, 0 0), calc(var(--filler-size) * -1 - var(--filler-offset)) 0 0 var(--filler-size) !important;\r\n      }\r\n      .range-primary {\r\n        --range-shdw: var(--p);\r\n      }\r\n      .range-secondary {\r\n        --range-shdw: var(--s);\r\n      }\r\n      .range-accent {\r\n        --range-shdw: var(--a);\r\n      }\r\n      .range-success {\r\n        --range-shdw: var(--su);\r\n      }\r\n      .range-warning {\r\n        --range-shdw: var(--wa);\r\n      }\r\n      .range-info {\r\n        --range-shdw: var(--in);\r\n      }\r\n      .range-error {\r\n        --range-shdw: var(--er);\r\n      }\r\n      .rating input {\r\n        -moz-appearance: none;\r\n             appearance: none;\r\n        -webkit-appearance: none;\r\n      }\r\n      .rating .rating-hidden {\r\n        width: 0.5rem;\r\n        background-color: transparent;\r\n      }\r\n      .rating input:checked ~ input,\r\n        .rating input[aria-checked=true] ~ input {\r\n        --tw-bg-opacity: 0.2;\r\n      }\r\n      .rating input.focus-visible {\r\n        transition-property: transform;\r\n        transition-duration: 300ms;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n        transform: translateY(-0.125em);\r\n      }\r\n      .rating input:focus-visible {\r\n        transition-property: transform;\r\n        transition-duration: 300ms;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n        transform: translateY(-0.125em);\r\n      }\r\n      .rating input:active:focus {\r\n        animation: none;\r\n        transform: translateY(-0.125em);\r\n      }\r\n      .rating-half :where(input:not(.rating-hidden)) {\r\n        width: 0.75rem;\r\n      }\r\n      @keyframes rating-pop {\r\n      \r\n        0% {\r\n          transform: translateY(-0.125em);\r\n        }\r\n      \r\n        40% {\r\n          transform: translateY(-0.125em);\r\n        }\r\n      \r\n        100% {\r\n          transform: translateY(0);\r\n        }\r\n      }\r\n      .select-bordered {\r\n        --tw-border-opacity: 0.2;\r\n      }\r\n      .select:focus {\r\n        outline: 2px solid hsla(var(--bc) / 0.2);\r\n        outline-offset: 2px;\r\n      }\r\n      .select-ghost {\r\n        --tw-bg-opacity: 0.05;\r\n      }\r\n      .select-ghost:focus {\r\n        --tw-bg-opacity: 1;\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--bc) / var(--tw-text-opacity));\r\n      }\r\n      .select-primary {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n      }\r\n      .select-primary:focus {\r\n        outline: 2px solid hsl(var(--p));\r\n      }\r\n      .select-secondary {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--s) / var(--tw-border-opacity));\r\n      }\r\n      .select-secondary:focus {\r\n        outline: 2px solid hsl(var(--s));\r\n      }\r\n      .select-accent {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--a) / var(--tw-border-opacity));\r\n      }\r\n      .select-accent:focus {\r\n        outline: 2px solid hsl(var(--a));\r\n      }\r\n      .select-info {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--in) / var(--tw-border-opacity));\r\n      }\r\n      .select-info:focus {\r\n        outline: 2px solid hsl(var(--in));\r\n      }\r\n      .select-success {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--su) / var(--tw-border-opacity));\r\n      }\r\n      .select-success:focus {\r\n        outline: 2px solid hsl(var(--su));\r\n      }\r\n      .select-warning {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--wa) / var(--tw-border-opacity));\r\n      }\r\n      .select-warning:focus {\r\n        outline: 2px solid hsl(var(--wa));\r\n      }\r\n      .select-error {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--er) / var(--tw-border-opacity));\r\n      }\r\n      .select-error:focus {\r\n        outline: 2px solid hsl(var(--er));\r\n      }\r\n      .select-disabled,\r\n        .select[disabled] {\r\n        cursor: not-allowed;\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--b1) / var(--tw-border-opacity));\r\n        border-color: hsl(var(--b2, var(--b1)) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--b2, var(--b1)) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 0.2;\r\n      }\r\n      .select-disabled::-moz-placeholder, .select[disabled]::-moz-placeholder {\r\n        color: hsl(var(--bc) / var(--tw-placeholder-opacity));\r\n        --tw-placeholder-opacity: 0.2;\r\n      }\r\n      .select-disabled::placeholder,\r\n        .select[disabled]::placeholder {\r\n        color: hsl(var(--bc) / var(--tw-placeholder-opacity));\r\n        --tw-placeholder-opacity: 0.2;\r\n      }\r\n      .select-multiple,\r\n        .select[multiple],\r\n        .select[size].select:not([size=\"1\"]) {\r\n        background-image: none;\r\n        padding-right: 1rem;\r\n      }\r\n      [dir=\"rtl\"] .select {\r\n        background-position: calc(0% + 12px) calc(1px + 50%), calc(0% + 16px) calc(1px + 50%);\r\n      }\r\n      :where(.stats) > :not([hidden]) ~ :not([hidden]) {\r\n        --tw-divide-x-reverse: 0;\r\n        border-right-width: calc(1px * var(--tw-divide-x-reverse));\r\n        border-left-width: calc(1px * (1 - var(--tw-divide-x-reverse)));\r\n        border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));\r\n        --tw-divide-y-reverse: 0;\r\n        border-top-width: calc(0px * (1 - var(--tw-divide-y-reverse)));\r\n        border-top-width: calc(0px * calc(1 - var(--tw-divide-y-reverse)));\r\n        border-bottom-width: calc(0px * var(--tw-divide-y-reverse));\r\n      }\r\n      .steps .step:before {\r\n        top: 0px;\r\n        grid-column-start: 1;\r\n        grid-row-start: 1;\r\n        height: 0.5rem;\r\n        width: 100%;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b2) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--b3, var(--b2)) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--bc) / var(--tw-text-opacity));\r\n        content: \"\";\r\n        margin-left: -100%;\r\n      }\r\n      .steps .step:after {\r\n        content: counter(step);\r\n        counter-increment: step;\r\n        z-index: 1;\r\n        position: relative;\r\n        grid-column-start: 1;\r\n        grid-row-start: 1;\r\n        display: grid;\r\n        height: 2rem;\r\n        width: 2rem;\r\n        align-items: center;\r\n        justify-items: center;\r\n        place-items: center;\r\n        align-self: center;\r\n        justify-self: center;\r\n        place-self: center;\r\n        border-radius: 9999px;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b2) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--b3, var(--b2)) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--bc) / var(--tw-text-opacity));\r\n      }\r\n      .steps .step:first-child:before {\r\n        content: none;\r\n      }\r\n      .steps .step[data-content]:after {\r\n        content: attr(data-content);\r\n      }\r\n      .steps .step-neutral + .step-neutral:before,\r\n        .steps .step-neutral:after {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n      }\r\n      .steps .step-primary + .step-primary:before,\r\n        .steps .step-primary:after {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--p) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--pc) / var(--tw-text-opacity));\r\n      }\r\n      .steps .step-secondary + .step-secondary:before,\r\n        .steps .step-secondary:after {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--s) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--sc) / var(--tw-text-opacity));\r\n      }\r\n      .steps .step-accent + .step-accent:before,\r\n        .steps .step-accent:after {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--a) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--ac) / var(--tw-text-opacity));\r\n      }\r\n      .steps .step-info + .step-info:before {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--in) / var(--tw-bg-opacity));\r\n      }\r\n      .steps .step-info:after {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--in) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--inc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .steps .step-success + .step-success:before {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--su) / var(--tw-bg-opacity));\r\n      }\r\n      .steps .step-success:after {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--su) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--suc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .steps .step-warning + .step-warning:before {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--wa) / var(--tw-bg-opacity));\r\n      }\r\n      .steps .step-warning:after {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--wa) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--wac, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .steps .step-error + .step-error:before {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--er) / var(--tw-bg-opacity));\r\n      }\r\n      .steps .step-error:after {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--er) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--erc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .swap-rotate .swap-on,\r\n      .swap-rotate .swap-indeterminate,\r\n      .swap-rotate input:indeterminate ~ .swap-on {\r\n        --tw-rotate: 45deg;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .swap-rotate input:checked ~ .swap-off,\r\n      .swap-rotate.swap-active .swap-off,\r\n      .swap-rotate input:indeterminate ~ .swap-off {\r\n        --tw-rotate: -45deg;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .swap-rotate input:checked ~ .swap-on,\r\n      .swap-rotate.swap-active .swap-on,\r\n      .swap-rotate input:indeterminate ~ .swap-indeterminate {\r\n        --tw-rotate: 0deg;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .swap-flip {\r\n        transform-style: preserve-3d;\r\n        perspective: 16em;\r\n      }\r\n      .swap-flip .swap-on,\r\n      .swap-flip .swap-indeterminate,\r\n      .swap-flip input:indeterminate ~ .swap-on {\r\n        transform: rotateY(180deg);\r\n        -webkit-backface-visibility: hidden;\r\n                backface-visibility: hidden;\r\n        opacity: 1;\r\n      }\r\n      .swap-flip input:checked ~ .swap-off,\r\n      .swap-flip.swap-active .swap-off,\r\n      .swap-flip input:indeterminate ~ .swap-off {\r\n        transform: rotateY(-180deg);\r\n        -webkit-backface-visibility: hidden;\r\n                backface-visibility: hidden;\r\n        opacity: 1;\r\n      }\r\n      .swap-flip input:checked ~ .swap-on,\r\n      .swap-flip.swap-active .swap-on,\r\n      .swap-flip input:indeterminate ~ .swap-indeterminate {\r\n        transform: rotateY(0deg);\r\n      }\r\n      .tab:hover {\r\n        --tw-text-opacity: 1;\r\n      }\r\n      .tab.tab-active:not(.tab-disabled):not([disabled]) {\r\n        border-color: hsl(var(--bc) / var(--tw-border-opacity));\r\n        --tw-border-opacity: 1;\r\n        --tw-text-opacity: 1;\r\n      }\r\n      .tab:focus {\r\n        outline: 2px solid transparent;\r\n        outline-offset: 2px;\r\n      }\r\n      .tab.focus-visible {\r\n        outline: 2px solid currentColor;\r\n        outline-offset: -3px;\r\n      }\r\n      .tab:focus-visible {\r\n        outline: 2px solid currentColor;\r\n        outline-offset: -3px;\r\n      }\r\n      .tab.focus-visible.tab-lifted {\r\n        border-bottom-right-radius: 0.5rem;\r\n        border-bottom-right-radius: var(--tab-radius, 0.5rem);\r\n        border-bottom-left-radius: 0.5rem;\r\n        border-bottom-left-radius: var(--tab-radius, 0.5rem);\r\n      }\r\n      .tab.focus-visible.tab-lifted {\r\n        border-bottom-right-radius: 0.5rem;\r\n        border-bottom-right-radius: var(--tab-radius, 0.5rem);\r\n        border-bottom-left-radius: 0.5rem;\r\n        border-bottom-left-radius: var(--tab-radius, 0.5rem);\r\n      }\r\n      .tab:focus-visible.tab-lifted {\r\n        border-bottom-right-radius: 0.5rem;\r\n        border-bottom-right-radius: var(--tab-radius, 0.5rem);\r\n        border-bottom-left-radius: 0.5rem;\r\n        border-bottom-left-radius: var(--tab-radius, 0.5rem);\r\n      }\r\n      .tab-disabled,\r\n        .tab-disabled:hover,\r\n        .tab[disabled],\r\n        .tab[disabled]:hover {\r\n        cursor: not-allowed;\r\n        color: hsl(var(--bc) / var(--tw-text-opacity));\r\n        --tw-text-opacity: 0.2;\r\n      }\r\n      .tab-bordered {\r\n        border-color: hsl(var(--bc) / var(--tw-border-opacity));\r\n        --tw-border-opacity: 0.2;\r\n        border-style: solid;\r\n        border-bottom-width: calc(1px + 1px);\r\n        border-bottom-width: calc(var(--tab-border, 1px) + 1px);\r\n      }\r\n      .tab-lifted {\r\n        border: 1px solid transparent;\r\n        border: var(--tab-border, 1px) solid transparent;\r\n        border-width: 0 0 1px 0;\r\n        border-width: 0 0 var(--tab-border, 1px) 0;\r\n        border-top-left-radius: 0.5rem;\r\n        border-top-left-radius: var(--tab-radius, 0.5rem);\r\n        border-top-right-radius: 0.5rem;\r\n        border-top-right-radius: var(--tab-radius, 0.5rem);\r\n        border-bottom-color: var(--tab-border-color);\r\n        padding-left: 1rem;\r\n        padding-left: var(--tab-padding, 1rem);\r\n        padding-right: 1rem;\r\n        padding-right: var(--tab-padding, 1rem);\r\n        padding-top: 1px;\r\n        padding-top: var(--tab-border, 1px);\r\n      }\r\n      .tab-lifted.tab-active:not(.tab-disabled):not([disabled]) {\r\n        background-color: var(--tab-bg);\r\n        border-width: 1px 1px 0 1px;\r\n        border-width: var(--tab-border, 1px) var(--tab-border, 1px) 0 var(--tab-border, 1px);\r\n        border-left-color: var(--tab-border-color);\r\n        border-right-color: var(--tab-border-color);\r\n        border-top-color: var(--tab-border-color);\r\n        padding-left: calc(1rem - 1px);\r\n        padding-left: calc(var(--tab-padding, 1rem) - var(--tab-border, 1px));\r\n        padding-right: calc(1rem - 1px);\r\n        padding-right: calc(var(--tab-padding, 1rem) - var(--tab-border, 1px));\r\n        padding-bottom: 1px;\r\n        padding-bottom: var(--tab-border, 1px);\r\n        padding-top: 0;\r\n      }\r\n      .tab-lifted.tab-active:not(.tab-disabled):not([disabled]):before,\r\n          .tab-lifted.tab-active:not(.tab-disabled):not([disabled]):after {\r\n        z-index: 1;\r\n        content: \"\";\r\n        display: block;\r\n        position: absolute;\r\n        width: 0.5rem;\r\n        width: var(--tab-radius, 0.5rem);\r\n        height: 0.5rem;\r\n        height: var(--tab-radius, 0.5rem);\r\n        bottom: 0;\r\n        --tab-grad: calc(68% - var(--tab-border, 1px));\r\n        --tab-corner-bg: radial-gradient(circle at var(--circle-pos), transparent var(--tab-grad), var(--tab-border-color) calc(var(--tab-grad) + 0.3px), var(--tab-border-color) calc(var(--tab-grad) + var(--tab-border, 1px)), var(--tab-bg) calc(var(--tab-grad) + var(--tab-border, 1px) + 0.3px));\r\n      }\r\n      .tab-lifted.tab-active:not(.tab-disabled):not([disabled]):before {\r\n        left: calc(0.5rem * -1);\r\n        left: calc(var(--tab-radius, 0.5rem) * -1);\r\n        --circle-pos: top left;\r\n        background-image: var(--tab-corner-bg);\r\n      }\r\n      [dir=\"rtl\"] .tab-lifted.tab-active:not(.tab-disabled):not([disabled]):before {\r\n        --circle-pos: top right;\r\n      }\r\n      .tab-lifted.tab-active:not(.tab-disabled):not([disabled]):after {\r\n        right: calc(0.5rem * -1);\r\n        right: calc(var(--tab-radius, 0.5rem) * -1);\r\n        --circle-pos: top right;\r\n        background-image: var(--tab-corner-bg);\r\n      }\r\n      [dir=\"rtl\"] .tab-lifted.tab-active:not(.tab-disabled):not([disabled]):after {\r\n        --circle-pos: top left;\r\n      }\r\n      .tab-lifted.tab-active:not(.tab-disabled):not([disabled]):first-child:before {\r\n        background: none;\r\n      }\r\n      .tab-lifted.tab-active:not(.tab-disabled):not([disabled]):last-child:after {\r\n        background: none;\r\n      }\r\n      .tab-lifted.tab-active:not(.tab-disabled):not([disabled]) + .tab-lifted.tab-active:not(.tab-disabled):not([disabled]):before {\r\n        background: none;\r\n      }\r\n      .tabs-boxed {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--b2, var(--b1)) / var(--tw-bg-opacity));\r\n        padding: 0.25rem;\r\n        border-radius: 0.5rem;\r\n        border-radius: var(--rounded-btn, 0.5rem);\r\n      }\r\n      .tabs-boxed .tab {\r\n        border-radius: 0.5rem;\r\n        border-radius: var(--rounded-btn, 0.5rem);\r\n      }\r\n      .tabs-boxed .tab-active:not(.tab-disabled):not([disabled]) {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--p) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--pc) / var(--tw-text-opacity));\r\n      }\r\n      .tabs-boxed .tab-active:not(.tab-disabled):not([disabled]):hover {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--pc) / var(--tw-text-opacity));\r\n      }\r\n      .table :where(th, td) {\r\n        white-space: nowrap;\r\n        padding: 1rem;\r\n        vertical-align: middle;\r\n      }\r\n      .table tr.active th,\r\n          .table tr.active td,\r\n          .table tr.active:nth-child(even) th,\r\n          .table tr.active:nth-child(even) td {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b2) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--b3, var(--b2)) / var(--tw-bg-opacity));\r\n      }\r\n      .table tr.hover:hover th,\r\n          .table tr.hover:hover td,\r\n          .table tr.hover:nth-child(even):hover th,\r\n          .table tr.hover:nth-child(even):hover td {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b2) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--b3, var(--b2)) / var(--tw-bg-opacity));\r\n      }\r\n      .table:where(:not(.table-zebra)) :where(thead, tbody, tfoot) :where(tr:not(:last-child) :where(th, td)) {\r\n        border-bottom-width: 1px;\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--b1) / var(--tw-border-opacity));\r\n        border-color: hsl(var(--b2, var(--b1)) / var(--tw-border-opacity));\r\n      }\r\n      .table :where(thead, tfoot) :where(th, td) {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--b2, var(--b1)) / var(--tw-bg-opacity));\r\n        font-size: 0.75rem;\r\n        line-height: 1rem;\r\n        font-weight: 700;\r\n        text-transform: uppercase;\r\n      }\r\n      .table :where(tbody th, tbody td) {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n      }\r\n      .table-zebra tbody tr:nth-child(even) th,\r\n            .table-zebra tbody tr:nth-child(even) td {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--b2, var(--b1)) / var(--tw-bg-opacity));\r\n      }\r\n      :where(.table *:first-child) :where(*:first-child) :where(th, td):first-child {\r\n        border-top-left-radius: 0.5rem;\r\n      }\r\n      :where(.table *:first-child) :where(*:first-child) :where(th, td):last-child {\r\n        border-top-right-radius: 0.5rem;\r\n      }\r\n      :where(.table *:last-child) :where(*:last-child) :where(th, td):first-child {\r\n        border-bottom-left-radius: 0.5rem;\r\n      }\r\n      :where(.table *:last-child) :where(*:last-child) :where(th, td):last-child {\r\n        border-bottom-right-radius: 0.5rem;\r\n      }\r\n      .textarea-bordered {\r\n        --tw-border-opacity: 0.2;\r\n      }\r\n      .textarea:focus {\r\n        outline: 2px solid hsla(var(--bc) / 0.2);\r\n        outline-offset: 2px;\r\n      }\r\n      .textarea-ghost {\r\n        --tw-bg-opacity: 0.05;\r\n      }\r\n      .textarea-ghost:focus {\r\n        --tw-bg-opacity: 1;\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--bc) / var(--tw-text-opacity));\r\n        box-shadow: none;\r\n      }\r\n      .textarea-primary {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n      }\r\n      .textarea-primary:focus {\r\n        outline: 2px solid hsl(var(--p));\r\n      }\r\n      .textarea-secondary {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--s) / var(--tw-border-opacity));\r\n      }\r\n      .textarea-secondary:focus {\r\n        outline: 2px solid hsl(var(--s));\r\n      }\r\n      .textarea-accent {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--a) / var(--tw-border-opacity));\r\n      }\r\n      .textarea-accent:focus {\r\n        outline: 2px solid hsl(var(--a));\r\n      }\r\n      .textarea-info {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--in) / var(--tw-border-opacity));\r\n      }\r\n      .textarea-info:focus {\r\n        outline: 2px solid hsl(var(--in));\r\n      }\r\n      .textarea-success {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--su) / var(--tw-border-opacity));\r\n      }\r\n      .textarea-success:focus {\r\n        outline: 2px solid hsl(var(--su));\r\n      }\r\n      .textarea-warning {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--wa) / var(--tw-border-opacity));\r\n      }\r\n      .textarea-warning:focus {\r\n        outline: 2px solid hsl(var(--wa));\r\n      }\r\n      .textarea-error {\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--er) / var(--tw-border-opacity));\r\n      }\r\n      .textarea-error:focus {\r\n        outline: 2px solid hsl(var(--er));\r\n      }\r\n      .textarea-disabled,\r\n        .textarea[disabled] {\r\n        cursor: not-allowed;\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--b1) / var(--tw-border-opacity));\r\n        border-color: hsl(var(--b2, var(--b1)) / var(--tw-border-opacity));\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--b2, var(--b1)) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 0.2;\r\n      }\r\n      .textarea-disabled::-moz-placeholder, .textarea[disabled]::-moz-placeholder {\r\n        color: hsl(var(--bc) / var(--tw-placeholder-opacity));\r\n        --tw-placeholder-opacity: 0.2;\r\n      }\r\n      .textarea-disabled::placeholder,\r\n        .textarea[disabled]::placeholder {\r\n        color: hsl(var(--bc) / var(--tw-placeholder-opacity));\r\n        --tw-placeholder-opacity: 0.2;\r\n      }\r\n      .toast>* {\r\n        animation: toast-pop 0.25s ease-out;\r\n      }\r\n      @keyframes toast-pop {\r\n      \r\n        0% {\r\n          transform: scale(0.9);\r\n          opacity: 0;\r\n        }\r\n      \r\n        100% {\r\n          transform: scale(1);\r\n          opacity: 1;\r\n        }\r\n      }\r\n      [dir=\"rtl\"] .toggle {\r\n        --handleoffsetcalculator: calc(var(--handleoffset) * 1);\r\n      }\r\n      .toggle.focus-visible {\r\n        outline: 2px solid hsl(var(--bc));\r\n        outline-offset: 2px;\r\n      }\r\n      .toggle:focus-visible {\r\n        outline: 2px solid hsl(var(--bc));\r\n        outline-offset: 2px;\r\n      }\r\n      .toggle:checked,\r\n        .toggle[checked=\"true\"],\r\n        .toggle[aria-checked=true] {\r\n        --handleoffsetcalculator: var(--handleoffset);\r\n        --tw-border-opacity: 1;\r\n        --tw-bg-opacity: 1;\r\n      }\r\n      [dir=\"rtl\"] .toggle:checked, [dir=\"rtl\"] .toggle[checked=\"true\"], [dir=\"rtl\"] .toggle[aria-checked=true] {\r\n        --handleoffsetcalculator: calc(var(--handleoffset) * -1);\r\n      }\r\n      .toggle:indeterminate {\r\n        --tw-border-opacity: 1;\r\n        --tw-bg-opacity: 1;\r\n        box-shadow: calc(var(--handleoffset) / 2) 0 0 2px var(--tglbg) inset, calc(var(--handleoffset) / -2) 0 0 2px var(--tglbg) inset, 0 0 0 2px var(--tglbg) inset;\r\n      }\r\n      [dir=\"rtl\"] .toggle:indeterminate {\r\n        box-shadow: calc(var(--handleoffset) / 2) 0 0 2px var(--tglbg) inset, calc(var(--handleoffset) / -2) 0 0 2px var(--tglbg) inset, 0 0 0 2px var(--tglbg) inset;\r\n      }\r\n      .toggle-primary.focus-visible {\r\n        outline: 2px solid hsl(var(--p));\r\n      }\r\n      .toggle-primary:focus-visible {\r\n        outline: 2px solid hsl(var(--p));\r\n      }\r\n      .toggle-primary:checked,\r\n          .toggle-primary[checked=\"true\"],\r\n          .toggle-primary[aria-checked=true] {\r\n        border-color: hsl(var(--p) / var(--tw-border-opacity));\r\n        --tw-border-opacity: 0.1;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--p) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--pc) / var(--tw-text-opacity));\r\n      }\r\n      .toggle-secondary.focus-visible {\r\n        outline: 2px solid hsl(var(--s));\r\n      }\r\n      .toggle-secondary:focus-visible {\r\n        outline: 2px solid hsl(var(--s));\r\n      }\r\n      .toggle-secondary:checked,\r\n          .toggle-secondary[checked=\"true\"],\r\n          .toggle-secondary[aria-checked=true] {\r\n        border-color: hsl(var(--s) / var(--tw-border-opacity));\r\n        --tw-border-opacity: 0.1;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--s) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--sc) / var(--tw-text-opacity));\r\n      }\r\n      .toggle-accent.focus-visible {\r\n        outline: 2px solid hsl(var(--a));\r\n      }\r\n      .toggle-accent:focus-visible {\r\n        outline: 2px solid hsl(var(--a));\r\n      }\r\n      .toggle-accent:checked,\r\n          .toggle-accent[checked=\"true\"],\r\n          .toggle-accent[aria-checked=true] {\r\n        border-color: hsl(var(--a) / var(--tw-border-opacity));\r\n        --tw-border-opacity: 0.1;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--a) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--ac) / var(--tw-text-opacity));\r\n      }\r\n      .toggle-success.focus-visible {\r\n        outline: 2px solid hsl(var(--su));\r\n      }\r\n      .toggle-success:focus-visible {\r\n        outline: 2px solid hsl(var(--su));\r\n      }\r\n      .toggle-success:checked,\r\n          .toggle-success[checked=\"true\"],\r\n          .toggle-success[aria-checked=true] {\r\n        border-color: hsl(var(--su) / var(--tw-border-opacity));\r\n        --tw-border-opacity: 0.1;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--su) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--suc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .toggle-warning.focus-visible {\r\n        outline: 2px solid hsl(var(--wa));\r\n      }\r\n      .toggle-warning:focus-visible {\r\n        outline: 2px solid hsl(var(--wa));\r\n      }\r\n      .toggle-warning:checked,\r\n          .toggle-warning[checked=\"true\"],\r\n          .toggle-warning[aria-checked=true] {\r\n        border-color: hsl(var(--wa) / var(--tw-border-opacity));\r\n        --tw-border-opacity: 0.1;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--wa) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--wac, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .toggle-info.focus-visible {\r\n        outline: 2px solid hsl(var(--in));\r\n      }\r\n      .toggle-info:focus-visible {\r\n        outline: 2px solid hsl(var(--in));\r\n      }\r\n      .toggle-info:checked,\r\n          .toggle-info[checked=\"true\"],\r\n          .toggle-info[aria-checked=true] {\r\n        border-color: hsl(var(--in) / var(--tw-border-opacity));\r\n        --tw-border-opacity: 0.1;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--in) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--inc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .toggle-error.focus-visible {\r\n        outline: 2px solid hsl(var(--er));\r\n      }\r\n      .toggle-error:focus-visible {\r\n        outline: 2px solid hsl(var(--er));\r\n      }\r\n      .toggle-error:checked,\r\n          .toggle-error[checked=\"true\"],\r\n          .toggle-error[aria-checked=true] {\r\n        border-color: hsl(var(--er) / var(--tw-border-opacity));\r\n        --tw-border-opacity: 0.1;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--er) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n        color: hsl(var(--erc, var(--nc)) / var(--tw-text-opacity));\r\n      }\r\n      .toggle:disabled {\r\n        cursor: not-allowed;\r\n        --tw-border-opacity: 1;\r\n        border-color: hsl(var(--bc) / var(--tw-border-opacity));\r\n        background-color: transparent;\r\n        opacity: 0.3;\r\n        --togglehandleborder: 0 0 0 3px hsl(var(--bc)) inset, var(--handleoffsetcalculator) 0 0 3px hsl(var(--bc)) inset;\r\n      }\r\n      .toggle-mark {\r\n        display: none;\r\n      }\r\n      .tooltip:before,\r\n      .tooltip:after {\r\n        opacity: 0;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\r\n        transition-delay: 100ms;\r\n        transition-duration: 200ms;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n      }\r\n      .tooltip:after {\r\n        position: absolute;\r\n        content: \"\";\r\n        border-style: solid;\r\n        border-width: 0;\r\n        border-width: var(--tooltip-tail, 0);\r\n        width: 0;\r\n        height: 0;\r\n        display: block;\r\n      }\r\n      .tooltip.tooltip-open:before,\r\n      .tooltip.tooltip-open:after,\r\n      .tooltip:hover:before,\r\n      .tooltip:hover:after {\r\n        opacity: 1;\r\n        transition-delay: 75ms;\r\n      }\r\n      .tooltip:not([data-tip]):hover:before,\r\n      .tooltip:not([data-tip]):hover:after {\r\n        visibility: hidden;\r\n        opacity: 0;\r\n      }\r\n      .tooltip:after, .tooltip-top:after {\r\n        transform: translateX(-50%);\r\n        border-color: var(--tooltip-color) transparent transparent transparent;\r\n        top: auto;\r\n        left: 50%;\r\n        right: auto;\r\n        bottom: var(--tooltip-tail-offset);\r\n      }\r\n      .tooltip-bottom:after {\r\n        transform: translateX(-50%);\r\n        border-color: transparent transparent var(--tooltip-color) transparent;\r\n        top: var(--tooltip-tail-offset);\r\n        left: 50%;\r\n        right: auto;\r\n        bottom: auto;\r\n      }\r\n      .tooltip-left:after {\r\n        transform: translateY(-50%);\r\n        border-color: transparent transparent transparent var(--tooltip-color);\r\n        top: 50%;\r\n        left: auto;\r\n        right: calc(var(--tooltip-tail-offset) + 1px);\r\n        bottom: auto;\r\n      }\r\n      .tooltip-right:after {\r\n        transform: translateY(-50%);\r\n        border-color: transparent var(--tooltip-color) transparent transparent;\r\n        top: 50%;\r\n        left: calc(var(--tooltip-tail-offset) + 1px);\r\n        right: auto;\r\n        bottom: auto;\r\n      }\r\n      .tooltip-primary {\r\n        --tooltip-color: hsl(var(--p));\r\n        --tooltip-text-color: hsl(var(--pc));\r\n      }\r\n      .tooltip-secondary {\r\n        --tooltip-color: hsl(var(--s));\r\n        --tooltip-text-color: hsl(var(--sc));\r\n      }\r\n      .tooltip-accent {\r\n        --tooltip-color: hsl(var(--a));\r\n        --tooltip-text-color: hsl(var(--ac));\r\n      }\r\n      .tooltip-info {\r\n        --tooltip-color: hsla(var(--in));\r\n        --tooltip-text-color: hsl(var(--inc));\r\n      }\r\n      .tooltip-success {\r\n        --tooltip-color: hsla(var(--su));\r\n        --tooltip-text-color: hsl(var(--suc));\r\n      }\r\n      .tooltip-warning {\r\n        --tooltip-color: hsla(var(--wa));\r\n        --tooltip-text-color: hsl(var(--wac));\r\n      }\r\n      .tooltip-error {\r\n        --tooltip-color: hsla(var(--er));\r\n        --tooltip-text-color: hsl(var(--erc));\r\n      }\r\n      :root .prose {\r\n        --tw-prose-body: hsla(var(--bc)/.8);\r\n        --tw-prose-headings: hsl(var(--bc));\r\n        --tw-prose-lead: hsl(var(--bc));\r\n        --tw-prose-links: hsl(var(--bc));\r\n        --tw-prose-bold: hsl(var(--bc));\r\n        --tw-prose-counters: hsl(var(--bc));\r\n        --tw-prose-bullets: hsla(var(--bc)/.5);\r\n        --tw-prose-hr: hsla(var(--bc)/.2);\r\n        --tw-prose-quotes: hsl(var(--bc));\r\n        --tw-prose-quote-borders: hsla(var(--bc)/.2);\r\n        --tw-prose-captions: hsla(var(--bc)/.5);\r\n        --tw-prose-code: hsl(var(--bc));\r\n        --tw-prose-pre-code: hsl(var(--nc));\r\n        --tw-prose-pre-bg: hsl(var(--n));\r\n        --tw-prose-th-borders: hsla(var(--bc)/.5);\r\n        --tw-prose-td-borders: hsla(var(--bc)/.2);\r\n      }\r\n      .prose :where(code):not(:where([class~=\"not-prose\"] *)) {\r\n        padding: 2px 8px;\r\n        border-radius: var(--rounded-badge);\r\n      }\r\n      .prose code:after, \r\n        .prose code:before {\r\n        content: none;\r\n      }\r\n      .prose pre code {\r\n        border-radius: 0;\r\n        padding: 0;\r\n      }\r\n      .prose :where(tbody tr, thead):not(:where([class~=\"not-prose\"] *)) {\r\n        border-bottom-color: hsl(var(--bc) / 20%);\r\n      }\r\n      .rounded-box {\r\n        border-radius: 1rem;\r\n        border-radius: var(--rounded-box, 1rem);\r\n      }\r\n      .rounded-t-box {\r\n        border-top-left-radius: 1rem;\r\n        border-top-left-radius: var(--rounded-box, 1rem);\r\n        border-top-right-radius: 1rem;\r\n        border-top-right-radius: var(--rounded-box, 1rem);\r\n      }\r\n      .rounded-b-box {\r\n        border-bottom-left-radius: 1rem;\r\n        border-bottom-left-radius: var(--rounded-box, 1rem);\r\n        border-bottom-right-radius: 1rem;\r\n        border-bottom-right-radius: var(--rounded-box, 1rem);\r\n      }\r\n      .rounded-l-box {\r\n        border-top-left-radius: 1rem;\r\n        border-top-left-radius: var(--rounded-box, 1rem);\r\n        border-bottom-left-radius: 1rem;\r\n        border-bottom-left-radius: var(--rounded-box, 1rem);\r\n      }\r\n      .rounded-r-box {\r\n        border-top-right-radius: 1rem;\r\n        border-top-right-radius: var(--rounded-box, 1rem);\r\n        border-bottom-right-radius: 1rem;\r\n        border-bottom-right-radius: var(--rounded-box, 1rem);\r\n      }\r\n      .rounded-br-box {\r\n        border-bottom-right-radius: 1rem;\r\n        border-bottom-right-radius: var(--rounded-box, 1rem);\r\n      }\r\n      .rounded-tr-box {\r\n        border-top-right-radius: 1rem;\r\n        border-top-right-radius: var(--rounded-box, 1rem);\r\n      }\r\n      .rounded-bl-box {\r\n        border-bottom-left-radius: 1rem;\r\n        border-bottom-left-radius: var(--rounded-box, 1rem);\r\n      }\r\n      .rounded-tl-box {\r\n        border-top-left-radius: 1rem;\r\n        border-top-left-radius: var(--rounded-box, 1rem);\r\n      }\r\n      .rounded-btn {\r\n        border-radius: 0.5rem;\r\n        border-radius: var(--rounded-btn, 0.5rem);\r\n      }\r\n      .rounded-badge {\r\n        border-radius: 1.9rem;\r\n        border-radius: var(--rounded-badge, 1.9rem);\r\n      }\r\n      .glass,\r\n        .glass:hover,\r\n        .glass.btn-active {\r\n        border: none;\r\n        -webkit-backdrop-filter: blur(40px);\r\n                backdrop-filter: blur(40px);\r\n        -webkit-backdrop-filter: blur(var(--glass-blur, 40px));\r\n                backdrop-filter: blur(var(--glass-blur, 40px));\r\n        background-color: transparent;\r\n        background-image: linear-gradient(\r\n              135deg,\r\n              rgba(255, 255, 255, 0.3) 0%,\r\n              rgba(0, 0, 0, 0) 100%\r\n            ),\r\n            linear-gradient(\r\n              100deg,\r\n              rgba(255, 255, 255, 0.1) 25%,\r\n              rgba(0, 0, 0, 0) 25%\r\n            );\r\n        background-image: linear-gradient(\r\n              135deg,\r\n              rgba(255, 255, 255, 0.3) 0%,\r\n              rgba(0, 0, 0, 0) 100%\r\n            ),\r\n            linear-gradient(\r\n              100deg,\r\n              rgba(255, 255, 255, 0.1) 25%,\r\n              rgba(0, 0, 0, 0) 25%\r\n            );\r\n        background-image: linear-gradient(\r\n              135deg,\r\n              rgba(255, 255, 255, var(--glass-opacity, 30%)) 0%,\r\n              rgba(0, 0, 0, 0) 100%\r\n            ),\r\n            linear-gradient(\r\n              var(--glass-reflex-degree, 100deg),\r\n              rgba(255, 255, 255, var(--glass-reflex-opacity, 10%)) 25%,\r\n              rgba(0, 0, 0, 0) 25%\r\n            );\r\n        box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.1)\r\n              inset,\r\n            0 0 0 2px rgba(0, 0, 0, 0.05);\r\n        box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.1)\r\n              inset,\r\n            0 0 0 2px rgba(0, 0, 0, 0.05);\r\n        box-shadow: 0 0 0 1px rgba(255, 255, 255, var(--glass-border-opacity, 10%))\r\n              inset,\r\n            0 0 0 2px rgba(0, 0, 0, 0.05);\r\n        text-shadow: 0 1px rgba(0, 0, 0, 0.05);\r\n        text-shadow: 0 1px rgba(0, 0, 0, 0.05);\r\n        text-shadow: 0 1px rgba(0, 0, 0, var(--glass-text-shadow-opacity, 5%));\r\n      }\r\n      .min-h-6 {\r\n        min-height: 1.5rem;\r\n      }\r\n      .min-h-8 {\r\n        min-height: 2rem;\r\n      }\r\n      .min-h-12 {\r\n        min-height: 3rem;\r\n      }\r\n      .min-h-16 {\r\n        min-height: 4rem;\r\n      }\r\n      .no-animation {\r\n        --btn-focus-scale: 1;\r\n        --animation-btn: 0;\r\n        --animation-input: 0;\r\n      }\r\n      .tab-border-none {\r\n        --tab-border: 0px;\r\n      }\r\n      .tab-border {\r\n        --tab-border: 1px;\r\n      }\r\n      .tab-border-2 {\r\n        --tab-border: 2px;\r\n      }\r\n      .tab-border-3 {\r\n        --tab-border: 3px;\r\n      }\r\n      .tab-rounded-none {\r\n        --tab-radius: 0;\r\n      }\r\n      .tab-rounded-lg {\r\n        --tab-radius: 0.5rem;\r\n      }\r\n      .artboard-demo {\r\n        display: flex;\r\n        flex: none;\r\n        flex-direction: column;\r\n        align-items: center;\r\n        justify-content: center;\r\n      }\r\n      .artboard.phone {\r\n        width: 320px;\r\n      }\r\n      .artboard.phone-1 {\r\n        width: 320px;\r\n        height: 568px;\r\n      }\r\n      .artboard.phone-1.horizontal,\r\n            .artboard.phone-1.artboard-horizontal {\r\n        width: 568px;\r\n        height: 320px;\r\n      }\r\n      .artboard.phone-2 {\r\n        width: 375px;\r\n        height: 667px;\r\n      }\r\n      .artboard.phone-2.horizontal,\r\n            .artboard.phone-2.artboard-horizontal {\r\n        width: 667px;\r\n        height: 375px;\r\n      }\r\n      .artboard.phone-3 {\r\n        width: 414px;\r\n        height: 736px;\r\n      }\r\n      .artboard.phone-3.horizontal,\r\n            .artboard.phone-3.artboard-horizontal {\r\n        width: 736px;\r\n        height: 414px;\r\n      }\r\n      .artboard.phone-4 {\r\n        width: 375px;\r\n        height: 812px;\r\n      }\r\n      .artboard.phone-4.horizontal,\r\n            .artboard.phone-4.artboard-horizontal {\r\n        width: 812px;\r\n        height: 375px;\r\n      }\r\n      .artboard.phone-5 {\r\n        width: 414px;\r\n        height: 896px;\r\n      }\r\n      .artboard.phone-5.horizontal,\r\n            .artboard.phone-5.artboard-horizontal {\r\n        width: 896px;\r\n        height: 414px;\r\n      }\r\n      .artboard.phone-6 {\r\n        width: 320px;\r\n        height: 1024px;\r\n      }\r\n      .artboard.phone-6.horizontal,\r\n            .artboard.phone-6.artboard-horizontal {\r\n        width: 1024px;\r\n        height: 320px;\r\n      }\r\n      .badge-xs {\r\n        height: 0.75rem;\r\n        font-size: 0.75rem;\r\n        line-height: .75rem;\r\n        padding-left: 0.313rem;\r\n        padding-right: 0.313rem;\r\n      }\r\n      .badge-sm {\r\n        height: 1rem;\r\n        font-size: 0.75rem;\r\n        line-height: 1rem;\r\n        padding-left: 0.438rem;\r\n        padding-right: 0.438rem;\r\n      }\r\n      .badge-md {\r\n        height: 1.25rem;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n        padding-left: 0.563rem;\r\n        padding-right: 0.563rem;\r\n      }\r\n      .badge-lg {\r\n        height: 1.5rem;\r\n        font-size: 1rem;\r\n        line-height: 1.5rem;\r\n        padding-left: 0.688rem;\r\n        padding-right: 0.688rem;\r\n      }\r\n      .btm-nav-xs {\r\n        height: 2.5rem;\r\n      }\r\n      .btm-nav-xs>*:where(.active) {\r\n        border-top-width: 1px;\r\n      }\r\n      .btm-nav-xs .btm-nav-label {\r\n        font-size: 0.75rem;\r\n        line-height: 1rem;\r\n      }\r\n      .btm-nav-sm {\r\n        height: 3rem;\r\n      }\r\n      .btm-nav-sm>*:where(.active) {\r\n        border-top-width: 2px;\r\n      }\r\n      .btm-nav-sm .btm-nav-label {\r\n        font-size: 0.75rem;\r\n        line-height: 1rem;\r\n      }\r\n      .btm-nav-md {\r\n        height: 4rem;\r\n      }\r\n      .btm-nav-md>*:where(.active) {\r\n        border-top-width: 2px;\r\n      }\r\n      .btm-nav-md .btm-nav-label {\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n      }\r\n      .btm-nav-lg {\r\n        height: 5rem;\r\n      }\r\n      .btm-nav-lg>*:where(.active) {\r\n        border-top-width: 4px;\r\n      }\r\n      .btm-nav-lg .btm-nav-label {\r\n        font-size: 1rem;\r\n        line-height: 1.5rem;\r\n      }\r\n      .btn-xs {\r\n        height: 1.5rem;\r\n        padding-left: 0.5rem;\r\n        padding-right: 0.5rem;\r\n        min-height: 1.5rem;\r\n        font-size: 0.75rem;\r\n      }\r\n      .btn-sm {\r\n        height: 2rem;\r\n        padding-left: 0.75rem;\r\n        padding-right: 0.75rem;\r\n        min-height: 2rem;\r\n        font-size: 0.875rem;\r\n      }\r\n      .btn-md {\r\n        height: 3rem;\r\n        padding-left: 1rem;\r\n        padding-right: 1rem;\r\n        min-height: 3rem;\r\n        font-size: 0.875rem;\r\n      }\r\n      .btn-lg {\r\n        height: 4rem;\r\n        padding-left: 1.5rem;\r\n        padding-right: 1.5rem;\r\n        min-height: 4rem;\r\n        font-size: 1.125rem;\r\n      }\r\n      .btn-wide {\r\n        width: 16rem;\r\n      }\r\n      .btn-block {\r\n        width: 100%;\r\n      }\r\n      .btn-square:where(.btn-xs) {\r\n        height: 1.5rem;\r\n        width: 1.5rem;\r\n        padding: 0px;\r\n      }\r\n      .btn-square:where(.btn-sm) {\r\n        height: 2rem;\r\n        width: 2rem;\r\n        padding: 0px;\r\n      }\r\n      .btn-square:where(.btn-md) {\r\n        height: 3rem;\r\n        width: 3rem;\r\n        padding: 0px;\r\n      }\r\n      .btn-square:where(.btn-lg) {\r\n        height: 4rem;\r\n        width: 4rem;\r\n        padding: 0px;\r\n      }\r\n      .btn-circle:where(.btn-xs) {\r\n        height: 1.5rem;\r\n        width: 1.5rem;\r\n        border-radius: 9999px;\r\n        padding: 0px;\r\n      }\r\n      .btn-circle:where(.btn-sm) {\r\n        height: 2rem;\r\n        width: 2rem;\r\n        border-radius: 9999px;\r\n        padding: 0px;\r\n      }\r\n      .btn-circle:where(.btn-md) {\r\n        height: 3rem;\r\n        width: 3rem;\r\n        border-radius: 9999px;\r\n        padding: 0px;\r\n      }\r\n      .btn-circle:where(.btn-lg) {\r\n        height: 4rem;\r\n        width: 4rem;\r\n        border-radius: 9999px;\r\n        padding: 0px;\r\n      }\r\n      .btn-group-horizontal {\r\n        flex-direction: row;\r\n      }\r\n      .btn-group-vertical {\r\n        flex-direction: column;\r\n      }\r\n      .card-side {\r\n        align-items: stretch;\r\n        flex-direction: row;\r\n      }\r\n      [dir=\"ltr\"] .card-side :where(figure:first-child) {\r\n        border-top-left-radius: inherit;\r\n      }\r\n      [dir=\"rtl\"] .card-side :where(figure:first-child) {\r\n        border-top-right-radius: inherit;\r\n      }\r\n      [dir=\"ltr\"] .card-side :where(figure:first-child) {\r\n        border-top-right-radius: 0;\r\n        border-top-right-radius: initial;\r\n      }\r\n      [dir=\"rtl\"] .card-side :where(figure:first-child) {\r\n        border-top-left-radius: 0;\r\n        border-top-left-radius: initial;\r\n      }\r\n      [dir=\"ltr\"] .card-side :where(figure:first-child) {\r\n        border-bottom-left-radius: inherit;\r\n      }\r\n      [dir=\"rtl\"] .card-side :where(figure:first-child) {\r\n        border-bottom-right-radius: inherit;\r\n      }\r\n      [dir=\"ltr\"] .card-side :where(figure:first-child) {\r\n        border-bottom-right-radius: 0;\r\n        border-bottom-right-radius: initial;\r\n      }\r\n      [dir=\"rtl\"] .card-side :where(figure:first-child) {\r\n        border-bottom-left-radius: 0;\r\n        border-bottom-left-radius: initial;\r\n      }\r\n      .card-side :where(figure:first-child) {\r\n        overflow: hidden;\r\n      }\r\n      [dir=\"ltr\"] .card-side :where(figure:last-child) {\r\n        border-top-left-radius: 0;\r\n        border-top-left-radius: initial;\r\n      }\r\n      [dir=\"rtl\"] .card-side :where(figure:last-child) {\r\n        border-top-right-radius: 0;\r\n        border-top-right-radius: initial;\r\n      }\r\n      [dir=\"ltr\"] .card-side :where(figure:last-child) {\r\n        border-top-right-radius: inherit;\r\n      }\r\n      [dir=\"rtl\"] .card-side :where(figure:last-child) {\r\n        border-top-left-radius: inherit;\r\n      }\r\n      [dir=\"ltr\"] .card-side :where(figure:last-child) {\r\n        border-bottom-left-radius: 0;\r\n        border-bottom-left-radius: initial;\r\n      }\r\n      [dir=\"rtl\"] .card-side :where(figure:last-child) {\r\n        border-bottom-right-radius: 0;\r\n        border-bottom-right-radius: initial;\r\n      }\r\n      [dir=\"ltr\"] .card-side :where(figure:last-child) {\r\n        border-bottom-right-radius: inherit;\r\n      }\r\n      [dir=\"rtl\"] .card-side :where(figure:last-child) {\r\n        border-bottom-left-radius: inherit;\r\n      }\r\n      .card-side :where(figure:last-child) {\r\n        overflow: hidden;\r\n      }\r\n      .card-side figure > * {\r\n        max-width: none;\r\n        max-width: initial;\r\n      }\r\n      :where(.card-side figure > *) {\r\n        width: 100%;\r\n        height: 100%;\r\n        -o-object-fit: cover;\r\n           object-fit: cover;\r\n      }\r\n      .checkbox-xs {\r\n        height: 1rem;\r\n        width: 1rem;\r\n      }\r\n      .checkbox-sm {\r\n        height: 1.25rem;\r\n        width: 1.25rem;\r\n      }\r\n      .checkbox-md {\r\n        height: 1.5rem;\r\n        width: 1.5rem;\r\n      }\r\n      .checkbox-lg {\r\n        height: 2rem;\r\n        width: 2rem;\r\n      }\r\n      .divider-horizontal {\r\n        flex-direction: column;\r\n      }\r\n      .divider-horizontal:before {\r\n        height: 100%;\r\n        width: 0.125rem;\r\n      }\r\n      .divider-horizontal:after {\r\n        height: 100%;\r\n        width: 0.125rem;\r\n      }\r\n      .divider-vertical {\r\n        flex-direction: row;\r\n      }\r\n      .divider-vertical:before {\r\n        height: 0.125rem;\r\n        width: 100%;\r\n      }\r\n      .divider-vertical:after {\r\n        height: 0.125rem;\r\n        width: 100%;\r\n      }\r\n      .file-input-xs {\r\n        height: 1.5rem;\r\n        padding-right: 0.5rem;\r\n        font-size: 0.75rem;\r\n        line-height: 1rem;\r\n        line-height: 1.625;\r\n      }\r\n      .file-input-xs::file-selector-button {\r\n        margin-right: 0.5rem;\r\n        height: 1.375rem;\r\n        min-height: 1.375rem;\r\n        font-size: 0.75rem;\r\n      }\r\n      .file-input-sm {\r\n        height: 2rem;\r\n        padding-right: 0.75rem;\r\n        font-size: 0.875rem;\r\n        line-height: 2rem;\r\n      }\r\n      .file-input-sm::file-selector-button {\r\n        margin-right: 0.75rem;\r\n        height: 1.875rem;\r\n        min-height: 1.875rem;\r\n        font-size: 0.875rem;\r\n      }\r\n      .file-input-md {\r\n        height: 3rem;\r\n        padding-right: 1rem;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n        line-height: 2;\r\n      }\r\n      .file-input-md::file-selector-button {\r\n        margin-right: 1rem;\r\n        height: 2.875rem;\r\n        min-height: 2.875rem;\r\n        font-size: 0.875rem;\r\n      }\r\n      .file-input-lg {\r\n        height: 4rem;\r\n        padding-right: 1.5rem;\r\n        font-size: 1.125rem;\r\n        line-height: 1.75rem;\r\n        line-height: 2;\r\n      }\r\n      .file-input-lg::file-selector-button {\r\n        margin-right: 1.5rem;\r\n        height: 3.875rem;\r\n        min-height: 3.875rem;\r\n        font-size: 1.125rem;\r\n      }\r\n      .indicator :where(.indicator-item) {\r\n        right: 0px;\r\n        left: auto;\r\n        top: 0px;\r\n        bottom: auto;\r\n        --tw-translate-x: 50%;\r\n        --tw-translate-y: -50%;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .indicator :where(.indicator-item.indicator-start) {\r\n        right: auto;\r\n        left: 0px;\r\n        --tw-translate-x: -50%;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .indicator :where(.indicator-item.indicator-center) {\r\n        right: 50%;\r\n        left: 50%;\r\n        --tw-translate-x: -50%;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .indicator :where(.indicator-item.indicator-end) {\r\n        right: 0px;\r\n        left: auto;\r\n        --tw-translate-x: 50%;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .indicator :where(.indicator-item.indicator-bottom) {\r\n        top: auto;\r\n        bottom: 0px;\r\n        --tw-translate-y: 50%;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .indicator :where(.indicator-item.indicator-middle) {\r\n        top: 50%;\r\n        bottom: 50%;\r\n        --tw-translate-y: -50%;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .indicator :where(.indicator-item.indicator-top) {\r\n        top: 0px;\r\n        bottom: auto;\r\n        --tw-translate-y: -50%;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .input-xs {\r\n        height: 1.5rem;\r\n        padding-left: 0.5rem;\r\n        padding-right: 0.5rem;\r\n        font-size: 0.75rem;\r\n        line-height: 1rem;\r\n        line-height: 1.625;\r\n      }\r\n      .input-md {\r\n        height: 3rem;\r\n        padding-left: 1rem;\r\n        padding-right: 1rem;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n        line-height: 2;\r\n      }\r\n      .input-lg {\r\n        height: 4rem;\r\n        padding-left: 1.5rem;\r\n        padding-right: 1.5rem;\r\n        font-size: 1.125rem;\r\n        line-height: 1.75rem;\r\n        line-height: 2;\r\n      }\r\n      .input-sm {\r\n        height: 2rem;\r\n        padding-left: 0.75rem;\r\n        padding-right: 0.75rem;\r\n        font-size: 0.875rem;\r\n        line-height: 2rem;\r\n      }\r\n      .kbd-xs {\r\n        padding-left: 0.25rem;\r\n        padding-right: 0.25rem;\r\n        font-size: 0.75rem;\r\n        line-height: 1rem;\r\n        min-height: 1.2em;\r\n        min-width: 1.2em;\r\n      }\r\n      .kbd-sm {\r\n        padding-left: 0.25rem;\r\n        padding-right: 0.25rem;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n        min-height: 1.6em;\r\n        min-width: 1.6em;\r\n      }\r\n      .kbd-md {\r\n        padding-left: 0.5rem;\r\n        padding-right: 0.5rem;\r\n        font-size: 1rem;\r\n        line-height: 1.5rem;\r\n        min-height: 2.2em;\r\n        min-width: 2.2em;\r\n      }\r\n      .kbd-lg {\r\n        padding-left: 1rem;\r\n        padding-right: 1rem;\r\n        font-size: 1.125rem;\r\n        line-height: 1.75rem;\r\n        min-height: 2.5em;\r\n        min-width: 2.5em;\r\n      }\r\n      .menu-vertical {\r\n        flex-direction: column;\r\n      }\r\n      .menu-vertical :where(li) {\r\n        flex-direction: column;\r\n      }\r\n      .menu-vertical > :where(li) > :where(ul) {\r\n        top: auto;\r\n        top: initial;\r\n        left: 100%;\r\n      }\r\n      .menu-horizontal {\r\n        display: inline-flex;\r\n        width: -moz-max-content;\r\n        width: max-content;\r\n        flex-direction: row;\r\n      }\r\n      .menu-horizontal :where(li) {\r\n        flex-direction: row;\r\n      }\r\n      .menu-horizontal > :where(li) > :where(ul) {\r\n        top: 100%;\r\n        left: auto;\r\n        left: initial;\r\n      }\r\n      .modal-bottom {\r\n        align-items: flex-end;\r\n      }\r\n      .modal-middle {\r\n        align-items: center;\r\n      }\r\n      .radio-xs {\r\n        height: 1rem;\r\n        width: 1rem;\r\n      }\r\n      .radio-sm {\r\n        height: 1.25rem;\r\n        width: 1.25rem;\r\n      }\r\n      .radio-md {\r\n        height: 1.5rem;\r\n        width: 1.5rem;\r\n      }\r\n      .radio-lg {\r\n        height: 2rem;\r\n        width: 2rem;\r\n      }\r\n      .range-xs {\r\n        height: 1rem;\r\n      }\r\n      .range-xs::-webkit-slider-runnable-track {\r\n        height: 0.25rem;\r\n      }\r\n      .range-xs::-moz-range-track {\r\n        height: 0.25rem;\r\n      }\r\n      .range-xs::-webkit-slider-thumb {\r\n        height: 1rem;\r\n        width: 1rem;\r\n        --filler-offset: 0.4rem;\r\n      }\r\n      .range-xs::-moz-range-thumb {\r\n        height: 1rem;\r\n        width: 1rem;\r\n        --filler-offset: 0.4rem;\r\n      }\r\n      .range-sm {\r\n        height: 1.25rem;\r\n      }\r\n      .range-sm::-webkit-slider-runnable-track {\r\n        height: 0.25rem;\r\n      }\r\n      .range-sm::-moz-range-track {\r\n        height: 0.25rem;\r\n      }\r\n      .range-sm::-webkit-slider-thumb {\r\n        height: 1.25rem;\r\n        width: 1.25rem;\r\n        --filler-offset: 0.5rem;\r\n      }\r\n      .range-sm::-moz-range-thumb {\r\n        height: 1.25rem;\r\n        width: 1.25rem;\r\n        --filler-offset: 0.5rem;\r\n      }\r\n      .range-md {\r\n        height: 1.5rem;\r\n      }\r\n      .range-md::-webkit-slider-runnable-track {\r\n        height: 0.5rem;\r\n      }\r\n      .range-md::-moz-range-track {\r\n        height: 0.5rem;\r\n      }\r\n      .range-md::-webkit-slider-thumb {\r\n        height: 1.5rem;\r\n        width: 1.5rem;\r\n        --filler-offset: 0.6rem;\r\n      }\r\n      .range-md::-moz-range-thumb {\r\n        height: 1.5rem;\r\n        width: 1.5rem;\r\n        --filler-offset: 0.6rem;\r\n      }\r\n      .range-lg {\r\n        height: 2rem;\r\n      }\r\n      .range-lg::-webkit-slider-runnable-track {\r\n        height: 1rem;\r\n      }\r\n      .range-lg::-moz-range-track {\r\n        height: 1rem;\r\n      }\r\n      .range-lg::-webkit-slider-thumb {\r\n        height: 2rem;\r\n        width: 2rem;\r\n        --filler-offset: 1rem;\r\n      }\r\n      .range-lg::-moz-range-thumb {\r\n        height: 2rem;\r\n        width: 2rem;\r\n        --filler-offset: 1rem;\r\n      }\r\n      .rating-xs input {\r\n        height: 0.75rem;\r\n        width: 0.75rem;\r\n      }\r\n      .rating-sm input {\r\n        height: 1rem;\r\n        width: 1rem;\r\n      }\r\n      .rating-md input {\r\n        height: 1.5rem;\r\n        width: 1.5rem;\r\n      }\r\n      .rating-lg input {\r\n        height: 2.5rem;\r\n        width: 2.5rem;\r\n      }\r\n      .rating-half.rating-xs input:not(.rating-hidden) {\r\n        width: 0.375rem;\r\n      }\r\n      .rating-half.rating-sm input:not(.rating-hidden) {\r\n        width: 0.5rem;\r\n      }\r\n      .rating-half.rating-md input:not(.rating-hidden) {\r\n        width: 0.75rem;\r\n      }\r\n      .rating-half.rating-lg input:not(.rating-hidden) {\r\n        width: 1.25rem;\r\n      }\r\n      .select-md {\r\n        height: 3rem;\r\n        padding-left: 1rem;\r\n        padding-right: 2.5rem;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n        line-height: 2;\r\n        min-height: 3rem;\r\n      }\r\n      [dir=\"rtl\"] .select-md {\r\n        padding-right: 1rem;\r\n        padding-left: 2.5rem;\r\n      }\r\n      .select-lg {\r\n        height: 4rem;\r\n        padding-left: 1.5rem;\r\n        padding-right: 2rem;\r\n        font-size: 1.125rem;\r\n        line-height: 1.75rem;\r\n        line-height: 2;\r\n        min-height: 4rem;\r\n      }\r\n      [dir=\"rtl\"] .select-lg {\r\n        padding-right: 1.5rem;\r\n        padding-left: 2rem;\r\n      }\r\n      .select-sm {\r\n        height: 2rem;\r\n        padding-left: 0.75rem;\r\n        padding-right: 2rem;\r\n        font-size: 0.875rem;\r\n        line-height: 2rem;\r\n        min-height: 2rem;\r\n      }\r\n      [dir=\"rtl\"] .select-sm {\r\n        padding-right: 0.75rem;\r\n        padding-left: 2rem;\r\n      }\r\n      .select-xs {\r\n        height: 1.5rem;\r\n        padding-left: 0.5rem;\r\n        padding-right: 2rem;\r\n        font-size: 0.75rem;\r\n        line-height: 1rem;\r\n        line-height: 1.625;\r\n        min-height: 1.5rem;\r\n      }\r\n      [dir=\"rtl\"] .select-xs {\r\n        padding-right: 0.5rem;\r\n        padding-left: 2rem;\r\n      }\r\n      .stats-horizontal {\r\n        grid-auto-flow: column;\r\n      }\r\n      .stats-vertical {\r\n        grid-auto-flow: row;\r\n      }\r\n      .steps-horizontal {\r\n        grid-auto-columns: 1fr;\r\n        display: inline-grid;\r\n        grid-auto-flow: column;\r\n        overflow: hidden;\r\n        overflow-x: auto;\r\n      }\r\n      .steps-horizontal .step {\r\n        display: grid;\r\n        grid-template-columns: repeat(1, minmax(0, 1fr));\r\n        grid-template-rows: repeat(2, minmax(0, 1fr));\r\n        align-items: center;\r\n        justify-items: center;\r\n        place-items: center;\r\n        text-align: center;\r\n      }\r\n      .steps-vertical {\r\n        grid-auto-rows: 1fr;\r\n        grid-auto-flow: row;\r\n      }\r\n      .steps-vertical .step {\r\n        display: grid;\r\n        grid-template-columns: repeat(2, minmax(0, 1fr));\r\n        grid-template-rows: repeat(1, minmax(0, 1fr));\r\n      }\r\n      .tab-md {\r\n        height: 2rem;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n        line-height: 2;\r\n        --tab-padding: 1rem;\r\n      }\r\n      .tab-lg {\r\n        height: 3rem;\r\n        font-size: 1.125rem;\r\n        line-height: 1.75rem;\r\n        line-height: 2;\r\n        --tab-padding: 1.25rem;\r\n      }\r\n      .tab-sm {\r\n        height: 1.5rem;\r\n        font-size: 0.875rem;\r\n        line-height: .75rem;\r\n        --tab-padding: 0.75rem;\r\n      }\r\n      .tab-xs {\r\n        height: 1.25rem;\r\n        font-size: 0.75rem;\r\n        line-height: .75rem;\r\n        --tab-padding: 0.5rem;\r\n      }\r\n      .textarea-xs {\r\n        padding-top: 0.25rem;\r\n        padding-bottom: 0.25rem;\r\n        padding-left: 0.5rem;\r\n        padding-right: 0.5rem;\r\n        font-size: 0.75rem;\r\n        line-height: 1rem;\r\n        line-height: 1.625;\r\n      }\r\n      .textarea-sm {\r\n        padding-top: 0.25rem;\r\n        padding-bottom: 0.25rem;\r\n        padding-left: 0.75rem;\r\n        padding-right: 0.75rem;\r\n        font-size: 0.875rem;\r\n        line-height: 2rem;\r\n      }\r\n      .textarea-md {\r\n        padding-top: 0.75rem;\r\n        padding-bottom: 0.75rem;\r\n        padding-left: 1rem;\r\n        padding-right: 1rem;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n        line-height: 2;\r\n      }\r\n      .textarea-lg {\r\n        padding-top: 1rem;\r\n        padding-bottom: 1rem;\r\n        padding-left: 1.5rem;\r\n        padding-right: 1.5rem;\r\n        font-size: 1.125rem;\r\n        line-height: 1.75rem;\r\n        line-height: 2;\r\n      }\r\n      :where(.toast) {\r\n        right: 0px;\r\n        left: auto;\r\n        top: auto;\r\n        bottom: 0px;\r\n        --tw-translate-x: 0px;\r\n        --tw-translate-y: 0px;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .toast:where(.toast-start) {\r\n        right: auto;\r\n        left: 0px;\r\n        --tw-translate-x: 0px;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .toast:where(.toast-center) {\r\n        right: 50%;\r\n        left: 50%;\r\n        --tw-translate-x: -50%;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .toast:where(.toast-end) {\r\n        right: 0px;\r\n        left: auto;\r\n        --tw-translate-x: 0px;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .toast:where(.toast-bottom) {\r\n        top: auto;\r\n        bottom: 0px;\r\n        --tw-translate-y: 0px;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .toast:where(.toast-middle) {\r\n        top: 50%;\r\n        bottom: auto;\r\n        --tw-translate-y: -50%;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .toast:where(.toast-top) {\r\n        top: 0px;\r\n        bottom: auto;\r\n        --tw-translate-y: 0px;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .toggle-xs {\r\n        --handleoffset: 0.5rem;\r\n        height: 1rem;\r\n        width: 1.5rem;\r\n      }\r\n      .toggle-sm {\r\n        --handleoffset: 0.75rem;\r\n        height: 1.25rem;\r\n        width: 2rem;\r\n      }\r\n      .toggle-md {\r\n        --handleoffset: 1.5rem;\r\n        height: 1.5rem;\r\n        width: 3rem;\r\n      }\r\n      .toggle-lg {\r\n        --handleoffset: 2rem;\r\n        height: 2rem;\r\n        width: 4rem;\r\n      }\r\n      .artboard-demo {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--bc) / var(--tw-text-opacity));\r\n        border-radius: 1rem;\r\n        border-radius: var(--rounded-box, 1rem);\r\n        box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);\r\n      }\r\n      .avatar.online:before {\r\n        content: \"\";\r\n        position: absolute;\r\n        z-index: 10;\r\n        display: block;\r\n        border-radius: 9999px;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--su) / var(--tw-bg-opacity));\r\n        width: 15%;\r\n        height: 15%;\r\n        top: 7%;\r\n        right: 7%;\r\n        box-shadow: 0 0 0 2px hsl(var(--b1));\r\n      }\r\n      .avatar.offline:before {\r\n        content: \"\";\r\n        position: absolute;\r\n        z-index: 10;\r\n        display: block;\r\n        border-radius: 9999px;\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b2) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--b3, var(--b2)) / var(--tw-bg-opacity));\r\n        width: 15%;\r\n        height: 15%;\r\n        top: 7%;\r\n        right: 7%;\r\n        box-shadow: 0 0 0 2px hsl(var(--b1));\r\n      }\r\n      .btn-group .btn:not(:first-child):not(:last-child), .btn-group.btn-group-horizontal .btn:not(:first-child):not(:last-child) {\r\n        border-top-left-radius: 0;\r\n        border-top-right-radius: 0;\r\n        border-bottom-left-radius: 0;\r\n        border-bottom-right-radius: 0;\r\n      }\r\n      .btn-group .btn:first-child:not(:last-child), .btn-group.btn-group-horizontal .btn:first-child:not(:last-child) {\r\n        margin-left: -1px;\r\n        margin-top: -0px;\r\n        border-top-left-radius: 0.5rem;\r\n        border-top-left-radius: var(--rounded-btn, 0.5rem);\r\n        border-top-right-radius: 0;\r\n        border-bottom-left-radius: 0.5rem;\r\n        border-bottom-left-radius: var(--rounded-btn, 0.5rem);\r\n        border-bottom-right-radius: 0;\r\n      }\r\n      .btn-group .btn:last-child:not(:first-child), .btn-group.btn-group-horizontal .btn:last-child:not(:first-child) {\r\n        border-top-left-radius: 0;\r\n        border-top-right-radius: 0.5rem;\r\n        border-top-right-radius: var(--rounded-btn, 0.5rem);\r\n        border-bottom-left-radius: 0;\r\n        border-bottom-right-radius: 0.5rem;\r\n        border-bottom-right-radius: var(--rounded-btn, 0.5rem);\r\n      }\r\n      .btn-group.btn-group-vertical .btn:first-child:not(:last-child) {\r\n        margin-left: -0px;\r\n        margin-top: -1px;\r\n        border-top-left-radius: 0.5rem;\r\n        border-top-left-radius: var(--rounded-btn, 0.5rem);\r\n        border-top-right-radius: 0.5rem;\r\n        border-top-right-radius: var(--rounded-btn, 0.5rem);\r\n        border-bottom-left-radius: 0;\r\n        border-bottom-right-radius: 0;\r\n      }\r\n      .btn-group.btn-group-vertical .btn:last-child:not(:first-child) {\r\n        border-top-left-radius: 0;\r\n        border-top-right-radius: 0;\r\n        border-bottom-left-radius: 0.5rem;\r\n        border-bottom-left-radius: var(--rounded-btn, 0.5rem);\r\n        border-bottom-right-radius: 0.5rem;\r\n        border-bottom-right-radius: var(--rounded-btn, 0.5rem);\r\n      }\r\n      .card-compact .card-body {\r\n        padding: 1rem;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n      }\r\n      .card-compact .card-title {\r\n        margin-bottom: 0.25rem;\r\n      }\r\n      .card-normal .card-body {\r\n        padding: 2rem;\r\n        padding: var(--padding-card, 2rem);\r\n        font-size: 1rem;\r\n        line-height: 1.5rem;\r\n      }\r\n      .card-normal .card-title {\r\n        margin-bottom: 0.75rem;\r\n      }\r\n      .divider-horizontal {\r\n        margin-top: 0px;\r\n        margin-bottom: 0px;\r\n        margin-left: 1rem;\r\n        margin-right: 1rem;\r\n        height: auto;\r\n        width: 1rem;\r\n      }\r\n      .divider-vertical {\r\n        margin-left: 0px;\r\n        margin-right: 0px;\r\n        margin-top: 1rem;\r\n        margin-bottom: 1rem;\r\n        height: 1rem;\r\n        width: auto;\r\n      }\r\n      .menu-vertical :where(li.bordered > *) {\r\n        border-left-width: 4px;\r\n        border-bottom-width: 0px;\r\n      }\r\n      .menu-horizontal :where(li.bordered > *) {\r\n        border-left-width: 0px;\r\n        border-bottom-width: 4px;\r\n      }\r\n      .menu-normal :where(li > *) {\r\n        padding-top: 0.75rem;\r\n        padding-bottom: 0.75rem;\r\n        font-size: 1rem;\r\n        line-height: 1.5rem;\r\n      }\r\n      .menu-compact :where(li > *) {\r\n        padding-top: 0.5rem;\r\n        padding-bottom: 0.5rem;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n      }\r\n      .menu-vertical > :where(li:first-child) {\r\n        border-top-left-radius: inherit;\r\n        border-top-right-radius: inherit;\r\n        border-bottom-right-radius: 0;\r\n        border-bottom-right-radius: initial;\r\n        border-bottom-left-radius: 0;\r\n        border-bottom-left-radius: initial;\r\n      }\r\n      .menu-vertical > :where(li:first-child) > :where(*:not(ul)) {\r\n        border-top-left-radius: inherit;\r\n        border-top-right-radius: inherit;\r\n        border-bottom-right-radius: 0;\r\n        border-bottom-right-radius: initial;\r\n        border-bottom-left-radius: 0;\r\n        border-bottom-left-radius: initial;\r\n      }\r\n      .menu-vertical > :where(li:last-child) {\r\n        border-top-left-radius: 0;\r\n        border-top-left-radius: initial;\r\n        border-top-right-radius: 0;\r\n        border-top-right-radius: initial;\r\n        border-bottom-right-radius: inherit;\r\n        border-bottom-left-radius: inherit;\r\n      }\r\n      .menu-vertical > :where(li:last-child) > :where(*:not(ul)) {\r\n        border-top-left-radius: 0;\r\n        border-top-left-radius: initial;\r\n        border-top-right-radius: 0;\r\n        border-top-right-radius: initial;\r\n        border-bottom-right-radius: inherit;\r\n        border-bottom-left-radius: inherit;\r\n      }\r\n      .menu-horizontal > :where(li:first-child) {\r\n        border-top-left-radius: inherit;\r\n        border-top-right-radius: 0;\r\n        border-top-right-radius: initial;\r\n        border-bottom-right-radius: 0;\r\n        border-bottom-right-radius: initial;\r\n        border-bottom-left-radius: inherit;\r\n      }\r\n      .menu-horizontal > :where(li:first-child) > :where(*:not(ul)) {\r\n        border-top-left-radius: inherit;\r\n        border-top-right-radius: 0;\r\n        border-top-right-radius: initial;\r\n        border-bottom-right-radius: 0;\r\n        border-bottom-right-radius: initial;\r\n        border-bottom-left-radius: inherit;\r\n      }\r\n      .menu-horizontal > :where(li:last-child) {\r\n        border-top-left-radius: 0;\r\n        border-top-left-radius: initial;\r\n        border-top-right-radius: inherit;\r\n        border-bottom-right-radius: inherit;\r\n        border-bottom-left-radius: 0;\r\n        border-bottom-left-radius: initial;\r\n      }\r\n      .menu-horizontal > :where(li:last-child) > :where(*:not(ul)) {\r\n        border-top-left-radius: 0;\r\n        border-top-left-radius: initial;\r\n        border-top-right-radius: inherit;\r\n        border-bottom-right-radius: inherit;\r\n        border-bottom-left-radius: 0;\r\n        border-bottom-left-radius: initial;\r\n      }\r\n      .modal-bottom :where(.modal-box) {\r\n        width: 100%;\r\n        max-width: none;\r\n        --tw-translate-y: 2.5rem;\r\n        --tw-scale-x: 1;\r\n        --tw-scale-y: 1;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n        border-bottom-right-radius: 0px;\r\n        border-bottom-left-radius: 0px;\r\n      }\r\n      .modal-middle :where(.modal-box) {\r\n        width: 91.666667%;\r\n        max-width: 32rem;\r\n        --tw-translate-y: 0px;\r\n        --tw-scale-x: .9;\r\n        --tw-scale-y: .9;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n        border-bottom-left-radius: 1rem;\r\n        border-bottom-left-radius: var(--rounded-box, 1rem);\r\n        border-bottom-right-radius: 1rem;\r\n        border-bottom-right-radius: var(--rounded-box, 1rem);\r\n      }\r\n      .stats-horizontal > :not([hidden]) ~ :not([hidden]) {\r\n        --tw-divide-x-reverse: 0;\r\n        border-right-width: calc(1px * var(--tw-divide-x-reverse));\r\n        border-left-width: calc(1px * (1 - var(--tw-divide-x-reverse)));\r\n        border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));\r\n        --tw-divide-y-reverse: 0;\r\n        border-top-width: calc(0px * (1 - var(--tw-divide-y-reverse)));\r\n        border-top-width: calc(0px * calc(1 - var(--tw-divide-y-reverse)));\r\n        border-bottom-width: calc(0px * var(--tw-divide-y-reverse));\r\n      }\r\n      .stats-horizontal {\r\n        overflow-x: auto;\r\n      }\r\n      .stats-vertical > :not([hidden]) ~ :not([hidden]) {\r\n        --tw-divide-y-reverse: 0;\r\n        border-top-width: calc(1px * (1 - var(--tw-divide-y-reverse)));\r\n        border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\r\n        border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\r\n        --tw-divide-x-reverse: 0;\r\n        border-right-width: calc(0px * var(--tw-divide-x-reverse));\r\n        border-left-width: calc(0px * (1 - var(--tw-divide-x-reverse)));\r\n        border-left-width: calc(0px * calc(1 - var(--tw-divide-x-reverse)));\r\n      }\r\n      .stats-vertical {\r\n        overflow-y: auto;\r\n      }\r\n      .steps-horizontal .step {\r\n        grid-template-rows: 40px 1fr;\r\n        grid-template-columns: auto;\r\n        min-width: 4rem;\r\n      }\r\n      .steps-horizontal .step:before {\r\n        height: 0.5rem;\r\n        width: 100%;\r\n        --tw-translate-y: 0px;\r\n        --tw-translate-x: 0px;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n        content: \"\";\r\n        margin-left: -100%;\r\n      }\r\n      .steps-vertical .step {\r\n        gap: 0.5rem;\r\n        grid-template-columns: 40px 1fr;\r\n        grid-template-rows: auto;\r\n        min-height: 4rem;\r\n        justify-items: start;\r\n      }\r\n      .steps-vertical .step:before {\r\n        height: 100%;\r\n        width: 0.5rem;\r\n        --tw-translate-y: -50%;\r\n        --tw-translate-x: -50%;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n        margin-left: 50%;\r\n      }\r\n      .table-normal :where(th, td) {\r\n        padding: 1rem;\r\n        font-size: 1rem;\r\n        line-height: 1.5rem;\r\n      }\r\n      .table-compact :where(th, td) {\r\n        padding: 0.5rem;\r\n        font-size: 0.875rem;\r\n        line-height: 1.25rem;\r\n      }\r\n      .sr-only {\r\n        position: absolute;\r\n        width: 1px;\r\n        height: 1px;\r\n        padding: 0;\r\n        margin: -1px;\r\n        overflow: hidden;\r\n        clip: rect(0, 0, 0, 0);\r\n        white-space: nowrap;\r\n        border-width: 0;\r\n      }\r\n      .not-sr-only {\r\n        position: static;\r\n        width: auto;\r\n        height: auto;\r\n        padding: 0;\r\n        margin: 0;\r\n        overflow: visible;\r\n        clip: auto;\r\n        white-space: normal;\r\n      }\r\n      .pointer-events-none {\r\n        pointer-events: none;\r\n      }\r\n      .visible {\r\n        visibility: visible;\r\n      }\r\n      .invisible {\r\n        visibility: hidden;\r\n      }\r\n      .collapse {\r\n        visibility: collapse;\r\n      }\r\n      .static {\r\n        position: static;\r\n      }\r\n      .fixed {\r\n        position: fixed;\r\n      }\r\n      .absolute {\r\n        position: absolute;\r\n      }\r\n      .relative {\r\n        position: relative;\r\n      }\r\n      .sticky {\r\n        position: sticky;\r\n      }\r\n      .-inset-1 {\r\n        top: -0.25rem;\r\n        right: -0.25rem;\r\n        bottom: -0.25rem;\r\n        left: -0.25rem;\r\n      }\r\n      .inset-0 {\r\n        top: 0px;\r\n        right: 0px;\r\n        bottom: 0px;\r\n        left: 0px;\r\n      }\r\n      .left-5 {\r\n        left: 1.25rem;\r\n      }\r\n      .right-5 {\r\n        right: 1.25rem;\r\n      }\r\n      .top-1\\/2 {\r\n        top: 50%;\r\n      }\r\n      .top-0 {\r\n        top: 0px;\r\n      }\r\n      .bottom-0 {\r\n        bottom: 0px;\r\n      }\r\n      .left-0 {\r\n        left: 0px;\r\n      }\r\n      .right-0 {\r\n        right: 0px;\r\n      }\r\n      .top-\\[7\\%\\] {\r\n        top: 7%;\r\n      }\r\n      .isolate {\r\n        isolation: isolate;\r\n      }\r\n      .isolation-auto {\r\n        isolation: auto;\r\n      }\r\n      .z-10 {\r\n        z-index: 10;\r\n      }\r\n      .z-0 {\r\n        z-index: 0;\r\n      }\r\n      .z-40 {\r\n        z-index: 40;\r\n      }\r\n      .z-50 {\r\n        z-index: 50;\r\n      }\r\n      .z-30 {\r\n        z-index: 30;\r\n      }\r\n      .order-first {\r\n        order: -9999;\r\n      }\r\n      .m-0 {\r\n        margin: 0px;\r\n      }\r\n      .m-1 {\r\n        margin: 0.25rem;\r\n      }\r\n      .m-4 {\r\n        margin: 1rem;\r\n      }\r\n      .m-5 {\r\n        margin: 1.25rem;\r\n      }\r\n      .mx-4 {\r\n        margin-left: 1rem;\r\n        margin-right: 1rem;\r\n      }\r\n      .mx-8 {\r\n        margin-left: 2rem;\r\n        margin-right: 2rem;\r\n      }\r\n      .my-2 {\r\n        margin-top: 0.5rem;\r\n        margin-bottom: 0.5rem;\r\n      }\r\n      .mx-6 {\r\n        margin-left: 1.5rem;\r\n        margin-right: 1.5rem;\r\n      }\r\n      .my-0 {\r\n        margin-top: 0px;\r\n        margin-bottom: 0px;\r\n      }\r\n      .my-20 {\r\n        margin-top: 5rem;\r\n        margin-bottom: 5rem;\r\n      }\r\n      .mx-auto {\r\n        margin-left: auto;\r\n        margin-right: auto;\r\n      }\r\n      .my-5 {\r\n        margin-top: 1.25rem;\r\n        margin-bottom: 1.25rem;\r\n      }\r\n      .my-3 {\r\n        margin-top: 0.75rem;\r\n        margin-bottom: 0.75rem;\r\n      }\r\n      .mx-5 {\r\n        margin-left: 1.25rem;\r\n        margin-right: 1.25rem;\r\n      }\r\n      .my-1 {\r\n        margin-top: 0.25rem;\r\n        margin-bottom: 0.25rem;\r\n      }\r\n      .mx-2 {\r\n        margin-left: 0.5rem;\r\n        margin-right: 0.5rem;\r\n      }\r\n      .mb-8 {\r\n        margin-bottom: 2rem;\r\n      }\r\n      .mr-4 {\r\n        margin-right: 1rem;\r\n      }\r\n      .ml-4 {\r\n        margin-left: 1rem;\r\n      }\r\n      .mb-2 {\r\n        margin-bottom: 0.5rem;\r\n      }\r\n      .mt-2 {\r\n        margin-top: 0.5rem;\r\n      }\r\n      .mb-0 {\r\n        margin-bottom: 0px;\r\n      }\r\n      .mt-4 {\r\n        margin-top: 1rem;\r\n      }\r\n      .mt-0 {\r\n        margin-top: 0px;\r\n      }\r\n      .mb-10 {\r\n        margin-bottom: 2.5rem;\r\n      }\r\n      .mt-20 {\r\n        margin-top: 5rem;\r\n      }\r\n      .mb-20 {\r\n        margin-bottom: 5rem;\r\n      }\r\n      .mb-4 {\r\n        margin-bottom: 1rem;\r\n      }\r\n      .mt-3 {\r\n        margin-top: 0.75rem;\r\n      }\r\n      .mt-1 {\r\n        margin-top: 0.25rem;\r\n      }\r\n      .mr-2 {\r\n        margin-right: 0.5rem;\r\n      }\r\n      .ml-1 {\r\n        margin-left: 0.25rem;\r\n      }\r\n      .mr-3 {\r\n        margin-right: 0.75rem;\r\n      }\r\n      .mt-\\[-1px\\] {\r\n        margin-top: -1px;\r\n      }\r\n      .mt-5 {\r\n        margin-top: 1.25rem;\r\n      }\r\n      .mr-10 {\r\n        margin-right: 2.5rem;\r\n      }\r\n      .ml-auto {\r\n        margin-left: auto;\r\n      }\r\n      .mr-6 {\r\n        margin-right: 1.5rem;\r\n      }\r\n      .mt-8 {\r\n        margin-top: 2rem;\r\n      }\r\n      .ml-\\[22\\%\\] {\r\n        margin-left: 22%;\r\n      }\r\n      .mr-8 {\r\n        margin-right: 2rem;\r\n      }\r\n      .mb-3 {\r\n        margin-bottom: 0.75rem;\r\n      }\r\n      .mr-1 {\r\n        margin-right: 0.25rem;\r\n      }\r\n      .mb-1 {\r\n        margin-bottom: 0.25rem;\r\n      }\r\n      .box-border {\r\n        box-sizing: border-box;\r\n      }\r\n      .block {\r\n        display: block;\r\n      }\r\n      .inline-block {\r\n        display: inline-block;\r\n      }\r\n      .inline {\r\n        display: inline;\r\n      }\r\n      .flex {\r\n        display: flex;\r\n      }\r\n      .inline-flex {\r\n        display: inline-flex;\r\n      }\r\n      .table {\r\n        display: table;\r\n      }\r\n      .inline-table {\r\n        display: inline-table;\r\n      }\r\n      .table-caption {\r\n        display: table-caption;\r\n      }\r\n      .table-cell {\r\n        display: table-cell;\r\n      }\r\n      .table-column {\r\n        display: table-column;\r\n      }\r\n      .table-column-group {\r\n        display: table-column-group;\r\n      }\r\n      .table-footer-group {\r\n        display: table-footer-group;\r\n      }\r\n      .table-header-group {\r\n        display: table-header-group;\r\n      }\r\n      .table-row-group {\r\n        display: table-row-group;\r\n      }\r\n      .table-row {\r\n        display: table-row;\r\n      }\r\n      .flow-root {\r\n        display: flow-root;\r\n      }\r\n      .grid {\r\n        display: grid;\r\n      }\r\n      .inline-grid {\r\n        display: inline-grid;\r\n      }\r\n      .contents {\r\n        display: contents;\r\n      }\r\n      .list-item {\r\n        display: list-item;\r\n      }\r\n      .hidden {\r\n        display: none;\r\n      }\r\n      .aspect-auto {\r\n        aspect-ratio: auto;\r\n      }\r\n      .aspect-\\[1\\/1\\] {\r\n        aspect-ratio: 1/1;\r\n      }\r\n      .h-32 {\r\n        height: 8rem;\r\n      }\r\n      .h-24 {\r\n        height: 6rem;\r\n      }\r\n      .h-14 {\r\n        height: 3.5rem;\r\n      }\r\n      .h-10 {\r\n        height: 2.5rem;\r\n      }\r\n      .h-full {\r\n        height: 100%;\r\n      }\r\n      .h-\\[calc\\(100vh-64px\\)\\] {\r\n        height: calc(100vh - 64px);\r\n      }\r\n      .h-screen {\r\n        height: 100vh;\r\n      }\r\n      .h-\\[40vh\\] {\r\n        height: 40vh;\r\n      }\r\n      .h-\\[100vw\\] {\r\n        height: 100vw;\r\n      }\r\n      .h-40 {\r\n        height: 10rem;\r\n      }\r\n      .h-min {\r\n        height: -moz-min-content;\r\n        height: min-content;\r\n      }\r\n      .h-72 {\r\n        height: 18rem;\r\n      }\r\n      .h-1 {\r\n        height: 0.25rem;\r\n      }\r\n      .h-4 {\r\n        height: 1rem;\r\n      }\r\n      .h-\\[17rem\\] {\r\n        height: 17rem;\r\n      }\r\n      .h-3 {\r\n        height: 0.75rem;\r\n      }\r\n      .h-6 {\r\n        height: 1.5rem;\r\n      }\r\n      .h-7 {\r\n        height: 1.75rem;\r\n      }\r\n      .h-\\[30rem\\] {\r\n        height: 30rem;\r\n      }\r\n      .h-\\[0\\.5rem\\] {\r\n        height: 0.5rem;\r\n      }\r\n      .h-\\[1rem\\] {\r\n        height: 1rem;\r\n      }\r\n      .h-\\[1\\.5rem\\] {\r\n        height: 1.5rem;\r\n      }\r\n      .h-\\[2rem\\] {\r\n        height: 2rem;\r\n      }\r\n      .h-\\[2\\.5rem\\] {\r\n        height: 2.5rem;\r\n      }\r\n      .h-\\[3\\.5rem\\] {\r\n        height: 3.5rem;\r\n      }\r\n      .h-\\[5rem\\] {\r\n        height: 5rem;\r\n      }\r\n      .h-\\[7\\.5rem\\] {\r\n        height: 7.5rem;\r\n      }\r\n      .h-\\[10rem\\] {\r\n        height: 10rem;\r\n      }\r\n      .max-h-0 {\r\n        max-height: 0px;\r\n      }\r\n      .max-h-80 {\r\n        max-height: 20rem;\r\n      }\r\n      .max-h-\\[500px\\] {\r\n        max-height: 500px;\r\n      }\r\n      .max-h-20 {\r\n        max-height: 5rem;\r\n      }\r\n      .max-h-\\[40px\\] {\r\n        max-height: 40px;\r\n      }\r\n      .max-h-\\[85px\\] {\r\n        max-height: 85px;\r\n      }\r\n      .max-h-\\[2048px\\] {\r\n        max-height: 2048px;\r\n      }\r\n      .min-h-full {\r\n        min-height: 100%;\r\n      }\r\n      .w-full {\r\n        width: 100%;\r\n      }\r\n      .w-32 {\r\n        width: 8rem;\r\n      }\r\n      .w-24 {\r\n        width: 6rem;\r\n      }\r\n      .w-14 {\r\n        width: 3.5rem;\r\n      }\r\n      .w-10 {\r\n        width: 2.5rem;\r\n      }\r\n      .w-1\\/2 {\r\n        width: 50%;\r\n      }\r\n      .w-\\[70\\%\\] {\r\n        width: 70%;\r\n      }\r\n      .w-screen {\r\n        width: 100vw;\r\n      }\r\n      .w-6 {\r\n        width: 1.5rem;\r\n      }\r\n      .w-\\[100vw\\] {\r\n        width: 100vw;\r\n      }\r\n      .w-min {\r\n        width: -moz-min-content;\r\n        width: min-content;\r\n      }\r\n      .w-\\[18rem\\] {\r\n        width: 18rem;\r\n      }\r\n      .w-max {\r\n        width: -moz-max-content;\r\n        width: max-content;\r\n      }\r\n      .w-5 {\r\n        width: 1.25rem;\r\n      }\r\n      .w-96 {\r\n        width: 24rem;\r\n      }\r\n      .w-1\\/5 {\r\n        width: 20%;\r\n      }\r\n      .w-3 {\r\n        width: 0.75rem;\r\n      }\r\n      .w-8 {\r\n        width: 2rem;\r\n      }\r\n      .w-11\\/12 {\r\n        width: 91.666667%;\r\n      }\r\n      .w-fit {\r\n        width: -moz-fit-content;\r\n        width: fit-content;\r\n      }\r\n      .min-w-\\[24px\\] {\r\n        min-width: 24px;\r\n      }\r\n      .min-w-full {\r\n        min-width: 100%;\r\n      }\r\n      .max-w-prose {\r\n        max-width: 65ch;\r\n      }\r\n      .max-w-screen-xl {\r\n        max-width: 1280px;\r\n      }\r\n      .max-w-none {\r\n        max-width: none;\r\n      }\r\n      .max-w-\\[75\\%\\] {\r\n        max-width: 75%;\r\n      }\r\n      .max-w-lg {\r\n        max-width: 32rem;\r\n      }\r\n      .flex-1 {\r\n        flex: 1 1 0%;\r\n      }\r\n      .shrink {\r\n        flex-shrink: 1;\r\n      }\r\n      .grow {\r\n        flex-grow: 1;\r\n      }\r\n      .border-collapse {\r\n        border-collapse: collapse;\r\n      }\r\n      .-translate-y-1\\/2 {\r\n        --tw-translate-y: -50%;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .-translate-y-72 {\r\n        --tw-translate-y: -18rem;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .translate-x-0 {\r\n        --tw-translate-x: 0px;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .translate-x-full {\r\n        --tw-translate-x: 100%;\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      .transform {\r\n        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n      }\r\n      @keyframes spin {\r\n      \r\n        to {\r\n          transform: rotate(360deg);\r\n        }\r\n      }\r\n      .animate-spin {\r\n        animation: spin 1s linear infinite;\r\n      }\r\n      .cursor-pointer {\r\n        cursor: pointer;\r\n      }\r\n      .resize {\r\n        resize: both;\r\n      }\r\n      .list-disc {\r\n        list-style-type: disc;\r\n      }\r\n      .appearance-none {\r\n        -webkit-appearance: none;\r\n           -moz-appearance: none;\r\n                appearance: none;\r\n      }\r\n      .flex-row {\r\n        flex-direction: row;\r\n      }\r\n      .flex-row-reverse {\r\n        flex-direction: row-reverse;\r\n      }\r\n      .flex-col {\r\n        flex-direction: column;\r\n      }\r\n      .flex-col-reverse {\r\n        flex-direction: column-reverse;\r\n      }\r\n      .flex-wrap {\r\n        flex-wrap: wrap;\r\n      }\r\n      .items-start {\r\n        align-items: flex-start;\r\n      }\r\n      .items-center {\r\n        align-items: center;\r\n      }\r\n      .items-baseline {\r\n        align-items: baseline;\r\n      }\r\n      .items-stretch {\r\n        align-items: stretch;\r\n      }\r\n      .justify-start {\r\n        justify-content: flex-start;\r\n      }\r\n      .justify-end {\r\n        justify-content: flex-end;\r\n      }\r\n      .justify-center {\r\n        justify-content: center;\r\n      }\r\n      .justify-between {\r\n        justify-content: space-between;\r\n      }\r\n      .justify-evenly {\r\n        justify-content: space-evenly;\r\n      }\r\n      .gap-2 {\r\n        gap: 0.5rem;\r\n      }\r\n      .gap-5 {\r\n        gap: 1.25rem;\r\n      }\r\n      .gap-10 {\r\n        gap: 2.5rem;\r\n      }\r\n      .gap-8 {\r\n        gap: 2rem;\r\n      }\r\n      .gap-4 {\r\n        gap: 1rem;\r\n      }\r\n      .gap-3 {\r\n        gap: 0.75rem;\r\n      }\r\n      .gap-1 {\r\n        gap: 0.25rem;\r\n      }\r\n      .gap-x-8 {\r\n        -moz-column-gap: 2rem;\r\n             column-gap: 2rem;\r\n      }\r\n      .space-y-6 > :not([hidden]) ~ :not([hidden]) {\r\n        --tw-space-y-reverse: 0;\r\n        margin-top: calc(1.5rem * (1 - var(--tw-space-y-reverse)));\r\n        margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\r\n        margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\r\n      }\r\n      .space-y-reverse > :not([hidden]) ~ :not([hidden]) {\r\n        --tw-space-y-reverse: 1;\r\n      }\r\n      .space-x-reverse > :not([hidden]) ~ :not([hidden]) {\r\n        --tw-space-x-reverse: 1;\r\n      }\r\n      .divide-x > :not([hidden]) ~ :not([hidden]) {\r\n        --tw-divide-x-reverse: 0;\r\n        border-right-width: calc(1px * var(--tw-divide-x-reverse));\r\n        border-left-width: calc(1px * (1 - var(--tw-divide-x-reverse)));\r\n        border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));\r\n      }\r\n      .divide-y > :not([hidden]) ~ :not([hidden]) {\r\n        --tw-divide-y-reverse: 0;\r\n        border-top-width: calc(1px * (1 - var(--tw-divide-y-reverse)));\r\n        border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\r\n        border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\r\n      }\r\n      .divide-y-reverse > :not([hidden]) ~ :not([hidden]) {\r\n        --tw-divide-y-reverse: 1;\r\n      }\r\n      .divide-x-reverse > :not([hidden]) ~ :not([hidden]) {\r\n        --tw-divide-x-reverse: 1;\r\n      }\r\n      .self-start {\r\n        align-self: flex-start;\r\n      }\r\n      .self-stretch {\r\n        align-self: stretch;\r\n      }\r\n      .overflow-auto {\r\n        overflow: auto;\r\n      }\r\n      .overflow-hidden {\r\n        overflow: hidden;\r\n      }\r\n      .overflow-y-auto {\r\n        overflow-y: auto;\r\n      }\r\n      .overflow-x-hidden {\r\n        overflow-x: hidden;\r\n      }\r\n      .overflow-y-scroll {\r\n        overflow-y: scroll;\r\n      }\r\n      .truncate {\r\n        overflow: hidden;\r\n        text-overflow: ellipsis;\r\n        white-space: nowrap;\r\n      }\r\n      .text-ellipsis {\r\n        text-overflow: ellipsis;\r\n      }\r\n      .text-clip {\r\n        text-overflow: clip;\r\n      }\r\n      .rounded {\r\n        border-radius: 0.25rem;\r\n      }\r\n      .rounded-full {\r\n        border-radius: 9999px;\r\n      }\r\n      .rounded-md {\r\n        border-radius: 0.375rem;\r\n      }\r\n      .rounded-xl {\r\n        border-radius: 0.75rem;\r\n      }\r\n      .rounded-lg {\r\n        border-radius: 0.5rem;\r\n      }\r\n      .rounded-t {\r\n        border-top-left-radius: 0.25rem;\r\n        border-top-right-radius: 0.25rem;\r\n      }\r\n      .rounded-r {\r\n        border-top-right-radius: 0.25rem;\r\n        border-bottom-right-radius: 0.25rem;\r\n      }\r\n      .rounded-b {\r\n        border-bottom-right-radius: 0.25rem;\r\n        border-bottom-left-radius: 0.25rem;\r\n      }\r\n      .rounded-l {\r\n        border-top-left-radius: 0.25rem;\r\n        border-bottom-left-radius: 0.25rem;\r\n      }\r\n      .rounded-l-md {\r\n        border-top-left-radius: 0.375rem;\r\n        border-bottom-left-radius: 0.375rem;\r\n      }\r\n      .rounded-r-md {\r\n        border-top-right-radius: 0.375rem;\r\n        border-bottom-right-radius: 0.375rem;\r\n      }\r\n      .rounded-t-3xl {\r\n        border-top-left-radius: 1.5rem;\r\n        border-top-right-radius: 1.5rem;\r\n      }\r\n      .rounded-tl {\r\n        border-top-left-radius: 0.25rem;\r\n      }\r\n      .rounded-tr {\r\n        border-top-right-radius: 0.25rem;\r\n      }\r\n      .rounded-br {\r\n        border-bottom-right-radius: 0.25rem;\r\n      }\r\n      .rounded-bl {\r\n        border-bottom-left-radius: 0.25rem;\r\n      }\r\n      .border {\r\n        border-width: 1px;\r\n      }\r\n      .border-x {\r\n        border-left-width: 1px;\r\n        border-right-width: 1px;\r\n      }\r\n      .border-y {\r\n        border-top-width: 1px;\r\n        border-bottom-width: 1px;\r\n      }\r\n      .border-t {\r\n        border-top-width: 1px;\r\n      }\r\n      .border-r {\r\n        border-right-width: 1px;\r\n      }\r\n      .border-b {\r\n        border-bottom-width: 1px;\r\n      }\r\n      .border-l {\r\n        border-left-width: 1px;\r\n      }\r\n      .border-b-2 {\r\n        border-bottom-width: 2px;\r\n      }\r\n      .border-none {\r\n        border-style: none;\r\n      }\r\n      .bg-base-100 {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b1) / var(--tw-bg-opacity));\r\n      }\r\n      .bg-neutral-focus {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--nf, var(--n)) / var(--tw-bg-opacity));\r\n      }\r\n      .bg-base-300 {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b2) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--b3, var(--b2)) / var(--tw-bg-opacity));\r\n      }\r\n      .bg-black {\r\n        --tw-bg-opacity: 1;\r\n        background-color: rgba(0, 0, 0, var(--tw-bg-opacity));\r\n      }\r\n      .bg-white {\r\n        --tw-bg-opacity: 1;\r\n        background-color: rgba(255, 255, 255, var(--tw-bg-opacity));\r\n      }\r\n      .bg-gray-100 {\r\n        --tw-bg-opacity: 1;\r\n        background-color: rgba(243, 244, 246, var(--tw-bg-opacity));\r\n      }\r\n      .bg-gray-800 {\r\n        --tw-bg-opacity: 1;\r\n        background-color: rgba(31, 41, 55, var(--tw-bg-opacity));\r\n      }\r\n      .bg-gray-600 {\r\n        --tw-bg-opacity: 1;\r\n        background-color: rgba(75, 85, 99, var(--tw-bg-opacity));\r\n      }\r\n      .bg-gray-300\\/90 {\r\n        background-color: rgba(209, 213, 219, 0.9);\r\n      }\r\n      .bg-gray-200 {\r\n        --tw-bg-opacity: 1;\r\n        background-color: rgba(229, 231, 235, var(--tw-bg-opacity));\r\n      }\r\n      .bg-gray-400 {\r\n        --tw-bg-opacity: 1;\r\n        background-color: rgba(156, 163, 175, var(--tw-bg-opacity));\r\n      }\r\n      .bg-blue-700 {\r\n        --tw-bg-opacity: 1;\r\n        background-color: rgba(29, 78, 216, var(--tw-bg-opacity));\r\n      }\r\n      .bg-gray-300 {\r\n        --tw-bg-opacity: 1;\r\n        background-color: rgba(209, 213, 219, var(--tw-bg-opacity));\r\n      }\r\n      .bg-blue-600 {\r\n        --tw-bg-opacity: 1;\r\n        background-color: rgba(37, 99, 235, var(--tw-bg-opacity));\r\n      }\r\n      .bg-blue-200 {\r\n        --tw-bg-opacity: 1;\r\n        background-color: rgba(191, 219, 254, var(--tw-bg-opacity));\r\n      }\r\n      .bg-opacity-25 {\r\n        --tw-bg-opacity: 0.25;\r\n      }\r\n      .bg-opacity-70 {\r\n        --tw-bg-opacity: 0.7;\r\n      }\r\n      .bg-gradient-to-r {\r\n        background-image: linear-gradient(to right, var(--tw-gradient-stops));\r\n      }\r\n      .from-gray-200 {\r\n        --tw-gradient-from: #e5e7eb;\r\n        --tw-gradient-to: rgba(229, 231, 235, 0);\r\n        --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\r\n      }\r\n      .to-blue-400\\/30 {\r\n        --tw-gradient-to: rgba(96, 165, 250, 0.3);\r\n      }\r\n      .bg-cover {\r\n        background-size: cover;\r\n      }\r\n      .bg-center {\r\n        background-position: center;\r\n      }\r\n      .bg-repeat {\r\n        background-repeat: repeat;\r\n      }\r\n      .bg-no-repeat {\r\n        background-repeat: no-repeat;\r\n      }\r\n      .fill-white {\r\n        fill: #fff;\r\n      }\r\n      .fill-gray-600 {\r\n        fill: #4b5563;\r\n      }\r\n      .object-contain {\r\n        -o-object-fit: contain;\r\n           object-fit: contain;\r\n      }\r\n      .object-cover {\r\n        -o-object-fit: cover;\r\n           object-fit: cover;\r\n      }\r\n      .object-center {\r\n        -o-object-position: center;\r\n           object-position: center;\r\n      }\r\n      .p-0 {\r\n        padding: 0px;\r\n      }\r\n      .p-2 {\r\n        padding: 0.5rem;\r\n      }\r\n      .p-4 {\r\n        padding: 1rem;\r\n      }\r\n      .p-1 {\r\n        padding: 0.25rem;\r\n      }\r\n      .p-3\\.5 {\r\n        padding: 0.875rem;\r\n      }\r\n      .p-3 {\r\n        padding: 0.75rem;\r\n      }\r\n      .px-0 {\r\n        padding-left: 0px;\r\n        padding-right: 0px;\r\n      }\r\n      .py-2 {\r\n        padding-top: 0.5rem;\r\n        padding-bottom: 0.5rem;\r\n      }\r\n      .px-2 {\r\n        padding-left: 0.5rem;\r\n        padding-right: 0.5rem;\r\n      }\r\n      .px-5 {\r\n        padding-left: 1.25rem;\r\n        padding-right: 1.25rem;\r\n      }\r\n      .py-4 {\r\n        padding-top: 1rem;\r\n        padding-bottom: 1rem;\r\n      }\r\n      .px-6 {\r\n        padding-left: 1.5rem;\r\n        padding-right: 1.5rem;\r\n      }\r\n      .px-10 {\r\n        padding-left: 2.5rem;\r\n        padding-right: 2.5rem;\r\n      }\r\n      .py-5 {\r\n        padding-top: 1.25rem;\r\n        padding-bottom: 1.25rem;\r\n      }\r\n      .py-2\\.5 {\r\n        padding-top: 0.625rem;\r\n        padding-bottom: 0.625rem;\r\n      }\r\n      .py-1 {\r\n        padding-top: 0.25rem;\r\n        padding-bottom: 0.25rem;\r\n      }\r\n      .px-3 {\r\n        padding-left: 0.75rem;\r\n        padding-right: 0.75rem;\r\n      }\r\n      .px-4 {\r\n        padding-left: 1rem;\r\n        padding-right: 1rem;\r\n      }\r\n      .py-3 {\r\n        padding-top: 0.75rem;\r\n        padding-bottom: 0.75rem;\r\n      }\r\n      .pt-36 {\r\n        padding-top: 9rem;\r\n      }\r\n      .pt-20 {\r\n        padding-top: 5rem;\r\n      }\r\n      .pt-4 {\r\n        padding-top: 1rem;\r\n      }\r\n      .pb-20 {\r\n        padding-bottom: 5rem;\r\n      }\r\n      .pb-4 {\r\n        padding-bottom: 1rem;\r\n      }\r\n      .pt-2 {\r\n        padding-top: 0.5rem;\r\n      }\r\n      .pt-6 {\r\n        padding-top: 1.5rem;\r\n      }\r\n      .pt-8 {\r\n        padding-top: 2rem;\r\n      }\r\n      .pr-2 {\r\n        padding-right: 0.5rem;\r\n      }\r\n      .pb-8 {\r\n        padding-bottom: 2rem;\r\n      }\r\n      .pt-3 {\r\n        padding-top: 0.75rem;\r\n      }\r\n      .pb-3 {\r\n        padding-bottom: 0.75rem;\r\n      }\r\n      .pb-10 {\r\n        padding-bottom: 2.5rem;\r\n      }\r\n      .pb-1 {\r\n        padding-bottom: 0.25rem;\r\n      }\r\n      .pb-2 {\r\n        padding-bottom: 0.5rem;\r\n      }\r\n      .pr-4 {\r\n        padding-right: 1rem;\r\n      }\r\n      .pt-\\[6\\%\\] {\r\n        padding-top: 6%;\r\n      }\r\n      .pt-5 {\r\n        padding-top: 1.25rem;\r\n      }\r\n      .pl-2 {\r\n        padding-left: 0.5rem;\r\n      }\r\n      .pl-3 {\r\n        padding-left: 0.75rem;\r\n      }\r\n      .text-left {\r\n        text-align: left;\r\n      }\r\n      .text-center {\r\n        text-align: center;\r\n      }\r\n      .align-baseline {\r\n        vertical-align: baseline;\r\n      }\r\n      .align-middle {\r\n        vertical-align: middle;\r\n      }\r\n      .text-xl {\r\n        font-size: 1.25rem;\r\n        line-height: 1.2;\r\n        font-weight: 500;\r\n      }\r\n      .text-3xl {\r\n        font-size: 2.25rem;\r\n        line-height: 1.2;\r\n        letter-spacing: 0.01rem;\r\n        font-weight: 500;\r\n      }\r\n      .text-xs {\r\n        font-size: 0.75rem;\r\n        line-height: 1.5;\r\n      }\r\n      .text-sm {\r\n        font-size: 0.875rem;\r\n        line-height: 1.5;\r\n      }\r\n      .text-lg {\r\n        font-size: 1.125rem;\r\n        line-height: 1.2;\r\n        font-weight: 500;\r\n      }\r\n      .text-2xl {\r\n        font-size: 1.5rem;\r\n        line-height: 1.2;\r\n        letter-spacing: 0.005rem;\r\n        font-weight: 500;\r\n      }\r\n      .text-base {\r\n        font-size: 1rem;\r\n        line-height: 1.5;\r\n      }\r\n      .text-\\[11px\\] {\r\n        font-size: 11px;\r\n      }\r\n      .font-bold {\r\n        font-weight: 700;\r\n      }\r\n      .font-medium {\r\n        font-weight: 500;\r\n      }\r\n      .font-semibold {\r\n        font-weight: 600;\r\n      }\r\n      .font-normal {\r\n        font-weight: 400;\r\n      }\r\n      .uppercase {\r\n        text-transform: uppercase;\r\n      }\r\n      .lowercase {\r\n        text-transform: lowercase;\r\n      }\r\n      .capitalize {\r\n        text-transform: capitalize;\r\n      }\r\n      .normal-case {\r\n        text-transform: none;\r\n      }\r\n      .italic {\r\n        font-style: italic;\r\n      }\r\n      .not-italic {\r\n        font-style: normal;\r\n      }\r\n      .normal-nums {\r\n        font-variant-numeric: normal;\r\n      }\r\n      .ordinal {\r\n        --tw-ordinal: ordinal;\r\n        font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);\r\n      }\r\n      .slashed-zero {\r\n        --tw-slashed-zero: slashed-zero;\r\n        font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);\r\n      }\r\n      .lining-nums {\r\n        --tw-numeric-figure: lining-nums;\r\n        font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);\r\n      }\r\n      .oldstyle-nums {\r\n        --tw-numeric-figure: oldstyle-nums;\r\n        font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);\r\n      }\r\n      .proportional-nums {\r\n        --tw-numeric-spacing: proportional-nums;\r\n        font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);\r\n      }\r\n      .tabular-nums {\r\n        --tw-numeric-spacing: tabular-nums;\r\n        font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);\r\n      }\r\n      .diagonal-fractions {\r\n        --tw-numeric-fraction: diagonal-fractions;\r\n        font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);\r\n      }\r\n      .leading-normal {\r\n        line-height: 1.5;\r\n      }\r\n      .leading-tight {\r\n        line-height: 1.2;\r\n      }\r\n      .leading-3 {\r\n        line-height: .75rem;\r\n      }\r\n      .leading-7 {\r\n        line-height: 1.75rem;\r\n      }\r\n      .leading-6 {\r\n        line-height: 1.5rem;\r\n      }\r\n      .text-\\[color\\:var\\(--mystery-var\\)\\] {\r\n        color: var(--mystery-var);\r\n      }\r\n      .text-neutral-content {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--nc) / var(--tw-text-opacity));\r\n      }\r\n      .text-white {\r\n        --tw-text-opacity: 1;\r\n        color: rgba(255, 255, 255, var(--tw-text-opacity));\r\n      }\r\n      .text-gray-700 {\r\n        --tw-text-opacity: 1;\r\n        color: rgba(55, 65, 81, var(--tw-text-opacity));\r\n      }\r\n      .text-blue-600 {\r\n        --tw-text-opacity: 1;\r\n        color: rgba(37, 99, 235, var(--tw-text-opacity));\r\n      }\r\n      .text-gray-600 {\r\n        --tw-text-opacity: 1;\r\n        color: rgba(75, 85, 99, var(--tw-text-opacity));\r\n      }\r\n      .text-blue-700 {\r\n        --tw-text-opacity: 1;\r\n        color: rgba(29, 78, 216, var(--tw-text-opacity));\r\n      }\r\n      .text-secondary {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--s) / var(--tw-text-opacity));\r\n      }\r\n      .text-black {\r\n        --tw-text-opacity: 1;\r\n        color: rgba(0, 0, 0, var(--tw-text-opacity));\r\n      }\r\n      .text-gray-500 {\r\n        --tw-text-opacity: 1;\r\n        color: rgba(107, 114, 128, var(--tw-text-opacity));\r\n      }\r\n      .text-gray-800 {\r\n        --tw-text-opacity: 1;\r\n        color: rgba(31, 41, 55, var(--tw-text-opacity));\r\n      }\r\n      .text-gray-300 {\r\n        --tw-text-opacity: 1;\r\n        color: rgba(209, 213, 219, var(--tw-text-opacity));\r\n      }\r\n      .underline {\r\n        text-decoration-line: underline;\r\n      }\r\n      .overline {\r\n        text-decoration-line: overline;\r\n      }\r\n      .line-through {\r\n        text-decoration-line: line-through;\r\n      }\r\n      .no-underline {\r\n        text-decoration-line: none;\r\n      }\r\n      .underline-offset-4 {\r\n        text-underline-offset: 4px;\r\n      }\r\n      .antialiased {\r\n        -webkit-font-smoothing: antialiased;\r\n        -moz-osx-font-smoothing: grayscale;\r\n      }\r\n      .subpixel-antialiased {\r\n        -webkit-font-smoothing: auto;\r\n        -moz-osx-font-smoothing: auto;\r\n      }\r\n      .opacity-50 {\r\n        opacity: 0.5;\r\n      }\r\n      .opacity-40 {\r\n        opacity: 0.4;\r\n      }\r\n      .opacity-70 {\r\n        opacity: 0.7;\r\n      }\r\n      .opacity-60 {\r\n        opacity: 0.6;\r\n      }\r\n      .opacity-100 {\r\n        opacity: 1;\r\n      }\r\n      .opacity-0 {\r\n        opacity: 0;\r\n      }\r\n      .shadow {\r\n        --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);\r\n        --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\r\n        box-shadow: 0 0 rgba(0,0,0,0), 0 0 rgba(0,0,0,0), var(--tw-shadow);\r\n        box-shadow: var(--tw-ring-offset-shadow, 0 0 rgba(0,0,0,0)), var(--tw-ring-shadow, 0 0 rgba(0,0,0,0)), var(--tw-shadow);\r\n      }\r\n      .shadow-\\[0px_0px_20px_10px_\\#00000024\\] {\r\n        --tw-shadow: 0px 0px 20px 10px rgba(0,0,0,0.14118);\r\n        --tw-shadow-colored: 0px 0px 20px 10px var(--tw-shadow-color);\r\n        box-shadow: 0 0 rgba(0,0,0,0), 0 0 rgba(0,0,0,0), var(--tw-shadow);\r\n        box-shadow: var(--tw-ring-offset-shadow, 0 0 rgba(0,0,0,0)), var(--tw-ring-shadow, 0 0 rgba(0,0,0,0)), var(--tw-shadow);\r\n      }\r\n      .shadow-\\[0px_0px_25px_10px_\\#00000024\\] {\r\n        --tw-shadow: 0px 0px 25px 10px rgba(0,0,0,0.14118);\r\n        --tw-shadow-colored: 0px 0px 25px 10px var(--tw-shadow-color);\r\n        box-shadow: 0 0 rgba(0,0,0,0), 0 0 rgba(0,0,0,0), var(--tw-shadow);\r\n        box-shadow: var(--tw-ring-offset-shadow, 0 0 rgba(0,0,0,0)), var(--tw-ring-shadow, 0 0 rgba(0,0,0,0)), var(--tw-shadow);\r\n      }\r\n      .shadow-\\[0px_0px_15px_5px_\\#00000024\\] {\r\n        --tw-shadow: 0px 0px 15px 5px rgba(0,0,0,0.14118);\r\n        --tw-shadow-colored: 0px 0px 15px 5px var(--tw-shadow-color);\r\n        box-shadow: 0 0 rgba(0,0,0,0), 0 0 rgba(0,0,0,0), var(--tw-shadow);\r\n        box-shadow: var(--tw-ring-offset-shadow, 0 0 rgba(0,0,0,0)), var(--tw-ring-shadow, 0 0 rgba(0,0,0,0)), var(--tw-shadow);\r\n      }\r\n      .outline {\r\n        outline-style: solid;\r\n      }\r\n      .outline-\\[2\\.5px\\] {\r\n        outline-width: 2.5px;\r\n      }\r\n      .outline-1 {\r\n        outline-width: 1px;\r\n      }\r\n      .outline-gray-200 {\r\n        outline-color: #e5e7eb;\r\n      }\r\n      .outline-blue-700 {\r\n        outline-color: #1d4ed8;\r\n      }\r\n      .ring {\r\n        --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\r\n        --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);\r\n        box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), 0 0 rgba(0,0,0,0);\r\n        box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 rgba(0,0,0,0));\r\n      }\r\n      .ring-inset {\r\n        --tw-ring-inset: inset;\r\n      }\r\n      .ring-offset-2 {\r\n        --tw-ring-offset-width: 2px;\r\n      }\r\n      .ring-offset-base-100 {\r\n        --tw-ring-offset-color: hsl(var(--b1));\r\n      }\r\n      .blur {\r\n        --tw-blur: blur(8px);\r\n        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);\r\n      }\r\n      .drop-shadow {\r\n        --tw-drop-shadow: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.1)) drop-shadow(0 1px 1px rgba(0, 0, 0, 0.06));\r\n        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);\r\n      }\r\n      .grayscale {\r\n        --tw-grayscale: grayscale(100%);\r\n        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);\r\n      }\r\n      .invert {\r\n        --tw-invert: invert(100%);\r\n        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);\r\n      }\r\n      .sepia {\r\n        --tw-sepia: sepia(100%);\r\n        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);\r\n      }\r\n      .filter {\r\n        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);\r\n      }\r\n      .backdrop-blur {\r\n        --tw-backdrop-blur: blur(8px);\r\n        -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);\r\n                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);\r\n      }\r\n      .backdrop-grayscale {\r\n        --tw-backdrop-grayscale: grayscale(100%);\r\n        -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);\r\n                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);\r\n      }\r\n      .backdrop-invert {\r\n        --tw-backdrop-invert: invert(100%);\r\n        -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);\r\n                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);\r\n      }\r\n      .backdrop-sepia {\r\n        --tw-backdrop-sepia: sepia(100%);\r\n        -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);\r\n                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);\r\n      }\r\n      .backdrop-filter {\r\n        -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);\r\n                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);\r\n      }\r\n      .transition {\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\r\n        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n        transition-duration: 150ms;\r\n      }\r\n      .transition-all {\r\n        transition-property: all;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n        transition-duration: 150ms;\r\n      }\r\n      .transition-opacity {\r\n        transition-property: opacity;\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n        transition-duration: 150ms;\r\n      }\r\n      .delay-500 {\r\n        transition-delay: 500ms;\r\n      }\r\n      .duration-300 {\r\n        transition-duration: 300ms;\r\n      }\r\n      .duration-500 {\r\n        transition-duration: 500ms;\r\n      }\r\n      .duration-1000 {\r\n        transition-duration: 1000ms;\r\n      }\r\n      .ease-out {\r\n        transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\r\n      }\r\n      .ease-in-out {\r\n        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n      }\r\n      .ease-in {\r\n        transition-timing-function: cubic-bezier(0.4, 0, 1, 1);\r\n      }\r\n      \r\n      body {\r\n        font-family: \"Optimistic Text\", sans-serif;\r\n        -webkit-font-smoothing: antialiased;\r\n        -moz-osx-font-smoothing: grayscale;\r\n      }\r\n      \r\n      body,\r\n      html,\r\n      #root {\r\n        height: 100%;\r\n      }\r\n      \r\n      :root {\r\n        --segEv-font: \"Optimistic Text\", system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, BlinkMacSystemFont,\r\n          \"Segoe UI\", Oxygen, Ubuntu, Cantarell, \"Open Sans\", \"Helvetica Neue\",\r\n          sans-serif;\r\n        --perspective: 4000px;\r\n      }\r\n      \r\n      h1,\r\n      h2,\r\n      h3,\r\n      h4,\r\n      h5,\r\n      h6 {\r\n        font-family: \"Optimistic Display\", sans-serif;\r\n      }\r\n      \r\n      .prose .display h1 {\r\n        font-size: 3rem;\r\n        letter-spacing: 0.016rem;\r\n        font-weight: 500;\r\n        line-height: 1.2;\r\n        --tw-text-opacity: 1;\r\n        color: rgba(31, 41, 55, var(--tw-text-opacity));\r\n      }\r\n      \r\n      .prose .display h2 {\r\n        font-weight: 500;\r\n        line-height: 1.2;\r\n        --tw-text-opacity: 1;\r\n        color: rgba(31, 41, 55, var(--tw-text-opacity));\r\n        font-size: 2.5rem;\r\n      }\r\n      \r\n      .prose h1 {\r\n        margin-top: 0.5rem;\r\n        margin-bottom: 1rem;\r\n        font-size: 2.25rem;\r\n        font-weight: 500;\r\n        line-height: 1.2;\r\n        --tw-text-opacity: 1;\r\n        color: rgba(31, 41, 55, var(--tw-text-opacity));\r\n        letter-spacing: 0.016rem;\r\n      }\r\n      \r\n      .prose h2 {\r\n        margin-top: 0.5rem;\r\n        margin-bottom: 0.5rem;\r\n        font-size: 1.5rem;\r\n        font-weight: 500;\r\n        line-height: 1.2;\r\n        --tw-text-opacity: 1;\r\n        color: rgba(31, 41, 55, var(--tw-text-opacity));\r\n        letter-spacing: 0.01rem;\r\n      }\r\n      \r\n      .prose h3 {\r\n        margin-top: 0.5rem;\r\n        margin-bottom: 0.5rem;\r\n        font-size: 1.25rem;\r\n        font-weight: 500;\r\n        line-height: 1.2;\r\n        --tw-text-opacity: 1;\r\n        color: rgba(31, 41, 55, var(--tw-text-opacity));\r\n        letter-spacing: 0.005rem;\r\n      }\r\n      \r\n      .prose h4 {\r\n        margin-top: 0.5rem;\r\n        margin-bottom: 0.5rem;\r\n        font-size: 1.125rem;\r\n        font-weight: 500;\r\n        line-height: 1.2;\r\n        --tw-text-opacity: 1;\r\n        color: rgba(31, 41, 55, var(--tw-text-opacity));\r\n      }\r\n      \r\n      .prose h5 {\r\n        margin-top: 0.5rem;\r\n        margin-bottom: 0.5rem;\r\n        font-size: 1.25rem;\r\n        font-weight: 400;\r\n        line-height: 1.5;\r\n        --tw-text-opacity: 1;\r\n        color: rgba(75, 85, 99, var(--tw-text-opacity));\r\n        letter-spacing: 0.005rem;\r\n      }\r\n      \r\n      .prose h6 {\r\n        margin-top: 0.5rem;\r\n        margin-bottom: 0.5rem;\r\n        font-size: 1rem;\r\n        font-weight: 400;\r\n        line-height: 1.5;\r\n        --tw-text-opacity: 1;\r\n        color: rgba(75, 85, 99, var(--tw-text-opacity));\r\n      }\r\n      \r\n      .prose p {\r\n        font-size: 0.875rem;\r\n        font-weight: 400;\r\n        line-height: 1.5;\r\n        --tw-text-opacity: 1;\r\n        color: rgba(75, 85, 99, var(--tw-text-opacity));\r\n      }\r\n      \r\n      .prose ol,\r\n      .prose ul {\r\n        font-size: 0.875rem;\r\n        font-weight: 400;\r\n        line-height: 1.5;\r\n        --tw-text-opacity: 1;\r\n        color: rgba(75, 85, 99, var(--tw-text-opacity));\r\n        padding-right: 2rem;\r\n      }\r\n      \r\n      /* Non-mobile typography */\r\n      @media (min-width: 1024px) {\r\n        .prose .display h1 {\r\n          font-size: 5rem;\r\n          line-height: 1.2;\r\n          letter-spacing: 0.016rem;\r\n          font-weight: 400;\r\n        }\r\n      \r\n        .prose .display h2 {\r\n          font-size: 4rem;\r\n          line-height: 1.2;\r\n          letter-spacing: 0.016rem;\r\n          font-weight: 400;\r\n        }\r\n      \r\n        .prose h1 {\r\n          font-size: 3rem;\r\n          line-height: 1.2;\r\n          letter-spacing: 0.016rem;\r\n          font-weight: 500;\r\n        }\r\n      \r\n        .prose h2 {\r\n          font-size: 2.25rem;\r\n          line-height: 1.2;\r\n          letter-spacing: 0.01rem;\r\n          font-weight: 500;\r\n        }\r\n      \r\n        .prose h3 {\r\n          font-size: 1.5rem;\r\n          line-height: 1.2;\r\n          letter-spacing: 0.005rem;\r\n          font-weight: 500;\r\n        }\r\n      \r\n        .prose h4 {\r\n          font-size: 1.125rem;\r\n          line-height: 1.2;\r\n          font-weight: 500;\r\n          --tw-text-opacity: 1;\r\n          color: rgba(31, 41, 55, var(--tw-text-opacity));\r\n        }\r\n      \r\n        .prose h5 {\r\n          font-size: 1.5rem;\r\n          line-height: 1.2;\r\n          letter-spacing: 0.005rem;\r\n          font-weight: 500;\r\n        }\r\n      \r\n        .prose h6:not(h6.faq) {\r\n          font-size: 1rem;\r\n          line-height: 1.5;\r\n        }\r\n      \r\n        .prose ol,\r\n        .prose ul {\r\n          padding-right: 3rem;\r\n        }\r\n      }\r\n      \r\n      .dark-mode h1,\r\n      .dark-mode h2,\r\n      .dark-mode h3,\r\n      .dark-mode h4,\r\n      .dark-mode h5,\r\n      ≈ {\r\n        --tw-text-opacity: 1;\r\n        color: rgba(255, 255, 255, var(--tw-text-opacity));\r\n      }\r\n      \r\n      .dark-mode h4,\r\n      .dark-mode h6 {\r\n        --tw-text-opacity: 1;\r\n        color: rgba(229, 231, 235, var(--tw-text-opacity));\r\n      }\r\n      \r\n      .flex-grow-2 {\r\n        flex-grow: 2;\r\n      }\r\n      \r\n      .flex-grow-3 {\r\n        flex-grow: 3;\r\n      }\r\n      \r\n      .flex-grow-4 {\r\n        flex-grow: 4;\r\n      }\r\n      \r\n      .flex-grow-5 {\r\n        flex-grow: 5;\r\n      }\r\n      \r\n      .nav-title {\r\n        font-family: \"Optimistic Text\", system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, BlinkMacSystemFont,\r\n          \"Segoe UI\", Oxygen, Ubuntu, Cantarell, \"Open Sans\", \"Helvetica Neue\",\r\n          sans-serif;\r\n        font-family: var(--segEv-font);\r\n      }\r\n      \r\n      /**\r\n       * Daisy UI customizations\r\n       */\r\n      \r\n      .btn {\r\n        border-radius: 0.375rem;\r\n        text-transform: none;\r\n      }\r\n      \r\n      .comp_summary h1,\r\n      .comp_summary h2,\r\n      .comp_summary h3 {\r\n        margin-bottom: 1rem;\r\n      }\r\n      \r\n      .disabled {\r\n        opacity: 0.4;\r\n        pointer-events: none;\r\n      }\r\n      \r\n      .absolute-center {\r\n        top: 50%;\r\n        left: 50%;\r\n        transform: translate(-50%, -50%);\r\n      }\r\n      \r\n      @media (min-width: 1024px) {\r\n        .drawer .grid {\r\n          grid-template-columns: max-content 1fr;\r\n        }\r\n      }\r\n      \r\n      .fade-in {\r\n        opacity: 1 !important;\r\n      }\r\n      \r\n      .fade-in {\r\n        transition: opacity 0.5s;\r\n      }\r\n      \r\n      .react-photo-gallery--gallery > div {\r\n        gap: 0.25rem;\r\n      }\r\n      \r\n      .sticker {\r\n        filter: drop-shadow(0.25rem 0.25rem 5px #fff)\r\n          drop-shadow(-0.25rem 0.25rem 5px #fff)\r\n          drop-shadow(0.25rem -0.25rem 5px #fff)\r\n          drop-shadow(-0.25rem -0.25rem 5px #fff);\r\n        transition: filter 0.3s ease-out;\r\n      }\r\n      \r\n      .sticker:hover,\r\n      .sticker-select {\r\n        filter: drop-shadow(0.25rem 0.25rem 1px #2962d9)\r\n          drop-shadow(-0.25rem 0.25rem 1px #2962d9)\r\n          drop-shadow(0.25rem -0.25rem 1px #2962d9)\r\n          drop-shadow(-0.25rem -0.25rem 1px #2962d9);\r\n      }\r\n      \r\n      .mask-path {\r\n        opacity: 0;\r\n        animation: reveal 0.4s ease-in forwards;\r\n      }\r\n      \r\n      .Canvas.multi-mask-mode svg.mask-1-of-1,\r\n        .Canvas.multi-mask-mode svg.mask-1-of-2,\r\n        .Canvas.multi-mask-mode svg.mask-2-of-2,\r\n        .Canvas.multi-mask-mode svg.mask-1-of-3,\r\n        .Canvas.multi-mask-mode svg.mask-2-of-3,\r\n        .Canvas.multi-mask-mode svg.mask-3-of-3 {\r\n          opacity: 0;\r\n        }\r\n      \r\n      .Canvas.multi-mask-mode.rotate .background {\r\n            animation: rotate0 1s ease-in forwards;\r\n          }\r\n      \r\n      .Canvas.multi-mask-mode.rotate > img:nth-child(2) {\r\n            animation: rotate 1s ease-in forwards;\r\n          }\r\n      \r\n      .Canvas.multi-mask-mode.rotate svg.mask-best {\r\n            animation: rotate-best 1s ease-in forwards;\r\n          }\r\n      \r\n      .Canvas.multi-mask-mode.rotate svg.mask-1-of-1 {\r\n            animation: rotate-1-of-1 1s ease-in forwards;\r\n          }\r\n      \r\n      .Canvas.multi-mask-mode.rotate svg.mask-1-of-2 {\r\n            animation: rotate-1-of-2 1s ease-in forwards;\r\n          }\r\n      \r\n      .Canvas.multi-mask-mode.rotate svg.mask-2-of-2 {\r\n            animation: rotate-2-of-2 1s ease-in forwards;\r\n          }\r\n      \r\n      .Canvas.multi-mask-mode.rotate svg.mask-1-of-3 {\r\n            animation: rotate-1-of-3 1s ease-in forwards;\r\n          }\r\n      \r\n      .Canvas.multi-mask-mode.rotate svg.mask-2-of-3 {\r\n            animation: rotate-2-of-3 1s ease-in forwards;\r\n          }\r\n      \r\n      .Canvas.multi-mask-mode.rotate svg.mask-3-of-3 {\r\n            animation: rotate-3-of-3 1s ease-in forwards;\r\n          }\r\n      \r\n      .Canvas.multi-mask-mode.rotate .konva {\r\n            opacity: 1;\r\n            animation: disappear 0.5s ease-out forwards;\r\n          }\r\n      \r\n      .Canvas.multi-mask-mode.unrotate .background {\r\n            animation: unrotate0 1s ease-out forwards;\r\n          }\r\n      \r\n      .Canvas.multi-mask-mode.unrotate > img:nth-child(2) {\r\n            animation: unrotate 1s ease-out forwards;\r\n          }\r\n      \r\n      .Canvas.multi-mask-mode.unrotate svg.mask-best {\r\n            animation: unrotate-best 1s ease-out forwards;\r\n          }\r\n      \r\n      .Canvas.multi-mask-mode.unrotate svg.mask-1-of-1 {\r\n            animation: unrotate-1-of-1 1s ease-out forwards;\r\n          }\r\n      \r\n      .Canvas.multi-mask-mode.unrotate svg.mask-1-of-2 {\r\n            animation: unrotate-1-of-2 1s ease-out forwards;\r\n          }\r\n      \r\n      .Canvas.multi-mask-mode.unrotate svg.mask-2-of-2 {\r\n            animation: unrotate-2-of-2 1s ease-out forwards;\r\n          }\r\n      \r\n      .Canvas.multi-mask-mode.unrotate svg.mask-1-of-3 {\r\n            animation: unrotate-1-of-3 1s ease-out forwards;\r\n          }\r\n      \r\n      .Canvas.multi-mask-mode.unrotate svg.mask-2-of-3 {\r\n            animation: unrotate-2-of-3 1s ease-out forwards;\r\n          }\r\n      \r\n      .Canvas.multi-mask-mode.unrotate svg.mask-3-of-3 {\r\n            animation: unrotate-3-of-3 1s ease-out forwards;\r\n          }\r\n      \r\n      .Canvas.multi-mask-mode.unrotate .konva {\r\n            opacity: 0;\r\n            animation: reveal 0.5s ease-in 0.5s forwards;\r\n          }\r\n      \r\n      /* keyframe animations */\r\n      \r\n      @keyframes disappear {\r\n        from {\r\n          opacity: 1;\r\n        }\r\n        to {\r\n          opacity: 0;\r\n        }\r\n      }\r\n      \r\n      @keyframes reveal {\r\n        from {\r\n          opacity: 0;\r\n        }\r\n        to {\r\n          opacity: 1;\r\n        }\r\n      }\r\n      \r\n      @keyframes rotate0 {\r\n        from {\r\n          transform: perspective(4000px);\r\n          transform: perspective(var(--perspective));\r\n          opacity: 1;\r\n        }\r\n        50% {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n          opacity: 0.5;\r\n        }\r\n        100% {\r\n          transform: perspective(4000px) translateX(-20%) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) translateX(-20%) rotateY(60deg);\r\n          opacity: 0.5;\r\n        }\r\n      }\r\n      \r\n      @keyframes unrotate0 {\r\n        from {\r\n          transform: perspective(4000px) translateX(-20%) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) translateX(-20%) rotateY(60deg);\r\n          opacity: 0.5;\r\n        }\r\n        50% {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n          opacity: 0.5;\r\n        }\r\n        100% {\r\n          transform: perspective(4000px);\r\n          transform: perspective(var(--perspective));\r\n          opacity: 1;\r\n        }\r\n      }\r\n      \r\n      @keyframes rotate {\r\n        from {\r\n          transform: perspective(4000px);\r\n          transform: perspective(var(--perspective));\r\n        }\r\n        50% {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n        }\r\n        100% {\r\n          transform: perspective(4000px) translateX(-20%) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) translateX(-20%) rotateY(60deg);\r\n        }\r\n      }\r\n      \r\n      @keyframes unrotate {\r\n        from {\r\n          transform: perspective(4000px) translateX(-20%) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) translateX(-20%) rotateY(60deg);\r\n        }\r\n        50% {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n        }\r\n        100% {\r\n          transform: perspective(4000px);\r\n          transform: perspective(var(--perspective));\r\n        }\r\n      }\r\n      \r\n      @keyframes rotate-best {\r\n        from {\r\n          transform: perspective(4000px);\r\n          transform: perspective(var(--perspective));\r\n          opacity: 1;\r\n        }\r\n        50% {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n          opacity: 0;\r\n        }\r\n        100% {\r\n          opacity: 0;\r\n        }\r\n      }\r\n      \r\n      @keyframes unrotate-best {\r\n        from {\r\n          opacity: 0;\r\n        }\r\n        50% {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n          opacity: 0;\r\n        }\r\n        100% {\r\n          transform: perspective(4000px);\r\n          transform: perspective(var(--perspective));\r\n          opacity: 1;\r\n        }\r\n      }\r\n      \r\n      @keyframes rotate-1-of-1 {\r\n        from {\r\n          transform: perspective(4000px);\r\n          transform: perspective(var(--perspective));\r\n          opacity: 0;\r\n        }\r\n        50% {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n        100% {\r\n          transform: perspective(4000px) translateX(30%) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) translateX(30%) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n      }\r\n      \r\n      @keyframes unrotate-1-of-1 {\r\n        from {\r\n          transform: perspective(4000px) translateX(30%) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) translateX(30%) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n        50% {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n        100% {\r\n          transform: perspective(4000px);\r\n          transform: perspective(var(--perspective));\r\n          opacity: 0;\r\n        }\r\n      }\r\n      @keyframes rotate-1-of-2 {\r\n        from {\r\n          transform: perspective(4000px);\r\n          transform: perspective(var(--perspective));\r\n          opacity: 0;\r\n        }\r\n        50% {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n        100% {\r\n          transform: perspective(4000px) translateX(10%) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) translateX(10%) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n      }\r\n      \r\n      @keyframes unrotate-1-of-2 {\r\n        from {\r\n          transform: perspective(4000px) translateX(10%) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) translateX(10%) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n        50% {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n        100% {\r\n          transform: perspective(4000px);\r\n          transform: perspective(var(--perspective));\r\n          opacity: 0;\r\n        }\r\n      }\r\n      @keyframes rotate-2-of-2 {\r\n        from {\r\n          transform: perspective(4000px);\r\n          transform: perspective(var(--perspective));\r\n          opacity: 0;\r\n        }\r\n        50% {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n        100% {\r\n          transform: perspective(4000px) translateX(40%) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) translateX(40%) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n      }\r\n      \r\n      @keyframes unrotate-2-of-2 {\r\n        from {\r\n          transform: perspective(4000px) translateX(40%) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) translateX(40%) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n        50% {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n        100% {\r\n          transform: perspective(4000px);\r\n          transform: perspective(var(--perspective));\r\n          opacity: 0;\r\n        }\r\n      }\r\n      @keyframes rotate-1-of-3 {\r\n        from {\r\n          transform: perspective(4000px);\r\n          transform: perspective(var(--perspective));\r\n          opacity: 0;\r\n        }\r\n        50% {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n        100% {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n      }\r\n      \r\n      @keyframes unrotate-1-of-3 {\r\n        from {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n        50% {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n        100% {\r\n          transform: perspective(4000px);\r\n          transform: perspective(var(--perspective));\r\n          opacity: 0;\r\n        }\r\n      }\r\n      \r\n      @keyframes rotate-2-of-3 {\r\n        from {\r\n          transform: perspective(4000px);\r\n          transform: perspective(var(--perspective));\r\n          opacity: 0;\r\n        }\r\n        50% {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n        100% {\r\n          transform: perspective(4000px) translateX(20%) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) translateX(20%) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n      }\r\n      \r\n      @keyframes unrotate-2-of-3 {\r\n        from {\r\n          transform: perspective(4000px) translateX(20%) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) translateX(20%) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n        50% {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n        100% {\r\n          transform: perspective(4000px);\r\n          transform: perspective(var(--perspective));\r\n          opacity: 0;\r\n        }\r\n      }\r\n      \r\n      @keyframes rotate-3-of-3 {\r\n        from {\r\n          transform: perspective(4000px);\r\n          transform: perspective(var(--perspective));\r\n          opacity: 0;\r\n        }\r\n        50% {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n        100% {\r\n          transform: perspective(4000px) translateX(40%) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) translateX(40%) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n      }\r\n      \r\n      @keyframes unrotate-3-of-3 {\r\n        from {\r\n          transform: perspective(4000px) translateX(40%) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) translateX(40%) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n        50% {\r\n          transform: perspective(4000px) rotateY(60deg);\r\n          transform: perspective(var(--perspective)) rotateY(60deg);\r\n          opacity: 0.7;\r\n        }\r\n        100% {\r\n          transform: perspective(4000px);\r\n          transform: perspective(var(--perspective));\r\n          opacity: 0;\r\n        }\r\n      }\r\n      \r\n      .background-animate {\r\n        background-size: 400%;\r\n        animation: AnimationName 3s ease infinite;\r\n      }\r\n      \r\n      @keyframes AnimationName {\r\n        0%,\r\n        100% {\r\n          background-position: 0% 50%;\r\n        }\r\n        50% {\r\n          background-position: 100% 50%;\r\n        }\r\n      }\r\n      \r\n      @keyframes inAnimation {\r\n        0% {\r\n          opacity: 0;\r\n          max-height: 0px;\r\n        }\r\n        50% {\r\n          opacity: 1;\r\n        }\r\n        100% {\r\n          opacity: 1;\r\n          max-height: 600px;\r\n        }\r\n      }\r\n      \r\n      @keyframes outAnimation {\r\n        0% {\r\n          opacity: 1;\r\n          max-height: 600px;\r\n        }\r\n        50% {\r\n          opacity: 0;\r\n        }\r\n        100% {\r\n          opacity: 0;\r\n          max-height: 0px;\r\n        }\r\n      }\r\n      \r\n      .mask-gradient {\r\n        opacity: 0;\r\n        animation: reveal-and-hide 1.5s 0.3s forwards;\r\n      }\r\n      \r\n      @keyframes reveal-and-hide {\r\n        0% {\r\n          opacity: 0;\r\n        }\r\n        25% {\r\n          opacity: 1;\r\n        }\r\n        100% {\r\n          opacity: 0;\r\n        }\r\n      }\r\n      \r\n      /* Fix for Safari and Mobile Safari:\r\n      Extracted Tailwind progress-bar styles and applied\r\n      them to a <div> instead of a <progress> element  */\r\n      \r\n      .loading-bar {\r\n        position: relative;\r\n        width: 100%;\r\n        -webkit-appearance: none;\r\n        -moz-appearance: none;\r\n        appearance: none;\r\n        overflow: hidden;\r\n        height: 0.5rem;\r\n        border-radius: 1rem;\r\n        border-radius: var(--rounded-box, 1rem);\r\n        vertical-align: baseline;\r\n        background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n        --tw-bg-opacity: 0.2;\r\n      }\r\n      \r\n      .loading-bar::after {\r\n          --tw-bg-opacity: 1;\r\n          background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n          content: \"\";\r\n          position: absolute;\r\n          top: 0px;\r\n          bottom: 0px;\r\n          left: -40%;\r\n          width: 33.333333%;\r\n          border-radius: 1rem;\r\n          border-radius: var(--rounded-box, 1rem);\r\n          animation: loading 5s infinite ease-in-out;\r\n        }\r\n      \r\n      @keyframes loading {\r\n        50% {\r\n          left: 107%;\r\n        }\r\n      }\r\n      \r\n      .hover\\:text-white:hover {\r\n        --tw-text-opacity: 1;\r\n        color: rgba(255, 255, 255, var(--tw-text-opacity));\r\n      }\r\n      \r\n      .hover\\:underline:hover {\r\n        text-decoration-line: underline;\r\n      }\r\n      \r\n      .hover\\:opacity-100:hover {\r\n        opacity: 1;\r\n      }\r\n      \r\n      .hover\\:opacity-50:hover {\r\n        opacity: 0.5;\r\n      }\r\n      \r\n      .table .hover\\:hover:hovertr:hover th,\r\n          .table .hover\\:hover:hovertr:hover td,\r\n          .table .hover\\:hover:hovertr:nth-child(even):hover th,\r\n          .table .hover\\:hover:hovertr:nth-child(even):hover td {\r\n        --tw-bg-opacity: 1;\r\n        background-color: hsl(var(--b2) / var(--tw-bg-opacity));\r\n        background-color: hsl(var(--b3, var(--b2)) / var(--tw-bg-opacity));\r\n      }\r\n      \r\n      .focus\\:outline-offset-0:focus {\r\n        outline-offset: 0px;\r\n      }\r\n      \r\n      .active\\:text-white:active {\r\n        --tw-text-opacity: 1;\r\n        color: rgba(255, 255, 255, var(--tw-text-opacity));\r\n      }\r\n      \r\n      .active\\:underline:active {\r\n        text-decoration-line: underline;\r\n      }\r\n      \r\n      .active\\:opacity-50:active {\r\n        opacity: 0.5;\r\n      }\r\n      \r\n      .group:hover .group-hover\\:fill-blue-200 {\r\n        fill: #bfdbfe;\r\n      }\r\n      \r\n      .group:hover .group-hover\\:fill-primary {\r\n        fill: hsl(var(--p));\r\n      }\r\n      \r\n      .group:hover .group-hover\\:text-blue-200 {\r\n        --tw-text-opacity: 1;\r\n        color: rgba(191, 219, 254, var(--tw-text-opacity));\r\n      }\r\n      \r\n      .group:hover .group-hover\\:text-primary {\r\n        --tw-text-opacity: 1;\r\n        color: hsl(var(--p) / var(--tw-text-opacity));\r\n      }\r\n      \r\n      @media (min-width: 640px) {\r\n      \r\n        .sm\\:card-side {\r\n          align-items: stretch;\r\n          flex-direction: row;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .sm\\:card-side :where(figure:first-child) {\r\n          border-top-left-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .sm\\:card-side :where(figure:first-child) {\r\n          border-top-right-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .sm\\:card-side :where(figure:first-child) {\r\n          border-top-right-radius: 0;\r\n          border-top-right-radius: initial;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .sm\\:card-side :where(figure:first-child) {\r\n          border-top-left-radius: 0;\r\n          border-top-left-radius: initial;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .sm\\:card-side :where(figure:first-child) {\r\n          border-bottom-left-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .sm\\:card-side :where(figure:first-child) {\r\n          border-bottom-right-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .sm\\:card-side :where(figure:first-child) {\r\n          border-bottom-right-radius: 0;\r\n          border-bottom-right-radius: initial;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .sm\\:card-side :where(figure:first-child) {\r\n          border-bottom-left-radius: 0;\r\n          border-bottom-left-radius: initial;\r\n        }\r\n      \r\n        .sm\\:card-side :where(figure:first-child) {\r\n          overflow: hidden;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .sm\\:card-side :where(figure:last-child) {\r\n          border-top-left-radius: 0;\r\n          border-top-left-radius: initial;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .sm\\:card-side :where(figure:last-child) {\r\n          border-top-right-radius: 0;\r\n          border-top-right-radius: initial;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .sm\\:card-side :where(figure:last-child) {\r\n          border-top-right-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .sm\\:card-side :where(figure:last-child) {\r\n          border-top-left-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .sm\\:card-side :where(figure:last-child) {\r\n          border-bottom-left-radius: 0;\r\n          border-bottom-left-radius: initial;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .sm\\:card-side :where(figure:last-child) {\r\n          border-bottom-right-radius: 0;\r\n          border-bottom-right-radius: initial;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .sm\\:card-side :where(figure:last-child) {\r\n          border-bottom-right-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .sm\\:card-side :where(figure:last-child) {\r\n          border-bottom-left-radius: inherit;\r\n        }\r\n      \r\n        .sm\\:card-side :where(figure:last-child) {\r\n          overflow: hidden;\r\n        }\r\n      \r\n        .sm\\:card-side figure > * {\r\n          max-width: none;\r\n          max-width: initial;\r\n        }\r\n      \r\n        :where(.sm\\:card-side figure > *) {\r\n          width: 100%;\r\n          height: 100%;\r\n          -o-object-fit: cover;\r\n             object-fit: cover;\r\n        }\r\n      \r\n        .sm\\:menu-vertical {\r\n          flex-direction: column;\r\n        }\r\n      \r\n        .sm\\:menu-vertical :where(li) {\r\n          flex-direction: column;\r\n        }\r\n      \r\n        .sm\\:menu-vertical > :where(li) > :where(ul) {\r\n          top: auto;\r\n          top: initial;\r\n          left: 100%;\r\n        }\r\n      \r\n        .sm\\:menu-horizontal {\r\n          display: inline-flex;\r\n          width: -moz-max-content;\r\n          width: max-content;\r\n          flex-direction: row;\r\n        }\r\n      \r\n        .sm\\:menu-horizontal :where(li) {\r\n          flex-direction: row;\r\n        }\r\n      \r\n        .sm\\:menu-horizontal > :where(li) > :where(ul) {\r\n          top: 100%;\r\n          left: auto;\r\n          left: initial;\r\n        }\r\n      \r\n        .sm\\:modal-middle {\r\n          align-items: center;\r\n        }\r\n      \r\n        .sm\\:card-compact .card-body {\r\n          padding: 1rem;\r\n          font-size: 0.875rem;\r\n          line-height: 1.25rem;\r\n        }\r\n      \r\n        .sm\\:card-compact .card-title {\r\n          margin-bottom: 0.25rem;\r\n        }\r\n      \r\n        .sm\\:card-normal .card-body {\r\n          padding: 2rem;\r\n          padding: var(--padding-card, 2rem);\r\n          font-size: 1rem;\r\n          line-height: 1.5rem;\r\n        }\r\n      \r\n        .sm\\:card-normal .card-title {\r\n          margin-bottom: 0.75rem;\r\n        }\r\n      \r\n        .sm\\:menu-vertical :where(li.bordered > *) {\r\n          border-left-width: 4px;\r\n          border-bottom-width: 0px;\r\n        }\r\n      \r\n        .sm\\:menu-horizontal :where(li.bordered > *) {\r\n          border-left-width: 0px;\r\n          border-bottom-width: 4px;\r\n        }\r\n      \r\n        .sm\\:menu-normal :where(li > *) {\r\n          padding-top: 0.75rem;\r\n          padding-bottom: 0.75rem;\r\n          font-size: 1rem;\r\n          line-height: 1.5rem;\r\n        }\r\n      \r\n        .sm\\:menu-compact :where(li > *) {\r\n          padding-top: 0.5rem;\r\n          padding-bottom: 0.5rem;\r\n          font-size: 0.875rem;\r\n          line-height: 1.25rem;\r\n        }\r\n      \r\n        .sm\\:menu-vertical > :where(li:first-child) {\r\n          border-top-left-radius: inherit;\r\n          border-top-right-radius: inherit;\r\n          border-bottom-right-radius: 0;\r\n          border-bottom-right-radius: initial;\r\n          border-bottom-left-radius: 0;\r\n          border-bottom-left-radius: initial;\r\n        }\r\n      \r\n        .sm\\:menu-vertical > :where(li:first-child) > :where(*:not(ul)) {\r\n          border-top-left-radius: inherit;\r\n          border-top-right-radius: inherit;\r\n          border-bottom-right-radius: 0;\r\n          border-bottom-right-radius: initial;\r\n          border-bottom-left-radius: 0;\r\n          border-bottom-left-radius: initial;\r\n        }\r\n      \r\n        .sm\\:menu-vertical > :where(li:last-child) {\r\n          border-top-left-radius: 0;\r\n          border-top-left-radius: initial;\r\n          border-top-right-radius: 0;\r\n          border-top-right-radius: initial;\r\n          border-bottom-right-radius: inherit;\r\n          border-bottom-left-radius: inherit;\r\n        }\r\n      \r\n        .sm\\:menu-vertical > :where(li:last-child) > :where(*:not(ul)) {\r\n          border-top-left-radius: 0;\r\n          border-top-left-radius: initial;\r\n          border-top-right-radius: 0;\r\n          border-top-right-radius: initial;\r\n          border-bottom-right-radius: inherit;\r\n          border-bottom-left-radius: inherit;\r\n        }\r\n      \r\n        .sm\\:menu-horizontal > :where(li:first-child) {\r\n          border-top-left-radius: inherit;\r\n          border-top-right-radius: 0;\r\n          border-top-right-radius: initial;\r\n          border-bottom-right-radius: 0;\r\n          border-bottom-right-radius: initial;\r\n          border-bottom-left-radius: inherit;\r\n        }\r\n      \r\n        .sm\\:menu-horizontal > :where(li:first-child) > :where(*:not(ul)) {\r\n          border-top-left-radius: inherit;\r\n          border-top-right-radius: 0;\r\n          border-top-right-radius: initial;\r\n          border-bottom-right-radius: 0;\r\n          border-bottom-right-radius: initial;\r\n          border-bottom-left-radius: inherit;\r\n        }\r\n      \r\n        .sm\\:menu-horizontal > :where(li:last-child) {\r\n          border-top-left-radius: 0;\r\n          border-top-left-radius: initial;\r\n          border-top-right-radius: inherit;\r\n          border-bottom-right-radius: inherit;\r\n          border-bottom-left-radius: 0;\r\n          border-bottom-left-radius: initial;\r\n        }\r\n      \r\n        .sm\\:menu-horizontal > :where(li:last-child) > :where(*:not(ul)) {\r\n          border-top-left-radius: 0;\r\n          border-top-left-radius: initial;\r\n          border-top-right-radius: inherit;\r\n          border-bottom-right-radius: inherit;\r\n          border-bottom-left-radius: 0;\r\n          border-bottom-left-radius: initial;\r\n        }\r\n      \r\n        .sm\\:modal-middle :where(.modal-box) {\r\n          width: 91.666667%;\r\n          max-width: 32rem;\r\n          --tw-translate-y: 0px;\r\n          --tw-scale-x: .9;\r\n          --tw-scale-y: .9;\r\n          transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\r\n          border-bottom-left-radius: 1rem;\r\n          border-bottom-left-radius: var(--rounded-box, 1rem);\r\n          border-bottom-right-radius: 1rem;\r\n          border-bottom-right-radius: var(--rounded-box, 1rem);\r\n        }\r\n      }\r\n      \r\n      @media (min-width: 768px) {\r\n      \r\n        .md\\:relative {\r\n          position: relative;\r\n        }\r\n      \r\n        .md\\:order-none {\r\n          order: 0;\r\n        }\r\n      \r\n        .md\\:m-0 {\r\n          margin: 0px;\r\n        }\r\n      \r\n        .md\\:mx-6 {\r\n          margin-left: 1.5rem;\r\n          margin-right: 1.5rem;\r\n        }\r\n      \r\n        .md\\:mx-1 {\r\n          margin-left: 0.25rem;\r\n          margin-right: 0.25rem;\r\n        }\r\n      \r\n        .md\\:my-7 {\r\n          margin-top: 1.75rem;\r\n          margin-bottom: 1.75rem;\r\n        }\r\n      \r\n        .md\\:mt-4 {\r\n          margin-top: 1rem;\r\n        }\r\n      \r\n        .md\\:mt-6 {\r\n          margin-top: 1.5rem;\r\n        }\r\n      \r\n        .md\\:mb-6 {\r\n          margin-bottom: 1.5rem;\r\n        }\r\n      \r\n        .md\\:inline {\r\n          display: inline;\r\n        }\r\n      \r\n        .md\\:flex {\r\n          display: flex;\r\n        }\r\n      \r\n        .md\\:hidden {\r\n          display: none;\r\n        }\r\n      \r\n        .md\\:h-auto {\r\n          height: auto;\r\n        }\r\n      \r\n        .md\\:h-\\[39vw\\] {\r\n          height: 39vw;\r\n        }\r\n      \r\n        .md\\:h-8 {\r\n          height: 2rem;\r\n        }\r\n      \r\n        .md\\:max-h-\\[478px\\] {\r\n          max-height: 478px;\r\n        }\r\n      \r\n        .md\\:max-h-24 {\r\n          max-height: 6rem;\r\n        }\r\n      \r\n        .md\\:min-h-\\[1000px\\] {\r\n          min-height: 1000px;\r\n        }\r\n      \r\n        .md\\:w-auto {\r\n          width: auto;\r\n        }\r\n      \r\n        .md\\:w-\\[70vw\\] {\r\n          width: 70vw;\r\n        }\r\n      \r\n        .md\\:w-\\[50\\%\\] {\r\n          width: 50%;\r\n        }\r\n      \r\n        .md\\:w-\\[54\\%\\] {\r\n          width: 54%;\r\n        }\r\n      \r\n        .md\\:w-\\[56\\%\\] {\r\n          width: 56%;\r\n        }\r\n      \r\n        .md\\:w-full {\r\n          width: 100%;\r\n        }\r\n      \r\n        .md\\:max-w-\\[850px\\] {\r\n          max-width: 850px;\r\n        }\r\n      \r\n        .md\\:max-w-\\[50\\%\\] {\r\n          max-width: 50%;\r\n        }\r\n      \r\n        .md\\:flex-row {\r\n          flex-direction: row;\r\n        }\r\n      \r\n        .md\\:overflow-visible {\r\n          overflow: visible;\r\n        }\r\n      \r\n        .md\\:border-b {\r\n          border-bottom-width: 1px;\r\n        }\r\n      \r\n        .md\\:border-b-\\[1px\\] {\r\n          border-bottom-width: 1px;\r\n        }\r\n      \r\n        .md\\:border-b-gray-200 {\r\n          --tw-border-opacity: 1;\r\n          border-bottom-color: rgba(229, 231, 235, var(--tw-border-opacity));\r\n        }\r\n      \r\n        .md\\:p-3 {\r\n          padding: 0.75rem;\r\n        }\r\n      \r\n        .md\\:px-20 {\r\n          padding-left: 5rem;\r\n          padding-right: 5rem;\r\n        }\r\n      \r\n        .md\\:px-12 {\r\n          padding-left: 3rem;\r\n          padding-right: 3rem;\r\n        }\r\n      \r\n        .md\\:py-9 {\r\n          padding-top: 2.25rem;\r\n          padding-bottom: 2.25rem;\r\n        }\r\n      \r\n        .md\\:pt-0 {\r\n          padding-top: 0px;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .md\\:text-start {\r\n          text-align: left;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .md\\:text-start {\r\n          text-align: right;\r\n        }\r\n      \r\n        .md\\:text-4xl {\r\n          font-size: 3rem;\r\n          line-height: 1.2;\r\n          letter-spacing: 0.016rem;\r\n          font-weight: 500;\r\n        }\r\n      \r\n        .md\\:text-lg {\r\n          font-size: 1.125rem;\r\n          line-height: 1.2;\r\n          font-weight: 500;\r\n        }\r\n      \r\n        .md\\:btn-sm.btn.loading:before {\r\n          height: 0.75rem;\r\n          width: 0.75rem;\r\n        }\r\n      \r\n        .md\\:badge-sm {\r\n          height: 1rem;\r\n          font-size: 0.75rem;\r\n          line-height: 1rem;\r\n          padding-left: 0.438rem;\r\n          padding-right: 0.438rem;\r\n        }\r\n      \r\n        .md\\:btn-sm {\r\n          height: 2rem;\r\n          padding-left: 0.75rem;\r\n          padding-right: 0.75rem;\r\n          min-height: 2rem;\r\n          font-size: 0.875rem;\r\n        }\r\n      \r\n        .btn-square:where(.md\\:btn-sm) {\r\n          height: 2rem;\r\n          width: 2rem;\r\n          padding: 0px;\r\n        }\r\n      \r\n        .btn-circle:where(.md\\:btn-sm) {\r\n          height: 2rem;\r\n          width: 2rem;\r\n          border-radius: 9999px;\r\n          padding: 0px;\r\n        }\r\n      \r\n        .md\\:card-side {\r\n          align-items: stretch;\r\n          flex-direction: row;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .md\\:card-side :where(figure:first-child) {\r\n          border-top-left-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .md\\:card-side :where(figure:first-child) {\r\n          border-top-right-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .md\\:card-side :where(figure:first-child) {\r\n          border-top-right-radius: 0;\r\n          border-top-right-radius: initial;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .md\\:card-side :where(figure:first-child) {\r\n          border-top-left-radius: 0;\r\n          border-top-left-radius: initial;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .md\\:card-side :where(figure:first-child) {\r\n          border-bottom-left-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .md\\:card-side :where(figure:first-child) {\r\n          border-bottom-right-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .md\\:card-side :where(figure:first-child) {\r\n          border-bottom-right-radius: 0;\r\n          border-bottom-right-radius: initial;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .md\\:card-side :where(figure:first-child) {\r\n          border-bottom-left-radius: 0;\r\n          border-bottom-left-radius: initial;\r\n        }\r\n      \r\n        .md\\:card-side :where(figure:first-child) {\r\n          overflow: hidden;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .md\\:card-side :where(figure:last-child) {\r\n          border-top-left-radius: 0;\r\n          border-top-left-radius: initial;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .md\\:card-side :where(figure:last-child) {\r\n          border-top-right-radius: 0;\r\n          border-top-right-radius: initial;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .md\\:card-side :where(figure:last-child) {\r\n          border-top-right-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .md\\:card-side :where(figure:last-child) {\r\n          border-top-left-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .md\\:card-side :where(figure:last-child) {\r\n          border-bottom-left-radius: 0;\r\n          border-bottom-left-radius: initial;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .md\\:card-side :where(figure:last-child) {\r\n          border-bottom-right-radius: 0;\r\n          border-bottom-right-radius: initial;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .md\\:card-side :where(figure:last-child) {\r\n          border-bottom-right-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .md\\:card-side :where(figure:last-child) {\r\n          border-bottom-left-radius: inherit;\r\n        }\r\n      \r\n        .md\\:card-side :where(figure:last-child) {\r\n          overflow: hidden;\r\n        }\r\n      \r\n        .md\\:card-side figure > * {\r\n          max-width: none;\r\n          max-width: initial;\r\n        }\r\n      \r\n        :where(.md\\:card-side figure > *) {\r\n          width: 100%;\r\n          height: 100%;\r\n          -o-object-fit: cover;\r\n             object-fit: cover;\r\n        }\r\n      \r\n        .md\\:menu-vertical {\r\n          flex-direction: column;\r\n        }\r\n      \r\n        .md\\:menu-vertical :where(li) {\r\n          flex-direction: column;\r\n        }\r\n      \r\n        .md\\:menu-vertical > :where(li) > :where(ul) {\r\n          top: auto;\r\n          top: initial;\r\n          left: 100%;\r\n        }\r\n      \r\n        .md\\:menu-horizontal {\r\n          display: inline-flex;\r\n          width: -moz-max-content;\r\n          width: max-content;\r\n          flex-direction: row;\r\n        }\r\n      \r\n        .md\\:menu-horizontal :where(li) {\r\n          flex-direction: row;\r\n        }\r\n      \r\n        .md\\:menu-horizontal > :where(li) > :where(ul) {\r\n          top: 100%;\r\n          left: auto;\r\n          left: initial;\r\n        }\r\n      \r\n        .md\\:card-compact .card-body {\r\n          padding: 1rem;\r\n          font-size: 0.875rem;\r\n          line-height: 1.25rem;\r\n        }\r\n      \r\n        .md\\:card-compact .card-title {\r\n          margin-bottom: 0.25rem;\r\n        }\r\n      \r\n        .md\\:card-normal .card-body {\r\n          padding: 2rem;\r\n          padding: var(--padding-card, 2rem);\r\n          font-size: 1rem;\r\n          line-height: 1.5rem;\r\n        }\r\n      \r\n        .md\\:card-normal .card-title {\r\n          margin-bottom: 0.75rem;\r\n        }\r\n      \r\n        .md\\:menu-vertical :where(li.bordered > *) {\r\n          border-left-width: 4px;\r\n          border-bottom-width: 0px;\r\n        }\r\n      \r\n        .md\\:menu-horizontal :where(li.bordered > *) {\r\n          border-left-width: 0px;\r\n          border-bottom-width: 4px;\r\n        }\r\n      \r\n        .md\\:menu-normal :where(li > *) {\r\n          padding-top: 0.75rem;\r\n          padding-bottom: 0.75rem;\r\n          font-size: 1rem;\r\n          line-height: 1.5rem;\r\n        }\r\n      \r\n        .md\\:menu-compact :where(li > *) {\r\n          padding-top: 0.5rem;\r\n          padding-bottom: 0.5rem;\r\n          font-size: 0.875rem;\r\n          line-height: 1.25rem;\r\n        }\r\n      \r\n        .md\\:menu-vertical > :where(li:first-child) {\r\n          border-top-left-radius: inherit;\r\n          border-top-right-radius: inherit;\r\n          border-bottom-right-radius: 0;\r\n          border-bottom-right-radius: initial;\r\n          border-bottom-left-radius: 0;\r\n          border-bottom-left-radius: initial;\r\n        }\r\n      \r\n        .md\\:menu-vertical > :where(li:first-child) > :where(*:not(ul)) {\r\n          border-top-left-radius: inherit;\r\n          border-top-right-radius: inherit;\r\n          border-bottom-right-radius: 0;\r\n          border-bottom-right-radius: initial;\r\n          border-bottom-left-radius: 0;\r\n          border-bottom-left-radius: initial;\r\n        }\r\n      \r\n        .md\\:menu-vertical > :where(li:last-child) {\r\n          border-top-left-radius: 0;\r\n          border-top-left-radius: initial;\r\n          border-top-right-radius: 0;\r\n          border-top-right-radius: initial;\r\n          border-bottom-right-radius: inherit;\r\n          border-bottom-left-radius: inherit;\r\n        }\r\n      \r\n        .md\\:menu-vertical > :where(li:last-child) > :where(*:not(ul)) {\r\n          border-top-left-radius: 0;\r\n          border-top-left-radius: initial;\r\n          border-top-right-radius: 0;\r\n          border-top-right-radius: initial;\r\n          border-bottom-right-radius: inherit;\r\n          border-bottom-left-radius: inherit;\r\n        }\r\n      \r\n        .md\\:menu-horizontal > :where(li:first-child) {\r\n          border-top-left-radius: inherit;\r\n          border-top-right-radius: 0;\r\n          border-top-right-radius: initial;\r\n          border-bottom-right-radius: 0;\r\n          border-bottom-right-radius: initial;\r\n          border-bottom-left-radius: inherit;\r\n        }\r\n      \r\n        .md\\:menu-horizontal > :where(li:first-child) > :where(*:not(ul)) {\r\n          border-top-left-radius: inherit;\r\n          border-top-right-radius: 0;\r\n          border-top-right-radius: initial;\r\n          border-bottom-right-radius: 0;\r\n          border-bottom-right-radius: initial;\r\n          border-bottom-left-radius: inherit;\r\n        }\r\n      \r\n        .md\\:menu-horizontal > :where(li:last-child) {\r\n          border-top-left-radius: 0;\r\n          border-top-left-radius: initial;\r\n          border-top-right-radius: inherit;\r\n          border-bottom-right-radius: inherit;\r\n          border-bottom-left-radius: 0;\r\n          border-bottom-left-radius: initial;\r\n        }\r\n      \r\n        .md\\:menu-horizontal > :where(li:last-child) > :where(*:not(ul)) {\r\n          border-top-left-radius: 0;\r\n          border-top-left-radius: initial;\r\n          border-top-right-radius: inherit;\r\n          border-bottom-right-radius: inherit;\r\n          border-bottom-left-radius: 0;\r\n          border-bottom-left-radius: initial;\r\n        }\r\n      }\r\n      \r\n      @media (min-width: 1024px) {\r\n      \r\n        .lg\\:my-\\[140px\\] {\r\n          margin-top: 140px;\r\n          margin-bottom: 140px;\r\n        }\r\n      \r\n        .lg\\:my-20 {\r\n          margin-top: 5rem;\r\n          margin-bottom: 5rem;\r\n        }\r\n      \r\n        .lg\\:mx-5 {\r\n          margin-left: 1.25rem;\r\n          margin-right: 1.25rem;\r\n        }\r\n      \r\n        .lg\\:ml-8 {\r\n          margin-left: 2rem;\r\n        }\r\n      \r\n        .lg\\:mb-0 {\r\n          margin-bottom: 0px;\r\n        }\r\n      \r\n        .lg\\:h-\\[500px\\] {\r\n          height: 500px;\r\n        }\r\n      \r\n        .lg\\:max-h-28 {\r\n          max-height: 7rem;\r\n        }\r\n      \r\n        .lg\\:w-full {\r\n          width: 100%;\r\n        }\r\n      \r\n        .lg\\:w-\\[50\\%\\] {\r\n          width: 50%;\r\n        }\r\n      \r\n        .lg\\:w-72 {\r\n          width: 18rem;\r\n        }\r\n      \r\n        .lg\\:flex-1 {\r\n          flex: 1 1 0%;\r\n        }\r\n      \r\n        .lg\\:flex-row {\r\n          flex-direction: row;\r\n        }\r\n      \r\n        .lg\\:justify-start {\r\n          justify-content: flex-start;\r\n        }\r\n      \r\n        .lg\\:p-4 {\r\n          padding: 1rem;\r\n        }\r\n      \r\n        .lg\\:px-0 {\r\n          padding-left: 0px;\r\n          padding-right: 0px;\r\n        }\r\n      \r\n        .lg\\:text-2xl {\r\n          font-size: 1.5rem;\r\n          line-height: 1.2;\r\n          letter-spacing: 0.005rem;\r\n          font-weight: 500;\r\n        }\r\n      \r\n        .lg\\:text-sm {\r\n          font-size: 0.875rem;\r\n          line-height: 1.5;\r\n        }\r\n      \r\n        .lg\\:badge-md {\r\n          height: 1.25rem;\r\n          font-size: 0.875rem;\r\n          line-height: 1.25rem;\r\n          padding-left: 0.563rem;\r\n          padding-right: 0.563rem;\r\n        }\r\n      \r\n        .lg\\:btn-md {\r\n          height: 3rem;\r\n          padding-left: 1rem;\r\n          padding-right: 1rem;\r\n          min-height: 3rem;\r\n          font-size: 0.875rem;\r\n        }\r\n      \r\n        .btn-square:where(.lg\\:btn-md) {\r\n          height: 3rem;\r\n          width: 3rem;\r\n          padding: 0px;\r\n        }\r\n      \r\n        .btn-circle:where(.lg\\:btn-md) {\r\n          height: 3rem;\r\n          width: 3rem;\r\n          border-radius: 9999px;\r\n          padding: 0px;\r\n        }\r\n      \r\n        .lg\\:card-side {\r\n          align-items: stretch;\r\n          flex-direction: row;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .lg\\:card-side :where(figure:first-child) {\r\n          border-top-left-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .lg\\:card-side :where(figure:first-child) {\r\n          border-top-right-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .lg\\:card-side :where(figure:first-child) {\r\n          border-top-right-radius: 0;\r\n          border-top-right-radius: initial;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .lg\\:card-side :where(figure:first-child) {\r\n          border-top-left-radius: 0;\r\n          border-top-left-radius: initial;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .lg\\:card-side :where(figure:first-child) {\r\n          border-bottom-left-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .lg\\:card-side :where(figure:first-child) {\r\n          border-bottom-right-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .lg\\:card-side :where(figure:first-child) {\r\n          border-bottom-right-radius: 0;\r\n          border-bottom-right-radius: initial;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .lg\\:card-side :where(figure:first-child) {\r\n          border-bottom-left-radius: 0;\r\n          border-bottom-left-radius: initial;\r\n        }\r\n      \r\n        .lg\\:card-side :where(figure:first-child) {\r\n          overflow: hidden;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .lg\\:card-side :where(figure:last-child) {\r\n          border-top-left-radius: 0;\r\n          border-top-left-radius: initial;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .lg\\:card-side :where(figure:last-child) {\r\n          border-top-right-radius: 0;\r\n          border-top-right-radius: initial;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .lg\\:card-side :where(figure:last-child) {\r\n          border-top-right-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .lg\\:card-side :where(figure:last-child) {\r\n          border-top-left-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .lg\\:card-side :where(figure:last-child) {\r\n          border-bottom-left-radius: 0;\r\n          border-bottom-left-radius: initial;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .lg\\:card-side :where(figure:last-child) {\r\n          border-bottom-right-radius: 0;\r\n          border-bottom-right-radius: initial;\r\n        }\r\n      \r\n        [dir=\"ltr\"] .lg\\:card-side :where(figure:last-child) {\r\n          border-bottom-right-radius: inherit;\r\n        }\r\n      \r\n        [dir=\"rtl\"] .lg\\:card-side :where(figure:last-child) {\r\n          border-bottom-left-radius: inherit;\r\n        }\r\n      \r\n        .lg\\:card-side :where(figure:last-child) {\r\n          overflow: hidden;\r\n        }\r\n      \r\n        .lg\\:card-side figure > * {\r\n          max-width: none;\r\n          max-width: initial;\r\n        }\r\n      \r\n        :where(.lg\\:card-side figure > *) {\r\n          width: 100%;\r\n          height: 100%;\r\n          -o-object-fit: cover;\r\n             object-fit: cover;\r\n        }\r\n      \r\n        .lg\\:menu-vertical {\r\n          flex-direction: column;\r\n        }\r\n      \r\n        .lg\\:menu-vertical :where(li) {\r\n          flex-direction: column;\r\n        }\r\n      \r\n        .lg\\:menu-vertical > :where(li) > :where(ul) {\r\n          top: auto;\r\n          top: initial;\r\n          left: 100%;\r\n        }\r\n      \r\n        .lg\\:menu-horizontal {\r\n          display: inline-flex;\r\n          width: -moz-max-content;\r\n          width: max-content;\r\n          flex-direction: row;\r\n        }\r\n      \r\n        .lg\\:menu-horizontal :where(li) {\r\n          flex-direction: row;\r\n        }\r\n      \r\n        .lg\\:menu-horizontal > :where(li) > :where(ul) {\r\n          top: 100%;\r\n          left: auto;\r\n          left: initial;\r\n        }\r\n      \r\n        .lg\\:card-compact .card-body {\r\n          padding: 1rem;\r\n          font-size: 0.875rem;\r\n          line-height: 1.25rem;\r\n        }\r\n      \r\n        .lg\\:card-compact .card-title {\r\n          margin-bottom: 0.25rem;\r\n        }\r\n      \r\n        .lg\\:card-normal .card-body {\r\n          padding: 2rem;\r\n          padding: var(--padding-card, 2rem);\r\n          font-size: 1rem;\r\n          line-height: 1.5rem;\r\n        }\r\n      \r\n        .lg\\:card-normal .card-title {\r\n          margin-bottom: 0.75rem;\r\n        }\r\n      \r\n        .lg\\:menu-vertical :where(li.bordered > *) {\r\n          border-left-width: 4px;\r\n          border-bottom-width: 0px;\r\n        }\r\n      \r\n        .lg\\:menu-horizontal :where(li.bordered > *) {\r\n          border-left-width: 0px;\r\n          border-bottom-width: 4px;\r\n        }\r\n      \r\n        .lg\\:menu-normal :where(li > *) {\r\n          padding-top: 0.75rem;\r\n          padding-bottom: 0.75rem;\r\n          font-size: 1rem;\r\n          line-height: 1.5rem;\r\n        }\r\n      \r\n        .lg\\:menu-compact :where(li > *) {\r\n          padding-top: 0.5rem;\r\n          padding-bottom: 0.5rem;\r\n          font-size: 0.875rem;\r\n          line-height: 1.25rem;\r\n        }\r\n      \r\n        .lg\\:menu-vertical > :where(li:first-child) {\r\n          border-top-left-radius: inherit;\r\n          border-top-right-radius: inherit;\r\n          border-bottom-right-radius: 0;\r\n          border-bottom-right-radius: initial;\r\n          border-bottom-left-radius: 0;\r\n          border-bottom-left-radius: initial;\r\n        }\r\n      \r\n        .lg\\:menu-vertical > :where(li:first-child) > :where(*:not(ul)) {\r\n          border-top-left-radius: inherit;\r\n          border-top-right-radius: inherit;\r\n          border-bottom-right-radius: 0;\r\n          border-bottom-right-radius: initial;\r\n          border-bottom-left-radius: 0;\r\n          border-bottom-left-radius: initial;\r\n        }\r\n      \r\n        .lg\\:menu-vertical > :where(li:last-child) {\r\n          border-top-left-radius: 0;\r\n          border-top-left-radius: initial;\r\n          border-top-right-radius: 0;\r\n          border-top-right-radius: initial;\r\n          border-bottom-right-radius: inherit;\r\n          border-bottom-left-radius: inherit;\r\n        }\r\n      \r\n        .lg\\:menu-vertical > :where(li:last-child) > :where(*:not(ul)) {\r\n          border-top-left-radius: 0;\r\n          border-top-left-radius: initial;\r\n          border-top-right-radius: 0;\r\n          border-top-right-radius: initial;\r\n          border-bottom-right-radius: inherit;\r\n          border-bottom-left-radius: inherit;\r\n        }\r\n      \r\n        .lg\\:menu-horizontal > :where(li:first-child) {\r\n          border-top-left-radius: inherit;\r\n          border-top-right-radius: 0;\r\n          border-top-right-radius: initial;\r\n          border-bottom-right-radius: 0;\r\n          border-bottom-right-radius: initial;\r\n          border-bottom-left-radius: inherit;\r\n        }\r\n      \r\n        .lg\\:menu-horizontal > :where(li:first-child) > :where(*:not(ul)) {\r\n          border-top-left-radius: inherit;\r\n          border-top-right-radius: 0;\r\n          border-top-right-radius: initial;\r\n          border-bottom-right-radius: 0;\r\n          border-bottom-right-radius: initial;\r\n          border-bottom-left-radius: inherit;\r\n        }\r\n      \r\n        .lg\\:menu-horizontal > :where(li:last-child) {\r\n          border-top-left-radius: 0;\r\n          border-top-left-radius: initial;\r\n          border-top-right-radius: inherit;\r\n          border-bottom-right-radius: inherit;\r\n          border-bottom-left-radius: 0;\r\n          border-bottom-left-radius: initial;\r\n        }\r\n      \r\n        .lg\\:menu-horizontal > :where(li:last-child) > :where(*:not(ul)) {\r\n          border-top-left-radius: 0;\r\n          border-top-left-radius: initial;\r\n          border-top-right-radius: inherit;\r\n          border-bottom-right-radius: inherit;\r\n          border-bottom-left-radius: 0;\r\n          border-bottom-left-radius: initial;\r\n        }\r\n      \r\n        .lg\\:hover\\:opacity-50:hover {\r\n          opacity: 0.5;\r\n        }\r\n      }\r\n      \r\n      @media (min-width: 1280px) {\r\n      \r\n        .xl\\:my-4 {\r\n          margin-top: 1rem;\r\n          margin-bottom: 1rem;\r\n        }\r\n      \r\n        .xl\\:h-auto {\r\n          height: auto;\r\n        }\r\n      \r\n        .xl\\:max-h-32 {\r\n          max-height: 8rem;\r\n        }\r\n      \r\n        .xl\\:px-10 {\r\n          padding-left: 2.5rem;\r\n          padding-right: 2.5rem;\r\n        }\r\n      \r\n        .xl\\:px-0 {\r\n          padding-left: 0px;\r\n          padding-right: 0px;\r\n        }\r\n      \r\n        .xl\\:btn-lg\r\n          .btn.loading:before {\r\n          height: 1.25rem;\r\n          width: 1.25rem;\r\n        }\r\n      \r\n        .xl\\:badge-lg {\r\n          height: 1.5rem;\r\n          font-size: 1rem;\r\n          line-height: 1.5rem;\r\n          padding-left: 0.688rem;\r\n          padding-right: 0.688rem;\r\n        }\r\n      \r\n        .xl\\:btn-lg {\r\n          height: 4rem;\r\n          padding-left: 1.5rem;\r\n          padding-right: 1.5rem;\r\n          min-height: 4rem;\r\n          font-size: 1.125rem;\r\n        }\r\n      \r\n        .btn-square:where(.xl\\:btn-lg) {\r\n          height: 4rem;\r\n          width: 4rem;\r\n          padding: 0px;\r\n        }\r\n      \r\n        .btn-circle:where(.xl\\:btn-lg) {\r\n          height: 4rem;\r\n          width: 4rem;\r\n          border-radius: 9999px;\r\n          padding: 0px;\r\n        }\r\n      }\r\n      \r\n      .\\[\\&\\>\\*\\]\\:flex>* {\r\n        display: flex;\r\n      }\r\n      \r\n      .\\[\\&\\>\\*\\]\\:items-center>* {\r\n        align-items: center;\r\n      }\r\n      \r\n      /*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9hc3NldHMvc2Nzcy9BcHAuc2NzcyIsIjxubyBzb3VyY2U+Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztDQUFjLENBQWQ7OztDQUFjOztBQUFkOzs7RUFBQSxzQkFBYyxFQUFkLE1BQWM7RUFBZCxlQUFjLEVBQWQsTUFBYztFQUFkLG1CQUFjLEVBQWQsTUFBYztFQUFkLHFCQUFjLEVBQWQsTUFBYztBQUFBOztBQUFkOztFQUFBLGdCQUFjO0FBQUE7O0FBQWQ7Ozs7OztDQUFjOztBQUFkO0VBQUEsZ0JBQWMsRUFBZCxNQUFjO0VBQWQsOEJBQWMsRUFBZCxNQUFjO0VBQWQsZ0JBQWMsRUFBZCxNQUFjO0VBQWQsY0FBYztLQUFkLFdBQWMsRUFBZCxNQUFjO0VBQWQsd1JBQWMsRUFBZCxNQUFjO0VBQWQsNkJBQWMsRUFBZCxNQUFjO0FBQUE7O0FBQWQ7OztDQUFjOztBQUFkO0VBQUEsU0FBYyxFQUFkLE1BQWM7RUFBZCxvQkFBYyxFQUFkLE1BQWM7QUFBQTs7QUFBZDs7OztDQUFjOztBQUFkO0VBQUEsU0FBYyxFQUFkLE1BQWM7RUFBZCxjQUFjLEVBQWQsTUFBYztFQUFkLHFCQUFjLEVBQWQsTUFBYztBQUFBOztBQUFkOztDQUFjOztBQUFkO0VBQUEsMEJBQWM7RUFBZCxzREFBYztVQUFkLDhDQUFjO0FBQUE7O0FBQWQ7O0NBQWM7O0FBQWQ7Ozs7OztFQUFBLGtCQUFjO0VBQWQsb0JBQWM7QUFBQTs7QUFBZDs7Q0FBYzs7QUFBZDtFQUFBLGNBQWM7RUFBZCx3QkFBYztBQUFBOztBQUFkOztDQUFjOztBQUFkOztFQUFBLG1CQUFjO0FBQUE7O0FBQWQ7OztDQUFjOztBQUFkOzs7O0VBQUEsK0dBQWMsRUFBZCxNQUFjO0VBQWQsY0FBYyxFQUFkLE1BQWM7QUFBQTs7QUFBZDs7Q0FBYzs7QUFBZDtFQUFBLGNBQWM7QUFBQTs7QUFBZDs7Q0FBYzs7QUFBZDs7RUFBQSxjQUFjO0VBQWQsY0FBYztFQUFkLGtCQUFjO0VBQWQsd0JBQWM7QUFBQTs7QUFBZDtFQUFBLGVBQWM7QUFBQTs7QUFBZDtFQUFBLFdBQWM7QUFBQTs7QUFBZDs7OztDQUFjOztBQUFkO0VBQUEsY0FBYyxFQUFkLE1BQWM7RUFBZCxxQkFBYyxFQUFkLE1BQWM7RUFBZCx5QkFBYyxFQUFkLE1BQWM7QUFBQTs7QUFBZDs7OztDQUFjOztBQUFkOzs7OztFQUFBLG9CQUFjLEVBQWQsTUFBYztFQUFkLGVBQWMsRUFBZCxNQUFjO0VBQWQsb0JBQWMsRUFBZCxNQUFjO0VBQWQsb0JBQWMsRUFBZCxNQUFjO0VBQWQsY0FBYyxFQUFkLE1BQWM7RUFBZCxTQUFjLEVBQWQsTUFBYztFQUFkLFVBQWMsRUFBZCxNQUFjO0FBQUE7O0FBQWQ7O0NBQWM7O0FBQWQ7O0VBQUEsb0JBQWM7QUFBQTs7QUFBZDs7O0NBQWM7O0FBQWQ7Ozs7RUFBQSwwQkFBYyxFQUFkLE1BQWM7RUFBZCw2QkFBYyxFQUFkLE1BQWM7RUFBZCxzQkFBYyxFQUFkLE1BQWM7QUFBQTs7QUFBZDs7Q0FBYzs7QUFBZDtFQUFBLGFBQWM7QUFBQTs7QUFBZDs7Q0FBYzs7QUFBZDtFQUFBLGdCQUFjO0FBQUE7O0FBQWQ7O0NBQWM7O0FBQWQ7RUFBQSx3QkFBYztBQUFBOztBQUFkOztDQUFjOztBQUFkOztFQUFBLFlBQWM7QUFBQTs7QUFBZDs7O0NBQWM7O0FBQWQ7RUFBQSw2QkFBYyxFQUFkLE1BQWM7RUFBZCxvQkFBYyxFQUFkLE1BQWM7QUFBQTs7QUFBZDs7Q0FBYzs7QUFBZDtFQUFBLHdCQUFjO0FBQUE7O0FBQWQ7OztDQUFjOztBQUFkO0VBQUEsMEJBQWMsRUFBZCxNQUFjO0VBQWQsYUFBYyxFQUFkLE1BQWM7QUFBQTs7QUFBZDs7Q0FBYzs7QUFBZDtFQUFBLGtCQUFjO0FBQUE7O0FBQWQ7O0NBQWM7O0FBQWQ7Ozs7Ozs7Ozs7Ozs7RUFBQSxTQUFjO0FBQUE7O0FBQWQ7RUFBQSxTQUFjO0VBQWQsVUFBYztBQUFBOztBQUFkO0VBQUEsVUFBYztBQUFBOztBQUFkOzs7RUFBQSxnQkFBYztFQUFkLFNBQWM7RUFBZCxVQUFjO0FBQUE7O0FBQWQ7O0NBQWM7O0FBQWQ7RUFBQSxnQkFBYztBQUFBOztBQUFkOzs7Q0FBYzs7QUFBZDtFQUFBLFVBQWMsRUFBZCxNQUFjO0VBQWQsY0FBYyxFQUFkLE1BQWM7QUFBQTs7QUFBZDs7RUFBQSxVQUFjLEVBQWQsTUFBYztFQUFkLGNBQWMsRUFBZCxNQUFjO0FBQUE7O0FBQWQ7O0NBQWM7O0FBQWQ7O0VBQUEsZUFBYztBQUFBOztBQUFkOztDQUFjO0FBQWQ7RUFBQSxlQUFjO0FBQUE7O0FBQWQ7Ozs7Q0FBYzs7QUFBZDs7Ozs7Ozs7RUFBQSxjQUFjLEVBQWQsTUFBYztFQUFkLHNCQUFjLEVBQWQsTUFBYztBQUFBOztBQUFkOztDQUFjOztBQUFkOztFQUFBLGVBQWM7RUFBZCxZQUFjO0FBQUE7O0FBQWQsd0VBQWM7QUFBZDtFQUFBLGFBQWM7QUFBQTs7QUFBZDs7RUFBQSxxQ0FBYztFQUFkLDJEQUFjO0VBQWQsMEJBQWM7RUFBZDtBQUFjOztBQUFkO0VBQUE7QUFBYzs7QUFBZDtFQUFBLG1CQUFjO0VBQWQseUJBQWM7RUFBZCw0QkFBYztFQUFkLDRCQUFjO0VBQWQseUJBQWM7RUFBZCxtQkFBYztFQUFkLHFCQUFjO0VBQWQsdUJBQWM7RUFBZCxzQkFBYztFQUFkLHNCQUFjO0VBQWQsMEJBQWM7RUFBZCx1QkFBYztFQUFkLGlCQUFjO0VBQWQsaUJBQWM7RUFBZCxvQkFBYztFQUFkLHdCQUFjO0VBQWQsZUFBYztFQUFkLDBCQUFjO0VBQWQsZUFBYztFQUFkLDJCQUFjO0VBQWQsZUFBYztFQUFkLHdCQUFjO0VBQWQsZUFBYztFQUFkLGVBQWM7RUFBZCxrQkFBYztFQUFkLHFCQUFjO0VBQWQseUJBQWM7RUFBZCxzQkFBYztFQUFkLGdCQUFjO0VBQWQsNEJBQWM7RUFBZCxnQkFBYztFQUFkLDRCQUFjO0VBQWQsZ0JBQWM7RUFBZCw0QkFBYztFQUFkO0FBQWM7RUFBZDtJQUFBLGlDQUFjO0lBQWQ7NERBQWM7SUFBZCxnQkFBYztFQUFBOztFQUFkO0lBQUEsaUNBQWM7SUFBZDs0REFBYztJQUFk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QXBCO0FBQW9CO0FBQXBCO0VBQUEsc0JBQW9CO0VBQXBCLHNEQUFvQjtFQUFwQiw2QkFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsc0JBQW9CO0VBQXBCLHNEQUFvQjtFQUFwQiw2QkFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsc0JBQW9CO0VBQXBCLHNEQUFvQjtFQUFwQiw2QkFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQiw2QkFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQiw2QkFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQiw2QkFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQiw2QkFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQixrRUFBb0I7RUFBcEIsa0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQixrRUFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQixrRUFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQixrQkFBb0I7RUFBcEIsdURBQW9CO0VBQXBCLG9CQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLHNCQUFvQjtFQUFwQix1REFBb0I7RUFBcEIsa0JBQW9CO0VBQXBCLHNEQUFvQjtFQUFwQixpRUFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQixrQkFBb0I7RUFBcEIsdURBQW9CO0VBQXBCLG9CQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLHNCQUFvQjtFQUFwQix1REFBb0I7RUFBcEIsa0JBQW9CO0VBQXBCLHNEQUFvQjtFQUFwQixpRUFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQixrQkFBb0I7RUFBcEIsdURBQW9CO0VBQXBCLG9CQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLHNCQUFvQjtFQUFwQix1REFBb0I7RUFBcEIsa0JBQW9CO0VBQXBCLHNEQUFvQjtFQUFwQixpRUFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7RUFBQSxxQkFBb0I7RUFBcEIsa0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCOzs7O0VBQUEsb0JBQW9CO0VBQXBCLHNCQUFvQjtFQUFwQixzREFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCLDhDQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLGVBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsOEJBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsK0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsK0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsV0FBb0I7RUFBcEIsbUJBQW9CO0VBQXBCLHFCQUFvQjtFQUFwQixjQUFvQjtFQUFwQixnQkFBb0I7RUFBcEIsZUFBb0I7RUFBcEIsa0JBQW9CO0VBQXBCLCtMQUFvQjtFQUFwQixZQUFvQjtFQUFwQixxQkFBb0I7RUFBcEIsdUJBQW9CO0VBQXBCO0FBQW9CO0FBQXBCOztFQUFBO0FBQW9CO0FBQXBCOztFQUFBLGVBQW9CO0VBQXBCLHNCQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjs7RUFBQSxzQkFBb0I7RUFBcEIsc0RBQW9CO0VBQXBCLGlFQUFvQjtFQUFwQixrQkFBb0I7RUFBcEIsc0RBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsaUNBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsaUNBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsc0JBQW9CO0VBQXBCLHNEQUFvQjtFQUFwQixrQkFBb0I7RUFBcEIsc0RBQW9CO0VBQXBCLG9CQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjs7RUFBQSxzQkFBb0I7RUFBcEIsc0RBQW9CO0VBQXBCLGlFQUFvQjtFQUFwQixrQkFBb0I7RUFBcEIsc0RBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBLHNCQUFvQjtFQUFwQixzREFBb0I7RUFBcEIsa0JBQW9CO0VBQXBCLHNEQUFvQjtFQUFwQixvQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7O0VBQUEsc0JBQW9CO0VBQXBCLHNEQUFvQjtFQUFwQixpRUFBb0I7RUFBcEIsa0JBQW9CO0VBQXBCLHNEQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7RUFBQSxzQkFBb0I7RUFBcEIsc0RBQW9CO0VBQXBCLGtCQUFvQjtFQUFwQixzREFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCOztFQUFBLHNCQUFvQjtFQUFwQixzREFBb0I7RUFBcEIsaUVBQW9CO0VBQXBCLGtCQUFvQjtFQUFwQixzREFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCO0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQixrQkFBb0I7RUFBcEIsdURBQW9CO0VBQXBCLG9CQUFvQjtFQUFwQiw4Q0FBb0I7RUFBcEI7QUFBb0I7QUFBcEI7O0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQixrQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCO0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQixrQkFBb0I7RUFBcEIsdURBQW9CO0VBQXBCLG9CQUFvQjtFQUFwQiw4Q0FBb0I7RUFBcEI7QUFBb0I7QUFBcEI7O0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQixrQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCO0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQixrQkFBb0I7RUFBcEIsdURBQW9CO0VBQXBCLG9CQUFvQjtFQUFwQiw4Q0FBb0I7RUFBcEI7QUFBb0I7QUFBcEI7O0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQixrQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCO0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQixrQkFBb0I7RUFBcEIsdURBQW9CO0VBQXBCLG9CQUFvQjtFQUFwQiw4Q0FBb0I7RUFBcEI7QUFBb0I7QUFBcEI7O0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQixrQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCOztFQUFBLG9CQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7RUFBQSxpQkFBb0I7RUFBcEIseUJBQW9CO0VBQXBCLDZCQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjs7RUFBQSxzQkFBb0I7RUFBcEIsdURBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBLHlCQUFvQjtFQUFwQiw2QkFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCLDZDQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjs7RUFBQSx5QkFBb0I7RUFBcEIsNkJBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBLDBCQUFvQjtFQUFwQiw2QkFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCOztFQUFBLHNCQUFvQjtFQUFwQix1REFBb0I7RUFBcEIsa0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQixvQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxvQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7O0VBQUEsc0JBQW9CO0VBQXBCLHNEQUFvQjtFQUFwQixpRUFBb0I7RUFBcEIsa0JBQW9CO0VBQXBCLHNEQUFvQjtFQUFwQixpRUFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCOztFQUFBLHNCQUFvQjtFQUFwQixzREFBb0I7RUFBcEIsaUVBQW9CO0VBQXBCLGtCQUFvQjtFQUFwQixzREFBb0I7RUFBcEIsaUVBQW9CO0VBQXBCLG9CQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLG9CQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjs7RUFBQSxzQkFBb0I7RUFBcEIsc0RBQW9CO0VBQXBCLGlFQUFvQjtFQUFwQixrQkFBb0I7RUFBcEIsc0RBQW9CO0VBQXBCLGlFQUFvQjtFQUFwQixvQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxvQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7O0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQixrQkFBb0I7RUFBcEIsdURBQW9CO0VBQXBCLG9CQUFvQjtFQUFwQiw4Q0FBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxvQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7O0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQixrQkFBb0I7RUFBcEIsdURBQW9CO0VBQXBCLG9CQUFvQjtFQUFwQiw4Q0FBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxvQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7O0VBQUEsc0JBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQixrQkFBb0I7RUFBcEIsdURBQW9CO0VBQXBCLG9CQUFvQjtFQUFwQiw4Q0FBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxvQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7O0VBQUEsc0JBQW9CO0VBQXBC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QUFwQjtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCOztFQUFBLG1CQUFvQjtFQUFwQixzQkFBb0I7RUFBcEIsdURBQW9CO0VBQXBCLGtFQUFvQjtFQUFwQixrQkFBb0I7RUFBcEIsdURBQW9CO0VBQXBCLGtFQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLHFEQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjs7RUFBQSxxREFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxvQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxvQkFBb0I7RUFBcEIsNkNBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsb0JBQW9CO0VBQXBCLDZDQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLG9CQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLG9CQUFvQjtFQUFwQiw2Q0FBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxvQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxvQkFBb0I7RUFBcEIsNkNBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsOEJBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsK0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsK0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsNERBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsNERBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsNERBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsNERBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsNERBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsNERBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsNERBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsNERBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsNERBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsNERBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsNERBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsNERBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsNERBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsNERBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsNERBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsNERBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsNERBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsNERBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsNERBQW9CO0VBQXBCO0FBQW9CO0FBQXBCOzs7RUFBQSxzQkFBb0I7RUFBcEIsd0JBQW9CO0VBQXBCLHNCQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjs7OztFQUFBLHFCQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLHNCQUFvQjtFQUFwQixzQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxZQUFvQjtFQUFwQixrQkFBb0I7RUFBcEIsbUJBQW9CO0VBQXBCLG9CQUFvQjtFQUFwQix1QkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7O0VBQUEsdURBQW9CO0VBQXBCO0FBQW9CO0FBQXBCOztFQUFBLGtCQUFvQjtFQUFwQixzREFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsaUJBQW9CO0VBQXBCLGtCQUFvQjtFQUFwQixrQkFBb0I7RUFBcEIscUJBQW9CO0VBQXBCLFdBQW9CO0VBQXBCLHVEQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLHlC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QjtBQUFvQjtBQUFwQjtFQUFBLFlBQW9CO0VBQXBCO0FBQW9CO0FBQXBCOztFQUFBLFlBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsWUFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7O0VBQUEsWUFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxZQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjs7RUFBQSxhQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLGVBQW9CO0VBQXBCLGtCQUFvQjtFQUFwQixtQkFBb0I7RUFBcEIsc0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsWUFBb0I7RUFBcEIsa0JBQW9CO0VBQXBCLGlCQUFvQjtFQUFwQixzQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxlQUFvQjtFQUFwQixtQkFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCLHNCQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLGNBQW9CO0VBQXBCLGVBQW9CO0VBQXBCLG1CQUFvQjtFQUFwQixzQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCO0VBQUEsa0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBLGtCQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7RUFBQSxtQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCO0VBQUEsZUFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxjQUFvQjtFQUFwQixvQkFBb0I7RUFBcEIscUJBQW9CO0VBQXBCLGtCQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLFlBQW9CO0VBQXBCLHFCQUFvQjtFQUFwQixzQkFBb0I7RUFBcEIsZ0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsWUFBb0I7RUFBcEIsa0JBQW9CO0VBQXBCLG1CQUFvQjtFQUFwQixnQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxZQUFvQjtFQUFwQixvQkFBb0I7RUFBcEIscUJBQW9CO0VBQXBCLGdCQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7RUFBQSxjQUFvQjtFQUFwQixhQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLFlBQW9CO0VBQXBCLFdBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsWUFBb0I7RUFBcEIsV0FBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxZQUFvQjtFQUFwQixXQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLGNBQW9CO0VBQXBCLGFBQW9CO0VBQXBCLHFCQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLFlBQW9CO0VBQXBCLFdBQW9CO0VBQXBCLHFCQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLFlBQW9CO0VBQXBCLFdBQW9CO0VBQXBCLHFCQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLFlBQW9CO0VBQXBCLFdBQW9CO0VBQXBCLHFCQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7RUFBQSxvQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCO0VBQUEsMEJBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEseUJBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBLDZCQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLDRCQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCO0VBQUEseUJBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsMEJBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBLDRCQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLDZCQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBLGVBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsV0FBb0I7RUFBcEIsWUFBb0I7RUFBcEIsb0JBQW9CO0tBQXBCO0FBQW9CO0FBQXBCO0VBQUEsWUFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxlQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLGNBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsWUFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBLFlBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsWUFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBLGdCQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLGdCQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLGNBQW9CO0VBQXBCLHFCQUFvQjtFQUFwQixrQkFBb0I7RUFBcEIsaUJBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsb0JBQW9CO0VBQXBCLGdCQUFvQjtFQUFwQixvQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxZQUFvQjtFQUFwQixzQkFBb0I7RUFBcEIsbUJBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEscUJBQW9CO0VBQXBCLGdCQUFvQjtFQUFwQixvQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxZQUFvQjtFQUFwQixtQkFBb0I7RUFBcEIsbUJBQW9CO0VBQXBCLG9CQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLGtCQUFvQjtFQUFwQixnQkFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsWUFBb0I7RUFBcEIscUJBQW9CO0VBQXBCLG1CQUFvQjtFQUFwQixvQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxvQkFBb0I7RUFBcEIsZ0JBQW9CO0VBQXBCLG9CQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLFVBQW9CO0VBQXBCLFVBQW9CO0VBQXBCLFFBQW9CO0VBQXBCLFlBQW9CO0VBQXBCLHFCQUFvQjtFQUFwQixzQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxXQUFvQjtFQUFwQixTQUFvQjtFQUFwQixzQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxVQUFvQjtFQUFwQixTQUFvQjtFQUFwQixzQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxVQUFvQjtFQUFwQixVQUFvQjtFQUFwQixxQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxTQUFvQjtFQUFwQixXQUFvQjtFQUFwQixxQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxRQUFvQjtFQUFwQixXQUFvQjtFQUFwQixzQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxRQUFvQjtFQUFwQixZQUFvQjtFQUFwQixzQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxjQUFvQjtFQUFwQixvQkFBb0I7RUFBcEIscUJBQW9CO0VBQXBCLGtCQUFvQjtFQUFwQixpQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxZQUFvQjtFQUFwQixrQkFBb0I7RUFBcEIsbUJBQW9CO0VBQXBCLG1CQUFvQjtFQUFwQixvQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxZQUFvQjtFQUFwQixvQkFBb0I7RUFBcEIscUJBQW9CO0VBQXBCLG1CQUFvQjtFQUFwQixvQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxZQUFvQjtFQUFwQixxQkFBb0I7RUFBcEIsc0JBQW9CO0VBQXBCLG1CQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLHFCQUFvQjtFQUFwQixzQkFBb0I7RUFBcEIsa0JBQW9CO0VBQXBCLGlCQUFvQjtFQUFwQixpQkFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxxQkFBb0I7RUFBcEIsc0JBQW9CO0VBQXBCLG1CQUFvQjtFQUFwQixvQkFBb0I7RUFBcEIsaUJBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsb0JBQW9CO0VBQXBCLHFCQUFvQjtFQUFwQixlQUFvQjtFQUFwQixtQkFBb0I7RUFBcEIsaUJBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsa0JBQW9CO0VBQXBCLG1CQUFvQjtFQUFwQixtQkFBb0I7RUFBcEIsb0JBQW9CO0VBQXBCLGlCQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7RUFBQSxTQUFvQjtFQUFwQixZQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLG9CQUFvQjtFQUFwQix1QkFBb0I7RUFBcEIsa0JBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7RUFBQSxTQUFvQjtFQUFwQixVQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7RUFBQSxZQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLGVBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsY0FBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxZQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBLFlBQW9CO0VBQXBCLFdBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUEsWUFBb0I7RUFBcEIsV0FBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7RUFBQSxlQUFvQjtFQUFwQixjQUFvQjtFQUFwQjtBQUFvQjtBQUFwQjtFQUFBLGVBQW9CO0VBQXBCLGNBQW9CO0VBQXBCO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7RUFBQTtBQUFvQjtBQUFwQjtFQUFBO0FBQW9CO0FBQXBCO0VBQUEsY0FBb0I7RUFBcEIsYUFBb0I7RUFBcEI7QUFBb0I7QUFBcEI7RUFBQSxjQUFvQjtFQUFwQixhQUFvQjtFQUFwQjtBQUFvQjtBQUFw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O0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsYUFBbUI7RUFBbkIsZUFBbUI7RUFBbkIsZ0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsUUFBbUI7RUFBbkIsVUFBbUI7RUFBbkIsV0FBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsaUJBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsaUJBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsa0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsbUJBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsZUFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxnQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxpQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxtQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxtQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxtQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxtQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsd0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLHVCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsdUJBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsdUJBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLHNCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHdCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHFCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHNCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5COztFQUFBO0lBQUE7RUFBbUI7QUFBQTtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsd0JBQW1CO0tBQW5CLHFCQUFtQjtVQUFuQjtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLHFCQUFtQjtPQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHVCQUFtQjtFQUFuQiwwREFBbUI7RUFBbkIsOERBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLHdCQUFtQjtFQUFuQiwwREFBbUI7RUFBbkIsK0RBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsd0JBQW1CO0VBQW5CLDhEQUFtQjtFQUFuQixrRUFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQSxnQkFBbUI7RUFBbkIsdUJBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQSwrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxnQ0FBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxtQ0FBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSwrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxnQ0FBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxpQ0FBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSw4QkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsc0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEscUJBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsa0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsa0JBQW1CO0VBQW5CLHNEQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQix1REFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLDJCQUFtQjtFQUFuQix3Q0FBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLHNCQUFtQjtLQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtLQUFuQjtBQUFtQjtBQUFuQjtFQUFBLDBCQUFtQjtLQUFuQjtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLGlCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG1CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHFCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGlCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHFCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHFCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQixnQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkIsZ0JBQW1CO0VBQW5CLHVCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG1CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG1CQUFtQjtFQUFuQixnQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxpQkFBbUI7RUFBbkIsZ0JBQW1CO0VBQW5CLHdCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGVBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEscUJBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsK0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsZ0NBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsa0NBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsdUNBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsa0NBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEseUNBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsb0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsb0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsb0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsb0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsb0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEs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Q2hCLGdCQUFnQjtFQUNoQixjQUFjO0VBQ2QsbUJBQW1CO0VBQ25CLHVDQUF1QztFQUN2Qyx3QkFBd0I7RUFDeEIsc0RBQXNEO0VBQ3RELG9CQUFvQjtBQWV0Qjs7QUFiRTtJQUNFLGtCQUFrQjtJQUNsQixzREFBc0Q7SUFDdEQsV0FBVztJQUNYLGtCQUFrQjtJQUNsQixRQUFRO0lBQ1IsV0FBVztJQUNYLFVBQVU7SUFDVixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLHVDQUF1QztJQUN2QywwQ0FBMEM7RUFDNUM7O0FBR0Y7RUFDRTtJQUNFLFVBQVU7RUFDWjtBQUNGOztBQWh0QkE7RUFBQSxxQkNBQTtFREFBO0NDQUE7O0FEQUE7RUFBQTtDQ0FBOztBREFBO0VBQUE7Q0NBQTs7QURBQTtFQUFBO0NDQUE7O0FEQUE7Ozs7RUFBQSxtQkNBQTtFREFBLHdEQ0FBO0VEQUE7Q0NBQTs7QURBQTtFQUFBO0NDQUE7O0FEQUE7RUFBQSxxQkNBQTtFREFBO0NDQUE7O0FEQUE7RUFBQTtDQ0FBOztBREFBO0VBQUE7Q0NBQTs7QURBQTtFQUFBO0NDQUE7O0FEQUE7RUFBQTtDQ0FBOztBREFBO0VBQUEscUJDQUE7RURBQTtDQ0FBOztBREFBO0VBQUEscUJDQUE7RURBQTtDQ0FBOztBREFBOztFQUFBO0lBQUEscUJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQSwyQkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSwwQkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBLDhCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLDZCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQSwwQkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSwyQkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBLDZCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLDhCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBLGdCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLFlDQUE7SURBQSxhQ0FBO0lEQUEscUJDQUE7T0RBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQSxVQ0FBO0lEQUEsYUNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSxxQkNBQTtJREFBLHdCQ0FBO0lEQUEsbUJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBLFVDQUE7SURBQSxXQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQSxjQ0FBO0lEQUEsb0JDQUE7SURBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBLGNDQUE7SURBQSxtQ0NBQTtJREFBLGdCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQSx1QkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSx1QkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSxxQkNBQTtJREFBLHdCQ0FBO0lEQUEsZ0JDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsb0JDQUE7SURBQSx1QkNBQTtJREFBLG9CQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLGdDQ0FBO0lEQUEsaUNDQUE7SURBQSw4QkNBQTtJREFBLG9DQ0FBO0lEQUEsNkJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsZ0NDQUE7SURBQSxpQ0NBQTtJREFBLDhCQ0FBO0lEQUEsb0NDQUE7SURBQSw2QkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSwwQkNBQTtJREFBLGdDQ0FBO0lEQUEsMkJDQUE7SURBQSxpQ0NBQTtJREFBLG9DQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLDBCQ0FBO0lEQUEsZ0NDQUE7SURBQSwyQkNBQTtJREFBLGlDQ0FBO0lEQUEsb0NDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsZ0NDQUE7SURBQSwyQkNBQTtJREFBLGlDQ0FBO0lEQUEsOEJDQUE7SURBQSxvQ0NBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSxnQ0NBQTtJREFBLDJCQ0FBO0lEQUEsaUNDQUE7SURBQSw4QkNBQTtJREFBLG9DQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLDBCQ0FBO0lEQUEsZ0NDQUE7SURBQSxpQ0NBQTtJREFBLG9DQ0FBO0lEQUEsNkJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsMEJDQUE7SURBQSxnQ0NBQTtJREFBLGlDQ0FBO0lEQUEsb0NDQUE7SURBQSw2QkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSxrQkNBQTtJREFBLGlCQ0FBO0lEQUEsc0JDQUE7SURBQSxpQkNBQTtJREFBLGlCQ0FBO0lEQUEsZ01DQUE7SURBQSxnQ0NBQTtJREFBLG9EQ0FBO0lEQUEsaUNDQUE7SURBQTtHQ0FBO0NBQUE7O0FEQUE7O0VBQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQSxvQkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSxxQkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSxvQkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQSx1QkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUEsbUJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsbUJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEscUJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUEsZ0JDQUE7SURBQSxpQkNBQTtJREFBLHlCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLG9CQ0FBO0lEQUEsaUJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsZ0JDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsYUNBQTtJREFBLG1CQ0FBO0lEQUEsa0JDQUE7SURBQSx1QkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSxhQ0FBO0lEQUEsc0JDQUE7SURBQSx1QkNBQTtJREFBLGlCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLGFDQUE7SURBQSxZQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLGFDQUE7SURBQSxZQ0FBO0lEQUEsc0JDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEscUJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQSwyQkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSwwQkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBLDhCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLDZCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQSwwQkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSwyQkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBLDZCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLDhCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBLGdCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLFlDQUE7SURBQSxhQ0FBO0lEQUEscUJDQUE7T0RBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQSxVQ0FBO0lEQUEsYUNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSxxQkNBQTtJREFBLHdCQ0FBO0lEQUEsbUJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBLFVDQUE7SURBQSxXQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLGNDQUE7SURBQSxvQkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUEsY0NBQTtJREFBLG1DQ0FBO0lEQUEsZ0JDQUE7SURBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBLHVCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLHVCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLHFCQ0FBO0lEQUEsd0JDQUE7SURBQSxnQkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSxvQkNBQTtJREFBLHVCQ0FBO0lEQUEsb0JDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsZ0NDQUE7SURBQSxpQ0NBQTtJREFBLDhCQ0FBO0lEQUEsb0NDQUE7SURBQSw2QkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSxnQ0NBQTtJREFBLGlDQ0FBO0lEQUEsOEJDQUE7SURBQSxvQ0NBQTtJREFBLDZCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLDBCQ0FBO0lEQUEsZ0NDQUE7SURBQSwyQkNBQTtJREFBLGlDQ0FBO0lEQUEsb0NDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsMEJDQUE7SURBQSxnQ0NBQTtJREFBLDJCQ0FBO0lEQUEsaUNDQUE7SURBQSxvQ0NBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSxnQ0NBQTtJREFBLDJCQ0FBO0lEQUEsaUNDQUE7SURBQSw4QkNBQTtJREFBLG9DQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLGdDQ0FBO0lEQUEsMkJDQUE7SURBQSxpQ0NBQTtJREFBLDhCQ0FBO0lEQUEsb0NDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsMEJDQUE7SURBQSxnQ0NBQTtJREFBLGlDQ0FBO0lEQUEsb0NDQUE7SURBQSw2QkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSwwQkNBQTtJREFBLGdDQ0FBO0lEQUEsaUNDQUE7SURBQSxvQ0NBQTtJREFBLDZCQ0FBO0lEQUE7R0NBQTtDQUFBOztBREFBOztFQUFBO0lBQUEsa0JDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsaUJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEscUJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQSxrQkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSxrQkNBQTtJREFBLGlCQ0FBO0lEQUEseUJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsb0JDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsZ0JDQUE7SURBQSxvQkNBQTtJREFBLHFCQ0FBO0lEQUEsdUJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsYUNBQTtJREFBLG1CQ0FBO0lEQUEsb0JDQUE7SURBQSxpQkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSxhQ0FBO0lEQUEsWUNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSxhQ0FBO0lEQUEsWUNBQTtJREFBLHNCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLHFCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUEsMkJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsMEJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQSw4QkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSw2QkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUEsMEJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsMkJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQSw2QkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSw4QkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQSxnQkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSxZQ0FBO0lEQUEsYUNBQTtJREFBLHFCQ0FBO09EQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUEsVUNBQTtJREFBLGFDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEscUJDQUE7SURBQSx3QkNBQTtJREFBLG1CQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQSxVQ0FBO0lEQUEsV0NBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSxjQ0FBO0lEQUEsb0JDQUE7SURBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBLGNDQUE7SURBQSxtQ0NBQTtJREFBLGdCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBO0dDQUE7O0VEQUE7SUFBQSx1QkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSx1QkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSxxQkNBQTtJREFBLHdCQ0FBO0lEQUEsZ0JDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsb0JDQUE7SURBQSx1QkNBQTtJREFBLG9CQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLGdDQ0FBO0lEQUEsaUNDQUE7SURBQSw4QkNBQTtJREFBLG9DQ0FBO0lEQUEsNkJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsZ0NDQUE7SURBQSxpQ0NBQTtJREFBLDhCQ0FBO0lEQUEsb0NDQUE7SURBQSw2QkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSwwQkNBQTtJREFBLGdDQ0FBO0lEQUEsMkJDQUE7SURBQSxpQ0NBQTtJREFBLG9DQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLDBCQ0FBO0lEQUEsZ0NDQUE7SURBQSwyQkNBQTtJREFBLGlDQ0FBO0lEQUEsb0NDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsZ0NDQUE7SURBQSwyQkNBQTtJREFBLGlDQ0FBO0lEQUEsOEJDQUE7SURBQSxvQ0NBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSxnQ0NBQTtJREFBLDJCQ0FBO0lEQUEsaUNDQUE7SURBQSw4QkNBQTtJREFBLG9DQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLDBCQ0FBO0lEQUEsZ0NDQUE7SURBQSxpQ0NBQTtJREFBLG9DQ0FBO0lEQUEsNkJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsMEJDQUE7SURBQSxnQ0NBQTtJREFBLGlDQ0FBO0lEQUEsb0NDQUE7SURBQSw2QkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBO0NBQUE7O0FEQUE7O0VBQUE7SUFBQSxpQkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQTtHQ0FBOztFREFBO0lBQUE7R0NBQTs7RURBQTtJQUFBLHFCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLGtCQ0FBO0lEQUE7R0NBQTs7RURBQTs7SUFBQSxnQkNBQTtJREFBO0dDQUE7O0VEQUE7SUFBQSxlQ0FBO0lEQUEsZ0JDQUE7SURBQSxvQkNBQTtJREFBLHVCQ0FBO0lEQUE7R0NBQTs7RURBQTtJQUFBLGFDQUE7SURBQSxxQkNBQTtJREFBLHNCQ0FBO0lEQUEsaUJDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsYUNBQTtJREFBLFlDQUE7SURBQTtHQ0FBOztFREFBO0lBQUEsYUNBQTtJREFBLFlDQUE7SURBQSxzQkNBQTtJREFBO0dDQUE7Q0FBQTs7QURBQTtFQUFBO0NDQUE7O0FEQUE7RUFBQTtDQ0FBIiwic291cmNlc0NvbnRlbnQiOlsiQHRhaWx3aW5kIGJhc2U7XG5AdGFpbHdpbmQgY29tcG9uZW50cztcbkB0YWlsd2luZCB1dGlsaXRpZXM7XG5cbkBsYXllciBiYXNlIHtcbiAgQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6IFwiT3B0aW1pc3RpYyBEaXNwbGF5XCI7XG4gICAgc3JjOiB1cmwoLi4vZm9udHMvb3B0aW1pc3RpYy9PcHRpbWlzdGljX0Rpc3BsYXlfV19NZC53b2ZmMikgZm9ybWF0KFwid29mZjJcIiksXG4gICAgICB1cmwoLi4vZm9udHMvb3B0aW1pc3RpYy9PcHRpbWlzdGljX0Rpc3BsYXlfV19NZC53b2ZmKSBmb3JtYXQoXCJ3b2ZmXCIpO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIH1cblxuICBAZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogXCJPcHRpbWlzdGljIERpc3BsYXlcIjtcbiAgICBzcmM6IHVybCguLi9mb250cy9vcHRpbWlzdGljL09wdGltaXN0aWNfRGlzcGxheV9XX1NCZC53b2ZmMikgZm9ybWF0KFwid29mZjJcIiksXG4gICAgICB1cmwoLi4vZm9udHMvb3B0aW1pc3RpYy9PcHRpbWlzdGljX0Rpc3BsYXlfV19TQmQud29mZikgZm9ybWF0KFwid29mZlwiKTtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICB9XG5cbiAgQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6IFwiT3B0aW1pc3RpYyBEaXNwbGF5XCI7XG4gICAgc3JjOiB1cmwoLi4vZm9udHMvb3B0aW1pc3RpYy9PcHRpbWlzdGljX0Rpc3BsYXlfV19CZC53b2ZmMikgZm9ybWF0KFwid29mZjJcIiksXG4gICAgICB1cmwoLi4vZm9udHMvb3B0aW1pc3RpYy9PcHRpbWlzdGljX0Rpc3BsYXlfV19CZC53b2ZmKSBmb3JtYXQoXCJ3b2ZmXCIpO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIH1cblxuICBAZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogXCJPcHRpbWlzdGljIFRleHRcIjtcbiAgICBzcmM6IHVybCguLi9mb250cy9vcHRpbWlzdGljL09wdGltaXN0aWNfVGV4dF9XX1JnLndvZmYyKSBmb3JtYXQoXCJ3b2ZmMlwiKSxcbiAgICAgIHVybCguLi9mb250cy9vcHRpbWlzdGljL09wdGltaXN0aWNfVGV4dF9XX1JnLndvZmYpIGZvcm1hdChcIndvZmZcIik7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgfVxuXG4gIEBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiBcIk9wdGltaXN0aWMgVGV4dFwiO1xuICAgIHNyYzogdXJsKC4uL2ZvbnRzL29wdGltaXN0aWMvT3B0aW1pc3RpY19UZXh0X1dfTWQud29mZjIpIGZvcm1hdChcIndvZmYyXCIpLFxuICAgICAgdXJsKC4uL2ZvbnRzL29wdGltaXN0aWMvT3B0aW1pc3RpY19UZXh0X1dfTWQud29mZikgZm9ybWF0KFwid29mZlwiKTtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICB9XG5cbiAgQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6IFwiT3B0aW1pc3RpYyBUZXh0XCI7XG4gICAgc3JjOiB1cmwoLi4vZm9udHMvb3B0aW1pc3RpYy9PcHRpbWlzdGljX1RleHRfV19CZC53b2ZmMikgZm9ybWF0KFwid29mZjJcIiksXG4gICAgICB1cmwoLi4vZm9udHMvb3B0aW1pc3RpYy9PcHRpbWlzdGljX1RleHRfV19CZC53b2ZmKSBmb3JtYXQoXCJ3b2ZmXCIpO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIH1cblxuICBAZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogXCJPcHRpbWlzdGljIFRleHRcIjtcbiAgICBzcmM6IHVybCguLi9mb250cy9vcHRpbWlzdGljL09wdGltaXN0aWNfVGV4dF9XX1hCZC53b2ZmMikgZm9ybWF0KFwid29mZjJcIiksXG4gICAgICB1cmwoLi4vZm9udHMvb3B0aW1pc3RpYy9PcHRpbWlzdGljX1RleHRfV19YQmQud29mZikgZm9ybWF0KFwid29mZlwiKTtcbiAgICBmb250LXdlaWdodDogODAwO1xuICB9XG59XG5cbmJvZHkge1xuICBmb250LWZhbWlseTogXCJPcHRpbWlzdGljIFRleHRcIiwgc2Fucy1zZXJpZjtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG5cbmJvZHksXG5odG1sLFxuI3Jvb3Qge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbjpyb290IHtcbiAgLS1zZWdFdi1mb250OiBcIk9wdGltaXN0aWMgVGV4dFwiLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCxcbiAgICBcIlNlZ29lIFVJXCIsIE94eWdlbiwgVWJ1bnR1LCBDYW50YXJlbGwsIFwiT3BlbiBTYW5zXCIsIFwiSGVsdmV0aWNhIE5ldWVcIixcbiAgICBzYW5zLXNlcmlmO1xuICAtLXBlcnNwZWN0aXZlOiA0MDAwcHg7XG59XG5cbmgxLFxuaDIsXG5oMyxcbmg0LFxuaDUsXG5oNiB7XG4gIGZvbnQtZmFtaWx5OiBcIk9wdGltaXN0aWMgRGlzcGxheVwiLCBzYW5zLXNlcmlmO1xufVxuXG4ucHJvc2UgLmRpc3BsYXkgaDEge1xuICBAYXBwbHkgdGV4dC00eGwgdGV4dC1ncmF5LTgwMCBmb250LW1lZGl1bSBsZWFkaW5nLXRpZ2h0O1xufVxuXG4ucHJvc2UgLmRpc3BsYXkgaDIge1xuICBAYXBwbHkgdGV4dC1ncmF5LTgwMCBmb250LW1lZGl1bSBsZWFkaW5nLXRpZ2h0O1xuICBmb250LXNpemU6IDIuNXJlbTtcbn1cblxuLnByb3NlIGgxIHtcbiAgQGFwcGx5IHRleHQtM3hsIHRleHQtZ3JheS04MDAgZm9udC1tZWRpdW0gbGVhZGluZy10aWdodCBtdC0yIG1iLTQ7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAxNnJlbTtcbn1cblxuLnByb3NlIGgyIHtcbiAgQGFwcGx5IHRleHQtMnhsIHRleHQtZ3JheS04MDAgZm9udC1tZWRpdW0gbGVhZGluZy10aWdodCBteS0yO1xuICBsZXR0ZXItc3BhY2luZzogMC4wMXJlbTtcbn1cblxuLnByb3NlIGgzIHtcbiAgQGFwcGx5IHRleHQteGwgdGV4dC1ncmF5LTgwMCBmb250LW1lZGl1bSBsZWFkaW5nLXRpZ2h0IG15LTI7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAwNXJlbTtcbn1cblxuLnByb3NlIGg0IHtcbiAgQGFwcGx5IHRleHQtbGcgdGV4dC1ncmF5LTgwMCBmb250LW1lZGl1bSBsZWFkaW5nLXRpZ2h0IG15LTI7XG59XG5cbi5wcm9zZSBoNSB7XG4gIEBhcHBseSB0ZXh0LXhsIHRleHQtZ3JheS02MDAgZm9udC1ub3JtYWwgbGVhZGluZy1ub3JtYWwgbXktMjtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDA1cmVtO1xufVxuXG4ucHJvc2UgaDYge1xuICBAYXBwbHkgdGV4dC1iYXNlIHRleHQtZ3JheS02MDAgZm9udC1ub3JtYWwgbGVhZGluZy1ub3JtYWwgbXktMjtcbn1cblxuLnByb3NlIHAge1xuICBAYXBwbHkgdGV4dC1zbSB0ZXh0LWdyYXktNjAwIGZvbnQtbm9ybWFsIGxlYWRpbmctbm9ybWFsO1xufVxuXG4ucHJvc2Ugb2wsXG4ucHJvc2UgdWwge1xuICBAYXBwbHkgdGV4dC1zbSB0ZXh0LWdyYXktNjAwIGZvbnQtbm9ybWFsIGxlYWRpbmctbm9ybWFsO1xuICBwYWRkaW5nLXJpZ2h0OiAycmVtO1xufVxuXG4vKiBOb24tbW9iaWxlIHR5cG9ncmFwaHkgKi9cbkBtZWRpYSBzY3JlZW4obGcpIHtcbiAgLnByb3NlIC5kaXNwbGF5IGgxIHtcbiAgICBAYXBwbHkgdGV4dC02eGw7XG4gIH1cblxuICAucHJvc2UgLmRpc3BsYXkgaDIge1xuICAgIEBhcHBseSB0ZXh0LTV4bDtcbiAgfVxuXG4gIC5wcm9zZSBoMSB7XG4gICAgQGFwcGx5IHRleHQtNHhsO1xuICB9XG5cbiAgLnByb3NlIGgyIHtcbiAgICBAYXBwbHkgdGV4dC0zeGw7XG4gIH1cblxuICAucHJvc2UgaDMge1xuICAgIEBhcHBseSB0ZXh0LTJ4bDtcbiAgfVxuXG4gIC5wcm9zZSBoNCB7XG4gICAgQGFwcGx5IHRleHQtbGcgdGV4dC1ncmF5LTgwMDtcbiAgfVxuXG4gIC5wcm9zZSBoNSB7XG4gICAgQGFwcGx5IHRleHQtMnhsO1xuICB9XG5cbiAgLnByb3NlIGg2Om5vdChoNi5mYXEpIHtcbiAgICBAYXBwbHkgdGV4dC1iYXNlO1xuICB9XG5cbiAgLnByb3NlIG9sLFxuICAucHJvc2UgdWwge1xuICAgIHBhZGRpbmctcmlnaHQ6IDNyZW07XG4gIH1cbn1cblxuLmRhcmstbW9kZSBoMSxcbi5kYXJrLW1vZGUgaDIsXG4uZGFyay1tb2RlIGgzLFxuLmRhcmstbW9kZSBoNCxcbi5kYXJrLW1vZGUgaDUsXG7iiYgge1xuICBAYXBwbHkgdGV4dC13aGl0ZTtcbn1cblxuLmRhcmstbW9kZSBoNCxcbi5kYXJrLW1vZGUgaDYge1xuICBAYXBwbHkgdGV4dC1ncmF5LTIwMDtcbn1cblxuLmZsZXgtZ3Jvdy0yIHtcbiAgZmxleC1ncm93OiAyO1xufVxuXG4uZmxleC1ncm93LTMge1xuICBmbGV4LWdyb3c6IDM7XG59XG5cbi5mbGV4LWdyb3ctNCB7XG4gIGZsZXgtZ3JvdzogNDtcbn1cblxuLmZsZXgtZ3Jvdy01IHtcbiAgZmxleC1ncm93OiA1O1xufVxuXG4ubmF2LXRpdGxlIHtcbiAgZm9udC1mYW1pbHk6IHZhcigtLXNlZ0V2LWZvbnQpO1xufVxuXG4vKipcbiAqIERhaXN5IFVJIGN1c3RvbWl6YXRpb25zXG4gKi9cblxuLmJ0biB7XG4gIEBhcHBseSBub3JtYWwtY2FzZSByb3VuZGVkLW1kO1xufVxuXG4uY29tcF9zdW1tYXJ5IGgxLFxuLmNvbXBfc3VtbWFyeSBoMixcbi5jb21wX3N1bW1hcnkgaDMge1xuICBAYXBwbHkgbWItNDtcbn1cblxuLmRpc2FibGVkIHtcbiAgb3BhY2l0eTogMC40O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmFic29sdXRlLWNlbnRlciB7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuXG5Ac2NyZWVuIGxnIHtcbiAgLmRyYXdlciAuZ3JpZCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtYXgtY29udGVudCAxZnI7XG4gIH1cbn1cblxuLmZhZGUtaW4ge1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNXM7XG4gIG9wYWNpdHk6IDEgIWltcG9ydGFudDtcbn1cblxuLnJlYWN0LXBob3RvLWdhbGxlcnktLWdhbGxlcnkgPiBkaXYge1xuICBnYXA6IDAuMjVyZW07XG59XG5cbi5zdGlja2VyIHtcbiAgZmlsdGVyOiBkcm9wLXNoYWRvdygwLjI1cmVtIDAuMjVyZW0gNXB4ICNmZmYpXG4gICAgZHJvcC1zaGFkb3coLTAuMjVyZW0gMC4yNXJlbSA1cHggI2ZmZilcbiAgICBkcm9wLXNoYWRvdygwLjI1cmVtIC0wLjI1cmVtIDVweCAjZmZmKVxuICAgIGRyb3Atc2hhZG93KC0wLjI1cmVtIC0wLjI1cmVtIDVweCAjZmZmKTtcbiAgdHJhbnNpdGlvbjogZmlsdGVyIDAuM3MgZWFzZS1vdXQ7XG59XG5cbi5zdGlja2VyOmhvdmVyLFxuLnN0aWNrZXItc2VsZWN0IHtcbiAgZmlsdGVyOiBkcm9wLXNoYWRvdygwLjI1cmVtIDAuMjVyZW0gMXB4ICMyOTYyZDkpXG4gICAgZHJvcC1zaGFkb3coLTAuMjVyZW0gMC4yNXJlbSAxcHggIzI5NjJkOSlcbiAgICBkcm9wLXNoYWRvdygwLjI1cmVtIC0wLjI1cmVtIDFweCAjMjk2MmQ5KVxuICAgIGRyb3Atc2hhZG93KC0wLjI1cmVtIC0wLjI1cmVtIDFweCAjMjk2MmQ5KTtcbn1cblxuLm1hc2stcGF0aCB7XG4gIG9wYWNpdHk6IDA7XG4gIGFuaW1hdGlvbjogcmV2ZWFsIDAuNHMgZWFzZS1pbiBmb3J3YXJkcztcbn1cblxuLkNhbnZhcy5tdWx0aS1tYXNrLW1vZGUge1xuICBzdmcubWFzay0xLW9mLTEsXG4gIHN2Zy5tYXNrLTEtb2YtMixcbiAgc3ZnLm1hc2stMi1vZi0yLFxuICBzdmcubWFzay0xLW9mLTMsXG4gIHN2Zy5tYXNrLTItb2YtMyxcbiAgc3ZnLm1hc2stMy1vZi0zIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gICYucm90YXRlIHtcbiAgICAuYmFja2dyb3VuZCB7XG4gICAgICBhbmltYXRpb246IHJvdGF0ZTAgMXMgZWFzZS1pbiBmb3J3YXJkcztcbiAgICB9XG4gICAgJiA+IGltZzpudGgtY2hpbGQoMikge1xuICAgICAgYW5pbWF0aW9uOiByb3RhdGUgMXMgZWFzZS1pbiBmb3J3YXJkcztcbiAgICB9XG4gICAgc3ZnLm1hc2stYmVzdCB7XG4gICAgICBhbmltYXRpb246IHJvdGF0ZS1iZXN0IDFzIGVhc2UtaW4gZm9yd2FyZHM7XG4gICAgfVxuICAgIHN2Zy5tYXNrLTEtb2YtMSB7XG4gICAgICBhbmltYXRpb246IHJvdGF0ZS0xLW9mLTEgMXMgZWFzZS1pbiBmb3J3YXJkcztcbiAgICB9XG4gICAgc3ZnLm1hc2stMS1vZi0yIHtcbiAgICAgIGFuaW1hdGlvbjogcm90YXRlLTEtb2YtMiAxcyBlYXNlLWluIGZvcndhcmRzO1xuICAgIH1cbiAgICBzdmcubWFzay0yLW9mLTIge1xuICAgICAgYW5pbWF0aW9uOiByb3RhdGUtMi1vZi0yIDFzIGVhc2UtaW4gZm9yd2FyZHM7XG4gICAgfVxuICAgIHN2Zy5tYXNrLTEtb2YtMyB7XG4gICAgICBhbmltYXRpb246IHJvdGF0ZS0xLW9mLTMgMXMgZWFzZS1pbiBmb3J3YXJkcztcbiAgICB9XG4gICAgc3ZnLm1hc2stMi1vZi0zIHtcbiAgICAgIGFuaW1hdGlvbjogcm90YXRlLTItb2YtMyAxcyBlYXNlLWluIGZvcndhcmRzO1xuICAgIH1cbiAgICBzdmcubWFzay0zLW9mLTMge1xuICAgICAgYW5pbWF0aW9uOiByb3RhdGUtMy1vZi0zIDFzIGVhc2UtaW4gZm9yd2FyZHM7XG4gICAgfVxuICAgIC5rb252YSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgICAgYW5pbWF0aW9uOiBkaXNhcHBlYXIgMC41cyBlYXNlLW91dCBmb3J3YXJkcztcbiAgICB9XG4gIH1cbiAgJi51bnJvdGF0ZSB7XG4gICAgLmJhY2tncm91bmQge1xuICAgICAgYW5pbWF0aW9uOiB1bnJvdGF0ZTAgMXMgZWFzZS1vdXQgZm9yd2FyZHM7XG4gICAgfVxuICAgICYgPiBpbWc6bnRoLWNoaWxkKDIpIHtcbiAgICAgIGFuaW1hdGlvbjogdW5yb3RhdGUgMXMgZWFzZS1vdXQgZm9yd2FyZHM7XG4gICAgfVxuICAgIHN2Zy5tYXNrLWJlc3Qge1xuICAgICAgYW5pbWF0aW9uOiB1bnJvdGF0ZS1iZXN0IDFzIGVhc2Utb3V0IGZvcndhcmRzO1xuICAgIH1cbiAgICBzdmcubWFzay0xLW9mLTEge1xuICAgICAgYW5pbWF0aW9uOiB1bnJvdGF0ZS0xLW9mLTEgMXMgZWFzZS1vdXQgZm9yd2FyZHM7XG4gICAgfVxuICAgIHN2Zy5tYXNrLTEtb2YtMiB7XG4gICAgICBhbmltYXRpb246IHVucm90YXRlLTEtb2YtMiAxcyBlYXNlLW91dCBmb3J3YXJkcztcbiAgICB9XG4gICAgc3ZnLm1hc2stMi1vZi0yIHtcbiAgICAgIGFuaW1hdGlvbjogdW5yb3RhdGUtMi1vZi0yIDFzIGVhc2Utb3V0IGZvcndhcmRzO1xuICAgIH1cbiAgICBzdmcubWFzay0xLW9mLTMge1xuICAgICAgYW5pbWF0aW9uOiB1bnJvdGF0ZS0xLW9mLTMgMXMgZWFzZS1vdXQgZm9yd2FyZHM7XG4gICAgfVxuICAgIHN2Zy5tYXNrLTItb2YtMyB7XG4gICAgICBhbmltYXRpb246IHVucm90YXRlLTItb2YtMyAxcyBlYXNlLW91dCBmb3J3YXJkcztcbiAgICB9XG4gICAgc3ZnLm1hc2stMy1vZi0zIHtcbiAgICAgIGFuaW1hdGlvbjogdW5yb3RhdGUtMy1vZi0zIDFzIGVhc2Utb3V0IGZvcndhcmRzO1xuICAgIH1cbiAgICAua29udmEge1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIGFuaW1hdGlvbjogcmV2ZWFsIDAuNXMgZWFzZS1pbiAwLjVzIGZvcndhcmRzO1xuICAgIH1cbiAgfVxufVxuXG4vKiBrZXlmcmFtZSBhbmltYXRpb25zICovXG5cbkBrZXlmcmFtZXMgZGlzYXBwZWFyIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHJldmVhbCB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuQGtleWZyYW1lcyByb3RhdGUwIHtcbiAgZnJvbSB7XG4gICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSh2YXIoLS1wZXJzcGVjdGl2ZSkpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKHZhcigtLXBlcnNwZWN0aXZlKSkgcm90YXRlWSg2MGRlZyk7XG4gICAgb3BhY2l0eTogMC41O1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUodmFyKC0tcGVyc3BlY3RpdmUpKSB0cmFuc2xhdGVYKC0yMCUpIHJvdGF0ZVkoNjBkZWcpO1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHVucm90YXRlMCB7XG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUodmFyKC0tcGVyc3BlY3RpdmUpKSB0cmFuc2xhdGVYKC0yMCUpIHJvdGF0ZVkoNjBkZWcpO1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgfVxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUodmFyKC0tcGVyc3BlY3RpdmUpKSByb3RhdGVZKDYwZGVnKTtcbiAgICBvcGFjaXR5OiAwLjU7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSh2YXIoLS1wZXJzcGVjdGl2ZSkpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuQGtleWZyYW1lcyByb3RhdGUge1xuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKHZhcigtLXBlcnNwZWN0aXZlKSk7XG4gIH1cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKHZhcigtLXBlcnNwZWN0aXZlKSkgcm90YXRlWSg2MGRlZyk7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSh2YXIoLS1wZXJzcGVjdGl2ZSkpIHRyYW5zbGF0ZVgoLTIwJSkgcm90YXRlWSg2MGRlZyk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyB1bnJvdGF0ZSB7XG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUodmFyKC0tcGVyc3BlY3RpdmUpKSB0cmFuc2xhdGVYKC0yMCUpIHJvdGF0ZVkoNjBkZWcpO1xuICB9XG4gIDUwJSB7XG4gICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSh2YXIoLS1wZXJzcGVjdGl2ZSkpIHJvdGF0ZVkoNjBkZWcpO1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUodmFyKC0tcGVyc3BlY3RpdmUpKTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHJvdGF0ZS1iZXN0IHtcbiAgZnJvbSB7XG4gICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSh2YXIoLS1wZXJzcGVjdGl2ZSkpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKHZhcigtLXBlcnNwZWN0aXZlKSkgcm90YXRlWSg2MGRlZyk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgdW5yb3RhdGUtYmVzdCB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKHZhcigtLXBlcnNwZWN0aXZlKSkgcm90YXRlWSg2MGRlZyk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKHZhcigtLXBlcnNwZWN0aXZlKSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHJvdGF0ZS0xLW9mLTEge1xuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKHZhcigtLXBlcnNwZWN0aXZlKSk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUodmFyKC0tcGVyc3BlY3RpdmUpKSByb3RhdGVZKDYwZGVnKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSh2YXIoLS1wZXJzcGVjdGl2ZSkpIHRyYW5zbGF0ZVgoMzAlKSByb3RhdGVZKDYwZGVnKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbn1cblxuQGtleWZyYW1lcyB1bnJvdGF0ZS0xLW9mLTEge1xuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKHZhcigtLXBlcnNwZWN0aXZlKSkgdHJhbnNsYXRlWCgzMCUpIHJvdGF0ZVkoNjBkZWcpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUodmFyKC0tcGVyc3BlY3RpdmUpKSByb3RhdGVZKDYwZGVnKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSh2YXIoLS1wZXJzcGVjdGl2ZSkpO1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbn1cbkBrZXlmcmFtZXMgcm90YXRlLTEtb2YtMiB7XG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUodmFyKC0tcGVyc3BlY3RpdmUpKTtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDUwJSB7XG4gICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSh2YXIoLS1wZXJzcGVjdGl2ZSkpIHJvdGF0ZVkoNjBkZWcpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKHZhcigtLXBlcnNwZWN0aXZlKSkgdHJhbnNsYXRlWCgxMCUpIHJvdGF0ZVkoNjBkZWcpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHVucm90YXRlLTEtb2YtMiB7XG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUodmFyKC0tcGVyc3BlY3RpdmUpKSB0cmFuc2xhdGVYKDEwJSkgcm90YXRlWSg2MGRlZyk7XG4gICAgb3BhY2l0eTogMC43O1xuICB9XG4gIDUwJSB7XG4gICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSh2YXIoLS1wZXJzcGVjdGl2ZSkpIHJvdGF0ZVkoNjBkZWcpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKHZhcigtLXBlcnNwZWN0aXZlKSk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxufVxuQGtleWZyYW1lcyByb3RhdGUtMi1vZi0yIHtcbiAgZnJvbSB7XG4gICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSh2YXIoLS1wZXJzcGVjdGl2ZSkpO1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKHZhcigtLXBlcnNwZWN0aXZlKSkgcm90YXRlWSg2MGRlZyk7XG4gICAgb3BhY2l0eTogMC43O1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUodmFyKC0tcGVyc3BlY3RpdmUpKSB0cmFuc2xhdGVYKDQwJSkgcm90YXRlWSg2MGRlZyk7XG4gICAgb3BhY2l0eTogMC43O1xuICB9XG59XG5cbkBrZXlmcmFtZXMgdW5yb3RhdGUtMi1vZi0yIHtcbiAgZnJvbSB7XG4gICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSh2YXIoLS1wZXJzcGVjdGl2ZSkpIHRyYW5zbGF0ZVgoNDAlKSByb3RhdGVZKDYwZGVnKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKHZhcigtLXBlcnNwZWN0aXZlKSkgcm90YXRlWSg2MGRlZyk7XG4gICAgb3BhY2l0eTogMC43O1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUodmFyKC0tcGVyc3BlY3RpdmUpKTtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHJvdGF0ZS0xLW9mLTMge1xuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKHZhcigtLXBlcnNwZWN0aXZlKSk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUodmFyKC0tcGVyc3BlY3RpdmUpKSByb3RhdGVZKDYwZGVnKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSh2YXIoLS1wZXJzcGVjdGl2ZSkpIHJvdGF0ZVkoNjBkZWcpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHVucm90YXRlLTEtb2YtMyB7XG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUodmFyKC0tcGVyc3BlY3RpdmUpKSByb3RhdGVZKDYwZGVnKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKHZhcigtLXBlcnNwZWN0aXZlKSkgcm90YXRlWSg2MGRlZyk7XG4gICAgb3BhY2l0eTogMC43O1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUodmFyKC0tcGVyc3BlY3RpdmUpKTtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgcm90YXRlLTItb2YtMyB7XG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUodmFyKC0tcGVyc3BlY3RpdmUpKTtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDUwJSB7XG4gICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSh2YXIoLS1wZXJzcGVjdGl2ZSkpIHJvdGF0ZVkoNjBkZWcpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKHZhcigtLXBlcnNwZWN0aXZlKSkgdHJhbnNsYXRlWCgyMCUpIHJvdGF0ZVkoNjBkZWcpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHVucm90YXRlLTItb2YtMyB7XG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUodmFyKC0tcGVyc3BlY3RpdmUpKSB0cmFuc2xhdGVYKDIwJSkgcm90YXRlWSg2MGRlZyk7XG4gICAgb3BhY2l0eTogMC43O1xuICB9XG4gIDUwJSB7XG4gICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSh2YXIoLS1wZXJzcGVjdGl2ZSkpIHJvdGF0ZVkoNjBkZWcpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKHZhcigtLXBlcnNwZWN0aXZlKSk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHJvdGF0ZS0zLW9mLTMge1xuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKHZhcigtLXBlcnNwZWN0aXZlKSk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUodmFyKC0tcGVyc3BlY3RpdmUpKSByb3RhdGVZKDYwZGVnKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSh2YXIoLS1wZXJzcGVjdGl2ZSkpIHRyYW5zbGF0ZVgoNDAlKSByb3RhdGVZKDYwZGVnKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbn1cblxuQGtleWZyYW1lcyB1bnJvdGF0ZS0zLW9mLTMge1xuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKHZhcigtLXBlcnNwZWN0aXZlKSkgdHJhbnNsYXRlWCg0MCUpIHJvdGF0ZVkoNjBkZWcpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUodmFyKC0tcGVyc3BlY3RpdmUpKSByb3RhdGVZKDYwZGVnKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSh2YXIoLS1wZXJzcGVjdGl2ZSkpO1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbn1cblxuLmJhY2tncm91bmQtYW5pbWF0ZSB7XG4gIGJhY2tncm91bmQtc2l6ZTogNDAwJTtcbiAgLXdlYmtpdC1hbmltYXRpb246IEFuaW1hdGlvbk5hbWUgM3MgZWFzZSBpbmZpbml0ZTtcbiAgLW1vei1hbmltYXRpb246IEFuaW1hdGlvbk5hbWUgM3MgZWFzZSBpbmZpbml0ZTtcbiAgYW5pbWF0aW9uOiBBbmltYXRpb25OYW1lIDNzIGVhc2UgaW5maW5pdGU7XG59XG5cbkBrZXlmcmFtZXMgQW5pbWF0aW9uTmFtZSB7XG4gIDAlLFxuICAxMDAlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwJSA1MCU7XG4gIH1cbiAgNTAlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxMDAlIDUwJTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGluQW5pbWF0aW9uIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgbWF4LWhlaWdodDogMHB4O1xuICB9XG4gIDUwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIG1heC1oZWlnaHQ6IDYwMHB4O1xuICB9XG59XG5cbkBrZXlmcmFtZXMgb3V0QW5pbWF0aW9uIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgbWF4LWhlaWdodDogNjAwcHg7XG4gIH1cbiAgNTAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgbWF4LWhlaWdodDogMHB4O1xuICB9XG59XG5cbi5tYXNrLWdyYWRpZW50IHtcbiAgb3BhY2l0eTogMDtcbiAgYW5pbWF0aW9uOiByZXZlYWwtYW5kLWhpZGUgMS41cyAwLjNzIGZvcndhcmRzO1xufVxuXG5Aa2V5ZnJhbWVzIHJldmVhbC1hbmQtaGlkZSB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDI1JSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59XG5cbi8qIEZpeCBmb3IgU2FmYXJpIGFuZCBNb2JpbGUgU2FmYXJpOlxuRXh0cmFjdGVkIFRhaWx3aW5kIHByb2dyZXNzLWJhciBzdHlsZXMgYW5kIGFwcGxpZWRcbnRoZW0gdG8gYSA8ZGl2PiBpbnN0ZWFkIG9mIGEgPHByb2dyZXNzPiBlbGVtZW50ICAqL1xuXG4ubG9hZGluZy1iYXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgaGVpZ2h0OiAwLjVyZW07XG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtYm94LCAxcmVtKTtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2wodmFyKC0tbikgLyB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XG4gIC0tdHctYmctb3BhY2l0eTogMC4yO1xuXG4gICY6OmFmdGVyIHtcbiAgICAtLXR3LWJnLW9wYWNpdHk6IDE7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogaHNsKHZhcigtLW4pIC8gdmFyKC0tdHctYmctb3BhY2l0eSkpO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMHB4O1xuICAgIGJvdHRvbTogMHB4O1xuICAgIGxlZnQ6IC00MCU7XG4gICAgd2lkdGg6IDMzLjMzMzMzMyU7XG4gICAgYm9yZGVyLXJhZGl1czogMXJlbTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWJveCwgMXJlbSk7XG4gICAgYW5pbWF0aW9uOiBsb2FkaW5nIDVzIGluZmluaXRlIGVhc2UtaW4tb3V0O1xuICB9XG59XG5cbkBrZXlmcmFtZXMgbG9hZGluZyB7XG4gIDUwJSB7XG4gICAgbGVmdDogMTA3JTtcbiAgfVxufVxuIixudWxsXSwic291cmNlUm9vdCI6IiJ9 */</style>\r\n  </head>\r\n  <body>\r\n    <!--<script src=\"https://cdn.jsdelivr.net/npm/onnxruntime-web/dist/ort.min.js\"></script>-->\r\n    <noscript>You need to enable JavaScript to run this app.</noscript>\r\n    <div id=\"root\"></div>\r\n    <!--\r\n      This HTML file is a template.\r\n      If you open it directly in the browser, you will see an empty page.\r\n\r\n      You can add webfonts, meta tags, or analytics to this file.\r\n      The build step will place the bundled scripts into the <body> tag.\r\n\r\n      To begin the development, run `npm start` or `yarn start`.\r\n      To create a production bundle, use `npm run build` or `yarn build`.\r\n    -->\r\n  </body>\r\n</html>\r\n"
  },
  {
    "path": "public/manifest.json",
    "content": "{\r\n  \"short_name\": \"React App\",\r\n  \"name\": \"Create React App Sample\",\r\n  \"icons\": [\r\n    {\r\n      \"src\": \"favicon.ico\",\r\n      \"sizes\": \"64x64 32x32 24x24 16x16\",\r\n      \"type\": \"image/x-icon\"\r\n    },\r\n    {\r\n      \"src\": \"logo192.png\",\r\n      \"type\": \"image/png\",\r\n      \"sizes\": \"192x192\"\r\n    },\r\n    {\r\n      \"src\": \"logo512.png\",\r\n      \"type\": \"image/png\",\r\n      \"sizes\": \"512x512\"\r\n    }\r\n  ],\r\n  \"start_url\": \".\",\r\n  \"display\": \"standalone\",\r\n  \"theme_color\": \"#000000\",\r\n  \"background_color\": \"#ffffff\"\r\n}\r\n"
  },
  {
    "path": "public/robots.txt",
    "content": "# https://www.robotstxt.org/robotstxt.html\r\nUser-agent: *\r\nDisallow:\r\n"
  },
  {
    "path": "src/App.css",
    "content": ".App {\r\n  text-align: center;\r\n}\r\n\r\n.App-logo {\r\n  height: 40vmin;\r\n  pointer-events: none;\r\n}\r\n\r\n@media (prefers-reduced-motion: no-preference) {\r\n  .App-logo {\r\n    animation: App-logo-spin infinite 20s linear;\r\n  }\r\n}\r\n\r\n.App-header {\r\n  background-color: #282c34;\r\n  min-height: 100vh;\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  justify-content: center;\r\n  font-size: calc(10px + 2vmin);\r\n  color: white;\r\n}\r\n\r\n.App-link {\r\n  color: #61dafb;\r\n}\r\n\r\n@keyframes App-logo-spin {\r\n  from {\r\n    transform: rotate(0deg);\r\n  }\r\n  to {\r\n    transform: rotate(360deg);\r\n  }\r\n}\r\n"
  },
  {
    "path": "src/App.test.tsx",
    "content": "import React from 'react';\r\nimport { render, screen } from '@testing-library/react';\r\nimport App from './App';\r\n\r\ntest('renders learn react link', () => {\r\n  render(<App />);\r\n  const linkElement = screen.getByText(/learn react/i);\r\n  expect(linkElement).toBeInTheDocument();\r\n});\r\n"
  },
  {
    "path": "src/App.tsx",
    "content": "import LZString from \"lz-string\";\r\nimport { InferenceSession, Tensor } from \"onnxruntime-web\";\r\nimport * as ort from 'onnxruntime-web';\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\nimport { Navigate, Route, Routes, useNavigate } from \"react-router-dom\";\r\nimport \"./assets/scss/App.scss\";\r\nimport Footer from \"./components/Footer\";\r\nimport getFile from \"./components/helpers/getFile\";\r\nimport { handleImageScale } from \"./components/helpers/ImageHelper\";\r\nimport { modelScaleProps } from \"./components/helpers/Interface\";\r\nimport {\r\n  getAllMasks,\r\n  getBestPredMask,\r\n  keepArrayForMultiMask,\r\n  rleFrString,\r\n  rleToImage,\r\n  traceCompressedRLeStringToSVG,\r\n  traceOnnxMaskToSVG,\r\n} from \"./components/helpers/mask_utils\";\r\nimport {\r\n  modelData,\r\n  setParmsandQueryEraseModel,\r\n  setParmsandQueryModel,\r\n} from \"./components/helpers/modelAPI\";\r\nimport photos from \"./components/helpers/photos\";\r\nimport HomePage from \"./components/HomePage\";\r\nimport AppContext from \"./components/hooks/createContext\";\r\nimport LegalText from \"./components/LegalText\";\r\nimport NavBar from \"./components/Navbar\";\r\nimport Stage from \"./components/Stage\";\r\n// import CookieText from \"./CookieText\";\r\n\r\n// console.log(\"hi\")\r\n// Onnxruntime\r\nort.env.debug = false;\r\n// set global logging level\r\nort.env.logLevel = 'verbose';\r\n\r\n// override path of wasm files - for each file\r\nort.env.wasm.numThreads = 2;\r\nort.env.wasm.simd = true;\r\n// ort.env.wasm.proxy = true;\r\nort.env.wasm.wasmPaths = {\r\n  'ort-wasm.wasm': '/ort-wasm.wasm',\r\n  'ort-wasm-simd.wasm': '/ort-wasm-simd.wasm',\r\n  'ort-wasm-threaded.wasm': '/ort-wasm-threaded.wasm',\r\n  'ort-wasm-simd-threaded.wasm': '/ort-wasm-simd-threaded.wasm'\r\n};\r\n\r\n// ort.env.webgl.pack = true;\r\n\r\nconst App = () => {\r\n  const {\r\n    click: [click, setClick],\r\n    clicks: [clicks, setClicks],\r\n    image: [image, setImage],\r\n    prevImage: [prevImage, setPrevImage],\r\n    svg: [, setSVG],\r\n    svgs: [svgs, setSVGs],\r\n    allsvg: [, setAllsvg],\r\n    isErased: [, setIsErased],\r\n    isModelLoaded: [, setIsModelLoaded],\r\n    isLoading: [, setIsLoading],\r\n    segmentTypes: [, setSegmentTypes],\r\n    maskImg: [, setMaskImg],\r\n    isErasing: [isErasing, setIsErasing],\r\n    stickerTabBool: [stickerTabBool, setStickerTabBool],\r\n    isMultiMaskMode: [isMultiMaskMode, setIsMultiMaskMode],\r\n    isHovering: [isHovering, setIsHovering],\r\n    showLoadingModal: [showLoadingModal, setShowLoadingModal],\r\n    eraserText: [eraserText, setEraserText],\r\n    predMask: [predMask, setPredMask],\r\n    predMasks: [predMasks, setPredMasks],\r\n    predMasksHistory: [predMasksHistory, setPredMasksHistory],\r\n    isToolBarUpload: [isToolBarUpload, setIsToolBarUpload],\r\n  } = useContext(AppContext)!;\r\n  const [model, setModel] = useState<InferenceSession | null>(null);\r\n  const [multiMaskModel, setMultiMaskModel] = useState<InferenceSession | null>(\r\n    null\r\n  );\r\n  const [tensor, setTensor] = useState<Tensor | null>(null);\r\n  const [hasClicked, setHasClicked] = useState<boolean>(false);\r\n  const [mask, setMask] = useState<\r\n    | string[]\r\n    | Uint8Array\r\n    | Float32Array\r\n    | Int8Array\r\n    | Uint16Array\r\n    | Int16Array\r\n    | Int32Array\r\n    | BigInt64Array\r\n    | Float64Array\r\n    | Uint32Array\r\n    | BigUint64Array\r\n    | null\r\n  >(null);\r\n  const [modelScale, setModelScale] = useState<modelScaleProps | null>(null);\r\n\r\n  // useEffect(() => {\r\n  //   // Preload images\r\n  //   for (const photo of photos) {\r\n  //     const img = new Image();\r\n  //     img.src = photo.src;\r\n  //   }\r\n  // }, []);\r\n\r\n  // console.log(\"WHY IS THIS NOT RUNNING?\")\r\n  useEffect(() => {\r\n    const initModel = async () => {\r\n      try {\r\n        // if (process.env.MODEL_DIR === undefined) return;\r\n        const MODEL_DIR = \"./interactive_module_quantized_592547_2023_03_19_sam6_long_uncertain.onnx\";\r\n        const URL: string = MODEL_DIR;\r\n        // const URL: string = process.env.MODEL_DIR;\r\n        const model = await InferenceSession.create(URL);\r\n        setModel(model);\r\n      } catch (e) {\r\n        // console.log(\"MODEL:\", e);\r\n        console.error(e);\r\n      }\r\n      try {\r\n        // console.log(\"MULTI MASK MODEL\");\r\n        // if (process.env.MULTI_MASK_MODEL_DIR === undefined) return;\r\n        const MULTI_MASK_MODEL_DIR = \"./interactive_module_quantized_592547_2023_03_20_sam6_long_all_masks_extra_data_with_ious.onnx\";\r\n        const URL2: string = MULTI_MASK_MODEL_DIR;\r\n        // console.log(\"MULTI MASK MODEL URL:\", URL2);\r\n        // const URL2: string = process.env.MULTI_MASK_MODEL_DIR;\r\n        const multiMaskModel = await InferenceSession.create(URL2);\r\n        // console.log(\"multiMaskModel:\", multiMaskModel);\r\n        setMultiMaskModel(multiMaskModel);\r\n      } catch (e) {\r\n        // console.log(\"MULTI MASK MODEL:\", e);\r\n        console.error(e);\r\n      }\r\n    };\r\n    initModel();\r\n  }, []);\r\n\r\n  const runMultiMaskModel = async () => {\r\n    try {\r\n      if (\r\n        multiMaskModel === null ||\r\n        clicks === null ||\r\n        tensor === null ||\r\n        modelScale === null ||\r\n        !hasClicked // only run for clicks\r\n      )\r\n        return;\r\n      if (stickerTabBool) return;\r\n      const feeds = modelData({\r\n        clicks,\r\n        tensor,\r\n        modelScale,\r\n        last_pred_mask: null, // Only 1 click allowed, so no last predicted mask exists\r\n      });\r\n      if (feeds === undefined) return;\r\n      // console.log(\"Running multiMaskModel\");\r\n      const results = await multiMaskModel.run(feeds);\r\n\r\n      const output = results[\"output\"];\r\n      const areas = results[\"areas\"].data;\r\n      const uncertain_ious = results[\"uncertain_ious\"].data;\r\n      const ious = results[\"ious\"].data;\r\n\r\n      const allMasks = getAllMasks(\r\n        output.data,\r\n        output.dims[2], // height\r\n        output.dims[1] // width\r\n      ); // There are 3\r\n\r\n      // allMasksSorted will be a list of 1-3 masks, sorted by area.\r\n      // The best mask is selected for rendering on the collapsed canvas.\r\n      // You can loop through allMasksSorted\r\n      // and render each one onto a separate layer in the multi\r\n      // mask animation\r\n      let sorted_indices = sortAndReturnIndices(\r\n        // @ts-ignore\r\n        Array(Number(areas[1]), Number(areas[2]), Number(areas[3]))\r\n      ); // Keep only masks indices 1, 2, 3\r\n      sorted_indices.reverse();\r\n\r\n      let allMasksSorted = sortByIndices(\r\n        [allMasks[1], allMasks[2], allMasks[3]],\r\n        sorted_indices\r\n      ); // Keep only 3\r\n      let allUncertainIoUSorted = sortByIndices(\r\n        [uncertain_ious[1], uncertain_ious[2], uncertain_ious[3]],\r\n        sorted_indices\r\n      );\r\n      let allOverlapIoUsSorted = sortByIndices(\r\n        [ious[0], ious[1], ious[2]], // Only 3 of these, not 4\r\n        sorted_indices\r\n      );\r\n\r\n      // Filter bad and duplicate masks\r\n      const keepArray = keepArrayForMultiMask(\r\n        allUncertainIoUSorted,\r\n        allOverlapIoUsSorted\r\n      );\r\n      allMasksSorted = allMasksSorted.filter(\r\n        (obj: any, i: number) => keepArray[i]\r\n      );\r\n      allUncertainIoUSorted = allUncertainIoUSorted.filter(\r\n        (obj: any, i: number) => keepArray[i]\r\n      );\r\n\r\n      // Trace remaining masks\r\n      const svgStrs = allMasksSorted.map((mask) =>\r\n        traceOnnxMaskToSVG(mask, output.dims[2], output.dims[1])\r\n      );\r\n\r\n      // Reversing the masks here because the DOM stacks elements\r\n      // from bottom to top. In other words, the first element in\r\n      // the array will be on the bottom, and the last element will\r\n      // be on the top.\r\n      setSVGs(svgStrs.reverse());\r\n\r\n      // Set the single svg to the best mask by uncertain iou.\r\n      // This is used for display when the masks are collapsed.\r\n      allUncertainIoUSorted = allUncertainIoUSorted.reverse();\r\n      const bestIdx = allUncertainIoUSorted.indexOf(\r\n        Math.max(...allUncertainIoUSorted)\r\n      );\r\n      setSVG(svgStrs[bestIdx]);\r\n\r\n      // !!!!Multiple clicks are not allowed!!!\r\n      setClick(null);\r\n      setIsLoading(false);\r\n      setIsModelLoaded((prev) => {\r\n        return { ...prev, boxModel: true };\r\n      });\r\n      // console.log(\"multiMaskModel is loaded\");\r\n    } catch (e) {\r\n      // console.log(e);\r\n    }\r\n  };\r\n\r\n  const sortAndReturnIndices = (arr: Array<number>) => {\r\n    const indices = Array.from(arr.keys());\r\n    indices.sort((a, b) => arr[b] - arr[a]);\r\n    return indices;\r\n  };\r\n\r\n  const sortByIndices = (items: any, indices: Array<number>) => {\r\n    const result = [];\r\n    for (var i = 0; i < indices.length; i++) {\r\n      result.push(items[indices[i]]);\r\n    }\r\n    return result;\r\n  };\r\n\r\n  const runModel = async () => {\r\n    // console.log(\"Running singleMaskModel\");\r\n    try {\r\n      if (\r\n        model === null ||\r\n        clicks === null ||\r\n        tensor === null ||\r\n        modelScale === null\r\n      )\r\n        return;\r\n      if (stickerTabBool) return;\r\n      const feeds = modelData({\r\n        clicks,\r\n        tensor,\r\n        modelScale,\r\n        last_pred_mask: predMask,\r\n      });\r\n      if (feeds === undefined) return;\r\n      // const beforeONNX = Date.now();\r\n      const results = await model.run(feeds);\r\n      // const afterONNX = Date.now();\r\n      // console.log(`ONNX took ${afterONNX - beforeONNX}ms`);\r\n      const output = results[model.outputNames[0]];\r\n      if (hasClicked) {\r\n        // const beforeSVG = Date.now();\r\n        const pred_mask = results[model.outputNames[1]];\r\n        setPredMask(pred_mask);\r\n        if (!predMasksHistory) {\r\n          setPredMasks([...(predMasks || []), pred_mask]);\r\n        }\r\n        const svgStr = traceOnnxMaskToSVG(\r\n          output.data,\r\n          output.dims[1],\r\n          output.dims[0]\r\n        );\r\n        setSVG(svgStr);\r\n        setMask(output.data);\r\n        // const afterSVG = Date.now();\r\n        // console.log(`SVG took ${afterSVG - beforeSVG}ms`);\r\n      } else {\r\n        // const beforeMask = Date.now();\r\n        setMaskImg(rleToImage(output.data, output.dims[0], output.dims[1]));\r\n        // const afterMask = Date.now();\r\n        // console.log(`Mask took ${afterMask - beforeMask}ms`);\r\n      }\r\n      setClick(null);\r\n      setIsLoading(false);\r\n      setIsModelLoaded((prev) => {\r\n        return { ...prev, boxModel: true };\r\n      });\r\n      // console.log(\"boxModel is loaded\");\r\n    } catch (e) {\r\n      // console.log(e);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    // TODO: By default use the runModel function\r\n    // When the multi mask mode is enabled, run runMultiMaskModel\r\n    const runOnnx = async () => {\r\n      if (isMultiMaskMode) {\r\n        if (hasClicked) {\r\n          // Only enable multi mask case, when there are clicks.\r\n          // We don't want the hover feature for this mode\r\n          runMultiMaskModel();\r\n        }\r\n      } else {\r\n        runModel();\r\n      }\r\n    };\r\n    runOnnx();\r\n  }, [clicks, hasClicked, isMultiMaskMode]);\r\n\r\n  const handleMagicErase = () => {\r\n    if (image !== null) {\r\n      setIsErased(true);\r\n      setIsErasing(true);\r\n      // setIsLoading(true);\r\n      setEraserText({ isErase: true, isEmbedding: false });\r\n      const { height, width, uploadScale } = handleImageScale(image);\r\n      setParmsandQueryEraseModel({\r\n        width,\r\n        height,\r\n        uploadScale,\r\n        imgData: image,\r\n        mask: mask || new Float32Array(),\r\n        handlePredictedImage: handlePredictedImage,\r\n      });\r\n    }\r\n  };\r\n\r\n  const handlePredictedImage = (imgStr: string) => {\r\n    const img = new Image();\r\n    img.src = imgStr;\r\n    img.onload = () => {\r\n      setEraserText({ isErase: false, isEmbedding: true });\r\n      // Set to the original image width and height\r\n      img.width = image?.width || 0;\r\n      img.height = image?.height || 0;\r\n      handleImage(img);\r\n    };\r\n  };\r\n\r\n  const handleImage = (img: HTMLImageElement = prevImage!) => {\r\n    // Reset the image, mask and clicks\r\n    setImage(img);\r\n    setMaskImg(null);\r\n    setSVG(null);\r\n    setMask(null);\r\n    setClick(null);\r\n    setClicks(null);\r\n    setIsModelLoaded({ boxModel: false, allModel: false });\r\n    setHasClicked(false);\r\n    const { height, width, uploadScale } = handleImageScale(img);\r\n    setParmsandQueryModel({\r\n      width,\r\n      height,\r\n      uploadScale,\r\n      imgData: img,\r\n      handleSegModelResults,\r\n      handleAllModelResults,\r\n      imgName: \"\",\r\n      shouldDownload: false,\r\n      shouldNotFetchAllModel: false,\r\n    });\r\n  };\r\n\r\n  const handleSelectedImage = async (\r\n    data: File | URL,\r\n    options?: { shouldNotFetchAllModel?: boolean; shouldDownload?: boolean }\r\n  ) => {\r\n\r\n    if (data instanceof File) {\r\n      console.log(\"GOT FILE \" + data.name);\r\n    } else if (data instanceof URL) {\r\n      console.log(\"GOT URL \" + data.pathname);\r\n    } else {\r\n      console.log(\"GOT STRING \" + data);\r\n    }\r\n\r\n    try {\r\n      const shouldNotFetchAllModel = options?.shouldNotFetchAllModel;\r\n      const shouldDownload = options?.shouldDownload;\r\n      handleResetState();\r\n      // setIsLoading(true);\r\n      setShowLoadingModal(true);\r\n      let imgName: string = \"\";\r\n      if (data instanceof URL) {\r\n        imgName = data.pathname;\r\n      } else if (data instanceof String) {\r\n        // TODO: find the right place where to replace it...\r\n        data = new URL(data.replace('/assets/', '/public/assets/'));\r\n        imgName = data.pathname;\r\n      }\r\n      imgName = imgName.substring(imgName.lastIndexOf(\"/\") + 1);\r\n      const imgData: File = data instanceof File ? data : await getFile(data);\r\n      const img = new Image();\r\n      img.src = URL.createObjectURL(imgData);\r\n      img.onload = () => {\r\n        setIsToolBarUpload(false);\r\n        const { height, width, scale, uploadScale } = handleImageScale(img);\r\n        setModelScale({\r\n          onnxScale: scale / uploadScale,\r\n          maskWidth: width * uploadScale,\r\n          maskHeight: height * uploadScale,\r\n          scale: scale,\r\n          uploadScale: uploadScale,\r\n          width: width,\r\n          height: height,\r\n        });\r\n        img.width = Math.round(width * scale);\r\n        img.height = Math.round(height * scale);\r\n        setImage(img);\r\n        setPrevImage(img);\r\n        setIsErased(false);\r\n        setParmsandQueryModel({\r\n          width,\r\n          height,\r\n          uploadScale,\r\n          imgData: img,\r\n          handleSegModelResults,\r\n          handleAllModelResults,\r\n          imgName,\r\n          shouldDownload,\r\n          shouldNotFetchAllModel,\r\n        });\r\n      };\r\n    } catch (error) {\r\n      console.log(error);\r\n    }\r\n  };\r\n\r\n  // useEffect(() => {\r\n  //   // redirect after handleSelectedImage runs\r\n  //   if (image) navigate(\"/playground\");\r\n  // }, [image]);\r\n\r\n  const handleSegModelResults = ({ tensor }: { tensor: Tensor }) => {\r\n    // console.log(\"handleSegModelResults\");\r\n    setTensor(tensor);\r\n    setIsLoading(false);\r\n    setIsErasing(false);\r\n    setShowLoadingModal(false);\r\n    setEraserText({ isErase: false, isEmbedding: false });\r\n    // window.scrollTo(0, 0);\r\n  };\r\n\r\n  const handleAllModelResults = ({\r\n    allJSON,\r\n    image_height,\r\n  }: {\r\n    allJSON: {\r\n      encodedMask: string;\r\n      bbox: number[];\r\n      score: number;\r\n      point_coord: number[];\r\n      uncertain_iou: number;\r\n      area: number;\r\n    }[];\r\n    image_height: number;\r\n  }) => {\r\n    // console.log(\"handleAllModelResults\");\r\n    const allMaskSVG = allJSON.map(\r\n      (el: {\r\n        encodedMask: string;\r\n        bbox: number[];\r\n        score: number;\r\n        point_coord: number[];\r\n        uncertain_iou: number;\r\n        area: number;\r\n      }) => {\r\n        const maskenc = LZString.decompressFromEncodedURIComponent(\r\n          el.encodedMask\r\n        );\r\n        const svg = traceCompressedRLeStringToSVG(maskenc, image_height);\r\n        return { svg: svg, point_coord: el.point_coord };\r\n      }\r\n    );\r\n    setAllsvg(allMaskSVG);\r\n    setIsModelLoaded((prev) => {\r\n      return { ...prev, allModel: true };\r\n    });\r\n  };\r\n\r\n  const handleResetState = () => {\r\n    setMaskImg(null);\r\n    setHasClicked(false);\r\n    setClick(null);\r\n    setClicks(null);\r\n    setSVG(null);\r\n    setSVGs(null);\r\n    setAllsvg(null);\r\n    setTensor(null);\r\n    setImage(null);\r\n    setPrevImage(null);\r\n    setPredMask(null);\r\n    setIsErased(false);\r\n    setShowLoadingModal(false);\r\n    setIsModelLoaded({ boxModel: false, allModel: false });\r\n    setSegmentTypes(\"Click\");\r\n    setIsLoading(false);\r\n    setIsMultiMaskMode(false);\r\n    setIsHovering(null);\r\n    setPredMasks(null);\r\n  };\r\n\r\n  return (\r\n    <>\r\n      <Routes>\r\n        <Route path=\"*\" element={<Navigate replace to=\"/demo\" />} />\r\n        {/*\r\n        <Route\r\n          path=\"/terms\"\r\n          element={\r\n            <div\r\n              className={`flex flex-col h-full w-full overflow-x-hidden items-center overflow-y-scroll`}\r\n            >\r\n              <NavBar resetState={handleResetState} />\r\n              <div className=\"w-full p-4 max-w-prose\">\r\n                <LegalText />\r\n              </div>\r\n              <Footer />\r\n            </div>\r\n          }\r\n        />\r\n        <Route\r\n          path=\"/cookies\"\r\n          element={\r\n            <div\r\n              className={`flex flex-col h-full w-full overflow-x-hidden items-center overflow-y-scroll`}\r\n            >\r\n              <NavBar resetState={handleResetState} />\r\n              <Footer />\r\n            </div>\r\n          }\r\n        />\r\n        */}\r\n        {/*\r\n        <Route\r\n          path=\"/\"\r\n          element={\r\n            <div className={`flex flex-col h-full overflow-x-hidden`}>\r\n              <NavBar resetState={handleResetState} />\r\n              <HomePage\r\n                scale={modelScale}\r\n                handleResetState={handleResetState}\r\n                handleMagicErase={handleMagicErase}\r\n                handleImage={handleImage}\r\n                hasClicked={hasClicked}\r\n                setHasClicked={setHasClicked}\r\n                handleSelectedImage={handleSelectedImage}\r\n                image={image}\r\n                model={model}\r\n              />\r\n              <Footer />\r\n            </div>\r\n          }\r\n        />\r\n        */}\r\n        <Route\r\n          path=\"/demo\"\r\n          element={\r\n            <div className={`flex flex-col h-full overflow-hidden`}>\r\n              {/*\r\n              <NavBar resetState={handleResetState} />\r\n              */}\r\n              <Stage\r\n                scale={modelScale}\r\n                handleResetState={handleResetState}\r\n                handleMagicErase={handleMagicErase}\r\n                handleImage={handleImage}\r\n                hasClicked={hasClicked}\r\n                setHasClicked={setHasClicked}\r\n                handleSelectedImage={handleSelectedImage}\r\n                image={image}\r\n              />\r\n              <Footer />\r\n            </div>\r\n          }\r\n        />\r\n      </Routes>\r\n    </>\r\n  );\r\n};\r\n\r\nexport default App;\r\n"
  },
  {
    "path": "src/assets/manifest.json",
    "content": ""
  },
  {
    "path": "src/assets/scss/App.scss",
    "content": "@tailwind base;\r\n@tailwind components;\r\n@tailwind utilities;\r\n\r\n@layer base {\r\n  @font-face {\r\n    font-family: \"Optimistic Display\";\r\n    src: url(../fonts/optimistic/Optimistic_Display_W_Md.woff2) format(\"woff2\"),\r\n      url(../fonts/optimistic/Optimistic_Display_W_Md.woff) format(\"woff\");\r\n    font-weight: 500;\r\n  }\r\n\r\n  @font-face {\r\n    font-family: \"Optimistic Display\";\r\n    src: url(../fonts/optimistic/Optimistic_Display_W_SBd.woff2) format(\"woff2\"),\r\n      url(../fonts/optimistic/Optimistic_Display_W_SBd.woff) format(\"woff\");\r\n    font-weight: 600;\r\n  }\r\n\r\n  @font-face {\r\n    font-family: \"Optimistic Display\";\r\n    src: url(../fonts/optimistic/Optimistic_Display_W_Bd.woff2) format(\"woff2\"),\r\n      url(../fonts/optimistic/Optimistic_Display_W_Bd.woff) format(\"woff\");\r\n    font-weight: 700;\r\n  }\r\n\r\n  @font-face {\r\n    font-family: \"Optimistic Text\";\r\n    src: url(../fonts/optimistic/Optimistic_Text_W_Rg.woff2) format(\"woff2\"),\r\n      url(../fonts/optimistic/Optimistic_Text_W_Rg.woff) format(\"woff\");\r\n    font-weight: 400;\r\n  }\r\n\r\n  @font-face {\r\n    font-family: \"Optimistic Text\";\r\n    src: url(../fonts/optimistic/Optimistic_Text_W_Md.woff2) format(\"woff2\"),\r\n      url(../fonts/optimistic/Optimistic_Text_W_Md.woff) format(\"woff\");\r\n    font-weight: 500;\r\n  }\r\n\r\n  @font-face {\r\n    font-family: \"Optimistic Text\";\r\n    src: url(../fonts/optimistic/Optimistic_Text_W_Bd.woff2) format(\"woff2\"),\r\n      url(../fonts/optimistic/Optimistic_Text_W_Bd.woff) format(\"woff\");\r\n    font-weight: 700;\r\n  }\r\n\r\n  @font-face {\r\n    font-family: \"Optimistic Text\";\r\n    src: url(../fonts/optimistic/Optimistic_Text_W_XBd.woff2) format(\"woff2\"),\r\n      url(../fonts/optimistic/Optimistic_Text_W_XBd.woff) format(\"woff\");\r\n    font-weight: 800;\r\n  }\r\n}\r\n\r\nbody {\r\n  font-family: \"Optimistic Text\", sans-serif;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n}\r\n\r\nbody,\r\nhtml,\r\n#root {\r\n  height: 100%;\r\n}\r\n\r\n:root {\r\n  --segEv-font: \"Optimistic Text\", system-ui, -apple-system, BlinkMacSystemFont,\r\n    \"Segoe UI\", Oxygen, Ubuntu, Cantarell, \"Open Sans\", \"Helvetica Neue\",\r\n    sans-serif;\r\n  --perspective: 4000px;\r\n}\r\n\r\nh1,\r\nh2,\r\nh3,\r\nh4,\r\nh5,\r\nh6 {\r\n  font-family: \"Optimistic Display\", sans-serif;\r\n}\r\n\r\n.prose .display h1 {\r\n  @apply text-4xl text-gray-800 font-medium leading-tight;\r\n}\r\n\r\n.prose .display h2 {\r\n  @apply text-gray-800 font-medium leading-tight;\r\n  font-size: 2.5rem;\r\n}\r\n\r\n.prose h1 {\r\n  @apply text-3xl text-gray-800 font-medium leading-tight mt-2 mb-4;\r\n  letter-spacing: 0.016rem;\r\n}\r\n\r\n.prose h2 {\r\n  @apply text-2xl text-gray-800 font-medium leading-tight my-2;\r\n  letter-spacing: 0.01rem;\r\n}\r\n\r\n.prose h3 {\r\n  @apply text-xl text-gray-800 font-medium leading-tight my-2;\r\n  letter-spacing: 0.005rem;\r\n}\r\n\r\n.prose h4 {\r\n  @apply text-lg text-gray-800 font-medium leading-tight my-2;\r\n}\r\n\r\n.prose h5 {\r\n  @apply text-xl text-gray-600 font-normal leading-normal my-2;\r\n  letter-spacing: 0.005rem;\r\n}\r\n\r\n.prose h6 {\r\n  @apply text-base text-gray-600 font-normal leading-normal my-2;\r\n}\r\n\r\n.prose p {\r\n  @apply text-sm text-gray-600 font-normal leading-normal;\r\n}\r\n\r\n.prose ol,\r\n.prose ul {\r\n  @apply text-sm text-gray-600 font-normal leading-normal;\r\n  padding-right: 2rem;\r\n}\r\n\r\n/* Non-mobile typography */\r\n@media screen and (lg) {\r\n  .prose .display h1 {\r\n    @apply text-6xl;\r\n  }\r\n\r\n  .prose .display h2 {\r\n    @apply text-5xl;\r\n  }\r\n\r\n  .prose h1 {\r\n    @apply text-4xl;\r\n  }\r\n\r\n  .prose h2 {\r\n    @apply text-3xl;\r\n  }\r\n\r\n  .prose h3 {\r\n    @apply text-2xl;\r\n  }\r\n\r\n  .prose h4 {\r\n    @apply text-lg text-gray-800;\r\n  }\r\n\r\n  .prose h5 {\r\n    @apply text-2xl;\r\n  }\r\n\r\n  .prose h6:not(h6.faq) {\r\n    @apply text-base;\r\n  }\r\n\r\n  .prose ol,\r\n  .prose ul {\r\n    padding-right: 3rem;\r\n  }\r\n}\r\n\r\n.dark-mode h1,\r\n.dark-mode h2,\r\n.dark-mode h3,\r\n.dark-mode h4,\r\n.dark-mode h5,\r\n≈ {\r\n  @apply text-white;\r\n}\r\n\r\n.dark-mode h4,\r\n.dark-mode h6 {\r\n  @apply text-gray-200;\r\n}\r\n\r\n.flex-grow-2 {\r\n  flex-grow: 2;\r\n}\r\n\r\n.flex-grow-3 {\r\n  flex-grow: 3;\r\n}\r\n\r\n.flex-grow-4 {\r\n  flex-grow: 4;\r\n}\r\n\r\n.flex-grow-5 {\r\n  flex-grow: 5;\r\n}\r\n\r\n.nav-title {\r\n  font-family: var(--segEv-font);\r\n}\r\n\r\n/**\r\n * Daisy UI customizations\r\n */\r\n\r\n.btn {\r\n  @apply normal-case rounded-md;\r\n}\r\n\r\n.comp_summary h1,\r\n.comp_summary h2,\r\n.comp_summary h3 {\r\n  @apply mb-4;\r\n}\r\n\r\n.disabled {\r\n  opacity: 0.4;\r\n  pointer-events: none;\r\n}\r\n\r\n.absolute-center {\r\n  top: 50%;\r\n  left: 50%;\r\n  transform: translate(-50%, -50%);\r\n}\r\n\r\n@screen lg {\r\n  .drawer .grid {\r\n    grid-template-columns: max-content 1fr;\r\n  }\r\n}\r\n\r\n.fade-in {\r\n  transition: opacity 0.5s;\r\n  opacity: 1 !important;\r\n}\r\n\r\n.react-photo-gallery--gallery > div {\r\n  gap: 0.25rem;\r\n}\r\n\r\n.sticker {\r\n  filter: drop-shadow(0.25rem 0.25rem 5px #fff)\r\n    drop-shadow(-0.25rem 0.25rem 5px #fff)\r\n    drop-shadow(0.25rem -0.25rem 5px #fff)\r\n    drop-shadow(-0.25rem -0.25rem 5px #fff);\r\n  transition: filter 0.3s ease-out;\r\n}\r\n\r\n.sticker:hover,\r\n.sticker-select {\r\n  filter: drop-shadow(0.25rem 0.25rem 1px #2962d9)\r\n    drop-shadow(-0.25rem 0.25rem 1px #2962d9)\r\n    drop-shadow(0.25rem -0.25rem 1px #2962d9)\r\n    drop-shadow(-0.25rem -0.25rem 1px #2962d9);\r\n}\r\n\r\n.mask-path {\r\n  opacity: 0;\r\n  animation: reveal 0.4s ease-in forwards;\r\n}\r\n\r\n.Canvas.multi-mask-mode {\r\n  svg.mask-1-of-1,\r\n  svg.mask-1-of-2,\r\n  svg.mask-2-of-2,\r\n  svg.mask-1-of-3,\r\n  svg.mask-2-of-3,\r\n  svg.mask-3-of-3 {\r\n    opacity: 0;\r\n  }\r\n  &.rotate {\r\n    .background {\r\n      animation: rotate0 1s ease-in forwards;\r\n    }\r\n    & > img:nth-child(2) {\r\n      animation: rotate 1s ease-in forwards;\r\n    }\r\n    svg.mask-best {\r\n      animation: rotate-best 1s ease-in forwards;\r\n    }\r\n    svg.mask-1-of-1 {\r\n      animation: rotate-1-of-1 1s ease-in forwards;\r\n    }\r\n    svg.mask-1-of-2 {\r\n      animation: rotate-1-of-2 1s ease-in forwards;\r\n    }\r\n    svg.mask-2-of-2 {\r\n      animation: rotate-2-of-2 1s ease-in forwards;\r\n    }\r\n    svg.mask-1-of-3 {\r\n      animation: rotate-1-of-3 1s ease-in forwards;\r\n    }\r\n    svg.mask-2-of-3 {\r\n      animation: rotate-2-of-3 1s ease-in forwards;\r\n    }\r\n    svg.mask-3-of-3 {\r\n      animation: rotate-3-of-3 1s ease-in forwards;\r\n    }\r\n    .konva {\r\n      opacity: 1;\r\n      animation: disappear 0.5s ease-out forwards;\r\n    }\r\n  }\r\n  &.unrotate {\r\n    .background {\r\n      animation: unrotate0 1s ease-out forwards;\r\n    }\r\n    & > img:nth-child(2) {\r\n      animation: unrotate 1s ease-out forwards;\r\n    }\r\n    svg.mask-best {\r\n      animation: unrotate-best 1s ease-out forwards;\r\n    }\r\n    svg.mask-1-of-1 {\r\n      animation: unrotate-1-of-1 1s ease-out forwards;\r\n    }\r\n    svg.mask-1-of-2 {\r\n      animation: unrotate-1-of-2 1s ease-out forwards;\r\n    }\r\n    svg.mask-2-of-2 {\r\n      animation: unrotate-2-of-2 1s ease-out forwards;\r\n    }\r\n    svg.mask-1-of-3 {\r\n      animation: unrotate-1-of-3 1s ease-out forwards;\r\n    }\r\n    svg.mask-2-of-3 {\r\n      animation: unrotate-2-of-3 1s ease-out forwards;\r\n    }\r\n    svg.mask-3-of-3 {\r\n      animation: unrotate-3-of-3 1s ease-out forwards;\r\n    }\r\n    .konva {\r\n      opacity: 0;\r\n      animation: reveal 0.5s ease-in 0.5s forwards;\r\n    }\r\n  }\r\n}\r\n\r\n/* keyframe animations */\r\n\r\n@keyframes disappear {\r\n  from {\r\n    opacity: 1;\r\n  }\r\n  to {\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n@keyframes reveal {\r\n  from {\r\n    opacity: 0;\r\n  }\r\n  to {\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n@keyframes rotate0 {\r\n  from {\r\n    transform: perspective(var(--perspective));\r\n    opacity: 1;\r\n  }\r\n  50% {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n    opacity: 0.5;\r\n  }\r\n  100% {\r\n    transform: perspective(var(--perspective)) translateX(-20%) rotateY(60deg);\r\n    opacity: 0.5;\r\n  }\r\n}\r\n\r\n@keyframes unrotate0 {\r\n  from {\r\n    transform: perspective(var(--perspective)) translateX(-20%) rotateY(60deg);\r\n    opacity: 0.5;\r\n  }\r\n  50% {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n    opacity: 0.5;\r\n  }\r\n  100% {\r\n    transform: perspective(var(--perspective));\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n@keyframes rotate {\r\n  from {\r\n    transform: perspective(var(--perspective));\r\n  }\r\n  50% {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n  }\r\n  100% {\r\n    transform: perspective(var(--perspective)) translateX(-20%) rotateY(60deg);\r\n  }\r\n}\r\n\r\n@keyframes unrotate {\r\n  from {\r\n    transform: perspective(var(--perspective)) translateX(-20%) rotateY(60deg);\r\n  }\r\n  50% {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n  }\r\n  100% {\r\n    transform: perspective(var(--perspective));\r\n  }\r\n}\r\n\r\n@keyframes rotate-best {\r\n  from {\r\n    transform: perspective(var(--perspective));\r\n    opacity: 1;\r\n  }\r\n  50% {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n    opacity: 0;\r\n  }\r\n  100% {\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n@keyframes unrotate-best {\r\n  from {\r\n    opacity: 0;\r\n  }\r\n  50% {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n    opacity: 0;\r\n  }\r\n  100% {\r\n    transform: perspective(var(--perspective));\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n@keyframes rotate-1-of-1 {\r\n  from {\r\n    transform: perspective(var(--perspective));\r\n    opacity: 0;\r\n  }\r\n  50% {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n  100% {\r\n    transform: perspective(var(--perspective)) translateX(30%) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n}\r\n\r\n@keyframes unrotate-1-of-1 {\r\n  from {\r\n    transform: perspective(var(--perspective)) translateX(30%) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n  50% {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n  100% {\r\n    transform: perspective(var(--perspective));\r\n    opacity: 0;\r\n  }\r\n}\r\n@keyframes rotate-1-of-2 {\r\n  from {\r\n    transform: perspective(var(--perspective));\r\n    opacity: 0;\r\n  }\r\n  50% {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n  100% {\r\n    transform: perspective(var(--perspective)) translateX(10%) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n}\r\n\r\n@keyframes unrotate-1-of-2 {\r\n  from {\r\n    transform: perspective(var(--perspective)) translateX(10%) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n  50% {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n  100% {\r\n    transform: perspective(var(--perspective));\r\n    opacity: 0;\r\n  }\r\n}\r\n@keyframes rotate-2-of-2 {\r\n  from {\r\n    transform: perspective(var(--perspective));\r\n    opacity: 0;\r\n  }\r\n  50% {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n  100% {\r\n    transform: perspective(var(--perspective)) translateX(40%) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n}\r\n\r\n@keyframes unrotate-2-of-2 {\r\n  from {\r\n    transform: perspective(var(--perspective)) translateX(40%) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n  50% {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n  100% {\r\n    transform: perspective(var(--perspective));\r\n    opacity: 0;\r\n  }\r\n}\r\n@keyframes rotate-1-of-3 {\r\n  from {\r\n    transform: perspective(var(--perspective));\r\n    opacity: 0;\r\n  }\r\n  50% {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n  100% {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n}\r\n\r\n@keyframes unrotate-1-of-3 {\r\n  from {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n  50% {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n  100% {\r\n    transform: perspective(var(--perspective));\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n@keyframes rotate-2-of-3 {\r\n  from {\r\n    transform: perspective(var(--perspective));\r\n    opacity: 0;\r\n  }\r\n  50% {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n  100% {\r\n    transform: perspective(var(--perspective)) translateX(20%) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n}\r\n\r\n@keyframes unrotate-2-of-3 {\r\n  from {\r\n    transform: perspective(var(--perspective)) translateX(20%) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n  50% {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n  100% {\r\n    transform: perspective(var(--perspective));\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n@keyframes rotate-3-of-3 {\r\n  from {\r\n    transform: perspective(var(--perspective));\r\n    opacity: 0;\r\n  }\r\n  50% {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n  100% {\r\n    transform: perspective(var(--perspective)) translateX(40%) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n}\r\n\r\n@keyframes unrotate-3-of-3 {\r\n  from {\r\n    transform: perspective(var(--perspective)) translateX(40%) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n  50% {\r\n    transform: perspective(var(--perspective)) rotateY(60deg);\r\n    opacity: 0.7;\r\n  }\r\n  100% {\r\n    transform: perspective(var(--perspective));\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n.background-animate {\r\n  background-size: 400%;\r\n  -webkit-animation: AnimationName 3s ease infinite;\r\n  -moz-animation: AnimationName 3s ease infinite;\r\n  animation: AnimationName 3s ease infinite;\r\n}\r\n\r\n@keyframes AnimationName {\r\n  0%,\r\n  100% {\r\n    background-position: 0% 50%;\r\n  }\r\n  50% {\r\n    background-position: 100% 50%;\r\n  }\r\n}\r\n\r\n@keyframes inAnimation {\r\n  0% {\r\n    opacity: 0;\r\n    max-height: 0px;\r\n  }\r\n  50% {\r\n    opacity: 1;\r\n  }\r\n  100% {\r\n    opacity: 1;\r\n    max-height: 600px;\r\n  }\r\n}\r\n\r\n@keyframes outAnimation {\r\n  0% {\r\n    opacity: 1;\r\n    max-height: 600px;\r\n  }\r\n  50% {\r\n    opacity: 0;\r\n  }\r\n  100% {\r\n    opacity: 0;\r\n    max-height: 0px;\r\n  }\r\n}\r\n\r\n.mask-gradient {\r\n  opacity: 0;\r\n  animation: reveal-and-hide 1.5s 0.3s forwards;\r\n}\r\n\r\n@keyframes reveal-and-hide {\r\n  0% {\r\n    opacity: 0;\r\n  }\r\n  25% {\r\n    opacity: 1;\r\n  }\r\n  100% {\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n/* Fix for Safari and Mobile Safari:\r\nExtracted Tailwind progress-bar styles and applied\r\nthem to a <div> instead of a <progress> element  */\r\n\r\n.loading-bar {\r\n  position: relative;\r\n  width: 100%;\r\n  -webkit-appearance: none;\r\n  -moz-appearance: none;\r\n  appearance: none;\r\n  overflow: hidden;\r\n  height: 0.5rem;\r\n  border-radius: 1rem;\r\n  border-radius: var(--rounded-box, 1rem);\r\n  vertical-align: baseline;\r\n  background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n  --tw-bg-opacity: 0.2;\r\n\r\n  &::after {\r\n    --tw-bg-opacity: 1;\r\n    background-color: hsl(var(--n) / var(--tw-bg-opacity));\r\n    content: \"\";\r\n    position: absolute;\r\n    top: 0px;\r\n    bottom: 0px;\r\n    left: -40%;\r\n    width: 33.333333%;\r\n    border-radius: 1rem;\r\n    border-radius: var(--rounded-box, 1rem);\r\n    animation: loading 5s infinite ease-in-out;\r\n  }\r\n}\r\n\r\n@keyframes loading {\r\n  50% {\r\n    left: 107%;\r\n  }\r\n}"
  },
  {
    "path": "src/components/Canvas.tsx",
    "content": "import Konva from \"konva\";\r\nimport { KonvaEventObject } from \"konva/lib/Node\";\r\nimport React, {\r\n  RefObject,\r\n  useContext,\r\n  useEffect,\r\n  useRef,\r\n  useState,\r\n} from \"react\";\r\nimport { RadialProgress } from \"react-daisyui\";\r\nimport { Circle, Image, Layer, Path, Rect, Ring, Stage } from \"react-konva\";\r\nimport {\r\n  canvasScaleInitializer,\r\n  canvasScaleResizer,\r\n} from \"./helpers/CanvasHelper\";\r\nimport colors from \"./helpers/colors\";\r\nimport {\r\n  AnnotationProps,\r\n  modelInputProps,\r\n  modelScaleProps,\r\n} from \"./helpers/Interface\";\r\nimport AppContext from \"./hooks/createContext\";\r\nimport SvgMask from \"./SvgMask\";\r\n\r\n// The line below is part of the fix for the iOS canvas area limit of 16777216\r\nKonva.pixelRatio = 1;\r\n\r\ninterface CanvasProps {\r\n  konvaRef: React.RefObject<Konva.Stage> | null;\r\n  handleMouseUp: (e: any, forceHasClicked?: boolean) => void;\r\n  scale: modelScaleProps | null;\r\n  handleMouseDown: (e: any) => void;\r\n  handleMouseMove: (e: any) => void;\r\n  handleMouseOut: (e: any) => void;\r\n  annotations: Array<AnnotationProps>;\r\n  newAnnotation: Array<AnnotationProps>;\r\n  containerRef: RefObject<HTMLDivElement>;\r\n  hasClicked: boolean;\r\n  isStandalone?: boolean;\r\n  setCanvasScale: React.Dispatch<React.SetStateAction<number>>;\r\n  isHoverToolTip: [boolean, React.Dispatch<React.SetStateAction<boolean>>];\r\n  allText: [allText: any, setAllText: any];\r\n}\r\n\r\nconst Canvas = ({\r\n  konvaRef,\r\n  handleMouseUp,\r\n  scale,\r\n  handleMouseDown,\r\n  handleMouseMove,\r\n  handleMouseOut,\r\n  annotations,\r\n  newAnnotation,\r\n  containerRef,\r\n  hasClicked,\r\n  setCanvasScale,\r\n  isStandalone,\r\n  isHoverToolTip: [isHoverToolTip, setIsHoverToolTip],\r\n  allText: [allText, setAllText],\r\n}: CanvasProps) => {\r\n  const {\r\n    click: [click, setClick],\r\n    clicks: [clicks, setClicks],\r\n    image: [image],\r\n    svg: [svg],\r\n    svgs: [svgs],\r\n    allsvg: [allsvg],\r\n    segmentTypes: [segmentTypes, setSegmentTypes],\r\n    isErased: [isErased],\r\n    isErasing: [isErasing],\r\n    isLoading: [isLoading, setIsLoading],\r\n    canvasWidth: [, setCanvasWidth],\r\n    canvasHeight: [, setCanvasHeight],\r\n    maskImg: [maskImg],\r\n    stickerTabBool: [stickerTabBool, setStickerTabBool],\r\n    isModelLoaded: [isModelLoaded, setIsModelLoaded],\r\n    isMultiMaskMode: [isMultiMaskMode, setIsMultiMaskMode],\r\n    isHovering: [isHovering, setIsHovering],\r\n    didShowAMGAnimation: [didShowAMGAnimation, setDidShowAMGAnimation],\r\n    isAllAnimationDone: [isAllAnimationDone, setIsAllAnimationDone],\r\n  } = useContext(AppContext)!;\r\n  if (!image) return null;\r\n\r\n  const MAX_CANVAS_AREA = 1677721;\r\n  const w = scale!.width;\r\n  const h = scale!.height;\r\n  const area = w * h;\r\n  const canvasScale =\r\n    area > MAX_CANVAS_AREA ? Math.sqrt(MAX_CANVAS_AREA / (w * h)) : 1;\r\n  const canvasDimensions = {\r\n    width: Math.floor(w * canvasScale),\r\n    height: Math.floor(h * canvasScale),\r\n  };\r\n\r\n  const imageClone = new window.Image();\r\n  imageClone.src = image.src;\r\n  imageClone.width = w;\r\n  imageClone.height = h;\r\n  const resizer = canvasScaleInitializer({\r\n    width: canvasDimensions.width,\r\n    height: canvasDimensions.height,\r\n    containerRef,\r\n    shouldFitToWidth: isStandalone,\r\n  });\r\n  const [scalingStyle, setScalingStyle] = useState(resizer.scalingStyle);\r\n  const [scaledDimensionsStyle, setScaledDimensionsStyle] = useState(\r\n    resizer.scaledDimensionsStyle\r\n  );\r\n\r\n  const [shouldShowAnimation, setShouldShowAnimation] = useState<\r\n    boolean | null\r\n  >(null);\r\n  const [hasTouchMoved, setHasTouchMoved] = useState(false);\r\n  const [numOfTouches, setNumOfTouches] = useState(0);\r\n  const scrollRef = useRef<HTMLDivElement>(null);\r\n  const [allTimeouts, setAllTimeouts] = useState<any[]>([]);\r\n  const [shouldAllAnimate, setShouldAllAnimate] = useState<boolean>(false);\r\n  const shouldAllAnimateRef = useRef(false);\r\n  const annotationsToDraw = [...annotations, ...newAnnotation];\r\n  const positiveClickColor = \"turquoise\";\r\n  const negativeClickColor = \"pink\";\r\n  const handleClickColor = (num: number) => {\r\n    switch (num) {\r\n      case 0:\r\n        return negativeClickColor;\r\n      case 1:\r\n        return positiveClickColor;\r\n      default:\r\n        return null;\r\n    }\r\n  };\r\n  const clickColor = click ? handleClickColor(click.clickType) : null;\r\n\r\n  const resizeObserver = new ResizeObserver((entries) => {\r\n    for (const entry of entries) {\r\n      if (entry.target === containerRef.current) {\r\n        let width;\r\n        let height;\r\n        if (entry.contentBoxSize) {\r\n          // Firefox implements `contentBoxSize` as a single content rect, rather than an array\r\n          const contentBoxSize = Array.isArray(entry.contentBoxSize)\r\n            ? entry.contentBoxSize[0]\r\n            : entry.contentBoxSize;\r\n          width = contentBoxSize.inlineSize;\r\n          height = contentBoxSize.blockSize;\r\n        } else {\r\n          width = entry.contentRect.width;\r\n          height = entry.contentRect.height;\r\n        }\r\n        const resized = canvasScaleResizer({\r\n          width: canvasDimensions.width,\r\n          height: canvasDimensions.height,\r\n          containerWidth: width,\r\n          containerHeight: height,\r\n          shouldFitToWidth: isStandalone,\r\n        });\r\n        setCanvasWidth(resized.scaledWidth);\r\n        setCanvasHeight(resized.scaledHeight);\r\n        setScaledDimensionsStyle(resized.scaledDimensionsStyle);\r\n        setScalingStyle(resized.scalingStyle);\r\n      }\r\n    }\r\n  });\r\n\r\n  useEffect(() => {\r\n    if (segmentTypes === \"All\") {\r\n      shouldAllAnimateRef.current = true;\r\n      setShouldAllAnimate(true);\r\n    } else {\r\n      shouldAllAnimateRef.current = false;\r\n      setShouldAllAnimate(false);\r\n      allTimeouts.forEach((allTimeout) => clearTimeout(allTimeout));\r\n      setAllTimeouts([]);\r\n      if (konvaRef === null) return;\r\n      const animateAllSvg: Konva.Layer =\r\n        konvaRef!.current!.findOne(\".animateAllSvg\");\r\n      animateAllSvg.destroyChildren();\r\n      animateAllSvg.draw();\r\n    }\r\n  }, [segmentTypes]);\r\n\r\n  const animateAllSvg = () => {\r\n    if (didShowAMGAnimation) return;\r\n    if (konvaRef === null) return;\r\n    if (konvaRef.current === null) return;\r\n    setIsAllAnimationDone(false);\r\n    const animateAllSvg: Konva.Layer =\r\n      konvaRef.current.findOne(\".animateAllSvg\");\r\n    animateAllSvg.find(\"Circle\").forEach((el) => el.destroy());\r\n    animateAllSvg.find(\"Path\").forEach((el) => el.destroy());\r\n    const width = canvasDimensions.width / 32;\r\n    const height = canvasDimensions.height / 32;\r\n    const minRadius = 1.5;\r\n    const radius = Math.max(\r\n      minRadius,\r\n      (2.5 * canvasScale) / scale!.uploadScale\r\n    );\r\n    const bigRadius = 2 * radius;\r\n    const timer = (ms: number) =>\r\n      new Promise<void>((res, rej) =>\r\n        setTimeout(() => {\r\n          if (shouldAllAnimate && shouldAllAnimateRef.current) {\r\n            res();\r\n          } else {\r\n            rej();\r\n          }\r\n        }, ms)\r\n      );\r\n    const drawSpinner = async () => {\r\n      try {\r\n        setAllText(\"Prompting SAM with each point in the grid\");\r\n        for (let i = 0; i <= 32; i++) {\r\n          await timer(50);\r\n          for (let j = 0; j <= 32; j++) {\r\n            const circle = new Konva.Circle({\r\n              x: width * (i + 0.5),\r\n              y: height * (j + 0.5),\r\n              radius: radius,\r\n              fill: \"white\",\r\n              perfectDrawEnabled: false,\r\n              opacity: 0,\r\n            });\r\n            animateAllSvg.add(circle);\r\n            circle.to({\r\n              opacity: 1,\r\n              duration: 1,\r\n              easing: Konva.Easings.EaseInOut,\r\n            });\r\n            const newAllTimeout = setTimeout(() => {\r\n              circle.to({\r\n                opacity: 0,\r\n                duration: 1,\r\n                easing: Konva.Easings.EaseInOut,\r\n              });\r\n            }, 2700);\r\n            setAllTimeouts((prev) => [...prev, newAllTimeout]);\r\n          }\r\n        }\r\n      } catch (error) {\r\n        console.log(\"Rejected\");\r\n      }\r\n    };\r\n    drawSpinner();\r\n\r\n    const load = async () => {\r\n      try {\r\n        setDidShowAMGAnimation(true);\r\n        await timer(2300);\r\n        setAllText(\"Final points after de-duplicating predicted masks\");\r\n        if (!allsvg || !scale) return;\r\n        allsvg.map(async ({ svg, point_coord }, i) => {\r\n          const circle = new Konva.Circle({\r\n            x: point_coord[0] * (canvasScale / scale.uploadScale),\r\n            y: point_coord[1] * (canvasScale / scale.uploadScale),\r\n            radius: radius,\r\n            fill: \"white\",\r\n            perfectDrawEnabled: false,\r\n          });\r\n          const path = new Konva.Path({\r\n            key: i,\r\n            data: svg!.join(\" \"),\r\n            fill: colors[i % colors.length],\r\n            stroke: \"blue\",\r\n            strokeWidth: 3,\r\n            scaleX: canvasScale / scale.uploadScale,\r\n            scaleY: canvasScale / scale.uploadScale,\r\n            opacity: 0,\r\n            lineCap: \"round\",\r\n            lineJoin: \"round\",\r\n            preventDefault: false,\r\n            perfectDrawEnabled: false,\r\n          });\r\n          animateAllSvg.add(path);\r\n          animateAllSvg.add(circle);\r\n          animateAllSvg.draw();\r\n          circle.to({\r\n            duration: 1,\r\n            radius: bigRadius,\r\n            easing: Konva.Easings.EaseInOut,\r\n          });\r\n          const newAllTimeout1 = setTimeout(() => {\r\n            path.to({\r\n              opacity: 0.4,\r\n              duration: 1,\r\n              easing: Konva.Easings.EaseInOut,\r\n            });\r\n          }, 2600);\r\n          const newAllTimeout2 = setTimeout(() => {\r\n            setAllText(\"All of the predicted masks\");\r\n            circle.to({\r\n              duration: 1,\r\n              opacity: 0,\r\n              easing: Konva.Easings.EaseInOut,\r\n            });\r\n          }, 3500);\r\n          const newAllTimeout3 = setTimeout(() => {\r\n            setIsAllAnimationDone(true);\r\n            setAllText(\r\n              <span>\r\n                Interested in learning more? Check out the{\" \"}\r\n                <a\r\n                  href=\"https://ai.facebook.com/research/publications/segment-anything/\"\r\n                  target={\"_blank\"}\r\n                  className=\"underline\"\r\n                >\r\n                  Paper\r\n                </a>\r\n                ,{\" \"}\r\n                <a\r\n                  href=\"https://ai.facebook.com/blog/segment-anything-foundation-model-image-segmentation/\"\r\n                  target={\"_blank\"}\r\n                  className=\"underline\"\r\n                >\r\n                  Blog Post\r\n                </a>\r\n                , or{\" \"}\r\n                <a\r\n                  href=\"https://github.com/facebookresearch/segment-anything\"\r\n                  target={\"_blank\"}\r\n                  className=\"underline\"\r\n                >\r\n                  Code\r\n                </a>\r\n                .\r\n              </span>\r\n            );\r\n          }, 5000);\r\n          setAllTimeouts((prev) => [\r\n            ...prev,\r\n            newAllTimeout1,\r\n            newAllTimeout2,\r\n            newAllTimeout3,\r\n          ]);\r\n        });\r\n      } catch (error) {\r\n        console.log(\"Rejected\");\r\n      }\r\n    };\r\n    load();\r\n  };\r\n\r\n  useEffect(() => {\r\n    setCanvasScale(canvasScale);\r\n    setCanvasWidth(resizer.scaledWidth);\r\n    setCanvasHeight(resizer.scaledHeight);\r\n    if (containerRef.current) {\r\n      resizeObserver.observe(containerRef.current);\r\n    }\r\n    return () => {\r\n      if (containerRef.current) {\r\n        resizeObserver.unobserve(containerRef.current);\r\n      }\r\n    };\r\n  }, []);\r\n\r\n  const superDefer = (cb: Function) => {\r\n    setTimeout(\r\n      () =>\r\n        window.requestAnimationFrame(() => {\r\n          setTimeout(() => {\r\n            cb();\r\n          }, 0);\r\n        }),\r\n      0\r\n    );\r\n  };\r\n\r\n  useEffect(() => {\r\n    let newClicks: modelInputProps[] | null = null;\r\n    if (clicks && click) {\r\n      newClicks = [...clicks, click];\r\n    } else if (click) {\r\n      newClicks = [click];\r\n    }\r\n    if (newClicks) {\r\n      superDefer(() => superDefer(() => setClicks(newClicks)));\r\n    }\r\n  }, [click]);\r\n\r\n  useEffect(() => {\r\n    const padding = isStandalone ? 0 : 144; // pt-36 = 36rem = 144px\r\n    const el = scrollRef.current;\r\n    if (el) {\r\n      const maxScrollLeft = resizer.scaledWidth - resizer.containerWidth;\r\n      const maxScrollTop = resizer.scaledHeight - resizer.containerHeight;\r\n      el.scrollLeft = maxScrollLeft / 2;\r\n      el.scrollTop = padding - (maxScrollTop - padding) / 2;\r\n    }\r\n  }, [scalingStyle]);\r\n\r\n  useEffect(() => {\r\n    if (isHovering && clicks && clicks.length == 1) {\r\n      setShouldShowAnimation(true);\r\n    } else {\r\n      setShouldShowAnimation(false);\r\n    }\r\n  }, [clicks, isHovering]);\r\n\r\n  const shouldShowSpinner =\r\n    (segmentTypes === \"All\" && isLoading) ||\r\n    (isLoading && !hasClicked && !isModelLoaded.boxModel) ||\r\n    (isLoading && isErasing);\r\n\r\n  return (\r\n    <>\r\n      {shouldShowSpinner && (\r\n        <div\r\n          className={`absolute z-10 flex items-center justify-center w-full h-full md:hidden`}\r\n        >\r\n          <RadialProgress\r\n            className=\"animate-spin\"\r\n            size={\r\n              0.3 * Math.min(resizer.scaledWidth, resizer.scaledHeight) + \"px\"\r\n            }\r\n            thickness=\"1rem\"\r\n            value={70}\r\n          ></RadialProgress>\r\n        </div>\r\n      )}\r\n      <div\r\n        className={`absolute w-full h-full overflow-auto Canvas-wrapper md:overflow-visible md:w-auto md:h-auto absolute-center ${\r\n          !isStandalone ? \"pt-36 md:pt-0\" : \"\"\r\n        }`}\r\n        ref={scrollRef}\r\n      >\r\n        <div\r\n          onMouseOver={() => {\r\n            setIsHoverToolTip(true);\r\n            if (segmentTypes === \"Click\" && isMultiMaskMode) {\r\n              setIsHovering(true);\r\n            }\r\n          }}\r\n          onMouseOut={() => {\r\n            setIsHoverToolTip(false);\r\n            if (\r\n              segmentTypes === \"Click\" &&\r\n              isMultiMaskMode &&\r\n              clicks !== null &&\r\n              clicks.length === 1\r\n            ) {\r\n              setIsHovering(false);\r\n            }\r\n          }}\r\n          className={`Canvas relative ${\r\n            isLoading ? \"pointer-events-none\" : \"\"\r\n          } ${\r\n            shouldShowAnimation\r\n              ? \"rotate\"\r\n              : isHovering === false\r\n              ? \"unrotate\"\r\n              : \"\"\r\n          } ${isMultiMaskMode ? \"multi-mask-mode\" : \"\"}`}\r\n          style={scaledDimensionsStyle}\r\n        >\r\n          <div className=\"absolute w-full h-full bg-black pointer-events-none background\"></div>\r\n          <img\r\n            src={image.src}\r\n            className={`absolute w-full h-full pointer-events-none ${\r\n              isLoading ||\r\n              (hasClicked && !isMultiMaskMode) ||\r\n              (isMultiMaskMode && clicks)\r\n                ? \"opacity-50\"\r\n                : \"\"\r\n            }`}\r\n            style={{ margin: 0 }}\r\n          ></img>\r\n          {segmentTypes !== \"All\" &&\r\n            svg &&\r\n            svgs &&\r\n            scale &&\r\n            hasClicked &&\r\n            isMultiMaskMode &&\r\n            svgs\r\n              .map((svg, i) => (\r\n                <SvgMask\r\n                  key={i}\r\n                  id={`${i}`}\r\n                  className={`mask-${i + 1}-of-${svgs.length}`}\r\n                  xScale={scale.width * scale.uploadScale}\r\n                  yScale={scale.height * scale.uploadScale}\r\n                  svgStr={svg.join(\" \")}\r\n                />\r\n              ))\r\n              .concat(\r\n                <SvgMask\r\n                  className={`mask-best`}\r\n                  xScale={scale.width * scale.uploadScale}\r\n                  yScale={scale.height * scale.uploadScale}\r\n                  svgStr={svg.join(\" \")}\r\n                />\r\n              )}\r\n          {segmentTypes !== \"All\" &&\r\n            svg &&\r\n            scale &&\r\n            hasClicked &&\r\n            !isMultiMaskMode && (\r\n              <SvgMask\r\n                xScale={scale.width * scale.uploadScale}\r\n                yScale={scale.height * scale.uploadScale}\r\n                svgStr={svg.join(\" \")}\r\n              />\r\n            )}\r\n          <Stage\r\n            className=\"konva\"\r\n            width={canvasDimensions.width}\r\n            height={canvasDimensions.height}\r\n            onMouseDown={(e) => {\r\n              if (stickerTabBool) return;\r\n              handleMouseDown(e);\r\n            }}\r\n            onMouseUp={(e) => {\r\n              if (stickerTabBool) {\r\n                setStickerTabBool(false);\r\n                return;\r\n              }\r\n              if (segmentTypes === \"All\") return;\r\n              if (isMultiMaskMode && clicks) return;\r\n              setIsLoading(true);\r\n              handleMouseUp(e);\r\n            }}\r\n            onMouseMove={handleMouseMove}\r\n            onMouseOut={handleMouseOut}\r\n            onMouseLeave={handleMouseOut}\r\n            onTouchStart={(e) => {\r\n              if (stickerTabBool) return;\r\n              handleMouseDown(e);\r\n              setNumOfTouches((prev) => {\r\n                return prev + 1;\r\n              });\r\n            }}\r\n            onTouchEnd={(e) => {\r\n              if (stickerTabBool) return;\r\n              if (\r\n                segmentTypes !== \"All\" &&\r\n                !hasTouchMoved &&\r\n                numOfTouches === 1\r\n              ) {\r\n                setIsLoading(true);\r\n                superDefer(() => superDefer(() => handleMouseUp(e, true)));\r\n              }\r\n              setHasTouchMoved(false);\r\n              setNumOfTouches(0);\r\n            }}\r\n            onTouchMove={() => {\r\n              setHasTouchMoved(true);\r\n            }}\r\n            onContextMenu={(e: KonvaEventObject<PointerEvent>) =>\r\n              e.evt.preventDefault()\r\n            }\r\n            ref={konvaRef}\r\n            style={scalingStyle}\r\n          >\r\n            <Layer name=\"svgMask\">\r\n              <Image\r\n                x={0}\r\n                y={0}\r\n                image={imageClone}\r\n                width={canvasDimensions.width}\r\n                height={canvasDimensions.height}\r\n                opacity={0}\r\n                preventDefault={false}\r\n              />\r\n              {segmentTypes !== \"All\"\r\n                ? svg &&\r\n                  scale &&\r\n                  hasClicked && (\r\n                    <Path\r\n                      data={svg.join(\" \")}\r\n                      fill=\"black\"\r\n                      scaleX={canvasScale / scale.uploadScale}\r\n                      scaleY={canvasScale / scale.uploadScale}\r\n                      lineCap=\"round\"\r\n                      lineJoin=\"round\"\r\n                      opacity={0}\r\n                      preventDefault={false}\r\n                    />\r\n                  )\r\n                : allsvg &&\r\n                  scale &&\r\n                  allsvg.map(({ point_coord, svg }, i) => (\r\n                    <Path\r\n                      key={i}\r\n                      data={svg.join(\" \")}\r\n                      fill={colors[i % colors.length]}\r\n                      stroke=\"blue\"\r\n                      strokeWidth={3}\r\n                      scaleX={canvasScale / scale.uploadScale}\r\n                      scaleY={canvasScale / scale.uploadScale}\r\n                      opacity={0.5}\r\n                      lineCap=\"round\"\r\n                      lineJoin=\"round\"\r\n                      preventDefault={false}\r\n                      visible={false}\r\n                      // visible={true}\r\n                    />\r\n                  ))}\r\n            </Layer>\r\n            <Layer name=\"animateAllSvg\">\r\n              {segmentTypes === \"All\" && shouldAllAnimate && animateAllSvg()}\r\n            </Layer>\r\n            <Layer name=\"annotations\">\r\n              {clicks &&\r\n                hasClicked &&\r\n                clicks.map((click, idx) => {\r\n                  const clickColor = handleClickColor(click.clickType);\r\n                  return (\r\n                    clickColor && (\r\n                      <Circle\r\n                        key={idx}\r\n                        id={`${idx}`}\r\n                        x={(click.x * canvasScale) / scale!.scale}\r\n                        y={(click.y * canvasScale) / scale!.scale}\r\n                        fill={clickColor}\r\n                        radius={(5 * canvasScale) / scale!.scale}\r\n                        shadowBlur={5}\r\n                        shadowColor={\r\n                          clickColor === positiveClickColor\r\n                            ? \"black\"\r\n                            : clickColor\r\n                        }\r\n                        preventDefault={false}\r\n                      />\r\n                    )\r\n                  );\r\n                })}\r\n              {click && clickColor && (\r\n                <>\r\n                  <Circle\r\n                    x={(click.x * canvasScale) / scale!.scale}\r\n                    y={(click.y * canvasScale) / scale!.scale}\r\n                    fill={clickColor}\r\n                    shadowColor={\r\n                      clickColor === positiveClickColor\r\n                        ? \"black\"\r\n                        : negativeClickColor\r\n                    }\r\n                    shadowBlur={5}\r\n                    preventDefault={false}\r\n                    radius={(5 * canvasScale) / scale!.scale}\r\n                  />\r\n                  <Ring\r\n                    x={(click.x * canvasScale) / scale!.scale}\r\n                    y={(click.y * canvasScale) / scale!.scale}\r\n                    fill={clickColor}\r\n                    shadowColor={\r\n                      clickColor === positiveClickColor\r\n                        ? \"black\"\r\n                        : negativeClickColor\r\n                    }\r\n                    shadowBlur={5}\r\n                    preventDefault={false}\r\n                    radius={(55 * canvasScale) / scale!.scale}\r\n                    innerRadius={(50 * canvasScale) / scale!.scale}\r\n                    outerRadius={(60 * canvasScale) / scale!.scale}\r\n                  />\r\n                </>\r\n              )}\r\n              {!isErased &&\r\n                annotationsToDraw.map((value, i) => {\r\n                  return (\r\n                    <Rect\r\n                      key={i}\r\n                      x={value.x}\r\n                      y={value.y}\r\n                      width={value.width}\r\n                      height={value.height}\r\n                      fill=\"transparent\"\r\n                      stroke=\"white\"\r\n                      strokeWidth={1.5}\r\n                      preventDefault={false}\r\n                    />\r\n                  );\r\n                })}\r\n            </Layer>\r\n          </Stage>\r\n          {segmentTypes !== \"All\" && maskImg && !hasClicked && (\r\n            <img\r\n              src={maskImg?.src}\r\n              style={{ margin: 0 }}\r\n              className={`absolute top-0 opacity-40 pointer-events-none w-full h-full`}\r\n            ></img>\r\n          )}\r\n          {shouldShowSpinner && (\r\n            <div\r\n              className={`hidden absolute z-10 md:flex items-center justify-center w-full h-full top-0`}\r\n            >\r\n              <RadialProgress\r\n                className=\"animate-spin\"\r\n                size={\r\n                  0.3 * Math.min(resizer.scaledWidth, resizer.scaledHeight) +\r\n                  \"px\"\r\n                }\r\n                thickness=\"1rem\"\r\n                value={70}\r\n              ></RadialProgress>\r\n            </div>\r\n          )}\r\n        </div>\r\n      </div>\r\n    </>\r\n  );\r\n};\r\n\r\nexport default Canvas;\r\n"
  },
  {
    "path": "src/components/Content.tsx",
    "content": "import React, { useState } from \"react\";\r\nimport Video from \"./Video\";\r\n\r\nexport type ContentProps = {\r\n  color?:\r\n    | \"theme\"\r\n    | \"white\"\r\n    | \"gray\"\r\n    | \"blue\"\r\n    | \"red\"\r\n    | \"yellow\"\r\n    | \"green\"\r\n    | \"darkGray\";\r\n  whiteText?: boolean;\r\n  centered?: boolean;\r\n  noteLeft?: string;\r\n  noteRight?: string;\r\n  imageLeft?: string;\r\n  videoLeft?: string;\r\n  imageRight?: string;\r\n  videoRight?: string;\r\n  spaceTop?: boolean;\r\n  spaceBottom?: boolean;\r\n  small?: boolean;\r\n  reorderForMobile?: boolean;\r\n  style?: React.CSSProperties;\r\n  className?: string;\r\n  children: React.ReactNode;\r\n};\r\nexport const bgColorToClass = {\r\n  theme: \"\",\r\n  white: \"bg-white\",\r\n  gray: \"bg-gray-100\",\r\n  blue: \"\",\r\n  red: \"\",\r\n  yellow: \"\",\r\n  green: \"\",\r\n  darkGray: \"bg-gray-800\",\r\n  none: \"none\",\r\n};\r\nexport default function Content({\r\n  color = \"white\",\r\n  whiteText,\r\n  centered,\r\n  noteLeft,\r\n  noteRight,\r\n  imageLeft,\r\n  videoLeft,\r\n  imageRight,\r\n  videoRight,\r\n  spaceTop,\r\n  spaceBottom,\r\n  small,\r\n  reorderForMobile,\r\n  style,\r\n  className = \"\",\r\n  children,\r\n}: ContentProps) {\r\n  const bgColor = bgColorToClass[color];\r\n  const textColor = whiteText ? \"text-white\" : \"text-gray-700\";\r\n  const padTop = spaceTop ? \"pt-20\" : \"pt-4\";\r\n  const padBottom = spaceBottom ? \"pb-20\" : \"pb-4\";\r\n  const textSize = small ? \"prose-sm\" : \"prose-lg\";\r\n\r\n  return (\r\n    <div\r\n      className={`comp_content bg-g flex w-screen justify-center self-stretch ${bgColor} ${textColor} ${\r\n        whiteText ? \"color-flip\" : \"\"\r\n      }`}\r\n    >\r\n      <div\r\n        className={`flex flex-1 flex-col md:flex-row box-border max-w-screen-xl items-center justify-start px-5 md:px-20 xl:px-10 ${padTop} ${padBottom}`}\r\n        style={style}\r\n      >\r\n        {(imageLeft || videoLeft || noteLeft) && (\r\n          <div\r\n            className=\"flex-1 flex-col mr-4 pt-2 items-start justify-start h-full text-sm\"\r\n            style={style}\r\n          >\r\n            {!videoLeft && imageLeft && (\r\n              <div className=\"aspect-w-4 aspect-h-4\">\r\n                <img\r\n                  src={imageLeft}\r\n                  alt={noteLeft || \"\"}\r\n                  className=\"object-contain\"\r\n                  style={style}\r\n                />\r\n              </div>\r\n            )}\r\n            {videoLeft && (\r\n              <div className=\"aspect-w-4 aspect-h-4\">\r\n                <Video\r\n                  url={videoLeft}\r\n                  autoPlay\r\n                  loop\r\n                  muted\r\n                  poster={imageLeft || undefined}\r\n                  controls={false}\r\n                  aspectRatio=\"fill\"\r\n                />\r\n              </div>\r\n            )}\r\n            {noteLeft && <h6>{noteLeft}</h6>}\r\n          </div>\r\n        )}\r\n\r\n        <div\r\n          className={`flex-1 ${\r\n            imageLeft || noteLeft || imageRight || noteRight\r\n              ? \"\"\r\n              : \"flex-grow-4\"\r\n          } ${\r\n            centered ? \"self-centered\" : \"self-start\"\r\n          } max-w-none ${textSize} mx-4 ${textColor} ${className}`}\r\n        >\r\n          {children}\r\n        </div>\r\n\r\n        {(imageRight || noteRight) && (\r\n          <div\r\n            className={`flex-1 flex-col ml-4 pt-2 items-start justify-start h-full text-sm ${\r\n              reorderForMobile ? \"order-first md:order-none\" : \"\"\r\n            }`}\r\n          >\r\n            {!videoRight && imageRight && (\r\n              <div className=\"aspect-auto\">\r\n                <img\r\n                  src={imageRight}\r\n                  alt={noteRight || \"\"}\r\n                  className=\"object-contain mb-2 mt-2\"\r\n                />\r\n              </div>\r\n            )}\r\n            {videoRight && (\r\n              <div className=\"aspect-w-4 aspect-h-4\">\r\n                <Video\r\n                  url={videoRight}\r\n                  autoPlay\r\n                  loop\r\n                  muted\r\n                  poster={imageRight || undefined}\r\n                  controls={false}\r\n                  aspectRatio=\"fill\"\r\n                />\r\n              </div>\r\n            )}\r\n            {noteRight && <h6>{noteRight}</h6>}\r\n          </div>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n"
  },
  {
    "path": "src/components/ErrorPage.tsx",
    "content": "import React from \"react\";\r\nimport { useRouteError } from \"react-router-dom\";\r\n\r\nconst ErrorPage = () => {\r\n  const error: any = useRouteError();\r\n  console.error(error);\r\n\r\n  return (\r\n    <div id=\"error-page\">\r\n      <h1>Oops!</h1>\r\n      <p>Sorry, an unexpected error has occurred.</p>\r\n      <p>\r\n        <i>{error.statusText || error.message}</i>\r\n      </p>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default ErrorPage;"
  },
  {
    "path": "src/components/FAQ.tsx",
    "content": "import React, { PropsWithChildren, useState } from \"react\";\r\n\r\nexport type FAQProps = {\r\n  question?: string;\r\n  className?: string;\r\n  children: React.ReactNode;\r\n};\r\n\r\nexport default function FAQ({\r\n  question,\r\n  className = \"\",\r\n  children,\r\n}: PropsWithChildren<FAQProps>) {\r\n  const [isCollapsed, setIsCollapsed] = useState(true);\r\n\r\n  return (\r\n    <div className={`flex items-center border-t ${className}`}>\r\n      <h6 className=\"flex-1 py-4\">\r\n        <span className=\"font-bold\">{question}</span>\r\n        <div\r\n          className={`transition-all overflow-hidden ${\r\n            isCollapsed ? \"max-h-0\" : \"max-h-80\"\r\n          } `}\r\n        >\r\n          {children}\r\n        </div>\r\n      </h6>\r\n      <img\r\n        src={`${\r\n          isCollapsed ? \"/assets/circle-plus.svg\" : \"/assets/circle-minus.svg\"\r\n        }`}\r\n        className=\"w-6 flex-0 m-0\"\r\n        onClick={() => setIsCollapsed((prev) => !prev)}\r\n      />\r\n    </div>\r\n  );\r\n}\r\n"
  },
  {
    "path": "src/components/FeatureSummary.tsx",
    "content": "import React from \"react\";\r\nimport { NavLink } from \"react-router-dom\";\r\nimport { getTextColors } from \"./helpers/metaTheme\";\r\n\r\ninterface Action {\r\n  action: string;\r\n  actionUrl: string;\r\n}\r\nexport type FeatureSummaryProps = {\r\n  label?: string;\r\n  actions?: Action[];\r\n  darkMode?: boolean;\r\n  centerAlign?: boolean;\r\n  small?: boolean;\r\n  useNavLink?: boolean;\r\n  style?: React.CSSProperties;\r\n  children: React.ReactNode;\r\n  className?: string;\r\n  justifyCenter?: boolean;\r\n};\r\n\r\nexport default function FeatureSummary({\r\n  label,\r\n  actions,\r\n  darkMode,\r\n  centerAlign,\r\n  small,\r\n  style,\r\n  children,\r\n  className,\r\n  useNavLink,\r\n  justifyCenter,\r\n}: FeatureSummaryProps) {\r\n  const { primary, secondary } = getTextColors(darkMode || false);\r\n  const uiColor = darkMode ? \"bg-gray-800\" : \"bg-white\";\r\n  const linkBody = (l: Action) => (\r\n    <>\r\n      <button>\r\n        <svg\r\n          width=\"26\"\r\n          height=\"26\"\r\n          viewBox=\"0 0 26 26\"\r\n          fill=\"none\"\r\n          xmlns=\"http://www.w3.org/2000/svg\"\r\n        >\r\n          <path\r\n            className={`${darkMode ? \"\" : \"\"}`}\r\n            opacity=\"0.4\"\r\n            fillRule=\"evenodd\"\r\n            clipRule=\"evenodd\"\r\n            d=\"M13 25C6.37258 25 0.999999 19.6274 0.999999 13C0.999999 6.37258 6.37258 1 13 1C19.6274 1 25 6.37258 25 13C25 19.6274 19.6274 25 13 25Z\"\r\n            stroke={`${darkMode ? \"white\" : \"#1C2B33\"}`}\r\n          />\r\n          <path\r\n            className={`${\r\n              darkMode\r\n                ? \"fill-white group-hover:fill-blue-200\"\r\n                : \"fill-gray-600 group-hover:fill-primary\"\r\n            }`}\r\n            d=\"M14.3214 9L18 13L14.3214 17L13.6711 16.3068L16.2521 13.5L8 13.5V12.5L16.2396 12.5L13.6711 9.70711L14.3214 9Z\"\r\n            fill=\"#1C2B33\"\r\n          />\r\n        </svg>\r\n      </button>\r\n      <span\r\n        className={`font-bold ${primary} ${\r\n          darkMode ? \"group-hover:text-blue-200\" : \"group-hover:text-primary\"\r\n        }`}\r\n      >\r\n        {l.action}\r\n      </span>\r\n    </>\r\n  );\r\n\r\n  return (\r\n    <div\r\n      className={`comp_summary ${darkMode ? \"dark-mode\" : \"\"} ${\r\n        centerAlign ? \"text-center\" : \"text-left\"\r\n      } ${className}`}\r\n    >\r\n      {label &&\r\n        (small ? (\r\n          <p className={`${secondary} mb-0`}>{label}</p>\r\n        ) : (\r\n          <h6 className={`${secondary} mb-2`}>{label}</h6>\r\n        ))}\r\n\r\n      <div>{children}</div>\r\n\r\n      <div\r\n        className={`flex gap-5 ${\r\n          centerAlign ? \"items-center\" : \"items-start w-full\"\r\n        } ${justifyCenter && \"justify-center\"}`}\r\n      >\r\n        {/* This button should be refactored as its own component */}\r\n        {/*actions &&\r\n          actions.map((i, l) => {\r\n            return useNavLink ? (\r\n              <NavLink\r\n                key={i}\r\n                to={l.actionUrl}\r\n                className=\"flex items-center gap-2 py-2 mt-4 no-underline group\"\r\n              >\r\n                {linkBody(l)}\r\n              </NavLink>\r\n            ) : (\r\n              <a\r\n                key={i}\r\n                href={l.actionUrl}\r\n                className=\"flex items-center gap-2 py-2 mt-4 no-underline group\"\r\n              >\r\n                {linkBody(l)}\r\n              </a>\r\n            );\r\n          })*/}\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n"
  },
  {
    "path": "src/components/FeedbackModal.tsx",
    "content": "import React from \"react\";\r\n\r\nconst SPACE = \"%20\";\r\nconst NEW_LINE = \"%0D%0A\";\r\nconst EMAIL = \"segment-anything@meta.com\";\r\nconst SUBJECT = \"Segment Anything Demo Feedback\";\r\nconst BODY = `Hello Segment Anything team,${NEW_LINE}${NEW_LINE}I'd like to give you some feedback about your demo.`;\r\n\r\nconst subject = SUBJECT.replaceAll(\" \", SPACE);\r\nconst body = BODY.replaceAll(\" \", SPACE);\r\n\r\nconst FeedbackModal = () => {\r\n  return (\r\n    <div className=\"modal\" id=\"feedback-modal\">\r\n      <div className=\"modal-box\">\r\n        <div className=\"flex flex-row justify-between mb-2 text-sm\">\r\n          <h3 className=\"text-xl\">Feedback</h3>\r\n          <span>\r\n            <a href=\"#\" className=\"font-bold\">\r\n              Close\r\n            </a>\r\n          </span>\r\n        </div>\r\n        <p>\r\n          Please email all feedback to <br className=\"md:hidden\" />\r\n          <a\r\n            href={`mailto:${EMAIL}?subject=${subject}&body=${body}`}\r\n            style={{ fontWeight: \"bold\" }}\r\n            className=\"hover:underline\"\r\n          >\r\n            {EMAIL}\r\n          </a>\r\n        </p>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default FeedbackModal;\r\n"
  },
  {
    "path": "src/components/Footer.tsx",
    "content": "import React from \"react\";\r\nimport { NavLink, useLocation } from \"react-router-dom\";\r\nimport FeedbackModal from \"./FeedbackModal\";\r\n\r\nconst Footer = () => {\r\n  const location = useLocation();\r\n  return (\r\n    <>\r\n      {location.pathname === \"/\" && (\r\n        <>\r\n          <div className=\"flex flex-row-reverse items-baseline justify-between mx-8 my-2 xl:my-4\">\r\n            <a href=\"https://ai.facebook.com/\">\r\n              <img src=\"/assets/Meta.svg\" alt=\"Meta AI\"></img>\r\n            </a>\r\n            <div>\r\n              {/* <a href=\"\">Terms</a>\r\n  <a className=\"mx-6\" href=\"\">\r\n    Privacy\r\n  </a> */}\r\n              <span className=\"mr-4\">© 2023 Meta</span>\r\n              <a className=\"mx-4\" href=\"#feedback-modal\">\r\n                Feedback\r\n              </a>\r\n              <a\r\n                className=\"mx-4\"\r\n                href=\"https://www.facebook.com/privacy/policies/cookies/\"\r\n                target={\"_blank\"}\r\n              >\r\n                Cookie Policy\r\n              </a>\r\n              <NavLink className={\"mx-4\"} to={\"/terms\"}>\r\n                Terms\r\n              </NavLink>\r\n            </div>\r\n          </div>\r\n          <FeedbackModal />\r\n        </>\r\n      )}\r\n    </>\r\n  );\r\n};\r\n\r\nexport default Footer;\r\n"
  },
  {
    "path": "src/components/Gallery.tsx",
    "content": "import React, { PropsWithChildren } from \"react\";\r\nimport { bgColorToClass } from \"./Content\";\r\nexport type GalleryProps = {\r\n  color?: \"theme\" | \"white\" | \"gray\" | \"blue\" | \"red\" | \"yellow\" | \"green\";\r\n  whiteText?: boolean;\r\n  columns?: number;\r\n  flowVertical?: boolean;\r\n  grid?: boolean;\r\n  fullWidth?: boolean;\r\n  noteLeft?: string;\r\n  noteRight?: string;\r\n  spaceTop?: boolean;\r\n  spaceBottom?: boolean;\r\n  style?: React.CSSProperties;\r\n  children: React.ReactNode;\r\n};\r\n\r\nfunction chunkArray(arr: any, n: number) {\r\n  const chunks = [];\r\n  for (let i = 0; i < arr.length; i += n) {\r\n    chunks.push(arr.slice(i, i + n));\r\n  }\r\n  return chunks;\r\n}\r\n\r\nfunction zipArray(arrays: any) {\r\n  let z = [];\r\n  for (let i = 0, len = arrays[0].length; i < len; i++) {\r\n    let p = [];\r\n    for (let k = 0; k < arrays.length; k++) {\r\n      p.push(arrays[k][i]);\r\n    }\r\n    z.push(p);\r\n  }\r\n  return z;\r\n}\r\n\r\nexport default function Gallery({\r\n  color,\r\n  whiteText,\r\n  columns = 1,\r\n  flowVertical,\r\n  grid,\r\n  fullWidth,\r\n  noteLeft,\r\n  noteRight,\r\n  spaceTop,\r\n  spaceBottom,\r\n  style,\r\n  children,\r\n}: PropsWithChildren<GalleryProps>) {\r\n  const bgColor = color ? bgColorToClass[color] : `bg-white`;\r\n  const textColor = whiteText ? \"text-white\" : \"text-gray-700\";\r\n  const padTop = spaceTop ? \"pt-20\" : \"pt-4\";\r\n  const padBottom = spaceBottom ? \"pb-20\" : \"pb-4\";\r\n\r\n  const itemsCount = React.Children.count(children);\r\n  const isSingle = itemsCount < 2;\r\n  const cols = itemsCount / columns;\r\n  const chunks = isSingle\r\n    ? []\r\n    : flowVertical\r\n    ? chunkArray(children, cols)\r\n    : zipArray(chunkArray(children, React.Children.count(children) / cols));\r\n\r\n  return (\r\n    <div\r\n      className={`comp_gallery flex w-screen justify-center self-stretch ${bgColor} ${textColor}`}\r\n      style={style}\r\n    >\r\n      <div\r\n        className={`max-w-screen-xl flex flex-1 flex-row items-center justify-start px-5 md:px-20 xl:px-10 ${padTop} ${padBottom}`}\r\n      >\r\n        {!fullWidth && (\r\n          <div className=\"hidden md:flex flex-1 flex-col mr-4 pt-4 items-start justify-start h-full text-sm\">\r\n            <div className={`opacity-70 ${textColor}`}>{noteLeft || \"\"}</div>\r\n          </div>\r\n        )}\r\n\r\n        <div\r\n          className={`flex flex-col md:flex-row flex-1 flex-grow-4 self-start max-w-none ${\r\n            fullWidth ? \"\" : \"mx-4\"\r\n          }`}\r\n        >\r\n          {!isSingle &&\r\n            chunks.map((chs, k) => (\r\n              <div className=\"flex-col flex-1\" key={`group${k}`}>\r\n                {chs.map((c: any, i: number) => (\r\n                  <div\r\n                    className={`p-1 md:p-3 ${\r\n                      grid ? \"aspect-[1/1]\" : \"aspect-auto\"\r\n                    }`}\r\n                    key={`img${i}`}\r\n                  >\r\n                    {c}\r\n                  </div>\r\n                ))}\r\n              </div>\r\n            ))}\r\n          {isSingle && <div className=\"p-1 aspect-auto\">{children}</div>}\r\n        </div>\r\n\r\n        {!fullWidth && (\r\n          <div className=\"hidden md:flex flex-1 flex-col ml-4 pb-4 items-start justify-end h-full text-sm\">\r\n            <div className={`opacity-70 ${textColor}`}>{noteRight || \"\"}</div>\r\n          </div>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n"
  },
  {
    "path": "src/components/Hero.tsx",
    "content": "import React from \"react\";\r\n\r\nimport Video from \"./Video\";\r\n\r\nexport type HeroLayout = \"default\" | \"vertical\";\r\n\r\nexport type HeroProps = {\r\n  layout?: HeroLayout;\r\n  image?: string;\r\n  video?: string;\r\n  overlay?: boolean;\r\n  bgColor?: string;\r\n  fullHeight?: boolean;\r\n  offsetNavHeight?: boolean;\r\n  style?: React.CSSProperties;\r\n  children: React.ReactNode;\r\n  className?: string;\r\n};\r\n\r\nexport default function Hero({\r\n  layout,\r\n  image,\r\n  video,\r\n  overlay,\r\n  fullHeight,\r\n  offsetNavHeight,\r\n  bgColor,\r\n  style = {},\r\n  children,\r\n  className = \"\",\r\n}: HeroProps) {\r\n  const bg = bgColor ? `bg-${bgColor}` : `bg-gray-600`;\r\n  const split = (image || video) && !overlay;\r\n\r\n  const h = offsetNavHeight && fullHeight ? \"h-[calc(100vh-64px)]\" : \"h-screen\";\r\n  const height = fullHeight\r\n    ? `${h} ${split || overlay ? \"\" : \"md:min-h-[1000px]\"}`\r\n    : \"\";\r\n\r\n  const contentFlow =\r\n    layout === \"vertical\" ? \"flex-col\" : `flex-col-reverse lg:flex-row`;\r\n  const contentMargin = `${fullHeight ? \"my-0\" : \"\"} ${\r\n    split ? \"mt-0 mb-10 px-6 lg:px-0\" : \"px-0 my-20\"\r\n  }`;\r\n\r\n  const contentAlign = `${\r\n    fullHeight\r\n      ? `${split ? \"justify-start-only\" : \"justify-center\"}`\r\n      : \"justify-center\"\r\n  } lg:justify-start`;\r\n  const summaryMargin =\r\n    layout === \"vertical\" ? \"mt-20\" : split ? \"lg:my-[140px]\" : \"lg:my-20\";\r\n  const imageW =\r\n    layout === \"vertical\"\r\n      ? \"md:w-[70vw] md:max-w-[850px] w-full px-0\"\r\n      : \"w-[100vw] lg:w-full p-0 lg:p-4\";\r\n  const imageH =\r\n    layout === \"vertical\"\r\n      ? \"md:h-[39vw] md:max-h-[478px] h-[40vh] mb-20\"\r\n      : \"h-[100vw] max-h-[500px] lg:h-[500px]\";\r\n  // const imageSize = layout === 'vertical' ? \"md:w-[70vw] md:max-w-[850px] w-full px-0 md:h-[39vw] md:max-h-[478px] mb-20\" : \"w-[100vw] lg:w-full h-[100vw] max-h-[500px] lg:h-[500px] p-0 lg:p-4\";\r\n  const equalSize =\r\n    layout === \"vertical\" ? \"\" : `${split ? \"lg:flex-1\" : \"lg:w-[50%]\"}`;\r\n\r\n  const imageOverlay = overlay ? \"bg-cover bg-center bg-no-repeat\" : \"\";\r\n\r\n  const containerStyle: React.CSSProperties = {\r\n    backgroundImage: overlay && image && !video ? `url(${image})` : undefined,\r\n    ...style,\r\n  };\r\n\r\n  return (\r\n    <div\r\n      className={`relative flex flex-col w-screen justify-center items-center ${bg} ${height} px-10 xl:px-0`}\r\n    >\r\n      <div\r\n        className={`absolute inset-0 z-0 overflow-hidden ${imageOverlay} ${className}`}\r\n        style={containerStyle}\r\n      ></div>\r\n      {overlay && video && (\r\n        <div className={`absolute inset-0 z-0 overflow-hidden ${className}`}>\r\n          <Video\r\n            url={video}\r\n            autoPlay\r\n            loop\r\n            muted\r\n            poster={image || undefined}\r\n            controls={false}\r\n            aspectRatio=\"fill\"\r\n          />\r\n        </div>\r\n      )}\r\n\r\n      <div\r\n        className={`relative z-1 flex ${contentFlow} gap-10 h-full lg:w-full max-w-screen-xl ${contentAlign} items-center `}\r\n      >\r\n        <div\r\n          className={`md:w-[50%] lg:ml-8 ${equalSize} ${contentMargin} ${summaryMargin}`}\r\n        >\r\n          {children}\r\n        </div>\r\n\r\n        {split && (\r\n          <div\r\n            className={`flex ${imageW} ${imageH} ${equalSize} items-center relative`}\r\n          >\r\n            {image && !video && (\r\n              <div\r\n                style={{ backgroundImage: `url(${image})` }}\r\n                className=\"h-full w-full bg-cover bg-center bg-no-repeat\"\r\n              />\r\n            )}\r\n\r\n            {video && (\r\n              <Video\r\n                url={video}\r\n                autoPlay\r\n                loop\r\n                muted\r\n                poster={image || undefined}\r\n                controls={false}\r\n                aspectRatio=\"fill\"\r\n              />\r\n            )}\r\n          </div>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n"
  },
  {
    "path": "src/components/HomePage.tsx",
    "content": "import React from \"react\";\r\nimport { Button } from \"react-daisyui\";\r\nimport Content from \"./Content\";\r\nimport FAQ from \"./FAQ\";\r\nimport FeatureSummary from \"./FeatureSummary\";\r\nimport Gallery from \"./Gallery\";\r\nimport { StageProps } from \"./helpers/Interface\";\r\nimport Hero from \"./Hero\";\r\nimport Stage from \"./Stage\";\r\nimport Video from \"./Video\";\r\n\r\nconst HomePage = ({\r\n  scale,\r\n  handleResetState,\r\n  handleMagicErase,\r\n  handleImage,\r\n  hasClicked,\r\n  setHasClicked,\r\n  handleSelectedImage,\r\n  image,\r\n  model,\r\n}: StageProps) => {\r\n  return (\r\n    <div className=\"relative flex flex-col items-center justify-center prose\">\r\n      <Hero\r\n        overlay\r\n        fullHeight\r\n        image=\"/assets/horses.png\"\r\n        className=\"opacity-40\"\r\n        bgColor=\"black\"\r\n        video=\"/assets/header.mp4\"\r\n      >\r\n        <FeatureSummary\r\n          darkMode\r\n          actions={[{ action: \"Try the demo\", actionUrl: \"/demo\" }]}\r\n          useNavLink\r\n        >\r\n          <h6>AI Computer Vision Research</h6>\r\n          <h2>\r\n            <span className=\"md:text-4xl\">\r\n              Segment Anything Model (SAM): a new AI model from Meta AI that can\r\n              \"cut out\" any object, in any image, with a single click\r\n            </span>\r\n          </h2>\r\n          <h6>\r\n            SAM is a promptable segmentation system with zero-shot\r\n            generalization to unfamiliar objects and images, without the need\r\n            for additional training.\r\n          </h6>\r\n        </FeatureSummary>\r\n      </Hero>\r\n      <Content spaceBottom spaceTop>\r\n        <FeatureSummary\r\n          centerAlign\r\n          label=\"The research\"\r\n          className=\"mx-auto md:w-[54%]\"\r\n        >\r\n          <h2>SAM uses a variety of input prompts</h2>\r\n          <h6>\r\n            Prompts specifying what to segment in an image allow for a wide\r\n            range of segmentation tasks without the need for additional\r\n            training.\r\n          </h6>\r\n        </FeatureSummary>\r\n      </Content>\r\n      <Gallery columns={3} fullWidth>\r\n        <Video\r\n          autoPlay\r\n          loop\r\n          controls={false}\r\n          url=\"/assets/section-1.1a.mp4\"\r\n          caption=\"Prompt it with interactive points and boxes.\"\r\n          className=\"mb-4 lg:mb-0\"\r\n        />\r\n        <Video\r\n          autoPlay\r\n          loop\r\n          controls={false}\r\n          url=\"/assets/section-1.1b.mp4\"\r\n          caption=\"Automatically segment everything in an image.\"\r\n          className=\"mb-4 lg:mb-0\"\r\n        />\r\n        <Video\r\n          autoPlay\r\n          loop\r\n          controls={false}\r\n          url=\"/assets/section-1.1c.mp4\"\r\n          caption=\"Generate multiple valid masks for ambiguous prompts.\"\r\n          className=\"mb-4 lg:mb-0\"\r\n        />\r\n      </Gallery>\r\n      <Content spaceTop spaceBottom centered>\r\n        <FeatureSummary centerAlign className=\"mx-auto md:w-[56%]\">\r\n          <h2>\r\n            SAM's promptable design enables flexible integration with other\r\n            systems\r\n          </h2>\r\n        </FeatureSummary>\r\n      </Content>\r\n      <Gallery columns={2} fullWidth>\r\n        <Video\r\n          autoPlay\r\n          loop\r\n          controls={false}\r\n          url=\"/assets/section-1.2a.mp4\"\r\n          caption=\"SAM can take input prompts from other systems, such as in the future taking a user's gaze from an AR/VR headset to select an object.\"\r\n          className=\"mb-4 lg:mb-0\"\r\n        />\r\n        <Video\r\n          autoPlay\r\n          loop\r\n          controls={false}\r\n          url=\"/assets/section-1.2b.mp4\"\r\n          caption=\"Bounding box prompts from an object detector can enable text-to-object segmentation.\"\r\n          className=\"mb-4 lg:mb-0\"\r\n        />\r\n      </Gallery>\r\n      <Content\r\n        imageRight=\"/assets/chairs.png\"\r\n        videoRight=\"/assets/section-1c.3.mp4\"\r\n        spaceTop\r\n        spaceBottom\r\n        centered\r\n      >\r\n        <h1>Extensible outputs</h1>\r\n        <h6>\r\n          Output masks can be used as inputs to other AI systems. For example,\r\n          object masks can be tracked in videos, enable imaging editing\r\n          applications, be{\" \"}\r\n          <a\r\n            href=\"https://mcc3d.github.io/\"\r\n            target=\"_blank\"\r\n            className=\"font-bold text-blue-600 hover:underline active:underline\"\r\n          >\r\n            lifted to 3D\r\n          </a>\r\n          , or used for creative tasks like collaging.\r\n        </h6>\r\n      </Content>\r\n      <Content\r\n        noteRight=\"SAM has learned a general notion of what objects are -- this understanding enables zero-shot generalization to unfamiliar objects and images without requiring additional training.\"\r\n        spaceTop\r\n        spaceBottom\r\n      >\r\n        <h1>Zero-shot generalization</h1>\r\n      </Content>\r\n      <Gallery spaceBottom columns={3} fullWidth>\r\n        <Video\r\n          autoPlay\r\n          loop\r\n          controls={false}\r\n          url=\"/assets/section-1.4a.mp4\"\r\n          className=\"mb-4 lg:mb-0\"\r\n        />\r\n        <Video\r\n          autoPlay\r\n          loop\r\n          controls={false}\r\n          url=\"/assets/section-1.4b.mp4\"\r\n          className=\"mb-4 lg:mb-0\"\r\n        />\r\n        <Video\r\n          autoPlay\r\n          loop\r\n          controls={false}\r\n          url=\"/assets/section-1.4c.mp4\"\r\n          className=\"mb-4 lg:mb-0\"\r\n        />\r\n      </Gallery>\r\n      <Content spaceTop spaceBottom color=\"gray\" centered>\r\n        <FeatureSummary centerAlign useNavLink label=\"Demonstration\">\r\n          <h2>Select a dog in the image</h2>\r\n          <Button className=\"my-5 text-lg font-bold\" href=\"/demo\">\r\n            <span>Go to demo</span>\r\n            <svg\r\n              width=\"36\"\r\n              height=\"36\"\r\n              viewBox=\"0 0 36 36\"\r\n              fill=\"none\"\r\n              xmlns=\"http://www.w3.org/2000/svg\"\r\n            >\r\n              <path\r\n                d=\"M20.9657 10.9997L27.9287 17.9627L20.9657 24.9258L19.7348 23.719L24.6203 18.8331L9.0001 18.8331V17.0924L24.5966 17.0924L19.7348 12.2306L20.9657 10.9997Z\"\r\n                fill=\"white\"\r\n              />\r\n            </svg>\r\n          </Button>\r\n          <Stage\r\n            scale={scale}\r\n            handleResetState={handleResetState}\r\n            handleMagicErase={handleMagicErase}\r\n            handleImage={handleImage}\r\n            hasClicked={hasClicked}\r\n            setHasClicked={setHasClicked}\r\n            handleSelectedImage={handleSelectedImage}\r\n            image={image}\r\n            isStandalone={true}\r\n            model={model}\r\n          />\r\n        </FeatureSummary>\r\n      </Content>\r\n      <Content\r\n        imageLeft=\"/assets/section-3.1a.jpg\"\r\n        videoLeft=\"/assets/section-3.1a.mp4\"\r\n        centered\r\n      >\r\n        <FeatureSummary\r\n          label=\"Training the model\"\r\n          actions={[\r\n            {\r\n              action: \"Read the blog post\",\r\n              actionUrl:\r\n                \"https://ai.facebook.com/blog/segment-anything-foundation-model-image-segmentation/\",\r\n            },\r\n          ]}\r\n        >\r\n          <h2>SAM’s data engine</h2>\r\n          <h6>\r\n            SAM's advanced capabilities are the result of its training on\r\n            millions of images and masks collected through the use of a\r\n            model-in-the-loop \"data engine.\" Researchers used SAM and its data\r\n            to interactively annotate images and update the model. This cycle\r\n            was repeated many times over to improve both the model and the\r\n            dataset.\r\n          </h6>\r\n        </FeatureSummary>\r\n      </Content>\r\n      <Content\r\n        imageRight=\"/assets/dataset.png\"\r\n        videoRight=\"/assets/section-3.1b.mp4\"\r\n        centered\r\n        reorderForMobile\r\n        spaceBottom\r\n        spaceTop\r\n      >\r\n        <FeatureSummary\r\n          actions={[\r\n            { action: \"Explore the dataset\", actionUrl: \"/dataset/index.html\" },\r\n            {\r\n              action: \"Download full dataset\",\r\n              actionUrl: \"https://ai.facebook.com/datasets/segment-anything/\",\r\n            },\r\n          ]}\r\n        >\r\n          <h2>11M images, 1B+ masks</h2>\r\n          <h6>\r\n            After annotating enough masks with SAM’s help, we were able to\r\n            leverage SAM’s sophisticated ambiguity-aware design to annotate new\r\n            images fully automatically. To do this, we present SAM with a grid\r\n            of points on an image and ask SAM to segment everything at each\r\n            point. Our final dataset includes more than 1.1 billion segmentation\r\n            masks collected on ~11 million licensed and privacy preserving\r\n            images.\r\n          </h6>\r\n        </FeatureSummary>\r\n      </Content>\r\n      <Content\r\n        imageLeft=\"/assets/section-3.1c.png\"\r\n        videoLeft=\"/assets/section-3.1c.mp4\"\r\n        centered\r\n        spaceBottom\r\n        spaceTop\r\n      >\r\n        <FeatureSummary\r\n          actions={[\r\n            {\r\n              action: \"Read the paper\",\r\n              actionUrl: \"https://arxiv.org/abs/2304.02643\",\r\n            },\r\n          ]}\r\n        >\r\n          <h2>Efficient & flexible model design</h2>\r\n          <h6>\r\n            SAM is designed to be efficient enough to power its data engine. We\r\n            decoupled the model into 1) a one-time image encoder and 2) a\r\n            lightweight mask decoder that can run in a web-browser in just a few\r\n            milliseconds per prompt.\r\n          </h6>\r\n        </FeatureSummary>\r\n      </Content>\r\n      <Content spaceTop>\r\n        <h2>Frequently asked questions</h2>\r\n      </Content>\r\n      <Content centered spaceBottom className=\"flex flex-col gap-8 md:flex-row\">\r\n        <div className=\"flex flex-col md:flex-row gap-x-8\">\r\n          <div className=\"md:max-w-[50%]\">\r\n            <FAQ question=\"What type of prompts are supported?\">\r\n              <ul>\r\n                <li>Foreground/background points</li>\r\n                <li>Bounding box</li>\r\n                <li>Mask</li>\r\n                <li>\r\n                  Text prompts are explored in our paper but the capability is\r\n                  not released\r\n                </li>\r\n              </ul>\r\n            </FAQ>\r\n            <FAQ question=\"What is the structure of the model?\">\r\n              <ul>\r\n                <li>\r\n                  A ViT-H image encoder that runs once per image and outputs an\r\n                  image embedding\r\n                </li>\r\n                <li>\r\n                  A prompt encoder that embeds input prompts such as clicks or\r\n                  boxes\r\n                </li>\r\n                <li>\r\n                  A lightweight transformer based mask decoder that predicts\r\n                  object masks from the image embedding and prompt embeddings\r\n                </li>\r\n              </ul>\r\n            </FAQ>\r\n            <FAQ question=\"What platforms does the model use?\">\r\n              <ul>\r\n                <li>\r\n                  The image encoder is implemented in PyTorch and requires a GPU\r\n                  for efficient inference.\r\n                </li>\r\n                <li>\r\n                  The prompt encoder and mask decoder can run directly with\r\n                  PyTroch or converted to ONNX and run efficiently on CPU or GPU\r\n                  across a variety of platforms that support ONNX runtime.\r\n                </li>\r\n              </ul>\r\n            </FAQ>\r\n            <FAQ question=\"How big is the model?\">\r\n              <ul>\r\n                <li>The image encoder has 632M parameters.</li>\r\n                <li>The prompt encoder and mask decoder have 4M parameters.</li>\r\n              </ul>\r\n            </FAQ>\r\n            <FAQ\r\n              question=\"How long does inference take?\"\r\n              className=\"md:border-b\"\r\n            >\r\n              <ul>\r\n                <li>\r\n                  The image encoder takes ~0.15 seconds on an NVIDIA A100 GPU.\r\n                </li>\r\n                <li>\r\n                  The prompt encoder and mask decoder take ~50ms on CPU in the\r\n                  browser using multithreaded SIMD execution.\r\n                </li>\r\n              </ul>\r\n            </FAQ>\r\n          </div>\r\n          <div className=\"md:max-w-[50%]\">\r\n            <FAQ question=\"What data was the model trained on?\">\r\n              <ul>\r\n                <li>\r\n                  The model was trained on our SA-1B dataset. See our{\" \"}\r\n                  <a\r\n                    href=\"https://segment-anything.com/dataset/index.html\"\r\n                    target={\"_blank\"}\r\n                  >\r\n                    dataset viewer.\r\n                  </a>\r\n                </li>\r\n              </ul>\r\n            </FAQ>\r\n            <FAQ question=\"How long does it take to train the model?\">\r\n              <ul>\r\n                <li>The model was trained for 3-5 days on 256 A100 GPUs.</li>\r\n              </ul>\r\n            </FAQ>\r\n            <FAQ question=\"Does the model produce mask labels?\">\r\n              <ul>\r\n                <li>\r\n                  No, the model predicts object masks only and does not generate\r\n                  labels.\r\n                </li>\r\n              </ul>\r\n            </FAQ>\r\n            <FAQ question=\"Does the model work on videos?\">\r\n              <ul>\r\n                <li>\r\n                  Currently the model only supports images or individual frames\r\n                  from videos.\r\n                </li>\r\n              </ul>\r\n            </FAQ>\r\n            <FAQ question=\"Where can I find the code?\" className=\"border-b\">\r\n              <ul>\r\n                <li>\r\n                  Code is available on{\" \"}\r\n                  <a\r\n                    href=\"https://github.com/facebookresearch/segment-anything\"\r\n                    target={\"_blank\"}\r\n                  >\r\n                    GitHub\r\n                  </a>\r\n                </li>\r\n              </ul>\r\n            </FAQ>\r\n          </div>\r\n        </div>\r\n      </Content>\r\n      <Content spaceTop color=\"gray\" centered>\r\n        <h2 className=\"text-center\">Acknowledgements</h2>\r\n      </Content>\r\n      <Gallery columns={2} fullWidth color=\"gray\" spaceBottom>\r\n        <div>\r\n          <span className=\"font-bold\">Research Authors</span>\r\n          <h6>\r\n            Alexander Kirillov<sup>1,2,4</sup> Eric Mintun<sup>2</sup>, Nikhila\r\n            Ravi\r\n            <sup>1,2</sup>, Hanzi Mao<sup>2</sup>, Chloe Rolland<sup>3</sup>,\r\n            Laura Gustafson<sup>3</sup>, Tete Xiao<sup>3</sup>, Spencer\r\n            Whitehead, Alex Berg, Wan-Yen Lo, Piotr Dollar<sup>4</sup>, Ross\r\n            Girshick\r\n            <sup>4</sup>\r\n          </h6>\r\n          <p className=\"text-xs\">\r\n            <sup>1</sup> project lead, <sup>2</sup> joint first author,{\" \"}\r\n            <sup>3</sup> equal contribution, <sup>4</sup> directional lead\r\n          </p>\r\n        </div>\r\n        <div>\r\n          <span className=\"font-bold\">\r\n            Project Contributors (alphabetical):\r\n          </span>\r\n          <h6>\r\n            Aaron Adcock, Vaibhav Aggarwal, Morteza Behrooz, Cheng-Yang Fu,\r\n            Ashley Gabriel, Ahuva Goldstand, Allen Goodman, Sumanth Gurram,\r\n            Jiabo Hu, Somya Jain, Devansh Kukreja, Robert Kuo, Joshua Lane,\r\n            Yanghao Li, Lilian Luong, Jitendra Malik, Mallika Malhotra, William\r\n            Ngan, Omkar Parkhi, Nikhil Raina, Dirk Rowe, Neil Seejoor, Vanessa\r\n            Stark, Bala Varadarajan, Bram Wasti, Zachary Winstrom\r\n          </h6>\r\n        </div>\r\n      </Gallery>\r\n      <Content spaceBottom spaceTop>\r\n        <FeatureSummary\r\n          actions={[{ action: \"Sign up\", actionUrl: \"/\" }]}\r\n          centerAlign\r\n          justifyCenter\r\n        >\r\n          <h2>\r\n            Our latest updates <br className=\"hidden md:inline\"></br>\r\n            delivered to your inbox\r\n          </h2>\r\n          <h6>\r\n            Sign up to receive our newsletter and be the first to know{\" \"}\r\n            <br className=\"hidden md:inline\"></br>\r\n            about Meta Al news, events, research breakthroughs,{\" \"}\r\n            <br className=\"hidden md:inline\"></br>\r\n            and more.\r\n          </h6>\r\n        </FeatureSummary>\r\n      </Content>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default HomePage;\r\n"
  },
  {
    "path": "src/components/ImagePicker.tsx",
    "content": "import React, { useContext, useEffect, useLayoutEffect, useState } from \"react\";\r\nimport { Button, Checkbox } from \"react-daisyui\";\r\nimport { useDropzone } from \"react-dropzone\";\r\nimport PhotoAlbum from \"react-photo-album\";\r\nimport { NavLink } from \"react-router-dom\";\r\nimport photos from \"./helpers/photos\";\r\nimport AppContext from \"./hooks/createContext\";\r\nexport interface ImagePickerProps {\r\n  handleSelectedImage: (\r\n    data: File | URL,\r\n    options?: { shouldDownload?: boolean; shouldNotFetchAllModel?: boolean }\r\n  ) => void;\r\n  showGallery: [showGallery: boolean, setShowGallery: (e: boolean) => void];\r\n}\r\n\r\nconst LegalModal = () => {\r\n  return (\r\n    <div className=\"modal\" id=\"my-modal-2\">\r\n      <div className=\"modal-box\">\r\n        <div className=\"flex flex-row justify-between mb-2 text-sm\">\r\n          <span>Legal Nav</span>\r\n          <span>\r\n            <a href=\"#\" className=\"font-bold\">\r\n              Close\r\n            </a>\r\n          </span>\r\n        </div>\r\n        <div className=\"h-40 m-1 bg-black\"></div>\r\n        <h3 className=\"my-2 text-2xl\">Legal</h3>\r\n        <p>Legal Text</p>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nconst ImagePicker = ({\r\n  handleSelectedImage,\r\n  showGallery: [showGallery, setShowGallery],\r\n}: ImagePickerProps) => {\r\n  const [error, setError] = useState<string>(\"\");\r\n  const [isLoadedCount, setIsLoadedCount] = useState(0);\r\n  const [acceptedTerms, setAcceptedTerms] = useState(false);\r\n  const {\r\n    enableDemo: [enableDemo, setEnableDemo],\r\n  } = useContext(AppContext)!;\r\n\r\n  const isMobile = window.innerWidth < 768;\r\n\r\n  const downloadAllImageResponses = () => {\r\n    photos.forEach((photo, i) => {\r\n      setTimeout(() => {\r\n        handleSelectedImage(new URL(photo.src, location.origin), {\r\n          shouldDownload: true,\r\n        });\r\n      }, i * 30000);\r\n    });\r\n  };\r\n\r\n  const handleAttemptContinue = () => {\r\n    setAcceptedTerms(true);\r\n    setTimeout(() => setEnableDemo(true), 500);\r\n  };\r\n\r\n  const { getRootProps, getInputProps } = useDropzone({\r\n    accept: {\r\n      \"image/png\": [\".png\"],\r\n      \"image/jpeg\": [\".jpeg\", \".jpg\"],\r\n    },\r\n    onDrop: (acceptedFile) => {\r\n      try {\r\n        if (acceptedFile.length === 0) {\r\n          setError(\"File not accepted! Try again.\");\r\n          return;\r\n        }\r\n        if (acceptedFile.length > 1) {\r\n          setError(\"Too many files! Try again with 1 file.\");\r\n          return;\r\n        }\r\n        const reader = new FileReader();\r\n        reader.onloadend = () => {\r\n          handleSelectedImage(acceptedFile[0]);\r\n        };\r\n        reader.readAsDataURL(acceptedFile[0]);\r\n      } catch (error) {\r\n        console.log(error);\r\n      }\r\n    },\r\n    maxSize: 50_000_000,\r\n  });\r\n\r\n  const StarterModal = () => {\r\n    return (\r\n      <div\r\n        className=\"fixed top-0 bottom-0 left-0 right-0 flex items-center justify-center w-full h-full z-1000 bg-gray-300/90\"\r\n        id=\"modal-terms\"\r\n      >\r\n        <div className=\"modal-box align-middle h-min shadow-[0px_0px_20px_10px_#00000024]\">\r\n          <div className=\"flex justify-between\">\r\n            <h4 className=\"text-lg text-center text-bold\">Before you begin</h4>\r\n            <span>\r\n              <a href=\"#\" className=\"font-bold\">\r\n                <NavLink to={\"/\"}>Close</NavLink>\r\n              </a>\r\n            </span>\r\n          </div>\r\n          <ul className=\"px-6 pt-6 list-disc\">\r\n            <li className=\"p-1\">\r\n              This is a <strong>research demo </strong>and may not be used for\r\n              any commercial purpose\r\n            </li>\r\n            <li className=\"p-1\">\r\n              Any images uploaded will be used solely to demonstrate the Segment\r\n              Anything Model. All images and any data derived from them will be\r\n              deleted at the end of the session.\r\n            </li>\r\n            <li className=\"p-1\">\r\n              Any images uploaded should not violate any intellectual property\r\n              rights or Facebook's Community Standards.\r\n            </li>\r\n          </ul>\r\n\r\n          <div className=\"flex flex-row m-4 md:mt-6 md:mb-6\">\r\n            <Checkbox\r\n              className=\"mt-1 mr-2\"\r\n              checked={acceptedTerms}\r\n              onChange={() => handleAttemptContinue()}\r\n            />\r\n            <div>\r\n              <div className=\"pb-4\">\r\n                <span>\r\n                  I have read and agree to the Segment Anything{\" \"}\r\n                  <NavLink className=\"underline\" to={\"/terms\"}>\r\n                    Terms and Conditions\r\n                  </NavLink>\r\n                </span>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  const image = ({ imageProps }: { imageProps: any }) => {\r\n    const { src, key, style, onClick } = imageProps;\r\n    return (\r\n      <img\r\n        className=\"m-0 lg:hover:opacity-50 active:opacity-50\"\r\n        key={key}\r\n        src={src}\r\n        style={style}\r\n        onClick={(e: any) => onClick!(e, { index: 0 })}\r\n        onLoad={() => {\r\n          setIsLoadedCount((prev) => prev + 1);\r\n        }}\r\n      ></img>\r\n    );\r\n  };\r\n\r\n  return (\r\n    <div className=\"pt-6 mx-4\">\r\n      {/*!enableDemo && <StarterModal />*/}\r\n      {/* <Button onClick={downloadAllImageResponses}>\r\n        Download All Image Responses\r\n      </Button> */}\r\n      <div className=\"flex flex-row py-5 text-sm align-middle md:text-lg\">\r\n        {/* <AiOutlineArrowDown className=\"mr-2\" /> */}\r\n        <div className=\"flex items-center\">\r\n          <svg\r\n            width=\"8\"\r\n            height=\"10\"\r\n            viewBox=\"0 0 8 10\"\r\n            fill=\"none\"\r\n            xmlns=\"http://www.w3.org/2000/svg\"\r\n            className=\"mr-2\"\r\n          >\r\n            <path\r\n              d=\"M8 6.32142L4 10L0 6.32142L0.69323 5.67114L3.5 8.25215L3.5 0H4.5L4.5 8.23964L7.29289 5.67114L8 6.32142Z\"\r\n              fill=\"#1C2B33\"\r\n            />\r\n          </svg>\r\n          <span>Find a photo in the gallery, or</span>\r\n          <span {...getRootProps()}>\r\n            <input {...getInputProps()} />\r\n            <button className=\"ml-1 text-blue-700 underline\">\r\n              Upload an image\r\n            </button>\r\n          </span>\r\n        </div>\r\n      </div>\r\n      <div\r\n        className={`h-full w-full overflow-y-scroll pb-20 ${\r\n          showGallery ? \"fade-in\" : \"\"\r\n        }`}\r\n      >\r\n        <PhotoAlbum\r\n          layout={isMobile ? \"columns\" : \"rows\"}\r\n          photos={photos}\r\n          columns={1}\r\n          onClick={(e: any) => handleSelectedImage(e.event.target.src)}\r\n          renderPhoto={image}\r\n        />\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default ImagePicker;\r\n"
  },
  {
    "path": "src/components/LegalText.tsx",
    "content": "import React from \"react\";\r\nfunction LegalText() {\r\n  return (\r\n    <div className=\"prose\">\r\n      <h1>Segment Anything Terms of Use</h1>\r\n      <p>Last Updated: Mar, 2023</p>\r\n      <p>\r\n        Segment Anything is a research project from FAIR which includes a\r\n        dataset and model for image segmentation, as well as a research demo of\r\n        the model capabilities. These Terms of Use ( \"Terms\" ) govern the use of\r\n        the Segment Anything website available at www.segment-anything.com\r\n        (together with any content or other materials hosted or made available\r\n        thereon (including the Segment Anything Materials), and any successor\r\n        site(s) thereto, the \" Website \"). These Terms constitute an agreement\r\n        between you and us, so it is important that you review them carefully.\r\n        By accessing the Website, or downloading materials made available on\r\n        this Website, or generally when you access any page, document or file\r\n        that links to these Terms, you accept and agree to be bound by both\r\n        these Terms and our Data Policy available at{\" \"}\r\n        <a href=\"https://www.facebook.com/privacy/policy/?entry_point=segment_anything_page\">\r\n          https://www.facebook.com/privacy/policy/?entry_point=segment_anything_page\r\n        </a>\r\n        . These Terms hereby incorporate by this reference any additional terms\r\n        and conditions posted by us through the Website.\r\n      </p>\r\n\r\n      <p>\r\n        If you are an individual accessing or using the website on behalf of, or\r\n        for the benefit of, any corporation, partnership or other entity with\r\n        which you are associated (an \"organization\"), then you are agreeing to\r\n        these terms on behalf of yourself and such organization, and you\r\n        represent and warrant that you have the legal authority to bind such\r\n        organization to these terms. References to \"you\" and \"your\" in these\r\n        Terms will refer to both the individual using the Website and to any\r\n        such organization.\r\n      </p>\r\n\r\n      <h3>Content</h3>\r\n      <p>\r\n        The Website is available for non-commercial use and for informational\r\n        purposes only, provided however that, subject to your compliance with\r\n        these Terms, to the extent permitted by applicable law, Segment Anything\r\n        Materials made available to you through the Website may be used by you,\r\n        including for commercial purposes, pursuant to the Creative Commons\r\n        Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license, as\r\n        described below. If you are an individual, you may not access or use the\r\n        Website unless you are at least 18 years old or, if you reside in a\r\n        jurisdiction in which the age of majority is higher than age 18, the age\r\n        of majority in such jurisdiction.\r\n      </p>\r\n      <p>\r\n        WE MAKE NO REPRESENTATIONS OR WARRANTIES OF ANY KIND AS TO THE ACCURACY,\r\n        CURRENCY, OR COMPLETENESS OF THE INFORMATION AND OTHER MATERIALS MADE\r\n        AVAILABLE THROUGH THE WEBSITE, INCLUDING ANY SEGMENT ANYTHING MATERIALS.\r\n        WE ARE NOT LIABLE FOR ANY DECISIONS YOU MAY MAKE IN RELIANCE ON SUCH\r\n        INFORMATION OR OTHER MATERIALS.\r\n      </p>\r\n\r\n      <h3>Your Commitments</h3>\r\n\r\n      <p>By accessing the Website, you confirm that:</p>\r\n      <ol>\r\n        <li>\r\n          if you are an individual (rather than an organization), you are at or\r\n          above the age of majority in the jurisdiction in which you reside;\r\n        </li>\r\n        <li>\r\n          you are not prohibited under applicable laws from receiving any of\r\n          information or other materials, including the Segment Anything\r\n          Materials, hosted on or made available through the Website; and\r\n        </li>\r\n        <li>\r\n          if you are agreeing to be bound by these Terms on behalf of your\r\n          employer or other organization, you represent and warrant to Meta that\r\n          you have full legal authority to bind your employer or such\r\n          organization to these Terms.\r\n        </li>\r\n      </ol>\r\n      <h3>User Content</h3>\r\n\r\n      <p>\r\n        \" User Content \" means any information and content that you submit to,\r\n        or use with, the Website (including any images you may upload). Examples\r\n        include any photos or other media or content. For clarity, \"User\r\n        Content\" does not include Segment Anything Materials or any other Meta\r\n        information or content, even if such information or content is\r\n        referenced in your User Content.\r\n      </p>\r\n\r\n      <p>\r\n        You are solely responsible for, and assume all risks associated with,\r\n        your User Content. You should not submit any User Content that infringes\r\n        on the copyright, trademark, patent, or other intellectual property\r\n        rights of any third party, that is false, misleading, libelous,\r\n        defamatory, obscene, abusive, hateful, or sexually-explicit, that\r\n        violates a third party's right to privacy or publicity, or degrades\r\n        others on the basis of gender, race, class, ethnicity, national origin,\r\n        religion, sexual preference, disability, or other classification. You\r\n        should not submit any User Content that contains information relating to\r\n        an identified or identifiable individual, but if you do you represent\r\n        that such individual has consented to your use of such information, that\r\n        your collection and use of such information complies with all applicable\r\n        laws and regulations, and you remain responsible for any disclosure of\r\n        your User Content, including any such disclosure that personally\r\n        identifies you or any third party. Further, in using the Website, you\r\n        agree to comply with Facebook's Community Standards (the \"Community\r\n        Standards\", available at{\" \"}\r\n        <a href=\"https://transparency.fb.com/policies/community-standards\">\r\n          https://transparency.fb.com/policies/community-standards\r\n        </a>{\" \"}\r\n        (as may be updated from time to time), which is hereby incorporated by\r\n        reference. Meta reserves the right to terminate your right to use and\r\n        access the Segment Anything Website or Segment Anything Materials,\r\n        including for violations of the Community Standards.\r\n      </p>\r\n\r\n      <p>\r\n        Unless otherwise expressly specified in these Terms, we are not\r\n        obligated to backup any User Content. You are solely responsible for\r\n        creating and maintaining your own backup copies of your User Content if\r\n        you desire.\r\n      </p>\r\n      <p>\r\n        We reserve the right (but have no obligation) to review any User\r\n        Content, and to investigate and/or take appropriate action against you\r\n        in our sole discretion if you violate any other provision of these Terms\r\n        (as determined by us).\r\n      </p>\r\n\r\n      <h3>Segment Anything Materials</h3>\r\n      <p>\r\n        Notwithstanding anything to the contrary in these Terms, subject to your\r\n        compliance with these Terms, the Segment Anything Materials made\r\n        available to you via the Website are licensed by us to you under the\r\n        Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)\r\n        license (the \" License \"); a copy of this License is available at [\r\n        <a href=\"https://creativecommons.org/licenses/by-sa/4.0/legalcode\">\r\n          https://creativecommons.org/licenses/by-sa/4.0/legalcode\r\n        </a>\r\n        , and a summary of the License is available at\r\n        <a href=\"https://creativecommons.org/licenses/by-sa/4.0\">\r\n          https://creativecommons.org/licenses/by-sa/4.0\r\n        </a>\r\n        ]. Upon termination of these Terms or your access to the Website, the\r\n        License will also terminate.\r\n      </p>\r\n\r\n      <h3>Ownership</h3>\r\n      <p>\r\n        Excluding any User Content that you may provide, you acknowledge that\r\n        all intellectual property rights, including copyrights, patents,\r\n        trademarks, and trade secrets, in the Website, including the Segment\r\n        Anything Materials, are owned by us, our suppliers, partners and/or\r\n        third party licensors. For the avoidance of doubt, Meta does not claim\r\n        ownership of your User Content.\r\n      </p>\r\n      <p>\r\n        You retain ownership of your intellectual property rights (e.g.,\r\n        copyrights or trademarks) in your User Content. Nothing in these Terms\r\n        transfers ownership of your User Content to Meta.\r\n      </p>\r\n      <p>\r\n        Without limiting any of the above, we have the right (though not the\r\n        obligation) to, in our sole discretion, reject, block or remove any User\r\n        Content, or terminate, suspend or deny access to and use of the Website\r\n        to any individual or organization for any reason, in our sole\r\n        discretion.\r\n      </p>\r\n      <p>\r\n        Except as expressly set forth herein, neither these Terms nor your\r\n        access to the Website transfers to you or any third party any rights,\r\n        title or interest in or to any intellectual property rights in the\r\n        Website. We reserve all rights not expressly granted to you in these\r\n        Terms.\r\n      </p>\r\n      <h3>Prohibited Conduct</h3>\r\n      <p>\r\n        You may not access or use, or attempt to access or use, the Website\r\n        (including the Segment Anything Materials) to take any action that could\r\n        harm us, other Website users or any other third party, interfere with\r\n        the operation of the Website, or use the Website in a manner that\r\n        violates any laws. For example, and without limitation, you may not:\r\n      </p>\r\n\r\n      <ol>\r\n        <li>\r\n          impersonate any person or organization or otherwise misrepresent your\r\n          affiliation or the origin of any information or materials you submit\r\n        </li>\r\n        <li>\r\n          engage in unauthorized spidering, \"scraping,\" or harvesting of content\r\n          or information, or use any other unauthorized automated means to\r\n          compile information from the Website;\r\n        </li>\r\n        <li>\r\n          take any action that imposes an unreasonable or disproportionately\r\n          large load on our network or infrastructure;\r\n        </li>\r\n        <li>\r\n          use any device, software, or routine to interfere or attempt to\r\n          interfere with the proper working of the Website or any activity\r\n          conducted on the Website or attempt to probe, scan, test the\r\n          vulnerability of, or breach the security of any system or network;\r\n        </li>\r\n        <li>\r\n          attempt to decipher, decompile, disassemble, or reverse-engineer any\r\n          of the software or code comprising or in any way making up a part of\r\n          the Website;\r\n        </li>\r\n        <li>\r\n          distribute any unauthorized materials or advertise or promote goods or\r\n          services without our permission (including, without limitation, by\r\n          sending spam);\r\n        </li>\r\n        <li>\r\n          submit content that infringes on the copyright, trademark, patent, or\r\n          other intellectual property rights of any third party, are false,\r\n          misleading, libelous, defamatory, obscene, abusive, hateful, or\r\n          sexually-explicit, violate a third party's right to privacy or\r\n          publicity, or degrade others on the basis of gender, race, class,\r\n          ethnicity, national origin, religion, sexual preference, disability,\r\n          or other classification; and\r\n        </li>\r\n        <li>\r\n          engage in any other conduct that restricts or inhibits any person from\r\n          using or enjoying the Website, or that, in our sole judgment, exposes\r\n          us or any of our users, affiliates, or any other third party to any\r\n          liability, damages, or detriment of any type.\r\n        </li>\r\n      </ol>\r\n      <p>\r\n        In addition, you may not use our Website (including the Segment Anything\r\n        Materials), or do or share anything, that:\r\n      </p>\r\n      <ol>\r\n        <li>\r\n          violates these Terms, and other terms and policies that apply to your\r\n          use of the Website;\r\n        </li>\r\n        <li>\r\n          is unlawful in any country, misleading, discriminatory or fraudulent;\r\n          or\r\n        </li>\r\n        <li>\r\n          infringes or violates someone else's rights, including their\r\n          intellectual property rights.\r\n        </li>\r\n      </ol>\r\n      <p>\r\n        We may investigate and work with law enforcement authorities to\r\n        prosecute users who violate applicable laws or regulations in connection\r\n        with their use of the Website (including the Segment AnythingMaterials).\r\n        Violations of system or network security may result in civil or criminal\r\n        liability, or termination or suspension of your access to the Website\r\n        and/or your account (if applicable).\r\n      </p>\r\n      <p>\r\n        To help support our community, we encourage you to report to us any\r\n        content or conduct that you believe violates your rights (including\r\n        intellectual property rights) or our Terms and policies.\r\n      </p>\r\n      <h3>Copyright</h3>\r\n      <p>\r\n        We respect intellectual property rights. If you believe in good faith\r\n        that your work has been reproduced or is accessible on the Website in a\r\n        way that constitutes copyright infringement, please provide our\r\n        designated agent with the following information in writing:\r\n      </p>\r\n      <ol>\r\n        <li>\r\n          identification of the copyrighted work or a representative list of\r\n          copyrighted works claimed to have been infringed;\r\n        </li>\r\n        <li>\r\n          identification of the allegedly infringing material and information\r\n          reasonably sufficient to permit us to locate the material;\r\n        </li>\r\n        <li>\r\n          your name, address and a daytime telephone number, and an email\r\n          address if available, so that we may contact you if necessary;\r\n        </li>\r\n        <li>\r\n          a statement that the information in the notification is accurate, and\r\n          under penalty of perjury, that the complaining party is authorized to\r\n          act on behalf of the owner of an exclusive right that is allegedly\r\n          infringed;\r\n        </li>\r\n        <li>\r\n          a statement that you have a good faith belief that the use of the\r\n          material in the manner complained of is not authorized by the\r\n          copyright owner, its agent, or the law; and\r\n        </li>\r\n        <li>\r\n          a physical or electronic signature of a person authorized to act on\r\n          behalf of the owner of the exclusive right that is allegedly\r\n          infringed.\r\n        </li>\r\n      </ol>\r\n\r\n      <p>Our designated agent may be reached by contacting:</p>\r\n      <p>\r\n        Meta Platforms Designated Agent, Meta Platforms, Inc.\r\n        <br /> 1601 Willow Road\r\n        <br />\r\n        Menlo Park, CA 94025\r\n        <br /> (650) 543-4800\r\n        <br />\r\n        <a href=\"mailto:ip@fb.com\">ip@fb.com</a>\r\n      </p>\r\n\r\n      <p>\r\n        Upon receipt of a valid notice of claimed infringement or any statement\r\n        in conformance with 17 U.S.C. § 512(c)(3), we will expeditiously remove\r\n        or disable access to the allegedly infringing content. We will terminate\r\n        the privileges of users who repeatedly infringe copyright.\r\n      </p>\r\n      <h3> Termination and Suspension </h3>\r\n\r\n      <p>\r\n        These Terms are effective until terminated. We may terminate or suspend\r\n        your use of the Website (including any Segment Anything Materials)\r\n        and/or your account at any time and without prior notice, for any\r\n        reason, including if we believe that you have violated or acted\r\n        inconsistently with the letter or spirit of these Terms. Upon any such\r\n        termination or suspension, your right to use the Website and the Segment\r\n        Anything Materials will immediately cease, and we may, without liability\r\n        to you or any third party, remove your access to the Website and all\r\n        associated materials, without any obligation to provide any further\r\n      </p>\r\n      <h3> Limitation of liability </h3>\r\n      <p>\r\n        YOUR USE OF THE WEBSITE (INCLUDING THE SEGMENT ANYTHING MATERIALS AND\r\n        USER CONTENT) IS AT YOUR OWN RISK. THE WEBSITE AND ITS RESPECTIVE\r\n        CONTENT ARE PROVIDED \"AS IS\" WITHOUT WARRANTIES OF ANY KIND, EITHER\r\n        EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES OF\r\n        MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR\r\n        OTHER VIOLATION OF RIGHTS. WE DO NOT WARRANT THE AVAILABILITY, ADEQUACY,\r\n        CURRENCY, ACCURACY, LIKELY RESULTS, OR COMPLETENESS OF THE USER CONTENT,\r\n        THE WEBSITE (INCLUDING THE SEGMENT ANYTHING MATERIALS) OR ANY\r\n        THIRD-PARTY SITES LINKED TO OR FROM THE WEBSITE, OR THAT THE FUNCTIONS\r\n        AND CONTENT PROVIDED WILL BE UNINTERRUPTED, VIRUS, OR ERROR-FREE.\r\n      </p>\r\n      <p>\r\n        WE EXPRESSLY DISCLAIM ANY LIABILITY FOR ANY ERRORS OR OMISSIONS IN THE\r\n        CONTENT INCLUDED ON THE WEBSITE, INCLUDING THE SEGMENT ANYTHING\r\n        MATERIALS AND USER CONTENT. WE DO NOT CONTROL OR DIRECT WHAT PEOPLE AND\r\n        OTHERS DO, SAY OR UPLOAD TO THE WEBSITE, AND WE ARE NOT RESPONSIBLE FOR\r\n        THEIR ACTIONS OR CONDUCT (WHETHER ONLINE OR OFFLINE) OR ANY CONTENT THEY\r\n        SHARE (INCLUDING OFFENSIVE, INAPPROPRIATE, OBSCENE, UNLAWFUL, AND OTHER\r\n        OBJECTIONABLE CONTENT). SOME JURISDICTIONS MAY NOT ALLOW THE EXCLUSION\r\n        OF IMPLIED WARRANTIES, SO SOME OF THE ABOVE EXCLUSIONS MAY NOT APPLY TO\r\n        YOU.\r\n      </p>\r\n      <p>\r\n        IN NO EVENT WILL WE, OR OUR PARENTS, SUBSIDIARIES, AFFILIATES,\r\n        DIRECTORS, OFFICERS, EMPLOYEES, AGENTS, AND ASSIGNS BE LIABLE FOR ANY\r\n        INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL OR PUNITIVE DAMAGES, LOST\r\n        PROFITS, OR OTHER DAMAGES WHATSOEVER ARISING IN CONNECTION WITH THESE\r\n        TERMS, THE USER CONTENT OR THE WEBSITE (INCLUDING THE SEGMENT ANYTHING\r\n        MATERIALS), ANY INTERRUPTION IN AVAILABILITY OF THE WEBSITE, DELAY IN\r\n        OPERATION OR TRANSMISSION, COMPUTER VIRUS, LOSS OF DATA, OR USE, MISUSE,\r\n        RELIANCE, REVIEW, MANIPULATION, OR OTHER UTILIZATION IN ANY MANNER\r\n        WHATSOEVER OF THE WEBSITE, OR THE DATA COLLECTED THROUGH THE WEBSITE,\r\n        EVEN IF ONE OR MORE OF THEM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\r\n        DAMAGES OR LOSS. OUR AGGREGATE LIABILITY ARISING OUT OF OR RELATING TO\r\n        THESE TERMS, THE SEGMENT ANYTHING MATERIALS, USER CONTENT OR THE WEBSITE\r\n        WILL NOT EXCEED THE GREATER OF ONE HUNDRED U.S. DOLLARS (\\$100).\r\n      </p>\r\n      <h3> Indemnification </h3>\r\n      <p>\r\n        You agree to indemnify, defend, and hold us and our subsidiaries,\r\n        affiliates and parent company, and our and their respective directors,\r\n        officers, employees, agents and assigns, harmless from and against any\r\n        and all losses, costs, expenses (including reasonable attorneys' fees\r\n        and expenses), claims, causes of action, proceedings, investigations,\r\n        damages, and liabilities arising from, related to or associated with\r\n        your User Content, your access to or use of the Website (including the\r\n        Segment Anything Materials and other content, including content\r\n        submitted by other users) and any alleged violation by you of these\r\n        Terms. We reserve the right to assume the exclusive defense of any claim\r\n        for which we are entitled to indemnification under this section. In such\r\n        event, you shall provide us with such cooperation as we reasonably\r\n        request.\r\n      </p>\r\n      <h3> Modification </h3>\r\n\r\n      <p>\r\n        We may change these Terms from time to time by notifying you of such\r\n        changes by any reasonable means, including by posting revised Terms\r\n        through the Website. Any such changes will not apply to any dispute\r\n        between you and us arising prior to the date on which we posted the\r\n        revised Terms incorporating such changes, or otherwise notified you of\r\n        such changes. Your use of the Website (including any Segment Anything\r\n        Materials) following any changes to these Terms will constitute your\r\n        acceptance of such changes. The \"Last Updated\" legend above indicates\r\n        when these Terms were last changed.\r\n      </p>\r\n\r\n      <p>\r\n        We reserve the right, at any time, to modify, suspend, or discontinue\r\n        all or any elements of the Website (in whole or in part, including the\r\n        Segment Anything Materials) with or without notice to you. You agree\r\n        that we will not be liable to you or to any third party for any such\r\n        modification, suspension, or discontinuation.\r\n      </p>\r\n      <h3> Third Party Materials </h3>\r\n      <p>\r\n        The Website may contain links to third party content or otherwise\r\n        contain materials that are hosted by another party. We do not control,\r\n        endorse, sponsor, recommend, or otherwise accept responsibility for such\r\n        content, your use thereof or your access thereto.\r\n      </p>\r\n      <p>\r\n        YOUR ACCESS THESE MATERIALS AT YOUR OWN RISK. AND IS SUBJECT TO ANY\r\n        ADDITIONAL TERMS, CONDITIONS AND POLICIES APPLICABLE TO SUCH THIRD-PARTY\r\n        MATERIALS (SUCH AS TERMS OF SERVICE OR PRIVACY POLICIES OF THE PROVIDERS\r\n        OF SUCH THIRD PARTY MATERIALS)\r\n      </p>\r\n\r\n      <h3> Miscellaneous </h3>\r\n      <ol>\r\n        <li>\r\n          You acknowledge and agree that we have no obligation to provide you\r\n          with any support or maintenance in connection with your use of the\r\n          Website.\r\n        </li>\r\n        <li>\r\n          The use of the Website involves the transmission of data through your\r\n          device or network service provider in the case of a mobile device.\r\n          Your network service provider may charge you for this data\r\n          transmission. You are responsible for any and all costs related to\r\n          your use of your device or network service provider.\r\n        </li>\r\n        <li>\r\n          We appreciate your feedback and other suggestions about the Website.\r\n          If you submit to us any feedback or suggestions, we may use and fully\r\n          exploit them in any manner that we deem appropriate, without any\r\n          restriction or obligation to compensate or credit you. We will treat\r\n          any feedback or other suggestions as non-confidential and\r\n          non-proprietary. You should not submit to us any information or ideas\r\n          that you consider to be confidential or proprietary.\r\n        </li>\r\n        <li>\r\n          These Terms make up the entire agreement regarding your use of the\r\n          Website. If any portion of these Terms is found to be unenforceable,\r\n          the remaining portion will remain in full force and effect. If we fail\r\n          to enforce any of these Terms, it will not be considered a waiver. Any\r\n          amendment to or waiver of these Terms must be made in writing and\r\n          signed by us.\r\n        </li>\r\n        <li>\r\n          You agree that no joint venture, partnership, employment, or agency\r\n          relationship exists between you and us as a result of these Terms or\r\n          your access to and use of the Website.\r\n        </li>\r\n        <li>\r\n          Our failure to enforce any provisions of these Terms or respond to a\r\n          violation by any party does not waive our right to subsequently\r\n          enforce any terms or conditions of the Terms or respond to any\r\n          violations. Nothing contained in these Terms is in derogation of our\r\n          right to comply with governmental, court, and law enforcement requests\r\n          or requirements relating to your use of the Website or information\r\n          provided to or gathered by us with respect to such use.\r\n        </li>\r\n        <li>\r\n          These Terms are governed by and shall be construed in accordance with\r\n          the laws of the State of California, U.S.A., without regard to its\r\n          principles of conflicts of law, and regardless of your location. You\r\n          agree to exclusive jurisdiction of the federal and state courts\r\n          located in San Mateo County, California, U.S.A., and waive any\r\n          jurisdictional, venue or inconvenient forum objections to such courts.\r\n        </li>\r\n        <li>\r\n          You may not assign, transfer or sublicense any or all of your rights\r\n          or obligations under these Terms without our express prior written\r\n          consent. We may assign, transfer or sublicense any or all of our\r\n          rights or obligations under these Terms without restriction.\r\n        </li>\r\n        <li>\r\n          If you have any questions or comments about the Website or the Segment\r\n          Anything Materials, please contact us at segment-anything@meta.com or\r\n          by mail at:\r\n          <br />\r\n          Segment Anything c/o Meta Platforms, Inc. 1601 Willow Road Menlo Park,\r\n          CA 94025\r\n        </li>\r\n      </ol>\r\n    </div>\r\n  );\r\n}\r\nexport default LegalText;\r\n"
  },
  {
    "path": "src/components/LoadingModal.tsx",
    "content": "import React, { useContext } from \"react\";\r\nimport AppContext from \"./hooks/createContext\";\r\n\r\ninterface LoadingModalProps {\r\n  handleResetState: () => void;\r\n}\r\n\r\nconst LoadingModal = ({ handleResetState }: LoadingModalProps) => {\r\n  const {\r\n    showLoadingModal: [showLoadingModal, setShowLoadingModal],\r\n    image: [image, setImage],\r\n    isErasing: [isErasing, setIsErasing],\r\n    eraserText: [eraserText, setEraserText],\r\n  } = useContext(AppContext)!;\r\n\r\n  console.log(\"Loading modal\");\r\n  \r\n  return (\r\n    <>\r\n      {showLoadingModal && (\r\n        <div className=\"modal modal-open\">\r\n          <div className=\"flex flex-col items-center justify-center h-72 modal-box\">\r\n            <div className=\"flex\">\r\n              <img className=\"object-contain w-10 mr-3\" src={image?.src} />\r\n              <img className=\"mr-3\" src=\"../assets/arrow-icn.svg\" />\r\n              <img src=\"../assets/icn-nn.svg\" />\r\n              <img className=\"mr-3\" src=\"../assets/arrow-icn.svg\" />\r\n              <img src=\"../assets/stack.svg\" />\r\n            </div>\r\n            <p className=\"py-4 text-sm md:text-lg\">\r\n              {isErasing &&\r\n                eraserText.isEmbedding &&\r\n                \"Re-extracting embedding on the erased image\"}\r\n              {isErasing &&\r\n                eraserText.isErase &&\r\n                \"Masks can be fed into other open source models\"}\r\n              {!isErasing && \"Extracting an embedding for the image...\"}\r\n            </p>\r\n            <div className=\"loading-bar\"></div>\r\n            <button\r\n              className=\"pt-8 text-lg font-bold\"\r\n              onClick={handleResetState}\r\n            >\r\n              Cancel\r\n            </button>\r\n          </div>\r\n        </div>\r\n      )}\r\n    </>\r\n  );\r\n};\r\n\r\nexport default LoadingModal;\r\n"
  },
  {
    "path": "src/components/MobileOptionNavBar.tsx",
    "content": "import React, { useContext, useState } from \"react\";\r\nimport AppContext from \"./hooks/createContext\";\r\n\r\ninterface MobileOptionNavBarProps {\r\n  handleResetInteraction: () => void;\r\n  handleUndoInteraction: () => void;\r\n  handleRedoInteraction: () => void;\r\n  handleResetState: () => void;\r\n  handleImage: (img?: HTMLImageElement) => void;\r\n  userNegClickBool: [\r\n    userNegClickBool: boolean,\r\n    setUserNegClickBool: (e: boolean) => void\r\n  ];\r\n}\r\n\r\nconst MobileOptionNavBar = ({\r\n  handleResetInteraction,\r\n  handleRedoInteraction,\r\n  handleResetState,\r\n  handleUndoInteraction,\r\n  handleImage,\r\n  userNegClickBool: [userNegClickBool, setUserNegClickBool],\r\n}: MobileOptionNavBarProps) => {\r\n  const {\r\n    svg: [svg, setSVG],\r\n    clicksHistory: [clicksHistory, setClicksHistory],\r\n    segmentTypes: [segmentTypes, setSegmentTypes],\r\n    isErased: [isErased, setIsErased],\r\n    isLoading: [, setIsLoading],\r\n  } = useContext(AppContext)!;\r\n  const [hasTouchedUpload, setHasTouchedUpload] = useState<Boolean>(false);\r\n  return (\r\n    <div className=\"flex justify-between w-full p-2 md:hidden\">\r\n      <div>\r\n        <button\r\n          className={`p-3.5 py-2.5 text-sm font-bold w-min algin-center rounded-l-md bg-white ${\r\n            ((!svg && !isErased) || segmentTypes === \"All\") && \"disabled\"\r\n          }`}\r\n          onClick={() => {\r\n            if (isErased) {\r\n              setIsErased(false);\r\n              setIsLoading(true);\r\n              handleImage();\r\n            }\r\n            handleResetInteraction();\r\n            setSegmentTypes(\"Click\");\r\n            setUserNegClickBool(false);\r\n          }}\r\n        >\r\n          Reset\r\n        </button>\r\n        <button\r\n          className={`p-3.5 py-2.5 text-sm w-min font-bold bg-white ${\r\n            (!svg || segmentTypes === \"All\") && \"disabled\"\r\n          }`}\r\n          onClick={handleUndoInteraction}\r\n        >\r\n          Undo\r\n        </button>\r\n        <button\r\n          className={`p-3.5 py-2.5 text-sm font-bold w-min rounded-r-md bg-white ${\r\n            (!clicksHistory?.length || segmentTypes === \"All\") && \"disabled\"\r\n          }`}\r\n          onClick={handleRedoInteraction}\r\n        >\r\n          Redo\r\n        </button>\r\n      </div>\r\n      <button\r\n        className=\"flex flex-row p-3.5 py-2.5  text-sm text-center border-none rounded-md bg-white\"\r\n        onClick={handleResetState}\r\n        onTouchStart={() => setHasTouchedUpload(true)}\r\n      >\r\n        <svg\r\n          className=\"pr-2\"\r\n          width=\"24\"\r\n          height=\"18\"\r\n          viewBox=\"0 0 18 18\"\r\n          fill=\"none\"\r\n          xmlns=\"http://www.w3.org/2000/svg\"\r\n        >\r\n          <path\r\n            d=\"M16.3636 13.0909H4.90909V1.63636H16.3636M16.3636 0H4.90909C4.4751 0 4.05888 0.172402 3.75201 0.47928C3.44513 0.786158 3.27273 1.20237 3.27273 1.63636V13.0909C3.27273 13.5249 3.44513 13.9411 3.75201 14.248C4.05888 14.5549 4.4751 14.7273 4.90909 14.7273H16.3636C16.7976 14.7273 17.2138 14.5549 17.5207 14.248C17.8276 13.9411 18 13.5249 18 13.0909V1.63636C18 1.20237 17.8276 0.786158 17.5207 0.47928C17.2138 0.172402 16.7976 0 16.3636 0ZM1.63636 3.27273H0V16.3636C0 16.7976 0.172402 17.2138 0.47928 17.5207C0.786158 17.8276 1.20237 18 1.63636 18H14.7273V16.3636H1.63636M12.24 7.60091L9.99 10.4973L8.38636 8.56636L6.13636 11.4545H15.1364L12.24 7.60091Z\"\r\n            fill=\"#112266\"\r\n          />\r\n        </svg>\r\n        <span>Upload</span>\r\n      </button>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default MobileOptionNavBar;\r\n"
  },
  {
    "path": "src/components/MobileSegmentDrawer.tsx",
    "content": "import React, { useContext, useEffect, useState } from \"react\";\r\nimport { Button } from \"react-daisyui\";\r\nimport { useSwipeable } from \"react-swipeable\";\r\nimport AppContext from \"./hooks/createContext\";\r\nimport Sparkle from \"./Sparkle\";\r\n\r\ninterface MobileSegmentDrawerProps {\r\n  handleResetInteraction: () => void;\r\n  handleMagicErase: () => void;\r\n  handleCreateSticker: () => void;\r\n  userNegClickBool: [\r\n    userNegClickBool: boolean,\r\n    setUserNegClickBool: (e: boolean) => void\r\n  ];\r\n}\r\n\r\nconst MobileSegmentDrawer = ({\r\n  handleResetInteraction,\r\n  handleMagicErase,\r\n  handleCreateSticker,\r\n  userNegClickBool: [userNegClickBool, setUserNegClickBool],\r\n}: MobileSegmentDrawerProps) => {\r\n  const {\r\n    segmentTypes: [segmentTypes, setSegmentTypes],\r\n    svg: [svg, setSVG],\r\n    stickers: [stickers, setStickers],\r\n    activeSticker: [activeSticker, setActiveSticker],\r\n    isModelLoaded: [isModelLoaded, setIsModelLoaded],\r\n    click: [click, setClick],\r\n    clicks: [clicks, setClicks],\r\n    stickerTabBool: [stickerTabBool, setStickerTabBool],\r\n    allsvg: [allsvg, setAllsvg],\r\n    didShowAMGAnimation: [didShowAMGAnimation, setDidShowAMGAnimation],\r\n    showLoadingModal: [showLoadingModal, setShowLoadingModal],\r\n  } = useContext(AppContext)!;\r\n  const [everythingBool, setEverythingBool] = useState<Boolean>(false);\r\n  const [hasTouchedErase, sethasTouchedErase] = useState<Boolean>(false);\r\n\r\n  useEffect(() => {\r\n    setEverythingBool(segmentTypes === \"All\");\r\n  }, [segmentTypes]);\r\n\r\n  useEffect(() => {\r\n    setStickerTabBool(() => false);\r\n  }, [click]);\r\n\r\n  const superDefer = (cb: Function) => {\r\n    setTimeout(\r\n      () =>\r\n        window.requestAnimationFrame(() => {\r\n          setTimeout(() => {\r\n            cb();\r\n          }, 0);\r\n        }),\r\n      0\r\n    );\r\n  };\r\n\r\n  const handleStickerClick = (i: number) => {\r\n    setActiveSticker(i);\r\n  };\r\n\r\n  const handlers = useSwipeable({\r\n    onSwipedUp: () => setStickerTabBool(true),\r\n    onSwipedDown: () => setStickerTabBool(false),\r\n    swipeDuration: 200,\r\n    delta: 5,\r\n    preventScrollOnSwipe: true,\r\n  });\r\n\r\n  return (\r\n    <div\r\n      className={`z-40 relative shadow-[0px_0px_20px_10px_#00000024] bg-white ease-in-out duration-300 items-center md:hidden rounded-t-3xl text-center ${\r\n        stickerTabBool ? \" -translate-y-72\" : \"\"\r\n      }`}\r\n    >\r\n      <div {...handlers}>\r\n        <div\r\n          className=\"inline-block w-24 h-1 bg-gray-200 rounded-full\"\r\n          onClick={() => setStickerTabBool(!stickerTabBool)}\r\n        ></div>\r\n        <div className=\"flex w-[18rem] gap-4 mt-2 font-bold mx-auto\">\r\n          <button\r\n            className={`flex flex-1 flex-row items-center px-2 py-1 text-sm justify-center ${\r\n              userNegClickBool\r\n                ? \"text-gray-700 bg-gray-400\"\r\n                : \"text-white bg-blue-700\"\r\n            } rounded-xl w-max`}\r\n            onClick={() => setUserNegClickBool(false)}\r\n          >\r\n            <svg\r\n              className=\"w-6 h-4\"\r\n              fill=\"none\"\r\n              viewBox=\"0 0 24 24\"\r\n              stroke={`${userNegClickBool ? \"#1C2B33\" : \"#fff\"}`}\r\n            >\r\n              <path\r\n                strokeLinecap=\"round\"\r\n                strokeLinejoin=\"round\"\r\n                strokeWidth=\"2\"\r\n                d=\"M12 4v16m8-8H4\"\r\n              />\r\n            </svg>\r\n            <span>Add Mask</span>\r\n          </button>\r\n          <button\r\n            className={`flex flex-1 flex-row items-center px-2 py-1 text-sm justify-center rounded-xl w-max ${\r\n              userNegClickBool\r\n                ? \"text-white bg-blue-700\"\r\n                : \"text-gray-700 bg-gray-400\"\r\n            } ${!clicks || clicks?.length === 0 ? \"disabled\" : \"\"}`}\r\n            onClick={() => setUserNegClickBool(true)}\r\n          >\r\n            <svg\r\n              className=\"w-6 h-4\"\r\n              viewBox=\"0 0 24 24\"\r\n              fill=\"none\"\r\n              stroke={`${userNegClickBool ? \"#fff\" : \"#1C2B33\"}`}\r\n              strokeWidth=\"2\"\r\n              strokeLinejoin=\"round\"\r\n            >\r\n              <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\r\n            </svg>\r\n            <span>Remove Area</span>\r\n          </button>\r\n        </div>\r\n        <ul className=\"flex w-screen mb-2 font-semi-bold justify-evenly text-secondary\">\r\n          <li>\r\n            <a\r\n              className={`flex flex-col items-center pt-2 ${\r\n                isModelLoaded.allModel === false &&\r\n                \"opacity-70 pointer-events-none\"\r\n              }`}\r\n              onClick={() => {\r\n                setDidShowAMGAnimation(false);\r\n                superDefer(() => {\r\n                  if (segmentTypes !== \"All\") {\r\n                    handleResetInteraction();\r\n                    setSegmentTypes(\"All\");\r\n                    setStickerTabBool(() => false);\r\n                  } else {\r\n                    setSegmentTypes(\"Click\");\r\n                  }\r\n                });\r\n              }}\r\n              onMouseDown={() => setEverythingBool((prev) => !prev)}\r\n            >\r\n              <Sparkle isActive={everythingBool} />\r\n              <span\r\n                className={\r\n                  (!isModelLoaded.allModel ? \"opacity-60\" : \"\") +\r\n                  (everythingBool ? \"text-blue-700\" : \"#000\")\r\n                }\r\n              >\r\n                Everything\r\n              </span>\r\n            </a>\r\n          </li>\r\n          {/* <li>\r\n          <a\r\n            className={`flex flex-col items-center pt-2 ${!svg && \"disabled\"}`}\r\n            onClick={() => {\r\n              setDidShowAMGAnimation(false);\r\n              handleMagicErase();\r\n              setStickerTabBool(() => false);\r\n              setShowLoadingModal(true);\r\n            }}\r\n            onTouchStart={() => sethasTouchedErase(true)}\r\n            onTouchEnd={() => sethasTouchedErase(false)}\r\n          >\r\n            <svg\r\n              className=\"w-5 m-1\"\r\n              width=\"20\"\r\n              height=\"20\"\r\n              viewBox=\"0 0 20 20\"\r\n              fill=\"none\"\r\n              xmlns=\"http://www.w3.org/2000/svg\"\r\n            >\r\n              <path\r\n                d=\"M4.03809 8.59341L8.45669 13.012L6.53991 14.9288C6.14938 15.3193 5.51622 15.3193 5.12569 14.9288L2.1213 11.9244C1.73078 11.5339 1.73078 10.9007 2.1213 10.5102L4.03809 8.59341Z\"\r\n                fill={hasTouchedErase ? \"#1D4AB2\" : \"#344854\"}\r\n                strokeWidth=\"2\"\r\n              />\r\n              <path\r\n                d=\"M10.3203 1.41421L15.6363 6.73018L9.34113 13.0253L4.02517 7.70936L10.3203 1.41421Z\"\r\n                fill={hasTouchedErase ? \"#1D4AB2\" : \"#344854\"}\r\n                strokeWidth=\"2\"\r\n              />\r\n              <rect\r\n                x=\"5.71484\"\r\n                y=\"15\"\r\n                width=\"14.2855\"\r\n                height=\"1.42855\"\r\n                fill={hasTouchedErase ? \"#1D4AB2\" : \"#344854\"}\r\n              />\r\n            </svg>\r\n            <span className={hasTouchedErase ? \"text-blue-700\" : \"#fff\"}>\r\n              Erase\r\n            </span>\r\n          </a>\r\n        </li> */}\r\n          <li>\r\n            <a\r\n              className=\"flex flex-col items-center pt-2\"\r\n              onClick={() => {\r\n                setStickerTabBool(() => !stickerTabBool);\r\n              }}\r\n            >\r\n              <svg\r\n                className=\"w-5 m-1\"\r\n                width=\"20\"\r\n                height=\"20\"\r\n                viewBox=\"0 0 20 20\"\r\n                fill=\"none\"\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n              >\r\n                <path\r\n                  d=\"M11.75 7C11.75 5.75 12.3125 5 13.25 5C14.1875 5 14.75 5.75 14.75 7C14.75 8.25 14.1875 9 13.25 9C12.3125 9 11.75 8.25 11.75 7Z\"\r\n                  fill={stickerTabBool ? \"#1D4AB2\" : \"#000\"}\r\n                />\r\n                <path\r\n                  d=\"M6.75 5C5.8125 5 5.25 5.75 5.25 7C5.25 8.25 5.8125 9 6.75 9C7.6875 9 8.25 8.25 8.25 7C8.25 5.75 7.6875 5 6.75 5Z\"\r\n                  fill={stickerTabBool ? \"#1D4AB2\" : \"#000\"}\r\n                />\r\n                <path\r\n                  fillRule=\"evenodd\"\r\n                  clipRule=\"evenodd\"\r\n                  d=\"M20 11.3431V4C20 1.79086 18.2091 0 16 0H4C1.79086 0 0 1.79086 0 4V16C0 18.2091 1.79086 20 4 20H11.3431C12.404 20 13.4214 19.5786 14.1716 18.8284L18.8284 14.1716C19.5786 13.4214 20 12.404 20 11.3431ZM4 2.5H16C16.8284 2.5 17.5 3.17157 17.5 4V9.75C17.5 9.88807 17.3881 10 17.25 10H14C12.0729 10 10.4641 11.3628 10.0847 13.1772C10.0763 13.2175 10.0412 13.2472 9.99998 13.2472C8.50209 13.2472 7.1324 12.6983 6.08108 11.7907C5.63659 11.4069 4.9555 11.3627 4.54028 11.7779C4.17718 12.141 4.14928 12.7273 4.52354 13.0789C5.8983 14.3704 7.72985 15.1813 9.74991 15.2433C9.88792 15.2476 9.99998 15.3591 9.99998 15.4972L10 17.25C10 17.3881 9.88807 17.5 9.75 17.5H4C3.17157 17.5 2.5 16.8284 2.5 16V4C2.5 3.17157 3.17157 2.5 4 2.5Z\"\r\n                  fill={stickerTabBool ? \"#1D4AB2\" : \"#000\"}\r\n                />\r\n              </svg>\r\n              <span className={stickerTabBool ? \"text-blue-700\" : \"\"}>\r\n                Cut-outs\r\n              </span>\r\n            </a>\r\n          </li>\r\n        </ul>\r\n      </div>\r\n      <div className=\"absolute w-full bg-white h-[17rem] mt-[-1px]\">\r\n        <div className=\"h-full pb-8 m-5 mb-0 overflow-auto bg-white\">\r\n          <Button\r\n            size=\"md\"\r\n            className={`flex flex-row-reverse normal-case border-none mt-5 mx-auto bg-gray-300 ${\r\n              !everythingBool && !svg && \"disabled\"\r\n            }`}\r\n            onClick={(e) => {\r\n              e.currentTarget.blur();\r\n              handleCreateSticker();\r\n            }}\r\n          >\r\n            <div className=\"leading-normal text-black active:text-white hover:text-white\">\r\n              {everythingBool ? \"Cut out all objects\" : \"Create cut-out\"}\r\n            </div>\r\n            <svg\r\n              className=\"mr-2\"\r\n              width=\"16\"\r\n              height=\"16\"\r\n              viewBox=\"0 0 16 16\"\r\n              fill=\"none\"\r\n              xmlns=\"http://www.w3.org/2000/svg\"\r\n            >\r\n              <path\r\n                d=\"M11.7895 0H13.4737V2.52632H16V4.21053H13.4737V6.73684H11.7895V4.21053H9.26316V2.52632H11.7895V0ZM3.36842 2.52632H6.73684V4.21053H3.36842C2.44211 4.21053 1.68421 4.96842 1.68421 5.89474V12.6316C1.68421 13.5663 2.44211 14.3158 3.36842 14.3158H10.1053C11.04 14.3158 11.7895 13.5663 11.7895 12.6316V9.26316H13.4737V12.6316C13.4737 14.4926 11.9663 16 10.1053 16H3.36842C1.50737 16 0 14.4926 0 12.6316V5.89474C0 4.03368 1.50737 2.52632 3.36842 2.52632Z\"\r\n                fill=\"black\"\r\n              />\r\n            </svg>\r\n          </Button>\r\n          <div className=\"mt-5\">\r\n            {stickers.map((el: HTMLCanvasElement, i) => (\r\n              <img\r\n                key={i}\r\n                className={`m-5 max-w-[75%] max-h-20 md:max-h-24 lg:max-h-28 xl:max-h-32 cursor-pointer inline hover:opacity-100 ${\r\n                  stickers.length === 1 || i === activeSticker\r\n                    ? \"sticker-select\"\r\n                    : \"\"\r\n                }`}\r\n                alt=\"cutout\"\r\n                src={el.toDataURL()}\r\n                onClick={(e) => handleStickerClick(i)}\r\n              />\r\n            ))}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default MobileSegmentDrawer;\r\n"
  },
  {
    "path": "src/components/Navbar.tsx",
    "content": "import React from \"react\";\r\nimport { MdClose } from \"react-icons/md\";\r\nimport { NavLink, useLocation } from \"react-router-dom\";\r\n\r\ninterface NavBarProps {\r\n  resetState: () => void;\r\n}\r\n\r\nconst NavBar = ({ resetState }: NavBarProps) => {\r\n  const [isMenuOpen, setIsMenuOpen] = React.useState(false);\r\n  const location = useLocation();\r\n  const desktopClasses = \"mr-10 font-medium text-base\";\r\n  const mobileClasses = \"mx-8 text-xl font-semibold\";\r\n  return (\r\n    <div className=\"sticky top-0 z-50 flex items-center justify-center w-full bg-white md:border-b-gray-200 md:border-b-[1px] pt-3 pb-3\">\r\n      <img\r\n        onClick={() => {\r\n          setIsMenuOpen(true);\r\n        }}\r\n        className=\"absolute left-0 h-3 mx-6 md:hidden\"\r\n        src=\"/assets/hamburger.svg\"\r\n        alt=\"Mobile Menu\"\r\n      />\r\n      <NavLink\r\n        className=\"mt-2 text-xl font-bold leading-tight md:mx-6 lg:text-2xl\"\r\n        onClick={resetState}\r\n        to={\"/\"}\r\n        style={{ fontWeight: 700 }}\r\n      >\r\n        <div>Segment Anything</div>\r\n        <div className=\"text-xs font-normal text-center text-gray-500 lg:text-sm md:text-start\">\r\n          Research by Meta AI\r\n        </div>\r\n      </NavLink>\r\n      <div className=\"hidden ml-auto md:flex [&>*]:flex [&>*]:items-center h-full\">\r\n        <NavLink\r\n          onClick={resetState}\r\n          className={`hover:underline underline-offset-4 ${desktopClasses} ${\r\n            location.pathname === \"/\" && \"underline text-blue-700\"\r\n          }`}\r\n          to={\"/\"}\r\n        >\r\n          Home\r\n        </NavLink>\r\n        <NavLink\r\n          onClick={resetState}\r\n          className={`hover:underline underline-offset-4 ${desktopClasses} ${\r\n            location.pathname === \"/demo\" && \"underline text-blue-700\"\r\n          } `}\r\n          to={\"/demo\"}\r\n        >\r\n          Demo\r\n        </NavLink>\r\n        <a\r\n          onClick={resetState}\r\n          className={`hover:underline underline-offset-4 ${desktopClasses}`}\r\n          href={\"/dataset/index.html\"}\r\n        >\r\n          Dataset\r\n        </a>\r\n        <NavLink\r\n          onClick={resetState}\r\n          className={`hover:underline underline-offset-4 ${desktopClasses}`}\r\n          to={\r\n            \"https://ai.facebook.com/blog/segment-anything-foundation-model-image-segmentation/\"\r\n          }\r\n          target={\"_blank\"}\r\n        >\r\n          Blog\r\n        </NavLink>\r\n        <NavLink\r\n          onClick={resetState}\r\n          className={`hover:underline underline-offset-4 ${desktopClasses}`}\r\n          to={\"https://arxiv.org/abs/2304.02643\"}\r\n          target={\"_blank\"}\r\n        >\r\n          Paper\r\n        </NavLink>\r\n        <a\r\n          className=\"mr-6 min-w-[24px]\"\r\n          href=\"https://github.com/facebookresearch/segment-anything\"\r\n          target={\"_blank\"}\r\n        >\r\n          <img\r\n            className=\"hidden h-6 align-baseline md:inline xl:h-auto hover:opacity-50\"\r\n            src=\"/assets/Github.svg\"\r\n            alt=\"Github\"\r\n            style={{ fill: \"red\" }}\r\n          ></img>\r\n        </a>\r\n      </div>\r\n      <div\r\n        className={\r\n          \" fixed overflow-hidden z-10 bg-opacity-25 inset-0 transform ease-in-out \" +\r\n          (isMenuOpen\r\n            ? \" transition-opacity opacity-100 duration-500 translate-x-0  \"\r\n            : \" transition-all delay-500 opacity-0 translate-x-full  \")\r\n        }\r\n      >\r\n        <section\r\n          className={\r\n            \"w-screen right-0 absolute bg-white h-full shadow-[0px_0px_25px_10px_#00000024] delay-400 duration-500 ease-in-out transition-all transform  \" +\r\n            (isMenuOpen ? \" translate-x-0 \" : \" translate-x-full \")\r\n          }\r\n        >\r\n          <article className=\"relative flex flex-col w-screen h-full max-w-lg pb-10 mt-8 space-y-6 overflow-y-scroll\">\r\n            <div\r\n              className=\"flex items-center pb-1 border-b-2\"\r\n              onClick={() => {\r\n                setIsMenuOpen(false);\r\n              }}\r\n            >\r\n              <NavLink\r\n                className=\"mt-2 ml-[22%] text-xl font-bold leading-tight md:mx-6 lg:text-2xl\"\r\n                onClick={resetState}\r\n                to={\"/\"}\r\n                style={{ fontWeight: 700 }}\r\n              >\r\n                <div>Segment Anything</div>\r\n                <div className=\"text-xs font-normal text-center text-gray-500 lg:text-sm md:text-start\">\r\n                  Research by Meta AI\r\n                </div>\r\n              </NavLink>\r\n              <header className=\"pb-2 pr-4 ml-auto mr-8 text-2xl font-bold\">\r\n                <MdClose />\r\n              </header>\r\n            </div>\r\n            <NavLink\r\n              onClick={() => {\r\n                resetState();\r\n                setIsMenuOpen(false);\r\n              }}\r\n              className={`${mobileClasses} hover:underline underline-offset-4 ${\r\n                location.pathname === \"/\" && \"underline text-blue-700\"\r\n              }`}\r\n              to={\"/\"}\r\n            >\r\n              Home\r\n            </NavLink>\r\n            <NavLink\r\n              onClick={() => {\r\n                resetState();\r\n                setIsMenuOpen(false);\r\n              }}\r\n              className={`${mobileClasses} hover:underline underline-offset-4 ${\r\n                location.pathname === \"/demo\" && \"underline text-blue-700\"\r\n              }`}\r\n              to={\"/demo\"}\r\n            >\r\n              Demo\r\n            </NavLink>\r\n            <a\r\n              onClick={() => {\r\n                resetState();\r\n                setIsMenuOpen(false);\r\n              }}\r\n              className={`${mobileClasses} hover:underline underline-offset-4`}\r\n              href={\"/dataset/index.html\"}\r\n            >\r\n              Dataset\r\n            </a>\r\n            <NavLink\r\n              onClick={() => {\r\n                resetState();\r\n                setIsMenuOpen(false);\r\n              }}\r\n              className={`${mobileClasses} hover:underline underline-offset-4`}\r\n              to={\r\n                \"https://ai.facebook.com/blog/segment-anything-foundation-model-image-segmentation/\"\r\n              }\r\n              target={\"_blank\"}\r\n            >\r\n              Blog\r\n            </NavLink>\r\n            <NavLink\r\n              onClick={() => {\r\n                resetState();\r\n                setIsMenuOpen(false);\r\n              }}\r\n              className={`${mobileClasses} hover:underline underline-offset-4`}\r\n              to={\"https://arxiv.org/abs/2304.02643\"}\r\n              target={\"_blank\"}\r\n            >\r\n              Paper\r\n            </NavLink>\r\n            <NavLink\r\n              onClick={() => {\r\n                resetState();\r\n                setIsMenuOpen(false);\r\n              }}\r\n              className={`${mobileClasses} hover:underline underline-offset-4`}\r\n              to={\"https://github.com/facebookresearch/segment-anything\"}\r\n              target={\"_blank\"}\r\n            >\r\n              <span>Github</span>\r\n            </NavLink>\r\n          </article>\r\n        </section>\r\n        <section\r\n          className=\"w-screen h-full cursor-pointer \"\r\n          onClick={() => {\r\n            setIsMenuOpen(false);\r\n          }}\r\n        ></section>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default NavBar;\r\n"
  },
  {
    "path": "src/components/PointsModal.tsx",
    "content": "import React from \"react\";\r\nimport { useCookies } from \"react-cookie\";\r\n\r\nconst PointsModal = () => {\r\n  const [toggle, setToggle] = React.useState(true);\r\n  const [cookies, setCookie, removeCookie] = useCookies([\"sa-mask-info\"]);\r\n\r\n  if (cookies[\"sa-mask-info\"]) return null;\r\n\r\n  return (\r\n    <div className={`modal ${toggle && \"modal-open\"}`}>\r\n      <div className=\"w-96 modal-box\">\r\n        <div className=\"flex flex-row justify-between mb-4 text-sm\">\r\n          <span>How to use the selection tool</span>\r\n          <span>\r\n            <a\r\n              href=\"#\"\r\n              className=\"font-bold text-blue-700\"\r\n              onClick={() => {\r\n                setCookie(\"sa-mask-info\", \"true\");\r\n                setToggle(false);\r\n              }}\r\n            >\r\n              Close\r\n            </a>\r\n          </span>\r\n        </div>\r\n        <video src=\"../assets/tut-negative-points.mp4\" autoPlay playsInline />\r\n        <h3 className=\"my-2 text-2xl\">Add and subtract areas</h3>\r\n        <p>\r\n          Mask areas by adding points. Select <b>Add Area</b>, then select the\r\n          object. Refine the mask by selecting <b>Remove Area</b>, then select\r\n          the area.\r\n        </p>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default PointsModal;\r\n"
  },
  {
    "path": "src/components/SegmentDrawer.tsx",
    "content": "import React, { useContext, useState } from \"react\";\r\nimport { getCookieConsentValue } from \"react-cookie-consent\";\r\nimport { useDropzone } from \"react-dropzone\";\r\nimport * as ReactGA from \"react-ga4\";\r\nimport Animate from \"./hooks/Animation\";\r\nimport AppContext from \"./hooks/createContext\";\r\nimport SegmentOptions from \"./SegmentOptions\";\r\nimport Sparkle from \"./Sparkle\";\r\n\r\ninterface SegmentDrawerProps {\r\n  handleResetState: () => void;\r\n  handleResetInteraction: (flag?: boolean) => void;\r\n  handleUndoInteraction: () => void;\r\n  handleRedoInteraction: () => void;\r\n  handleCreateSticker: () => void;\r\n  handleMagicErase: () => void;\r\n  handleImage: (img?: HTMLImageElement) => void;\r\n  handleMultiMaskMode: () => void;\r\n  userNegClickBool: [\r\n    userNegClickBool: boolean,\r\n    setUserNegClickBool: (e: boolean) => void\r\n  ];\r\n  showGallery: [showGallery: boolean, setShowGallery: (e: boolean) => void];\r\n  hasClicked: boolean;\r\n  handleSelectedImage: (\r\n    data: File | URL,\r\n    options?: { shouldDownload?: boolean; shouldNotFetchAllModel?: boolean }\r\n  ) => void;\r\n}\r\n\r\nconst SegmentDrawer = ({\r\n  handleResetState,\r\n  handleResetInteraction,\r\n  handleUndoInteraction,\r\n  handleRedoInteraction,\r\n  handleCreateSticker,\r\n  handleMagicErase,\r\n  handleImage,\r\n  handleMultiMaskMode,\r\n  userNegClickBool: [userNegClickBool, setUserNegClickBool],\r\n  showGallery: [showGallery, setShowGallery],\r\n  hasClicked,\r\n  handleSelectedImage,\r\n}: SegmentDrawerProps) => {\r\n  const {\r\n    isModelLoaded: [isModelLoaded, setIsModelLoaded],\r\n    segmentTypes: [segmentTypes, setSegmentTypes],\r\n    isLoading: [isLoading, setIsLoading],\r\n    isErased: [isErased, setIsErased],\r\n    isMultiMaskMode: [isMultiMaskMode, setIsMultiMaskMode],\r\n    stickers: [stickers, setStickers],\r\n    activeSticker: [activeSticker, setActiveSticker],\r\n    didShowAMGAnimation: [didShowAMGAnimation, setDidShowAMGAnimation],\r\n    isAllAnimationDone: [isAllAnimationDone, setIsAllAnimationDone],\r\n    isToolBarUpload: [isToolBarUpload, setIsToolBarUpload],\r\n  } = useContext(AppContext)!;\r\n\r\n  const [uploadClick, setUploadClick] = useState<boolean>(true);\r\n  const [visibleClickHover, setVisibleClickHover] = useState<boolean>(false);\r\n  const [visibleBoxHover, setVisibleBoxHover] = useState<boolean>(false);\r\n  const [visibleAllHover, setVisibleAllHover] = useState<boolean>(false);\r\n  const [visibleStickerHover, setVisibleStickerHover] =\r\n    useState<boolean>(false);\r\n  const [isCutOut, setIsCutOut] = useState<boolean>(false);\r\n  const handleStickerClick = (i: number) => {\r\n    setActiveSticker(i);\r\n  };\r\n  const [error, setError] = useState<string>(\"\");\r\n  const [isClickCollapsed, setIsClickCollapsed] = useState(true);\r\n  const [isBoxCollapsed, setIsBoxCollapsed] = useState(true);\r\n  const [isAllCollapsed, setIsAllCollapsed] = useState(true);\r\n  const [isCutOutCollapsed, setIsCutOutCollapsed] = useState(true);\r\n  const [isClickMounted, setIsClickMounted] = useState(false);\r\n  const [isBoxMounted, setIsBoxMounted] = useState(false);\r\n  const [isAllMounted, setIsAllMounted] = useState(false);\r\n  const [isCutOutMounted, setIsCutOutMounted] = useState(false);\r\n  let clickTimeout: string | number | NodeJS.Timeout | undefined,\r\n    boxTimeout: string | number | NodeJS.Timeout | undefined,\r\n    allTimeout: string | number | NodeJS.Timeout | undefined,\r\n    cutOutTimeout: string | number | NodeJS.Timeout | undefined;\r\n\r\n  // setIsClickMounted(false)\r\n  // setIsBoxMounted(false)\r\n  // setIsAllMounted(false)\r\n  // setIsCutOutMounted(false)\r\n\r\n  const { getRootProps, getInputProps } = useDropzone({\r\n    accept: {\r\n      \"image/png\": [\".png\"],\r\n      \"image/jpeg\": [\".jpeg\", \".jpg\"],\r\n    },\r\n    onDrop: (acceptedFile) => {\r\n      try {\r\n        if (acceptedFile.length === 0) {\r\n          setError(\"File not accepted! Try again.\");\r\n          return;\r\n        }\r\n        if (acceptedFile.length > 1) {\r\n          setError(\"Too many files! Try again with 1 file.\");\r\n          return;\r\n        }\r\n        const reader = new FileReader();\r\n        reader.onloadend = () => {\r\n          handleSelectedImage(acceptedFile[0]);\r\n        };\r\n        reader.readAsDataURL(acceptedFile[0]);\r\n      } catch (error) {\r\n        console.log(error);\r\n      }\r\n    },\r\n    maxSize: 50_000_000,\r\n  });\r\n\r\n  return (\r\n    <section className=\"flex-col hidden w-1/5 pt-[6%] overflow-y-auto md:flex lg:w-72\">\r\n      <div\r\n        className={`shadow-[0px_0px_15px_5px_#00000024] rounded-xl md:mx-1 lg:mx-5`}\r\n      >\r\n        <div className=\"p-4 pt-5\">\r\n          <div className=\"flex justify-between p-2 pb-3\">\r\n            <span className=\"leading-3\">Tools</span>\r\n          </div>\r\n          {uploadClick && (\r\n            <div className=\"flex justify-between px-3 py-2 mb-3 cursor-pointer rounded-xl outline outline-gray-200\">\r\n              <button\r\n                className=\"flex\"\r\n                onClick={() => {\r\n                  setShowGallery(true);\r\n                  setIsCutOut(false);\r\n                  setIsToolBarUpload(true);\r\n                }}\r\n              >\r\n                <span {...getRootProps()} className=\"flex text-sm\">\r\n                  <input {...getInputProps()} />\r\n                  <img src=\"assets/upload_arrow.svg\" className=\"w-5 mr-1\" />\r\n                  Upload\r\n                </span>\r\n              </button>\r\n              <button\r\n                className=\"flex\"\r\n                onClick={() => {\r\n                  setIsToolBarUpload(false);\r\n                  setShowGallery(false);\r\n                  setIsCutOut(false);\r\n                  setDidShowAMGAnimation(false);\r\n                  handleResetState();\r\n                }}\r\n              >\r\n                <img src=\"assets/icn-image-gallery.svg\" className=\"w-5 mr-1\" />\r\n                <span className=\"text-sm\">Gallery</span>\r\n              </button>\r\n            </div>\r\n          )}\r\n          <div\r\n            onClick={() => {\r\n              segmentTypes !== \"Click\" && handleResetInteraction();\r\n              getCookieConsentValue(\"sa_demo\") === \"true\" &&\r\n                ReactGA.default.send({\r\n                  category: \"event\",\r\n                  action: \"is_click\",\r\n                });\r\n              clearTimeout(clickTimeout);\r\n              setSegmentTypes(\"Click\");\r\n              setIsCutOut(false);\r\n              setDidShowAMGAnimation(false);\r\n            }}\r\n            className={`transition-all overflow-hidden pb-2 ${\r\n              segmentTypes !== \"Click\" &&\r\n              (isClickCollapsed ? \"max-h-[40px]\" : \"max-h-[85px]\")\r\n            } px-3 py-2 cursor-pointer rounded-xl ${\r\n              segmentTypes === \"Click\"\r\n                ? \"outline-blue-700 outline outline-[2.5px]\"\r\n                : \"outline outline-gray-200 \"\r\n            } ${isCutOut && \"hidden\"}`}\r\n            onMouseEnter={() => {\r\n              clearTimeout(clickTimeout);\r\n              clickTimeout = setTimeout(() => {\r\n                setIsClickCollapsed(false);\r\n                setVisibleClickHover(true);\r\n                setIsClickMounted(!isClickMounted);\r\n              }, 700);\r\n            }}\r\n            onMouseLeave={() => {\r\n              setIsClickCollapsed(true);\r\n              setIsBoxCollapsed(true);\r\n              setIsAllCollapsed(true);\r\n              setIsCutOutCollapsed(true);\r\n              // setVisibleClickHover(false);\r\n              clearTimeout(clickTimeout);\r\n              setIsClickMounted(false);\r\n              setIsBoxMounted(false);\r\n              setIsAllMounted(false);\r\n              setIsCutOutMounted(false);\r\n            }}\r\n          >\r\n            <div className=\"flex\">\r\n              <svg\r\n                width=\"17\"\r\n                height=\"24\"\r\n                viewBox=\"0 0 17 24\"\r\n                fill=\"none\"\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n                className=\"w-3 mr-2\"\r\n              >\r\n                <path\r\n                  d=\"M9.13635 23.8813C8.53843 24.1683 7.82091 23.9172 7.54586 23.3192L4.93889 17.6509L1.93729 20.0665C1.73399 20.2339 1.48286 20.3296 1.19586 20.3296C0.878697 20.3296 0.574526 20.2036 0.350259 19.9793C0.125992 19.7551 0 19.4509 0 19.1337V1.19586C0 0.878697 0.125992 0.574526 0.350259 0.350259C0.574526 0.125992 0.878697 0 1.19586 0C1.48286 0 1.75791 0.107627 1.96121 0.275047L1.97317 0.263089L15.7136 11.7912C16.2278 12.2217 16.2876 12.9751 15.869 13.4773C15.6897 13.6926 15.4385 13.8361 15.1874 13.8839L11.4085 14.6253L14.0394 20.2817C14.3503 20.8797 14.0633 21.5852 13.4654 21.8603L9.13635 23.8813Z\"\r\n                  fill={`${segmentTypes === \"Click\" ? \"#2962D9\" : \"#000000\"}`}\r\n                />\r\n              </svg>\r\n              <span\r\n                className={`font-bold ${\r\n                  segmentTypes === \"Click\" && \"text-blue-600\"\r\n                }`}\r\n              >\r\n                Hover & Click\r\n              </span>\r\n            </div>\r\n            {segmentTypes !== \"Click\" && visibleClickHover && (\r\n              <Animate isMounted={isClickMounted}>\r\n                <p className=\"my-3 text-[11px] opacity-70\">\r\n                  Click an object one or more times. Shift-click to remove\r\n                  regions.\r\n                </p>\r\n              </Animate>\r\n            )}\r\n            {segmentTypes === \"Click\" && (\r\n              <p className={`my-3 text-[11px] text-blue-700 opacity-70`}>\r\n                Click an object one or more times. Shift-click to remove\r\n                regions.\r\n              </p>\r\n            )}\r\n            <div className=\"flex justify-between mx-5 my-3\">\r\n              <div\r\n                onClick={() => setUserNegClickBool(false)}\r\n                className=\"flex flex-col items-center\"\r\n              >\r\n                <p\r\n                  className={`w-8 h-7 text-3xl leading-7 text-center align-middle rounded-lg mb-1 ${\r\n                    userNegClickBool\r\n                      ? \"outline outline-1\"\r\n                      : \"bg-blue-600 text-white\"\r\n                  }`}\r\n                >\r\n                  +\r\n                </p>\r\n                <p\r\n                  className={`text-xs font-bold ${\r\n                    !userNegClickBool && \"text-blue-600\"\r\n                  }`}\r\n                >\r\n                  Add Mask\r\n                </p>\r\n              </div>\r\n\r\n              <div\r\n                onClick={() => setUserNegClickBool(true)}\r\n                className={`flex flex-col items-center ${\r\n                  !hasClicked ? \"disabled\" : \"\"\r\n                }`}\r\n              >\r\n                <p\r\n                  className={`w-8 h-7 text-3xl leading-6 text-center align-middle rounded-lg mb-1 ${\r\n                    userNegClickBool\r\n                      ? \"bg-blue-600 text-white\"\r\n                      : \"outline outline-1\"\r\n                  }`}\r\n                >\r\n                  -\r\n                </p>\r\n                <p\r\n                  className={`text-xs font-bold ${\r\n                    userNegClickBool && \"text-blue-600\"\r\n                  }`}\r\n                >\r\n                  Remove Area\r\n                </p>\r\n              </div>\r\n            </div>\r\n            {segmentTypes === \"Click\" && (\r\n              <SegmentOptions\r\n                handleResetInteraction={handleResetInteraction}\r\n                handleUndoInteraction={handleUndoInteraction}\r\n                handleRedoInteraction={handleRedoInteraction}\r\n                handleCreateSticker={handleCreateSticker}\r\n                handleMagicErase={handleMagicErase}\r\n                handleImage={handleImage}\r\n                hasClicked={hasClicked}\r\n                isCutOut={[isCutOut, setIsCutOut]}\r\n                handleMultiMaskMode={handleMultiMaskMode}\r\n              />\r\n            )}\r\n          </div>\r\n\r\n          <div\r\n            onClick={() => {\r\n              segmentTypes !== \"Box\" && handleResetInteraction(true);\r\n              getCookieConsentValue(\"sa_demo\") === \"true\" &&\r\n                ReactGA.default.send({\r\n                  category: \"event\",\r\n                  action: \"is_box\",\r\n                });\r\n              clearTimeout(boxTimeout);\r\n              setIsMultiMaskMode(false);\r\n              setSegmentTypes(\"Box\");\r\n              setIsCutOut(false);\r\n              setDidShowAMGAnimation(false);\r\n            }}\r\n            className={`transition-all overflow-hidden ${\r\n              segmentTypes !== \"Box\" &&\r\n              (isBoxCollapsed ? \"max-h-[40px]\" : \"max-h-[85px]\")\r\n            } my-2 rounded-xl px-4 py-2 cursor-pointer ${\r\n              segmentTypes === \"Box\"\r\n                ? \"outline-blue-700 outline outline-[2.5px]\"\r\n                : \"outline outline-gray-200\"\r\n            } ${isCutOut && \"hidden\"}`}\r\n            onMouseEnter={() => {\r\n              clearTimeout(boxTimeout);\r\n              boxTimeout = setTimeout(() => {\r\n                setIsBoxCollapsed(false);\r\n                setVisibleBoxHover(true);\r\n                setIsBoxMounted(true);\r\n              }, 700);\r\n            }}\r\n            onMouseLeave={() => {\r\n              setIsClickCollapsed(true);\r\n              setIsBoxCollapsed(true);\r\n              setIsAllCollapsed(true);\r\n              setIsCutOutCollapsed(true);\r\n              // setVisibleBoxHover(false);\r\n              clearTimeout(boxTimeout);\r\n              setIsClickMounted(false);\r\n              setIsBoxMounted(false);\r\n              setIsAllMounted(false);\r\n              setIsCutOutMounted(false);\r\n            }}\r\n          >\r\n            <div className=\"flex\">\r\n              <svg\r\n                width=\"20\"\r\n                height=\"20\"\r\n                viewBox=\"0 0 20 20\"\r\n                fill=\"none\"\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n              >\r\n                <path\r\n                  d=\"M17.7778 0H2.22222C1.63285 0 1.06762 0.234126 0.650874 0.650874C0.234126 1.06762 0 1.63285 0 2.22222V17.7778C0 18.3671 0.234126 18.9324 0.650874 19.3491C1.06762 19.7659 1.63285 20 2.22222 20H17.7778C18.3671 20 18.9324 19.7659 19.3491 19.3491C19.7659 18.9324 20 18.3671 20 17.7778V2.22222C20 1.63285 19.7659 1.06762 19.3491 0.650874C18.9324 0.234126 18.3671 0 17.7778 0ZM17.7778 17.7778H2.22222V2.22222H17.7778V17.7778ZM15.5556 15.5556H4.44444V4.44444H15.5556V15.5556Z\"\r\n                  fill={`${segmentTypes === \"Box\" ? \"#2962D9\" : \"#000000\"}`}\r\n                />\r\n              </svg>\r\n\r\n              <span\r\n                className={`pl-2 font-bold ${\r\n                  segmentTypes === \"Box\" && \"text-blue-600\"\r\n                }`}\r\n              >\r\n                Box\r\n              </span>\r\n            </div>\r\n            {segmentTypes !== \"Box\" && visibleBoxHover && (\r\n              <Animate isMounted={isBoxMounted}>\r\n                <p className=\"my-3 text-xs opacity-70\">\r\n                  Roughly draw a box around an object.\r\n                </p>\r\n              </Animate>\r\n            )}\r\n            {segmentTypes === \"Box\" && (\r\n              <p className={`my-3 text-xs text-blue-700 opacity-70`}>\r\n                Roughly draw a box around an object.\r\n              </p>\r\n            )}\r\n            <div className=\"flex justify-between mx-5 my-3\">\r\n              <div\r\n                onClick={() => setUserNegClickBool(false)}\r\n                className=\"flex flex-col items-center\"\r\n              >\r\n                <p\r\n                  className={`w-8 h-7 text-3xl leading-7 text-center align-middle rounded-lg mb-1 ${\r\n                    userNegClickBool\r\n                      ? \"outline outline-1\"\r\n                      : \"bg-blue-600 text-white\"\r\n                  }`}\r\n                >\r\n                  +\r\n                </p>\r\n                <p\r\n                  className={`text-xs font-bold ${\r\n                    !userNegClickBool && \"text-blue-600\"\r\n                  }`}\r\n                >\r\n                  Add Mask\r\n                </p>\r\n              </div>\r\n\r\n              <div\r\n                onClick={() => setUserNegClickBool(true)}\r\n                className={`flex flex-col items-center ${\r\n                  !hasClicked ? \"disabled\" : \"\"\r\n                }`}\r\n              >\r\n                <p\r\n                  className={`w-8 h-7 text-3xl leading-6 text-center align-middle rounded-lg mb-1 ${\r\n                    userNegClickBool\r\n                      ? \"bg-blue-600 text-white\"\r\n                      : \"outline outline-1\"\r\n                  }`}\r\n                >\r\n                  -\r\n                </p>\r\n                <p\r\n                  className={`text-xs font-bold ${\r\n                    userNegClickBool && \"text-blue-600\"\r\n                  }`}\r\n                >\r\n                  Remove Area\r\n                </p>\r\n              </div>\r\n            </div>\r\n            {segmentTypes === \"Box\" && (\r\n              <SegmentOptions\r\n                handleResetInteraction={handleResetInteraction}\r\n                handleUndoInteraction={handleUndoInteraction}\r\n                handleRedoInteraction={handleRedoInteraction}\r\n                handleCreateSticker={handleCreateSticker}\r\n                handleMagicErase={handleMagicErase}\r\n                handleImage={handleImage}\r\n                hasClicked={hasClicked}\r\n                isCutOut={[isCutOut, setIsCutOut]}\r\n                handleMultiMaskMode={handleMultiMaskMode}\r\n              />\r\n            )}\r\n          </div>\r\n\r\n          <div\r\n            onClick={() => {\r\n              segmentTypes !== \"All\" && handleResetInteraction();\r\n              getCookieConsentValue(\"sa_demo\") === \"true\" &&\r\n                ReactGA.default.send({\r\n                  category: \"event\",\r\n                  action: \"is_amg\",\r\n                });\r\n              clearTimeout(allTimeout);\r\n              setSegmentTypes(\"All\");\r\n              setIsCutOut(false);\r\n              setDidShowAMGAnimation(false);\r\n            }}\r\n            className={`transition-all overflow-hidden ${\r\n              segmentTypes === \"All\" &&\r\n              isAllAnimationDone === false &&\r\n              \"disabled\"\r\n            } ${\r\n              segmentTypes !== \"All\" &&\r\n              (isAllCollapsed ? \"max-h-[40px]\" : \"max-h-[85px]\")\r\n            } my-2 rounded-xl px-4 py-2 cursor-pointer ${\r\n              segmentTypes === \"All\"\r\n                ? \"outline-blue-700 outline outline-[2.5px]\"\r\n                : \"outline outline-gray-200\"\r\n            } ${\r\n              (!isModelLoaded[\"allModel\"] || (isLoading && !isErased)) &&\r\n              \"pointer-events-none\"\r\n            } ${isCutOut && \"hidden\"}`}\r\n            onMouseEnter={() => {\r\n              clearTimeout(allTimeout);\r\n              allTimeout = setTimeout(() => {\r\n                setIsAllCollapsed(false);\r\n                setVisibleAllHover(true);\r\n                setIsAllMounted(true);\r\n              }, 700);\r\n            }}\r\n            onMouseLeave={() => {\r\n              setIsClickCollapsed(true);\r\n              setIsBoxCollapsed(true);\r\n              setIsAllCollapsed(true);\r\n              setIsCutOutCollapsed(true);\r\n              // setVisibleAllHover(false);\r\n              clearTimeout(allTimeout);\r\n              setIsClickMounted(false);\r\n              setIsBoxMounted(false);\r\n              setIsAllMounted(false);\r\n              setIsCutOutMounted(false);\r\n            }}\r\n          >\r\n            <div className=\"flex\">\r\n              <Sparkle isActive={true} />\r\n              <span\r\n                className={`pl-3 font-bold ${\r\n                  segmentTypes === \"All\" && \"text-blue-600\"\r\n                } ${\r\n                  (!isModelLoaded[\"allModel\"] || (isLoading && !isErased)) &&\r\n                  \"disabled\"\r\n                }`}\r\n              >\r\n                Everything\r\n              </span>\r\n            </div>\r\n            {segmentTypes !== \"All\" && visibleAllHover && (\r\n              <Animate isMounted={isAllMounted}>\r\n                <p\r\n                  className={`text-xs my-3 opacity-70 ${\r\n                    (!isModelLoaded[\"allModel\"] || (isLoading && !isErased)) &&\r\n                    \"disabled\"\r\n                  }`}\r\n                >\r\n                  Find all the objects in the image automatically.\r\n                </p>\r\n              </Animate>\r\n            )}\r\n            {segmentTypes === \"All\" && (\r\n              <p\r\n                className={`text-xs my-3 opacity-70 text-blue-700 ${\r\n                  (!isModelLoaded[\"allModel\"] || (isLoading && !isErased)) &&\r\n                  \"disabled\"\r\n                }`}\r\n              >\r\n                Find all the objects in the image automatically.\r\n              </p>\r\n            )}\r\n            {segmentTypes === \"All\" && (\r\n              <SegmentOptions\r\n                handleResetInteraction={handleResetInteraction}\r\n                handleUndoInteraction={handleUndoInteraction}\r\n                handleRedoInteraction={handleRedoInteraction}\r\n                handleCreateSticker={handleCreateSticker}\r\n                handleMagicErase={handleMagicErase}\r\n                handleImage={handleImage}\r\n                hasClicked={hasClicked}\r\n                isCutOut={[isCutOut, setIsCutOut]}\r\n                handleMultiMaskMode={handleMultiMaskMode}\r\n              />\r\n            )}\r\n          </div>\r\n\r\n          <div\r\n            onClick={(e) => {\r\n              clearTimeout(cutOutTimeout);\r\n              setIsMultiMaskMode(false);\r\n              setIsCutOut(true);\r\n              setUploadClick(false);\r\n              getCookieConsentValue(\"sa_demo\") === \"true\" &&\r\n                ReactGA.default.send({\r\n                  category: \"event\",\r\n                  action: \"is_cutout\",\r\n                });\r\n            }}\r\n            className={`transition-all overflow-hidden my-2 rounded-xl px-4 py-2 cursor-pointer ${\r\n              isCutOut\r\n                ? \"outline-blue-700 outline outline-[2.5px]\"\r\n                : \"outline outline-gray-200\"\r\n            }`}\r\n            onMouseEnter={() => {\r\n              clearTimeout(cutOutTimeout);\r\n              cutOutTimeout = setTimeout(() => {\r\n                setIsCutOutCollapsed(false);\r\n                setVisibleStickerHover(true);\r\n                setIsCutOutMounted(true);\r\n              }, 700);\r\n            }}\r\n            onMouseLeave={() => {\r\n              setIsClickCollapsed(true);\r\n              setIsBoxCollapsed(true);\r\n              setIsAllCollapsed(true);\r\n              setIsCutOutCollapsed(true);\r\n              clearTimeout(cutOutTimeout);\r\n              // setVisibleStickerHover(false);\r\n              setIsClickMounted(false);\r\n              setIsBoxMounted(false);\r\n              setIsAllMounted(false);\r\n              setIsCutOutMounted(false);\r\n            }}\r\n          >\r\n            <div\r\n              className={`flex ${\r\n                isCutOut === false &&\r\n                (isCutOutCollapsed ? \"max-h-[40px]\" : \"max-h-[2048px]\")\r\n              }`}\r\n            >\r\n              <svg\r\n                width=\"18\"\r\n                height=\"18\"\r\n                viewBox=\"0 0 18 18\"\r\n                fill=\"none\"\r\n                className=\"mt-1\"\r\n              >\r\n                <path\r\n                  d=\"M10.575 6.3C10.575 5.175 11.0812 4.5 11.925 4.5C12.7687 4.5 13.275 5.175 13.275 6.3C13.275 7.425 12.7687 8.1 11.925 8.1C11.0812 8.1 10.575 7.425 10.575 6.3Z\"\r\n                  fill={`${isCutOut ? \"#2962D9\" : \"#000000\"}`}\r\n                />\r\n                <path\r\n                  d=\"M6.075 4.5C5.23125 4.5 4.725 5.175 4.725 6.3C4.725 7.425 5.23125 8.1 6.075 8.1C6.91875 8.1 7.425 7.425 7.425 6.3C7.425 5.175 6.91875 4.5 6.075 4.5Z\"\r\n                  fill={`${isCutOut ? \"#2962D9\" : \"#000000\"}`}\r\n                />\r\n                <path\r\n                  fillRule=\"evenodd\"\r\n                  clipRule=\"evenodd\"\r\n                  d=\"M18 10.2088V3.6C18 1.61177 16.3882 0 14.4 0H3.6C1.61177 0 0 1.61177 0 3.6V14.4C0 16.3882 1.61177 18 3.6 18H10.2088C11.1636 18 12.0793 17.6207 12.7544 16.9456L16.9456 12.7544C17.6207 12.0793 18 11.1636 18 10.2088ZM3.6 2.25H14.4C15.1456 2.25 15.75 2.85442 15.75 3.6V8.75C15.75 8.88807 15.6381 9 15.5 9H12.6C10.8656 9 9.4177 10.2265 9.07625 11.8594C9.06866 11.8957 9.03707 11.9225 8.99998 11.9225C7.65188 11.9225 6.41916 11.4285 5.47297 10.6116C5.07293 10.2662 4.45995 10.2265 4.08625 10.6001C3.75946 10.9269 3.73435 11.4546 4.07118 11.771C5.3028 12.928 6.94175 13.6565 8.74991 13.7182C8.8879 13.7229 8.99998 13.8344 8.99998 13.9725L9 15.5C9 15.6381 8.88807 15.75 8.75 15.75H3.6C2.85442 15.75 2.25 15.1456 2.25 14.4V3.6C2.25 2.85442 2.85442 2.25 3.6 2.25Z\"\r\n                  fill={`${isCutOut ? \"#2962D9\" : \"#000000\"}`}\r\n                />\r\n              </svg>\r\n              <span className={`pl-2 font-bold ${isCutOut && \"text-blue-600\"}`}>\r\n                Cut-Outs\r\n              </span>\r\n              {isCutOut && (\r\n                <button\r\n                  className=\"ml-auto font-bold\"\r\n                  onClick={(e) => {\r\n                    e.stopPropagation();\r\n                    setIsCutOut(false);\r\n                    setSegmentTypes(\"Click\");\r\n                    setUploadClick(true);\r\n                  }}\r\n                >\r\n                  Close\r\n                </button>\r\n              )}\r\n            </div>\r\n            {isCutOut === false && visibleStickerHover && (\r\n              <Animate isMounted={isCutOutMounted}>\r\n                <p className=\"my-2 text-xs opacity-70\">See Cut-outs</p>\r\n              </Animate>\r\n            )}\r\n            {isCutOut && (\r\n              <>\r\n                <Animate isMounted={isCutOut}>\r\n                  <p className=\"my-1 text-xs text-blue-700\">See Cut-outs</p>\r\n                  <div className=\"overflow-y-auto h-[30rem] text-center\">\r\n                    {stickers.map((el: HTMLCanvasElement, i) => (\r\n                      <img\r\n                        key={i}\r\n                        className={`sticker m-5 max-w-[75%] max-h-20 md:max-h-24 lg:max-h-28 xl:max-h-32 cursor-pointer inline hover:opacity-100 ${\r\n                          i === activeSticker ? \"sticker-select\" : \"\"\r\n                        }`}\r\n                        alt=\"sticker\"\r\n                        src={el.toDataURL()}\r\n                        onClick={(e) => handleStickerClick(i)}\r\n                      />\r\n                    ))}\r\n                  </div>\r\n                </Animate>\r\n              </>\r\n            )}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </section>\r\n  );\r\n};\r\n\r\nexport default SegmentDrawer;\r\n"
  },
  {
    "path": "src/components/SegmentOptions.tsx",
    "content": "import React, { useContext } from \"react\";\r\nimport AppContext from \"./hooks/createContext\";\r\n\r\ninterface SegmentOptionsProps {\r\n  handleResetInteraction: () => void;\r\n  handleUndoInteraction: () => void;\r\n  handleRedoInteraction: () => void;\r\n  handleCreateSticker: () => void;\r\n  handleMagicErase: () => void;\r\n  handleImage: (img?: HTMLImageElement) => void;\r\n  hasClicked: boolean;\r\n  isCutOut: [isCutOut: boolean, setIsCutOut: (e: boolean) => void];\r\n  handleMultiMaskMode: () => void;\r\n}\r\n\r\nconst SegmentOptions = ({\r\n  handleResetInteraction,\r\n  handleUndoInteraction,\r\n  handleRedoInteraction,\r\n  handleCreateSticker,\r\n  handleMagicErase,\r\n  handleImage,\r\n  hasClicked,\r\n  isCutOut: [isCutOut, setIsCutOut],\r\n  handleMultiMaskMode,\r\n}: SegmentOptionsProps) => {\r\n  const {\r\n    isModelLoaded: [isModelLoaded, setIsModelLoaded],\r\n    segmentTypes: [segmentTypes, setSegmentTypes],\r\n    isLoading: [isLoading, setIsLoading],\r\n    isErased: [isErased, setIsErased],\r\n    svg: [svg, setSVG],\r\n    clicksHistory: [clicksHistory, setClicksHistory],\r\n    image: [image],\r\n    isMultiMaskMode: [isMultiMaskMode, setIsMultiMaskMode],\r\n    svgs: [svgs, setSVGs],\r\n    clicks: [clicks, setClicks],\r\n    showLoadingModal: [showLoadingModal, setShowLoadingModal],\r\n    didShowAMGAnimation: [didShowAMGAnimation, setDidShowAMGAnimation],\r\n  } = useContext(AppContext)!;\r\n  return (\r\n    <>\r\n      <div\r\n        className={`flex justify-between px-4 py-2 my-2 text-sm bg-gray-200 rounded-xl opacity-70 ${\r\n          segmentTypes === \"All\" && \"hidden\"\r\n        } ${isCutOut && \"hidden\"}`}\r\n      >\r\n        <button\r\n          onClick={() => {\r\n            if (isErased) {\r\n              setIsErased(false);\r\n              setIsLoading(true);\r\n              handleImage();\r\n            }\r\n            setSegmentTypes(\"Click\");\r\n            handleResetInteraction();\r\n          }}\r\n          className={`${\r\n            ((!svg && !svgs && !isErased) || segmentTypes === \"All\") &&\r\n            \"disabled\"\r\n          }`}\r\n        >\r\n          Reset\r\n        </button>\r\n        <button\r\n          onClick={handleUndoInteraction}\r\n          className={`${\r\n            (!svg || segmentTypes === \"All\" || isMultiMaskMode) && \"disabled\"\r\n          }`}\r\n        >\r\n          Undo\r\n        </button>\r\n        <button\r\n          onClick={handleRedoInteraction}\r\n          className={`${\r\n            (!clicksHistory?.length || segmentTypes === \"All\") && \"disabled\"\r\n          }`}\r\n        >\r\n          Redo\r\n        </button>\r\n      </div>\r\n      <div\r\n        className={`flex flex-col gap-3 py-3 pl-3 text-sm bg-gray-200 cursor-pointer rounded-xl ${\r\n          hasClicked &&\r\n          \"bg-gradient-to-r from-gray-200 to-blue-400/30 background-animate\"\r\n        } ${isCutOut && \"hidden\"}`}\r\n      >\r\n        {segmentTypes === \"Click\" && (\r\n          <button\r\n            onClick={() => {\r\n              handleMultiMaskMode();\r\n              setDidShowAMGAnimation(false);\r\n            }}\r\n            className=\"flex opacity-70\"\r\n          >\r\n            <svg\r\n              width=\"20\"\r\n              height=\"20\"\r\n              viewBox=\"0 0 20 20\"\r\n              fill=\"none\"\r\n              xmlns=\"http://www.w3.org/2000/svg\"\r\n            >\r\n              <rect\r\n                x=\"1\"\r\n                y=\"1\"\r\n                width=\"12\"\r\n                height=\"12\"\r\n                rx=\"2\"\r\n                fill=\"#DEE3E9\"\r\n                stroke={isMultiMaskMode ? \"#2962D9\" : \"#1C2A33\"}\r\n                strokeWidth=\"2\"\r\n              />\r\n              <rect\r\n                x=\"4\"\r\n                y=\"4\"\r\n                width=\"12\"\r\n                height=\"12\"\r\n                rx=\"2\"\r\n                fill=\"#DEE3E9\"\r\n                stroke={isMultiMaskMode ? \"#2962D9\" : \"#1C2A33\"}\r\n                strokeWidth=\"2\"\r\n              />\r\n              <rect\r\n                x=\"7\"\r\n                y=\"7\"\r\n                width=\"12\"\r\n                height=\"12\"\r\n                rx=\"2\"\r\n                fill=\"#DEE3E9\"\r\n                stroke={isMultiMaskMode ? \"#2962D9\" : \"#1C2A33\"}\r\n                strokeWidth=\"2\"\r\n              />\r\n            </svg>\r\n\r\n            <span\r\n              className={`pl-2 opacity-70 font-bold ${\r\n                isMultiMaskMode && \"text-blue-600 \"\r\n              }`}\r\n            >\r\n              Multi-mask\r\n            </span>\r\n          </button>\r\n        )}\r\n        {/* <button\r\n          className={`flex ${!svg && \"disabled\"} ${\r\n            segmentTypes === \"All\" && \"hidden\"\r\n          }`}\r\n          onClick={() => {\r\n            handleMagicErase();\r\n            setShowLoadingModal(true);\r\n          }}\r\n        >\r\n          <img src=\"assets/erase.svg\" />\r\n          <span className=\"pl-2 opacity-70\">Erase Object</span>\r\n        </button> */}\r\n        <button\r\n          className={`flex ${!svg && segmentTypes !== \"All\" && \"disabled\"} `}\r\n          onClick={(e) => {\r\n            handleCreateSticker();\r\n            e.stopPropagation();\r\n            setIsCutOut(true);\r\n          }}\r\n        >\r\n          <svg\r\n            width=\"16\"\r\n            height=\"16\"\r\n            viewBox=\"0 0 16 16\"\r\n            fill=\"none\"\r\n            xmlns=\"http://www.w3.org/2000/svg\"\r\n          >\r\n            <path\r\n              d=\"M11.7895 0H13.4737V2.52632H16V4.21053H13.4737V6.73684H11.7895V4.21053H9.26316V2.52632H11.7895V0ZM3.36842 2.52632H6.73684V4.21053H3.36842C2.44211 4.21053 1.68421 4.96842 1.68421 5.89474V12.6316C1.68421 13.5663 2.44211 14.3158 3.36842 14.3158H10.1053C11.04 14.3158 11.7895 13.5663 11.7895 12.6316V9.26316H13.4737V12.6316C13.4737 14.4926 11.9663 16 10.1053 16H3.36842C1.50737 16 0 14.4926 0 12.6316V5.89474C0 4.03368 1.50737 2.52632 3.36842 2.52632Z\"\r\n              fill=\"black\"\r\n            />\r\n          </svg>\r\n          <span className=\"pl-2 opacity-70\">\r\n            {segmentTypes === \"All\" ? \"Cut out all objects\" : \"Cut out object\"}\r\n          </span>\r\n        </button>\r\n      </div>\r\n    </>\r\n  );\r\n};\r\n\r\nexport default SegmentOptions;\r\n"
  },
  {
    "path": "src/components/Sparkle.tsx",
    "content": "import React, { useContext, useEffect, useState } from \"react\";\r\nimport AppContext from \"./hooks/createContext\";\r\n\r\nconst Sparkle = ({ isActive }: { isActive: Boolean }) => {\r\n  const {\r\n    isModelLoaded: [isModelLoaded, setIsModelLoaded],\r\n    segmentTypes: [segmentTypes, setSegmentTypes],\r\n  } = useContext(AppContext)!;\r\n  const FILL = segmentTypes === \"All\" ? \"#2962D9\" : \"#000\";\r\n  const [showStar1, setShowStar1] = useState<Boolean>(false);\r\n  const [showStar2, setShowStar2] = useState<Boolean>(false);\r\n  const [showStar3, setShowStar3] = useState<Boolean>(false);\r\n  const [timers, setTimers] = useState(new Array(6).fill(null));\r\n\r\n  const animate = () => {\r\n    setShowStar1(true);\r\n    setTimers([\r\n      setTimeout(() => {\r\n        setShowStar2(true);\r\n        setTimers((prev) => [\r\n          ...prev,\r\n          setTimeout(() => {\r\n            setShowStar3(true);\r\n            setTimers((prev) => [\r\n              ...prev,\r\n              setTimeout(() => {\r\n                setShowStar3(false);\r\n                setTimers((prev) => [\r\n                  ...prev,\r\n                  setTimeout(() => {\r\n                    setShowStar2(false);\r\n                    setTimers((prev) => [\r\n                      ...prev,\r\n                      setTimeout(() => {\r\n                        setShowStar1(false);\r\n                        setTimers((prev) => [\r\n                          ...prev,\r\n                          setTimeout(() => {\r\n                            animate();\r\n                          }, 700),\r\n                        ]);\r\n                      }, 100),\r\n                    ]);\r\n                  }, 150),\r\n                ]);\r\n              }, 800),\r\n            ]);\r\n          }, 100),\r\n        ]);\r\n      }, 150),\r\n    ]);\r\n  };\r\n\r\n  const clearTimers = () => {\r\n    for (const timer of timers) {\r\n      clearTimeout(timer);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (!isModelLoaded.allModel) {\r\n      animate();\r\n    } else {\r\n      clearTimers();\r\n    }\r\n    return () => {\r\n      clearTimers();\r\n    };\r\n  }, [isModelLoaded.allModel]);\r\n\r\n  return (\r\n    <>\r\n      <svg\r\n        className=\"w-5 m-1 md:m-0\"\r\n        width=\"22\"\r\n        height=\"22\"\r\n        viewBox=\"0 0 22 22\"\r\n        fill=\"none\"\r\n        xmlns=\"http://www.w3.org/2000/svg\"\r\n      >\r\n        <path\r\n          d=\"M8 3L5.5 8.5L0 11L5.5 13.5L8 19L10.5 13.5L16 11L10.5 8.5\"\r\n          fill={isActive ? FILL : \"#000\"}\r\n          className={`${\r\n            isModelLoaded.allModel ? \"\" : \"ease-in-out duration-1000\"\r\n          }${\r\n            showStar1 || isModelLoaded.allModel ? \" opacity-100\" : \" opacity-0\"\r\n          }`}\r\n        />\r\n        <path\r\n          d=\"M18 14L16.74 16.74L14 18L16.74 19.25L18 22L19.25 19.25L22 18L19.25 16.74\"\r\n          fill={isActive ? FILL : \"#000\"}\r\n          className={`${\r\n            isModelLoaded.allModel ? \"\" : \"ease-in-out duration-1000\"\r\n          }${\r\n            showStar2 || isModelLoaded.allModel ? \" opacity-100\" : \" opacity-0\"\r\n          }`}\r\n        />\r\n        <path\r\n          d=\"M18 0L16.74 2.75L14 4L16.74 5.26L18 8L19.25 5.26L22 4L19.25 2.75\"\r\n          fill={isActive ? FILL : \"#000\"}\r\n          className={`${\r\n            isModelLoaded.allModel ? \"\" : \"ease-in-out duration-1000\"\r\n          }${\r\n            showStar3 || isModelLoaded.allModel ? \" opacity-100\" : \" opacity-0\"\r\n          }`}\r\n        />\r\n      </svg>\r\n    </>\r\n  );\r\n};\r\n\r\nexport default Sparkle;\r\n"
  },
  {
    "path": "src/components/Stage.tsx",
    "content": "import Konva from \"konva\";\r\nimport React, {\r\n  Profiler,\r\n  useContext,\r\n  useEffect,\r\n  useRef,\r\n  useState,\r\n} from \"react\";\r\nimport * as _ from \"underscore\";\r\nimport Canvas from \"./Canvas\";\r\nimport FeatureSummary from \"./FeatureSummary\";\r\nimport {\r\n  AnnotationProps,\r\n  modelInputProps,\r\n  StageProps,\r\n} from \"./helpers/Interface\";\r\nimport AppContext from \"./hooks/createContext\";\r\nimport ImagePicker from \"./ImagePicker\";\r\nimport LoadingModal from \"./LoadingModal\";\r\nimport MobileOptionNavBar from \"./MobileOptionNavBar\";\r\nimport MobileSegmentDrawer from \"./MobileSegmentDrawer\";\r\nimport PointsModal from \"./PointsModal\";\r\nimport SegmentDrawer from \"./SegmentDrawer\";\r\nimport ToolTip from \"./ToolTip\";\r\n\r\ntype Points = { sx: number; sy: number; x: number; y: number };\r\n\r\nconst Stage = ({\r\n  scale,\r\n  handleResetState,\r\n  handleMagicErase,\r\n  handleImage,\r\n  hasClicked,\r\n  setHasClicked,\r\n  handleSelectedImage,\r\n  image,\r\n  isStandalone,\r\n  model,\r\n}: StageProps) => {\r\n  const {\r\n    click: [click, setClick],\r\n    clicks: [clicks, setClicks],\r\n    clicksHistory: [clicksHistory, setClicksHistory],\r\n    svg: [svg, setSVG],\r\n    stickers: [stickers, setStickers],\r\n    segmentTypes: [segmentTypes, setSegmentTypes],\r\n    isErased: [isErased, setIsErased],\r\n    canvasHeight: [canvasHeight, setCanvasHeight],\r\n    maskImg: [, setMaskImg],\r\n    userNegClickBool: [userNegClickBool, setUserNegClickBool],\r\n    activeSticker: [activeSticker, setActiveSticker],\r\n    isLoading: [isLoading, setIsLoading],\r\n    hasNegClicked: [hasNegClicked, setHasNegClicked],\r\n    stickerTabBool: [stickerTabBool, setStickerTabBool],\r\n    isMultiMaskMode: [isMultiMaskMode, setIsMultiMaskMode],\r\n    svgs: [svgs, setSVGs],\r\n    isHovering: [isHovering, setIsHovering],\r\n    showLoadingModal: [showLoadingModal, setShowLoadingModal],\r\n    predMask: [predMask, setPredMask],\r\n    predMasks: [predMasks, setPredMasks],\r\n    predMasksHistory: [predMasksHistory, setPredMasksHistory],\r\n    isToolBarUpload: [isToolBarUpload, setIsToolBarUpload],\r\n  } = useContext(AppContext)!;\r\n  const [annotations, setAnnotations] = useState<Array<AnnotationProps>>([]);\r\n  const [newAnnotation, setNewAnnotation] = useState<Array<AnnotationProps>>(\r\n    []\r\n  );\r\n  const [prevAnnotaiton, setPrevAnnotation] = useState<Array<AnnotationProps>>(\r\n    []\r\n  );\r\n  const [showGallery, setShowGallery] = useState<boolean>(true);\r\n  const [isHoverToolTip, setIsHoverToolTip] = useState<boolean>(false);\r\n  const [numOfDragEvents, setNumOfDragEvents] = useState<number>(0);\r\n  const [shouldUpdateOnDrag, setShouldUpdateOnDrag] = useState<boolean>(true);\r\n  const [points, setPoints] = useState<Points>();\r\n  const [canvasScale, setCanvasScale] = useState<number>(1);\r\n  const [homepageTimer, setHomepageTimer] = useState<any>();\r\n  const [shouldShowHomepageOverlay, setShouldShowHomepageOverlay] =\r\n    useState(false);\r\n  const DRAG_THRESHOLD = 4;\r\n  const HOMEPAGE_IMAGE = \"/assets/gallery/dogs-with-stick.jpg\";\r\n  const HOMEPAGE_TIME_LIMIT = 5000;\r\n  const MOBILE_CUTOUT_LIMIT = 30;\r\n  const konvaRef = useRef<Konva.Stage>(null);\r\n  const containerRef = useRef<HTMLDivElement>(null);\r\n  const [allText, setAllText] = useState<\r\n    string | React.DOMElement<React.DOMAttributes<HTMLElement>, HTMLElement>\r\n  >(\"\");\r\n\r\n  useEffect(() => {\r\n    if (isStandalone && model) {\r\n      const url = new URL(HOMEPAGE_IMAGE, location.origin);\r\n      handleSelectedImage(url, {\r\n        // shouldDownload: true,\r\n        shouldNotFetchAllModel: true,\r\n      });\r\n    }\r\n    return () => {\r\n      handleResetState();\r\n    };\r\n  }, [isStandalone, model]);\r\n\r\n  useEffect(() => {\r\n    if (isStandalone && clicks && clicks?.length > 0) {\r\n      setHomepageTimer(\r\n        setTimeout(() => {\r\n          setShouldShowHomepageOverlay(true);\r\n        }, HOMEPAGE_TIME_LIMIT)\r\n      );\r\n    } else {\r\n      homepageTimer && clearTimeout(homepageTimer);\r\n    }\r\n    return () => {\r\n      homepageTimer && clearTimeout(homepageTimer);\r\n    };\r\n  }, [isStandalone, clicks]);\r\n\r\n  const superDefer = (cb: Function) => {\r\n    setTimeout(\r\n      () =>\r\n        window.requestAnimationFrame(() => {\r\n          setTimeout(() => {\r\n            cb();\r\n          }, 0);\r\n        }),\r\n      0\r\n    );\r\n  };\r\n\r\n  const handleCreateSticker = () => {\r\n    if (konvaRef.current === null) return;\r\n    setIsLoading(true);\r\n    superDefer(() =>\r\n      superDefer(() => superDefer(() => superDefer(doHandleCreateSticker)))\r\n    );\r\n  };\r\n\r\n  const doHandleCreateSticker = () => {\r\n    if (konvaRef.current === null) return;\r\n\r\n    const cropImageFromCanvasTS = (ref: any) => {\r\n      let newCanvas = null;\r\n      try {\r\n        const canvas = ref!.toCanvas().getContext(\"2d\");\r\n\r\n        let w = ref.width();\r\n        let h = ref.height();\r\n        const pix: { x: number[]; y: number[] } = { x: [], y: [] };\r\n        const imageData = canvas.getImageData(0, 0, w, h);\r\n        let x;\r\n        let y;\r\n        let index;\r\n\r\n        for (y = 0; y < h; y++) {\r\n          for (x = 0; x < w; x++) {\r\n            index = (y * w + x) * 4;\r\n            if (imageData.data[index + 3] > 0) {\r\n              pix.x.push(x);\r\n              pix.y.push(y);\r\n            }\r\n          }\r\n        }\r\n        pix.x.sort(function (a: number, b: number) {\r\n          return a - b;\r\n        });\r\n        pix.y.sort(function (a: number, b: number) {\r\n          return a - b;\r\n        });\r\n        const n = pix.x.length - 1;\r\n\r\n        w = 1 + pix.x[n] - pix.x[0];\r\n        h = 1 + pix.y[n] - pix.y[0];\r\n        const cut = canvas.getImageData(pix.x[0], pix.y[0], w, h);\r\n\r\n        canvas.width = w;\r\n        canvas.height = h;\r\n        canvas.putImageData(cut, 0, 0);\r\n        newCanvas = document.createElement(\"canvas\");\r\n        newCanvas.width = w;\r\n        newCanvas.height = h;\r\n        newCanvas.getContext(\"2d\")!.putImageData(cut, 0, 0);\r\n      } catch (error) {\r\n        console.log(error);\r\n        return;\r\n      }\r\n      return newCanvas;\r\n    };\r\n\r\n    const isMobile = window.innerWidth < 768;\r\n    const konvaClone = konvaRef.current.clone();\r\n    const svgLayer = konvaClone.findOne(\".svgMask\");\r\n    const pathNodes = svgLayer.find(\"Path\");\r\n    const imageNode = svgLayer.find(\"Image\")[0];\r\n    if (segmentTypes === \"All\") {\r\n      for (const pathNode of pathNodes) {\r\n        pathNode.attrs.visible = true;\r\n      }\r\n    }\r\n    const newStickers: HTMLCanvasElement[] = [];\r\n    let counter = 0;\r\n    konvaClone.findOne(\".annotations\").hide();\r\n    konvaClone.findOne(\".animateAllSvg\").hide();\r\n    svgLayer.globalCompositeOperation(\"destination-atop\");\r\n    imageNode.opacity(-1);\r\n    imageNode.remove();\r\n    for (const pathNode of pathNodes) {\r\n      pathNode.opacity(-1).remove();\r\n    }\r\n    for (const pathNode of pathNodes) {\r\n      counter++;\r\n      svgLayer.add(imageNode);\r\n      svgLayer.add(pathNode);\r\n      const newSticker = cropImageFromCanvasTS(konvaClone);\r\n      if (newSticker) newStickers.push(newSticker);\r\n      imageNode.remove();\r\n      pathNode.remove();\r\n      if (isMobile && counter === MOBILE_CUTOUT_LIMIT) break;\r\n    }\r\n    setActiveSticker(0);\r\n    setStickers([...(newStickers || []), ...(stickers || [])]);\r\n    handleResetInteraction();\r\n    setIsLoading(false);\r\n  };\r\n\r\n  const handleMouseDown = (e: any) => {\r\n    if (stickerTabBool) return;\r\n    if (clicksHistory) setClicksHistory(null);\r\n    if (predMasksHistory) setPredMasksHistory(null);\r\n    if (segmentTypes !== \"Box\") return;\r\n    const { x, y } = e.target.getStage().getPointerPosition();\r\n    setNumOfDragEvents(0);\r\n    if (newAnnotation.length === 0) {\r\n      setNewAnnotation([{ x, y, width: 0, height: 0, clickType: -1 }]);\r\n    }\r\n  };\r\n\r\n  const handleMoveToMask = _.throttle((e: any, x: number, y: number) => {\r\n    const click = getClick(e, x, y);\r\n    if (!click) return;\r\n    setClicks([click]);\r\n  }, 15);\r\n\r\n  const handleMouseMove = (e: any) => {\r\n    if (stickerTabBool) return;\r\n    const { x, y } = e.target.getStage().getPointerPosition();\r\n    if (segmentTypes === \"Click\" && shouldUpdateOnDrag && !hasClicked) {\r\n      handleMoveToMask(e, x, y);\r\n    } else if (newAnnotation.length === 1) {\r\n      const sx = newAnnotation[0].x;\r\n      const sy = newAnnotation[0].y;\r\n      setNewAnnotation([getAnnotation({ sx, sy, x, y })]);\r\n      setAnnotations([]);\r\n      if (shouldUpdateOnDrag) {\r\n        setPoints({ sx, sy, x, y });\r\n        setNumOfDragEvents((prevValue) => prevValue + 1);\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (shouldUpdateOnDrag) {\r\n      if (numOfDragEvents === DRAG_THRESHOLD && points) {\r\n        setNumOfDragEvents(0);\r\n        handleSegmentByBox(points);\r\n      }\r\n    }\r\n  }, [numOfDragEvents, points]);\r\n\r\n  const handleMouseUp = (e: any, shouldSetClick?: boolean) => {\r\n    if (stickerTabBool) return;\r\n    setIsLoading(true);\r\n    setHasClicked(true);\r\n    const { x, y } = e.target.getStage().getPointerPosition();\r\n    switch (segmentTypes) {\r\n      case \"Click\":\r\n        if (hasClicked || shouldSetClick) {\r\n          if (shouldSetClick) {\r\n            const newClick = getClick(e, x, y) || null;\r\n            if (newClick?.clickType === 0) {\r\n              setHasNegClicked(true);\r\n            }\r\n            setClick(newClick);\r\n          } else {\r\n            handleSegmentByClick(e, x, y);\r\n          }\r\n        }\r\n        break;\r\n      case \"Box\":\r\n        const sx = newAnnotation[0].x;\r\n        const sy = newAnnotation[0].y;\r\n        const width = x - sx;\r\n        const height = y - sy;\r\n        const isClick = width === 0 && height === 0;\r\n        setNewAnnotation([]);\r\n        if (isClick) {\r\n          // A box must exist before a click is accepted\r\n          if (clicks?.length && clicks[0].width && clicks[0].height) {\r\n            const newClick = getClick(e, x, y);\r\n            const boxPoints = {\r\n              sx: (clicks[0].x * canvasScale) / scale!.scale,\r\n              sy: (clicks[0].y * canvasScale) / scale!.scale,\r\n              x: (clicks[0].width * canvasScale) / scale!.scale,\r\n              y: (clicks[0].height * canvasScale) / scale!.scale,\r\n            };\r\n            adjustPointsToRange(boxPoints, newClick);\r\n            setAnnotations([getAnnotation(boxPoints)]);\r\n            handleSegmentByBox(boxPoints, newClick);\r\n          } else {\r\n            setHasClicked(false);\r\n            setIsLoading(false);\r\n          }\r\n        } else {\r\n          const points = { sx, sy, x, y };\r\n          setPoints(points);\r\n          adjustPointsToRange(points);\r\n          setAnnotations([getAnnotation(points)]);\r\n          handleSegmentByBox(points);\r\n        }\r\n        break;\r\n      default:\r\n        break;\r\n        // return null;\r\n    }\r\n  };\r\n\r\n  const handleMouseOut = () => {\r\n    if (stickerTabBool) return;\r\n    if (clicks?.length === 1 && segmentTypes === \"Click\" && !hasClicked) {\r\n      _.defer(handleResetInteraction);\r\n      setTimeout(handleResetInteraction, 25);\r\n    }\r\n  };\r\n\r\n  const getClick = (\r\n    e: any,\r\n    x: number,\r\n    y: number\r\n  ): modelInputProps | undefined => {\r\n    let clickType;\r\n    if (e.evt.button === 0 || !e.evt.button) {\r\n      clickType = 1;\r\n    } else if (e.evt.button === 2) {\r\n      clickType = 0;\r\n    }\r\n    if (clickType === undefined) return;\r\n    if (userNegClickBool) clickType = 0;\r\n    x *= scale!.scale / canvasScale;\r\n    y *= scale!.scale / canvasScale;\r\n    return { x, y, width: null, height: null, clickType };\r\n  };\r\n\r\n  const handleSegmentByClick = (e: any, x: number, y: number) => {\r\n    const click = getClick(e, x, y);\r\n    if (!click) return;\r\n    setClicks([...(clicks || []), click]);\r\n  };\r\n\r\n  const handleSegmentByBox = (\r\n    { sx, sy, x, y }: Points,\r\n    extraClick?: modelInputProps,\r\n    newerClicks?: modelInputProps[]\r\n  ) => {\r\n    sx *= scale!.scale / canvasScale;\r\n    sy *= scale!.scale / canvasScale;\r\n    x *= scale!.scale / canvasScale;\r\n    y *= scale!.scale / canvasScale;\r\n    const newClick = {\r\n      x: Math.min(sx, x),\r\n      y: Math.min(sy, y),\r\n      width: Math.max(sx, x),\r\n      height: Math.max(sy, y),\r\n      clickType: 2,\r\n    };\r\n    const newClicks = newerClicks || [...(clicks || [])];\r\n    if (extraClick) {\r\n      newClicks.push(extraClick);\r\n    }\r\n    if (newClicks[0] && !newClicks[0].width) {\r\n      newClicks.unshift(newClick);\r\n    } else {\r\n      newClicks[0] = newClick;\r\n    }\r\n    setClicks(newClicks);\r\n  };\r\n\r\n  const getAnnotation = ({ sx, sy, x, y }: Points): AnnotationProps => {\r\n    return {\r\n      x: sx,\r\n      y: sy,\r\n      width: x - sx,\r\n      height: y - sy,\r\n      clickType: 2,\r\n    };\r\n  };\r\n\r\n  const adjustPointsToRange = (\r\n    points: Points,\r\n    extraClick?: modelInputProps,\r\n    newClicks?: modelInputProps[]\r\n  ) => {\r\n    const range = findClickRange(extraClick, newClicks);\r\n    if (!range || !range.xMin || !range.yMin || !range.xMax || !range.yMax)\r\n      return;\r\n    let { sx, sy, x, y } = points;\r\n    const xMin = Math.min(sx, x);\r\n    const yMin = Math.min(sy, y);\r\n    const xMax = Math.max(sx, x);\r\n    const yMax = Math.max(sy, y);\r\n    if (range.xMin < xMin) {\r\n      if (sx < x) {\r\n        sx = range.xMin;\r\n      } else {\r\n        x = range.xMin;\r\n      }\r\n    }\r\n    if (range.yMin < yMin) {\r\n      if (sy < y) {\r\n        sy = range.yMin;\r\n      } else {\r\n        y = range.yMin;\r\n      }\r\n    }\r\n    if (range.xMax > xMax) {\r\n      if (sx > x) {\r\n        sx = range.xMax;\r\n      } else {\r\n        x = range.xMax;\r\n      }\r\n    }\r\n    if (range.yMax > yMax) {\r\n      if (sy > y) {\r\n        sy = range.yMax;\r\n      } else {\r\n        y = range.yMax;\r\n      }\r\n    }\r\n    points.sx = sx;\r\n    points.sy = sy;\r\n    points.x = x;\r\n    points.y = y;\r\n  };\r\n\r\n  const findClickRange = (\r\n    extraClick?: modelInputProps,\r\n    newClicks?: modelInputProps[]\r\n  ) => {\r\n    let xMin;\r\n    let yMin;\r\n    let xMax;\r\n    let yMax;\r\n    const allClicks = newClicks ? newClicks : clicks ? [...clicks!] : null;\r\n    if (!allClicks) return;\r\n    if (extraClick) {\r\n      allClicks.push(extraClick);\r\n    }\r\n    for (let click of allClicks) {\r\n      if (click.width) continue;\r\n      if (click.clickType === 0) continue;\r\n      if (!xMin || click.x < xMin) {\r\n        xMin = click.x;\r\n      }\r\n      if (!yMin || click.y < yMin) {\r\n        yMin = click.y;\r\n      }\r\n      if (!xMax || click.x > xMax) {\r\n        xMax = click.x;\r\n      }\r\n      if (!yMax || click.y > yMax) {\r\n        yMax = click.y;\r\n      }\r\n    }\r\n    xMin = xMin ? (xMin * canvasScale) / scale!.scale : xMin;\r\n    yMin = yMin ? (yMin * canvasScale) / scale!.scale : yMin;\r\n    xMax = xMax ? (xMax * canvasScale) / scale!.scale : xMax;\r\n    yMax = yMax ? (yMax * canvasScale) / scale!.scale : yMax;\r\n    return { xMin, yMin, xMax, yMax };\r\n  };\r\n\r\n  const handleResetInteraction = (forceFullReset?: boolean) => {\r\n    setSVG(null);\r\n    setSVGs(null);\r\n    setClick(null);\r\n    setClicks(null);\r\n    setAnnotations([]);\r\n    setNewAnnotation([]);\r\n    setClicksHistory(null);\r\n    setMaskImg(null);\r\n    setUserNegClickBool(false);\r\n    setIsHovering(null);\r\n    setPredMask(null);\r\n    setPredMasks(null);\r\n    setPredMasksHistory(null);\r\n    setIsLoading(false);\r\n    setPoints(undefined);\r\n    if (segmentTypes === \"Click\" && !forceFullReset) {\r\n      if (!isMultiMaskMode) {\r\n        setHasClicked(false);\r\n      }\r\n    } else {\r\n      setHasClicked(false);\r\n      setIsMultiMaskMode(false);\r\n    }\r\n  };\r\n\r\n  const handleMultiMaskMode = () => {\r\n    if (!isMultiMaskMode) {\r\n      if (clicks && clicks.length > 1) {\r\n        handleResetInteraction();\r\n      }\r\n      setHasClicked(true);\r\n    } else if (!clicks) {\r\n      setHasClicked(false);\r\n    }\r\n    setIsMultiMaskMode(!isMultiMaskMode);\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (!clicks) {\r\n      setAnnotations([]);\r\n      setNewAnnotation([]);\r\n      setPoints(undefined);\r\n    }\r\n  }, [clicks]);\r\n\r\n  const handleUndoInteraction = () => {\r\n    if (clicks?.length === 1 && annotations?.length && segmentTypes === \"Box\") {\r\n      setPrevAnnotation(annotations);\r\n      setAnnotations([]);\r\n      setNewAnnotation([]);\r\n    }\r\n    if (predMasks?.length && clicks?.length) {\r\n      const newPredMasks = [...predMasks];\r\n      const oldPredMask = newPredMasks.pop();\r\n      const newPredMasksHistory = [...(predMasksHistory || [])];\r\n      setPredMasks(newPredMasks);\r\n      if (oldPredMask) {\r\n        newPredMasksHistory.push(oldPredMask);\r\n      }\r\n      setPredMasksHistory(newPredMasksHistory);\r\n      const newClicks = [...clicks];\r\n      const oldClick = newClicks.pop();\r\n      const newClicksHistory = [...(clicksHistory || [])];\r\n      if (oldClick) {\r\n        newClicksHistory.push(oldClick);\r\n      }\r\n      setClicksHistory(newClicksHistory);\r\n      if (clicks.length === 1) {\r\n        setPredMask(null);\r\n        setHasClicked(false);\r\n        setClicks(null);\r\n        setSVG(null);\r\n        setIsErased(false);\r\n        setMaskImg(null);\r\n      } else {\r\n        setIsLoading(true);\r\n        setPredMask(newPredMasks[newPredMasks.length - 1]);\r\n        if (points) {\r\n          const pointsClone = { ...points };\r\n          adjustPointsToRange(pointsClone, undefined, newClicks);\r\n          setAnnotations([getAnnotation(pointsClone)]);\r\n          handleSegmentByBox(pointsClone, undefined, newClicks);\r\n        } else {\r\n          setClicks(newClicks);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const handleRedoInteraction = () => {\r\n    if (\r\n      clicksHistory?.length &&\r\n      prevAnnotaiton?.length &&\r\n      segmentTypes === \"Box\"\r\n    ) {\r\n      setAnnotations(prevAnnotaiton);\r\n      setNewAnnotation([]);\r\n      setPrevAnnotation([]);\r\n    }\r\n    if (predMasksHistory?.length && clicksHistory?.length) {\r\n      setIsLoading(true);\r\n      setHasClicked(true);\r\n      const newPredMasks = [...(predMasks || [])];\r\n      const newPredMasksHistory = [...(predMasksHistory || [])];\r\n      const newPredMask = newPredMasksHistory.pop();\r\n      if (newPredMask) {\r\n        newPredMasks.push(newPredMask);\r\n      }\r\n      setPredMasksHistory(newPredMasksHistory);\r\n      setPredMasks(newPredMasks);\r\n      setPredMask(newPredMasks[newPredMasks.length - 1]);\r\n      const newClicks = [...(clicks || [])];\r\n      const newClicksHistory = [...(clicksHistory || [])];\r\n      const newClick = newClicksHistory.pop();\r\n      if (newClick) {\r\n        newClicks.push(newClick);\r\n      }\r\n      setClicksHistory(newClicksHistory);\r\n      if (points) {\r\n        const pointsClone = { ...points };\r\n        adjustPointsToRange(pointsClone, undefined, newClicks);\r\n        setAnnotations([getAnnotation(pointsClone)]);\r\n        handleSegmentByBox(pointsClone, undefined, newClicks);\r\n      } else {\r\n        setClicks(newClicks);\r\n      }\r\n    }\r\n  };\r\n\r\n  return (\r\n    <>\r\n      {isStandalone ? (\r\n        <>\r\n          {image && (\r\n            <div\r\n              className=\"relative md:w-full md:h-auto\"\r\n              ref={containerRef}\r\n              style={\r\n                window.innerWidth < 768\r\n                  ? { height: \"calc(100vh/2\" }\r\n                  : { height: canvasHeight }\r\n              }\r\n            >\r\n              <Canvas\r\n                konvaRef={konvaRef}\r\n                annotations={annotations}\r\n                newAnnotation={newAnnotation}\r\n                scale={scale}\r\n                handleMouseUp={handleMouseUp}\r\n                handleMouseDown={handleMouseDown}\r\n                handleMouseMove={handleMouseMove}\r\n                handleMouseOut={handleMouseOut}\r\n                containerRef={containerRef}\r\n                hasClicked={hasClicked}\r\n                setCanvasScale={setCanvasScale}\r\n                isStandalone={isStandalone}\r\n                isHoverToolTip={[isHoverToolTip, setIsHoverToolTip]}\r\n                allText={[allText, setAllText]}\r\n              />\r\n              <div\r\n                className={`absolute top-0 right-0 bottom-0 left-0 bg-opacity-70 bg-black flex items-center justify-center text-white text-lg font-bold transition-opacity ${\r\n                  shouldShowHomepageOverlay\r\n                    ? \"opacity-100\"\r\n                    : \"opacity-0 pointer-events-none\"\r\n                }`}\r\n                id=\"canvas-overlay\"\r\n              >\r\n                <FeatureSummary\r\n                  actions={[{ action: \"Demo\", actionUrl: \"/demo\" }]}\r\n                  darkMode\r\n                  centerAlign\r\n                >\r\n                  <h3>Want to keep going?</h3>\r\n                </FeatureSummary>\r\n              </div>\r\n            </div>\r\n          )}\r\n        </>\r\n      ) : (\r\n        <>\r\n          {image || isToolBarUpload ? (\r\n            <div className=\"flex items-stretch justify-center flex-1 overflow-hidden stage\">\r\n              {showLoadingModal ? (\r\n                <LoadingModal handleResetState={handleResetState} />\r\n              ) : (\r\n                <PointsModal />\r\n              )}\r\n              <SegmentDrawer\r\n                handleResetState={handleResetState}\r\n                handleResetInteraction={handleResetInteraction}\r\n                handleUndoInteraction={handleUndoInteraction}\r\n                handleRedoInteraction={handleRedoInteraction}\r\n                handleMagicErase={handleMagicErase}\r\n                handleCreateSticker={handleCreateSticker}\r\n                handleImage={handleImage}\r\n                userNegClickBool={[userNegClickBool, setUserNegClickBool]}\r\n                handleMultiMaskMode={handleMultiMaskMode}\r\n                showGallery={[showGallery, setShowGallery]}\r\n                hasClicked={hasClicked}\r\n                handleSelectedImage={handleSelectedImage}\r\n              />\r\n              <div className=\"relative flex flex-col items-center justify-center flex-1 overflow-hidden md:overflow-visible md:px-12 md:py-9\">\r\n                <div className=\"absolute top-0 z-30 flex flex-col items-center justify-center w-full md:relative\">\r\n                  <MobileOptionNavBar\r\n                    handleResetInteraction={handleResetInteraction}\r\n                    handleUndoInteraction={handleUndoInteraction}\r\n                    handleRedoInteraction={handleRedoInteraction}\r\n                    handleResetState={handleResetState}\r\n                    handleImage={handleImage}\r\n                    userNegClickBool={[userNegClickBool, setUserNegClickBool]}\r\n                  />\r\n                  <ToolTip\r\n                    isHoverToolTip={[isHoverToolTip, setIsHoverToolTip]}\r\n                    hasClicked={hasClicked}\r\n                    annotations={annotations}\r\n                    allText={[allText, setAllText]}\r\n                  />\r\n                </div>\r\n                <div\r\n                  className=\"relative flex-1 w-full mb-3 md:my-7\"\r\n                  ref={containerRef}\r\n                >\r\n                  <Profiler\r\n                    id=\"Canvas\"\r\n                    onRender={(\r\n                      id, // the \"id\" prop of the Profiler tree that has just committed\r\n                      phase, // either \"mount\" (if the tree just mounted) or \"update\" (if it re-rendered)\r\n                      actualDuration, // time spent rendering the committed update\r\n                      baseDuration, // estimated time to render the entire subtree without memoization\r\n                      startTime, // when React began rendering this update\r\n                      commitTime, // when React committed this update\r\n                      interactions\r\n                    ) => {\r\n                      // console.log(`${id} took ${actualDuration}ms`);\r\n                    }}\r\n                  >\r\n                    <Canvas\r\n                      konvaRef={konvaRef}\r\n                      annotations={annotations}\r\n                      newAnnotation={newAnnotation}\r\n                      scale={scale}\r\n                      handleMouseUp={handleMouseUp}\r\n                      handleMouseDown={handleMouseDown}\r\n                      handleMouseMove={handleMouseMove}\r\n                      handleMouseOut={handleMouseOut}\r\n                      containerRef={containerRef}\r\n                      hasClicked={hasClicked}\r\n                      setCanvasScale={setCanvasScale}\r\n                      isHoverToolTip={[isHoverToolTip, setIsHoverToolTip]}\r\n                      allText={[allText, setAllText]}\r\n                    />\r\n                  </Profiler>\r\n                </div>\r\n                <MobileSegmentDrawer\r\n                  handleResetInteraction={handleResetInteraction}\r\n                  handleMagicErase={handleMagicErase}\r\n                  handleCreateSticker={handleCreateSticker}\r\n                  userNegClickBool={[userNegClickBool, setUserNegClickBool]}\r\n                />\r\n              </div>\r\n            </div>\r\n          ) : !isToolBarUpload ? (\r\n            <div className=\"flex items-stretch justify-center flex-1 overflow-hidden stage\">\r\n              <ImagePicker\r\n                handleSelectedImage={handleSelectedImage}\r\n                showGallery={[showGallery, setShowGallery]}\r\n              />\r\n            </div>\r\n          ) : (\r\n            <></>\r\n          )}\r\n        </>\r\n      )}\r\n    </>\r\n  );\r\n};\r\n\r\nexport default Stage;\r\n"
  },
  {
    "path": "src/components/SvgMask.tsx",
    "content": "import React, { useContext, useEffect, useState, useRef } from \"react\";\r\nimport AppContext from \"./hooks/createContext\";\r\n\r\ninterface SvgMaskProps {\r\n  xScale: number;\r\n  yScale: number;\r\n  svgStr: string;\r\n  id?: string | undefined;\r\n  className?: string | undefined;\r\n}\r\n\r\nconst SvgMask = ({\r\n  xScale,\r\n  yScale,\r\n  svgStr,\r\n  id = \"\",\r\n  className = \"\",\r\n}: SvgMaskProps) => {\r\n  const {\r\n    click: [click, setClick],\r\n    image: [image],\r\n    isLoading: [isLoading, setIsLoading],\r\n    canvasWidth: [, setCanvasWidth],\r\n    canvasHeight: [, setCanvasHeight],\r\n    isErasing: [isErasing, setIsErasing],\r\n    svg: [svg],\r\n    isMultiMaskMode: [isMultiMaskMode, setIsMultiMaskMode],\r\n  } = useContext(AppContext)!;\r\n  const [key, setKey] = useState(Math.random());\r\n  const [boundingBox, setBoundingBox] = useState<DOMRect | undefined>(\r\n    undefined\r\n  );\r\n  const pathRef = useRef<SVGPathElement>(null);\r\n  const getBoundingBox = () => {\r\n    if (!pathRef?.current) return;\r\n    setBoundingBox(pathRef.current.getBBox());\r\n  };\r\n  useEffect(() => {\r\n    if (!isLoading) {\r\n      setKey(Math.random());\r\n    }\r\n    getBoundingBox();\r\n  }, [svg]);\r\n  const bbX = boundingBox?.x;\r\n  const bbY = boundingBox?.y;\r\n  const bbWidth = boundingBox?.width;\r\n  const bbHeight = boundingBox?.height;\r\n  const bbMiddleY = bbY && bbHeight && bbY + bbHeight / 2;\r\n  const bbWidthRatio = bbWidth && bbWidth / xScale;\r\n  return (\r\n    <svg\r\n      className={`absolute w-full h-full pointer-events-none ${className}`}\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n      viewBox={`0 0 ${xScale} ${yScale}`}\r\n      key={key}\r\n    >\r\n      {!isMultiMaskMode && bbX && bbWidth && (\r\n        <>\r\n          <radialGradient\r\n            id={\"gradient\" + id}\r\n            cx={0}\r\n            cy={0}\r\n            r={bbWidth}\r\n            gradientUnits=\"userSpaceOnUse\"\r\n            gradientTransform={`translate(${bbX - bbWidth / 4},${bbMiddleY})`}\r\n          >\r\n            <stop offset={0} stopColor=\"white\" stopOpacity=\"0\"></stop>\r\n            <stop offset={0.25} stopColor=\"white\" stopOpacity={0.7}></stop>\r\n            <stop offset={0.5} stopColor=\"white\" stopOpacity=\"0\"></stop>\r\n            <stop offset={0.75} stopColor=\"white\" stopOpacity={0.7}></stop>\r\n            <stop offset={1} stopColor=\"white\" stopOpacity=\"0\"></stop>\r\n            <animateTransform\r\n              attributeName=\"gradientTransform\"\r\n              attributeType=\"XML\"\r\n              type=\"scale\"\r\n              from={0}\r\n              to={12}\r\n              dur={`1.5s`}\r\n              begin={\".3s\"}\r\n              fill={\"freeze\"}\r\n              additive=\"sum\"\r\n            ></animateTransform>\r\n          </radialGradient>\r\n        </>\r\n      )}\r\n      <clipPath id={\"clip-path\" + id}>\r\n        <path d={svgStr} />\r\n      </clipPath>\r\n      <filter id={\"glow\" + id} x=\"-50%\" y=\"-50%\" width={\"200%\"} height={\"200%\"}>\r\n        <feDropShadow dx=\"0\" dy=\"0\" stdDeviation=\"2\" floodColor=\"#1d85bb\" />\r\n        <feDropShadow dx=\"0\" dy=\"0\" stdDeviation=\"4\" floodColor=\"#1d85bb\" />\r\n        <feDropShadow dx=\"0\" dy=\"0\" stdDeviation=\"6\" floodColor=\"#1d85bb\" />\r\n      </filter>\r\n      <image\r\n        width=\"100%\"\r\n        height=\"100%\"\r\n        xlinkHref={image?.src}\r\n        clipPath={`url(#clip-path${id})`}\r\n      />\r\n      {!click && (!isLoading || isErasing) && (\r\n        <>\r\n          {!isMultiMaskMode && bbWidthRatio && (\r\n            <path\r\n              id={\"mask-gradient\" + id}\r\n              className={`mask-gradient ${\r\n                bbWidthRatio > 0.5 && window.innerWidth < 768 ? \"hidden\" : \"\"\r\n              }`}\r\n              d={svgStr}\r\n              strokeLinecap=\"round\"\r\n              strokeLinejoin=\"round\"\r\n              strokeOpacity=\"0\"\r\n              fillOpacity=\"1\"\r\n              fill={`url(#gradient${id})`}\r\n            />\r\n          )}\r\n          <path\r\n            id={\"mask-path\" + id}\r\n            className=\"mask-path\"\r\n            d={svgStr}\r\n            strokeLinecap=\"round\"\r\n            strokeLinejoin=\"round\"\r\n            strokeOpacity=\".8\"\r\n            fillOpacity=\"0\"\r\n            stroke=\"#1d85bb\"\r\n            strokeWidth=\"3\"\r\n            ref={pathRef}\r\n            filter={`url(#glow${id})`}\r\n          />\r\n        </>\r\n      )}\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport default SvgMask;\r\n"
  },
  {
    "path": "src/components/ToolTip.tsx",
    "content": "import React, { useContext } from \"react\";\r\nimport { AnnotationProps } from \"./helpers/Interface\";\r\n// import useTimeout from \"./helpers/useTimeout\";\r\nimport AppContext from \"./hooks/createContext\";\r\n\r\ninterface ToolTipProps {\r\n  isHoverToolTip: [boolean, React.Dispatch<React.SetStateAction<boolean>>];\r\n  allText: [allText: any, setAllText: any];\r\n  hasClicked: boolean;\r\n  annotations: Array<AnnotationProps>;\r\n}\r\n\r\nconst ToolTip = ({\r\n  hasClicked,\r\n  annotations,\r\n  isHoverToolTip: [isHoverToolTip, setIsHoverToolTip],\r\n  allText: [allText, setAllText],\r\n}: ToolTipProps) => {\r\n  const {\r\n    segmentTypes: [segmentTypes, setSegmentTypes],\r\n    clicks: [clicks, setClicks],\r\n    eraserText: [eraserText, setEraserText],\r\n    isErasing: [isErasing, setIsErasing],\r\n    isMultiMaskMode: [isMultiMaskMode, setIsMultiMaskMode],\r\n  } = useContext(AppContext)!;\r\n\r\n  // useEffect(() => {\r\n  //   return () => {\r\n  //     clearTimeout(timerRefOne.current);\r\n  //     clearTimeout(timerRefTwo.current);\r\n  //     clearTimeout(timerRefThree.current);\r\n  //   };\r\n  // }, []);\r\n\r\n  // const timerRefOne = useRef<any>(null);\r\n  // const timerRefTwo = useRef<any>(null);\r\n  // const timerRefThree = useRef<any>(null);\r\n\r\n  const isMobile = window.innerWidth < 768;\r\n  const getText = () => {\r\n    if (isErasing) return null;\r\n    // if (eraserText.isErase)\r\n    //   return \"Masks can be input into other open source models, like Erase.\";\r\n    // if (eraserText.isEmbedding)\r\n    //   return \"Re-extracting an embedding on the erased image.\";\r\n    if (isMultiMaskMode) {\r\n      if (clicks?.length)\r\n        return \"Move your cursor on or off the image to expand or collapse the layers.\";\r\n      return \"SAM predicts multiple mask possibilities with a single click. Select an object to start.\";\r\n    }\r\n    if (segmentTypes === \"Click\") {\r\n      if (isMobile) {\r\n        if (hasClicked && clicks?.length)\r\n          return \"Cut out the selected object using the Cut-out tool.\";\r\n        return \"Select any object, SAM is running in the browser.\";\r\n      }\r\n      if (hasClicked && clicks?.length)\r\n        return \"Cut out the selected object, or try multi-mask mode.\";\r\n      if (isHoverToolTip)\r\n        return \"When hovering over the image, SAM is running in the browser.\";\r\n    }\r\n    if (segmentTypes === \"Box\") {\r\n      if (annotations.length) return \"Refine by adding or subtracting points.\";\r\n      return \"Draw a box around an object.\";\r\n    }\r\n    if (segmentTypes === \"All\") {\r\n      return allText;\r\n    }\r\n    return null;\r\n  };\r\n  return (\r\n    <>\r\n      <div\r\n        className={`z-40 flex md:h-8 h-14 mt-2 md:mt-6 w-11/12 items-center top-[7%] md:w-full justify-center ${\r\n          !!getText() || \"invisible\"\r\n        }`}\r\n      >\r\n        <div className=\"flex gap-1 p-2 bg-blue-200 rounded-lg w-fit\">\r\n          {getText()}\r\n        </div>\r\n      </div>\r\n    </>\r\n  );\r\n};\r\n\r\nexport default ToolTip;\r\n"
  },
  {
    "path": "src/components/Video.tsx",
    "content": "import React from \"react\";\r\n\r\nexport type VideoProps = {\r\n  url?: string;\r\n  youtubeId?: string;\r\n  aspectRatio?: \"wide\" | \"square\" | \"normal\" | \"fill\";\r\n  controls?: boolean;\r\n  autoPlay?: boolean;\r\n  loop?: boolean;\r\n  muted?: boolean;\r\n  poster?: string;\r\n  alt?: string;\r\n  style?: React.CSSProperties;\r\n  className?: string;\r\n  caption?: string;\r\n};\r\n\r\nexport default function Video({\r\n  url,\r\n  youtubeId,\r\n  aspectRatio = \"wide\",\r\n  controls = true,\r\n  autoPlay = false,\r\n  loop = true,\r\n  muted = true,\r\n  poster,\r\n  alt = \"\",\r\n  style,\r\n  className,\r\n  caption,\r\n}: VideoProps) {\r\n  let aspect =\r\n    aspectRatio === \"wide\"\r\n      ? `aspect-w-16 aspect-h-9`\r\n      : aspectRatio === \"square\"\r\n      ? \"aspect-w-9 aspect-h-9\"\r\n      : \"aspect-w-4 aspect-h-3\";\r\n\r\n  let videoSize = \"\";\r\n\r\n  if (aspectRatio === \"fill\") {\r\n    aspect =\r\n      \"absolute object-cover right-0 bottom-0 min-w-full min-h-full h-full\";\r\n    videoSize = \"w-full h-full object-cover object-center\";\r\n  }\r\n\r\n  return youtubeId ? (\r\n    <div className={`comp_video w-full ${aspect} ${className}`} style={style}>\r\n      <iframe\r\n        src={`https://www.youtube.com/embed/${youtubeId}?&autoplay=${\r\n          autoPlay ? 1 : 0\r\n        }&controls=${controls ? 1 : 0}&mute=${muted}`}\r\n        frameBorder=\"0\"\r\n        allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\r\n        allowFullScreen\r\n        title={alt}\r\n      />\r\n    </div>\r\n  ) : (\r\n    <div\r\n      className={`comp_video w-full relative flex flex-col ${aspect} ${className}`}\r\n      style={style}\r\n    >\r\n      <video\r\n        playsInline\r\n        controls={controls}\r\n        autoPlay={autoPlay}\r\n        loop={loop}\r\n        muted={muted}\r\n        title={alt}\r\n        poster={poster}\r\n        className={`m-0 ${videoSize}`}\r\n      >\r\n        <source src={url} type=\"video/mp4\" />\r\n        Sorry, your browser doesn't support embedded videos.\r\n      </video>\r\n      {caption && (\r\n        <div className=\"text-gray-600 text-sm mt-3 md:mt-4\">{caption}</div>\r\n      )}\r\n    </div>\r\n  );\r\n}\r\n"
  },
  {
    "path": "src/components/helpers/CanvasHelper.tsx",
    "content": "import { RefObject } from \"react\";\r\n\r\ninterface canvasScaleInitializerProps {\r\n  width: number;\r\n  height: number;\r\n  containerRef: RefObject<HTMLDivElement>;\r\n  shouldFitToWidth?: boolean;\r\n}\r\n\r\ninterface canvasScaleResizerProps {\r\n  width: number;\r\n  height: number;\r\n  containerWidth: number;\r\n  containerHeight: number;\r\n  shouldFitToWidth?: boolean;\r\n}\r\n\r\nconst canvasScaleInitializer = ({\r\n  width,\r\n  height,\r\n  containerRef,\r\n  shouldFitToWidth,\r\n}: canvasScaleInitializerProps) => {\r\n  const containerWidth = containerRef.current?.offsetWidth || width;\r\n  const containerHeight = containerRef.current?.offsetHeight || height;\r\n  return canvasScaleResizer({\r\n    width,\r\n    height,\r\n    containerWidth,\r\n    containerHeight,\r\n    shouldFitToWidth,\r\n  });\r\n};\r\n\r\nconst canvasScaleResizer = ({\r\n  width,\r\n  height,\r\n  containerWidth,\r\n  containerHeight,\r\n  shouldFitToWidth,\r\n}: canvasScaleResizerProps) => {\r\n  const isMobile = window.innerWidth < 768;\r\n  let scale = 1;\r\n  const xScale = containerWidth / width;\r\n  const yScale = containerHeight / height;\r\n  if (isMobile) {\r\n    scale = Math.max(xScale, yScale);\r\n  } else {\r\n    if (shouldFitToWidth) {\r\n      scale = xScale;\r\n    } else {\r\n      scale = Math.min(xScale, yScale);\r\n    }\r\n  }\r\n  const scaledWidth = scale * width;\r\n  const scaledHeight = scale * height;\r\n  const scalingStyle = {\r\n    transform: `scale(${scale})`,\r\n    transformOrigin: \"left top\",\r\n  };\r\n  const scaledDimensionsStyle = {\r\n    width: scaledWidth,\r\n    height: scaledHeight,\r\n  };\r\n  return {\r\n    scalingStyle,\r\n    scaledDimensionsStyle,\r\n    scaledWidth,\r\n    scaledHeight,\r\n    containerWidth,\r\n    containerHeight,\r\n  };\r\n};\r\n\r\nexport { canvasScaleInitializer, canvasScaleResizer };\r\n"
  },
  {
    "path": "src/components/helpers/ImageHelper.tsx",
    "content": "const handleImageScale = (data: HTMLImageElement) => {\r\n    const IMAGE_SIZE = 500;\r\n    const UPLOAD_IMAGE_SIZE = 1024;\r\n    let w = data.naturalWidth;\r\n    let h = data.naturalHeight;\r\n    let scale;\r\n    let uploadScale;\r\n    if (h < w) {\r\n      scale = IMAGE_SIZE / h;\r\n      if (h * scale > 1333) {\r\n        scale = 1333 / h;\r\n      }\r\n      uploadScale = UPLOAD_IMAGE_SIZE / w;\r\n    } else {\r\n      scale = IMAGE_SIZE / w;\r\n      if (w * scale > 1333) {\r\n        scale = 1333 / w;\r\n      }\r\n      uploadScale = UPLOAD_IMAGE_SIZE / h;\r\n    }\r\n    return { height: h, width: w, scale, uploadScale };\r\n  };\r\n  \r\n  export { handleImageScale };\r\n  "
  },
  {
    "path": "src/components/helpers/Interface.tsx",
    "content": "import { InferenceSession, Tensor } from \"onnxruntime-web\";\r\n\r\nexport interface AnnotationProps {\r\n  x: number;\r\n  y: number;\r\n  width: number;\r\n  height: number;\r\n  clickType: number;\r\n}\r\n\r\nexport interface modelInputProps {\r\n  x: number;\r\n  y: number;\r\n  width: null | number;\r\n  height: null | number;\r\n  clickType: number;\r\n}\r\n\r\nexport enum clickType {\r\n  POSITIVE = 1.0,\r\n  NEGATIVE = 0.0,\r\n  UPPER_LEFT = 2.0,\r\n  BOTTOM_RIGHT = 3.0,\r\n}\r\n\r\nexport interface modelScaleProps {\r\n  onnxScale: number;\r\n  maskWidth: number;\r\n  maskHeight: number;\r\n  scale: number;\r\n  uploadScale: number;\r\n  width: number;\r\n  height: number;\r\n}\r\n\r\nexport interface setParmsandQueryModelProps {\r\n  width: number;\r\n  height: number;\r\n  uploadScale: number;\r\n  imgData: HTMLImageElement;\r\n  handleSegModelResults: ({ tensor }: { tensor: Tensor }) => void;\r\n  handleAllModelResults: ({\r\n    allJSON,\r\n    image_height,\r\n  }: {\r\n    allJSON: {\r\n      encodedMask: string;\r\n      bbox: number[];\r\n      score: number;\r\n      point_coord: number[];\r\n      uncertain_iou: number;\r\n      area: number;\r\n    }[];\r\n    image_height: number;\r\n  }) => void;\r\n  imgName: string;\r\n  shouldDownload: boolean | undefined;\r\n  shouldNotFetchAllModel: boolean | undefined;\r\n}\r\n\r\nexport interface setParmsandQueryEraseModelProps {\r\n  width: number;\r\n  height: number;\r\n  uploadScale: number;\r\n  imgData: HTMLImageElement | null;\r\n  mask:\r\n    | string[]\r\n    | Uint8Array\r\n    | Float32Array\r\n    | Int8Array\r\n    | Uint16Array\r\n    | Int16Array\r\n    | Int32Array\r\n    | BigInt64Array\r\n    | Float64Array\r\n    | Uint32Array\r\n    | BigUint64Array;\r\n  handlePredictedImage: (e: string) => void;\r\n}\r\n\r\nexport interface queryEraseModelProps {\r\n  image: Blob | string;\r\n  mask:\r\n    | string[]\r\n    | Uint8Array\r\n    | Float32Array\r\n    | Int8Array\r\n    | Uint16Array\r\n    | Int16Array\r\n    | Int32Array\r\n    | BigInt64Array\r\n    | Float64Array\r\n    | Uint32Array\r\n    | BigUint64Array;\r\n  handlePredictedImage: (e: string) => void;\r\n}\r\n\r\nexport interface queryModelReturnTensorsProps {\r\n  blob: Blob;\r\n  handleSegModelResults: ({ tensor }: { tensor: Tensor }) => void;\r\n  handleAllModelResults: ({\r\n    allJSON,\r\n    image_height,\r\n  }: {\r\n    allJSON: {\r\n      encodedMask: string;\r\n      bbox: number[];\r\n      score: number;\r\n      point_coord: number[];\r\n      uncertain_iou: number;\r\n      area: number;\r\n    }[];\r\n    image_height: number;\r\n  }) => void;\r\n  image_height: number;\r\n  imgName: string;\r\n  shouldDownload: boolean | undefined;\r\n  shouldNotFetchAllModel: boolean | undefined;\r\n}\r\n\r\nexport interface modeDataProps {\r\n  clicks?: Array<modelInputProps>;\r\n  tensor: Tensor;\r\n  modelScale: modelScaleProps;\r\n  best_box?: number[];\r\n  point_coords?: Array<number[]>;\r\n  point_labels?: number[];\r\n  last_pred_mask: Tensor | null;\r\n}\r\n\r\nexport interface StageProps {\r\n  handleResetState: () => void;\r\n  handleMagicErase: () => void;\r\n  handleImage: (img?: HTMLImageElement) => void;\r\n  scale: modelScaleProps | null;\r\n  hasClicked: boolean;\r\n  setHasClicked: (e: boolean) => void;\r\n  handleSelectedImage: (\r\n    data: File | URL,\r\n    options?: { shouldDownload?: boolean; shouldNotFetchAllModel?: boolean }\r\n  ) => void;\r\n  image: HTMLImageElement | null;\r\n  isStandalone?: boolean;\r\n  model?: InferenceSession | null;\r\n}\r\n"
  },
  {
    "path": "src/components/helpers/colors.tsx",
    "content": "// Colormap options copied from detectron2\r\n\r\nconst DETECTRON2_COLORS = [\r\n    [0.0, 0.447, 0.741],\r\n    [0.85, 0.325, 0.098],\r\n    [0.929, 0.694, 0.125],\r\n    [0.494, 0.184, 0.556],\r\n    [0.466, 0.674, 0.188],\r\n    [0.301, 0.745, 0.933],\r\n    [0.635, 0.078, 0.184],\r\n    [0.3, 0.3, 0.3],\r\n    [0.6, 0.6, 0.6],\r\n    [1.0, 0.0, 0.0],\r\n    [1.0, 0.5, 0.0],\r\n    [0.749, 0.749, 0.0],\r\n    [0.0, 1.0, 0.0],\r\n    [0.0, 0.0, 1.0],\r\n    [0.667, 0.0, 1.0],\r\n    [0.333, 0.333, 0.0],\r\n    [0.333, 0.667, 0.0],\r\n    [0.333, 1.0, 0.0],\r\n    [0.667, 0.333, 0.0],\r\n    [0.667, 0.667, 0.0],\r\n    [0.667, 1.0, 0.0],\r\n    [1.0, 0.333, 0.0],\r\n    [1.0, 0.667, 0.0],\r\n    [1.0, 1.0, 0.0],\r\n    [0.0, 0.333, 0.5],\r\n    [0.0, 0.667, 0.5],\r\n    [0.0, 1.0, 0.5],\r\n    [0.333, 0.0, 0.5],\r\n    [0.333, 0.333, 0.5],\r\n    [0.333, 0.667, 0.5],\r\n    [0.333, 1.0, 0.5],\r\n    [0.667, 0.0, 0.5],\r\n    [0.667, 0.333, 0.5],\r\n    [0.667, 0.667, 0.5],\r\n    [0.667, 1.0, 0.5],\r\n    [1.0, 0.0, 0.5],\r\n    [1.0, 0.333, 0.5],\r\n    [1.0, 0.667, 0.5],\r\n    [1.0, 1.0, 0.5],\r\n    [0.0, 0.333, 1.0],\r\n    [0.0, 0.667, 1.0],\r\n    [0.0, 1.0, 1.0],\r\n    [0.333, 0.0, 1.0],\r\n    [0.333, 0.333, 1.0],\r\n    [0.333, 0.667, 1.0],\r\n    [0.333, 1.0, 1.0],\r\n    [0.667, 0.0, 1.0],\r\n    [0.667, 0.333, 1.0],\r\n    [0.667, 0.667, 1.0],\r\n    [0.667, 1.0, 1.0],\r\n    [1.0, 0.0, 1.0],\r\n    [1.0, 0.333, 1.0],\r\n    [1.0, 0.667, 1.0],\r\n    [0.333, 0.0, 0.0],\r\n    [0.5, 0.0, 0.0],\r\n    [0.667, 0.0, 0.0],\r\n    [0.833, 0.0, 0.0],\r\n    [1.0, 0.0, 0.0],\r\n    [0.0, 0.167, 0.0],\r\n    [0.0, 0.333, 0.0],\r\n    [0.0, 0.5, 0.0],\r\n    [0.0, 0.667, 0.0],\r\n    [0.0, 0.833, 0.0],\r\n    [0.0, 1.0, 0.0],\r\n    [0.0, 0.0, 0.167],\r\n    [0.0, 0.0, 0.333],\r\n    [0.0, 0.0, 0.5],\r\n    [0.0, 0.0, 0.667],\r\n    [0.0, 0.0, 0.833],\r\n    [0.0, 0.0, 1.0],\r\n    [0.0, 0.0, 0.0],\r\n    [0.143, 0.143, 0.143],\r\n    [0.857, 0.857, 0.857],\r\n    [1.0, 1.0, 1.0],\r\n  ];\r\n  \r\n  const colors = (function () {\r\n    const RGBs: Array<string> = [];\r\n    DETECTRON2_COLORS.map((color) => {\r\n      const [r, g, b] = color.map((n) => {\r\n        return Math.round(n * 255);\r\n      });\r\n      RGBs.push(`rgb(${r},${g},${b})`);\r\n    });\r\n    return RGBs;\r\n  })();\r\n  \r\n  export default colors;\r\n  "
  },
  {
    "path": "src/components/helpers/custom_tracer.tsx",
    "content": "/**\r\n * Custom mask tracing algorithm\r\n *  1. Find the \"breakpoints\" (endpoints of every filled block) of every line in the image\r\n *  2. For each pair of lines, greedily connect every pair of endpoints ordered from top to bottom\r\n *       - Connect short horizontal segments into long ones where possible\r\n *       - Convert diagonal segments into horizontal/vertical segment pairs to make right angles where reasonable\r\n *       - Add segments to close polygons\r\n *  3. Repeatedly choose vertices and follow adjacent ones to create joined SVG path data strings.\r\n *       - Choose the next unused point (in sorted order by x, y)\r\n *       - Repeatedly choose adjacent vertices until the path is closed\r\n *           - The vertices are necessarily sorted in counter-clockwise order\r\n *             due how the edges were generated in step 2\r\n *       - Check how many existing paths this point is inside, and reverse the order of points if necessary\r\n *       - Convert path to an SVG string and add to final output\r\n */\r\n\r\n/**\r\n * Helper function\r\n * Converts string representation of point (used as Map key) back into [x, y] array\r\n * @param {str} point \"x y\"\r\n * @returns {Array<number>} [x, y]\r\n */\r\nconst splitPointKey = (point: string) => {\r\n    return point.split(\" \").map((a: string) => parseInt(a));\r\n  };\r\n  \r\n  /**\r\n   * Used in generatePolygonSegments\r\n   * ------\r\n   * Step 1\r\n   * ------\r\n   * Converts a mask encoded with RLE and converts it into an array of breakpoints per column of the mask.\r\n   *     - Each line starts as 0 by default, and at each breakpoint the bit is flipped\r\n   *     - If a line doesn't exist in the return array, this line is all 0.\r\n   *\r\n   * @param {Array<number>} rleMask\r\n   * @param {number} height (of mask)\r\n   * @returns {Array<Object>} each item is a JS object describing the breakpoints for a line:\r\n   *    {\r\n   *        line {number}: index of line this object describes,\r\n   *        points {Array<number>}: list of pixel indices along line at which bit goes from 0 -> 1 or vice versa\r\n   *    }\r\n   */\r\n  const getLineBreakpoints = (rleMask: string | any[], height: number) => {\r\n    const breakpoints = [];\r\n    const currentLine: { line: number; points: any } = { line: -1, points: [] };\r\n    let sum = 0; // sum of pixels seen so far, used to compute breakpoints\r\n  \r\n    // Helper function to push currentLine data to breakpoints\r\n    const addCurrentLineToBreakpoints = () => {\r\n      if (currentLine.points.length > 0) {\r\n        breakpoints.push({ line: currentLine.line, points: currentLine.points });\r\n        currentLine.points = [];\r\n      }\r\n    };\r\n  \r\n    // Iterate through every pair of values in rleMask\r\n    for (let i = 1; i < rleMask.length; i += 2) {\r\n      // Get coords of start/end pixels of the filled block\r\n      sum += rleMask[i - 1];\r\n      const y1 = sum % height;\r\n      const x1 = Math.floor(sum / height);\r\n  \r\n      sum += rleMask[i];\r\n      const y2 = sum % height;\r\n      const x2 = Math.floor(sum / height);\r\n  \r\n      if (currentLine.line !== x1) {\r\n        addCurrentLineToBreakpoints();\r\n        currentLine.line = x1;\r\n      }\r\n      // Case if the block is just one line\r\n      if (x1 === x2) {\r\n        currentLine.points.push(y1, y2);\r\n        continue;\r\n      }\r\n      // Otherwise, first handle the first line of the block\r\n      currentLine.points.push(y1, height);\r\n      addCurrentLineToBreakpoints();\r\n      currentLine.line = x2;\r\n      // Then handle in-between lines, which are all filled\r\n      for (let x0 = x1 + 1; x0 < x2; x0++) {\r\n        breakpoints.push({ line: x0, points: [0, height] });\r\n      }\r\n      // Lastly, handle the last line of the block\r\n      if (y2 > 0) {\r\n        currentLine.points.push(0, y2);\r\n      }\r\n    }\r\n    // Push any remaining data in currentLine to breakpoints\r\n    addCurrentLineToBreakpoints();\r\n  \r\n    return breakpoints;\r\n  };\r\n  \r\n  /**\r\n   * ------\r\n   * Step 2\r\n   * ------\r\n   * Generates a Map of segments that collectively trace all EDGES within a mask.\r\n   *\r\n   * @param {Array<number>} rleMask\r\n   * @param {number} height (of mask)\r\n   * @returns {Map<string, Set<string>>} Map of all vertices to its adjacent vertices\r\n   *    - key: \"x y\" string-formatted point\r\n   *    - value: Set of string-formatted points adjacent to key\r\n   */\r\n  export const generatePolygonSegments = (rleMask: any, height: any) => {\r\n    const breakpoints = getLineBreakpoints(rleMask, height);\r\n  \r\n    // If mask is actually an empty mask, return nothing since there are no edges\r\n    if (breakpoints.length === 0) return new Map();\r\n  \r\n    // Now, generate the outline as a set of lines using the breakpoints\r\n    const polySegments = new Map(); // maps str points to set of target points\r\n    let lastLine = -1;\r\n    let lastPoints: string | any[] = [];\r\n  \r\n    // This is a solution optimization that caches horizontal segments so that consecutive\r\n    // straight horizontal segments can be joined into one long segment\r\n    const horizontalSegments = new Map(); // maps y to starting x\r\n  \r\n    // ------------------\r\n    //  Helper functions\r\n    // ------------------\r\n  \r\n    // Given two points, format each into a string and add the bidirectional segment to polySegments\r\n    const addToPolySegments = (\r\n      p1: { x: any; y: any },\r\n      p2: { x: any; y: any }\r\n    ) => {\r\n      const p1Str = `${p1.x} ${p1.y}`,\r\n        p2Str = `${p2.x} ${p2.y}`;\r\n      if (!polySegments.has(p1Str)) polySegments.set(p1Str, new Set());\r\n      polySegments.get(p1Str).add(p2Str);\r\n      if (!polySegments.has(p2Str)) polySegments.set(p2Str, new Set());\r\n      polySegments.get(p2Str).add(p1Str);\r\n    };\r\n  \r\n    // For the horizontal segment optimization:\r\n    //    A horizontal segment can no longer be extended because the end vertex has been connected in a different direction,\r\n    //    so given y and the designated ending x, add the segment to polySegments and remove it from horizontalSegments\r\n    const closeHorizontalSegment = (y: any, x2: number) => {\r\n      // Don't close if x2 is the start vertex, because the segment can still be extended the other way\r\n      if (x2 !== horizontalSegments.get(y)) {\r\n        addToPolySegments({ x: horizontalSegments.get(y), y }, { x: x2, y });\r\n        horizontalSegments.delete(y);\r\n      }\r\n    };\r\n  \r\n    // Process a segment from (x1, y1) to (x2, y2), handling possible horizontal segment and straightening optimizations\r\n    const addSegment = (x1: number, y1: any, x2: number, y2: any) => {\r\n      // If the segment is horizontal, add it to the intermediate horizontalSegments map instead\r\n      if (y1 === y2) {\r\n        if (!horizontalSegments.has(y1)) horizontalSegments.set(y1, x1);\r\n        return;\r\n      }\r\n  \r\n      // Otherwise, we check both vertices to see if they connect to any horizontal segments, and if so we close them\r\n      // \"Straightening\" solution optimization:\r\n      //    In the case where both of the following are true:\r\n      //        - this segment (x1, y1) to (x2, y2) is diagonal (note |x1 - x2| <= 1)\r\n      //        - it closes at least one horizontal segment\r\n      //    Then we should adjust one x coordinate by 1 pixel to make sure right angles are correctly drawn\r\n      let canStraighten = false;\r\n      const maxX = Math.max(x1, x2); // If we do straighten, align both vertices to the right\r\n      if (horizontalSegments.has(y1)) {\r\n        closeHorizontalSegment(y1, maxX);\r\n        canStraighten = true;\r\n      }\r\n      if (horizontalSegments.has(y2)) {\r\n        closeHorizontalSegment(y2, maxX);\r\n        canStraighten = true;\r\n      }\r\n      // Add line, setting x to maxX if a horizontal segment has been closed\r\n      if (canStraighten)\r\n        addToPolySegments({ x: maxX, y: y1 }, { x: maxX, y: y2 });\r\n      else addToPolySegments({ x: x1, y: y1 }, { x: x2, y: y2 });\r\n    };\r\n  \r\n    // This function handles the case where a line with a nonzero number of pixels is followed by an empty line,\r\n    //    so we can add edges to close any incomplete polygons.\r\n    // We trace the right edge of the pixel (prevLine + 1) instead of left to ensure the area of the polygon is nonzero\r\n    const closePreviousLine = (prevLine: number, prevPoints: string | any[]) => {\r\n      // For every breakpoint in the previous line, add a horizontal segment up to the right edge of the line\r\n      for (const y of prevPoints) addSegment(prevLine, y, prevLine + 1, y);\r\n      // Then connect every pair of breakpoints along the current line to close polygons\r\n      for (let i = 1; i < prevPoints.length; i += 2) {\r\n        addSegment(prevLine + 1, prevPoints[i - 1], prevLine + 1, prevPoints[i]);\r\n      }\r\n    };\r\n  \r\n    // -----------\r\n    //  Main loop\r\n    // -----------\r\n    // Iterate through each line of the breakpoints array and connect breakpoints as necessary to generate segments\r\n  \r\n    for (const { line, points } of breakpoints) {\r\n      // If the new line isn't the one directly after the previous one, close existing polygons and reset state\r\n      if (line !== lastLine + 1) {\r\n        closePreviousLine(lastLine, lastPoints);\r\n        lastLine = line - 1;\r\n        lastPoints = [];\r\n      }\r\n      // We want to iterate through breakpoints in both lines in order of increasing y value\r\n      // Find the first breakpoint\r\n      let x1 = lastPoints.length && lastPoints[0] <= points[0] ? lastLine : line;\r\n      let y1 = x1 === lastLine ? lastPoints[0] : points[0];\r\n      // Keep a pointer for each line\r\n      let lastLineIndex = x1 === lastLine ? 1 : 0;\r\n      let newLineIndex = x1 === lastLine ? 0 : 1;\r\n      // Flag to track if this is an odd or even breakpoint (we want to handle breakpoints two at a time)\r\n      let odd = true;\r\n      while (lastLineIndex < lastPoints.length || newLineIndex < points.length) {\r\n        // Get next breakpoint by comparing values at pointer for both lines\r\n        let x2, y2;\r\n        if (\r\n          lastLineIndex === lastPoints.length ||\r\n          points[newLineIndex] < lastPoints[lastLineIndex]\r\n        ) {\r\n          x2 = line;\r\n          y2 = points[newLineIndex];\r\n          newLineIndex++;\r\n        } else {\r\n          x2 = lastLine;\r\n          y2 = lastPoints[lastLineIndex];\r\n          lastLineIndex++;\r\n        }\r\n        // If previous breakpoint was odd, then we now have a pair and should connect them\r\n        if (odd) {\r\n          if (x1 === lastLine && x2 === lastLine) {\r\n            // If both breakpoints are on the previous line, we are closing a polygon and should\r\n            // do so on the right-most edge to guarantee a non-zero area (see closePreviousLine)\r\n            addSegment(lastLine, y1, line, y1);\r\n            addSegment(lastLine, y2, line, y2);\r\n            addSegment(line, y1, line, y2);\r\n          } else {\r\n            // Otherwise just connect the two points with a segment\r\n            addSegment(x1, y1, x2, y2);\r\n          }\r\n        }\r\n        odd = !odd;\r\n        x1 = x2;\r\n        y1 = y2;\r\n      }\r\n  \r\n      // Update last line and points\r\n      lastLine = line;\r\n      lastPoints = points;\r\n    }\r\n    // Close any remaining polygons after the last line\r\n    closePreviousLine(lastLine, lastPoints);\r\n  \r\n    // Reinitialize the map with keys in sorted order by (x, y)\r\n    const sortedSegments = new Map(\r\n      [...polySegments].sort((a, b) => {\r\n        const [x1, y1] = splitPointKey(a[0]);\r\n        const [x2, y2] = splitPointKey(b[0]);\r\n        if (x1 === x2) return y1 - y2;\r\n        return x1 - x2;\r\n      })\r\n    );\r\n  \r\n    return sortedSegments;\r\n  };\r\n  \r\n  /**\r\n   * ------\r\n   * Step 3\r\n   * ------\r\n   * Converts Map of segments from generatePolygonSegments into closed SVG paths combined into one string,\r\n   * where nested paths alternate direction so holes are correctly rendered using the nonzero fill rule.\r\n   * @param {Map<string, Set<string>>} polySegments output of generatePolygonSegments\r\n   * @returns {string} SVG data string for display\r\n   */\r\n  export const convertSegmentsToSVG = (polySegments: any) => {\r\n    // 1. Generate the closed polygon paths (as lists of points) in order from outermost to innermost\r\n    const paths = [];\r\n    while (polySegments.size) {\r\n      // Pick the outermost vertex from the remaining set (smallest (x, y))\r\n      let [point, targets] = polySegments.entries().next().value;\r\n      const firstPoint = point;\r\n      const path = [splitPointKey(firstPoint)];\r\n      // Repeatedly pick the next adjacent vertex and add it to the path until the path is closed\r\n      let nextPoint = null;\r\n      while (nextPoint !== firstPoint) {\r\n        nextPoint = targets.values().next().value;\r\n        path.push(splitPointKey(nextPoint));\r\n        // Remove used edges and delete the point from polySegments entirely if it has no more edges left\r\n        targets.delete(nextPoint);\r\n        if (targets.size === 0) polySegments.delete(point);\r\n        // Do the same for the bidirectional edge\r\n        const nextPointTargets = polySegments.get(nextPoint);\r\n        nextPointTargets.delete(point);\r\n        // Move to the next set of edges, unless it is empty in which case break since we've completed a loop\r\n        if (nextPointTargets.size === 0) {\r\n          polySegments.delete(nextPoint);\r\n          break;\r\n        } else {\r\n          point = nextPoint;\r\n          targets = nextPointTargets;\r\n        }\r\n      }\r\n      paths.push(path);\r\n    }\r\n  \r\n    // 2. Compute desired direction for each path, flip if necessary, then convert to SVG string\r\n    const renderedPaths = [];\r\n    const svgStrings = [];\r\n  \r\n    // We use a canvas element to draw the paths and check isPointInPath to determine wanted direction\r\n    const canvas = document.createElement(\"canvas\");\r\n    const ctx = canvas.getContext(\"2d\");\r\n  \r\n    for (const path of paths) {\r\n      // Count how many other paths a point contained inside this path is contained within\r\n      //  if odd number: should be clockwise, even number: should be counter-clockwise\r\n      let shouldBeClockwise = false;\r\n      const [sampleX, sampleY] = path[0];\r\n      for (const otherPath of renderedPaths) {\r\n        if (ctx!.isPointInPath(otherPath, sampleX + 0.5, sampleY + 0.5))\r\n          shouldBeClockwise = !shouldBeClockwise;\r\n      }\r\n      // All paths are default counter-clockwise based on how the segments were generated,\r\n      //    so reverse the points in the path if it is supposed to be clockwise\r\n      if (shouldBeClockwise) path.reverse();\r\n  \r\n      // Build the SVG data string for this path\r\n      const stringPoints = path\r\n        .slice(1)\r\n        .map(([x, y]) => `${x} ${y}`)\r\n        .join(\" \");\r\n      const svgStr = `M${path[0][0]} ${path[0][1]} L` + stringPoints;\r\n      svgStrings.push(svgStr); // Add to final SVG string return value\r\n  \r\n      // Add a new Path2D to the canvas to be able to call isPointInPath for the remaining paths\r\n      const pathObj = new Path2D(svgStr);\r\n      ctx!.fill(pathObj);\r\n      renderedPaths.push(pathObj);\r\n    }\r\n  \r\n    return svgStrings;\r\n  };\r\n  "
  },
  {
    "path": "src/components/helpers/getFile.tsx",
    "content": "const getFile = async (data: URL) => {\r\n    const response = await fetch(data);\r\n    const blob = await response.blob();\r\n    return new File([blob], \"image.jpeg\");\r\n  };\r\n  \r\n  export default getFile;\r\n  "
  },
  {
    "path": "src/components/helpers/mask_utils.tsx",
    "content": "/**\r\n * Functions for handling and tracing masks.\r\n */\r\n\r\nimport { Tensor } from \"onnxruntime-web\";\r\n\r\nconst {\r\n    generatePolygonSegments,\r\n    convertSegmentsToSVG,\r\n  } = require(\"./custom_tracer\");\r\n  \r\n  /**\r\n   * Converts mask array into RLE array using the fortran array\r\n   * format where rows and columns are transposed. This is the\r\n   * format used by the COCO API and is expected by the mask tracer.\r\n   * @param {Array<number>} input\r\n   * @param {number} nrows\r\n   * @param {number} ncols\r\n   * @returns array of integers\r\n   */\r\n  export function maskDataToFortranArrayToRle(\r\n    input: any,\r\n    nrows: number,\r\n    ncols: number\r\n  ) {\r\n    const result = [];\r\n    let count = 0;\r\n    let bit = false;\r\n    for (let c = 0; c < ncols; c++) {\r\n      for (let r = 0; r < nrows; r++) {\r\n        var i = c + r * ncols;\r\n        if (i < input.length) {\r\n          const filled = input[i] > 0.0;\r\n          if (filled !== bit) {\r\n            result.push(count);\r\n            bit = !bit;\r\n            count = 1;\r\n          } else count++;\r\n        }\r\n      }\r\n    }\r\n    if (count > 0) result.push(count);\r\n    return result;\r\n  }\r\n  \r\n  /**\r\n   * Converts RLE Array into SVG data as a single string.\r\n   * @param {Float32Array<number>} rleMask\r\n   * @param {number} height\r\n   * @returns {string}\r\n   */\r\n  export const traceRleToSVG = (\r\n    rleMask:\r\n      | Array<number>\r\n      | string[]\r\n      | Uint8Array\r\n      | Float32Array\r\n      | Int8Array\r\n      | Uint16Array\r\n      | Int16Array\r\n      | Int32Array\r\n      | BigInt64Array\r\n      | Float64Array\r\n      | Uint32Array\r\n      | BigUint64Array,\r\n    height: number\r\n  ) => {\r\n    const polySegments = generatePolygonSegments(rleMask, height);\r\n    const svgStr = convertSegmentsToSVG(polySegments);\r\n    return svgStr;\r\n  };\r\n  \r\n  export const getAllMasks = (maskData: any, height: number, width: number) => {\r\n    let masks = [];\r\n    for (let m = 0; m < 4; m++) {\r\n      let nthMask = new Float32Array(height * width);\r\n      const offset = m * width * height;\r\n      for (let i = 0; i < height; i++) {\r\n        for (let j = 0; j < width; j++) {\r\n          var idx = i * width + j;\r\n          if (idx < width * height) {\r\n            nthMask[idx] = maskData[offset + idx];\r\n          }\r\n        }\r\n      }\r\n      masks.push(nthMask);\r\n    }\r\n    return masks;\r\n  };\r\n  \r\n  export const getBestPredMask = (\r\n    maskData: any,\r\n    height: number,\r\n    width: number,\r\n    index: number\r\n  ) => {\r\n    let nthMask = new Float32Array(height * width);\r\n    const offset = index * width * height;\r\n    for (let i = 0; i < height; i++) {\r\n      for (let j = 0; j < width; j++) {\r\n        var idx = i * width + j;\r\n        if (idx < width * height) {\r\n          nthMask[idx] = maskData[offset + idx];\r\n        }\r\n      }\r\n    }\r\n    const bestMask = new Tensor(\"float32\", nthMask, [1, 1, width, height]);\r\n    return bestMask;\r\n  };\r\n  \r\n  function areaUnderLine(x0: number, y0: number, x1: number, y1: number) {\r\n    // A vertical line has no area\r\n    if (x0 === x1) return 0;\r\n    // Square piece\r\n    const ymin = Math.min(y0, y1);\r\n    const squareArea = (x1 - x0) * ymin;\r\n    // Triangle piece\r\n    const ymax = Math.max(y0, y1);\r\n    const triangleArea = Math.trunc((x1 - x0) * (ymax - ymin) / 2);\r\n    return squareArea + triangleArea;\r\n  }\r\n  \r\n  function svgCoordToInt(input: string) {\r\n    if ((input.charAt(0) === \"L\") || (input.charAt(0) === \"M\")) {\r\n      return parseInt(input.slice(1));\r\n    }\r\n    return parseInt(input);\r\n  }\r\n  \r\n  function areaOfSVGPolygon(input: string) {\r\n    let coords = input.split(\" \");\r\n    if (coords.length < 4) return 0;\r\n    if (coords.length % 2 != 0) return 0;\r\n    let area = 0;\r\n    // We need to close the polygon loop, so start with the last coords.\r\n    let old_x = svgCoordToInt(coords[coords.length-2]);\r\n    let old_y = svgCoordToInt(coords[coords.length-1]);\r\n    for (let i = 0; i < coords.length; i = i + 2) {\r\n      let new_x = svgCoordToInt(coords[i]);\r\n      let new_y = svgCoordToInt(coords[i+1]);\r\n      area = area + areaUnderLine(old_x, old_y, new_x, new_y);\r\n      old_x = new_x;\r\n      old_y = new_y;\r\n    }\r\n    return area;\r\n  }\r\n  \r\n  /**\r\n   * Filters SVG edges that enclose an area smaller than maxRegionSize.\r\n   * Expects a list over SVG strings, with each string in the format:\r\n   * 'M<x0> <y0> L<x1> <y1> <x2> <y2> ... <xn-1> <yn-1>'\r\n   * The area calculation is not quite exact, truncating fractional pixels\r\n   * instead of rounding. Both clockwise and counterclockwise SVG edges\r\n   * are filtered, removing stray regions and small holes. Always keeps\r\n   * at least one positive area region.\r\n   */\r\n  export function filterSmallSVGRegions(\r\n    input: string[], maxRegionSize: number = 100\r\n  ) {\r\n    const filtered_regions = input.filter(\r\n      (region: string) => Math.abs(areaOfSVGPolygon(region)) > maxRegionSize\r\n    );\r\n    if (filtered_regions.length === 0) {\r\n      const areas = input.map((region: string) => areaOfSVGPolygon(region));\r\n      const bestIdx = areas.indexOf(Math.max(...areas));\r\n      return [input[bestIdx]];\r\n    }\r\n    return filtered_regions;\r\n  }\r\n  \r\n  /**\r\n   * Converts onnx model output into SVG data as a single string\r\n   * @param {Float32Array<number>} maskData\r\n   * @param {number} height\r\n   * @param {number} width\r\n   * @returns {string}\r\n   */\r\n  export const traceOnnxMaskToSVG = (\r\n    maskData:\r\n      | string[]\r\n      | Uint8Array\r\n      | Uint8ClampedArray\r\n      | Float32Array\r\n      | Int8Array\r\n      | Uint16Array\r\n      | Int16Array\r\n      | Int32Array\r\n      | BigInt64Array\r\n      | Float64Array\r\n      | Uint32Array\r\n      | BigUint64Array,\r\n    height: number,\r\n    width: number\r\n  ) => {\r\n    const rleMask = maskDataToFortranArrayToRle(maskData, width, height);\r\n    let svgStr = traceRleToSVG(rleMask, width);\r\n    svgStr = filterSmallSVGRegions(svgStr);\r\n    return svgStr;\r\n  };\r\n  \r\n  /**\r\n   * Converts compressed RLE string into SVG\r\n   * @param {string} maskString\r\n   * @param {number} height\r\n   * @returns {string}\r\n   */\r\n  export const traceCompressedRLeStringToSVG = (\r\n    maskString: string | null,\r\n    height: number\r\n  ) => {\r\n    const rleMask = rleFrString(maskString);\r\n    let svgStr = traceRleToSVG(rleMask, height);\r\n    svgStr = filterSmallSVGRegions(svgStr);\r\n    return svgStr;\r\n  };\r\n  \r\n  /**\r\n   * Parses RLE from compressed string\r\n   * @param {Array<number>} input\r\n   * @returns array of integers\r\n   */\r\n  export const rleFrString = (input: any) => {\r\n    let result = [];\r\n    let charIndex = 0;\r\n    while (charIndex < input.length) {\r\n      let value = 0,\r\n        k = 0,\r\n        more = 1;\r\n      while (more) {\r\n        let c = input.charCodeAt(charIndex) - 48;\r\n        value |= (c & 0x1f) << (5 * k);\r\n        more = c & 0x20;\r\n        charIndex++;\r\n        k++;\r\n        if (!more && c & 0x10) value |= -1 << (5 * k);\r\n      }\r\n      if (result.length > 2) value += result[result.length - 2];\r\n      result.push(value);\r\n    }\r\n    return result;\r\n  };\r\n  \r\n  function toImageData(input: any, width: number, height: number) {\r\n    const [r, g, b, a] = [0, 114, 189, 255];\r\n    const arr = new Uint8ClampedArray(4 * width * height).fill(0);\r\n    for (let i = 0; i < input.length; i++) {\r\n      if (input[i] > 0.0) {\r\n        arr[4 * i + 0] = r;\r\n        arr[4 * i + 1] = g;\r\n        arr[4 * i + 2] = b;\r\n        arr[4 * i + 3] = a;\r\n      }\r\n    }\r\n    return new ImageData(arr, height, width);\r\n  }\r\n  \r\n  function imageDataToImage(imageData: ImageData) {\r\n    const canvas = imageDataToCanvas(imageData);\r\n    const image = new Image();\r\n    image.src = canvas.toDataURL();\r\n    return image;\r\n  }\r\n  \r\n  function imageDataToCanvas(imageData: ImageData) {\r\n    const canvas = document.createElement(\"canvas\");\r\n    const ctx = canvas.getContext(\"2d\");\r\n    canvas.width = imageData.width;\r\n    canvas.height = imageData.height;\r\n    ctx?.putImageData(imageData, 0, 0);\r\n    return canvas;\r\n  }\r\n  \r\n  export function rleToImage(input: any, width: number, height: number) {\r\n    return imageDataToImage(toImageData(input, width, height));\r\n  }\r\n  \r\n  export function rleToCanvas(input: any, width: number, height: number) {\r\n    return imageDataToCanvas(toImageData(input, width, height));\r\n  }\r\n  \r\n  \r\n  // Returns a boolean array for which masks to keep in the multi-mask\r\n  // display, given uncertain IoUs and overlap IoUs.\r\n  export function keepArrayForMultiMask(\r\n    uncertainIoUs: number[], \r\n    overlapIoUs: number[], \r\n    uncertainThresh: number = 0.8,\r\n    overlapThresh: number = 0.9,\r\n  ) {\r\n    let keepArray = uncertainIoUs.map((iou: number) => iou > uncertainThresh);\r\n    const duplicateArray = overlapIoUs.map((iou: number) => iou < overlapThresh);\r\n    keepArray = keepArray.map((val: boolean, i: number) => val && duplicateArray[i]);\r\n    // If all masks fail tests, keep just the best one\r\n    if (keepArray.every(item => item === false)) {\r\n      const bestIdx = uncertainIoUs.indexOf(Math.max(...uncertainIoUs));\r\n      keepArray[bestIdx] = true;\r\n    }\r\n    return keepArray;\r\n  }\r\n  "
  },
  {
    "path": "src/components/helpers/metaTheme.tsx",
    "content": "/**\r\n * Returns tailwind color classes for text contents, based on the darkMode boolean\r\n */\r\nexport function getTextColors(darkMode: boolean): {\r\n    primary: string;\r\n    secondary: string;\r\n  } {\r\n    const primary = darkMode ? \"text-white\" : \"text-gray-800\";\r\n    const secondary = darkMode ? \"text-gray-300\" : \"text-gray-600\";\r\n    return { primary, secondary };\r\n  }\r\n  "
  },
  {
    "path": "src/components/helpers/modelAPI.tsx",
    "content": "import { Tensor } from \"onnxruntime-web\";\r\n\r\nimport {\r\n  clickType,\r\n  modeDataProps,\r\n  modelInputProps,\r\n  queryEraseModelProps,\r\n  queryModelReturnTensorsProps,\r\n  setParmsandQueryEraseModelProps,\r\n  setParmsandQueryModelProps,\r\n} from \"./Interface\";\r\n\r\nconst API_ENDPOINT          = \"https://model-zoo.metademolab.com/predictions/segment_everything_box_model\";\r\nconst ALL_MASK_API_ENDPOINT = \"https://model-zoo.metademolab.com/predictions/automatic_masks\";\r\n//const API_ENDPOINT = process.env.API_ENDPOINT;\r\n//const ALL_MASK_API_ENDPOINT = process.env.ALL_MASK_API_ENDPOINT;\r\nconst ERASE_API_ENDPOINT = process.env.ERASE_API_ENDPOINT;\r\n\r\nconst setParmsandQueryModel = ({\r\n  width,\r\n  height,\r\n  uploadScale,\r\n  imgData,\r\n  handleSegModelResults,\r\n  handleAllModelResults,\r\n  imgName,\r\n  shouldDownload,\r\n  shouldNotFetchAllModel,\r\n}: setParmsandQueryModelProps) => {\r\n  // console.log(\"setParmsandQueryModel\");\r\n  const canvas = document.createElement(\"canvas\");\r\n  canvas.width = Math.round(width * uploadScale);\r\n  canvas.height = Math.round(height * uploadScale);\r\n  const ctx = canvas.getContext(\"2d\");\r\n  if (!ctx) return;\r\n  ctx.drawImage(imgData, 0, 0, canvas.width, canvas.height);\r\n  // console.log(\"plot uploaded image\");\r\n  canvas.toBlob(\r\n    (blob) => {\r\n      blob &&\r\n        queryModelReturnTensors({\r\n          blob,\r\n          handleSegModelResults,\r\n          handleAllModelResults,\r\n          image_height: canvas.height,\r\n          imgName,\r\n          shouldDownload,\r\n          shouldNotFetchAllModel,\r\n        });\r\n    },\r\n    \"image/jpeg\",\r\n    1.0\r\n  );\r\n};\r\n\r\nconst queryModelReturnTensors = async ({\r\n  blob,\r\n  handleSegModelResults,\r\n  handleAllModelResults,\r\n  image_height, // Original image height\r\n  imgName,\r\n  shouldDownload,\r\n  shouldNotFetchAllModel,\r\n}: queryModelReturnTensorsProps) => {\r\n\r\n  // console.log(\"image_height, imgName, shouldDownload, shouldNotFetchAllModel:\", image_height, imgName, shouldDownload, shouldNotFetchAllModel)\r\n  // console.log(\"pre-queryModelReturnTensors\");\r\n  if (!API_ENDPOINT) return;\r\n  if (!ALL_MASK_API_ENDPOINT) return;\r\n  // console.log(\"post-queryModelReturnTensors\");\r\n  const segRequest =\r\n    imgName && !shouldDownload\r\n      ? fetch(`/assets/gallery/${imgName}.txt`)\r\n      : fetch(`${API_ENDPOINT}`, {\r\n          method: \"POST\",\r\n          body: blob,\r\n        });\r\n  segRequest.then(async (segResponse) => {\r\n    if (shouldDownload) {\r\n      const segResponseClone = segResponse.clone();\r\n      const segResponseBlob = await segResponseClone.blob();\r\n      downloadBlob(segResponseBlob, imgName);\r\n    }\r\n    const segJSON = await segResponse.json();\r\n    const embedArr = segJSON.map((arrStr: string) => {\r\n      const binaryString = window.atob(arrStr);\r\n      const uint8arr = new Uint8Array(binaryString.length);\r\n      for (let i = 0; i < binaryString.length; i++) {\r\n        uint8arr[i] = binaryString.charCodeAt(i);\r\n      }\r\n      const float32Arr = new Float32Array(uint8arr.buffer);\r\n      return float32Arr;\r\n    });\r\n    const lowResTensor = new Tensor(\"float32\", embedArr[0], [1, 256, 64, 64]);\r\n    handleSegModelResults({\r\n      tensor: lowResTensor,\r\n    });\r\n  });\r\n  if (!shouldNotFetchAllModel) {\r\n    const allImgName = imgName + \".all\";\r\n    const allRequest =\r\n      imgName && !shouldDownload\r\n        ? fetch(`/assets/gallery/${allImgName}.txt`)\r\n        : fetch(`${ALL_MASK_API_ENDPOINT}`, {\r\n            method: \"POST\",\r\n            body: blob,\r\n          });\r\n    allRequest.then(async (allResponse) => {\r\n      if (shouldDownload) {\r\n        const allResponseClone = allResponse.clone();\r\n        const allResponseBlob = await allResponseClone.blob();\r\n        downloadBlob(allResponseBlob, allImgName);\r\n      }\r\n      const allJSON = await allResponse.json();\r\n      handleAllModelResults({\r\n        allJSON,\r\n        image_height,\r\n      });\r\n    });\r\n    allRequest.catch((e) => console.log(e));\r\n  }\r\n};\r\n\r\nconst queryEraseModel = async ({\r\n  image,\r\n  mask,\r\n  handlePredictedImage,\r\n}: queryEraseModelProps) => {\r\n  const [eraseResponse] = await Promise.all([\r\n    fetch(`${ERASE_API_ENDPOINT}`, {\r\n      method: \"POST\",\r\n      headers: {\r\n        \"Content-Type\": \"application/json\",\r\n      },\r\n      body: JSON.stringify({\r\n        image: image,\r\n        // @ts-ignore\r\n        mask: Array.from(mask),\r\n        dilate_kernel_size: 24,\r\n      }),\r\n    }),\r\n  ]);\r\n  const [eraseJSON] = await Promise.all([eraseResponse.text()]);\r\n  const imgSrc = \"data:image/png;base64, \" + eraseJSON;\r\n  handlePredictedImage(imgSrc);\r\n};\r\n\r\nconst getBase64StringFromDataURL = (dataURL: string) =>\r\n  dataURL.replace(\"data:\", \"\").replace(/^.+,/, \"\");\r\n\r\nconst setParmsandQueryEraseModel = ({\r\n  width,\r\n  height,\r\n  uploadScale,\r\n  imgData,\r\n  mask,\r\n  handlePredictedImage,\r\n}: setParmsandQueryEraseModelProps) => {\r\n  // console.log(\"Querying erase model\");\r\n  const canvas = document.createElement(\"canvas\");\r\n  canvas.width = Math.round(width * uploadScale);\r\n  canvas.height = Math.round(height * uploadScale);\r\n  const ctx = canvas.getContext(\"2d\");\r\n  if (!ctx) return;\r\n  ctx.drawImage(imgData || new Image(), 0, 0, canvas.width, canvas.height);\r\n  const dataURL = canvas.toDataURL();\r\n  const b64im = getBase64StringFromDataURL(dataURL);\r\n  queryEraseModel({\r\n    image: b64im,\r\n    mask,\r\n    handlePredictedImage,\r\n  });\r\n};\r\n\r\nconst downloadBlob = (data: any, name: string) => {\r\n  const blob = new Blob([data]);\r\n  const link = document.createElement(\"a\");\r\n  link.download = name + \".txt\";\r\n  link.href = URL.createObjectURL(blob);\r\n  document.body.appendChild(link);\r\n  link.click();\r\n  document.body.removeChild(link);\r\n};\r\n\r\nconst getPointsFromBox = (box: modelInputProps) => {\r\n  if (box.width === null || box.height === null) return;\r\n  const upperLeft = { x: box.x, y: box.y };\r\n  const bottomRight = { x: box.width, y: box.height };\r\n  return { upperLeft, bottomRight };\r\n};\r\n\r\nconst isFirstClick = (clicks: Array<modelInputProps>) => {\r\n  return (\r\n    (clicks.length === 1 &&\r\n      (clicks[0].clickType === clickType.POSITIVE ||\r\n        clicks[0].clickType === clickType.NEGATIVE)) ||\r\n    (clicks.length === 2 &&\r\n      clicks.every(\r\n        (c) =>\r\n          c.clickType === clickType.UPPER_LEFT ||\r\n          c.clickType === clickType.BOTTOM_RIGHT\r\n      ))\r\n  );\r\n};\r\n\r\nconst modelData = ({\r\n  clicks,\r\n  tensor,\r\n  modelScale,\r\n  point_coords,\r\n  point_labels,\r\n  last_pred_mask,\r\n}: modeDataProps) => {\r\n  const lowResTensor = tensor;\r\n  let pointCoords;\r\n  let pointLabels;\r\n  let pointCoordsTensor;\r\n  let pointLabelsTensor;\r\n  // point_coords, point_labels params below are only truthy in text model\r\n  // if (point_coords && point_labels) {\r\n  //   pointCoords = new Float32Array(4);\r\n  //   pointLabels = new Float32Array(2);\r\n  //   pointCoords[0] = point_coords[0][0];\r\n  //   pointCoords[1] = point_coords[0][1];\r\n  //   pointLabels[0] = point_labels[0]; // UPPER_LEFT\r\n  //   pointCoords[2] = point_coords[1][0];\r\n  //   pointCoords[3] = point_coords[1][1];\r\n  //   pointLabels[1] = point_labels[1]; // BOTTOM_RIGHT\r\n  //   pointCoordsTensor = new Tensor(\"float32\", pointCoords, [1, 2, 2]);\r\n  //   pointLabelsTensor = new Tensor(\"float32\", pointLabels, [1, 2]);\r\n  // }\r\n  // point click model check\r\n  if (clicks) {\r\n    let n = clicks.length;\r\n    const clicksFromBox = clicks[0].clickType === 2 ? 2 : 0;\r\n\r\n    // For click only input (no box) need to add an extra\r\n    // negative point and label\r\n    pointCoords = new Float32Array(2 * (n + 1));\r\n    pointLabels = new Float32Array(n + 1);\r\n\r\n    // Check if there is a box input\r\n    if (clicksFromBox) {\r\n      // For box model need to include the box clicks in the point\r\n      // coordinates and also don't need to include the extra\r\n      // negative point\r\n      pointCoords = new Float32Array(2 * (n + clicksFromBox));\r\n      pointLabels = new Float32Array(n + clicksFromBox);\r\n      const {\r\n        upperLeft,\r\n        bottomRight,\r\n      }: {\r\n        upperLeft: { x: number; y: number };\r\n        bottomRight: { x: number; y: number };\r\n      } = getPointsFromBox(clicks[0])!;\r\n      pointCoords = new Float32Array(2 * (n + clicksFromBox));\r\n      pointLabels = new Float32Array(n + clicksFromBox);\r\n      pointCoords[0] = upperLeft.x / modelScale.onnxScale;\r\n      pointCoords[1] = upperLeft.y / modelScale.onnxScale;\r\n      pointLabels[0] = 2.0; // UPPER_LEFT\r\n      pointCoords[2] = bottomRight.x / modelScale.onnxScale;\r\n      pointCoords[3] = bottomRight.y / modelScale.onnxScale;\r\n      pointLabels[1] = 3.0; // BOTTOM_RIGHT\r\n\r\n      last_pred_mask = null;\r\n    }\r\n\r\n    // Add regular clicks\r\n    for (let i = 0; i < n; i++) {\r\n      pointCoords[2 * (i + clicksFromBox)] = clicks[i].x / modelScale.onnxScale;\r\n      pointCoords[2 * (i + clicksFromBox) + 1] =\r\n        clicks[i].y / modelScale.onnxScale;\r\n      pointLabels[i + clicksFromBox] = clicks[i].clickType;\r\n    }\r\n\r\n    // Add in the extra point/label when only clicks and no box\r\n    // The extra point is at (0, 0) with label -1\r\n    if (!clicksFromBox) {\r\n      pointCoords[2 * n] = 0.0;\r\n      pointCoords[2 * n + 1] = 0.0;\r\n      pointLabels[n] = -1.0;\r\n      // update n for creating the tensor\r\n      n = n + 1;\r\n    }\r\n\r\n    // Create the tensor\r\n    pointCoordsTensor = new Tensor(\"float32\", pointCoords, [\r\n      1,\r\n      n + clicksFromBox,\r\n      2,\r\n    ]);\r\n    pointLabelsTensor = new Tensor(\"float32\", pointLabels, [\r\n      1,\r\n      n + clicksFromBox,\r\n    ]);\r\n  }\r\n  const imageSizeTensor = new Tensor(\"float32\", [\r\n    modelScale.maskHeight,\r\n    modelScale.maskWidth,\r\n  ]);\r\n  if (pointCoordsTensor === undefined || pointLabelsTensor === undefined)\r\n    return;\r\n\r\n  // if there is a previous tensor, use it, otherwise we default to an empty tensor\r\n  const lastPredMaskTensor =\r\n    last_pred_mask && clicks && !isFirstClick(clicks)\r\n      ? last_pred_mask\r\n      : new Tensor(\"float32\", new Float32Array(256 * 256), [1, 1, 256, 256]);\r\n\r\n  // +!! is javascript shorthand to convert truthy value to 1, falsey value to 0\r\n  const hasLastPredTensor = new Tensor(\"float32\", [\r\n    +!!(last_pred_mask && clicks && !isFirstClick(clicks)),\r\n  ]);\r\n\r\n  return {\r\n    low_res_embedding: lowResTensor,\r\n    point_coords: pointCoordsTensor,\r\n    point_labels: pointLabelsTensor,\r\n    image_size: imageSizeTensor,\r\n    last_pred_mask: lastPredMaskTensor,\r\n    has_last_pred: hasLastPredTensor,\r\n  };\r\n};\r\n\r\nexport { setParmsandQueryModel, modelData, setParmsandQueryEraseModel };"
  },
  {
    "path": "src/components/helpers/photos.tsx",
    "content": "const photos = [\r\n    {\r\n      src: \"/assets/gallery/18135.jpg\",\r\n      width: 2000,\r\n      height: 1538,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/AdobeStock_94274587_welsh_corgi_pembroke_CD.jpg\",\r\n      width: 2048,\r\n      height: 1365,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/farmhouse_in_provence_1970.17.34.jpg\",\r\n      width: 3000,\r\n      height: 2250,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/GettyImages-587358024.jpg\",\r\n      width: 2048,\r\n      height: 1364,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/GettyImages-673968470.jpg\",\r\n      width: 2068,\r\n      height: 1450,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/GettyImages-1191014275.jpg\",\r\n      width: 2500,\r\n      height: 1661,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/GettyImages-1207721867.jpg\",\r\n      width: 2048,\r\n      height: 1367,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/GettyImages-1207911110.jpg\",\r\n      width: 2048,\r\n      height: 1349,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/IMG_0378.jpg\",\r\n      width: 3000,\r\n      height: 2103,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/shutterstock_466589609.jpg\",\r\n      width: 2769,\r\n      height: 2005,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/AdobeStock_402316.jpg\",\r\n      width: 3295,\r\n      height: 1846,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/AdobeStock_57083879.jpg\",\r\n      width: 3000,\r\n      height: 2000,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/AdobeStock_135146289.jpg\",\r\n      width: 3000,\r\n      height: 2000,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/AdobeStock_323574125.jpg\",\r\n      width: 2240,\r\n      height: 3144,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/FBB_Apartment_BE16_DSC03308.jpg\",\r\n      width: 3000,\r\n      height: 2189,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/GettyImages-104691018.jpg\",\r\n      width: 3000,\r\n      height: 1999,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/dogs-with-stick.jpg\",\r\n      width: 1072,\r\n      height: 603,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/GettyImages-182510030.jpg\",\r\n      width: 3000,\r\n      height: 2188,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/GettyImages-487967520.jpg\",\r\n      width: 3000,\r\n      height: 2000,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/GettyImages-523306132.jpg\",\r\n      width: 3000,\r\n      height: 2357,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/GettyImages-540782045.jpg\",\r\n      width: 3000,\r\n      height: 2127,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/GettyImages-595762959.jpg\",\r\n      width: 3945,\r\n      height: 5523,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/GettyImages-636036276.jpg\",\r\n      width: 3000,\r\n      height: 2248,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/GettyImages-901017386.jpg\",\r\n      width: 3000,\r\n      height: 1948,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/GettyImages-941086978.jpg\",\r\n      width: 2302,\r\n      height: 2302,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/GettyImages-1058471994.jpg\",\r\n      width: 3000,\r\n      height: 2066,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/GettyImages-1124460942.jpg\",\r\n      width: 3000,\r\n      height: 2000,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/GettyImages-1207391022.jpg\",\r\n      width: 3000,\r\n      height: 2099,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/GettyImages-1215928137.jpg\",\r\n      width: 3000,\r\n      height: 2621,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/GettyImages-1216603285.jpg\",\r\n      width: 3000,\r\n      height: 2027,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/iStock-973619282.jpg\",\r\n      width: 3000,\r\n      height: 2038,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/shutterstock_1385445275.jpg\",\r\n      width: 2737,\r\n      height: 2083,\r\n    },\r\n    {\r\n      src: \"/assets/gallery/shutterstock_1723139395.jpg\",\r\n      width: 3000,\r\n      height: 2155,\r\n    },\r\n  ];\r\n  \r\n  export default photos;\r\n  "
  },
  {
    "path": "src/components/hooks/Animation.tsx",
    "content": "import React, { useEffect, useState } from \"react\";\r\n\r\nfunction useDelayUnmount(isMounted: boolean, delayTime: number) {\r\n  const [showDiv, setShowDiv] = useState(false);\r\n  useEffect(() => {\r\n    let timeoutId: string | number | NodeJS.Timeout | undefined;\r\n    if (isMounted && !showDiv) {\r\n      setShowDiv(true);\r\n    } else if (!isMounted && showDiv) {\r\n      timeoutId = setTimeout(() => setShowDiv(false), delayTime); //delay our unmount\r\n    }\r\n    return () => clearTimeout(timeoutId); // cleanup mechanism for effects , the use of setTimeout generate a sideEffect\r\n  }, [isMounted, delayTime, showDiv]);\r\n  return showDiv;\r\n}\r\n\r\nconst Animate = ({ children, isMounted }: any) => {\r\n  const showDiv = useDelayUnmount(isMounted, 450);\r\n  const mountedStyle = { animation: \"inAnimation 450ms ease-in\" };\r\n  const unmountedStyle = {\r\n    animation: \"outAnimation 700ms ease-out\",\r\n    animationFillMode: \"forwards\",\r\n  };\r\n  return (\r\n    <div>\r\n      {showDiv && (\r\n        <div style={isMounted ? mountedStyle : unmountedStyle}>{children}</div>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Animate;\r\n\r\n// THE CSS:\r\n\r\n// @keyframes inAnimation {\r\n//     0% {\r\n//       opacity: 0;\r\n//       max-height: 0px;\r\n//     }\r\n//     100% {\r\n//       opacity: 1;\r\n//       max-height: 600px;\r\n//     }\r\n//   }\r\n\r\n//   @keyframes outAnimation {\r\n//     0% {\r\n//       opacity: 1;\r\n//       max-height: 600px;\r\n//     }\r\n//     100% {\r\n//       opacity: 0;\r\n//       max-height: 0px;\r\n//     }\r\n//   }\r\n"
  },
  {
    "path": "src/components/hooks/context.tsx",
    "content": "import { Tensor } from \"onnxruntime-web\";\r\nimport React, { useState } from \"react\";\r\nimport { modelInputProps } from \"../helpers/Interface\";\r\nimport AppContext from \"./createContext\";\r\n\r\nconst AppContextProvider = (props: {\r\n  children: React.ReactElement<any, string | React.JSXElementConstructor<any>>;\r\n}) => {\r\n  const [click, setClick] = useState<modelInputProps | null>(null);\r\n  const [clicks, setClicks] = useState<Array<modelInputProps> | null>(null);\r\n  const [clicksHistory, setClicksHistory] =\r\n    useState<Array<modelInputProps> | null>(null);\r\n  const [isLoading, setIsLoading] = useState<boolean>(false);\r\n  const [image, setImage] = useState<HTMLImageElement | null>(null);\r\n  const [prevImage, setPrevImage] = useState<HTMLImageElement | null>(null);\r\n  const [isErasing, setIsErasing] = useState<boolean>(false);\r\n  const [isErased, setIsErased] = useState<boolean>(false);\r\n  const [error, setError] = useState<boolean>(false);\r\n  const [svg, setSVG] = useState<string[] | null>(null);\r\n  const [svgs, setSVGs] = useState<string[][] | null>(null);\r\n  const [allsvg, setAllsvg] = useState<\r\n    { svg: string[]; point_coord: number[] }[] | null\r\n  >(null);\r\n  const [isModelLoaded, setIsModelLoaded] = useState<{\r\n    boxModel: boolean;\r\n    allModel: boolean;\r\n  }>({ boxModel: false, allModel: false });\r\n  const [stickers, setStickers] = useState<HTMLCanvasElement[]>([]);\r\n  const [activeSticker, setActiveSticker] = useState<number>(0);\r\n  const [segmentTypes, setSegmentTypes] = useState<\"Box\" | \"Click\" | \"All\">(\r\n    \"Click\"\r\n  );\r\n  const [canvasWidth, setCanvasWidth] = useState<number>(0);\r\n  const [canvasHeight, setCanvasHeight] = useState<number>(0);\r\n  const [maskImg, setMaskImg] = useState<HTMLImageElement | null>(null);\r\n  const [maskCanvas, setMaskCanvas] = useState<HTMLCanvasElement | null>(null);\r\n  const [userNegClickBool, setUserNegClickBool] = useState<boolean>(false);\r\n  const [hasNegClicked, setHasNegClicked] = useState<boolean>(false);\r\n  const [stickerTabBool, setStickerTabBool] = useState<boolean>(false);\r\n  const [enableDemo, setEnableDemo] = useState(false);\r\n  const [isMultiMaskMode, setIsMultiMaskMode] = useState<boolean>(false);\r\n  const [isHovering, setIsHovering] = useState<boolean | null>(null);\r\n  const [showLoadingModal, setShowLoadingModal] = useState<boolean>(false);\r\n  const [eraserText, setEraserText] = useState<{\r\n    isErase: boolean;\r\n    isEmbedding: boolean;\r\n  }>({ isErase: false, isEmbedding: false });\r\n  const [didShowAMGAnimation, setDidShowAMGAnimation] =\r\n    useState<boolean>(false);\r\n  const [predMask, setPredMask] = useState<Tensor | null>(null);\r\n  const [predMasks, setPredMasks] = useState<Tensor[] | null>(null);\r\n  const [predMasksHistory, setPredMasksHistory] = useState<Tensor[] | null>(\r\n    null\r\n  );\r\n  const [isAllAnimationDone, setIsAllAnimationDone] = useState<boolean>(false);\r\n  const [isToolBarUpload, setIsToolBarUpload] = useState<boolean>(false);\r\n\r\n  return (\r\n    <AppContext.Provider\r\n      value={{\r\n        click: [click, setClick],\r\n        clicks: [clicks, setClicks],\r\n        clicksHistory: [clicksHistory, setClicksHistory],\r\n        image: [image, setImage],\r\n        prevImage: [prevImage, setPrevImage],\r\n        error: [error, setError],\r\n        svg: [svg, setSVG],\r\n        svgs: [svgs, setSVGs],\r\n        allsvg: [allsvg, setAllsvg],\r\n        stickers: [stickers, setStickers],\r\n        activeSticker: [activeSticker, setActiveSticker],\r\n        isModelLoaded: [isModelLoaded, setIsModelLoaded],\r\n        segmentTypes: [segmentTypes, setSegmentTypes],\r\n        isLoading: [isLoading, setIsLoading],\r\n        isErasing: [isErasing, setIsErasing],\r\n        isErased: [isErased, setIsErased],\r\n        canvasWidth: [canvasWidth, setCanvasWidth],\r\n        canvasHeight: [canvasHeight, setCanvasHeight],\r\n        maskImg: [maskImg, setMaskImg],\r\n        maskCanvas: [maskCanvas, setMaskCanvas],\r\n        userNegClickBool: [userNegClickBool, setUserNegClickBool],\r\n        hasNegClicked: [hasNegClicked, setHasNegClicked],\r\n        stickerTabBool: [stickerTabBool, setStickerTabBool],\r\n        enableDemo: [enableDemo, setEnableDemo],\r\n        isMultiMaskMode: [isMultiMaskMode, setIsMultiMaskMode],\r\n        isHovering: [isHovering, setIsHovering],\r\n        showLoadingModal: [showLoadingModal, setShowLoadingModal],\r\n        eraserText: [eraserText, setEraserText],\r\n        didShowAMGAnimation: [didShowAMGAnimation, setDidShowAMGAnimation],\r\n        predMask: [predMask, setPredMask],\r\n        predMasks: [predMasks, setPredMasks],\r\n        predMasksHistory: [predMasksHistory, setPredMasksHistory],\r\n        isAllAnimationDone: [isAllAnimationDone, setIsAllAnimationDone],\r\n        isToolBarUpload: [isToolBarUpload, setIsToolBarUpload],\r\n      }}\r\n    >\r\n      {props.children}\r\n    </AppContext.Provider>\r\n  );\r\n};\r\n\r\nexport default AppContextProvider;\r\n"
  },
  {
    "path": "src/components/hooks/createContext.tsx",
    "content": "import { Tensor } from \"onnxruntime-web\";\r\nimport { createContext } from \"react\";\r\nimport { modelInputProps } from \"../helpers/Interface\";\r\n\r\ninterface contextProps {\r\n  click: [\r\n    click: modelInputProps | null,\r\n    setClick: (e: modelInputProps | null) => void\r\n  ];\r\n  clicks: [\r\n    clicks: modelInputProps[] | null,\r\n    setClicks: (e: modelInputProps[] | null) => void\r\n  ];\r\n  clicksHistory: [\r\n    clicksHistory: modelInputProps[] | null,\r\n    setClicksHistory: (e: modelInputProps[] | null) => void\r\n  ];\r\n  image: [\r\n    image: HTMLImageElement | null,\r\n    setImage: (e: HTMLImageElement | null) => void\r\n  ];\r\n  prevImage: [\r\n    prevImage: HTMLImageElement | null,\r\n    setPrevImage: (e: HTMLImageElement | null) => void\r\n  ];\r\n  isLoading: [isLoading: boolean, setIsLoading: (e: boolean) => void];\r\n  isErasing: [isErasing: boolean, setIsErasing: (e: boolean) => void];\r\n  isErased: [isErased: boolean, setIsErased: (e: boolean) => void];\r\n  error: [error: boolean, setError: (e: boolean) => void];\r\n  svg: [svg: string[] | null, setSVG: (e: string[] | null) => void];\r\n  svgs: [svgs: string[][] | null, setSVGs: (e: string[][] | null) => void];\r\n  allsvg: [\r\n    allsvg: { svg: string[]; point_coord: number[] }[] | null,\r\n    setAllsvg: (e: { svg: string[]; point_coord: number[] }[] | null) => void\r\n  ];\r\n  stickers: [\r\n    stickers: HTMLCanvasElement[],\r\n    setStickers: (e: HTMLCanvasElement[]) => void\r\n  ];\r\n  activeSticker: [\r\n    activerSticker: number,\r\n    setActiveSticker: (e: number) => void\r\n  ];\r\n  isModelLoaded: [\r\n    isModelLoaded: {\r\n      boxModel: boolean;\r\n      allModel: boolean;\r\n    },\r\n    setIsModelLoaded: React.Dispatch<\r\n      React.SetStateAction<{ boxModel: boolean; allModel: boolean }>\r\n    >\r\n  ];\r\n  segmentTypes: [\r\n    segmentTypes: \"Box\" | \"Click\" | \"All\",\r\n    setSegmentTypes: (e: \"Box\" | \"Click\" | \"All\") => void\r\n  ];\r\n  canvasWidth: [canvasWidth: number, setCanvasWidth: (e: number) => void];\r\n  canvasHeight: [canvasHeight: number, setCanvasHeight: (e: number) => void];\r\n  maskImg: [\r\n    maskImg: HTMLImageElement | null,\r\n    setMaskImg: (e: HTMLImageElement | null) => void\r\n  ];\r\n  maskCanvas: [\r\n    maskCanvas: HTMLCanvasElement | null,\r\n    setMaskCanvas: (e: HTMLCanvasElement | null) => void\r\n  ];\r\n  userNegClickBool: [\r\n    userNegClickBool: boolean,\r\n    setUserNegClickBool: (e: boolean) => void\r\n  ];\r\n  hasNegClicked: [\r\n    hasNegClicked: boolean,\r\n    setHasNegClicked: (e: boolean) => void\r\n  ];\r\n  stickerTabBool: [\r\n    stickerTabBool: boolean,\r\n    setStickerTabBool: React.Dispatch<React.SetStateAction<boolean>>\r\n  ];\r\n  enableDemo: [\r\n    enableDemo: boolean,\r\n    setEnableDemo: React.Dispatch<React.SetStateAction<boolean>>\r\n  ];\r\n  isMultiMaskMode: [\r\n    isMultiMaskMode: boolean,\r\n    setIsMultiMaskMode: React.Dispatch<React.SetStateAction<boolean>>\r\n  ];\r\n  isHovering: [\r\n    isHovering: boolean | null,\r\n    setIsHovering: React.Dispatch<React.SetStateAction<boolean | null>>\r\n  ];\r\n  showLoadingModal: [\r\n    showLoadingModal: boolean,\r\n    setShowLoadingModal: React.Dispatch<React.SetStateAction<boolean>>\r\n  ];\r\n  eraserText: [\r\n    eraserText: {\r\n      isErase: boolean;\r\n      isEmbedding: boolean;\r\n    },\r\n    setEraserText: React.Dispatch<\r\n      React.SetStateAction<{\r\n        isErase: boolean;\r\n        isEmbedding: boolean;\r\n      }>\r\n    >\r\n  ];\r\n  didShowAMGAnimation: [\r\n    didShowAMGAnimation: boolean,\r\n    setDidShowAMGAnimation: React.Dispatch<React.SetStateAction<boolean>>\r\n  ];\r\n  predMask: [\r\n    predMask: Tensor | null,\r\n    setPredMask: React.Dispatch<React.SetStateAction<Tensor | null>>\r\n  ];\r\n  predMasks: [\r\n    predMasks: Tensor[] | null,\r\n    setPredMasks: React.Dispatch<React.SetStateAction<Tensor[] | null>>\r\n  ];\r\n  predMasksHistory: [\r\n    predMasksHistory: Tensor[] | null,\r\n    setPredMasksHistory: React.Dispatch<React.SetStateAction<Tensor[] | null>>\r\n  ];\r\n  isAllAnimationDone: [\r\n    isAllAnimationDone: boolean,\r\n    setIsAllAnimationDone: React.Dispatch<React.SetStateAction<boolean>>\r\n  ];\r\n  isToolBarUpload: [\r\n    isToolBarUpload: boolean,\r\n    setIsToolBarUpload: React.Dispatch<React.SetStateAction<boolean>>\r\n  ];\r\n}\r\n\r\nconst AppContext = createContext<contextProps | null>(null);\r\n\r\nexport default AppContext;\r\n"
  },
  {
    "path": "src/index.css",
    "content": "body {\r\n  margin: 0;\r\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\r\n    'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\r\n    sans-serif;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n}\r\n\r\ncode {\r\n  font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\r\n    monospace;\r\n}\r\n"
  },
  {
    "path": "src/index.tsx",
    "content": "import * as React from \"react\";\r\nimport { createRoot } from \"react-dom/client\";\r\nimport { createBrowserRouter, RouterProvider } from \"react-router-dom\";\r\nimport App from \"./App\";\r\nimport ErrorPage from \"./components/ErrorPage\";\r\nimport AppContextProvider from \"./components/hooks/context\";\r\n\r\nconst container = document.getElementById(\"root\");\r\nconst root = createRoot(container!);\r\n\r\nconst router = createBrowserRouter([\r\n  {\r\n    path: \"*\",\r\n    element: <App />,\r\n    errorElement: <ErrorPage />,\r\n  },\r\n]);\r\nroot.render(\r\n  <AppContextProvider>\r\n    <RouterProvider router={router} />\r\n  </AppContextProvider>\r\n);\r\n\r\n\r\n/*\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom/client';\r\nimport './index.css';\r\nimport App from './App';\r\nimport reportWebVitals from './reportWebVitals';\r\n\r\nconst root = ReactDOM.createRoot(\r\n  document.getElementById('root') as HTMLElement\r\n);\r\nroot.render(\r\n  <React.StrictMode>\r\n    <App />\r\n  </React.StrictMode>\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n*/"
  },
  {
    "path": "src/react-app-env.d.ts",
    "content": "/// <reference types=\"react-scripts\" />\r\n"
  },
  {
    "path": "src/reportWebVitals.ts",
    "content": "import { ReportHandler } from 'web-vitals';\r\n\r\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\r\n  if (onPerfEntry && onPerfEntry instanceof Function) {\r\n    import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n      getCLS(onPerfEntry);\r\n      getFID(onPerfEntry);\r\n      getFCP(onPerfEntry);\r\n      getLCP(onPerfEntry);\r\n      getTTFB(onPerfEntry);\r\n    });\r\n  }\r\n};\r\n\r\nexport default reportWebVitals;\r\n"
  },
  {
    "path": "src/setupTests.ts",
    "content": "// jest-dom adds custom jest matchers for asserting on DOM nodes.\r\n// allows you to do things like:\r\n// expect(element).toHaveTextContent(/react/i)\r\n// learn more: https://github.com/testing-library/jest-dom\r\nimport '@testing-library/jest-dom';\r\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\r\n  \"compilerOptions\": {\r\n    \"target\": \"es2015\",\r\n    \"downlevelIteration\": true,\r\n    \"lib\": [\r\n      \"dom\",\r\n      \"dom.iterable\",\r\n      \"esnext\"\r\n    ],\r\n    \"allowJs\": true,\r\n    \"skipLibCheck\": true,\r\n    \"esModuleInterop\": true,\r\n    \"allowSyntheticDefaultImports\": true,\r\n    \"strict\": true,\r\n    \"forceConsistentCasingInFileNames\": true,\r\n    \"noFallthroughCasesInSwitch\": true,\r\n    \"module\": \"esnext\",\r\n    \"moduleResolution\": \"node\",\r\n    \"resolveJsonModule\": true,\r\n    \"isolatedModules\": true,\r\n    \"noEmit\": true,\r\n    \"jsx\": \"react-jsx\"\r\n  },\r\n  \"include\": [\r\n    \"src\"\r\n  ]\r\n}"
  },
  {
    "path": "webpack.config.js",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT license.\r\n\r\nconst path = require('path');\r\nconst CopyPlugin = require(\"copy-webpack-plugin\");\r\n\r\nmodule.exports = () => {\r\n    return {\r\n        target: ['web'],\r\n        entry: path.resolve(__dirname, 'src/index.tsx'),\r\n        output: {\r\n            path: path.resolve(__dirname, 'dist'),\r\n            filename: 'bundle.min.js',\r\n            library: {\r\n                type: 'umd'\r\n            }\r\n        },\r\n        plugins: [new CopyPlugin({\r\n            // Use copy plugin to copy *.wasm to output folder.\r\n            patterns: [{ from: 'node_modules/onnxruntime-web/dist/*.wasm', to: '[name][ext]' }]\r\n        })],\r\n        mode: 'production'\r\n    }\r\n};"
  }
]