[
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yaml",
    "content": "name: Bug Report\ndescription: Report a bug in Material You NewTab.\ntitle: \"[Bug]: \"\nlabels: [\"bug\"]\nassignees: []\n\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Thanks for reporting an issue with **Material You NewTab**!\n        Before submitting, please check if the issue already exists in the [issues list](https://github.com/prem-k-r/MaterialYouNewTab/issues).\n        If you need help, feel free to ask in our [Telegram support group](https://t.me/Material_You_NewTab).\n\n  - type: input\n    id: contact\n    attributes:\n      label: Contact Details\n      description: How can we reach you if we need more info?\n      placeholder: ex. Your Telegram username, email, or GitHub profile (optional)\n    validations:\n      required: false\n\n  - type: textarea\n    id: what-happened\n    attributes:\n      label: What happened?\n      description: Describe the issue clearly, including what you expected to happen versus what actually happened.\n      placeholder: \"### Bug Description\\n\\n### Expected Behavior\\n\\n### Actual Behavior\"\n    validations:\n      required: true\n\n  - type: dropdown\n    id: extension-version\n    attributes:\n      label: Extension Version\n      description: What version of Material You NewTab are you using?\n      options:\n        - Latest Stable Release (Chrome Web Store)\n        - Development Build (Main Branch)\n        - Other (Mention Below)\n      default: 0\n    validations:\n      required: true\n\n  - type: input\n    id: extension-version-id\n    attributes:\n      label: Extension Version ID\n      description: If you selected \"Other\" above, mention your extension version.\n      placeholder: ex. v3, v2.4, etc.\n\n  - type: dropdown\n    id: browsers\n    attributes:\n      label: What browser are you using?\n      multiple: true\n      options:\n        - Google Chrome\n        - Mozilla Firefox\n        - Microsoft Edge\n        - Brave\n        - Opera\n        - Other (mention below)\n    validations:\n      required: true\n\n  - type: input\n    id: browser-name\n    attributes:\n      label: Browser Name\n      description: If you selected \"Other\" above, mention your browser name.\n      placeholder: ex. Vivaldi, Safari, etc.\n    validations:\n      required: false\n\n  - type: input\n    id: os\n    attributes:\n      label: Operating System\n      description: Which OS are you using?\n      placeholder: ex. Windows 10, macOS 14, Ubuntu 22.04\n    validations:\n      required: true\n\n  - type: textarea\n    id: reproduce-steps\n    attributes:\n      label: Steps to Reproduce\n      description: Tell us how to reproduce the bug step by step.\n      placeholder: |\n        1. Open the new tab\n        2. Enable a specific feature\n        3. Observe the error or issue\n    validations:\n      required: true\n\n  - type: textarea\n    id: logs\n    attributes:\n      label: Console Errors / Logs\n      description: If applicable, provide any console errors or logs. (Open DevTools → Console and copy errors)\n      render: shell\n\n  - type: textarea\n    id: screenshots\n    attributes:\n      label: Screenshots\n      description: If possible, attach screenshots or screen recordings of the bug.\n\n  - type: checkboxes\n    id: terms\n    attributes:\n      label: Agreement\n      description: By submitting this issue, you agree to follow the project's [Code of Conduct](https://github.com/prem-k-r/MaterialYouNewTab/blob/main/CODE_OF_CONDUCT.md).\n      options:\n        - label: I have searched for existing issues and checked the FAQs before submitting this.\n          required: true\n        - label: I agree to follow this project's Code of Conduct.\n          required: true"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: true\ncontact_links:\n  - name: Telegram Support Group\n    url: https://t.me/Material_You_NewTab\n    about: Join our Telegram group for quick support and discussions.\n  - name: Contribution Guidelines\n    url: https://github.com/prem-k-r/MaterialYouNewTab/blob/main/CONTRIBUTING.md\n    about: Learn how to contribute to Material You New Tab.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yaml",
    "content": "name: Feature Request\ndescription: Suggest a new feature or improvement for Material You NewTab.\ntitle: \"[Feature]: \"\nlabels: [\"enhancement\"]\nassignees: []\n\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Thanks for taking the time to suggest a feature for **Material You NewTab**! \n        Before submitting, please ensure that your feature isn’t already requested in the [issues list](https://github.com/prem-k-r/MaterialYouNewTab/issues).\n        If you need further discussion, feel free to join our [Telegram support group](https://t.me/Material_You_NewTab).\n\n  - type: input\n    id: contact\n    attributes:\n      label: Contact Details\n      description: How can we reach you if we need more information?\n      placeholder: ex. Telegram username or email (optional)\n    validations:\n      required: false\n\n  - type: textarea\n    id: feature-description\n    attributes:\n      label: Describe the Feature\n      description: Clearly explain what feature or improvement you are suggesting.\n      placeholder: Provide a detailed description of your idea.\n      value: \"### Feature Description\\n\\n### Why is this needed?\\n\\n### Possible Implementation\"\n    validations:\n      required: true\n\n  - type: dropdown\n    id: feature-type\n    attributes:\n      label: What kind of feature is this?\n      options:\n        - UI/UX Improvement\n        - New Functionality\n        - Performance Enhancement\n        - Other (mention below)\n    validations:\n      required: true\n\n  - type: input\n    id: feature-type-other\n    attributes:\n      label: Specify Feature Type (if \"Other\")\n      description: If your feature does not fit into the categories above, specify here.\n      placeholder: ex. Accessibility improvement, Customization option\n    validations:\n      required: false\n\n  - type: textarea\n    id: potential-benefits\n    attributes:\n      label: Benefits of This Feature\n      description: Explain how this feature would improve the extension for users.\n      placeholder: Describe how it enhances usability, functionality, or performance.\n    validations:\n      required: true\n\n  - type: textarea\n    id: additional-info\n    attributes:\n      label: Additional Context\n      description: Add any relevant information, references, or screenshots.\n      placeholder: ex. Related features, links, or alternative approaches.\n    validations:\n      required: false\n\n  - type: checkboxes\n    id: agreement\n    attributes:\n      label: Agreement\n      description: By submitting this issue, you agree to follow the project's [Code of Conduct](https://github.com/prem-k-r/MaterialYouNewTab/blob/main/CODE_OF_CONDUCT.md).\n      options:\n        - label: I have searched for existing issues and checked the FAQs before submitting this.\n          required: true\n        - label: I agree to follow this project's Code of Conduct.\n          required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/general_question.yaml",
    "content": "name: General Question / Help Needed\ndescription: Ask a question or seek help related to Material You NewTab.\ntitle: \"[Question]: \"\nlabels: [\"help wanted\"]\nassignees: []\n\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Thanks for reaching out! Please check our [README](https://github.com/prem-k-r/MaterialYouNewTab/blob/main/README.md) and [existing issues](https://github.com/prem-k-r/MaterialYouNewTab/issues) first. For quicker support, join our [Telegram group](https://t.me/Material_You_NewTab).\n\n  - type: input\n    id: contact\n    attributes:\n      label: Contact Details\n      description: How can we reach you for more info? (optional)\n      placeholder: ex. Telegram username or email\n    validations:\n      required: false\n\n  - type: textarea\n    id: question-details\n    attributes:\n      label: Your Question or Issue\n      description: Describe your question or issue.\n      placeholder: \"Explain your question or what you're trying to achieve.\"\n      value: \"### Question\\n\\n### Additional Context\"\n    validations:\n      required: true\n\n  - type: dropdown\n    id: extension-version\n    attributes:\n      label: Extension Version\n      options:\n        - Latest Stable Release (Chrome Web Store)\n        - Development Build (Main Branch)\n        - Other (Mention Below)\n      default: 0\n    validations:\n      required: true\n\n  - type: input\n    id: extension-version-id\n    attributes:\n      label: Extension Version ID\n      placeholder: ex. v3, v2.4, etc.\n    validations:\n      required: false\n\n  - type: dropdown\n    id: browsers\n    attributes:\n      label: What browser are you using?\n      multiple: true\n      options:\n        - Google Chrome\n        - Mozilla Firefox\n        - Microsoft Edge\n        - Brave\n        - Opera\n        - Other (mention below)\n    validations:\n      required: true\n\n  - type: input\n    id: browser-name\n    attributes:\n      label: Browser Name\n      description: If you selected \"Other\" above, mention your browser name.\n      placeholder: ex. Vivaldi, Safari, etc.\n    validations:\n      required: false\n\n  - type: input\n    id: os\n    attributes:\n      label: Operating System\n      placeholder: ex. Windows 10, macOS 14, Ubuntu 22.04\n    validations:\n      required: true\n\n  - type: textarea\n    id: additional-info\n    attributes:\n      label: Additional Information (if any)\n      placeholder: \"Any logs, screenshots, or extra details?\"\n    validations:\n      required: false\n\n  - type: checkboxes\n    id: terms\n    attributes:\n      label: Agreement\n      options:\n        - label: I have searched the FAQs and existing issues before submitting.\n          required: true\n        - label: I agree to follow this project's [Code of Conduct](https://github.com/prem-k-r/MaterialYouNewTab/blob/main/CODE_OF_CONDUCT.md).\n          required: true"
  },
  {
    "path": ".github/pull_request_template.md",
    "content": "## 📌 Description\n\n<!-- Please provide a clear and concise description of the changes introduced in this PR and their purpose. -->\n\n## 🎨 Visual Changes (Screenshots / Videos)\n\n<!-- If applicable, attach relevant screenshots or screen recordings showcasing the modifications. -->\n\n## 🔗 Related Issues\n\n- Closes #<issue_number> <!-- if this PR fixes an issue -->\n- Related to #<issue_number> <!-- if applicable -->\n\n## ✅ Checklist\n\n<!-- Tip: To mark a checklist item as complete, replace [ ] with [x] -->\n\n- [ ] I have read and followed the [Contributing Guidelines](https://github.com/prem-k-r/MaterialYouNewTab/blob/main/CONTRIBUTING.md).\n- [ ] My code follows the project's coding style and conventions.\n- [ ] I have tested my changes thoroughly to ensure expected behavior.\n- [ ] I have verified compatibility across Chrome and Firefox (additional browsers if applicable).\n- [ ] I have attached relevant visual evidence (screenshots/videos) if applicable.\n- [ ] I have updated the [CHANGELOG.md](https://github.com/prem-k-r/MaterialYouNewTab/blob/main/CHANGELOG.md) under the appropriate categories with all my changes in this PR.\n\n## 🤖 AI Assistance (Coding)\n\n- [ ] None  \n- [ ] Ideas / planning  \n- [ ] Debugging / review help  \n- [ ] Small code snippets  \n- [ ] Partial implementation  \n- [ ] Major implementation help  \n- [ ] Mostly AI-generated  \n- [ ] Full vibe coded\n"
  },
  {
    "path": ".gitignore",
    "content": "# Ignore macOS system files\n.DS_Store\n\n# Ignore VSCode workspace settings\n.vscode/\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),\nand this project partially follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n- `Added` - for new features.\n- `Changed` - for changes in existing functionality.\n- `Improved` - for enhancements or optimizations in existing functionality.\n- `Removed` - for features that have been removed.\n- `Fixed` - for any bug fixes.\n- `Localized` - for updates related to translations, localization, or internationalization.\n- `Other` - for technical updates.\n\n## [Unreleased](https://github.com/prem-k-r/MaterialYouNewTab/compare/v3.3...main)\n\n### Added\n\n- Added support for touch-swipe and mouse-wheel gestures on the search engine icon to switch search engines when they are hidden ([@prem-k-r](https://github.com/prem-k-r)) ([#145](https://github.com/prem-k-r/MaterialYouNewTab/pull/145))\n- Added support for custom shortcut icons via upload, URL, or pasted SVG ([@smurf11k](https://github.com/smurf11k)), ([@prem-k-r](https://github.com/prem-k-r)) ([#187](https://github.com/prem-k-r/MaterialYouNewTab/pull/187/)), ([#199](https://github.com/prem-k-r/MaterialYouNewTab/pull/199/))\n- Added Daily Quote option to show one quote per day instead of refreshing on every new tab ([@KomeshBathula](https://github.com/KomeshBathula)) ([#141](https://github.com/prem-k-r/MaterialYouNewTab/pull/141))\n\n### Improved\n\n- Introduced collapsible sections in the settings menu for improved organization and easier navigation ([@prem-k-r](https://github.com/prem-k-r)) ([#109](https://github.com/prem-k-r/MaterialYouNewTab/pull/109))\n- Redesigned the theme selector from dropdown to buttons for easier switching between Light, Dark, and System modes ([@prem-k-r](https://github.com/prem-k-r)) ([#112](https://github.com/prem-k-r/MaterialYouNewTab/pull/112))\n- Added expanding animations to todo and Google apps panels and some other minor UI changes ([@prem-k-r](https://github.com/prem-k-r)) ([#118](https://github.com/prem-k-r/MaterialYouNewTab/pull/118))\n- Prevented weather condition and shortcut icons from being color-inverted in dark mode ([@prem-k-r](https://github.com/prem-k-r)) ([#191](https://github.com/prem-k-r/MaterialYouNewTab/pull/191))\n- Improved fallback behavior of shortcut icons to first-letter icons when custom icons fail to load or when offline ([@prem-k-r](https://github.com/prem-k-r)) ([#187](https://github.com/prem-k-r/MaterialYouNewTab/pull/187/))\n- Disabled dragging for weather and location icons ([@anndiy](https://github.com/anndiy)) ([#183](https://github.com/prem-k-r/MaterialYouNewTab/pull/183))\n\n### Fixed\n\n- Fixed an issue where rapid clicks on the AI Tools icon caused race conditions, leading to inconsistent shortcuts panel visibility. ([@prem-k-r](https://github.com/prem-k-r)) ([#118](https://github.com/prem-k-r/MaterialYouNewTab/pull/118))\n- Fixed shortcut name and URLs hover behavior by replacing ellipsis with clipped text for improved readability ([@prem-k-r](https://github.com/prem-k-r)) ([283f78d](https://github.com/prem-k-r/MaterialYouNewTab/pull/199/changes/283f78d6e4b202a075ca3d670c1b30cbc701c3a4))\n\n### Localized\n\n- Translation updated for:\n  - Japanese ([@kons10](https://github.com/kons10))\n  - Arabic ([@heshamoomar](https://github.com/heshamoomar))\n  - Spanish ([@palacios22c](https://github.com/palacios22c))\n  - Russian ([@C0dwiz](https://github.com/C0dwiz), [@giwih](https://github.com/giwih)), ([@smurf11k](https://github.com/smurf11k))\n  - Czech ([@ceskyDJ](https://github.com/ceskyDJ))\n  - Hindi ([@prem-k-r](https://github.com/prem-k-r))\n  - Bengali ([@prem-k-r](https://github.com/prem-k-r)), ([@itz-rj-here](https://github.com/itz-rj-here))\n  - Uzbek ([S0ME2](https://github.com/S0ME2))\n  - Indonesian ([@Ayyas-RF](https://github.com/Ayyas-RF))\n  - Ukrainian ([@smurf11k](https://github.com/smurf11k))\n  - Hungarian ([@smurf11k](https://github.com/smurf11k))\n  - Marathi ([@anndiy](https://github.com/anndiy))\n  - French ([@iamwinner422](https://github.com/iamwinner422))\n- Corrected abbreviations for months and days of the week in Russian ([@Ayyas-RF](https://github.com/Ayyas-RF)) ([#105](https://github.com/prem-k-r/MaterialYouNewTab/pull/105))\n- Added support for Ukrainian ([@lozik4](https://github.com/lozik4)) ([#106](https://github.com/prem-k-r/MaterialYouNewTab/pull/106))\n- Added support for Swedish ([@empohello-imamempogitub](https://github.com/empohello-imamempogitub)) ([#179](https://github.com/prem-k-r/MaterialYouNewTab/pull/179))\n- Localized New Tab title ([@prem-k-r](https://github.com/prem-k-r))\n\n### Other\n\n- Miscellaneous improvements ([@prem-k-r](https://github.com/prem-k-r))\n\n## [v3.3](https://github.com/prem-k-r/MaterialYouNewTab/compare/v3.2...v3.3) - Nov 23, 2025\n\n### Added\n\n- Added “Follow System Theme” option to the theme dropdown, allowing automatic switching between Light and Dark themes based on the system’s current appearance ([@heshamoomar](https://github.com/heshamoomar)) ([#80](https://github.com/prem-k-r/MaterialYouNewTab/pull/80))\n- Added toast notification to hide the footer for Chromium users ([@prem-k-r](https://github.com/prem-k-r)) ([#89](https://github.com/prem-k-r/MaterialYouNewTab/pull/89))\n\n### Improved\n\n- Updated search suggestion behavior to autocomplete the current search term upon selection via keyboard ([@prem-k-r](https://github.com/prem-k-r)), ([@itz-rj-here](https://github.com/itz-rj-here)) ([#33](https://github.com/prem-k-r/MaterialYouNewTab/pull/33))\n- Added minimum width constraint to the custom text input box ([@anugrahrk](https://github.com/anugrahrk)) ([#70](https://github.com/prem-k-r/MaterialYouNewTab/pull/70))\n- Smoothed the opening and closing animation for search dropdown ([@prem-k-r](https://github.com/prem-k-r)) ([#83](https://github.com/prem-k-r/MaterialYouNewTab/pull/83))\n\n### Fixed\n\n- Search dropdown no longer throws an error when Enter is pressed without a selected item ([@prem-k-r](https://github.com/prem-k-r)) ([#83](https://github.com/prem-k-r/MaterialYouNewTab/pull/83))\n\n### Localized\n\n- Adjusted Chinese date formatting ([@quantumfallout](https://github.com/quantumfallout)) ([#43](https://github.com/prem-k-r/MaterialYouNewTab/pull/43))\n- Added support for Polish ([@dawid9707](https://github.com/dawid9707)) ([#55](https://github.com/prem-k-r/MaterialYouNewTab/pull/55))\n- Corrected the display of Arabic numerals in the digital clock and opacity slider ([@heshamoomar](https://github.com/heshamoomar)) ([#78](https://github.com/prem-k-r/MaterialYouNewTab/pull/78))\n- Translation updated for:\n  - Russian ([@giwih](https://github.com/giwih)), ([@Ayyas-RF](https://github.com/Ayyas-RF))\n  - Spanish ([@zRaidev](https://github.com/zRaidev))\n  - Arabic ([@heshamoomar](https://github.com/heshamoomar))\n  - Korean ([@codemaster0524](https://github.com/codemaster0524))\n  - Japanese ([@kons10](https://github.com/kons10))\n  - Czech ([@ceskyDJ](https://github.com/ceskyDJ))\n  - Indonesian ([@Ayyas-RF](https://github.com/Ayyas-RF))\n  - Hindi ([@prem-k-r](https://github.com/prem-k-r))\n  - Bengali ([@prem-k-r](https://github.com/prem-k-r)), ([@itz-rj-here](https://github.com/itz-rj-here))\n\n### Other\n\n- Docs: Added dark mode to privacy policy page ([@itz-rj-here](https://github.com/itz-rj-here)) ([#32](https://github.com/prem-k-r/MaterialYouNewTab/pull/32))\n- Chores ([@prem-k-r](https://github.com/prem-k-r)), ([@itz-rj-here](https://github.com/itz-rj-here))\n\n## [v3.2](https://github.com/XengShi/materialYouNewTab/compare/v3...v3.2) - July 20, 2025\n\n### Added\n\n- Added GPS-based dynamic location option for weather updates ([@prem-k-r](https://github.com/prem-k-r)) ([#331](https://github.com/XengShi/materialYouNewTab/pull/331))\n- Added Claude to the list of AI Tools ([@prem-k-r](https://github.com/prem-k-r)) ([#424](https://github.com/XengShi/materialYouNewTab/pull/424))\n- Added Dark Mode feature for all Color Themes ([@Thunder-Blaze](https://github.com/Thunder-Blaze)) ([#465](https://github.com/XengShi/materialYouNewTab/pull/465))\n- Enabled vertical scroll to also control horizontal scrolling for AI Tools ([@prem-k-r](https://github.com/prem-k-r)) ([#495](https://github.com/XengShi/materialYouNewTab/pull/495))\n- Added Discord shortcut ([@prem-k-r](https://github.com/prem-k-r)) ([185a981](https://github.com/XengShi/materialYouNewTab/pull/523/commits/185a98128ab0a066d0002c074df1bfb6212c638d))\n- Added option to hide weather widgets ([@Viral-Sachde](https://github.com/Viral-Sachde)), ([@prem-k-r](https://github.com/prem-k-r)) ([#535](https://github.com/XengShi/materialYouNewTab/pull/535))\n- Added option to edit bookmark name and URL ([@prem-k-r](https://github.com/prem-k-r)) ([#541](https://github.com/XengShi/materialYouNewTab/pull/541))\n- Added DeepSeek to the list of AI Tools ([@prem-k-r](https://github.com/prem-k-r)) ([#544](https://github.com/XengShi/materialYouNewTab/pull/544))\n- Replaced default alert and confirm dialog boxes with a custom modal, including default keypress behavior ([@prem-k-r](https://github.com/prem-k-r)) ([#545](https://github.com/XengShi/materialYouNewTab/pull/545))\n- Set the browser's current default search engine as the selectable engine ([@prem-k-r](https://github.com/prem-k-r)) ([#479](https://github.com/XengShi/materialYouNewTab/pull/479))\n- Added option for sorting by date added in bookmarks ([@hasanakhiar](https://github.com/hasanakhiar)) ([#571](https://github.com/XengShi/materialYouNewTab/pull/571))\n- Added Motivational Quotes feature ([@prem-k-r](https://github.com/prem-k-r)), ([@XengShi](https://github.com/XengShi)), ([@Thunder-Blaze](https://github.com/Thunder-Blaze)), ([@itz-rj-here](https://github.com/itz-rj-here)) ([#570](https://github.com/XengShi/materialYouNewTab/pull/570))\n- Added search mode categorization: 'Search With' search engines and 'Search On' platforms ([@ashesbloom](https://github.com/ashesbloom)), ([@prem-k-r](https://github.com/prem-k-r)), ([@Thunder-Blaze](https://github.com/Thunder-Blaze)) ([#474](https://github.com/XengShi/materialYouNewTab/pull/474))\n- Added Wikipedia and Google Images to the list of search engines ([@prem-k-r](https://github.com/prem-k-r)) ([43aaf55](https://github.com/XengShi/materialYouNewTab/pull/474/commits/43aaf55f61affffa9fe5133d9ad1507e2c14a660))\n- Added Tips ([@XengShi](https://github.com/XengShi)), ([@prem-k-r](https://github.com/prem-k-r)) ([0190dee](https://github.com/XengShi/materialYouNewTab/commit/0190dee9e0adfb5e4f68afa8529317eb6810d311)), ([#585](https://github.com/XengShi/materialYouNewTab/pull/585)), ([#589](https://github.com/XengShi/materialYouNewTab/pull/589))\n- Added Reddit and Quora as Search Platforms ([@prem-k-r](https://github.com/prem-k-r)) ([#593](https://github.com/XengShi/materialYouNewTab/pull/593))\n- Added option to hide Clock ([@XengShi](https://github.com/XengShi)), ([@prem-k-r](https://github.com/prem-k-r)) ([23cd5a8](https://github.com/XengShi/materialYouNewTab/commit/23cd5a86759d11944f447f4f448a710ccfe4d9fc)), ([#599](https://github.com/XengShi/materialYouNewTab/pull/599))\n- Added location suggestion dropdown with real-time search feature ([@prem-k-r](https://github.com/prem-k-r)) ([#609](https://github.com/XengShi/materialYouNewTab/pull/609))\n- Added option to show Minimun-Maximum temperature instead of Feels like ([@prem-k-r](https://github.com/prem-k-r)) ([#615](https://github.com/XengShi/materialYouNewTab/pull/615))\n- Added Grok and Qwen to the list of AI Tools ([@prem-k-r](https://github.com/prem-k-r)) ([#624](https://github.com/XengShi/materialYouNewTab/pull/624))\n- Added the ability to choose which AI shortcuts to display and set the order in which they appear ([@prem-k-r](https://github.com/prem-k-r)) ([#624](https://github.com/XengShi/materialYouNewTab/pull/624))\n- Added transparency effect to widgets interface when wallpaper is set ([@prem-k-r](https://github.com/prem-k-r)) ([#660](https://github.com/XengShi/materialYouNewTab/pull/660))\n- Interactive transparency adjustment slider ([@tahirahmad01](https://github.com/TahirAhmad01)) ([#670](https://github.com/XengShi/materialYouNewTab/pull/670)), ([@prem-k-r](https://github.com/prem-k-r)) ([#678](https://github.com/XengShi/materialYouNewTab/pull/678))\n- Added Multilingual Support for Motivational Quotes ([@prem-k-r](https://github.com/prem-k-r)) ([#683](https://github.com/XengShi/materialYouNewTab/pull/683))\n- Added toggle to hide or show location in the location tile ([@prem-k-r](https://github.com/prem-k-r)) ([#685](https://github.com/XengShi/materialYouNewTab/pull/685))\n- Added drag and drop functionality for reordering shortcuts ([@prem-k-r](https://github.com/prem-k-r)) ([#695](https://github.com/XengShi/materialYouNewTab/pull/695))\n- Added edit functionality for todo list ([@GauravKukreti](https://github.com/GauravKukreti)) ([#719](https://github.com/XengShi/materialYouNewTab/pull/719))\n\n### Changed\n\n- Weather retention time set to 7.25 minutes for user-entered API keys and 16 minutes otherwise ([@prem-k-r](https://github.com/prem-k-r)) ([#428](https://github.com/XengShi/materialYouNewTab/pull/428))\n- Changed default Vietnamese font to 'Be Vietnam Pro' ([@prem-k-r](https://github.com/prem-k-r)) ([#442](https://github.com/XengShi/materialYouNewTab/pull/442))\n- Improved date format for Japanese and Korean ([@prem-k-r](https://github.com/prem-k-r)), ([@dempavof](https://github.com/dempavof)) ([#529](https://github.com/XengShi/materialYouNewTab/pull/529))\n- Updated toggle switch design; adjusted the inner thumb size based on state and reduced animation speed ([@vchib1](https://github.com/vchib1)) ([#558](https://github.com/XengShi/materialYouNewTab/pull/558))\n- Reduced radio buttons size in search engines ([@vchib1](https://github.com/vchib1)), ([@prem-k-r](https://github.com/prem-k-r))\n- Added throttle to Reddit search suggestions to prevent hitting rate limits during rapid typing ([@prem-k-r](https://github.com/prem-k-r)) ([#626](https://github.com/XengShi/materialYouNewTab/pull/626))\n- Made host permissions optional (used for search suggestions) ([@prem-k-r](https://github.com/prem-k-r)) ([#709](https://github.com/XengShi/materialYouNewTab/pull/709))\n\n### Improved\n\n- Adaptive icon now matches the theme color ([@Thunder-Blaze](https://github.com/Thunder-Blaze)) ([#435](https://github.com/XengShi/materialYouNewTab/pull/435)), ([@prem-k-r](https://github.com/prem-k-r)) ([#477](https://github.com/XengShi/materialYouNewTab/pull/477))\n- Mic icon now hides properly, providing more space for queries ([@prem-k-r](https://github.com/prem-k-r)) ([#450](https://github.com/XengShi/materialYouNewTab/pull/450))\n- Smoothed Close button animation ([@Thunder-Blaze](https://github.com/Thunder-Blaze)) ([#454](https://github.com/XengShi/materialYouNewTab/pull/454))\n- Made the website responsive for better mobile usability ([@Thunder-Blaze](https://github.com/Thunder-Blaze)) ([#453](https://github.com/XengShi/materialYouNewTab/pull/453))\n- Search engines dropdown now closes when an option is selected ([@Thunder-Blaze](https://github.com/Thunder-Blaze)) ([#453](https://github.com/XengShi/materialYouNewTab/pull/453))\n- Shortcuts now scroll within their container instead of the whole screen when spanning multiple lines ([@Thunder-Blaze](https://github.com/Thunder-Blaze)) ([#453](https://github.com/XengShi/materialYouNewTab/pull/453))\n- Improved keyboard and mouse interactions: clearing selected state when dropdown opens, preventing scrolling with arrow keys, ensuring Enter and clicks switch search engines, close the dropdown, and focus on the search input, including for the search engine radio buttons. ([@prem-k-r](https://github.com/prem-k-r)) ([#483](https://github.com/XengShi/materialYouNewTab/pull/483))\n- Updated color picker shades for custom colors ([@prem-k-r](https://github.com/prem-k-r)) ([#493](https://github.com/XengShi/materialYouNewTab/pull/493))\n- Updated new tab favicon ([@XengShi](https://github.com/XengShi)), ([@prem-k-r](https://github.com/prem-k-r))\n- Enhanced weather icons by using 128x128px images instead of 64x64px ([@prem-k-r](https://github.com/prem-k-r)), ([@ceskyDJ](https://github.com/ceskyDJ)) ([#533](https://github.com/XengShi/materialYouNewTab/pull/533))\n- Styled each shortcut as a separate card with a background color in the Edit Shortcuts list ([@prem-k-r](https://github.com/prem-k-r)) ([#536](https://github.com/XengShi/materialYouNewTab/pull/536))\n- Added Throttle in Color Picker input for performance optimization ([@prem-k-r](https://github.com/prem-k-r)) ([#511](https://github.com/XengShi/materialYouNewTab/pull/511))\n- Added 5 more shared WeatherAPI keys ([@prem-k-r](https://github.com/prem-k-r)) ([916e3d6](https://github.com/XengShi/materialYouNewTab/pull/609/commits/916e3d6bd49c10fde9c2f24ac61a0570922c5c3a))\n- Made AI tools shortcut icons a bit larger ([@prem-k-r](https://github.com/prem-k-r)) ([27c592f](https://github.com/XengShi/materialYouNewTab/pull/624/commits/27c592fecbdf0c440fc750ea7503c060e4c4deaf))\n- Enhanced 'Sort by' and 'View as' buttons UI ([@prem-k-r](https://github.com/prem-k-r)) ([#635](https://github.com/XengShi/materialYouNewTab/pull/635))\n- Enhanced Google apps and Todo list UI ([@XengShi](https://github.com/XengShi)) ([bff0a40](https://github.com/XengShi/materialYouNewTab/commit/bff0a4012ab8e05bc177dfdc1f3c7189be763a54)), ([@prem-k-r](https://github.com/prem-k-r))\n- New shortcut now auto-scrolls into view and focuses on URL input; and smooth scrolling for all scrollable areas ([@prem-k-r](https://github.com/prem-k-r)) ([#638](https://github.com/XengShi/materialYouNewTab/pull/638))\n- Added confirmation alert before resetting shortcuts ([@prem-k-r](https://github.com/prem-k-r)) ([#657](https://github.com/XengShi/materialYouNewTab/pull/657))\n- Use browser-cached bookmark favicons ([@prem-k-r](https://github.com/prem-k-r)) ([#710](https://github.com/XengShi/materialYouNewTab/pull/710))\n- Improved search suggestions keyboard and mouse navigation ([@prem-k-r](https://github.com/prem-k-r)) ([#723](https://github.com/XengShi/materialYouNewTab/pull/723))\n\n### Removed\n\n- Removed extension icon change ([@XengShi](https://github.com/XengShi))\n- Removed Instagram shortcut ([@prem-k-r](https://github.com/prem-k-r)) ([185a981](https://github.com/XengShi/materialYouNewTab/pull/523/commits/185a98128ab0a066d0002c074df1bfb6212c638d))\n- Removed the vertical line that was present after 'Search With' ([@prem-k-r](https://github.com/prem-k-r))\n- Removed the invalid URL syntax check for shortcuts ([@prem-k-r](https://github.com/prem-k-r)) ([aa63c4a](https://github.com/XengShi/materialYouNewTab/pull/622/commits/aa63c4a0ee10c44baf63c22acf637ffb11621416))\n\n### Fixed\n\n- Fixed issue where search suggestions were partially hidden behind shortcuts on smaller screen heights ([@Thunder-Blaze](https://github.com/Thunder-Blaze)) ([#407](https://github.com/XengShi/materialYouNewTab/pull/407))\n- Fixed issue where keyboard shortcuts were active in custom text box ([@prem-k-r](https://github.com/prem-k-r)) ([fa30642](https://github.com/XengShi/materialYouNewTab/pull/413/commits/fa3064253c45cdedb0d95618a97e66ce39a67ad3))\n- Removed slight white boundaries around shortcut icons and the Close button ([@Thunder-Blaze](https://github.com/Thunder-Blaze)) ([#454](https://github.com/XengShi/materialYouNewTab/pull/454))\n- Fixed issue with bookmarks toggle on unsupported devices ([@Thunder-Blaze](https://github.com/Thunder-Blaze)), ([@prem-k-r](https://github.com/prem-k-r))\n- Fixed display issue when there are fewer than five search suggestions ([@Thunder-Blaze](https://github.com/Thunder-Blaze)) ([#453](https://github.com/XengShi/materialYouNewTab/pull/453))\n- Custom text no longer overlaps the clock and is now limited to 2 lines, becoming scrollable beyond that ([@Thunder-Blaze](https://github.com/Thunder-Blaze)) ([#467](https://github.com/XengShi/materialYouNewTab/pull/467))\n- Resolved issues where weather details sometimes failed to display properly ([@prem-k-r](https://github.com/prem-k-r))\n- Centered shortcut names correctly when the width is 1–2 characters ([@prem-k-r](https://github.com/prem-k-r)) ([06bb4ca](https://github.com/XengShi/materialYouNewTab/pull/496/commits/06bb4cabe66b278a517483358519cc3c66232b90))\n- Limited shortcut title width to prevent overflow onto other shortcuts ([@Thunder-Blaze](https://github.com/Thunder-Blaze)) ([#497](https://github.com/XengShi/materialYouNewTab/pull/497))\n- Fixed AM/PM display error in certain languages when 12-hour format is enabled ([@shmps40802](https://github.com/shmps40802)) ([#500](https://github.com/XengShi/materialYouNewTab/pull/500))\n- Fixed bug where shortcut reset animation occurred only alternately; now it works every time ([@prem-k-r](https://github.com/prem-k-r)) ([c4cdd6c](https://github.com/XengShi/materialYouNewTab/pull/536/commits/c4cdd6c8719937b9fa93afc76cd111a94cf61350))\n- Corrected off-center Google menu icon alignment on certain devices ([@vchib1](https://github.com/vchib1)) ([#558](https://github.com/XengShi/materialYouNewTab/pull/558))\n- Fixed delayed radio button animation when hiding search engines ([@vchib1](https://github.com/vchib1)) ([#558](https://github.com/XengShi/materialYouNewTab/pull/558))\n- Fixed disabled Save button in Edit Bookmark not re-enabling after entering URL ([@prem-k-r](https://github.com/prem-k-r)) ([#635](https://github.com/XengShi/materialYouNewTab/pull/635))\n- Fixed inactive Add Shortcut button after resetting maxed-out shortcuts ([@prem-k-r](https://github.com/prem-k-r)) ([#638](https://github.com/XengShi/materialYouNewTab/pull/638))\n- Prevent repeated toggle of bookmark on RightArrow key hold ([@prem-k-r](https://github.com/prem-k-r)) ([45ebd54](https://github.com/XengShi/materialYouNewTab/pull/669/commits/45ebd54a0767427f5c2b0b12a735d35f446eba3c))\n- Prevent flash of default blue color on page load when using custom theme from color picker ([@prem-k-r](https://github.com/prem-k-r)) ([#708](https://github.com/XengShi/materialYouNewTab/pull/708))\n\n### Localized\n\n- Added support for Hungarian ([@Zan1456](https://github.com/Zan1456)) ([#420](https://github.com/XengShi/materialYouNewTab/pull/420))\n- Added support for Nepali ([@sthaB-kash](https://github.com/sthaB-kash)) ([#452](https://github.com/XengShi/materialYouNewTab/pull/452))\n- Added support for Traditional Chinese ([@shmps40802](https://github.com/shmps40802)) ([#499](https://github.com/XengShi/materialYouNewTab/pull/499))\n- Added support for Urdu ([@prem-k-r](https://github.com/prem-k-r)), ([@asfand-dev](https://github.com/asfand-dev)) ([#548](https://github.com/XengShi/materialYouNewTab/pull/548))\n- Added support for German ([@prem-k-r](https://github.com/prem-k-r)) ([#641](https://github.com/XengShi/materialYouNewTab/pull/641))\n- Added support for Persian ([@AMIRHOSSEIN-AHMADI-IR](https://github.com/AMIRHOSSEIN-AHMADI-IR)) ([#645](https://github.com/XengShi/materialYouNewTab/pull/645))\n- Added support for Arabic ([@Mazen3Alharbi](https://github.com/Mazen3Alharbi)) ([#659](https://github.com/XengShi/materialYouNewTab/pull/659))\n- Added support for Greek ([@trlef19](https://github.com/trlef19)) ([#674](https://github.com/XengShi/materialYouNewTab/pull/674))\n- Added support for Tamil ([@TamilNeram](https://github.com/TamilNeram)) ([#682](https://github.com/XengShi/materialYouNewTab/pull/682))\n- Added support for Thai ([@prinsasina](https://github.com/prinsasina)) ([#702](https://github.com/XengShi/materialYouNewTab/pull/702))\n- Translation updated for:\n  - Hindi ([@prem-k-r](https://github.com/prem-k-r))\n  - Bengali ([@prem-k-r](https://github.com/prem-k-r)), ([@itz-rj-here](https://github.com/itz-rj-here))\n  - Vietnamese ([@Tuan1-2-3](https://github.com/Tuan1-2-3))\n  - French ([@iamwinner422](https://github.com/iamwinner422))\n  - Italian ([@ZiClaud](https://github.com/ZiClaud))\n  - Czech ([@ceskyDJ](https://github.com/ceskyDJ))\n  - Indonesian ([@Ayyas-RF](https://github.com/Ayyas-RF))\n  - Marathi ([@prem-k-r](https://github.com/prem-k-r))\n  - Turkish ([@kerimlcr](https://github.com/kerimlcr))\n  - Portuguese (Brazil) ([@MestreWalla](https://github.com/MestreWalla))\n  - Russian ([@giwih](https://github.com/giwih))\n  - Japanese ([@kons10](https://github.com/kons10))\n  - Simplified Chinese ([@kons10](https://github.com/kons10))\n\n### Other\n\n- Updated documentations ([@prem-k-r](https://github.com/prem-k-r)), ([@itz-rj-here](https://github.com/itz-rj-here)), ([@ZiClaud](https://github.com/ZiClaud))\n- Refactored code ([@ZiClaud](https://github.com/ZiClaud)), ([@prem-k-r](https://github.com/prem-k-r))\n- Chores ([@XengShi](https://github.com/XengShi)), ([@itz-rj-here](https://github.com/itz-rj-here)), ([@prem-k-r](https://github.com/prem-k-r))\n\n---\n\n## [v3](https://github.com/XengShi/materialYouNewTab/compare/v2.4...v3) - Dec 28, 2024\n\n## [v2.4](https://github.com/XengShi/materialYouNewTab/compare/v2.3...v2.4) - Nov 26, 2024\n\n## [v2.3](https://github.com/XengShi/materialYouNewTab/compare/v2.2...v2.3) - Nov 1, 2024\n\n## [v2.2](https://github.com/XengShi/materialYouNewTab/compare/v2.0...v2.2) - Oct 23, 2024\n\n## [v2.0](https://github.com/XengShi/materialYouNewTab/compare/v1.1...v2.0) - Oct 11, 2024\n\n## v1.1 - Oct 2, 2024\n\n## v1 - Aug 20, 2023\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participation in our\ncommunity a harassment-free experience for everyone, regardless of age, body\nsize, visible or invisible disability, ethnicity, sex characteristics, gender\nidentity and expression, level of experience, education, socio-economic status,\nnationality, personal appearance, race, religion, or sexual identity\nand orientation.\n\nWe pledge to act and interact in ways that contribute to an open, welcoming,\ndiverse, inclusive, and healthy community.\n\n## Our Standards\n\nExamples of behavior that contributes to a positive environment for our\ncommunity include:\n\n* Demonstrating empathy and kindness toward other people\n* Being respectful of differing opinions, viewpoints, and experiences\n* Giving and gracefully accepting constructive feedback\n* Accepting responsibility and apologizing to those affected by our mistakes,\n  and learning from the experience\n* Focusing on what is best not just for us as individuals, but for the\n  overall community\n\nExamples of unacceptable behavior include:\n\n* The use of sexualized language or imagery, and sexual attention or\n  advances of any kind\n* Trolling, insulting or derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or email\n  address, without their explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n  professional setting\n\n## Enforcement Responsibilities\n\nCommunity leaders are responsible for clarifying and enforcing our standards of\nacceptable behavior and will take appropriate and fair corrective action in\nresponse to any behavior that they deem inappropriate, threatening, offensive,\nor harmful.\n\nCommunity leaders have the right and responsibility to remove, edit, or reject\ncomments, commits, code, wiki edits, issues, and other contributions that are\nnot aligned to this Code of Conduct, and will communicate reasons for moderation\ndecisions when appropriate.\n\n## Scope\n\nThis Code of Conduct applies within all community spaces, and also applies when\nan individual is officially representing the community in public spaces.\nExamples of representing our community include using an official e-mail address,\nposting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported to the community leaders responsible for enforcement at <prem12321kumar@outlook.com>.\n\nAll complaints will be reviewed and investigated promptly and fairly.\n\nAll community leaders are obligated to respect the privacy and security of the\nreporter of any incident.\n\n## Enforcement Guidelines\n\nCommunity leaders will follow these Community Impact Guidelines in determining\nthe consequences for any action they deem in violation of this Code of Conduct:\n\n### 1. Correction\n\n**Community Impact**: Use of inappropriate language or other behavior deemed\nunprofessional or unwelcome in the community.\n\n**Consequence**: A private, written warning from community leaders, providing\nclarity around the nature of the violation and an explanation of why the\nbehavior was inappropriate. A public apology may be requested.\n\n### 2. Warning\n\n**Community Impact**: A violation through a single incident or series\nof actions.\n\n**Consequence**: A warning with consequences for continued behavior. No\ninteraction with the people involved, including unsolicited interaction with\nthose enforcing the Code of Conduct, for a specified period of time. This\nincludes avoiding interactions in community spaces as well as external channels\nlike social media. Violating these terms may lead to a temporary or\npermanent ban.\n\n### 3. Temporary Ban\n\n**Community Impact**: A serious violation of community standards, including\nsustained inappropriate behavior.\n\n**Consequence**: A temporary ban from any sort of interaction or public\ncommunication with the community for a specified period of time. No public or\nprivate interaction with the people involved, including unsolicited interaction\nwith those enforcing the Code of Conduct, is allowed during this period.\nViolating these terms may lead to a permanent ban.\n\n### 4. Permanent Ban\n\n**Community Impact**: Demonstrating a pattern of violation of community\nstandards, including sustained inappropriate behavior,  harassment of an\nindividual, or aggression toward or disparagement of classes of individuals.\n\n**Consequence**: A permanent ban from any sort of public interaction within\nthe community.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage],\nversion 2.0, available at\n<https://www.contributor-covenant.org/version/2/0/code_of_conduct.html>.\n\nCommunity Impact Guidelines were inspired by [Mozilla's code of conduct\nenforcement ladder](https://github.com/mozilla/diversity).\n\n[homepage]: https://www.contributor-covenant.org\n\nFor answers to common questions about this code of conduct, see the FAQ at\n<https://www.contributor-covenant.org/faq>. Translations are available at\n<https://www.contributor-covenant.org/translations>.\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contribution Guidelines\n\nWe welcome all developers to contribute to our extension! Your efforts are truly appreciated. To ensure smooth collaboration, please keep the following points in mind before submitting your pull requests:\n\n## 1. Add Only Relevant Code\n- Avoid unnecessary modifications to existing code, including formatting changes.  \n- Refrain from using options like \"Format Document\" in editors like VS Code, as these changes make it difficult to review the actual modifications.\n\n## 2. Provide Visual Context\n- Always attach a screenshot or screen recording of your changes in action.  \n- Include a detailed description of the changes and their purpose in the pull request.\n\n## 3. Follow Code Style Guidelines\n- Stick to the existing coding style and structure of the project.  \n- Use consistent indentation and naming conventions.\n\n## 4. Avoid Adding Unnecessary Dependencies\n- Before adding any library or dependency, explain its purpose and confirm that it's essential for the functionality you're implementing.\n\n## 5. Test Thoroughly\n- Ensure that your changes are fully functional and do not introduce any bugs or performance issues.  \n- Test your code on various screen sizes and scenarios if applicable.\n\n## 6. Test Across Browsers\n- Test your code in both **Chrome** and **Firefox** to ensure compatibility and that everything is working properly.\n\n## 7. Keep Pull Requests Focused\n- Focus on one feature or fix per pull request. Avoid bundling unrelated changes together.\n\n## 8. Document Changes\n- If your changes introduce new functionality, update any relevant documentation or provide notes for other contributors.\n\nBy following these guidelines, we can maintain a clean and efficient codebase while making the review process faster and easier for everyone. Thank you for your contributions and for helping improve this project!\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                     Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    Material You New Tab: A browser extension that replaces your default \n    New Tab or homepage with a sleek, modern interface inspired by  \n    Google’s Material You design.\n    Copyright (C) 2023-2025 XengShi\n    Copyright (C) 2024-2026 Prem\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    Material You New Tab  Copyright (C) 2024-2026 Prem, 2023-2025 XengShi\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<https://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<https://www.gnu.org/licenses/why-not-lgpl.html>.\n"
  },
  {
    "path": "README.md",
    "content": "<!-- Initialized : Sun 20 Aug 2023 03:41:08 PM IST -->\n<h1 align=\"center\">\n\n<a href=\"https://prem-k-r.github.io/MaterialYouNewTab/\"><img src=\"https://github.com/user-attachments/assets/48c3a9cb-06fa-4c45-92ec-194cdb7c5661\" width=\"58\"></a>\n<br>\nMYNT: Material You New Tab\n\n</h1>\n<div align=\"center\">\n\nMYNT: Material You New Tab is a versatile browser extension that personalizes your New Tab page with customizable themes, a welcoming message, and various handy tools, all while integrating seamlessly with your preferred search engine.\n\n</div>\n\n<div align=\"center\">\n\n![License](https://img.shields.io/github/license/prem-k-r/MaterialYouNewTab)\n![Last Commit](https://img.shields.io/github/last-commit/prem-k-r/MaterialYouNewTab)\n![GitHub contributors](https://img.shields.io/github/contributors/prem-k-r/MaterialYouNewTab)\n![GitHub stars](https://img.shields.io/github/stars/prem-k-r/MaterialYouNewTab)\n![GitHub forks](https://img.shields.io/github/forks/prem-k-r/MaterialYouNewTab)\n\n[![](https://img.shields.io/chrome-web-store/v/jjpokbgpiljgndebfoljdeihhkpcpfgl.svg)](https://chrome.google.com/webstore/detail/mynt-material-you-new-tab/jjpokbgpiljgndebfoljdeihhkpcpfgl) [![](https://img.shields.io/chrome-web-store/rating/jjpokbgpiljgndebfoljdeihhkpcpfgl.svg)](https://chrome.google.com/webstore/detail/mynt-material-you-new-tab/jjpokbgpiljgndebfoljdeihhkpcpfgl) [![](https://img.shields.io/chrome-web-store/users/jjpokbgpiljgndebfoljdeihhkpcpfgl.svg)](https://chrome.google.com/webstore/detail/mynt-material-you-new-tab/jjpokbgpiljgndebfoljdeihhkpcpfgl) ▪️ [![](https://img.shields.io/amo/v/mynt.svg)](https://addons.mozilla.org/en-US/firefox/addon/mynt/) [![](https://img.shields.io/amo/rating/mynt.svg)](https://addons.mozilla.org/en-US/firefox/addon/mynt/) [![](https://img.shields.io/amo/users/mynt.svg)](https://addons.mozilla.org/en-US/firefox/addon/mynt/) ▪️ [![](https://img.shields.io/badge/dynamic/json?label=edge%20add-on&prefix=v&query=%24.version&url=https%3A%2F%2Fmicrosoftedge.microsoft.com%2Faddons%2Fgetproductdetailsbycrxid%2Flcgdmfjofmcblocogcabdpfidfbkblcd)](https://microsoftedge.microsoft.com/addons/detail/mynt-material-you-new-ta/lcgdmfjofmcblocogcabdpfidfbkblcd)\n[![](https://img.shields.io/badge/dynamic/json?label=rating&suffix=/5&query=%24.averageRating&url=https%3A%2F%2Fmicrosoftedge.microsoft.com%2Faddons%2Fgetproductdetailsbycrxid%2Flcgdmfjofmcblocogcabdpfidfbkblcd)](https://microsoftedge.microsoft.com/addons/detail/mynt-material-you-new-ta/lcgdmfjofmcblocogcabdpfidfbkblcd)\n[![](https://img.shields.io/badge/dynamic/json?label=users&query=%24.activeInstallCount&url=https%3A%2F%2Fmicrosoftedge.microsoft.com%2Faddons%2Fgetproductdetailsbycrxid%2Flcgdmfjofmcblocogcabdpfidfbkblcd)](https://microsoftedge.microsoft.com/addons/detail/mynt-material-you-new-ta/lcgdmfjofmcblocogcabdpfidfbkblcd)\n\n</div>\n\n<p align=\"center\">\n  <a href=\"#-features\">Features</a> •\n  <a href=\"#-installation-guide\">Installation Guide</a> •\n  <a href=\"#download\">Download</a> •\n  <a href=\"#-currently-supported-languages-32\">Currently Supported Languages</a>\n<br>\n  <a href=\"#-contributing\">Contributing</a> •\n  <a href=\"#-star-history\">Star History</a> •\n  <a href=\"#-issues-and-support\">Issues and Support</a> •\n  <a href=\"#-privacy-policy\">Privacy Policy</a> •\n  <a href=\"#-license\">License</a>\n</p>\n\n<img src=\"https://i.postimg.cc/CF43Yzj1/material-you-new-Tab-poster.webp\" alt=\"Screenshot 1\" width=\"100%\">\n\n#### 🔴 🟡 🟢 Test live: [https://prem-k-r.github.io/MaterialYouNewTab/](https://prem-k-r.github.io/MaterialYouNewTab/)\n\n## ✨ Features\n\n- **Integrated Search**: Search directly from the New Tab using your preferred search engine — Google, DuckDuckGo, Bing, Brave Search, YouTube, Wikipedia, and more, with integrated voice typing.\n- **Customizable Themes**: Choose from a selection of themes or use the built-in color picker to match your style.\n- **Wallpaper**: Upload your own wallpapers or enable daily random images sourced from [Lorem Picsum](https://picsum.photos).\n- **Personalized Greeting**: Add a custom message or your name, so you're greeted each time you open a new tab.\n- **Clock & Time Display**: Choose between a modern analog or digital clock.\n- **Live Weather Updates**: View real-time temperature, conditions, humidity, feels like, and max-min temperature values. Supports °C and °F with location customization.\n- **Quick Shortcuts**: Access common platforms (YouTube, Email, WhatsApp, etc.) or add your own shortcuts for instant navigation.\n- **AI Tools**: Open ChatGPT, Gemini, Copilot, Perplexity, Claude, DeepSeek, and more with one click.\n- **To-Do List**: Manage daily tasks, pin important ones, and enjoy automatic cleanup at the start of each day (pinned tasks reset to pending).\n- **Sidebar Bookmarks**: View, delete, and organize bookmarks in either list or grid layout.\n- **Google Apps**: Quickly launch Gmail, Drive, Docs, and other Google services.\n- **Backup & Reset**: Save or restore your setup anytime, or reset everything to default with one click.\n- **Language Support**: Use the extension in your preferred language for better accessibility.\n- **Browser Compatibility**: Supports all Chromium-based browsers, including **Chrome**, **Edge**, **Brave**, and **Opera**, as well as Firefox-based browsers like **Firefox** and **Zen**.\n\n## 📥 Installation Guide\n\n### Download\n\n1. **Development Version** (v3.3.*)\n\n    - **Clone the Repository**:\n      Use the following command to clone the repository:\n\n       ```bash\n       git clone https://github.com/prem-k-r/MaterialYouNewTab.git\n       ```\n\n    - Alternatively, download the latest version as a ZIP file by clicking below:\n\n      [![Download ZIP](https://img.shields.io/badge/Download-ZIP-blue.svg)](https://github.com/prem-k-r/MaterialYouNewTab/archive/refs/heads/main.zip)\n\n    - You can also download the ZIP file by clicking on the Code button. On the repository page, look for a green button labeled **Code**. Click on the **Code** button, and in the dropdown menu, select **Download ZIP**.\n\n2. **Stable Release** (v3.3)\n\n<p align=\"center\">\n    <a href=\"https://github.com/prem-k-r/MaterialYouNewTab/releases/latest\"><img src=\"https://github.com/user-attachments/assets/51048d6d-0b35-4f62-8351-4a3ea52d2213\" alt=\"Download from GitHub\" height=\"48\" /></a>\n    <a href=\"https://chromewebstore.google.com/detail/mynt-material-you-new-tab/jjpokbgpiljgndebfoljdeihhkpcpfgl\"><img src=\"https://github.com/user-attachments/assets/7a829ba4-dcd0-452b-922a-5efacbfda498\" alt=\"Download from Chrome Web Store\" height=\"48\" /></a>\n    <a href=\"https://microsoftedge.microsoft.com/addons/detail/mynt-material-you-new-ta/lcgdmfjofmcblocogcabdpfidfbkblcd\"><img src=\"https://github.com/user-attachments/assets/3ad87ccf-92bf-4dab-bdf4-6577c3305d54\" alt=\"Download from Microsoft Edge\" height=\"48\" /></a>\n    <a href=\"https://addons.mozilla.org/en-US/firefox/addon/mynt/\"><img src=\"https://blog.mozilla.org/addons/files/2020/04/get-the-addon-fx-apr-2020.svg\" alt=\"Download from Mozilla Add-ons\" height=\"48\" /></a>\n</p>\n\n---\n\n### Installation\n\n#### ![Chromium](https://img.icons8.com/?size=20&id=104996&format=png&color=000000) Chromium-Based Browsers\n\n1. **Install from [Chrome Web Store](https://chromewebstore.google.com/detail/mynt-material-you-new-tab/jjpokbgpiljgndebfoljdeihhkpcpfgl) or [Microsoft Edge Add-ons](https://microsoftedge.microsoft.com/addons/detail/mynt-material-you-new-ta/lcgdmfjofmcblocogcabdpfidfbkblcd)**:\n\n   **Or** follow the manual steps below:\n\n2. **Manual Installation**:\n\n   - **Prepare the Extension Folder**:\n\n     - Ensure you’ve cloned the repository or downloaded the ZIP file and extracted it.\n\n   - **Open Extensions Page**:\n     Open your preferred browser and enter the following text in the address bar:\n\n     - ![Chrome](https://img.icons8.com/color/20/000000/chrome--v1.png) Chrome: `chrome://extensions`\n\n     - ![Edge](https://img.icons8.com/?size=20&id=dGm9KIZPpukc&format=png&color=000000) Edge: `edge://extensions`\n\n     - ![Brave](https://img.icons8.com/color/20/000000/brave-web-browser.png) Brave: `brave://extensions`\n\n     - ![Opera](https://img.icons8.com/color/20/000000/opera--v1.png) Opera: `opera://extensions`\n\n   - **Enable Developer Mode**:\n\n     - Turn on **Developer Mode** in the extensions page.\n\n   - **Load Unpacked Extension**:\n     - Click on **Load unpacked** and select your extracted extension folder.\n\n3. **Additional Steps ONLY for <img height=\"16\" src=\"https://cdn.simpleicons.org/opera\"/> Opera (or <img height=\"16\" src=\"https://cdn.simpleicons.org/operagx\"/> Opera GX)**:\n\n> [!NOTE]\n> Opera does **not support replacing the default New Tab**.  \n> This method only sets the extension as a **startup page**.\n\n<details><summary>Click here for the workaround</summary>\n\n- Go to the **Settings**.\n- Scroll to the **On startup** section (use the search option if needed).\n- Click on **Open a specific page or set of pages** and then click on **Add a new page**.\n- Add the following (replace 32-character extension ID if installed manually) to the **Site URL**:\n\n```text\nchrome-extension://jjpokbgpiljgndebfoljdeihhkpcpfgl/index.html\n```\n\n- To find the extension ID:\n\n  - Go to `opera://extensions`, find the extension, and copy the 32-character ID from its details.\n\n- To simulate new tabs:\n\n  - Bookmark the extension page to access new tab pages manually.\n\n  - Or, right-click the tab and select **Duplicate tab**.\n\n</details>\n\nBelow are screenshots of the process to guide you through each step visually.\n\n<img src=\"https://i.postimg.cc/w6JYypvc/chrome.png\" alt=\"Screenshot 1\" width=\"569\">\n<img src=\"https://i.postimg.cc/0ksR7BKg/edge.png\" alt=\"Screenshot 2\" width=\"569\">\n<img src=\"https://i.postimg.cc/MqPSg5NR/brave.png\" alt=\"Screenshot 3\" width=\"569\">\n\n---\n\n#### ![Firefox](https://img.icons8.com/color/20/000000/firefox--v1.png) Firefox\n\n1. **Install from [Firefox Add-ons](https://addons.mozilla.org/en-US/firefox/addon/mynt/)**\n\n   <img src=\"https://i.postimg.cc/bPW2fHX7/FireFox.png\" alt=\"Screenshot\" width=\"569\">\n\n2. **Update the Homepage**:\n\n   - Open Firefox and **obtain the UUID**:\n      - Hover over the New Tab button (next to the tab close button). A tooltip will display the extension's unique ID, which looks like this: `0f31e1c1-d63c-4660-b950-8bfbda3bb20a`. Copy or note this ID.\n      - Alternatively, type `about:debugging#/runtime/this-firefox` in the address bar and find the extension's UUID there.\n   - Open **Settings** and navigate to **Home**, or type `about:preferences#home` in the address bar.\n   - Under the **Homepage and new windows** section, select **Custom URLs...**.\n   - Paste the following URL, replacing the ID with your actual UUID:\n\n     ```text\n     moz-extension://e31d6701-f699-414f-bb4c-8fde495c432e/index.html\n     ```\n\n   - This will update both your homepage and new tab to the extension.\n  \n3. **Additional Steps ONLY for Zen Browser** <img height=\"16\" src=\"https://cdn.simpleicons.org/zenbrowser\"/> :\n\n   - Open a new tab and go to `about:config`.\n   - Accept the risk and continue if prompted.\n   - In the search bar, type:\n\n     ```text\n     zen.urlbar.replace-newtab\n     ```\n\n   - Set its value to **false** by clicking the toggle icon.\n\n   This ensures the browser does not override the custom New Tab page set by the extension.\n\n4. **Manual Installation (Temporary)**:\n\n   - Clone the repository or download and extract the ZIP file.\n   - **Prepare the Manifest**:\n\n     - Delete the existing `manifest.json` file.\n     - Rename `manifest(firefox).json` to `manifest.json`.\n\n   - **Load Temporary Add-on**:\n     - Go to `about:debugging#/runtime/this-firefox`, select **\"This Firefox\"**, then click **Load Temporary Add-on**.\n     - Browse and select the updated `manifest.json`.\n\n---\n\n<!-- ### Installation Video\n\nFor a step-by-step walkthrough, watch this [installation guide video](https://youtu.be/P4ryQPixfw8).\n\n[![Watch the video](https://img.youtube.com/vi/P4ryQPixfw8/0.jpg)](https://youtu.be/P4ryQPixfw8) -->\n\n## 🌐 Currently Supported Languages (32)\n\n| Language                                                                                     | Code  | Translator(s)                                                                         |\n| -------------------------------------------------------------------------------------------- | :---: | ------------------------------------------------------------------------------------- |\n| <img src='https://flagcdn.com/us.svg' width=20> &nbsp; **English**                           |  en   | [XengShi](https://github.com/XengShi/), [Prem](https://github.com/prem-k-r/)          |\n| <img src='https://flagcdn.com/sa.svg' width=20> &nbsp; **Arabic** - العربية                     | ar-SA | [Mazen](https://github.com/Mazen3Alharbi)                                             |\n| <img src='https://flagcdn.com/az.svg' width=20> &nbsp; **Azerbaijani** - Azərbaycanca        |  az   | [Hasan Bakhtiar](https://github.com/hasanbakhtiar/)                                   |\n| <img src='https://flagcdn.com/bd.svg' width=20> &nbsp; **Bangla** - বাংলা                     |  bn   | [It'z RJ](https://github.com/itz-rj-here/), [Prem](https://github.com/prem-k-r/)      |\n| <img src='https://flagcdn.com/cn.svg' width=20> &nbsp; **Chinese** (Simplified) - 简体中文    | zh-CN | [Guy Berryman](https://github.com/Guy-Berryman), [Tianli](https://github.com/TIANLI0), [Konsento](http://github.com/kons10) |\n| <img src='https://flagcdn.com/tw.svg' width=20> &nbsp; **Chinese** (Traditional) - 繁體中文   | zh-TW | [C. Y. Tseng](https://github.com/Eddie40802)                                          |\n| <img src='https://flagcdn.com/cz.svg' width=20> &nbsp; **Czech** - Čeština                   |  cz   | [Michal Šmahel](https://github.com/ceskyDJ/)                                          |\n| <img src='https://flagcdn.com/fr.svg' width=20> &nbsp; **French** - Français                 |  fr   | [422.io](https://github.com/iamwinner422)                                             |\n| <img src='https://flagcdn.com/de.svg' width=20> &nbsp; **German** - Deutsch                  |  de   | [Prem](https://github.com/prem-k-r/)                                                  |\n| <img src='https://flagcdn.com/gr.svg' width=20> &nbsp; **Greek** - Ελληνικά                  |  el   | [Lefteris T.](https://github.com/trlef19)                                             |\n| <img src='https://flagcdn.com/in.svg' width=20> &nbsp; **Hindi** - हिंदी                       |  hi   | [XengShi](https://github.com/XengShi/), [Prem](https://github.com/prem-k-r/)          |\n| <img src='https://flagcdn.com/hu.svg' width=20> &nbsp; **Hungarian** - Magyar                |  hu   | [Zan1456](https://github.com/Zan1456/), [smurf11k](https://github.com/smurf11k/)      |\n| <img src='https://flagcdn.com/id.svg' width=20> &nbsp; **Indonesian** - Bahasa Indonesia     |  idn  | [Ayyas-RF](https://github.com/Ayyas-RF/)                                              |\n| <img src='https://flagcdn.com/it.svg' width=20> &nbsp; **Italian** - Italiano                |  it   | [Claudio Di Maio](https://github.com/ZiClaud/)                                        |\n| <img src='https://flagcdn.com/jp.svg' width=20> &nbsp; **Japanese** - 日本語                 |  ja   | [XengShi](https://github.com/XengShi/), [S-H-Y-A](https://github.com/S-H-Y-A/), [Konsento](http://github.com/kons10) |\n| <img src='https://flagcdn.com/kr.svg' width=20> &nbsp; **Korean** - 한국어                   |  ko   | [XengShi](https://github.com/XengShi/), [eunsunglee0524](https://github.com/eunsunglee0524/) |\n| <img src='https://flagcdn.com/in.svg' width=20> &nbsp; **Marathi** - मराठी                   |  mr   | [Prem](https://github.com/prem-k-r/), [Pratik Lokhande](https://github.com/konprtk), [Anand Naik Gaonkar](https://github.com/anndiy)   |\n| <img src='https://flagcdn.com/np.svg' width=20> &nbsp; **Nepali** - नेपाली                    |  ne   | [Bikash Shresha](https://github.com/sthaB-kash/)                                      |\n| <img src='https://flagcdn.com/ir.svg' width=20> &nbsp; **Persian** - فارسی                    |  fa   | [AMIRHOSSEIN](https://github.com/AMIRHOSSEIN-AHMADI-IR)                               |\n| <img src='https://flagcdn.com/pl.svg' width=20> &nbsp; **Polish** - Polski                  | pl | [Dawid Warkowski](https://github.com/dawid9707/)                                         |\n| <img src='https://flagcdn.com/br.svg' width=20> &nbsp; **Portuguese** - Português            | pt-BR | [Maycon Vitor Correa](https://github.com/MestreWalla/)                                |\n| <img src='https://flagcdn.com/ru.svg' width=20> &nbsp; **Russian** - Русский                 |  ru   | [giwi](https://github.com/giwih/), [CodWiz](https://github.com/C0dwiz/)               |\n| <img src='https://flagcdn.com/si.svg' width=20> &nbsp; **Slovenian** - Slovenščina           | sl-SI | [Linux-Alex](https://github.com/Linux-Alex/)                                          |\n| <img src='https://flagcdn.com/es.svg' width=20> &nbsp; **Spanish** - Español                 | es-ES | [XengShi](https://github.com/XengShi/), [Isaac Vergara](https://github.com/zRaidev), [Saúl Palacios](https://github.com/palacios22c)  |\n| <img src='https://flagcdn.com/sv.svg' width=20> &nbsp; **Swedish** - Svenska                 | sv | [HELLOEMPO](https://github.com/empohello-imamempogitub/)                                 |\n| <img src='https://flagcdn.com/in.svg' width=20> &nbsp; **Tamil** - தமிழ்                 | ta | [தமிழ்நேரம்](https://TamilNeram.github.io/)                                                |\n| <img src='https://flagcdn.com/th.svg' width=20> &nbsp; **Thai** - ภาษาไทย                 | th | [Prin](https://github.com/prinsasina)                                                |\n| <img src='https://flagcdn.com/tr.svg' width=20> &nbsp; **Turkish** - Türkçe                  |  tr   | [Nobody](https://github.com/Nobody9512), [Kerim Ölçer](https://github.com/kerimlcr)   |\n| <img src='https://flagcdn.com/ua.svg' width=20> &nbsp; **Ukrainian** - Українська            | uk | [Serhii Lozytskyi](https://github.com/lozik4), [smurf11k](https://github.com/smurf11k/)  |\n| <img src='https://flagcdn.com/pk.svg' width=20> &nbsp; **Urdu** - اردو                        |  ur   | [Asfandiyar Khan](https://github.com/asfand-dev)                                      |\n| <img src='https://flagcdn.com/uz.svg' width=20> &nbsp; **Uzbek** - O'zbek                    |  uz   | [Firdavs](https://github.com/Firdavs9512/), [S0ME2](https://github.com/S0ME2/)                                            |\n| <img src='https://flagcdn.com/vn.svg' width=20> &nbsp; **Vietnamese** - Tiếng Việt           |  vn   | [Diep](https://github.com/diepdo1810/), [Tuan](https://github.com/Tuan1-2-3)          |\n\nCheck the [Translation Status Page](https://prem-k-r.github.io/MaterialYouNewTab/tools/languagesAnalysis.html) for an overview of completed languages and missing strings analysis.\n\nIf you'd like to contribute quotes in any of the languages used in MYNT, check out [Multilingual Quotes](https://github.com/prem-k-r/multilingual-quotes-api).\n\n## 🤝 Contributing\n\nContributions are welcome! If you’d like to contribute:\n\n1. Follow the guidelines in the [CONTRIBUTING.md](./CONTRIBUTING.md) file.\n2. Fork the repository.\n3. Create a new branch: `git checkout -b feature/YourFeature`.\n4. Commit your changes: `git commit -m 'Add Your Feature'`.\n5. Push to the branch: `git push origin feature/YourFeature`.\n6. Open a pull request.\n\n## ⭐ Star History\n\nHere is the star history chart for the **MYNT: Material You New Tab** repository. It shows the growth of stars over time, reflecting the increasing interest and support for the project.\n\n<a href=\"https://star-history.com/#prem-k-r/MaterialYouNewTab&Date\">\n <picture>\n   <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=prem-k-r/MaterialYouNewTab&type=Date&theme=dark\" />\n   <source media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=prem-k-r/MaterialYouNewTab&type=Date\" />\n   <img alt=\"Star History Chart\" src=\"https://api.star-history.com/svg?repos=prem-k-r/MaterialYouNewTab&type=Date\" />\n </picture>\n</a>\n\n## ❓ Issues and Support\n\n- If you encounter any issues or bugs, feel free to open an issue on [GitHub](https://github.com/prem-k-r/MaterialYouNewTab/issues).\n- For general questions or support, you can contact the repository maintainers through the **Telegram group**: [Join here](https://t.me/Material_You_NewTab).\n\n## 🛡 Privacy Policy\n\nMYNT: Material You New Tab prioritizes your privacy and is focused solely on providing a better browsing experience.\nWe make the following commitments:\n\n- **No commercialization** — absolutely no ads, paid features, or premium tiers\n- **No trackers** — no data collection, analytics, or background reporting of any kind\n- **No access to personal information** — all settings, cache, and preferences are stored locally in your browser\n\nFor more details, read our [Privacy Policy](https://prem-k-r.github.io/MaterialYouNewTab/privacy-policy.html).\n\n## 📜 License\n\nCopyright (C) 2024-2026 Prem Kumar\n\nCopyright (C) 2023-2025 XengShi\n\n> This extension is the continuation of XengShi's Material You NewTab [(_Learn more_)](https://github.com/prem-k-r/MaterialYouNewTab/discussions/28#discussioncomment-13837571).\n\nThis project is licensed under the GNU General Public License v3.0 (GPL-3.0). This means you must **not** distribute this software, whether original or modified, to any platform **without** its source code or the reference to its original source code. See the [LICENSE](https://github.com/prem-k-r/MaterialYouNewTab/blob/main/LICENSE) file for details.\n"
  },
  {
    "path": "docs/Get_WeatherAPI_Key.html",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <title>WeatherAPI's API Key</title>\r\n    <style>\r\n        body {\r\n            font-family: Arial, sans-serif;\r\n            line-height: 1.6;\r\n            margin: 0;\r\n            padding: 0;\r\n            background-color: #f9f9f9;\r\n            color: #333;\r\n        }\r\n\r\n        h1,\r\n        h2,\r\n        h3 {\r\n            color: #0056b3;\r\n        }\r\n\r\n        h1 {\r\n            text-align: center;\r\n            margin: 20px 0;\r\n        }\r\n\r\n        h3:not(:first-of-type) {\r\n            margin-top: 35px;\r\n        }\r\n\r\n        section {\r\n            max-width: 800px;\r\n            margin: 20px auto;\r\n            background: #fff;\r\n            padding: 20px;\r\n            border-radius: 8px;\r\n            box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n        }\r\n\r\n        img {\r\n            display: block;\r\n            margin: 10px auto;\r\n            max-width: 100%;\r\n            height: auto;\r\n        }\r\n\r\n        p,\r\n        li {\r\n            margin: 10px 0;\r\n        }\r\n\r\n        ul {\r\n            padding-left: 20px;\r\n        }\r\n\r\n        footer {\r\n            text-align: center;\r\n            padding: 10px;\r\n            background: #0056b3;\r\n            color: #fff;\r\n            margin-top: 10px;\r\n        }\r\n\r\n        footer a {\r\n            color: #ffd700;\r\n            text-decoration: none;\r\n        }\r\n\r\n        footer a:hover {\r\n            text-decoration: underline;\r\n        }\r\n\r\n        @media (prefers-color-scheme: dark) {\r\n            body {\r\n                background-color: #121212;\r\n                color: #e0e0e0;\r\n            }\r\n\r\n            section {\r\n                background: #1e1e1e;\r\n            }\r\n\r\n            h1,\r\n            h2,\r\n            h3 {\r\n                color: #90caf9;\r\n            }\r\n\r\n            footer {\r\n                background: #1e1e1e;\r\n                color: #90caf9;\r\n            }\r\n        }\r\n    </style>\r\n</head>\r\n\r\n<body>\r\n    <h1>How to Obtain a WeatherAPI's API Key</h1>\r\n\r\n    <section>\r\n        <h2>Step 1: Visit the WeatherAPI Website</h2>\r\n        <p>Navigate to the WeatherAPI official website: <a href=\"https://www.weatherapi.com/\"\r\n                target=\"_blank\">https://www.weatherapi.com/</a>.</p>\r\n        <img src=\"https://i.ibb.co/84gMfmJ/Screenshot-2024-12-07-121438.png\" alt=\"WeatherAPI Homepage\" border=\"0\">\r\n    </section>\r\n\r\n    <section>\r\n        <h2>Step 2: Sign Up for an Account</h2>\r\n        <ol>\r\n            <li>Click on the <strong>Sign Up</strong> button located at the top right corner of the homepage.</li>\r\n            <li>Fill in the required fields:\r\n                <ul>\r\n                    <li><strong>Email Address:</strong> Provide a valid email address.</li>\r\n                    <li><strong>Password:</strong> Create a secure password.</li>\r\n                </ul>\r\n            </li>\r\n            <li>Agree to the terms and conditions.</li>\r\n            <li>Complete the CAPTCHA verification if prompted.</li>\r\n            <li>Click <strong>Sign Up</strong> to create your account.</li>\r\n        </ol>\r\n        <img src=\"https://i.ibb.co/xX9psXB/Screenshot-2024-12-07-121609.png\" alt=\"Sign Up Form\" border=\"0\">\r\n        <p><em>Note: If you already have an account, click <strong>Login</strong> and proceed with your\r\n                credentials.</em></p>\r\n    </section>\r\n\r\n    <section>\r\n        <h2>Step 3: Verify Your Email Address</h2>\r\n        <p>Check your email inbox for a verification email from WeatherAPI. Open the email and click on the verification\r\n            link provided.</p>\r\n        <p><em>Tip: Check your spam or junk folder if you don’t see the email in your inbox.</em></p>\r\n    </section>\r\n\r\n    <section>\r\n        <h2>Step 4: Log In to Your Account</h2>\r\n        <ol>\r\n            <li>Return to the WeatherAPI website.</li>\r\n            <li>Click on <strong>Login</strong>.</li>\r\n            <li>Enter your email address and password.</li>\r\n            <li>Click <strong>Login</strong> to access your account.</li>\r\n        </ol>\r\n        <img src=\"https://i.ibb.co/71PFHvB/Screenshot-2024-12-07-121704.png\" alt=\"Login Page\" border=\"0\">\r\n    </section>\r\n\r\n    <section>\r\n        <h2>Step 5: Copy Your API Key</h2>\r\n        <ol>\r\n            <li>Once logged in, go to the <strong>Dashboard</strong>.</li>\r\n            <li>If the API section isn’t open, locate and open it.</li>\r\n            <li>You will see your API key displayed with a <strong>Copy</strong> option. Click it to copy your API key.\r\n            </li>\r\n        </ol>\r\n        <img src=\"https://i.ibb.co/jfW8f65/IMG-20241207-122916.png\" alt=\"Dashboard with API Key\" border=\"0\">\r\n    </section>\r\n\r\n    <section>\r\n        <h2>Step 6: Paste Your API Key</h2>\r\n        <ol>\r\n            <li>Paste <b>your API key</b> into the WeatherAPI key field in the extension menu.</li>\r\n            <li>Press enter or click on the Save button to integrate it.</li>\r\n        </ol>\r\n        <img src=\"https://i.ibb.co/CM3yrCG/image.png\" alt=\"Paste API Key\" border=\"0\">\r\n    </section>\r\n\r\n    <section>\r\n        <h2>FAQs</h2>\r\n\r\n        <h3>Why is the location inaccurate?</h3>\r\n        <p>The extension determines your location using your <b>IP address</b>, which can often be imprecise. If the\r\n            detected location differs from your actual location, you can:</p>\r\n        <ul>\r\n            <li>Manually enter your <b>city name</b> or <b>geographic coordinates</b>.</li>\r\n            <li>Use the <b>GPS</b> option to fetch your location for greater accuracy.</li>\r\n        </ul>\r\n\r\n        <h3>Why do I need an API key?</h3>\r\n        <p>An API key serves as a unique identifier for managing access and monitoring usage.</p>\r\n        <ul>\r\n            <li>Our extension currently uses <b>shared</b> API keys that allow up to 15,000,000 calls per month. With\r\n                over 300,000 active users, these shared keys can reach their limit quickly. Once the limit is reached,\r\n                weather data will no longer be accessible until the limit resets the following month.</li>\r\n            <li>Using your <b>own API key</b> ensures that weather data remains accessible.</li>\r\n        </ul>\r\n\r\n        <h3>What are the benefits of using my own API key?</h3>\r\n        <p>Using your own unique API key provides several key advantages:</p>\r\n        <ul>\r\n            <li><strong>No Disruption:</strong> Using your own API key helps you avoid unexpected limits and ensures\r\n                there are no disruptions in service, keeping your access to weather data uninterrupted.</li>\r\n            <li><strong>Location Suggestions::</strong> Enable location search suggestions in the location input field,\r\n                allowing you to quickly find and select accurate location options as you type.</li>\r\n            <li><strong>Analytics:</strong> Access detailed insights into your API usage with comprehensive reports\r\n                available through your account dashboard.</li>\r\n            <li><strong>Privacy:</strong> Your API activity is securely tied only to your account, ensuring that your\r\n                data remains private and protected from unauthorized access.</li>\r\n            <li><strong>Compliance:</strong> Ensure adherence to WeatherAPI's terms of service and usage policies, and\r\n                avoiding violations.</li>\r\n        </ul>\r\n    </section>\r\n\r\n    <footer>\r\n        <p>Weather data is powered by <a href=\"https://www.weatherapi.com/\" title=\"Free Weather API\">WeatherAPI.com</a>\r\n        </p>\r\n    </footer>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "docs/feedback.html",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <title>Feedback - MaterialYouNewTab</title>\r\n    <link rel=\"icon\" type=\"image/png\"\r\n        href=\"https://github.com/user-attachments/assets/48c3a9cb-06fa-4c45-92ec-194cdb7c5661\">\r\n    <link href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css\" rel=\"stylesheet\">\r\n\r\n    <style>\r\n        body,\r\n        h1,\r\n        .feedback-message {\r\n            margin: 0;\r\n            padding: 0;\r\n        }\r\n\r\n        body {\r\n            font-family: Arial, sans-serif;\r\n            background-color: #f0f4f8;\r\n            display: flex;\r\n            justify-content: center;\r\n            align-items: center;\r\n            height: 100vh;\r\n            color: #333;\r\n        }\r\n\r\n        .container {\r\n            background-color: #fff;\r\n            padding: 36px 24px;\r\n            border-radius: 15px;\r\n            box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);\r\n            text-align: center;\r\n            max-width: 703px;\r\n            width: min(703px, calc(100% - 24px));\r\n            margin: 12px;\r\n            box-sizing: border-box;\r\n        }\r\n\r\n        h1 {\r\n            font-size: 28px;\r\n            margin-bottom: 20px;\r\n        }\r\n\r\n        .feedback-message {\r\n            font-size: 18px;\r\n            color: #555;\r\n            margin-bottom: 30px;\r\n        }\r\n\r\n        .contact-info {\r\n            display: grid;\r\n            grid-template-columns: repeat(auto-fit, minmax(60px, 1fr));\r\n            gap: 18px;\r\n            justify-items: center;\r\n            align-items: center;\r\n            margin-top: 20px;\r\n        }\r\n\r\n        .contact-info a {\r\n            color: #fff;\r\n            text-decoration: none;\r\n            width: 64px;\r\n            height: 64px;\r\n            display: flex;\r\n            justify-content: center;\r\n            align-items: center;\r\n            border-radius: 50%;\r\n            font-size: 32px;\r\n            transition: transform 0.3s ease;\r\n        }\r\n\r\n        @media (max-width: 600px) {\r\n            body {\r\n                height: auto;\r\n                min-height: 100vh;\r\n                padding: 16px 0;\r\n            }\r\n\r\n            .container {\r\n                padding: 28px 18px;\r\n                border-radius: 14px;\r\n            }\r\n\r\n            h1 {\r\n                font-size: 24px;\r\n                line-height: 1.25;\r\n            }\r\n\r\n            .feedback-message {\r\n                font-size: 16px;\r\n                line-height: 1.4;\r\n                margin-bottom: 22px;\r\n            }\r\n\r\n            .contact-info {\r\n                grid-template-columns: repeat(3, 1fr);\r\n                gap: 16px;\r\n            }\r\n\r\n            .contact-info a {\r\n                width: 58px;\r\n                height: 58px;\r\n                font-size: 28px;\r\n            }\r\n        }\r\n\r\n        @media (max-width: 380px) {\r\n            .contact-info {\r\n                grid-template-columns: repeat(2, 1fr);\r\n            }\r\n\r\n            .contact-info a {\r\n                width: 56px;\r\n                height: 56px;\r\n                font-size: 26px;\r\n            }\r\n        }\r\n\r\n        .contact-info a:hover {\r\n            transform: scale(1.1);\r\n        }\r\n\r\n        .github {\r\n            background-color: #333;\r\n        }\r\n\r\n        .telegram {\r\n            background-color: #0088cc;\r\n        }\r\n\r\n        .email {\r\n            background-color: #d14836;\r\n        }\r\n\r\n        .chrome {\r\n            background-color: #25d669;\r\n        }\r\n\r\n        .firefox {\r\n            background-color: #f9c431;\r\n        }\r\n\r\n        .edge {\r\n            background-color: #0078d7;\r\n        }\r\n\r\n        @media (prefers-color-scheme: dark) {\r\n            body {\r\n                background-color: #181818;\r\n                color: #f0f4f8;\r\n            }\r\n\r\n            .container {\r\n                background-color: #2a2a2a;\r\n                box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3);\r\n            }\r\n\r\n            .github {\r\n                background-color: #1d1d1d;\r\n            }\r\n\r\n            h1,\r\n            .feedback-message {\r\n                color: #f0f4f8;\r\n            }\r\n        }\r\n    </style>\r\n</head>\r\n\r\n<body>\r\n    <div class=\"container\">\r\n        <h1>We Value Your Feedback</h1>\r\n\r\n        <div class=\"feedback-message\">\r\n            <p>If you have any suggestions or questions, feel free to reach out:</p>\r\n        </div>\r\n\r\n        <div class=\"contact-info\">\r\n            <a href=\"https://github.com/prem-k-r/MaterialYouNewTab/discussions\" target=\"_blank\" class=\"github\">\r\n                <i class=\"fab fa-github\"></i>\r\n            </a>\r\n\r\n            <a href=\"https://t.me/Material_You_NewTab\" target=\"_blank\" class=\"telegram\">\r\n                <i class=\"fab fa-telegram-plane\"></i>\r\n            </a>\r\n\r\n            <a href=\"mailto:prem12321kumar@outlook.com\" target=\"_blank\" class=\"email\">\r\n                <i class=\"fas fa-envelope\"></i>\r\n            </a>\r\n\r\n            <a href=\"https://chromewebstore.google.com/detail/mynt-material-you-new-tab/jjpokbgpiljgndebfoljdeihhkpcpfgl/reviews\"\r\n                target=\"_blank\" class=\"chrome\">\r\n                <i class=\"fab fa-chrome\"></i>\r\n            </a>\r\n\r\n            <a href=\"https://addons.mozilla.org/en-US/firefox/addon/mynt/reviews/\" target=\"_blank\" class=\"firefox\">\r\n                <i class=\"fab fa-firefox\"></i>\r\n            </a>\r\n\r\n            <a href=\"https://microsoftedge.microsoft.com/addons/detail/mynt-material-you-new-ta/lcgdmfjofmcblocogcabdpfidfbkblcd\"\r\n                target=\"_blank\" class=\"edge\">\r\n                <i class=\"fab fa-edge\"></i>\r\n            </a>\r\n        </div>\r\n    </div>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "index.html",
    "content": "<!--\n     Material You New Tab\n     Copyright (c) 2024-2026 Prem, 2023-2025 XengShi\n     Licensed under the GNU General Public License v3.0 (GPL-3.0)\n     You should have received a copy of the GNU General Public License along with this program.\n     If not, see <https://www.gnu.org/licenses/>.\n-->\n\n<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta content=\"width=device-width, initial-scale=1.0\" name=\"viewport\">\n    <meta name=\"google-site-verification\" content=\"j8K161R-W9yVVDoylaoPd2twGbjToAC3EzAFfZU1YOY\" />\n    <title>New Tab</title>\n    <link href=\"style.css\" rel=\"stylesheet\">\n    <link href=\"./favicon/icon48.png\" id=\"favicon\" rel=\"icon\" type=\"image/png\">\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n\n    <!-- SCRIPTS -->\n    <script src=\"scripts/preload.js\"></script>\n    <script defer src=\"scripts/languages.js\"></script>\n    <script defer src=\"scripts/save-load-states.js\"></script>\n    <script defer src=\"scripts/menu-shortcut-page.js\"></script>\n    <script defer src=\"scripts/theme.js\"></script>\n    <script defer src=\"scripts/browser-utils.js\"></script>\n    <script defer src=\"scripts/alert-modal.js\"></script>\n    <script defer src=\"scripts/wallpaper.js\"></script>\n    <script defer src=\"scripts/widgets-transparency.js\"></script>\n    <script defer src=\"scripts/clock.js\"></script>\n    <script defer src=\"scripts/weather.js\"></script>\n    <script defer src=\"scripts/custom-text.js\"></script>\n    <script defer src=\"scripts/search.js\"></script>\n    <script defer src=\"scripts/quotes.js\"></script>\n    <script defer src=\"scripts/shortcuts.js\"></script>\n    <script defer src=\"scripts/script.js\"></script>\n    <script defer src=\"scripts/search-suggestions.js\"></script>\n    <script defer src=\"scripts/ai-tools.js\"></script>\n    <script defer src=\"scripts/bookmarks.js\"></script>\n    <script defer src=\"scripts/todo-list.js\"></script>\n    <script defer src=\"scripts/google-apps.js\"></script>\n    <script defer src=\"scripts/voice-search.js\"></script>\n    <script defer src=\"scripts/backup-restore.js\"></script>\n\n    <!-- LANGUAGES SCRIPTS -->\n    <script src=\"locales/pt.js\"></script>\n    <script src=\"locales/en.js\"></script>\n    <script src=\"locales/ne.js\"></script>\n    <script src=\"locales/es.js\"></script>\n    <script src=\"locales/hi.js\"></script>\n    <script src=\"locales/hu.js\"></script>\n    <script src=\"locales/zh.js\"></script>\n    <script src=\"locales/zh_TW.js\"></script>\n    <script src=\"locales/cs.js\"></script>\n    <script src=\"locales/it.js\"></script>\n    <script src=\"locales/tr.js\"></script>\n    <script src=\"locales/bn.js\"></script>\n    <script src=\"locales/vi.js\"></script>\n    <script src=\"locales/ru.js\"></script>\n    <script src=\"locales/uz.js\"></script>\n    <script src=\"locales/ja.js\"></script>\n    <script src=\"locales/ko.js\"></script>\n    <script src=\"locales/idn.js\"></script>\n    <script src=\"locales/mr.js\"></script>\n    <script src=\"locales/fr.js\"></script>\n    <script src=\"locales/az.js\"></script>\n    <script src=\"locales/sl.js\"></script>\n    <script src=\"locales/ur.js\"></script>\n    <script src=\"locales/de.js\"></script>\n    <script src=\"locales/fa.js\"></script>\n    <script src=\"locales/ar_SA.js\"></script>\n    <script src=\"locales/el.js\"></script>\n    <script src=\"locales/ta.js\"></script>\n    <script src=\"locales/th.js\"></script>\n    <script src=\"locales/pl.js\"></script>\n    <script src=\"locales/uk.js\"></script>\n    <script src=\"locales/sv.js\"></script>\n</head>\n\n<body>\n    <!-- --------------------- Loading Screen Starting --------------------- -->\n    <img src=\"./images/Loading.png\" id=\"LoadingScreen\" fetchpriority=\"high\" />\n\n    <!-- --------------------- ToDo List Setup Starting --------------------- -->\n    <!-- ToDo Icon -->\n    <div class=\"todoListCont\" id=\"todoListCont\">\n        <svg id=\"todoIcon\" xmlns=\"http://www.w3.org/2000/svg\" class=\"dot-icon\" width=\"36\" height=\"36\"\n            viewBox=\"0 0 36 36\">\n            <path style=\"transform: scale(0.9); transform-origin: center;\"\n                d=\"M7 4C5.3 4 4 5.3 4 7v6c0 1.7 1.3 3 3 3h6c1.7 0 3-1.3 3-3V7c0-1.7-1.3-3-3-3Zm12 2c-.6 0-1 .4-1 1s.4 1 1 1h12c.6 0 1-.4 1-1s-.4-1-1-1Zm-6 1c.25 0 .5.1.7.3.4.4.4 1 0 1.4l-3 3c-.2.2-.4.3-.7.3-.3 0-.5-.1-.7-.3l-2-2c-.4-.4-.4-1 0-1.4.4-.4 1-.4 1.4 0L10 9.6l2.3-2.3c.2-.2.45-.3.7-.3Zm6 3c-.6 0-1 .4-1 1s.4 1 1 1h7c.6 0 1-.4 1-1s-.4-1-1-1zM7 20c-1.7 0-3 1.3-3 3v6c0 1.7 1.3 3 3 3h6c1.7 0 3-1.3 3-3v-6c0-1.7-1.3-3-3-3zm12 2c-.6 0-1 .4-1 1s.4 1 1 1h12c.6 0 1-.4 1-1s-.4-1-1-1zm0 4c-.6 0-1 .4-1 1s.4 1 1 1h7c.6 0 1-.4 1-1s-.4-1-1-1z\" />\n        </svg>\n        <!-- Text to appear on hover -->\n        <span class=\"tooltip-text\" id=\"todoListHover\">ToDo List</span>\n    </div>\n\n    <!-- Centered Icon Container -->\n    <div id=\"todoContainer\" class=\"todo-container\" style=\"display: none;\">\n        <h2 id=\"todoListHeading\">To Do List</h2>\n        <div class=\"addTaskCont\">\n            <input id=\"todoInput\" placeholder=\"Add task...\" type=\"text\" autocomplete=\"off\">\n            <div class=\"searchControls\">\n                <!-- Add Button -->\n                <button id=\"todoAdd\">+</button>\n            </div>\n        </div>\n        <ul class=\"todolist\" id=\"todoullist\">\n        </ul>\n    </div>\n\n    <!-- --------------------- Bookmark System --------------------- -->\n    <div style=\"display: none;\">\n        <svg id=\"folderIconTemplate\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\">\n            <path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n                d=\"M3 6v10.8c0 1.12 0 1.68.218 2.108a2 2 0 0 0 .874.874c.427.218.987.218 2.105.218h11.606c1.118 0 1.677 0 2.104-.218c.377-.192.683-.498.875-.874C21 18.48 21 17.92 21 16.8V9.2c0-1.12 0-1.68-.218-2.108a2 2 0 0 0-.874-.874C19.48 6 18.92 6 17.8 6H12M3 6h9M3 6a2 2 0 0 1 2-2h3.675c.489 0 .734 0 .964.055q.308.075.578.24c.202.124.375.297.72.643L12 6\" />\n        </svg>\n    </div>\n\n    <div class=\"bookmark-button\" id=\"bookmarkButton\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n            <path fill-rule=\"evenodd\"\n                d=\"M7 2a3 3 0 0 0-3 3v15.138a1.5 1.5 0 0 0 2.244 1.303l5.26-3.006a1 1 0 0 1 .992 0l5.26 3.006A1.5 1.5 0 0 0 20 20.138V5a3 3 0 0 0-3-3z\"\n                clip-rule=\"evenodd\" />\n        </svg>\n        <!-- Text to appear on hover -->\n        <span class=\"tooltip-text\" id=\"bookmarksHover\">Bookmarks</span>\n    </div>\n    <div id=\"bookmarksContainer\">\n        <div id=\"bookmarkSidebar\" class=\"bookmark-sidebar\">\n\n            <div class=\"topOutRoundCorner\">\n                <svg viewBox=\"0 0 30 30\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path class=\"lessDark\" d=\"M30 0L0 0C16.5685 0 30 13.4315 30 30L30 0Z\" />\n                </svg>\n            </div>\n\n            <div class=\"bookmark-sidebar-header\">\n                <h2 id=\"bookmarksHeading\">Bookmarks</h2>\n            </div>\n            <div class=\"bookmark-search-container\">\n                <input type=\"text\" id=\"bookmarkSearch\" placeholder=\"Search bookmark\" />\n                <button id=\"clearSearchButton\">✖</button>\n            </div>\n            <!-- Adding Sorting buttons along with View Container -->\n            <div class=\"bookmark-controls-container\">\n                <div class=\"bookmark-control-group\">\n                    <h3 id=\"bookmarkSortBy\">Sort by</h3>\n                    <div class=\"button-group\">\n                        <button id=\"sortAlphabetical\" class=\"bookmark-sort-button active\">A-Z</button>\n                        <button id=\"sortTimeAdded\" class=\"bookmark-sort-button\">Old-New</button>\n                    </div>\n                </div>\n\n                <div class=\"bookmark-control-group\">\n                    <h3 id=\"bookmarkViewAs\">View as</h3>\n                    <div class=\"button-group\">\n                        <input type=\"checkbox\" id=\"bookmarkGridCheckbox\" hidden />\n                        <button id=\"bookmarkViewGrid\" class=\"bookmark-view-as-button\">Grid</button>\n                        <button id=\"bookmarkViewList\" class=\"bookmark-view-as-button\">List</button>\n                    </div>\n                </div>\n            </div>\n            <ul id=\"bookmarkList\"></ul>\n        </div>\n    </div>\n\n    <!-- Edit Bookmark Modal -->\n    <div id=\"editBookmarkModal\">\n        <div class=\"modal-content\">\n            <h2 id=\"editBookmarkHeading\">Edit Bookmark</h2>\n\n            <img id=\"editBookmarkFavicon\" src=\"\" alt=\"Favicon\">\n\n            <div class=\"floating-label-field\">\n                <input type=\"text\" id=\"editBookmarkName\" autocomplete=\"off\" />\n                <label for=\"editBookmarkName\" id=\"editBookmarkNameLabel\">Bookmark Name</label>\n            </div>\n\n            <div class=\"floating-label-field\">\n                <input type=\"url\" id=\"editBookmarkURL\" autocomplete=\"off\" />\n                <label for=\"editBookmarkURL\" id=\"editBookmarkURLLabel\">Bookmark URL</label>\n            </div>\n\n            <div class=\"modal-buttons\">\n                <button id=\"saveBookmarkChanges\">Save</button>\n                <button id=\"cancelBookmarkEdit\">Cancel</button>\n            </div>\n        </div>\n    </div>\n\n    <!----------------------- End of Bookmark System ----------------------->\n\n    <!----------------------- Google App Menu Setup Starting ----------------------->\n    <!-- 9 Dot Icon -->\n    <div class=\"googleAppsCont\" id=\"googleAppsCont\">\n        <svg class=\"dot-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"36\" height=\"36\" viewBox=\"0 0 24 24\">\n            <path\n                d=\"M8 6a2 2 0 1 1-4 0 2 2 0 0 1 4 0m0 6a2 2 0 1 1-4 0 2 2 0 0 1 4 0m-2 8a2 2 0 1 0 0-4 2 2 0 0 0 0 4m8-14a2 2 0 1 1-4 0 2 2 0 0 1 4 0m-2 8a2 2 0 1 0 0-4 2 2 0 0 0 0 4m2 4a2 2 0 1 1-4 0 2 2 0 0 1 4 0m4-10a2 2 0 1 0 0-4 2 2 0 0 0 0 4m2 4a2 2 0 1 1-4 0 2 2 0 0 1 4 0m-2 8a2 2 0 1 0 0-4 2 2 0 0 0 0 4\" />\n        </svg>\n        <!-- Text to appear on hover -->\n        <span class=\"tooltip-text\" id=\"googleAppsHover\">Google Apps</span>\n    </div>\n\n    <!-- Centered Icon Container -->\n    <div id=\"iconContainer\" class=\"icon-container\" style=\"display: none;\">\n        <a href=\"https://myaccount.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"46\" height=\"46\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M12 4c-4.42 0-8 3.58-8 8c0 1.95.7 3.73 1.86 5.12a9.95 9.95 0 0 1 12.28 0A7.96 7.96 0 0 0 20 12c0-4.42-3.58-8-8-8m0 9c-1.93 0-3.5-1.57-3.5-3.5S10.07 6 12 6s3.5 1.57 3.5 3.5S13.93 13 12 13\"\n                        opacity=\"0.3\" />\n                    <path fill=\"currentColor\"\n                        d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10s10-4.48 10-10S17.52 2 12 2m0 18c-1.74 0-3.34-.56-4.65-1.5C8.66 17.56 10.26 17 12 17s3.34.56 4.65 1.5c-1.31.94-2.91 1.5-4.65 1.5m6.14-2.88a9.95 9.95 0 0 0-12.28 0A7.96 7.96 0 0 1 4 12c0-4.42 3.58-8 8-8s8 3.58 8 8c0 1.95-.7 3.73-1.86 5.12\" />\n                    <path fill=\"currentColor\"\n                        d=\"M12 5.93c-1.93 0-3.5 1.57-3.5 3.5s1.57 3.5 3.5 3.5s3.5-1.57 3.5-3.5s-1.57-3.5-3.5-3.5m0 5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5s1.5.67 1.5 1.5s-.67 1.5-1.5 1.5\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Account</div>\n        </a>\n        <a href=\"https://google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"43\" height=\"43\" viewBox=\"-2 -2 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M4.376 8.068A6 6 0 0 0 4.056 10c0 .734.132 1.437.376 2.086a5.946 5.946 0 0 0 8.57 3.045h.001a5.96 5.96 0 0 0 2.564-3.043H10.22V8.132h9.605a10 10 0 0 1-.044 3.956a10 10 0 0 1-3.52 5.71A9.96 9.96 0 0 1 10 20A9.998 9.998 0 0 1 1.118 5.401A10 10 0 0 1 10 0c2.426 0 4.651.864 6.383 2.302l-3.24 2.652a5.948 5.948 0 0 0-8.767 3.114\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Search</div>\n        </a>\n        <a href=\"https://www.youtube.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"47\" height=\"47\" viewBox=\"1 0 24 24\">\n                    <g fill=\"none\" fill-rule=\"evenodd\">\n                        <path\n                            d=\"m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z\" />\n                        <path fill=\"currentColor\"\n                            d=\"M12 4c.855 0 1.732.022 2.582.058l1.004.048l.961.057l.9.061l.822.064a3.8 3.8 0 0 1 3.494 3.423l.04.425l.075.91c.07.943.122 1.971.122 2.954s-.052 2.011-.122 2.954l-.075.91l-.04.425a3.8 3.8 0 0 1-3.495 3.423l-.82.063l-.9.062l-.962.057l-1.004.048A62 62 0 0 1 12 20a62 62 0 0 1-2.582-.058l-1.004-.048l-.961-.057l-.9-.062l-.822-.063a3.8 3.8 0 0 1-3.494-3.423l-.04-.425l-.075-.91A41 41 0 0 1 2 12c0-.983.052-2.011.122-2.954l.075-.91l.04-.425A3.8 3.8 0 0 1 5.73 4.288l.821-.064l.9-.061l.962-.057l1.004-.048A62 62 0 0 1 12 4m-2 5.575v4.85c0 .462.5.75.9.52l4.2-2.425a.6.6 0 0 0 0-1.04l-4.2-2.424a.6.6 0 0 0-.9.52Z\" />\n                    </g>\n                </svg>\n            </div>\n            <div class=\"label short\">YouTube</div>\n        </a>\n        <a href=\"https://mail.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"46\" height=\"46\" viewBox=\"1 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M20 18h-2V9.25L12 13L6 9.25V18H4V6h1.2l6.8 4.25L18.8 6H20m0-2H4c-1.11 0-2 .89-2 2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Gmail</div>\n        </a>\n        <a href=\"https://music.youtube.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"46\" height=\"46\" viewBox=\"0 0 24 24\">\n                    <g fill=\"currentColor\" fill-rule=\"evenodd\" clip-rule=\"evenodd\">\n                        <path\n                            d=\"M8.217 8.286C9.265 7.254 10.514 6.743 12 6.743s2.735.51 3.783 1.543s1.562 2.258 1.562 3.714s-.514 2.68-1.562 3.713s-2.297 1.543-3.783 1.543s-2.735-.51-3.783-1.543S6.655 13.455 6.655 12s.514-2.682 1.562-3.714m6.977 3.715L10 14.91V9.088z\" />\n                        <path\n                            d=\"M19.071 18.966Q22.001 16.08 22 12q0-4.081-2.929-6.967Q16.141 2.147 12 2.147T4.929 5.033T2 12q0 4.08 2.929 6.966q2.93 2.886 7.071 2.886q4.142 0 7.071-2.886M12 5.433c-1.827 0-3.407.644-4.702 1.92C6.002 8.63 5.345 10.19 5.345 12c0 1.809.657 3.37 1.953 4.646c1.295 1.276 2.874 1.92 4.702 1.92s3.407-.644 4.702-1.92c1.296-1.276 1.953-2.837 1.953-4.646c0-1.81-.657-3.37-1.953-4.647c-1.295-1.276-2.875-1.92-4.702-1.92\" />\n                    </g>\n                </svg>\n            </div>\n            <div class=\"label short\">YTMusic</div>\n        </a>\n        <a href=\"https://maps.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg width=\"36\" height=\"36\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path fill=\"currentColor\"\n                        d=\"M4.456 12.367c-.515-1.143-.829-2.42-.83-3.994.001-2.05.739-3.927 1.962-5.383A8.354 8.354 0 0 1 12 0c.882 0 1.732.137 2.53.39a8.393 8.393 0 0 1 4.9 4.124c-.006.008 0 0 0 0a8.334 8.334 0 0 1 .943 3.859c0 5.078-3.256 7.061-6.05 11.429C12.625 22.426 13.096 24 12 24c-1.096 0-.625-1.574-2.323-4.198-1.955-3.058-4.057-4.854-5.221-7.435Zm5.096-6.059-.008.01a3.202 3.202 0 0 0 4.893 4.133l.03-.035a3.202 3.202 0 0 0-4.915-4.107z\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Maps</div>\n        </a>\n        <a href=\"https://play.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"38\" height=\"38\" viewBox=\"0 0 16 16\">\n                    <path fill=\"currentColor\"\n                        d=\"M14.222 9.374c1.037-.61 1.037-2.137 0-2.748L11.528 5.04 8.32 8l3.207 2.96zm-3.595 2.116L7.583 8.68 1.03 14.73c.201 1.029 1.36 1.61 2.303 1.055zM1 13.396V2.603L6.846 8zM1.03 1.27l6.553 6.05 3.044-2.81L3.333.215C2.39-.341 1.231.24 1.03 1.27\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Play</div>\n        </a>\n        <a href=\"https://drive.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M12.01 1.485c-2.082 0-3.754.02-3.743.047.01.02 1.708 3.001 3.774 6.62l3.76 6.574h3.76c2.081 0 3.753-.02 3.742-.047-.005-.02-1.708-3.001-3.775-6.62l-3.76-6.574zm-4.76 1.73a789.828 789.861 0 0 0-3.63 6.319L0 15.868l1.89 3.298 1.885 3.297 3.62-6.335 3.618-6.33-1.88-3.287C8.1 4.704 7.255 3.22 7.25 3.214zm2.259 12.653-.203.348c-.114.198-.96 1.672-1.88 3.287a423.93 423.948 0 0 1-1.698 2.97c-.01.026 3.24.042 7.222.042h7.244l1.796-3.157c.992-1.734 1.85-3.23 1.906-3.323l.104-.167h-7.249z\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Drive</div>\n        </a>\n        <a href=\"https://photos.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"42\" height=\"42\" viewBox=\"0 0 256 256\">\n                    <g fill=\"currentColor\">\n                        <path\n                            d=\"M192 88a63.7 63.7 0 0 1-14 40h-50V24a64 64 0 0 1 64 64M64 168a64 64 0 0 0 64 64V128H78a63.7 63.7 0 0 0-14 40\"\n                            opacity=\".2\" />\n                        <path\n                            d=\"M232 120h-39.51A72 72 0 0 0 128 16a8 8 0 0 0-8 8v39.51A72 72 0 0 0 16 128a8 8 0 0 0 8 8h39.51A72 72 0 0 0 128 240a8 8 0 0 0 8-8v-39.51A72 72 0 0 0 240 128a8 8 0 0 0-8-8M120 223.43A56.09 56.09 0 0 1 72 168a55.3 55.3 0 0 1 10-32h38ZM120 120H32.57A56.09 56.09 0 0 1 88 72a55.3 55.3 0 0 1 32 10Zm16-87.43A56.09 56.09 0 0 1 184 88a55.3 55.3 0 0 1-10 32h-38ZM168 184a55.3 55.3 0 0 1-32-10v-38h87.43A56.09 56.09 0 0 1 168 184\" />\n                    </g>\n                </svg>\n            </div>\n            <div class=\"label short\">Photos</div>\n        </a>\n        <a href=\"https://translate.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"m12 22-1-3H4q-.825 0-1.412-.587T2 17V4q0-.825.588-1.412T4 2h6l.875 3H20q.875 0 1.438.563T22 7v13q0 .825-.562 1.413T20 22zm-4.85-7.4q1.725 0 2.838-1.112T11.1 10.6q0-.2-.012-.362t-.063-.338h-3.95v1.55H9.3q-.2.7-.763 1.088t-1.362.387q-.975 0-1.675-.7T4.8 10.5t.7-1.725 1.675-.7q.45 0 .85.163t.725.487L9.975 7.55Q9.45 7 8.712 6.7T7.15 6.4q-1.675 0-2.863 1.188T3.1 10.5t1.188 2.913T7.15 14.6m6.7.5.55-.525q-.35-.425-.637-.825t-.563-.85zm1.25-1.275q.7-.825 1.063-1.575t.487-1.175h-3.975l.3 1.05h1q.2.375.475.813t.65.887M13 21h7q.45 0 .725-.288T21 20V7q0-.45-.275-.725T20 6h-8.825l1.175 4.05h1.975V9h1.025v1.05H19v1.025h-1.275q-.25.95-.75 1.85T15.8 14.6l2.725 2.675L17.8 18l-2.7-2.7-.9.925L15 19z\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Translate</div>\n        </a>\n        <a href=\"https://calendar.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"36\" height=\"36\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M18.316 5.684H24v12.632h-5.684zM5.684 24h12.632v-5.684H5.684zM18.316 5.684V0H1.895A1.894 1.894 0 0 0 0 1.895v16.421h5.684V5.684zm-7.207 6.25v-.065q.407-.216.687-.617c.28-.401.279-.595.279-.982q0-.568-.3-1.025a2.05 2.05 0 0 0-.832-.714 2.7 2.7 0 0 0-1.197-.257q-.9 0-1.481.467-.579.467-.793 1.078l1.085.452q.13-.374.413-.633.284-.258.767-.257.495 0 .816.264a.86.86 0 0 1 .322.703q0 .495-.36.778t-.886.284h-.567v1.085h.633q.611 0 1.02.327.407.327.407.843 0 .505-.387.832c-.387.327-.565.327-.924.327q-.527 0-.897-.311-.372-.312-.521-.881l-1.096.452q.268.923.977 1.401.707.479 1.538.477a2.84 2.84 0 0 0 1.293-.291q.574-.29.902-.794.327-.505.327-1.149 0-.643-.344-1.105a2.07 2.07 0 0 0-.881-.689m2.093-1.931.602.913L15 10.045v5.744h1.187V8.446h-.827zM22.105 0h-3.289v5.184H24V1.895A1.894 1.894 0 0 0 22.105 0m-3.289 23.5 4.684-4.684h-4.684zM0 22.105C0 23.152.848 24 1.895 24h3.289v-5.184H0z\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Calendar</div>\n        </a>\n        <a href=\"https://meet.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\" width=\"41\" height=\"41\">\n                    <path fill=\"currentColor\"\n                        d=\"M2 18L2 32 12 32 12 18zM39 9v4.31l-10 9V16H14V6h22C37.66 6 39 7.34 39 9zM29 27.69l10 9V41c0 1.66-1.34 3-3 3H14V34h15V27.69zM12 34v10H5c-1.657 0-3-1.343-3-3v-7H12zM12 6L12 16 2 16zM29 25L39 16 39 34zM49 9.25v31.5c0 .87-1.03 1.33-1.67.75L41 35.8V14.2l6.33-5.7C47.97 7.92 49 8.38 49 9.25z\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Meet</div>\n        </a>\n        <a href=\"https://chat.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"36\" height=\"36\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M1.637 0C.733 0 0 .733 0 1.637v16.5c0 .904.733 1.636 1.637 1.636h3.955v3.323c0 .804.97 1.207 1.539.638l3.963-3.96h11.27c.903 0 1.636-.733 1.636-1.637V5.592L18.408 0Zm3.955 5.592h12.816v8.59H8.455l-2.863 2.863Z\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Chat</div>\n        </a>\n        <a href=\"https://news.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M21.267 21.2a.614.614 0 0 1-.613.613H3.344a.614.614 0 0 1-.612-.613V8.115a.614.614 0 0 1 .613-.613h17.309a.614.614 0 0 1 .613.613zm-3.032-3.42v-1.195a.08.08 0 0 0-.08-.08h-5.373v1.361h5.373a.08.08 0 0 0 .08-.083zm.817-2.587v-1.201a.08.08 0 0 0-.079-.082h-6.19v1.362h6.189a.08.08 0 0 0 .08-.078v-.004zm-.817-2.588V11.4a.08.08 0 0 0-.08-.08h-5.373v1.361h5.373a.08.08 0 0 0 .08-.079zM8.15 14.045v1.226h1.77c-.145.748-.804 1.292-1.77 1.292a1.976 1.976 0 0 1 0-3.95 1.77 1.77 0 0 1 1.253.49l.934-.932a3.14 3.14 0 0 0-2.187-.853 3.268 3.268 0 1 0 0 6.537c1.89 0 3.133-1.328 3.133-3.197a4 4 0 0 0-.052-.619zM2.27 7.654a.616.616 0 0 1 .613-.613h12.154l-1.269-3.49a.595.595 0 0 0-.743-.383L.368 7.775a.594.594 0 0 0-.323.775l2.225 6.112za.616.616 0 0 1 .613-.613h12.154l-1.269-3.49a.595.595 0 0 0-.743-.383L.368 7.775a.594.594 0 0 0-.323.775l2.225 6.112zm21.312-.31-8.803-2.37.751 2.067h5.584a.614.614 0 0 1 .613.613v8.794l2.247-8.365a.59.59 0 0 0-.392-.74m-4.496-1.675V2.795a.61.61 0 0 0-.611-.608H5.524a.61.61 0 0 0-.616.605v2.837l8.39-3.052a.594.594 0 0 1 .743.39l.544 1.497z\" />\n                </svg>\n            </div>\n            <div class=\"label short\">News</div>\n        </a>\n        <a href=\"https://contacts.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M4.625 22q-.4 0-.725-.325t-.325-.725v-2.625q0-2.25 1.4-3.975t3.6-2.2q-1 .7-1.55 1.762t-.55 2.288v4.75q0 .275.075.55t.25.5zM8.3 22q-.425 0-.737-.312t-.313-.738V16.2q0-1.75 1.238-2.975T11.475 12H16.2q1.75 0 2.975 1.225T20.4 16.2v1.6q0 1.75-1.225 2.975T16.2 22zM12 9.9q-1.65 0-2.8-1.15t-1.15-2.8 1.15-2.8T12 2t2.8 1.15 1.15 2.8-1.15 2.8T12 9.9\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Contacts</div>\n        </a>\n        <a href=\"https://myadcenter.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M10.275 12q-.7 0-1.15-.525T8.8 10.25l.3-1.8q.2-1.075 1.013-1.763T12 6q1.1 0 1.913.688t1.012 1.762l.3 1.8q.125.7-.325 1.225T13.75 12zm.6-2h2.275l-.2-1.225q-.05-.35-.325-.562T12 8t-.612.213-.313.562zM3.1 12.975q-.575.025-.988-.225t-.537-.775q-.05-.225-.025-.45t.125-.425q0 .025-.025-.1-.05-.05-.25-.6-.05-.3.075-.575T1.8 9.35l.05-.05q.05-.475.388-.8t.837-.325q.075 0 .475.1l.075-.025q.125-.125.325-.187T4.375 8q.275 0 .488.088t.337.262q.025 0 .038.013t.037.012q.35.025.612.212t.388.513q.05.175.038.338t-.063.312q0 .025.025.1.175.175.275.388t.1.437q0 .1-.15.525-.025.05 0 .1l.05.4q0 .525-.437.9t-1.063.375zM20 13q-.825 0-1.412-.587T18 11q0-.3.088-.562t.237-.513l-.7-.625q-.25-.2-.088-.5T18 8.5h2q.825 0 1.413.588T22 10.5v.5q0 .825-.587 1.413T20 13M0 17v-.575q0-1.1 1.113-1.763T4 14q.325 0 .625.013t.575.062q-.35.5-.525 1.075T4.5 16.375V18H1q-.425 0-.712-.288T0 17m6 0v-.625q0-1.625 1.663-2.625t4.337-1q2.7 0 4.35 1T18 16.375V17q0 .425-.288.713T17 18H7q-.425 0-.712-.288T6 17m14-3q1.8 0 2.9.663t1.1 1.762V17q0 .425-.288.713T23 18h-3.5v-1.625q0-.65-.162-1.225t-.488-1.075q.275-.05.563-.062T20 14m-8 .75q-1.425 0-2.55.375T8.125 16H15.9q-.225-.5-1.338-.875T12 14.75M12.025 9\" />\n                </svg>\n            </div>\n            <div class=\"label short one\">My Ad Ce...</div>\n            <div class=\"label full\">My Ad<br>Center</div>\n        </a>\n        <a href=\"https://business.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M22 8.5c0 1.37-1.12 2.5-2.5 2.5S17 9.87 17 8.5c0 1.37-1.12 2.5-2.5 2.5S12 9.87 12 8.5c0 1.37-1.12 2.5-2.5 2.5S7 9.87 7 8.5C7 9.87 5.88 11 4.5 11S2 9.87 2 8.5l1.39-5.42S3.68 2 4.7 2h14.6c1.02 0 1.31 1.08 1.31 1.08zm-1 3.7V20c0 1.1-.9 2-2 2H5c-1.1 0-2-.9-2-2v-7.8a3.96 3.96 0 0 0 4-.58c.69.55 1.56.88 2.5.88.95 0 1.82-.33 2.5-.88.69.55 1.56.88 2.5.88.95 0 1.82-.33 2.5-.88.68.55 1.56.88 2.5.88.53 0 1.04-.11 1.5-.3m-2 5.13c0-.2 0-.41-.05-.63l-.03-.16h-2.97v1.17h1.81c-.06.22-.14.44-.31.62-.33.33-.78.51-1.26.51-.5 0-.99-.21-1.35-.56-.69-.71-.69-1.86.02-2.58.69-.7 1.83-.7 2.55-.03l.14.13.84-.85-.16-.14c-.56-.52-1.3-.81-2.08-.81h-.01c-.81 0-1.57.31-2.14.87-.59.58-.92 1.34-.92 2.13 0 .8.31 1.54.88 2.09a3.2 3.2 0 0 0 2.22.91h.02c.8 0 1.51-.29 2.03-.8.47-.48.77-1.2.77-1.87\" />\n                </svg>\n            </div>\n            <div class=\"label short one\">Business ...</div>\n            <div class=\"label full\">Business<br>Profile</div>\n        </a>\n        <a href=\"https://google.com/shopping/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"39\" height=\"39\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M11.175 22q-.375 0-.75-.15t-.675-.45L2.6 14.25q-.3-.3-.438-.663t-.137-.737t.138-.75t.437-.675L11.4 2.6q.275-.275.65-.438T12.825 2H20q.825 0 1.413.587T22 4v7.175q0 .4-.15.763t-.425.637L12.6 21.4q-.3.3-.675.45t-.75.15M17.5 8q.625 0 1.063-.437T19 6.5t-.437-1.062T17.5 5t-1.062.438T16 6.5t.438 1.063T17.5 8\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Shopping</div>\n        </a>\n\n        <div class=\"separator\"></div>\n\n        <a href=\"https://docs.google.com/document/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"39\" height=\"39\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M14.727 6.727H14V0H4.91c-.905 0-1.637.732-1.637 1.636v20.728c0 .904.732 1.636 1.636 1.636h14.182c.904 0 1.636-.732 1.636-1.636V6.727zm-.545 10.455H7.09v-1.364h7.09v1.364zm2.727-3.273H7.091v-1.364h9.818zm0-3.273H7.091V9.273h9.818zM14.727 6h6l-6-6z\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Docs</div>\n        </a>\n        <a href=\"https://docs.google.com/spreadsheets/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"39\" height=\"39\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M11.318 12.545H7.91v-1.909h3.41v1.91zM14.728 0v6h6zm1.363 10.636h-3.41v1.91h3.41zm0 3.273h-3.41v1.91h3.41zM20.727 6.5v15.864c0 .904-.732 1.636-1.636 1.636H4.909a1.636 1.636 0 0 1-1.636-1.636V1.636C3.273.732 4.005 0 4.909 0h9.318v6.5zm-3.273 2.773H6.545v7.909h10.91v-7.91zm-6.136 4.636H7.91v1.91h3.41v-1.91z\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Sheets</div>\n        </a>\n        <a href=\"https://docs.google.com/presentation/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"39\" height=\"39\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M16.09 15.273H7.91v-4.637h8.18zm1.728-8.523h2.91v15.614c0 .904-.733 1.636-1.637 1.636H4.909a1.636 1.636 0 0 1-1.636-1.636V1.636C3.273.732 4.005 0 4.909 0h9.068v6.75zm-.363 2.523H6.545v7.363h10.91zm-2.728-5.979V6h6.001l-6-6v3.294z\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Slides</div>\n        </a>\n        <a href=\"https://docs.google.com/forms/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"39\" height=\"39\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M14.727 6h6l-6-6zm0 .727H14V0H4.91c-.905 0-1.637.732-1.637 1.636v20.728c0 .904.732 1.636 1.636 1.636h14.182c.904 0 1.636-.732 1.636-1.636V6.727zM7.91 17.318a.819.819 0 1 1 .001-1.638.819.819 0 0 1 0 1.638zm0-3.273a.819.819 0 1 1 .001-1.637.819.819 0 0 1 0 1.637zm0-3.272a.819.819 0 1 1 .001-1.638.819.819 0 0 1 0 1.638zm9 6.409h-6.818v-1.364h6.818zm0-3.273h-6.818v-1.364h6.818zm0-3.273h-6.818V9.273h6.818z\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Forms</div>\n        </a>\n        <a href=\"https://keep.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"39\" height=\"39\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M4.908 0c-.904 0-1.635.733-1.635 1.637v20.726c0 .904.732 1.637 1.635 1.637H19.09c.904 0 1.637-.733 1.637-1.637V6.5h-6.5V0zm9.819 0v6h6zM11.97 8.229c.224 0 .571.031.765.072.2.04.576.185.842.312.828.414 1.467 1.164 1.774 2.088.168.511.188 1.34.05 1.865a3.75 3.75 0 0 1-1.277 1.952l-.25.193h-1.87c-2.134 0-1.931.042-2.478-.494a3.35 3.35 0 0 1-.984-1.844c-.148-.766-.053-1.437.32-2.203.19-.399.303-.556.65-.899.68-.679 1.513-1.037 2.458-1.042m-1.866 7.863h3.781v1.328h-3.779v-1.328z\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Keep</div>\n        </a>\n        <a href=\"https://google.com/finance/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M8 11.75V7.5q0-.625.438-1.062T9.5 6t1.063.438T11 7.5v4.25q0 .625-.437 1.063T9.5 13.25t-1.062-.437T8 11.75m5-.225V3.5q0-.625.438-1.062T14.5 2t1.063.438T16 3.5v8.025q0 .75-.462 1.125t-1.038.375-1.037-.375T13 11.525m-10 3.45V11.5q0-.625.438-1.062T4.5 10t1.063.438T6 11.5v3.475q0 .75-.462 1.125t-1.038.375-1.037-.375T3 14.975m2.4 6.075q-.65 0-.913-.612T4.7 19.35l4.1-4.1q.275-.275.663-.3t.687.25L13 17.65l5.6-5.6H18q-.425 0-.712-.288T17 11.05t.288-.712.712-.288h3q.425 0 .713.288t.287.712v3q0 .425-.288.713T21 15.05t-.712-.288T20 14.05v-.6l-6.25 6.25q-.275.275-.663.3t-.687-.25L9.55 17.3 6.1 20.75q-.125.125-.312.213t-.388.087\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Finance</div>\n        </a>\n        <a href=\"https://ads.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"42\" height=\"42\" viewBox=\"0 0 48 48\">\n                    <defs>\n                        <mask id=\"ipTGoogleAds0\">\n                            <g fill=\"none\" stroke=\"#fff\" stroke-width=\"4\">\n                                <path fill=\"#555\"\n                                    d=\"M41.355 34.153L29.522 8.776a6 6 0 0 0-10.876 5.072L30.48 39.224a6 6 0 1 0 10.876-5.071Z\" />\n                                <path stroke-linecap=\"round\"\n                                    d=\"M23.438 26.536L17.52 39.224a6 6 0 0 1-7.974 2.902v0a6 6 0 0 1-2.902-7.973L18.374 9\" />\n                                <circle cx=\"12.083\" cy=\"36.688\" r=\"6\" fill=\"#555\"\n                                    transform=\"rotate(25 12.083 36.688)\" />\n                            </g>\n                        </mask>\n                    </defs>\n                    <path fill=\"currentColor\" d=\"M0 0h48v48H0z\" mask=\"url(#ipTGoogleAds0)\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Google Ads</div>\n        </a>\n        <a href=\"https://analytics.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"36\" height=\"36\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M22.84 2.998v17.999a2.983 2.983 0 0 1-2.967 2.998 3 3 0 0 1-.368-.02 3.06 3.06 0 0 1-2.61-3.1V3.12A3.06 3.06 0 0 1 19.51.02a2.983 2.983 0 0 1 3.329 2.978zM4.133 18.055a2.973 2.973 0 1 0 0 5.945 2.973 2.973 0 0 0 0-5.945m7.872-9.01h-.05a3.06 3.06 0 0 0-2.892 3.126v7.985c0 2.167.954 3.482 2.35 3.763a2.978 2.978 0 0 0 3.57-2.927v-8.959a2.983 2.983 0 0 0-2.978-2.988\" />\n                </svg>\n            </div>\n            <div class=\"label short one\">Google A...</div>\n            <div class=\"label full\">Google<br>Analytics</div>\n        </a>\n        <a href=\"https://passwords.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"38\" height=\"38\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M6.545 14.182c.6 0 1.109-.21 1.528-.627.436-.436.654-.954.654-1.555s-.218-1.109-.654-1.528a2.036 2.036 0 0 0-1.528-.654c-.6 0-1.118.218-1.555.654A2.079 2.079 0 0 0 4.363 12c0 .6.21 1.118.627 1.555.436.418.954.627 1.555.627zm0 4.363c-1.818 0-3.363-.636-4.636-1.909C.636 15.363 0 13.818 0 12s.636-3.363 1.909-4.637c1.273-1.272 2.818-1.908 4.636-1.908a6.39 6.39 0 0 1 3.409.954 6.22 6.22 0 0 1 2.4 2.59h9.464c.6 0 1.109.22 1.527.655.436.418.655.927.655 1.528v5.18c0 .6-.219 1.119-.655 1.556a2.079 2.079 0 0 1-1.527.627h-4.91a2.17 2.17 0 0 1-1.554-.627 2.17 2.17 0 0 1-.627-1.555v-1.364h-2.374a6.009 6.009 0 0 1-2.373 2.618 6.676 6.676 0 0 1-3.435.928Zm4.31-5.727h6.054v3.545h1.636v-1.364a.775.775 0 0 1 .219-.574.816.816 0 0 1 .6-.246.73.73 0 0 1 .573.246.73.73 0 0 1 .246.574v1.364h1.635v-5.181H10.855a4.336 4.336 0 0 0-1.528-2.537 4.193 4.193 0 0 0-2.782-1.008 4.202 4.202 0 0 0-3.081 1.281C2.61 9.772 2.182 10.8 2.182 12c0 1.2.428 2.228 1.282 3.081a4.202 4.202 0 0 0 3.081 1.282c1.055 0 1.982-.327 2.782-.982a4.461 4.461 0 0 0 1.528-2.563z\" />\n                </svg>\n            </div>\n            <div class=\"label short one\">Password ...</div>\n            <div class=\"label full\">Password<br>Manager</div>\n        </a>\n        <a href=\"https://one.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"43\" height=\"43\" viewBox=\"0 0 24 24\">\n                    <g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\n                        stroke-width=\"2\">\n                        <path d=\"M11 5v13.982a2 2 0 0 0 4 0V5a2 2 0 1 0-4 0\" />\n                        <path\n                            d=\"M6.63 8.407a2.125 2.125 0 0 0-.074 2.944c.77.834 2.051.869 2.862.077l4.95-4.834c.812-.792.846-2.11.076-2.945a1.984 1.984 0 0 0-2.861-.077z\" />\n                    </g>\n                </svg>\n            </div>\n            <div class=\"label short one\">Google O...</div>\n            <div class=\"label full\">Google<br>One</div>\n        </a>\n        <a href=\"https://google.com/travel/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"43\" height=\"43\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M11 6h2V4h-2zm1 6q-1.9 0-3.625-.788T5 9.45V8q0-.825.588-1.412T7 6h2V3q0-.425.288-.712T10 2h4q.425 0 .713.288T15 3v3h2q.825 0 1.413.588T19 8v1.45q-1.65.975-3.375 1.763T12 12m-5 9q-.825 0-1.412-.587T5 19v-7.3q1.4.85 2.888 1.45t3.112.8V14q0 .425.288.713T12 15t.713-.288T13 14v-.05q1.625-.2 3.113-.8T19 11.7V19q0 .825-.587 1.413T17 21q0 .425-.288.713T16 22q-.4 0-.562-.363T15 21H9q0 .425-.288.713T8 22q-.4 0-.562-.363T7 21\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Travel</div>\n        </a>\n        <a href=\"https://classroom.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"36\" height=\"36\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M1.637 1.637C.732 1.637 0 2.369 0 3.273v17.454c0 .904.732 1.636 1.637 1.636h20.726c.905 0 1.637-.732 1.637-1.636V3.273c0-.904-.732-1.636-1.637-1.636zm.545 2.181h19.636v16.364h-2.726v-1.09h-4.91v1.09h-12zM12 8.182a1.636 1.636 0 1 0 0 3.273 1.636 1.636 0 1 0 0-3.273m-4.363 1.91c-.678 0-1.229.55-1.229 1.226a1.228 1.228 0 0 0 2.455 0c0-.677-.549-1.226-1.226-1.226m8.726 0a1.227 1.227 0 1 0 0 2.453 1.227 1.227 0 0 0 0-2.453M12 12.545c-1.179 0-2.413.401-3.148 1.006a4.1 4.1 0 0 0-1.215-.188c-1.314 0-2.729.695-2.729 1.559v.896h14.184v-.896c0-.864-1.415-1.559-2.729-1.559-.41 0-.83.068-1.215.188-.735-.605-1.969-1.006-3.148-1.006\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Classroom</div>\n        </a>\n        <a href=\"https://books.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"41\" height=\"41\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M18 22a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2h-6v7L9.5 7.5 7 9V2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2z\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Books</div>\n        </a>\n        <a href=\"https://blogger.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"37\" height=\"37\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M21.976 24H2.026C.9 24 0 23.1 0 21.976V2.026C0 .9.9 0 2.025 0H22.05C23.1 0 24 .9 24 2.025v19.95C24 23.1 23.1 24 21.976 24M12 3.975H9A5.025 5.025 0 0 0 3.975 9v6A5.025 5.025 0 0 0 9 20.024h6A5.025 5.025 0 0 0 20.024 15v-3.975c0-.6-.45-1.05-1.05-1.05H18a.995.995 0 0 1-.976-.976A5.025 5.025 0 0 0 12 3.973zm3.074 12H9c-.525 0-.975-.45-.975-.975s.45-.976.975-.976h6.074c.526 0 .977.45.977.976s-.45.976-.975.976zm-2.55-7.95c.527 0 .976.45.976.975s-.45.975-.975.975h-3.6c-.525 0-.976-.45-.976-.975s.45-.975.975-.975z\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Blogger</div>\n        </a>\n        <a href=\"https://earth.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"43\" height=\"43\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M12 12.14c-.91-1.37-1.86-2.36-2.86-2.95-1-.6-1.87-.81-2.64-.64-.73.18-1.36.59-1.86 1.25-.44.59-.64 1.26-.64 2.01V12c0 .78.11 1.58.36 2.39.09.25.14.25.19 0 .12-.62.41-1.08.86-1.36.46-.28 1.06-.27 1.81.02.75.3 1.48.95 2.2 1.9 1.28 1.72 2.78 2.77 4.5 3.14 2.22.32 3.89-.39 5.02-2.09.31-.61.56-1.14.7-1.61.09-.31.05-.34-.14-.09-.47.62-1.1 1.03-1.9 1.2-.8.2-1.71 0-2.74-.5-1.03-.57-1.98-1.5-2.86-2.86m4.97-3.98c-1.56-2.35-3.25-3.66-5.06-3.99-1.44-.22-3 .28-4.69 1.5-.22.16-.32.24-.31.26.02.02.15-.04.4-.16 2.5-1.22 4.91.06 7.22 3.84.5.84 1.02 1.5 1.57 1.97s1.06.75 1.55.84c.48.08.92.08 1.31-.04.39-.13.74-.33 1.04-.61 0-.6-.09-1.27-.31-1.97-.5.12-.95.08-1.34-.12-.39-.18-.85-.71-1.38-1.52M12 2c2.75 0 5.1 1 7.05 2.95S22 9.25 22 12s-1 5.1-2.95 7.05S14.75 22 12 22s-5.1-1-7.05-2.95S2 14.75 2 12s1-5.1 2.95-7.05S9.25 2 12 2\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Earth</div>\n        </a>\n        <a href=\"https://artsandculture.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"43\" height=\"43\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2m5 15H7v-2h10zm-9-3v-3h2v3zm3 0v-3h2v3zm3 0v-3h2v3zm3-4H7V8.5L12 6l5 2.5z\" />\n                </svg>\n            </div>\n            <div class=\"label short one\">Arts and ...</div>\n            <div class=\"label full\">Arts and<br>Culture</div>\n        </a>\n        <a href=\"https://google.com/save/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"42\" height=\"42\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\n                        d=\"M6 6.2c0-1.12 0-1.68.218-2.108a2 2 0 0 1 .874-.874C7.52 3 8.08 3 9.2 3h5.6c1.12 0 1.68 0 2.108.218a2 2 0 0 1 .874.874C18 4.52 18 5.08 18 6.2v13.305c0 .486 0 .729-.101.862a.5.5 0 0 1-.37.198c-.167.01-.369-.125-.773-.394L12 17l-4.756 3.17c-.404.27-.606.405-.774.395a.5.5 0 0 1-.369-.198C6 20.234 6 19.991 6 19.505z\" />\n                </svg>\n            </div>\n            <div class=\"label short\">Saved</div>\n        </a>\n        <a href=\"https://chromewebstore.google.com/\" class=\"icon-item\">\n            <div class=\"menuicon\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"38\" height=\"38\" viewBox=\"0 0 24 24\">\n                    <path fill=\"currentColor\"\n                        d=\"M0 1.637v19.09c0 .9.736 1.636 1.636 1.636h.131a10.4 10.4 0 0 1-.13-1.636 10.3 10.3 0 0 1 1.667-5.64l4.202 7.276h1.128A3.77 3.77 0 0 1 12 16.958a3.77 3.77 0 0 1 3.366 5.406h1.048a4.7 4.7 0 0 0-1.587-5.406h6.83a10.34 10.34 0 0 1 .577 5.406h.13c.9 0 1.636-.737 1.636-1.637V1.637Zm9.273 2.181h5.454a1.09 1.09 0 1 1 0 2.182H9.273a1.09 1.09 0 1 1 0-2.182M12 10.364a10.36 10.36 0 0 1 9.233 5.652H12a4.71 4.71 0 0 0-4.677 4.149L3.91 14.25A10.34 10.34 0 0 1 12 10.364\" />\n                </svg>\n            </div>\n            <div class=\"label short one\">Chrome ...</div>\n            <div class=\"label full\">Chrome<br>Web Store</div>\n        </a>\n    </div>\n    <!-- ________________ End of Google App Menu ________________ -->\n\n    <div class=\"centerDiv\">\n        <div class=\"leftDiv\" id=\"leftDiv\">\n\n            <!-- ____________clock___________ -->\n            <div class=\"clock\" id=\"analogClock\">\n\n                <svg fill=\"none\" height=\"100%\" viewBox=\"0 0 461 461\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path class=\"bgLightTint\" clip-rule=\"evenodd\" fill-rule=\"evenodd\"\n                        d=\"M93.6379 63.9405C89.7543 78.4344 78.4333 89.7554 63.9394 93.639l-7.4405 1.9937c-22.4055 6.0033-35.702 29.0333-29.6984 51.4393l1.9196 7.164c3.8837 14.494-.2601 29.959-10.8704 40.569l-5.5482 5.548c-16.402 16.402-16.402 42.995 0 59.397l5.6221 5.622c10.6102 10.611 14.754 26.075 10.8704 40.569l-1.9936 7.441c-6.0036 22.405 7.2929 45.435 29.6985 51.439l7.4406 1.994c14.4939 3.883 25.8149 15.204 29.6985 29.698l1.9942 7.443c6.0038 22.405 29.0338 35.702 51.4388 29.698l7.442-1.994c14.494-3.883 29.959.26 40.569 10.871l5.271 5.271c16.402 16.402 42.995 16.402 59.397 0l5.347-5.347c10.61-10.61 26.075-14.754 40.569-10.87l7.717 2.068c22.405 6.003 45.435-7.293 51.439-29.699l1.993-7.439c3.884-14.494 15.205-25.815 29.699-29.699l7.441-1.994c22.406-6.003 35.702-29.033 29.699-51.439l-2.068-7.718c-3.884-14.493.26-29.958 10.87-40.569l5.346-5.346c16.402-16.402 16.402-42.995 0-59.397l-5.272-5.272c-10.61-10.61-14.754-26.075-10.87-40.569l1.994-7.441c6.003-22.406-7.293-45.436-29.699-51.4398l-7.441-1.9939c-14.494-3.8836-25.815-15.2046-29.699-29.6984l-1.993-7.4395c-6.004-22.4056-29.034-35.702-51.439-29.6985l-7.441 1.9937c-14.494 3.8836-29.959-.2601-40.569-10.8704l-5.623-5.6227c-16.402-16.402-42.995-16.402-59.397 0l-5.547 5.5476c-10.61 10.6102-26.075 14.754-40.569 10.8704l-7.166-1.92c-22.405-6.0036-45.435 7.2929-51.4388 29.6985l-1.9943 7.4425Z\" />\n                </svg>\n                <div class=\"centerPoint\">\n                    <div class=\"sui\" id=\"hour\"></div>\n                    <div class=\"sui\" id=\"second\"></div>\n                    <div class=\"sui\" id=\"minute\"></div>\n                </div>\n            </div>\n            <div class=\"clock\" id=\"digitalClock\">\n                <svg fill=\"none\" height=\"100%\" viewBox=\"60 0 460 450\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <!-- Background oval shape -->\n                    <rect class=\"bgLightTint\" height=\"350\" rx=\"180\" width=\"460\" x=\"60\" y=\"40\"></rect>\n\n                    <!-- Date Text -->\n                    <text id=\"digidate\" x=\"290\" y=\"120\" text-anchor=\"middle\" fill=\"#E2EEFF\" font-size=\"28\"\n                        font-family=\"Arial\" class=\"digidate\">Thu 9</text>\n\n                    <!-- Full Time Text (Hour:Minute) -->\n                    <text x=\"290\" y=\"260\" id=\"digiclock\" class=\"digiclock\" font-family=\"Arial\">\n                        <tspan id=\"digihours\">6</tspan>\n                        <tspan id=\"digicolon\" dx=\"-34\">:</tspan>\n                        <tspan id=\"digiminutes\" dx=\"-34\">28</tspan>\n                    </text>\n\n                    <!-- AM/PM Text -->\n                    <text id=\"amPm\" x=\"290\" y=\"330\" text-anchor=\"middle\" fill=\"#E2EEFF\" font-size=\"28\"\n                        font-family=\"Arial\" class=\"amPm\">AM</text>\n                </svg>\n            </div>\n\n            <!-- ____________end of clock______________ -->\n\n            <div class=\"ttteexxtt\">\n                <div id=\"userText\" contenteditable=\"true\" spellcheck=\"false\">Click here to edit</div>\n                <div id=\"date\"></div>\n            </div>\n        </div>\n        <!-- ---------end of leftDiv--------------- -->\n\n        <div class=\"rightDiv\" id=\"rightDiv\">\n            <!-- ---weather stuff--------- -->\n            <div class=\"topDiv\" id=\"hideWeather\">\n                <div class=\"lrectangle bgLightTint\">\n                    <div id=\"conditionText\"></div>\n                    <div class=\"cconnt\">\n                        <div class=\"humidityBar\">\n                            <div class=\"thinLine\"></div>\n                            <div class=\"slider\" id=\"slider\">\n                                <div id=\"humidityLevel\"></div>\n                            </div>\n                        </div>\n\n                        <div class=\"tilesContainer\">\n                            <div class=\"tiles\">\n                                <div class=\"icon\">\n                                    <svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\n                                        <path id=\"darkFeelsLikeIcon\" class=\"accentColor\"\n                                            d=\"M8 10.255V5a4 4 0 0 1 8 0v5.255a7 7 0 1 1-8 0ZM8 16a4 4 0 1 0 8 0H8Z\" />\n                                    </svg>\n\n                                </div>\n                                <span id=\"feelsLike\"></span>\n                            </div>\n                            <div class=\"tiles location\">\n                                <div class=\"icon\">\n                                    <img class=\"location-icon\" draggable=\"false\" src=\"./svgs/location.svg\" alt=\"\">\n                                </div>\n                                <span class=\"location_spn\" id=\"location\"></span>\n                            </div>\n                        </div>\n                        <!-- end of tilesContainer -->\n                    </div>\n                </div>\n\n                <!-- -----rAndakar-------- -->\n                <div class=\"rAndakar\">\n                    <svg fill=\"none\" height=\"100%\" viewBox=\"0 0 288 288\" width=\"100%\"\n                        xmlns=\"http://www.w3.org/2000/svg\">\n                        <rect class=\"bgLightTint\" fill=\"#E2EEFF\" height=\"304.742\" rx=\"123.401\"\n                            transform=\"rotate(45 164.485 -51)\" width=\"246.801\" x=\"164.485\" y=\"-51\" />\n                    </svg>\n                    <div class=\"wInfo\">\n                        <div id=\"temp\">?</div>\n                        <img alt=\"\" id=\"wIcon\" draggable=\"false\" src=\"./svgs/defaultWeather.svg\">\n                    </div>\n                </div>\n            </div>\n            <!-- ------end of weather stuff------------ -->\n\n            <!-- ----------searchbar-------------- -->\n            <div class=\"searchbar bgLightTint\" id=\"searchbar\">\n\n                <div class=\"searchIcon\">\n                    <svg fill=\"none\" height=\"100%\" viewBox=\"0 0 45 45\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path id=\"searchIconDark\" class=\"accentColor\"\n                            d=\"M20.012 0A20.02 20.02 0 0 0 3.729 8.38a20.01 20.01 0 0 0 2.417 26.063 20.02 20.02 0 0 0 17.547 5.245 20 20 0 0 0 8.592-3.864L40.76 44.3a2.502 2.502 0 0 0 3.539-3.54l-8.475-8.472a20.01 20.01 0 0 0 2.166-21.074A20.02 20.02 0 0 0 20.014 0zm.002 5.004A15 15 0 0 1 30.629 9.4a15 15 0 0 1 4.394 10.614 15 15 0 0 1-4.394 10.615 15.01 15.01 0 0 1-21.23 0 15 15 0 0 1-4.397-10.615H5A15 15 0 0 1 9.398 9.4a15 15 0 0 1 10.616-4.396m-.463 5.014a10.01 10.01 0 0 0-9.545 9.996A10.007 10.007 0 0 0 20.012 30.02h.002a10 10 0 0 0 7.076-2.93 10.007 10.007 0 0 0 0-14.152 10 10 0 0 0-7.54-2.92\" />\n                    </svg>\n                </div>\n                <div class=\"searchIcon\">\n                    <!-- Dropdown Button -->\n                    <div class=\"dropdown search-dropdown\">\n                        <!-- Default Search Engine -->\n                        <button id=\"default-dropdown-item\" style=\"cursor: pointer;\" role=\"button\" class=\"dropdown-btn\">\n                            <div id=\"default-dropdown\" data-default data-engine-name=\"default\" data-engine=\"0\"\n                                class=\"dropdown-item\">\n                                <svg width=\"30\" height=\"30\">\n                                    <use href=\"#default-engine-icon\" />\n                                </svg>\n                                <span class=\"engine-name\" id=\"defaultEngineDD\">\n                                    Default\n                                </span>\n                            </div>\n                        </button>\n                        <div class=\"dropdown-content\">\n                            <!-- Default Google Icon -->\n                            <div id=\"google-dropdown\" data-engine-name=\"google\" data-engine=\"1\" class=\"dropdown-item\">\n                                <svg width=\"30\" height=\"30\">\n                                    <use href=\"#google-engine-icon\" />\n                                </svg>\n                                <span class=\"engine-name\" id=\"googleEngineDD\">\n                                    Google\n                                </span>\n                            </div>\n                            <!-- Duck -->\n                            <div data-engine=\"2\" data-engine-name=\"duck\" id=\"duck-dropdown\" class=\"dropdown-item\">\n                                <svg width=\"30\" height=\"30\">\n                                    <use href=\"#duck-engine-icon\" />\n                                </svg>\n                                <span class=\"engine-name\" id=\"duckEngineDD\">\n                                    Duck\n                                </span>\n                            </div>\n                            <!-- Bing -->\n                            <div data-engine=\"3\" data-engine-name=\"bing\" id=\"bing-dropdown\" class=\"dropdown-item\">\n                                <svg width=\"30\" height=\"30\">\n                                    <use href=\"#bing-engine-icon\" />\n                                </svg>\n                                <span class=\"engine-name\" id=\"bingEngineDD\">\n                                    Bing\n                                </span>\n                            </div>\n\n                            <div data-engine=\"4\" data-engine-name=\"brave\" id=\"brave-dropdown\" class=\"dropdown-item\">\n                                <svg width=\"30\" height=\"30\">\n                                    <use href=\"#brave-engine-icon\" />\n                                </svg>\n                                <span class=\"engine-name\" id=\"braveEngineDD\">\n                                    Brave\n                                </span>\n                            </div>\n\n                            <div data-engine=\"5\" data-engine-name=\"youtube\" id=\"youtube-dropdown\" class=\"dropdown-item\">\n                                <svg width=\"30\" height=\"30\">\n                                    <use href=\"#youtube-engine-icon\" />\n                                </svg>\n                                <span class=\"engine-name\" id=\"youtubeEngineDD\">\n                                    YouTube\n                                </span>\n                            </div>\n\n                            <div data-engine=\"6\" data-engine-name=\"gImages\" id=\"gImages-dropdown\" class=\"dropdown-item\">\n                                <svg width=\"30\" height=\"30\">\n                                    <use href=\"#gImages-engine-icon\" />\n                                </svg>\n                                <span class=\"engine-name\" id=\"gImagesEngineDD\">Images</span>\n                            </div>\n\n                            <div data-engine=\"7\" data-engine-name=\"reddit\" id=\"reddit-dropdown\" class=\"dropdown-item\">\n                                <svg width=\"30\" height=\"30\">\n                                    <use href=\"#reddit-engine-icon\" />\n                                </svg>\n                                <span class=\"engine-name\" id=\"redditEngineDD\">Reddit</span>\n                            </div>\n\n                            <div data-engine=\"8\" data-engine-name=\"wikipedia\" id=\"wikipedia-dropdown\"\n                                class=\"dropdown-item\">\n                                <svg width=\"30\" height=\"30\">\n                                    <use href=\"#wikipedia-engine-icon\" />\n                                </svg>\n                                <span class=\"engine-name\" id=\"wikipediaEngineDD\">Wikipedia</span>\n                            </div>\n\n                            <div data-engine=\"9\" data-engine-name=\"quora\" id=\"quora-dropdown\" class=\"dropdown-item\">\n                                <svg width=\"30\" height=\"30\">\n                                    <use href=\"#quora-engine-icon\" />\n                                </svg>\n                                <span class=\"engine-name\" id=\"quoraEngineDD\">Quora</span>\n                            </div>\n\n                        </div>\n                    </div>\n                </div>\n\n                <div class=\"searchbar-content\">\n                    <input id=\"searchQ\" placeholder=\"Type here...\" type=\"text\" autocomplete=\"off\">\n\n                    <div class=\"searchControls\">\n                        <!-- Mic Icon -->\n                        <div class=\"micIcon\" id=\"micIcon\">\n                            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -1 24 24\" height=\"100%\" width=\"100%\">\n                                <path id=\"micIconPath\" class=\"accentColor\"\n                                    d=\"M12 14q-1.25 0-2.125-.875T9 11V5q0-1.25.875-2.125T12 2t2.125.875T15 5v6q0 1.25-.875 2.125T12 14m-1 7v-3.075q-2.6-.35-4.3-2.325T5 11h2q0 2.075 1.463 3.538T12 16t3.538-1.463T17 11h2q0 2.625-1.7 4.6T13 17.925V21z\" />\n                            </svg>\n                        </div>\n                        <!-- Search Button -->\n                        <button id=\"enterBtn\">Search</button>\n                    </div>\n                </div>\n            </div>\n            <div id=\"resultBox\" class=\"resultBox bgLightTint\" style=\"display: none;\"></div>\n            <!-- ----------end of searchbar-------------- -->\n\n            <!-- Search Engine SVG Definitions -->\n            <svg style=\"display: none;\">\n                <symbol id=\"default-engine-icon\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path style=\"transform: scale(0.95); transform-origin: center;\"\n                        d=\"M12 22q-2.075 0-3.9-.788t-3.175-2.137T2.788 15.9T2 12t.788-3.9t2.137-3.175T8.1 2.788T12 2t3.9.788t3.175 2.137T21.213 8.1T22 12t-.788 3.9t-2.137 3.175t-3.175 2.138T12 22m0-2q3.35 0 5.675-2.325T20 12q0-.175-.012-.363t-.013-.312q-.125.725-.675 1.2T18 13h-2q-.825 0-1.412-.587T14 11v-1h-4V8q0-.825.588-1.412T12 6h1q0-.575.313-1.012t.762-.713q-.5-.125-1.012-.2T12 4Q8.65 4 6.325 6.325T4 12h5q1.65 0 2.825 1.175T13 16v1h-3v2.75q.5.125.988.188T12 20\" />\n                </symbol>\n            </svg>\n\n            <svg style=\"display: none;\">\n                <symbol id=\"google-engine-icon\" viewBox=\"0 0 28 28\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path\n                        d=\"M24.805 12.0177c.1309.7383.1961 1.4863.195 2.2357 0 3.3466-1.2204 6.1763-3.3441 8.0916h.0028C19.8016 24.0265 17.2487 25 14.2216 25c-2.9761 0-5.8304-1.1589-7.9349-3.2217C4.1823 19.7154 3 16.9176 3 14.0004c0-2.9173 1.1823-5.7151 3.2867-7.778 2.1045-2.0628 4.9588-3.2217 7.9349-3.2217 2.7857-.032 5.476.9939 7.5073 2.8627l-3.2038 3.1404c-1.1581-1.0822-2.7037-1.6747-4.3035-1.65-2.9274 0-5.4144 1.936-6.301 4.5429a6.4654 6.4654 0 0 0 0 4.2115h.0043c.8907 2.6028 3.3735 4.5387 6.3009 4.5387 1.5121 0 2.811-.3795 3.8182-1.0505h-.0042a5.1412 5.1412 0 0 0 1.4705-1.4462 5.0327 5.0327 0 0 0 .7724-1.8963h-6.0611v-4.2348l10.5834-.0014Z\" />\n                </symbol>\n            </svg>\n\n            <svg style=\"display: none;\">\n                <symbol id=\"duck-engine-icon\" viewBox=\"0 0 28 28\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path\n                        d=\"M10.5 7a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3ZM12 4a5 5 0 0 1 2.86 9.1c1.58.15 3.36.51 5.14 1.4 3 1.5 4-.5 4-.5s-1 9-7 9h-6s-5 0-5-5c0-3 3-4 2-6-4 0-4-3.5-4-3.5 1 .5 2.24.5 3 .15A5.02 5.02 0 0 1 12 4Z\" />\n                </symbol>\n            </svg>\n\n            <svg style=\"display: none;\">\n                <symbol id=\"bing-engine-icon\" viewBox=\"0 0 28 28\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path\n                        d=\"M22.9991 13.1645a.4638.4638 0 0 0-.0872-.2527.4546.4546 0 0 0-.2112-.1608l-8.8313-2.7685c-.1648-.0514-.24.0372-.1676.1963l1.6424 3.6516c.0725.16.2598.3496.416.422l2.2533 1.0442c.1562.0724.16.1991.0075.281l-9.6135 5.1749c-.1515.082-.1713.0534-.0433-.0638l3.6933-3.3668a.8237.8237 0 0 0 .2335-.5315l.0037-10.2051a.4647.4647 0 0 0-.0874-.2533.456.456 0 0 0-.2119-.1612L8.2993 5.0133C8.1346 4.962 8 5.0638 8 5.2401v15.481c0 .1763.1148.403.256.504l3.7554 2.6932c.1412.101.3765.1096.5243.019l10.1951-6.2143a.623.623 0 0 0 .1902-.2097A.6332.6332 0 0 0 23 17.24v-4.0755h-.0009Z\" />\n                </symbol>\n            </svg>\n\n            <svg style=\"display: none;\">\n                <symbol id=\"brave-engine-icon\" viewBox=\"0 -0.5 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path\n                        d=\"m15.013 2 1.716 1.983s1.507-.426 2.218.299a62 62 0 0 1 1.298 1.364l-.46 1.152.585 1.705s-1.723 6.65-1.925 7.463c-.398 1.599-.67 2.217-1.8 3.027a152 152 0 0 1-3.742 2.584c-.287.2-.608.423-.903.423s-.617-.224-.904-.423q-.117-.083-.226-.153a152 152 0 0 1-3.516-2.43c-1.13-.811-1.402-1.43-1.8-3.028-.202-.812-1.925-7.463-1.925-7.463l.586-1.705-.46-1.152s.585-.64 1.297-1.364c.711-.725 2.218-.299 2.218-.299L8.986 2zM7.751 5.241s-2.207 2.719-2.207 3.3c0 .48.19.668.414.89q.07.069.143.146l1.655 1.79.054.057c.165.169.409.418.237.832l-.035.084c-.189.449-.42 1.002-.125 1.563.314.597.853.995 1.199.93.345-.067 1.156-.498 1.454-.696s1.243-.991 1.243-1.295c0-.253-.68-.675-1.01-.88l-.147-.093-.162-.104c-.301-.19-.845-.536-.859-.688-.017-.188-.01-.244.233-.709.051-.099.112-.205.174-.315.232-.405.49-.86.433-1.184-.064-.368-.63-.578-1.107-.757l-.175-.065-.498-.19v-.001a44 44 0 0 1-1.096-.426c-.12-.057-.09-.11.277-.146l.178-.019c.455-.05 1.292-.14 1.7-.024l.264.073c.457.127 1.018.281 1.072.37l.027.042c.052.075.085.123.028.44l-.094.508c-.127.672-.324 1.724-.349 1.96l-.011.095c-.032.263-.053.438.247.508l.078.018c.338.08.834.195 1.014.195.179 0 .675-.116 1.013-.195l.078-.018c.3-.07.279-.245.247-.508l-.01-.095c-.026-.236-.223-1.285-.35-1.957l-.094-.51c-.057-.318-.024-.366.028-.44l.027-.043c.054-.089.615-.243 1.072-.37l.265-.073c.407-.116 1.245-.025 1.699.024l.178.019c.367.035.398.09.277.146-.087.041-.618.244-1.096.426l-.498.19-.174.066c-.479.179-1.043.39-1.108.757-.058.325.202.779.433 1.185.062.109.123.215.175.314.242.465.249.52.232.709-.014.153-.558.497-.86.688-.07.044-.127.08-.16.104l-.148.093c-.33.205-1.01.627-1.01.88 0 .304.945 1.098 1.243 1.295.298.198 1.11.63 1.455.695.345.066.884-.332 1.198-.929.296-.56.064-1.114-.124-1.563l-.036-.084c-.171-.414.072-.663.237-.832l.054-.056 1.655-1.791q.074-.078.144-.146c.223-.222.413-.41.413-.89 0-.581-2.207-3.3-2.207-3.3s-1.863.363-2.114.363c-.2 0-.587-.136-.99-.277l-.307-.107c-.503-.17-.837-.172-.837-.172h.009-.018H12c-.006 0-.34.003-.838.172q-.152.052-.306.107c-.404.141-.79.277-.99.277-.252 0-2.115-.363-2.115-.363m5.688 9.78c-.59-.31-1.325-.575-1.44-.575s-.85.265-1.439.576l-.374.196c-.395.207-.674.354-.78.422-.137.087-.053.251.071.34.125.09 1.797 1.41 1.96 1.556l.065.06c.156.143.356.326.498.326.141 0 .34-.183.497-.326l.066-.06a99 99 0 0 1 1.959-1.555c.124-.09.208-.254.071-.341-.105-.068-.385-.214-.778-.421z\" />\n                </symbol>\n            </svg>\n\n            <svg style=\"display: none;\">\n                <symbol id=\"youtube-engine-icon\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path style=\"transform: scale(0.77); transform-origin: center;\"\n                        d=\"M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z\" />\n                </symbol>\n            </svg>\n\n            <svg style=\"display: none;\">\n                <symbol id=\"gImages-engine-icon\" viewBox=\"0 0 50 50\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path style=\"transform: scale(0.92); transform-origin: center;\"\n                        d=\"M24.844 0A.998.998 0 0 0 24 1v10H12.906c-.25.02-.484.129-.656.313v.03a.472.472 0 0 0-.063.063L.25 24.312A1.001 1.001 0 0 0 1 26h10v11a.994.994 0 0 0 .313.75l13 12A1.001 1.001 0 0 0 26 49V39h11a.994.994 0 0 0 .75-.313l12-13A1.001 1.001 0 0 0 49 24H39V13a.994.994 0 0 0-.313-.75l-13-12a.996.996 0 0 0-.843-.25ZM26 3.313 36.5 13l-9.25 9.25A5.037 5.037 0 0 1 26 18.937v-7.031ZM13 13.5l9.25 9.25A5.037 5.037 0 0 1 18.937 24H3.313Zm12 9.063A7.135 7.135 0 0 0 27.438 25 7.135 7.135 0 0 0 25 27.438 7.135 7.135 0 0 0 22.562 25 7.135 7.135 0 0 0 25 22.562ZM31.063 26h15.625L37 36.5l-9.25-9.25A5.037 5.037 0 0 1 31.063 26Zm-8.313 1.75c.77.887 1.25 2.04 1.25 3.313v15.624L13.5 37Z\" />\n                </symbol>\n            </svg>\n\n            <svg style=\"display: none;\">\n                <symbol id=\"reddit-engine-icon\" viewBox=\"0 0 256 256\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path style=\"transform: scale(1.24); transform-origin: center;\"\n                        d=\"M213.15 129.22c0-10.376-8.391-18.617-18.617-18.617a18.74 18.74 0 0 0-12.97 5.189c-12.818-9.157-30.368-15.107-49.9-15.87l8.544-39.981 27.773 5.95c.307 7.02 6.104 12.667 13.278 12.667 7.324 0 13.275-5.95 13.275-13.278 0-7.324-5.95-13.275-13.275-13.275-5.188 0-9.768 3.052-11.904 7.478l-30.976-6.562c-.916-.154-1.832 0-2.443.458-.763.458-1.22 1.22-1.371 2.136l-9.464 44.558c-19.837.612-37.692 6.562-50.662 15.872a18.74 18.74 0 0 0-12.971-5.188c-10.377 0-18.617 8.391-18.617 18.617 0 7.629 4.577 14.037 10.988 16.939a33.6 33.6 0 0 0-.458 5.646c0 28.686 33.42 52.036 74.621 52.036 41.202 0 74.622-23.196 74.622-52.036a35 35 0 0 0-.458-5.646c6.408-2.902 10.985-9.464 10.985-17.093M85.272 142.495c0-7.324 5.95-13.275 13.278-13.275 7.324 0 13.275 5.95 13.275 13.275s-5.95 13.278-13.275 13.278c-7.327.15-13.278-5.953-13.278-13.278m74.317 35.251c-9.156 9.157-26.553 9.768-31.588 9.768-5.188 0-22.584-.765-31.59-9.768-1.371-1.373-1.371-3.51 0-4.883 1.374-1.371 3.51-1.371 4.884 0 5.8 5.8 18.008 7.782 26.706 7.782s21.058-1.983 26.704-7.782c1.374-1.371 3.51-1.371 4.884 0 1.22 1.373 1.22 3.51 0 4.883m-2.443-21.822c-7.325 0-13.275-5.95-13.275-13.275s5.95-13.275 13.275-13.275c7.327 0 13.277 5.95 13.277 13.275 0 7.17-5.95 13.275-13.277 13.275\" />\n                </symbol>\n            </svg>\n\n            <svg style=\"display: none;\">\n                <symbol id=\"wikipedia-engine-icon\" viewBox=\"0 -0.5 32 32\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path style=\"transform: scale(0.95); transform-origin: center;\"\n                        d=\"M30 9.215a.31.31 0 0 1-.313.308h-1.68l-7.616 16.215a.31.31 0 0 1-.278.18h-.004a.31.31 0 0 1-.28-.172l-3.614-7.168-3.902 7.18a.313.313 0 0 1-.555-.016L4.055 9.523H2.313A.31.31 0 0 1 2 9.215V8.39a.31.31 0 0 1 .313-.309h6.21a.31.31 0 0 1 .313.309v.824a.31.31 0 0 1-.313.308H7.188l5.316 12.262 2.766-5.168-3.508-7.09h-.844a.313.313 0 0 1-.313-.312v-.82c0-.172.141-.313.313-.313h4.598a.31.31 0 0 1 .308.313v.82a.307.307 0 0 1-.308.308h-.813l2.02 4.415 2.402-4.415h-1.473a.31.31 0 0 1-.312-.308v-.82a.31.31 0 0 1 .312-.313h4.465a.31.31 0 0 1 .309.313v.82a.307.307 0 0 1-.309.308h-.98l-3.504 6.372 2.855 5.875L26 9.523h-1.746a.31.31 0 0 1-.313-.308v-.82c0-.172.141-.313.313-.313h5.433a.31.31 0 0 1 .313.313z\" />\n                </symbol>\n            </svg>\n\n            <svg style=\"display: none;\">\n                <symbol id=\"quora-engine-icon\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path style=\"transform: scale(0.67); transform-origin: center;\"\n                        d=\"M7.38.948A11.963 11.963 0 0 1 21.248 19.54l2.41 2.422c.732.736.21 1.99-.828 1.99l-10.71.01a12.52 12.52 0 0 1-.304 0h-.02A11.963 11.963 0 0 1 7.382.95Zm7.322 4.428a7.172 7.172 0 1 0-5.488 13.252 7.172 7.172 0 0 0 5.489-13.252Z\" />\n                </symbol>\n            </svg>\n\n            <!-- ----------search with------------------- -->\n            <div class=\"searchWithCont\" style=\"visibility: hidden;\" id=\"search-with-container\">\n\n                <div class=\"hint bgLightTint\" id=\"searchWithHint\"></div>\n\n                <div class=\"searchEnginesContainer\">\n\n                    <div class=\"search-engine bgLightTint\" data-category=\"search-with\">\n                        <svg width=\"30\" height=\"30\" class=\"search-engine-icon\">\n                            <use href=\"#default-engine-icon\" />\n                        </svg>\n                        <label class=\"engine-name\" id=\"defaultEngine\">Default</label>\n                        <input checked class=\"radio-button\" name=\"search-engine\" type=\"radio\" value=\"engine0\">\n                    </div>\n\n                    <div class=\"search-engine bgLightTint\" data-category=\"search-with\">\n                        <svg width=\"30\" height=\"30\" class=\"search-engine-icon\">\n                            <use href=\"#google-engine-icon\" />\n                        </svg>\n                        <label class=\"engine-name\" id=\"googleEngine\">Google</label>\n                        <input class=\"radio-button\" name=\"search-engine\" type=\"radio\" value=\"engine1\">\n                    </div>\n\n                    <div class=\"search-engine bgLightTint\" data-category=\"search-with\">\n                        <svg width=\"30\" height=\"30\" class=\"search-engine-icon\">\n                            <use href=\"#duck-engine-icon\" />\n                        </svg>\n                        <label class=\"engine-name\" id=\"duckEngine\">Duck</label>\n                        <input class=\"radio-button\" name=\"search-engine\" type=\"radio\" value=\"engine2\">\n                    </div>\n\n                    <div class=\"search-engine bgLightTint\" data-category=\"search-with\">\n                        <svg width=\"30\" height=\"30\" class=\"search-engine-icon\">\n                            <use href=\"#bing-engine-icon\" />\n                        </svg>\n                        <label class=\"engine-name\" id=\"bingEngine\" data-category=\"search-with\">Bing</label>\n                        <input class=\"radio-button\" name=\"search-engine\" type=\"radio\" value=\"engine3\">\n                    </div>\n\n                    <div class=\"search-engine bgLightTint\" data-category=\"search-with\">\n                        <svg width=\"30\" height=\"30\" class=\"search-engine-icon\">\n                            <use href=\"#brave-engine-icon\" />\n                        </svg>\n                        <label class=\"engine-name\" id=\"braveEngine\">Brave</label>\n                        <input class=\"radio-button\" name=\"search-engine\" type=\"radio\" value=\"engine4\">\n                    </div>\n\n                    <div class=\"search-engine bgLightTint\" data-category=\"search-on\">\n                        <svg width=\"30\" height=\"30\" class=\"search-engine-icon\">\n                            <use href=\"#youtube-engine-icon\" />\n                        </svg>\n                        <label class=\"engine-name\" id=\"youtubeEngine\">YouTube</label>\n                        <input class=\"radio-button\" name=\"search-engine\" type=\"radio\" value=\"engine5\">\n                    </div>\n\n                    <div class=\"search-engine bgLightTint\" data-category=\"search-on\">\n                        <svg width=\"30\" height=\"30\" class=\"search-engine-icon\">\n                            <use href=\"#gImages-engine-icon\" />\n                        </svg>\n                        <label class=\"engine-name\" id=\"gImagesEngine\">Images</label>\n                        <input class=\"radio-button\" name=\"search-engine\" type=\"radio\" value=\"engine6\">\n                    </div>\n\n                    <div class=\"search-engine bgLightTint\" data-category=\"search-on\">\n                        <svg width=\"30\" height=\"30\" class=\"search-engine-icon\">\n                            <use href=\"#reddit-engine-icon\" />\n                        </svg>\n                        <label class=\"engine-name\" id=\"redditEngine\">Reddit</label>\n                        <input class=\"radio-button\" name=\"search-engine\" type=\"radio\" value=\"engine7\">\n                    </div>\n\n                    <div class=\"search-engine bgLightTint\" data-category=\"search-on\">\n                        <svg width=\"30\" height=\"30\" class=\"search-engine-icon\">\n                            <use href=\"#wikipedia-engine-icon\" />\n                        </svg>\n                        <label class=\"engine-name\" id=\"wikipediaEngine\">Wikipedia</label>\n                        <input class=\"radio-button\" name=\"search-engine\" type=\"radio\" value=\"engine8\">\n                    </div>\n\n                    <div class=\"search-engine bgLightTint\" data-category=\"search-on\">\n                        <svg width=\"30\" height=\"30\" class=\"search-engine-icon\">\n                            <use href=\"#quora-engine-icon\" />\n                        </svg>\n                        <label class=\"engine-name\" id=\"quoraEngine\">Quora</label>\n                        <input class=\"radio-button\" name=\"search-engine\" type=\"radio\" value=\"engine9\">\n                    </div>\n\n                </div>\n            </div>\n            <!-- ----------end of search with------------- -->\n            <div class=\"quotesCont\" id=\"motivationalQuotesCont\">\n                <div class=\"quotesContainer\">\n                </div>\n                <div class=\"authorWrapper\">\n                    <div class=\"authorName\"><span></span></div>\n                    <div class=\"qtRounder\">\n                        <svg viewBox=\"0 0 30 30\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path class=\"lessDark targeted\" d=\"M30 0L0 0C16.5685 0 30 13.4315 30 30L30 0Z\" />\n                        </svg>\n                    </div>\n                    <div class=\"qtRounder2\">\n                        <svg viewBox=\"0 0 30 30\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path class=\"lessDark targeted\" d=\"M30 0L0 0C16.5685 0 30 13.4315 30 30L30 0Z\" />\n                        </svg>\n                    </div>\n                </div>\n            </div>\n\n        </div>\n        <!-- --------end of rightDiv---------------------- -->\n    </div>\n    <!---End of centerDiv--->\n\n    <!-- ------shortcuts------------------ -->\n    <div id=\"shortcuts-section\">\n        <div class=\"wrapper\">\n            <div id=\"flexMonitor\"></div>\n            <div id=\"defaultMonitor\"></div>\n            <div class=\"shortcutsContainer\" id=\"shortcutsContainer\"></div>\n        </div>\n    </div>\n\n    <!-- --------end of shortcuts------------------ -->\n\n    <!-- -----------AI-Tools------------------ -->\n    <div class=\"aiToolsCont\" id=\"aiToolsCont\">\n\n        <div class=\"hangno\" id=\"aiToolsIcon\">\n            <div class=\"icon\">\n                <svg height=\"100%\" viewBox=\"0 0 280 280\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path id=\"aiIcon\" class=\"accentColor\"\n                        d=\"M152 178c0-14.359 11.641-26 26-26h76c14.359 0 26.275 11.76 23.393 25.827-10.238 49.97-49.596 89.328-99.566 99.566C163.76 280.275 152 268.359 152 254v-76Zm-24 5.26c0 23.163-28.006 34.764-44.385 18.385L8.782 126.811c-5.35-5.35-8.252-12.794-6.994-20.255 8.778-52.04 48.96-93.412 100.382-103.949C116.237-.275 128 11.641 128 26v157.26ZM0 214.74c0-23.163 28.006-34.764 44.385-18.385l83.609 83.609c.004.004.006.01.006.015a.02.02 0 0 1-.021.021H26c-14.36 0-26-11.641-26-26v-39.26ZM152 26c0-14.36 11.641-26 26-26h76c14.359 0 26 11.64 26 26v76c0 14.359-11.641 26-26 26h-76c-14.359 0-26-11.641-26-26V26Z\" />\n                </svg>\n            </div>\n            <div class=\"label\" id=\"ai_tools\">AI Tools</div>\n        </div>\n        <!-- --------tools-------- -->\n\n        <div class=\"toolsCont\" id=\"toolsCont\">\n            <!-- ---------------- -->\n            <a href=\"https://chatgpt.com/\">\n                <div class=\"tIcon\">\n                    <svg height=\"100%\" viewBox=\"0 0 24 24\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <rect class=\"accentColor aiDarkIcons\" width=\"100%\" height=\"100%\" rx=\"50%\" />\n                        <path class=\"bgLightTint notTargeted\" style=\"transform: scale(0.7); transform-origin: center;\"\n                            d=\"M9.205 8.765v-2.26c0-.19.071-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.567 0 .166 0 .356-.024.547l-4.71-2.76a.797.797 0 0 0-.856 0zm10.609 8.801v-5.4c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 0 1 .476 0l4.544 2.617c1.308.761 2.188 2.378 2.188 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.809l-1.95-1.142c-.167-.095-.239-.238-.239-.428V6.006c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.174c-.285.166-.428.404-.428.737v6.898zM12 15.235l-2.795-1.57v-3.33L12 8.765l2.795 1.57v3.33zm1.796 7.23a4.452 4.452 0 0 1-2.712-.927l4.686-2.711c.285-.167.428-.405.428-.738v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 0 1 4.21 6.434v5.423c0 .334.143.571.428.738l5.947 3.449-1.95 1.118a.433.433 0 0 1-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71a.796.796 0 0 0 .857 0l5.97-3.448v2.26c0 .19-.072.333-.238.428l-4.543 2.616c-.619.357-1.356.523-2.117.523Zm5.899 2.83a5.947 5.947 0 0 0 5.827-4.756c2.664-.69 4.377-3.188 4.377-5.733 0-1.665-.714-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.946-5.946-5.946-.642 0-1.26.095-1.88.309A5.961 5.961 0 0 0 10.205.107a5.947 5.947 0 0 0-5.827 4.757C1.713 5.554 0 8.052 0 10.597c0 1.665.714 3.282 1.998 4.448-.119.5-.19.999-.19 1.498 0 3.401 2.759 5.947 5.946 5.947.642 0 1.26-.095 1.88-.31a5.96 5.96 0 0 0 4.162 1.713z\" />\n                    </svg>\n                </div>\n                <div class=\"tLabel\" id=\"chatGPT\">ChatGPT</div>\n            </a>\n            <!-- ---------------- -->\n            <a href=\"https://gemini.google.com/app\">\n                <div class=\"tIcon\">\n                    <svg height=\"100%\" viewBox=\"0 0 24 24\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <rect class=\"accentColor aiDarkIcons\" height=\"100%\" rx=\"50%\" width=\"100%\" />\n                        <path class=\"bgLightTint notTargeted\" style=\"transform: scale(0.66); transform-origin: center;\"\n                            d=\"M21.4 10.73a15.434 15.434 0 0 1-4.855-3.275 15.396 15.396 0 0 1-4.013-7.04.548.548 0 0 0-1.064 0A14.45 14.45 0 0 1 10.73 2.6a15.419 15.419 0 0 1-3.274 4.855A15.441 15.441 0 0 1 2.6 10.729c-.707.304-1.437.551-2.184.74a.548.548 0 0 0 0 1.063 14.45 14.45 0 0 1 2.184.739 15.434 15.434 0 0 1 4.855 3.274 15.396 15.396 0 0 1 4.013 7.04A.55.55 0 0 0 12 24c.252 0 .47-.172.532-.416a14.45 14.45 0 0 1 .739-2.184 15.434 15.434 0 0 1 3.274-4.855 15.396 15.396 0 0 1 7.04-4.013A.55.55 0 0 0 24 12a.548.548 0 0 0-.416-.532 14.45 14.45 0 0 1-2.184-.739\" />\n                    </svg>\n                </div>\n                <div class=\"tLabel\" id=\"gemini\">Gemini</div>\n            </a>\n            <!-- ---------------- -->\n            <a href=\"https://copilot.microsoft.com/\">\n                <div class=\"tIcon\">\n                    <svg height=\"100%\" width=\"100%\" viewBox=\"0 0 30 30\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <rect class=\"accentColor aiDarkIcons\" width=\"100%\" height=\"100%\" rx=\"50%\" />\n                        <path class=\"lessDark\"\n                            d=\"M19.612 7.42a2.1 2.1 0 0 0-2.018-1.512h-.614a2.106 2.106 0 0 0-2.072 1.725l-1.053 5.736.262-.894a2.105 2.105 0 0 1 2.018-1.516h3.57l1.499.582 1.445-.582h-.423a2.1 2.1 0 0 1-2.018-1.512zm-9.007 15.156a2.106 2.106 0 0 0 2.023 1.52h1.307a2.1 2.1 0 0 0 2.103-2.05l.142-5.53-.298 1.013a2.1 2.1 0 0 1-2.018 1.512h-3.602l-1.284-.698-1.392.698h.413c.939 0 1.76.618 2.023 1.52z\" />\n                        <path class=\"bgLightTint notTargeted\"\n                            d=\"M17.505 5.903h-7.29c-2.087 0-3.336 2.752-4.167 5.509-.992 3.262-2.286 7.63 1.453 7.63h3.15a2.11 2.11 0 0 0 2.027-1.527 884.084 884.084 0 0 1 2.263-7.801c.382-1.294.702-2.401 1.191-3.095a1.631 1.631 0 0 1 1.373-.716zM12.5 24.097h7.292c2.085 0 3.334-2.758 4.165-5.51.988-3.263 2.281-7.629-1.458-7.629H19.35c-.942 0-1.77.622-2.027 1.53a841.53 841.53 0 0 1-2.263 7.802c-.382 1.294-.703 2.406-1.192 3.095a1.62 1.62 0 0 1-1.369.711z\" />\n                    </svg>\n                </div>\n                <div class=\"tLabel\" id=\"copilot\">Copilot</div>\n            </a>\n            <!-- ---------------- -->\n            <a href=\"https://claude.ai/new/\">\n                <div class=\"tIcon\">\n                    <svg height=\"100%\" width=\"100%\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <rect class=\"accentColor aiDarkIcons\" height=\"100%\" rx=\"50%\" width=\"100%\" />\n                        <path class=\"bgLightTint notTargeted\" style=\"transform: scale(0.8); transform-origin: center;\"\n                            d=\"m5.92 15.3 3.94-2.2.06-.2-.06-.1h-.2L9 12.76l-2.24-.06-1.96-.1-1.9-.1-.48-.1-.42-.6.04-.3.4-.26.58.04 1.26.1 1.9.12 1.38.08 2.04.24h.32l.04-.14-.1-.08-.08-.08L7.8 10.2 5.68 8.8l-1.12-.82-.6-.4-.3-.4-.12-.84.54-.6.74.06.18.04.74.58 1.6 1.22L9.4 9.2l.3.24.12-.08.02-.06-.14-.22L8.6 7 7.4 4.92l-.54-.86-.14-.52c-.06-.2-.08-.4-.08-.6l.6-.84.36-.1.84.12.32.28.52 1.2.82 1.86 1.3 2.52.4.76.2.68.06.2h.14v-.1l.1-1.44.2-1.74.2-2.24.06-.64.32-.76.6-.4.52.22.4.58-.06.36L14.32 5l-.52 2.42-.3 1.64h.18l.2-.22.82-1.08 1.38-1.72.6-.7.72-.74.46-.36h.86l.62.94-.28.98-.88 1.12-.74.94-1.06 1.42-.64 1.14.06.08h.14l2.4-.52 1.28-.22 1.52-.26.7.32.08.32-.28.68-1.64.4-1.92.4-2.86.66-.04.02.04.06 1.28.12.56.04h1.36l2.52.2.66.4.38.54-.06.4-1.02.52-1.36-.32-3.2-.76-1.08-.26h-.16v.08l.92.9 1.66 1.5 2.12 1.94.1.48-.26.4-.28-.04-1.84-1.4-.72-.6-1.6-1.36h-.1v.14l.36.54 1.96 2.94.1.9-.14.28-.52.2-.54-.12-1.16-1.6-1.2-1.8-.94-1.64-.1.08-.58 6.04-.26.3-.6.24-.5-.4-.28-.6.28-1.24.32-1.6.26-1.28.24-1.58.14-.52v-.04h-.14l-1.2 1.66-1.8 2.46-1.44 1.52-.34.14-.6-.3.06-.56.32-.46 2-2.56 1.2-1.58.8-.92-.02-.1h-.06l-5.28 3.44-.94.12-.4-.4.04-.6.2-.2 1.6-1.1z\" />\n                    </svg>\n                </div>\n                <div class=\"tLabel\" id=\"claude\">Claude</div>\n            </a>\n            <!-- ---------------- -->\n            <a href=\"https://grok.com/\">\n                <div class=\"tIcon\">\n                    <svg height=\"100%\" width=\"100%\" viewBox=\"0 0 50 50\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <rect class=\"accentColor aiDarkIcons\" width=\"100%\" height=\"100%\" rx=\"50%\" />\n                        <path class=\"bgLightTint notTargeted\" style=\"transform: scale(0.7); transform-origin: center;\"\n                            d=\"M47.658 2.057a.997.997 0 0 0-.668.29l-6.11 6.118a.933.933 0 0 0-.132.111L19.146 30.305a.998.998 0 0 0 1.303 1.508l15.08-11.145a.508.508 0 0 1 .424-.092c.148.041.192.15.207.186 1.781 4.296.822 9.188-2.445 12.46-2.893 2.897-6.865 3.964-10.904 2.928a1.004 1.004 0 0 0-.707.082l-5.31 2.752a1.002 1.002 0 0 0-.028 1.762c2.853 1.595 5.941 2.373 8.986 2.373 4.621 0 9.143-1.793 12.592-5.248 4.4-4.404 6.192-10.644 4.81-16.717a.854.854 0 0 0-.021-.12c-1.756-7.565.373-10.497 5.04-16.929l.335-.464a1.001 1.001 0 0 0-.85-1.584zm-21.662 5.08a17.938 17.938 0 0 0-13.06 5.283C7.87 17.493 6.292 25.346 9.01 31.96c1.684 4.099-1.054 6.975-4.227 10.311-1.132 1.19-2.303 2.42-3.262 3.74a1.001 1.001 0 0 0 1.477 1.335l14.338-12.82a1 1 0 0 0 .098-1.53c-2.685-2.567-3.276-5.512-3.3-7.531-.034-3.106 1.221-6.169 3.45-8.4 2.497-2.503 6.253-3.734 9.809-3.21.203.028.417-.004.605-.101l5.691-2.953a1 1 0 0 0-.023-1.787 13.646 13.646 0 0 0-1.209-.526 17.88 17.88 0 0 0-6.46-1.351z\" />\n                    </svg>\n                </div>\n                <div class=\"tLabel\" id=\"grok\">Grok</div>\n            </a>\n            <!-- ---------------- -->\n            <a href=\"https://www.meta.ai/\">\n                <div class=\"tIcon\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"100%\" width=\"100%\" viewBox=\"0 0 24 24\">\n                        <rect class=\"accentColor aiDarkIcons\" width=\"100%\" height=\"100%\" rx=\"50%\" />\n                        <path class=\"bgLightTint notTargeted\" style=\"transform: scale(0.72); transform-origin: center;\"\n                            d=\"M6.915 4.03c-1.968 0-3.683 1.28-4.871 3.113C.704 9.208 0 11.883 0 14.449c0 .706.07 1.369.21 1.973a7 7 0 0 0 .265.86a5.3 5.3 0 0 0 .371.761c.696 1.159 1.818 1.927 3.593 1.927c1.497 0 2.633-.671 3.965-2.444c.76-1.012 1.144-1.626 2.663-4.32l.756-1.339l.186-.325c.061.1.121.196.183.3l2.152 3.595c.724 1.21 1.665 2.556 2.47 3.314c1.046.987 1.992 1.22 3.06 1.22c1.075 0 1.876-.355 2.455-.843a3.7 3.7 0 0 0 .81-.973c.542-.939.861-2.127.861-3.745c0-2.72-.681-5.357-2.084-7.45c-1.282-1.912-2.957-2.93-4.716-2.93c-1.047 0-2.088.467-3.053 1.308c-.652.57-1.257 1.29-1.82 2.05c-.69-.875-1.335-1.547-1.958-2.056c-1.182-.966-2.315-1.303-3.454-1.303zm10.16 2.053c1.147 0 2.188.758 2.992 1.999c1.132 1.748 1.647 4.195 1.647 6.4c0 1.548-.368 2.9-1.839 2.9c-.58 0-1.027-.23-1.664-1.004c-.496-.601-1.343-1.878-2.832-4.358l-.617-1.028a45 45 0 0 0-1.255-1.98c.07-.109.141-.224.211-.327c1.12-1.667 2.118-2.602 3.358-2.602zm-10.201.553c1.265 0 2.058.791 2.675 1.446c.307.327.737.871 1.234 1.579l-1.02 1.566c-.757 1.163-1.882 3.017-2.837 4.338c-1.191 1.649-1.81 1.817-2.486 1.817c-.524 0-1.038-.237-1.383-.794c-.263-.426-.464-1.13-.464-2.046c0-2.221.63-4.535 1.66-6.088c.454-.687.964-1.226 1.533-1.533a2.26 2.26 0 0 1 1.088-.285\" />\n                    </svg>\n                </div>\n                <div class=\"tLabel\" id=\"metaAI\">Meta AI</div>\n            </a>\n            <!-- ---------------- -->\n            <a href=\"https://chat.deepseek.com/\">\n                <div class=\"tIcon\">\n                    <svg height=\"100%\" width=\"100%\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <rect class=\"accentColor aiDarkIcons\" width=\"100%\" height=\"100%\" rx=\"50%\" />\n                        <path class=\"bgLightTint notTargeted\" style=\"transform: scale(0.7); transform-origin: center;\"\n                            d=\"M23.748 4.482c-.254-.124-.364.113-.512.234-.051.039-.094.09-.137.136-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.156-.708-.311-.955-.65-.172-.241-.219-.51-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.093.172.187.129.323-.082.28-.18.552-.266.833-.055.179-.137.217-.329.14a5.526 5.526 0 01-1.736-1.18c-.857-.828-1.631-1.742-2.597-2.458a11.365 11.365 0 00-.689-.471c-.985-.957.13-1.743.388-1.836.27-.098.093-.432-.779-.428-.872.004-1.67.295-2.687.684a3.055 3.055 0 01-.465.137 9.597 9.597 0 00-2.883-.102c-1.885.21-3.39 1.102-4.497 2.623C.082 8.606-.231 10.684.152 12.85c.403 2.284 1.569 4.175 3.36 5.653 1.858 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.133-.284 4.994-1.86.47.234.962.327 1.78.397.63.059 1.236-.03 1.705-.128.735-.156.684-.837.419-.961-2.155-1.004-1.682-.595-2.113-.926 1.096-1.296 2.746-2.642 3.392-7.003.05-.347.007-.565 0-.845-.004-.17.035-.237.23-.256a4.173 4.173 0 001.545-.475c1.396-.763 1.96-2.015 2.093-3.517.02-.23-.004-.467-.247-.588zM11.581 18c-2.089-1.642-3.102-2.183-3.52-2.16-.392.024-.321.471-.235.763.09.288.207.486.371.739.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.167-1.361-.802-2.5-1.86-3.301-3.307-.774-1.393-1.224-2.887-1.298-4.482-.02-.386.093-.522.477-.592a4.696 4.696 0 011.529-.039c2.132.312 3.946 1.265 5.468 2.774.868.86 1.525 1.887 2.202 2.891.72 1.066 1.494 2.082 2.48 2.914.348.292.625.514.891.677-.802.09-2.14.11-3.054-.614zm1-6.44a.306.306 0 01.415-.287.302.302 0 01.2.288.306.306 0 01-.31.307.303.303 0 01-.304-.308zm3.11 1.596c-.2.081-.399.151-.59.16a1.245 1.245 0 01-.798-.254c-.274-.23-.47-.358-.552-.758a1.73 1.73 0 01.016-.588c.07-.327-.008-.537-.239-.727-.187-.156-.426-.199-.688-.199a.559.559 0 01-.254-.078c-.11-.054-.2-.19-.114-.358.028-.054.16-.186.192-.21.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.391.451.462.576.685.914.176.265.336.537.445.848.067.195-.019.354-.25.452z\" />\n                    </svg>\n                </div>\n                <div class=\"tLabel\" id=\"deepseek\">DeepSeek</div>\n            </a>\n            <!-- ---------------- -->\n            <a href=\"https://chat.qwen.ai/\">\n                <div class=\"tIcon\">\n                    <svg height=\"100%\" width=\"100%\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <rect class=\"accentColor aiDarkIcons\" width=\"100%\" height=\"100%\" rx=\"50%\" />\n                        <path class=\"bgLightTint notTargeted\" style=\"transform: scale(0.72); transform-origin: center;\"\n                            d=\"M12.604 1.34c.393.69.784 1.382 1.174 2.075a.18.18 0 00.157.091h5.552c.174 0 .322.11.446.327l1.454 2.57c.19.337.24.478.024.837-.26.43-.513.864-.76 1.3l-.367.658c-.106.196-.223.28-.04.512l2.652 4.637c.172.301.111.494-.043.77-.437.785-.882 1.564-1.335 2.34-.159.272-.352.375-.68.37-.777-.016-1.552-.01-2.327.016a.099.099 0 00-.081.05 575.097 575.097 0 01-2.705 4.74c-.169.293-.38.363-.725.364-.997.003-2.002.004-3.017.002a.537.537 0 01-.465-.271l-1.335-2.323a.09.09 0 00-.083-.049H4.982c-.285.03-.553-.001-.805-.092l-1.603-2.77a.543.543 0 01-.002-.54l1.207-2.12a.198.198 0 000-.197 550.951 550.951 0 01-1.875-3.272l-.79-1.395c-.16-.31-.173-.496.095-.965.465-.813.927-1.625 1.387-2.436.132-.234.304-.334.584-.335a338.3 338.3 0 012.589-.001.124.124 0 00.107-.063l2.806-4.895a.488.488 0 01.422-.246c.524-.001 1.053 0 1.583-.006L11.704 1c.341-.003.724.032.9.34zm-3.432.403a.06.06 0 00-.052.03L6.254 6.788a.157.157 0 01-.135.078H3.253c-.056 0-.07.025-.041.074l5.81 10.156c.025.042.013.062-.034.063l-2.795.015a.218.218 0 00-.2.116l-1.32 2.31c-.044.078-.021.118.068.118l5.716.008c.046 0 .08.02.104.061l1.403 2.454c.046.081.092.082.139 0l5.006-8.76.783-1.382a.055.055 0 01.096 0l1.424 2.53a.122.122 0 00.107.062l2.763-.02a.04.04 0 00.035-.02.041.041 0 000-.04l-2.9-5.086a.108.108 0 010-.113l.293-.507 1.12-1.977c.024-.041.012-.062-.035-.062H9.2c-.059 0-.073-.026-.043-.077l1.434-2.505a.107.107 0 000-.114L9.225 1.774a.06.06 0 00-.053-.031zm6.29 8.02c.046 0 .058.02.034.06l-.832 1.465-2.613 4.585a.056.056 0 01-.05.029.058.058 0 01-.05-.029L8.498 9.841c-.02-.034-.01-.052.028-.054l.216-.012 6.722-.012z\" />\n                    </svg>\n                </div>\n                <div class=\"tLabel\" id=\"qwen\">Qwen</div>\n            </a>\n            <!-- ---------------- -->\n            <a href=\"https://www.perplexity.ai/\">\n                <div class=\"tIcon\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"100%\" width=\"100%\" viewBox=\"0 0 24 24\">\n                        <circle class=\"accentColor aiDarkIcons\" cx=\"50%\" cy=\"50%\" r=\"50%\" />\n                        <path class=\"bgLightTint notTargeted\" style=\"transform: scale(0.8); transform-origin: center;\"\n                            d=\"m5.735 2l5.695 5.247V2.012h1.109v5.259L18.259 2v5.983h2.349v8.629h-2.342v5.327l-5.727-5.032v5.09h-1.11V16.99L5.742 22v-5.388H3.393v-8.63h2.342zm4.86 7.078H4.5v6.439h1.24v-2.031zM6.85 13.972v5.585l4.58-4.034V9.81zm5.72 1.497l4.588 4.03v-2.887h-.006v-2.646l-4.582-4.16zm5.696.048H19.5v-6.44h-6.047l4.814 4.363zm-1.115-7.534V4.519l-3.76 3.464zm-6.548 0l-3.76-3.464v3.464z\" />\n                    </svg>\n                </div>\n                <div class=\"tLabel\" id=\"perplexity\">Perplexity</div>\n            </a>\n            <!-- ---------------- -->\n            <a href=\"https://firefly.adobe.com/\">\n                <div class=\"tIcon\">\n                    <svg height=\"100%\" viewBox=\"0 0 24 24\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <rect class=\"accentColor aiDarkIcons\" width=\"100%\" height=\"100%\" rx=\"50%\" />\n                        <path class=\"bgLightTint notTargeted\" style=\"transform: scale(0.55); transform-origin: center;\"\n                            d=\"m21.512 6.098-1.849-.417a.741.741 0 0 0-.68.18l-1.39 1.285c-.548.507-1.424.008-1.26-.72l.417-1.85a.735.735 0 0 0-.18-.679l-1.285-1.391c-.507-.548 0-1.416.729-1.252l1.849.417c.237.058.499-.008.68-.18l1.39-1.284c.548-.508 1.424-.009 1.26.72l-.417 1.849c-.057.245.008.5.18.68l1.285 1.39c.507.548 0 1.416-.729 1.252zM5.76 23.738c0 .18-.081.262-.262.262h-3.74c-.146 0-.204-.106-.204-.262V4.402c0-.172.058-.237.23-.237H13.77c.205 0 .254.057.287.253l.335 3.265c.033.18-.057.262-.253.262H5.76v4.599h7.553c.172 0 .254.057.254.237v3.306c0 .18-.09.237-.237.237H5.76ZM16.635 9.207c0-.172.082-.254.254-.254h3.723c.197 0 .254.05.254.246v14.516c0 .197-.057.278-.278.278h-3.65c-.204 0-.303-.09-.303-.286z\" />\n                    </svg>\n                </div>\n                <div class=\"tLabel\" id=\"firefly\">Adobe Firefly</div>\n            </a>\n        </div>\n    </div>\n\n    <!-- Settings Modal (hidden by default) -->\n    <div id=\"aiToolsSettingsModal\" class=\"ai-settings-modal\" style=\"display: none;\">\n        <div class=\"ai-modal-content\">\n            <div class=\"ai-modal-header\">\n                <h3 id=\"aiSettingsHeader\">AI Tools Settings</h3>\n                <div id=\"closeAISettingsBtn\" class=\"ai-close-button\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n                        stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                        <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n                        <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n                    </svg>\n                </div>\n            </div>\n            <p id=\"aiSettingsIntro\">Select which AI tools to display</p>\n            <div class=\"ai-tools-list\">\n                <form id=\"aiToolsForm\">\n                    <!-- These checkboxes will be populated/managed by JavaScript -->\n                </form>\n            </div>\n            <div class=\"ai-modal-footer\">\n                <button id=\"resetAISettingsBtn\" class=\"ai-reset-button\">Reset</button>\n                <button id=\"saveAISettingsBtn\" class=\"ai-save-button\">Save</button>\n            </div>\n        </div>\n    </div>\n\n    <!-- Modal Overlay (hidden by default) -->\n    <div id=\"aiToolsSettingsOverlay\" class=\"ai-modal-overlay\" style=\"display: none;\"></div>\n    <!-- ------------ end of AI-Tools------------------ -->\n\n    <!-- -------------- Footer Toast ------------------ -->\n    <div id=\"chromeFooterToast\" class=\"liquidGlass-toast\">\n\n        <!-- Horizontal timer bar -->\n        <div class=\"toast-timer\">\n            <div class=\"toast-timer-bar\" id=\"toastProgressBar\"></div>\n        </div>\n\n        <div class=\"liquidGlass-wrapper\">\n\n            <!-- Liquid Glass Layers -->\n            <div class=\"liquidGlass-effect\"></div>\n            <div class=\"liquidGlass-tint\"></div>\n            <div class=\"liquidGlass-shine\"></div>\n\n            <!-- Content -->\n            <div class=\"toast-content\">\n                <!-- Vertical Bar -->\n                <div class=\"toast-bar-vertical\"></div>\n\n                <div class=\"toast-body\">\n                    <div class=\"toast-title\" id=\"footerToastTitle\">Seeing a banner at the bottom?</div>\n                    <div class=\"toast-message\" id=\"footerToastMessage\">To hide it, right-click it and select 'Hide\n                        Footer on New Tab Page'.\n                    </div>\n                </div>\n            </div>\n\n            <button class=\"toast-close\" id=\"toastClose\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n                    stroke-width=\"2.33\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                    <line x1=\"20\" y1=\"4\" x2=\"4\" y2=\"20\"></line>\n                    <line x1=\"4\" y1=\"4\" x2=\"20\" y2=\"20\"></line>\n                </svg>\n            </button>\n        </div>\n    </div>\n\n    <!-- Liquid Distortion Filter -->\n    <svg width=\"0\" height=\"0\">\n        <filter id=\"glass-distortion\">\n            <feTurbulence type=\"fractalNoise\" baseFrequency=\"0.8\" numOctaves=\"3\" result=\"noise\" />\n            <feDisplacementMap in=\"SourceGraphic\" in2=\"noise\" scale=\"14\" />\n        </filter>\n    </svg>\n\n    <!-- ------Menu-bar----------- -->\n    <div class=\"menuBar\" id=\"menuBar\" style=\"display: none;\">\n        <div class=\"menuCont\" id=\"menuCont\">\n            <div class=\"topRounder\">\n                <svg viewBox=\"0 0 30 30\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path class=\"lessDark\" d=\"M30 0L0 0C16.5685 0 30 13.4315 30 30L30 0Z\" />\n                </svg>\n            </div>\n            <!-- ---end of rounder--- -->\n            <div class=\"topDiv\">\n                <h1>Material You New Tab</h1>\n            </div>\n            <div class=\"optCont\" id=\"optCont\">\n                <div class=\"page\" id=\"overviewPage\">\n                    <div class=\"tilesCont\">\n\n                        <!-- ----tiles----------- -->\n                        <a class=\"tiles\" href=\"https://github.com/prem-k-r/MaterialYouNewTab\">\n                            <div class=\"icon\">\n                                <svg height=\"100%\" viewBox=\"0 0 20 20\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\">\n                                    <path id=\"githab\" class=\"bgLightTint notTargeted\"\n                                        d=\"M10 0C4.475 0 0 4.588 0 10.253c0 4.537 2.862 8.369 6.838 9.727.5.09.687-.218.687-.487 0-.243-.013-1.05-.013-1.91C5 18.059 4.35 16.957 4.15 16.38c-.113-.295-.6-1.205-1.025-1.448-.35-.192-.85-.667-.012-.68.787-.012 1.35.744 1.537 1.052.9 1.55 2.337 1.115 2.913.845.087-.666.35-1.115.637-1.371-2.225-.256-4.55-1.14-4.55-5.062 0-1.115.387-2.038 1.025-2.756-.1-.256-.45-1.307.1-2.717 0 0 .837-.269 2.75 1.051.8-.23 1.65-.346 2.5-.346.85 0 1.7.115 2.5.346 1.912-1.333 2.75-1.05 2.75-1.05.55 1.409.2 2.46.1 2.716.637.718 1.025 1.628 1.025 2.756 0 3.934-2.337 4.806-4.563 5.062.363.32.675.936.675 1.897 0 1.371-.012 2.473-.012 2.82 0 .269.188.589.688.486a10.037 10.037 0 0 0 4.932-3.74A10.445 10.445 0 0 0 20 10.253C20 4.588 15.525 0 10 0Z\" />\n                                </svg>\n\n                            </div>\n                            <span id=\"github\">Github</span>\n                        </a>\n                        <!-- -----end of tiles-------- -->\n                        <!-- ----tiles----------- -->\n                        <a class=\"tiles\" href=\"https://prem-k-r.github.io/MaterialYouNewTab/docs/feedback.html\">\n                            <div class=\"icon\">\n                                <svg height=\"100%\" viewBox=\"0 0 18 17\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\">\n                                    <path id=\"sujhaw\" class=\"bgLightTint notTargeted\" clip-rule=\"evenodd\"\n                                        d=\"M10.35 0c2.029 0 3.975.801 5.41 2.228A7.583 7.583 0 0 1 18 7.605a7.583 7.583 0 0 1-2.24 5.378 7.673 7.673 0 0 1-5.41 2.227H9.9v.886a.899.899 0 0 1-.562.835.915.915 0 0 1-.348.069c-2.214-.002-4.457-.736-6.159-2.24C1.114 13.24.001 10.983 0 8.06v-.455c0-2.017.806-3.951 2.24-5.377A7.673 7.673 0 0 1 7.65 0h2.7Zm-4.5 6.263c-.358 0-.701.142-.955.393a1.338 1.338 0 0 0 0 1.898 1.354 1.354 0 0 0 1.91 0 1.338 1.338 0 0 0 0-1.898 1.354 1.354 0 0 0-.955-.393Zm6.3 0c-.358 0-.701.142-.955.393a1.338 1.338 0 0 0 0 1.898 1.354 1.354 0 0 0 1.91 0 1.338 1.338 0 0 0 0-1.898 1.354 1.354 0 0 0-.955-.393Z\"\n                                        fill-rule=\"evenodd\" />\n                                </svg>\n                            </div>\n                            <span id=\"feedback\">Feedback</span>\n                        </a>\n                        <!-- -----end of tiles-------- -->\n\n                    </div>\n                    <!-- end of tilesCont -->\n\n                    <div class=\"toggleTextsCont\">\n\n                        <div class=\"section expanded\">\n                            <div class=\"sectionOuter\">\n                                <div class=\"sectionHeader\" role=\"button\">\n                                    <span class=\"sectionTitle\" id=\"shortcutsSectionTitle\">Shortcuts</span>\n                                    <span class=\"sectionChevron\"></span>\n                                </div>\n\n                                <div class=\"sectionInner\">\n                                    <div class=\"ttcont\">\n                                        <div class=\"texts\">\n                                            <div class=\"bigText\" id=\"shortcutsText\">Shortcuts</div>\n                                            <div class=\"infoText\" id=\"enableShortcutsText\">Show saved shortcuts</div>\n                                        </div>\n                                        <label class=\"switch\">\n                                            <input id=\"shortcutsCheckbox\" type=\"checkbox\">\n                                            <span class=\"toggle\"></span>\n                                        </label>\n                                    </div>\n\n                                    <div class=\"ttcont\" id=\"shortcutEditField\">\n                                        <div class=\"texts\">\n                                            <div class=\"bigText\" id=\"editShortcutsText\">Edit Shortcuts</div>\n                                            <div class=\"infoText\" id=\"shortcutsInfoText\">Choose which shortcuts get\n                                                shown</div>\n                                        </div>\n                                        <label class=\"switch\">\n                                            <button id=\"shortcutEditButton\">\n                                                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\n                                                    viewBox=\"0 0 24 24\"\n                                                    style=\"transform: scale(1.1); transform-origin: center;\">\n                                                    <path\n                                                        d=\"M12 21q-.425 0-.712-.288T11 20v-4q0-.425.288-.712T12 15t.713.288T13 16v1h7q.425 0 .713.288T21 18t-.288.713T20 19h-7v1q0 .425-.288.713T12 21m-8-2q-.425 0-.712-.288T3 18t.288-.712T4 17h4q.425 0 .713.288T9 18t-.288.713T8 19zm4-4q-.425 0-.712-.288T7 14v-1H4q-.425 0-.712-.288T3 12t.288-.712T4 11h3v-1q0-.425.288-.712T8 9t.713.288T9 10v4q0 .425-.288.713T8 15m4-2q-.425 0-.712-.288T11 12t.288-.712T12 11h8q.425 0 .713.288T21 12t-.288.713T20 13zm4-4q-.425 0-.712-.288T15 8V4q0-.425.288-.712T16 3t.713.288T17 4v1h3q.425 0 .713.288T21 6t-.288.713T20 7h-3v1q0 .425-.288.713T16 9M4 7q-.425 0-.712-.288T3 6t.288-.712T4 5h8q.425 0 .713.288T13 6t-.288.713T12 7z\" />\n                                                </svg>\n                                            </button>\n                                        </label>\n                                    </div>\n\n                                    <div class=\"ttcont\" id=\"adaptiveIconField\">\n                                        <div class=\"texts\">\n                                            <div class=\"bigText\" id=\"adaptiveIconText\">Adaptive Icons</div>\n                                            <div class=\"infoText\" id=\"adaptiveIconInfoText\">Shortcut icons will match\n                                                the theme</div>\n                                        </div>\n                                        <label class=\"switch\">\n                                            <input id=\"adaptiveIconToggle\" type=\"checkbox\">\n                                            <span class=\"toggle\"></span>\n                                        </label>\n                                    </div>\n\n                                </div>\n                            </div>\n                        </div>\n\n                        <!-- ---🟡--- -->\n\n                        <div class=\"section expanded\">\n                            <div class=\"sectionOuter\">\n                                <div class=\"sectionHeader\" role=\"button\">\n                                    <span class=\"sectionTitle\" id=\"personalizationSectionTitle\">Personalization</span>\n                                    <span class=\"sectionChevron\"></span>\n                                </div>\n\n                                <div class=\"sectionInner\">\n                                    <div class=\"ttcont\">\n                                        <div class=\"texts\">\n                                            <div class=\"bigText\" id=\"bookmarksText\">Bookmarks</div>\n                                            <div class=\"infoText\" id=\"bookmarksInfo\">Show bookmarks sidebar</div>\n                                        </div>\n                                        <label class=\"switch\">\n                                            <input id=\"bookmarksCheckbox\" type=\"checkbox\">\n                                            <span class=\"toggle\"></span>\n                                        </label>\n                                    </div>\n\n                                    <div class=\"ttcont\">\n                                        <div class=\"texts\">\n                                            <div class=\"bigText\" id=\"ai_tools_button\">AI Tools</div>\n                                            <div class=\"infoText\" id=\"enable_ai_tools\">Show shortcuts for AI tools</div>\n                                        </div>\n                                        <label class=\"switch\">\n                                            <input id=\"aiToolsCheckbox\" type=\"checkbox\">\n                                            <span class=\"toggle\"></span>\n                                        </label>\n                                    </div>\n\n                                    <div class=\"ttcont\" id=\"aiToolsEditField\">\n                                        <div class=\"texts\">\n                                            <div class=\"bigText\" id=\"aiToolsSettingsText\">AI Tools Settings</div>\n                                            <div class=\"infoText\" id=\"aiToolsSettingsInfo\">Select which AI tools to\n                                                display</div>\n                                        </div>\n                                        <label class=\"switch\">\n                                            <button id=\"aiToolsEditButton\">\n                                                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\n                                                    viewBox=\"0 0 24 24\"\n                                                    style=\"transform: scale(1.1); transform-origin: center;\">\n                                                    <path\n                                                        d=\"M12 21q-.425 0-.712-.288T11 20v-4q0-.425.288-.712T12 15t.713.288T13 16v1h7q.425 0 .713.288T21 18t-.288.713T20 19h-7v1q0 .425-.288.713T12 21m-8-2q-.425 0-.712-.288T3 18t.288-.712T4 17h4q.425 0 .713.288T9 18t-.288.713T8 19zm4-4q-.425 0-.712-.288T7 14v-1H4q-.425 0-.712-.288T3 12t.288-.712T4 11h3v-1q0-.425.288-.712T8 9t.713.288T9 10v4q0 .425-.288.713T8 15m4-2q-.425 0-.712-.288T11 12t.288-.712T12 11h8q.425 0 .713.288T21 12t-.288.713T20 13zm4-4q-.425 0-.712-.288T15 8V4q0-.425.288-.712T16 3t.713.288T17 4v1h3q.425 0 .713.288T21 6t-.288.713T20 7h-3v1q0 .425-.288.713T16 9M4 7q-.425 0-.712-.288T3 6t.288-.712T4 5h8q.425 0 .713.288T13 6t-.288.713T12 7z\" />\n                                                </svg>\n                                            </button>\n                                        </label>\n                                    </div>\n\n                                    <div class=\"ttcont\">\n                                        <div class=\"texts\">\n                                            <div class=\"bigText\" id=\"googleAppsMenuText\">Google Apps</div>\n                                            <div class=\"infoText\" id=\"googleAppsMenuInfo\">Show shortcuts for Google Apps\n                                            </div>\n                                        </div>\n                                        <label class=\"switch\">\n                                            <input id=\"googleAppsCheckbox\" type=\"checkbox\">\n                                            <span class=\"toggle\"></span>\n                                        </label>\n                                    </div>\n\n                                    <div class=\"ttcont\">\n                                        <div class=\"texts\">\n                                            <div class=\"bigText\" id=\"todoListText\">To Do List</div>\n                                            <div class=\"infoText\" id=\"todoListInfo\">Show a daily To Do list</div>\n                                        </div>\n                                        <label class=\"switch\">\n                                            <input id=\"todoListCheckbox\" type=\"checkbox\">\n                                            <span class=\"toggle\"></span>\n                                        </label>\n                                    </div>\n\n                                </div>\n                            </div>\n                        </div>\n\n                        <!-- ---🟡--- -->\n\n                        <div class=\"section expanded\">\n                            <div class=\"sectionOuter\">\n                                <div class=\"sectionHeader\" role=\"button\">\n                                    <span class=\"sectionTitle\" id=\"clockSectionTitle\">Clock</span>\n                                    <span class=\"sectionChevron\"></span>\n                                </div>\n\n                                <div class=\"sectionInner\">\n                                    <div class=\"ttcont\" id=\"clockHidden\">\n                                        <div class=\"texts\">\n                                            <div class=\"bigText\" id=\"hideClockBox\">Hide Clock</div>\n                                            <div class=\"infoText\" id=\"hideClockBoxInfo\">Show or hide the clock and date\n                                            </div>\n                                        </div>\n                                        <label class=\"switch\">\n                                            <input id=\"hideClock\" type=\"checkbox\">\n                                            <span class=\"toggle\"></span>\n                                        </label>\n                                    </div>\n\n                                    <div class=\"clockOptions\">\n                                        <div class=\"ttcont\">\n                                            <div class=\"texts\">\n                                                <div class=\"bigText\" id=\"digitalclocktitle\">Digital Clock</div>\n                                                <div class=\"infoText\" id=\"digitalclockinfo\">Switch to the digital clock\n                                                </div>\n                                            </div>\n                                            <label class=\"switch\">\n                                                <input id=\"digitalCheckbox\" type=\"checkbox\">\n                                                <span class=\"toggle\"></span>\n                                            </label>\n                                        </div>\n\n                                        <div class=\"ttcont\" id=\"timeformatField\">\n                                            <div class=\"texts\">\n                                                <div class=\"bigText\" id=\"timeformattitle\">12-Hour Format</div>\n                                                <div class=\"infoText\" id=\"timeformatinfo\">Use 12-hour time format</div>\n                                            </div>\n                                            <label class=\"switch\">\n                                                <input id=\"12hourcheckbox\" type=\"checkbox\">\n                                                <span class=\"toggle\"></span>\n                                            </label>\n                                        </div>\n\n                                        <div class=\"ttcont\" id=\"greetingField\">\n                                            <div class=\"texts\">\n                                                <div class=\"bigText\" id=\"greetingtitle\">Greeting</div>\n                                                <div class=\"infoText\" id=\"greetinginfo\">Show greeting below custom text\n                                                </div>\n                                            </div>\n                                            <label class=\"switch\">\n                                                <input id=\"greetingcheckbox\" type=\"checkbox\">\n                                                <span class=\"toggle\"></span>\n                                            </label>\n                                        </div>\n\n                                        <div class=\"ttcont\">\n                                            <div class=\"texts\">\n                                                <div class=\"bigText\" id=\"userTextTitle\">Customizable Text</div>\n                                                <div class=\"infoText\" id=\"userTextInfo\">Show custom text below the clock\n                                                </div>\n                                            </div>\n                                            <label class=\"switch\">\n                                                <input id=\"userTextCheckbox\" type=\"checkbox\">\n                                                <span class=\"toggle\"></span>\n                                            </label>\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n\n                        <!-- ---🟡--- -->\n\n                        <div class=\"section expanded\">\n                            <div class=\"sectionOuter\">\n                                <div class=\"sectionHeader\" role=\"button\">\n                                    <span class=\"sectionTitle\" id=\"searchSectionTitle\">Search</span>\n                                    <span class=\"sectionChevron\"></span>\n                                </div>\n\n                                <div class=\"sectionInner\">\n                                    <div class=\"ttcont\">\n                                        <div class=\"texts\">\n                                            <div class=\"bigText\" id=\"micIconTitle\">Hide Microphone Icon</div>\n                                            <div class=\"infoText\" id=\"micIconInfo\">If voice typing is not working</div>\n                                        </div>\n                                        <label class=\"switch\">\n                                            <input id=\"micIconCheckbox\" type=\"checkbox\">\n                                            <span class=\"toggle\"></span>\n                                        </label>\n                                    </div>\n\n                                    <div class=\"ttcont\">\n                                        <div class=\"texts\">\n                                            <div class=\"bigText\" id=\"hideSearchWith\">Hide Search Engines</div>\n                                            <div class=\"infoText\" id=\"hideSearchWithInfo\">Switch between search engines\n                                                by clicking its icon</div>\n                                        </div>\n                                        <label class=\"switch\">\n                                            <input id=\"shortcut_switchcheckbox\" type=\"checkbox\">\n                                            <span class=\"toggle\"></span>\n                                        </label>\n                                    </div>\n\n                                    <div class=\"ttcont\" id=\"quotesToggle\">\n                                        <div class=\"texts\">\n                                            <div class=\"bigText\" id=\"motivationalQuotesText\">Motivational Quotes</div>\n                                            <div class=\"infoText\" id=\"motivationalQuotesInfo\">Show quotes below the\n                                                searchbar</div>\n                                        </div>\n                                        <label class=\"switch\">\n                                            <input id=\"motivationalQuotesCheckbox\" type=\"checkbox\">\n                                            <span class=\"toggle\"></span>\n                                        </label>\n                                    </div>\n\n                                    <div class=\"quotesOptions\">\n                                        <div class=\"ttcont\" id=\"newQuoteOnRefreshToggle\">\n                                            <div class=\"texts\">\n                                                <div class=\"bigText\" id=\"newQuoteOnRefreshText\">Daily Quote</div>\n                                                <div class=\"infoText\" id=\"newQuoteOnRefreshInfo\">Show one quote per day instead of refreshing each time</div>\n                                            </div>\n                                            <label class=\"switch\">\n                                                <input id=\"newQuoteOnRefreshCheckbox\" type=\"checkbox\">\n                                                <span class=\"toggle\"></span>\n                                            </label>\n                                        </div>\n                                    </div>\n\n                                    <div class=\"ttcont\" id=\"searchSuggestionsHeader\">\n                                        <div class=\"texts\">\n                                            <div class=\"bigText\" id=\"search_suggestions_button\">Search Suggestions</div>\n                                            <div class=\"infoText\" id=\"search_suggestions_text\">Enable search suggestions\n                                            </div>\n                                        </div>\n                                        <label class=\"switch\">\n                                            <input id=\"searchsuggestionscheckbox\" type=\"checkbox\" checked>\n                                            <span class=\"toggle\"></span>\n                                        </label>\n                                    </div>\n\n                                    <div class=\"proxyOptions\">\n                                        <div class=\"ttcont\" id=\"proxybypassField\">\n                                            <div class=\"texts\">\n                                                <div class=\"bigText\" id=\"useproxytitletext\">Proxy Bypass</div>\n                                                <div class=\"infoText\" id=\"useproxyText\">If search suggestions aren't\n                                                    working</div>\n                                            </div>\n                                            <label class=\"switch\">\n                                                <input id=\"useproxyCheckbox\" type=\"checkbox\">\n                                                <span class=\"toggle\"></span>\n                                            </label>\n                                        </div>\n\n                                        <div class=\"ttcont unflex\" id=\"proxyField\">\n                                            <div class=\"texts\">\n                                                <div class=\"bigText\" id=\"ProxyText\">CORS Bypass Proxy</div>\n                                                <div class=\"infoText\" id=\"ProxySubtext\">Add your own CORS bypass proxy\n                                                </div>\n                                            </div>\n                                            <input id=\"userproxy\" placeholder=\"https://mynt-proxy.rhythmcorehq.com\"\n                                                type=\"text\">\n                                            <div class=\"bottom\">\n                                                <a href=\"https://github.com/Minuga-RC/MYNT-CORS-Bypass-Proxy\"\n                                                    id=\"HostproxyButton\" target=\"_blank\">Host your own proxy</a>\n                                                <button class=\"savebtn\" id=\"saveproxy\">Save</button>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n\n                        <!-- ---🟡--- -->\n\n                        <div class=\"section expanded\">\n                            <div class=\"sectionOuter\">\n                                <div class=\"sectionHeader\" role=\"button\">\n                                    <span class=\"sectionTitle\" id=\"weatherSectionTitle\">Weather</span>\n                                    <span class=\"sectionChevron\"></span>\n                                </div>\n\n                                <div class=\"sectionInner\">\n                                    <div class=\"ttcont\" id=\"weatherHeader\">\n                                        <div class=\"texts\">\n                                            <div class=\"bigText\" id=\"hideWeatherTitle\">Hide Weather</div>\n                                            <div class=\"infoText\" id=\"hideWeatherInfo\">Disable the weather widgets</div>\n                                        </div>\n\n                                        <label class=\"switch\">\n                                            <input id=\"hideWeatherCheckbox\" type=\"checkbox\">\n                                            <span class=\"toggle\"></span>\n                                        </label>\n                                    </div>\n\n                                    <div class=\"weatherOptions\">\n                                        <div class=\"ttcont\">\n                                            <div class=\"texts\">\n                                                <div class=\"bigText\" id=\"hideWeatherBox\">Hide Weather Card</div>\n                                                <div class=\"infoText\" id=\"hideWeatherBoxInfo\">Show only temperature pill\n                                                </div>\n                                            </div>\n                                            <label class=\"switch\">\n                                                <input id=\"hideWeatherCard\" type=\"checkbox\">\n                                                <span class=\"toggle\"></span>\n                                            </label>\n                                        </div>\n\n                                        <div class=\"ttcont\" id=\"minMaxTempCont\">\n                                            <div class=\"texts\">\n                                                <div class=\"bigText\" id=\"minMaxTempText\">Min-Max Temperature</div>\n                                                <div class=\"infoText\" id=\"minMaxTempSubText\">Replace 'Feels Like' with\n                                                    minimum and maximum temperature</div>\n                                            </div>\n                                            <label class=\"switch\">\n                                                <input id=\"minMaxTempCheckbox\" type=\"checkbox\">\n                                                <span class=\"toggle\"></span>\n                                            </label>\n                                        </div>\n\n                                        <div class=\"ttcont\">\n                                            <div class=\"texts\">\n                                                <div class=\"bigText\" id=\"fahrenheitCelsiusCheckbox\">Switch to Fahrenheit\n                                                </div>\n                                                <div class=\"infoText\" id=\"fahrenheitCelsiusText\">Refresh the page to\n                                                    apply changes</div>\n                                            </div>\n                                            <label class=\"switch\">\n                                                <input id=\"fahrenheitCheckbox\" type=\"checkbox\">\n                                                <span class=\"toggle\"></span>\n                                            </label>\n                                        </div>\n\n                                        <div class=\"ttcont unflex\" id=\"locationCont\">\n                                            <div class=\"texts\">\n                                                <div class=\"bigText\" id=\"UserLocText\">Enter your Location</div>\n                                                <div class=\"infoText\" id=\"UserLocSubtext\">If the weather location isn't\n                                                    correct</div>\n                                            </div>\n\n                                            <input id=\"userLoc\"\n                                                placeholder=\"Your City or Coordinates (Latitude, Longitude)\"\n                                                type=\"text\">\n\n                                            <div id=\"locationSuggestions\" class=\"location-suggestion-box\"></div>\n\n                                            <div class=\"bottom\">\n                                                <a href=\"https://prem-k-r.github.io/MaterialYouNewTab/privacy-policy.html\"\n                                                    id=\"PrivacyPolicy\" target=\"_blank\">Privacy policy</a>\n                                                <button class=\"savebtn\" id=\"saveLoc\">Save</button>\n                                            </div>\n                                        </div>\n\n                                        <div class=\"ttcont\">\n                                            <div class=\"texts\">\n                                                <div class=\"bigText\" id=\"useGPS\">Use GPS</div>\n                                                <div class=\"infoText\" id=\"useGPSInfo\">Enable GPS for live location\n                                                    updates</div>\n                                            </div>\n                                            <label class=\"switch\">\n                                                <input id=\"useGPScheckbox\" type=\"checkbox\">\n                                                <span class=\"toggle\"></span>\n                                            </label>\n                                        </div>\n\n                                        <div class=\"ttcont unflex\">\n                                            <div class=\"texts\">\n                                                <div class=\"bigText\" id=\"WeatherApiText\">Enter your WeatherAPI key</div>\n                                                <div class=\"infoText\" id=\"WeatherApiSubtext\">If the weather\n                                                    functionality isn't working</div>\n                                            </div>\n                                            <input id=\"userAPI\" placeholder=\"Your weatherAPI key\" type=\"text\">\n                                            <div class=\"bottom\">\n                                                <a href=\"https://prem-k-r.github.io/MaterialYouNewTab/docs/Get_WeatherAPI_Key.html\"\n                                                    id=\"LearnMoreButton\" target=\"_blank\">Learn more</a>\n                                                <button class=\"savebtn\" id=\"saveAPI\">Save</button>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n\n                    <div class=\"divider\"></div>\n\n                    <div class=\"section expanded appearanceSection\">\n                        <div class=\"sectionOuter\">\n                            <div class=\"sectionHeader\" role=\"button\">\n                                <span class=\"sectionTitle\" id=\"appearanceSectionTitle\">Appearance</span>\n                                <span class=\"sectionChevron\"></span>\n                            </div>\n\n                            <div class=\"sectionInner\">\n                                <div class=\"innerSurface\">\n                                    <div class=\"themeSegment\" id=\"themeSegment\" data-active=\"light\">\n                                        <span class=\"themeIndicator\"></span>\n                                        <button class=\"themeSegBtn\" id=\"lightThemed\" data-theme=\"light\"\n                                            type=\"button\">Light</button>\n                                        <button class=\"themeSegBtn\" id=\"darkThemed\" data-theme=\"dark\"\n                                            type=\"button\">Dark</button>\n                                        <button class=\"themeSegBtn\" id=\"systemThemed\" data-theme=\"system\"\n                                            type=\"button\">System</button>\n                                    </div>\n\n                                    <!-- ---🟡--- -->\n\n                                    <div class=\"themingStuff\">\n                                        <!-- ⚫🟣🔵🔴🟡🟢🟠⚪ -->\n                                        <div class=\"btn\" id=\"themeButton\">\n                                            <svg fill=\"none\" height=\"100%\" viewBox=\"0 0 20 20\" width=\"100%\"\n                                                xmlns=\"http://www.w3.org/2000/svg\">\n                                                <path id=\"themeIconSvg\" class=\"accentColor\"\n                                                    d=\"M14.2778 10a1.1668 1.1668 0 0 1-.825-1.9916 1.1668 1.1668 0 0 1 1.9916.825A1.1666 1.1666 0 0 1 14.2778 10Zm-2.3334-3.1111a1.1666 1.1666 0 1 1 0-2.3332 1.1666 1.1666 0 0 1 0 2.3332Zm-3.8888 0a1.1667 1.1667 0 1 1 0-2.3334 1.1667 1.1667 0 0 1 0 2.3334ZM5.7222 10a1.1667 1.1667 0 1 1 0-2.3334 1.1667 1.1667 0 0 1 0 2.3334ZM10 3a7 7 0 0 0 0 14 1.1668 1.1668 0 0 0 1.1667-1.1667c0-.3033-.1167-.5755-.3034-.7777-.1789-.21-.2955-.4823-.2955-.7778a1.1668 1.1668 0 0 1 1.1666-1.1667h1.3767A3.889 3.889 0 0 0 17 9.2222C17 5.7844 13.8656 3 10 3Z\" />\n                                            </svg>\n                                        </div>\n                                        <!-- -------- -->\n                                        <div class=\"colorsContainer\" id=\"colorsContainer\">\n                                            <input class=\"colorPlate\" name=\"color\" type=\"radio\" value=\"red\">\n                                            <input class=\"colorPlate\" name=\"color\" type=\"radio\" value=\"yellow\">\n                                            <input class=\"colorPlate\" name=\"color\" type=\"radio\" value=\"green\">\n                                            <input class=\"colorPlate\" name=\"color\" type=\"radio\" value=\"cyan\">\n                                            <input id=\"dfChecked\" class=\"colorPlate\" name=\"color\" type=\"radio\" checked\n                                                value=\"blue\">\n\n                                            <!-- -------- -->\n                                            <input class=\"colorPlate\" name=\"color\" type=\"radio\" value=\"pink\">\n                                            <input class=\"colorPlate\" name=\"color\" type=\"radio\" value=\"purple\">\n                                            <input class=\"colorPlate\" name=\"color\" type=\"radio\" value=\"orange\">\n                                            <input class=\"colorPlate\" name=\"color\" type=\"radio\" value=\"brown\">\n                                            <input class=\"colorPlate\" name=\"color\" type=\"radio\" value=\"silver\">\n\n                                            <!-- -------- -->\n\n                                            <input class=\"colorPlate\" name=\"color\" type=\"radio\" value=\"peach\">\n                                            <input class=\"colorPlate\" id=\"darkTheme\" name=\"color\" type=\"radio\"\n                                                value=\"dark\">\n\n                                            <!-- ----Color Picker || ColorPicker---- -->\n                                            <label id=\"rangColor\" class=\"colorPlate colorPickerLabel\"\n                                                for=\"colorPicker\">Pick color</label>\n                                            <input type=\"color\" id=\"colorPicker\" autocomplete=\"off\" value=\"#EA1010\" />\n                                            <!-- ----End of Color Picker || ColorPicker---- -->\n                                        </div>\n                                    </div>\n                                </div>\n\n                                <!-- ----Custom Wallpaper uploading things------------- -->\n                                <div class=\"innerSurface\">\n                                    <div class=\"uploadClearContainer\">\n                                        <!-- Upload Wallpaper Button -->\n                                        <button class=\"uploadButton\" id=\"uploadTrigger\">\n                                            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\n                                                viewBox=\"0 0 24 24\">\n                                                <path fill=\"currentColor\"\n                                                    d=\"m11.558 13.646l-.084.071l-6.927 6.8a3.23 3.23 0 0 0 1.703.481h4.914l.356-1.423c.162-.648.497-1.24.97-1.712l2.11-2.11l-2.075-2.036l-.094-.078a.75.75 0 0 0-.873.007m4.945-5.394a.752.752 0 1 0-1.504 0a.752.752 0 0 0 1.504 0m-.843 6.441l-2.085-2.046l-.128-.117a2.25 2.25 0 0 0-2.888-.006l-.136.123l-6.938 6.81A3.23 3.23 0 0 1 3 17.75V6.25A3.25 3.25 0 0 1 6.25 3h11.499a3.25 3.25 0 0 1 3.25 3.25v4.762a3.28 3.28 0 0 0-2.608.95zM13.5 8.252a2.252 2.252 0 1 0 4.503 0a2.252 2.252 0 0 0-4.504 0m5.598 4.417l-5.901 5.901a2.7 2.7 0 0 0-.707 1.248l-.457 1.83c-.2.797.522 1.518 1.318 1.319l1.83-.458a2.7 2.7 0 0 0 1.248-.706L22.33 15.9a2.286 2.286 0 0 0-3.233-3.232\" />\n                                            </svg>\n                                            <span id=\"uploadWallpaperText\">Upload Wallpaper</span>\n                                        </button>\n\n                                        <!-- Random Wallpaper Button -->\n                                        <button class=\"randomButton\" id=\"randomImageTrigger\">\n                                            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\n                                                viewBox=\"0 0 24 24\">\n                                                <path fill=\"currentColor\"\n                                                    style=\"transform: scale(0.9); transform-origin: center;\"\n                                                    d=\"M8.92 7.3c-.537.82-1.148 2.04-1.836 3.655-.723-1.48-1.584-3.24-3.656-3.24h-3A.41.41 0 0 1 0 7.284v-2.57a.41.41 0 0 1 .429-.429h3c2.231 0 4.062 1.004 5.49 3.013m14.96 11.009-4.286 4.285c-.26.26-.737.077-.737-.308v-2.571c-.056 0-2.52.03-3.2.007-1.604-.054-3.816-.29-5.706-3.02.527-.83 1.134-2.05 1.822-3.656.726 1.485 1.588 3.24 3.656 3.24h3.428v-2.57c0-.367.4-.587.75-.295l4.272 4.272a.45.45 0 0 1 0 .616zm0-12-4.286 4.286c-.256.256-.737.08-.737-.308V7.714h-3.428c-1.99 0-2.882 1.312-4.42 4.956-1.38 3.14-3.098 7.044-7.58 7.044h-3A.41.41 0 0 1 0 19.285v-2.571a.41.41 0 0 1 .429-.429h3c3.675 0 3.907-5.574 6.662-9.187.804-1.055 2.353-2.812 5.337-2.812h3.428V1.715c0-.371.404-.583.75-.295l4.272 4.272a.45.45 0 0 1 0 .616z\" />\n                                            </svg>\n                                        </button>\n\n                                        <!-- Clear Background Button -->\n                                        <button class=\"clearButton\" id=\"clearImage\">\n                                            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\n                                                viewBox=\"0 0 24 24\">\n                                                <path fill=\"currentColor\"\n                                                    d=\"M19 4h-3.5l-1-1h-5l-1 1H5v2h14M6 19a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7H6z\" />\n                                            </svg>\n                                        </button>\n\n                                        <!-- Hidden File Input -->\n                                        <input type=\"file\" id=\"imageUpload\" accept=\"image/*\" />\n                                    </div>\n                                    <!-- ----End of Custom Wallpaper uploading thingsss------------- -->\n\n                                    <!-- Opacity Bar Control  -->\n                                    <div id=\"opacityBarControl\" class=\"opacityBarControl\">\n                                        <div class=\"ttcont\" id=\"opacityTextContainer\">\n                                            <div class=\"texts\">\n                                                <div class=\"bigText\" id=\"opacityTitle\">Opacity</div>\n                                                <div class=\"infoText\" id=\"adjustOpacityDesc\">Adjust interface\n                                                    transparency</div>\n                                            </div>\n                                        </div>\n                                        <div class=\"opacityBar\">\n                                            <div class=\"thinLine\"></div>\n                                            <div class=\"opacitySlider\" id=\"opacitySlider\">\n                                                <div id=\"opacityLevel\">90%</div>\n                                            </div>\n                                        </div>\n                                    </div>\n                                    <!-- End of opacity Bar Control -->\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                    <!-- end of themingStuff -->\n\n                    <div class=\"section expanded\">\n                        <div class=\"sectionOuter\">\n                            <div class=\"sectionHeader\" role=\"button\">\n                                <span class=\"sectionTitle\" id=\"settingsSectionTitle\">Settings</span>\n                                <span class=\"sectionChevron\"></span>\n                            </div>\n\n                            <div class=\"sectionInner\">\n                                <!-- start of languageSelector -->\n                                <div class=\"languageSection\">\n                                    <div class=\"languageIcon\">\n                                        <svg height=\"100%\" width=\"30px\" viewBox=\"0 0 16 16\"\n                                            xmlns=\"http://www.w3.org/2000/svg\">\n                                            <g id=\"languageSelectorIconSvg\" class=\"accentColor\">\n                                                <path\n                                                    d=\"M4.545 6.714L4.11 8H3l1.862-5h1.284L8 8H6.833l-.435-1.286zm1.634-.736L5.5 3.956h-.049l-.679 2.022z\" />\n                                                <path\n                                                    d=\"M0 2a2 2 0 0 1 2-2h7a2 2 0 0 1 2 2v3h3a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-3H2a2 2 0 0 1-2-2zm2-1a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h7a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm7.138 9.995q.289.451.63.846c-.748.575-1.673 1.001-2.768 1.292c.178.217.451.635.555.867c1.125-.359 2.08-.844 2.886-1.494c.777.665 1.739 1.165 2.93 1.472c.133-.254.414-.673.629-.89c-1.125-.253-2.057-.694-2.82-1.284c.681-.747 1.222-1.651 1.621-2.757H14V8h-3v1.047h.765c-.318.844-.74 1.546-1.272 2.13a6 6 0 0 1-.415-.492a2 2 0 0 1-.94.31\" />\n                                            </g>\n                                        </svg>\n                                    </div>\n\n                                    <!-- LANGUAGE SELECTION OPTIONS -->\n                                    <select class=\"languageSelector\" id=\"languageSelector\">\n                                        <option value=\"ar_SA\">Arabic (العربية)</option>\n                                        <option value=\"az\">Azerbaijani (Azərbaycanca)</option>\n                                        <option value=\"bn\">Bangla (বাংলা)</option>\n                                        <option value=\"zh\">Chinese (Simplified) (简体中文)</option>\n                                        <option value=\"zh_TW\">Chinese (Traditional) (繁體中文)</option>\n                                        <option value=\"cs\">Czech (Čeština)</option>\n                                        <option value=\"en\">English (ENGLISH)</option>\n                                        <option value=\"fr\">French (Français)</option>\n                                        <option value=\"de\">German (Deutsch)</option>\n                                        <option value=\"el\">Greek (Ελληνικά)</option>\n                                        <option value=\"hi\">Hindi (हिन्दी)</option>\n                                        <option value=\"hu\">Hungarian (Magyar)</option>\n                                        <option value=\"idn\">Indonesian (Bahasa Indonesia)</option>\n                                        <option value=\"it\">Italian (Italiano)</option>\n                                        <option value=\"ja\">Japanese (日本語)</option>\n                                        <option value=\"ko\">Korean (한국어)</option>\n                                        <option value=\"mr\">Marathi (मराठी)</option>\n                                        <option value=\"ne\">Nepali (नेपाली)</option>\n                                        <option value=\"fa\">Persian (فارسی)</option>\n                                        <option value=\"pl\">Polish (Polski)</option>\n                                        <option value=\"pt\">Portuguese (Brazil) (Português)</option>\n                                        <option value=\"ru\">Russian (Русский)</option>\n                                        <option value=\"sl\">Slovenian (Slovenščina)</option>\n                                        <option value=\"es\">Spanish (Español)</option>\n                                        <option value=\"sv\">Swedish (Svenska)</option>\n                                        <option value=\"ta\">Tamil (தமிழ்)</option>\n                                        <option value=\"th\">Thai (ภาษาไทย)</option>\n                                        <option value=\"tr\">Turkish (Türkçe)</option>\n                                        <option value=\"uk\">Ukrainian (Українська)</option>\n                                        <option value=\"ur\">Urdu (اردو)</option>\n                                        <option value=\"uz\">Uzbek (O'zbek)</option>\n                                        <option value=\"vi\">Vietnamese (Tiếng Việt)</option>\n                                        <!-- Place new language alphabetically -->\n                                    </select>\n                                    <!-- end of languageSelector -->\n                                </div>\n\n                                <!-- Settings -->\n                                <div class=\"backupRestoreContainer\">\n                                    <button class=\"backupRestoreBtn\" id=\"backupBtn\">\n                                        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\n                                            viewBox=\"0 0 24 24\">\n                                            <path fill=\"currentColor\"\n                                                d=\"M6.5 20q-2.275 0-3.887-1.575T1 14.575q0-1.95 1.175-3.475T5.25 9.15q.625-2.3 2.5-3.725T12 4q2.925 0 4.963 2.038T19 11q1.725.2 2.863 1.488T23 15.5q0 1.875-1.312 3.188T18.5 20H13q-.825 0-1.412-.587T11 18v-5.15L9.4 14.4L8 13l4-4l4 4l-1.4 1.4l-1.6-1.55V18h5.5q1.05 0 1.775-.725T21 15.5t-.725-1.775T18.5 13H17v-2q0-2.075-1.463-3.538T12 6T8.463 7.463T7 11h-.5q-1.45 0-2.475 1.025T3 14.5t1.025 2.475T6.5 18H9v2zm5.5-7\" />\n                                        </svg>\n                                        <span id=\"backupText\">Backup</span>\n                                    </button>\n\n                                    <button class=\"backupRestoreBtn\" id=\"restoreBtn\">\n                                        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\n                                            viewBox=\"0 0 24 24\">\n                                            <path fill=\"currentColor\"\n                                                d=\"M13.25 3a9.003 9.003 0 0 0-9.26 9H2.2c-.45 0-.67.54-.35.85l2.79 2.8c.2.2.51.2.71 0l2.79-2.8c.32-.31.09-.85-.35-.85h-1.8c0-3.9 3.18-7.05 7.1-7c3.72.05 6.85 3.18 6.9 6.9c.05 3.91-3.1 7.1-7 7.1c-1.61 0-3.1-.55-4.28-1.48a.994.994 0 0 0-1.32.08c-.42.43-.39 1.13.08 1.5a8.93 8.93 0 0 0 5.52 1.9c5.05 0 9.14-4.17 9-9.26c-.13-4.69-4.05-8.61-8.74-8.74m-.51 5c-.41 0-.75.34-.75.75v3.68c0 .35.19.68.49.86l3.12 1.85c.36.21.82.09 1.03-.26c.21-.36.09-.82-.26-1.03l-2.88-1.71v-3.4c0-.4-.33-.74-.75-.74\" />\n                                        </svg>\n                                        <span id=\"restoreText\">Restore</span>\n                                    </button>\n                                </div>\n\n                                <input type=\"file\" id=\"fileInput\" accept=\".json\" style=\"display: none;\">\n\n                                <button class=\"resetbtn\" id=\"resetsettings\">Reset Settings</button>\n\n                            </div>\n                        </div>\n                    </div>\n\n                    <!-- ----------Tips---------- -->\n                    <div class=\"tips\" id=\"tips\">\n                        <div class=\"ttcont\">\n                            <div class=\"texts\">\n                                <div class=\"bigText\" id=\"switchSearchModes\">Switch Search Modes</div>\n                                <div class=\"infoText\" id=\"switchSearchModesInfo\">Click on ‘Search With’ to\n                                    change the mode.</div>\n                            </div>\n                        </div>\n\n                        <div class=\"ttcont hideOnMobile\">\n                            <div class=\"texts\">\n                                <div class=\"bigText\" id=\"adjustZoom\">Adjust Zoom</div>\n                                <div class=\"infoText\" id=\"adjustZoomInfo\">Press Ctrl + \"+\" or Ctrl + \"-\" to\n                                    adjust the zoom.</div>\n                            </div>\n                        </div>\n\n                        <div class=\"ttcont hideOnMobile\">\n                            <div class=\"texts\">\n                                <div class=\"bigText\" id=\"changeBrowserTheme\">Change Browser Theme</div>\n                                <div class=\"infoText\" id=\"changeBrowserThemeInfo\">Click the three dots (⋮) >\n                                    More tools > Customize Chrome, then choose a color that matches the extension\n                                    theme.\n                                </div>\n                            </div>\n                        </div>\n\n                        <div class=\"ttcont hideOnMobile\" id=\"firefoxHomepage\" style=\"display: none;\">\n                            <div class=\"texts\">\n                                <div class=\"bigText\" id=\"updateFirefoxHomepage\">Update Homepage</div>\n                                <div class=\"infoText\" id=\"updateFirefoxHomepageInfo\">To change your homepage\n                                    like the new tab as well, visit <a\n                                        href=\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\"\n                                        target=\"_blank\">this link</a> and follow the instructions.\n                                </div>\n                            </div>\n                        </div>\n\n                        <button id=\"dontShowTips\">Don't show it again</button>\n                    </div>\n\n                    <!-- ----------end of tips----- -->\n\n                    <div id=\"menuCloseButton\">\n                        <div class=\"icon\">\n                            <svg id=\"closeBtnX\" height=\"30px\" viewBox=\"0 0 34 34\" width=\"30px\"\n                                xmlns=\"http://www.w3.org/2000/svg\">\n                                <path id=\"menuCloseBtnIcon\" class=\"accentColor\"\n                                    d=\"m19.404 17 4.81-4.808a1.7 1.7 0 1 0-2.406-2.405L17 14.597l-4.808-4.81a1.7 1.7 0 1 0-2.405 2.405L14.597 17l-4.81 4.808a1.7 1.7 0 1 0 2.405 2.405L17 19.403l4.808 4.81a1.7 1.7 0 1 0 2.405-2.405L19.403 17ZM17 34C7.61 34 0 26.39 0 17S7.61 0 17 0s17 7.61 17 17-7.61 17-17 17Z\" />\n                            </svg>\n                        </div>\n                        <!-- <span>Close</span> -->\n                    </div>\n                    <!-- ------------------ -->\n\n\n                </div>\n                <!-- end of page 1 -->\n                <div class=\"page\" id=\"shortcutEditPage\">\n                    <div class=\"topBar\">\n                        <button id=\"backButton\">\n                            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n                                <path\n                                    d=\"M21 11H6.414l5.293-5.293l-1.414-1.414L2.586 12l7.707 7.707l1.414-1.414L6.414 13H21z\" />\n                            </svg>\n                        </button>\n                        <div class=\"rightButtons\">\n                            <button id=\"newShortcutButton\">\n                                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n                                    <path\n                                        d=\"M3 13h8v8h2v-8h8v-2h-8V3h-2v8H3z\" />\n                                </svg>\n                            </button>\n                            <button id=\"resetButton\">\n                                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n                                    <path\n                                        d=\"M13 15.75v-1.5h4v1.5zM14.5 21v-1.25H13v-1.5h1.5V17H16v4zm2.5-1.25v-1.5h4v1.5zM18 17v-4h1.5v1.25H21v1.5h-1.5V17zm2.775-7H18.7q-.65-2.2-2.475-3.6T12 5Q9.075 5 7.037 7.038T5 12q0 1.8.813 3.3T8 17.75V15h2v6H4v-2h2.35Q4.8 17.75 3.9 15.938T3 12q0-1.875.713-3.512t1.924-2.85t2.85-1.925T12 3q3.225 0 5.663 1.988T20.775 10\" />\n                                </svg>\n                            </button>\n                        </div>\n                    </div>\n                    <div class=\"pageTitle\" id=\"editShortcutsList\">Saved Shortcuts</div>\n                    <div id=\"editShortcutsListInfo\">You can add new shortcuts by clicking the \"+\" icon or edit\n                        existing ones by clicking on the shortcut name or URL</div>\n                    <div id=\"shortcutList\"></div>\n                </div>\n            </div>\n        </div>\n    </div>\n    <!-- ------end of Menu-bar----------- -->\n    <div id=\"menuButton\"></div>\n    <!-- ending-of-body -->\n\n</body>\n\n</html>\n"
  },
  {
    "path": "locales/README.md",
    "content": "## Adding a New Translation\n\n1. **Create a New Translation File**\n    - Name the file using the appropriate language code (e.g., `de.js` for German or `ar_SA.js` for Arabic).\n    - Copy the content from `en.js` and paste it into the new file. Translate the strings as needed.\n    - Delete any inline comments meant for instructions.\n    - Place this file in the `locales` directory.\n\n<br>\n\n2. **Add the Locale to `index.html`**\n    - Open `index.html` and locate the `<!-- LANGUAGES SCRIPTS -->` section.\n    - Add your new locale script tag in chronological order, like this:\n      ```html\n      <script src=\"locales/de.js\"></script>\n      ```\n    - Locate the `<!-- LANGUAGE SELECTION OPTIONS -->` section and add the new language option in lexicographical order:\n      ```html\n      <option value=\"de\">German (Deutsch)</option>\n      ```\n\n<br>\n\n3. **Update Date Format in `clock.js`**\n    - Add the date display for both analog and digital clocks if the format differs from the default, ensuring chronological order.\n    - Follow the local conventions for date formatting.\n    - Ensure the digital clock display is correct regarding the 12-hour mode.\n\n<br>\n\n4. **Add the Locale to `languages.js`**\n    - Add the language to `languages.js` in chronological order.\n    - Check if the `menuWidth` needs to be adjusted.\n    - If the language uses a comma instead of a dot as the decimal separator, make the necessary adjustments in the appropriate array.\n\n<br>\n\n5. **Update the Currently Supported Languages Section in `README.md`**\n    - Add the new language to the list of supported languages in the README, ensuring lexicographical order.\n    - Increase the count by 1 in both the header and the link at the top.\n\n<br>\n\n6. **Add the Locale to `tools/languagesAnalysis.html`**\n    - (You can use this tool to get an overview of missing or extra strings in the language.)\n    - Add the new language script tag in chronological order:\n      ```html\n      <script src=\"../locales/de.js\"></script>\n      ```\n    - Add the language to the languages object in lexicographical order.\n\n<br>\n\n7. **Subscribe to Translation Updates for Contributors** (Optional)\n   - Join the [discussion channel](https://github.com/prem-k-r/MaterialYouNewTab/discussions/39) or mailing list to receive notifications about new lines being added to translations.\n\n<br>\n\n### Notes:\n- **Test the Translation**: Verify that the translations display correctly when the respective locale is selected, including hover texts and alerts.\n- **Confirm in `weather.js`**: Ensure the humidity value stays on a single line. If it moves to a second line, increase the minimum width.\n- **Keep Translations Consistent**: Ensure the structure of the new translation file matches existing ones for consistency across locales.\n- **Additional Considerations**: Some languages may require specific adjustments based on regional needs.\n\n---\n\n### Definitions:\n- **Lexicographical Order**: Alphabetical order based on the first character of each word.\n- **Chronological Order**: The order in which languages are added, from the earliest to the most recent.\n"
  },
  {
    "path": "locales/ar_SA.js",
    "content": "// Arabic\nconst ar_SA = {\n    // Menu Items\n    github: \"جيت‌هاب\",\n    feedback: \"ملاحظات\",\n\n    // Shortcuts\n    shortcutsText: \"الاختصارات\",\n    enableShortcutsText: \"إظهار الاختصارات المحفوظة\",\n    editShortcutsText: \"تعديل الاختصارات\",\n    shortcutsInfoText: \"اختر الاختصارات التي تريد عرضها\",\n    editShortcutsList: \"الاختصارات المحفوظة\",\n    editShortcutsListInfo:\n        'يمكنك إضافة اختصارات جديدة بالنقر على أيقونة \"+\" أو تعديل الموجودة بالنقر على اسم الاختصار أو عنوان URL الخاص به.',\n    adaptiveIconText: \"الأيقونات التكيفية\",\n    adaptiveIconInfoText:\n        \"تتطابق أيقونات الاختصارات مع لون المظهر وتظهر أصغر\",\n    bookmarksText: \"الإشارات المرجعية\",\n    bookmarksInfo: \"إظهار الشريط الجانبي للإشارات المرجعية\",\n    ai_tools_button: \"أدوات الذكاء الاصطناعي\",\n    enable_ai_tools: \"إظهار اختصارات أدوات الذكاء الاصطناعي\",\n    aiToolsSettingsText: \"إعدادات أدوات الذكاء الاصطناعي\",\n    aiToolsSettingsInfo: \"إدارة اختصارات أدوات الذكاء الاصطناعي\",\n    googleAppsMenuText: \"تطبيقات جوجل\",\n    googleAppsMenuInfo: \"إظهار اختصارات تطبيقات جوجل\",\n    googleAppsHover: \"تطبيقات جوجل\",\n\n    // To-do List\n    todoListText: \"قائمة المهام\",\n    todoListInfo: \"إظهار قائمة المهام اليومية\",\n    todoListHover: \"قائمة المهام\",\n    todoPlaceholder: \"أضف مهمة...\",\n\n    // Clock\n    hideClockBox: \"إخفاء الساعة\",\n    hideClockBoxInfo: \"إخفاء الساعة والتاريخ\",\n    digitalclocktitle: \"الساعة الرقمية\",\n    digitalclockinfo: \"التبديل إلى الساعة الرقمية\",\n    timeformattitle: \"تنسيق 12 ساعة\",\n    timeformatinfo: \"استخدام تنسيق الوقت 12 ساعة\",\n    greetingtitle: \"الترحيب\",\n    greetinginfo: \"عرض رسالة ترحيب أسفل النص المخصص\",\n\n    // Misc\n    userTextTitle: \"نص قابل للتخصيص\",\n    userTextInfo: \"عرض نص مخصص أسفل الساعة\",\n    fahrenheitCelsiusCheckbox: \"التبديل إلى فهرنهايت\",\n    fahrenheitCelsiusText: \"أعد تحميل الصفحة لتطبيق التغييرات\",\n    hideWeatherTitle: \"إخفاء الطقس\",\n    hideWeatherInfo: \"تعطيل أدوات الطقس\",\n    hideWeatherBox: \"إخفاء بطاقة الطقس\",\n    hideWeatherBoxInfo: \"إظهار مؤشر درجة الحرارة فقط\",\n    minMaxTempText: \"درجة الحرارة الأقل - الأعلى\",\n    minMaxTempSubText: \"استبدال 'درجة الحرارة المحسوسة' بدرجة الحرارة الأقل والأعلى\",\n\n    // Search\n    micIconTitle: \"إخفاء أيقونة الميكروفون\",\n    micIconInfo: \"إذا لم يعمل الكتابة الصوتية\",\n    hideSearchWith: \"إخفاء محركات البحث\",\n    hideSearchWithInfo: \"التبديل بين محركات البحث بالنقر على أيقونة محرك البحث\",\n    motivationalQuotesText: \"اقتباسات تحفيزية\",\n    motivationalQuotesInfo: \"عرض الاقتباسات أسفل شريط البحث\",\n    search_suggestions_button: \"اقتراحات البحث\",\n    search_suggestions_text: \"تمكين اقتراحات البحث\",\n\n    // Proxy\n    useproxytitletext: \"تجاوز الوكيل\",\n    useproxyText: \"إذا لم تعمل اقتراحات البحث\",\n    ProxyText: \"وكيل تجاوز CORS\",\n    ProxySubtext: \"أضف وكيل تجاوز CORS الخاص بك\",\n    HostproxyButton: \"استضافة وكيل شخصي\",\n\n    // Location\n    useGPS: \"استخدام GPS\",\n    useGPSInfo: \"تمكين GPS لتحديث الموقع المباشر\",\n    UserLocText: \"أدخل موقعك\",\n    UserLocSubtext: \"إذا كان موقع الطقس غير صحيح\",\n    userLoc: \"مدينتك أو إحداثياتك (خط العرض، خط الطول)\",\n    PrivacyPolicy: \"سياسة الخصوصية\",\n\n    // Weather\n    WeatherApiText: \"أدخل مفتاح WeatherAPI الخاص بك\",\n    WeatherApiSubtext: \"إذا لم تعمل وظيفة الطقس\",\n    userAPI: \"مفتاح WeatherAPI الخاص بك\",\n    LearnMoreButton: \"تعلم المزيد\",\n    saveAPI: \"حفظ\",\n\n    // Body Items\n    // Calendar\n    days: [\"الأحد\", \"الاثنين\", \"الثلاثاء\", \"الأربعاء\", \"الخميس\", \"الجمعة\", \"السبت\"],\n    months: [\n        \"يناير\",\n        \"فبراير\",\n        \"مارس\",\n        \"أبريل\",\n        \"مايو\",\n        \"يونيو\",\n        \"يوليو\",\n        \"أغسطس\",\n        \"سبتمبر\",\n        \"أكتوبر\",\n        \"نوفمبر\",\n        \"ديسمبر\",\n    ],\n\n    // Bookmarks\n    bookmarksHeading: \"الإشارات المرجعية\",\n    bookmarkSortBy: \"ترتيب حسب\",\n    sortAlphabetical: \"أ-ي\",\n    sortTimeAdded: \"الأقدم-الأحدث\",\n    bookmarkViewAs: \"عرض كـ\",\n    bookmarkViewGrid: \"شبكة\",\n    bookmarkViewList: \"قائمة\",\n    bookmarkSearch: \"بحث الإشارة المرجعية\",\n    editBookmarkHeading: \"تعديل الإشارة المرجعية\",\n    editBookmarkName: \"اسم الإشارة المرجعية\",\n    editBookmarkURL: \"عنوان URL للإشارة المرجعية\",\n\n    // New Tab Item\n    conditionText: \"مرحباً! كيف حالك اليوم؟\",\n    humidityLevel: \"الرطوبة\",\n    feelsLike: \"تشعر وكأنه\",\n    minMaxTemp: \"الحد الأدنى ~ الحد الأقصى\",\n    location: \"الموقع\",\n    enterBtn: \"بحث\",\n    searchPlaceholder: \"اكتب هنا...\",\n    listenPlaceholder: \"جارٍ الاستماع...\",\n    searchWithHint: \"البحث باستخدام\",\n    searchOnHint: \"البحث على\",\n    userText: \"انقر هنا للتعديل\",\n\n    // Greeting\n    greeting: {\n        morning: \"صباح الخير!\",\n        afternoon: \"مساء الخير!\",\n        evening: \"مساء الخير!\",\n    },\n\n    // Search Engines\n    defaultEngine: \"افتراضي\",\n    googleEngine: \"جوجل\",\n    duckEngine: \"داك‌داك‌جو\",\n    bingEngine: \"بينج\",\n    braveEngine: \"بريف\",\n    youtubeEngine: \"يوتيوب\",\n    gImagesEngine: \"الصور\",\n    redditEngine: \"ريديت\",\n    wikipediaEngine: \"ويكيبيديا\",\n    quoraEngine: \"كورا\",\n\n    // AI Tools\n    ai_tools: \"أدوات الذكاء الاصطناعي\",\n    chatGPT: \"ChatGPT\",\n    gemini: \"Gemini\",\n    copilot: \"Copilot\",\n    claude: \"Claude\",\n    grok: \"Grok\",\n    qwen: \"Qwen\",\n    perplexity: \"Perplexity\",\n    deepseek: \"DeepSeek\",\n    metaAI: \"Meta AI\",\n    firefly: \"Adobe Firefly\",\n    aiSettingsIntro: \"اختر أدوات الذكاء الاصطناعي التي تريد عرضها\",\n    resetAISettingsBtn: \"إعادة تعيين\",\n\n    // Theme\n    \"lightThemed\": \"فاتح\",\n    \"darkThemed\": \"داكن\",\n    \"systemThemed\": \"النظام\",\n\n    // Wallpaper and settings\n    uploadWallpaperText: \"تحميل خلفية\",\n    rangColor: \"اختر لوناً\",\n    backupText: \"نسخ احتياطي\",\n    restoreText: \"استعادة\",\n    resetsettings: \"إعادة تعيين الإعدادات\",\n    menuCloseText: \"إغلاق\",\n    opacityTitle: \"العتامة\",\n    adjustOpacityDesc: \"ضبط عتامة الواجهة\",\n\n    // Tips\n    switchSearchModes: \"تبديل أوضاع البحث\",\n    switchSearchModesInfo: \"انقر على 'البحث باستخدام' للتبديل بين الأوضاع.\",\n    adjustZoom: \"ضبط التكبير\",\n    adjustZoomInfo:\n        'اضغط Ctrl + \"+\" أو Ctrl + \"-\" لضبط التكبير.',\n    changeBrowserTheme: \"تغيير سمة المتصفح\",\n    chromeThemeInfo:\n        \"انقر على النقاط الثلاث (⋮) > المزيد من الأدوات > تخصيص Chrome، ثم اختر لوناً يتناسب مع سمة الإضافة.\",\n    edgeThemeInfo:\n        \"انتقل إلى الإعدادات > المظهر، ثم اختر لوناً يتناسب مع سمة الإضافة.\",\n    braveThemeInfo:\n        'قم بزيارة <a href=\"https://chromewebstore.google.com/category/themes/\" target=\"_blank\">متجر سمات Chrome</a>، قم بتنزيل وتطبيق سمة تتناسب مع الإضافة.',\n    firefoxThemeInfo:\n        'قم بزيارة <a href=\"https://addons.mozilla.org/firefox/themes/\" target=\"_blank\">سمات Firefox</a>، قم بتنزيل وتطبيق سمة تتناسب مع الإضافة.',\n    updateFirefoxHomepage: \"تحديث الصفحة الرئيسية\",\n    updateFirefoxHomepageInfo:\n        'لتغيير صفحتك الرئيسية لتكون مثل علامة تبويب جديدة، قم بزيارة <a href=\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\" target=\"_blank\">هذا الرابط</a> واتبع التعليمات.',\n    dontShowTips: \"لا تظهر النصائح مرة أخرى\",\n\n    // Footer Toast\n    \"footerToastTitle\": \"هل ترى لافتة في الأسفل؟\",\n    \"footerToastMessage\": \"لإخفائها، انقر عليها بزر الماوس الأيمن واختر 'إخفاء التذييل في صفحة علامة التبويب الجديدة'.\",\n\n    // Dialog boxes (alerts)\n    okText: \"موافق\",\n    yesText: \"نعم\",\n    noText: \"لا\",\n    agreeText: \"موافق\",\n    cancelText: \"إلغاء\",\n    confirmWallpaper:\n        \"هل ترغب في تعيين صورة جديدة كخلفية اليوم؟\",\n    confirmRestore:\n        \"هل أنت متأكد أنك تريد إعادة تعيين إعداداتك؟ لا يمكن التراجع عن هذا الإجراء.\",\n    Nobackgroundset: \"لا توجد خلفية معينة حاليًا.\",\n    clearbackgroundimage:\n        \"هل أنت متأكد أنك تريد مسح صورة الخلفية؟\",\n    ProxyDisclaimer:\n        \"جميع ميزات الوكيل متوقفة عن التشغيل افتراضياً.\\n\\nإذا قمت بتمكين اقتراحات البحث ووكيل تجاوز CORS، فمن المستحسن بشدة استضافة وكيلك الخاص لزيادة الخصوصية.\\n\\nبشكل افتراضي، يتم تعيين الوكيل على https://mynt-proxy.rhythmcorehq.com، مما يعني أن جميع بياناتك ستمر عبر هذه الخدمة، مما قد يثير مخاوف تتعلق بالخصوصية.\",\n    GPSDisclaimer:\n        \"تُستخدم بيانات موقعك فقط لتوفير تحديثات دقيقة للطقس. تُخزن هذه البيانات مؤقتًا في المتصفح ولا يتم مشاركتها مع أي خدمة طرف ثالث أو يمكن الوصول إليها من قبلنا.\\n\\nبتمكين GPS، فإنك توافق على مشاركة موقعك مع الإضافة محليًا.\",\n    failedbackup: \"فشل النسخ الاحتياطي: \",\n    restorecompleted: \"تمت الاستعادة بنجاح!\",\n    restorefailed: \"فشلت الاستعادة: \",\n    invalidBackup: \"تم اختيار ملف نسخ احتياطي غير صالح.\",\n    deleteBookmark: 'هل أنت متأكد أنك تريد حذف الإشارة المرجعية \"{title}\"؟',\n    UnsupportedBrowser: \"الإشارات المرجعية غير مدعومة في متصفحك.\",\n    resetShortcutsPrompt: \"سيتم حذف جميع الاختصارات المحفوظة وإعادتها إلى الإعدادات الافتراضية. هل تريد المتابعة؟\"\n};"
  },
  {
    "path": "locales/az.js",
    "content": "// Azerbaijani\nconst az = {\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"Əlaqə\",\n    \"resetsettings\": \"Parametrləri sıfırla\",\n    \"menuCloseText\": \"Bağla\",\n\n    // Shortcuts\n    \"shortcutsText\": \"Qısayollar\",\n    \"enableShortcutsText\": \"Yadda saxlanmış qısa yolları göstər\",\n    \"editShortcutsText\": \"Qısayolları redaktə et\",\n    \"shortcutsInfoText\": \"Göstəriləcək qısayolları seçin\",\n    \"editShortcutsList\": \"Saxlanmış Qısayollar\",\n    // \"editShortcutsListInfo\": \"You can add new shortcuts by clicking the \\\"+\\\" icon or edit existing ones by clicking on the shortcut name or URL.\",\n    \"adaptiveIconText\": \"Adaptiv ikona formaları\",\n    \"adaptiveIconInfoText\": \"Qısayol nişanları dairəvi görünəcək\",\n    // \"bookmarksText\": \"Bookmarks\",\n    // \"bookmarksInfo\": \"Show bookmarks sidebar\",\n    \"ai_tools_button\": \"AI Alətləri\",\n    \"enable_ai_tools\": \"AI Alətləri qısayollarını göstər\",\n    \"googleAppsMenuText\": \"Google Apps\",\n    \"googleAppsMenuInfo\": \"Google Tətbiqləri üçün qısayolları göstər\",\n    // \"googleAppsHover\": \"Google Apps\",    // Keep this shorter\n\n    // To-do List\n    // \"todoListText\": \"To Do List\",\n    // \"todoListInfo\": \"Show a daily To Do list\",\n    // \"todoListHover\": \"ToDo List\",    // Keep this short\n    // \"todoPlaceholder\": \"Add task...\",\n\n    // Digital Clock\n    \"digitalclocktitle\": \"Rəqəmsal saat\",\n    \"digitalclockinfo\": \"Rəqəmsal saata keç\",\n    \"timeformattitle\": \"12 Saat Format\",\n    \"timeformatinfo\": \"12 saatlıq vaxt formatından istifadə edin\",\n    \"greetingtitle\": \"Xoş gəlmisiniz\",\n    \"greetinginfo\": \"Fərdi mətnin altında salamlama mesajını göstər\",\n\n    // Misc\n    \"userTextTitle\": \"Fərdiləşdirilə bilən mətn\",\n    \"userTextInfo\": \"Saat altında fərdi mətni göstər\",\n    \"fahrenheitCelsiusCheckbox\": \"Fahrenheit rejiminə keç\",\n    \"fahrenheitCelsiusText\": \"Yeniləmələri görmək üçün səhifəni yeniləyin\",\n    \"micIconTitle\": \"Mikrofon nişanını gizlət\",\n    \"micIconInfo\": \"Səslə yazmaq işləmirsə\",\n    // \"hideSearchWith\": \"Hide Search Engines\",\n    // \"hideSearchWithInfo\": \"Switch between search engines by clicking its icon\",\n    \"search_suggestions_button\": \"Təklifləri axtarın\",\n    \"search_suggestions_text\": \"Axtarış təkliflərini aktivləşdirin\",\n\n    // Proxy\n    \"useproxytitletext\": \"Proksidən keçmək\",\n    \"useproxyText\": \"Əgər axtarış təklifləri işləmirsə\",\n    \"ProxyText\": \"CORS Bypass Proxy\",\n    \"ProxySubtext\": \"Öz CORS Bypass Proxy əlavə et\",\n    \"HostproxyButton\": \"Öz Proxyinizi Host edin\",\n\n    // Location\n    \"UserLocText\": \"Məkanınızı daxil edin\",\n    \"UserLocSubtext\": \"Hava yeri düzgün deyilsə\",\n    \"userLoc\": \"Məkanınız (Şəhər/Enlem, Boylam)\",\n\n    // Weather\n    \"WeatherApiText\": \"Öz WeatherAPI açarınızı daxil edin\",\n    \"WeatherApiSubtext\": \"Hava funksiyası işləmirsə\",\n    \"userAPI\": \"Sizin WeatherAPI açarınız\",\n    \"LearnMoreButton\": \"Ətraflı məlumat\",\n    \"saveAPI\": \"Saxla\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['Bazar', 'Bazar ertəsi', 'Çərşənbə axşamı', 'Çərşənbə', 'Cümə axşamı', 'Cümə', 'Şənbə'],\n    \"months\": ['Yanvar', 'Fevral', 'Mart', 'Aprel', 'May', 'İyun', 'İyul', 'Avqust', 'Sentyabr', 'Oktyabr', 'Noyabr', 'Dekabr'],\n\n    // Bookmarks\n    // \"bookmarksHeading\": \"Bookmarks\",\n    // \"bookmarkViewAs\": \"View as\",\n    // \"bookmarkViewGrid\": \"Grid\",    // Keep this shorter\n    // \"bookmarkViewList\": \"List\",    // Keep this shorter\n    // \"bookmarkSearch\": \"Search bookmark\",\n\n    // New Tab Item\n    \"conditionText\": \"Salam! Bu gün necəsən?\",\n    \"humidityLevel\": \"Rütubət\",\n    \"feelsLike\": \"FeelsLike\",\n    \"location\": \"Dünya\",\n    \"enterBtn\": \"Axtar\",\n    \"searchPlaceholder\": \"Axtarışınız...\",\n    \"listenPlaceholder\": \"Dinlənir...\",\n    \"searchWithHint\": \"Bununla axtar\",\n    \"userText\": \"Bura klikləməklə redaktə edin\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"Sabahınız xeyir!\",\n        \"afternoon\": \"Hər vaxtın xeyir!\",\n        \"evening\": \"Axşamın xeyir!\"\n    },\n\n    // Search Engines\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n\n    // AI Tools\n    \"ai_tools\": \"AI Alətləri\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"perplexity\": \"Perplexity\",\n    \"metaAI\": \"Meta AI\",\n\n    // Wallpaper and misc\n    \"uploadWallpaperText\": \"Divar kağızı yükləyin\",\n    \"backupText\": \"Yedək\",\n    \"restoreText\": \"Bərpa et\",\n    \"rangColor\": \"Rəng seçin\",\n\n    // Dialog boxes (alerts)\n    \"confirmWallpaper\": \"Gün üçün divar kağızı olaraq yeni bir şəkil təyin etmək istərdinizmi?\",\n    \"confirmRestore\": \"Parametrlərinizi sıfırlamaq istədiyinizə əminsiniz? Bu əməliyyatı geri qaytarmaq mümkün deyil.\",\n    \"Nobackgroundset\": \"Hazırda heç bir fon şəkli qurulmayıb.\",\n    \"clearbackgroundimage\": \"Arxa fon şəklini təmizləmək istədiyinizə əminsinizmi?\",\n    \"ProxyDisclaimer\": \"Bütün proksi funksiyaları defolt olaraq deaktivdir.\\n\\nAxtarış təkliflərini və CORS proksisini yan keçmək imkanını aktiv etsəniz, təkmil məxfilik üçün öz proksinizi yerləşdirmək tövsiyə olunur.\\n\\nDefolt olaraq, proksi quraşdırılacaq. https://mynt-proxy.rhythmcorehq.com ünvanına, yəni bütün məlumatlarınız bu xidmətdən keçəcək və bu, məxfiliklə bağlı narahatlıq yarada bilər.\",\n    \"failedbackup\": \"Yedəkləmə uğursuz oldu: \",\n    \"restorecompleted\": \"Bərpa uğurla tamamlandı!\",\n    \"restorefailed\": \"Bərpa uğursuz oldu: \",\n    // \"invalidBackup\": \"Invalid backup file selected.\",\n    // \"deleteBookmark\": \"Are you sure you want to delete the bookmark \\\"{title}\\\"?\",  // Do not translate {title}\n    // \"UnsupportedBrowser\": \"Bookmarks are not supported in your browser\",\n};"
  },
  {
    "path": "locales/bn.js",
    "content": "// Bengali\nconst bn = {\n    \"newTabTitle\": \"নতুন ট্যাব\",\n    // Menu Items\n    \"github\": \"গিটহাব\",\n    \"feedback\": \"মতামত\",\n\n    // Section titles\n    \"personalizationSectionTitle\": \"ব্যক্তিগতকরণ\",\n    \"clockSectionTitle\": \"ঘড়ি\",\n    \"searchSectionTitle\": \"অনুসন্ধান\",\n    \"weatherSectionTitle\": \"আবহাওয়া\",\n    \"appearanceSectionTitle\": \"দৃশ্যরূপ\",\n    \"settingsSectionTitle\": \"সেটিংস\",\n\n    // Shortcuts\n    \"shortcutsText\": \"শর্টকাট\",\n    \"enableShortcutsText\": \"সংরক্ষিত শর্টকাটগুলি প্রদর্শন করুন\",\n    \"editShortcutsText\": \"শর্টকাট সম্পাদনা করুন\",\n    \"shortcutsInfoText\": \"যে শর্টকাটগুলো দেখাতে চান তা নির্বাচন করুন\",\n    \"editShortcutsList\": \"সংরক্ষিত শর্টকাট\",\n    \"editShortcutsListInfo\": \"\\\"+\\\" আইকনে ক্লিক করে নতুন শর্টকাট যোগ করুন অথবা বিদ্যমান শর্টকাটের নাম বা URL-এ ক্লিক করে সম্পাদনা করুন। কাস্টম আইকন রিসেট করতে ইমেজ URL খালি করুন।\",\n    \"adaptiveIconText\": \"অ্যাডাপ্টিভ আইকন\",\n    \"adaptiveIconInfoText\": \"শর্টকাট আইকন থিম রঙের সাথে মিলে ছোট আকারে প্রদর্শিত হবে\",\n    \"bookmarksText\": \"বুকমার্কস\",\n    \"bookmarksInfo\": \"বুকমার্কস সাইডবার দেখুন\",\n    \"ai_tools_button\": \"এআই সরঞ্জাম\",\n    \"enable_ai_tools\": \"এআই সরঞ্জামের শর্টকাট প্রদর্শন করুন\",\n    \"aiToolsSettingsText\": \"এআই সরঞ্জাম সেটিংস\",\n    \"aiToolsSettingsInfo\": \"এআই সরঞ্জামের শর্টকাট পরিচালনা করুন\",\n    \"googleAppsMenuText\": \"গুগল অ্যাপস\",\n    \"googleAppsMenuInfo\": \"গুগল অ্যাপসের শর্টকাট প্রদর্শন করুন\",\n    \"googleAppsHover\": \"গুগল অ্যাপস\",\n\n    \"shortcutDefaultName\": \"নতুন শর্টকাট\",\n    \"shortcutInputName\": \"শর্টকাটের নাম\",\n    \"shortcutInputUrl\": \"শর্টকাটের URL\",\n    \"shortcutInputIcon\": \"কাস্টম আইকন: URL অথবা SVG (ঐচ্ছিক)\",\n    \"recentlyAddedBookmarks\": \"সম্প্রতি যোগ করা\",\n\n    // To-do List\n    \"todoListText\": \"টু ডু লিস্ট\",\n    \"todoListInfo\": \"দৈনিক কাজের তালিকা দেখুন\",\n    \"todoListHover\": \"টু ডু লিস্ট\",\n    \"todoPlaceholder\": \"টাস্ক যোগ করুন...\",\n\n    // Clock\n    \"hideClockBox\": \"ঘড়ি লুকান\",\n    \"hideClockBoxInfo\": \"ঘড়ি এবং তারিখ লুকান\",\n    \"digitalclocktitle\": \"ডিজিটাল ঘড়ি\",\n    \"digitalclockinfo\": \"ডিজিটাল ঘড়িতে পরিবর্তন করুন\",\n    \"timeformattitle\": \"১২-ঘণ্টা ফরম্যাট\",\n    \"timeformatinfo\": \"১২-ঘণ্টার সময় ফরম্যাট ব্যবহার করুন\",\n    \"greetingtitle\": \"অভিবাদন\",\n    \"greetinginfo\": \"কাস্টম টেক্সটের নিচে অভিবাদন দেখান\",\n\n    // Misc\n    \"userTextTitle\": \"কাস্টমাইজেবল টেক্সট\",\n    \"userTextInfo\": \"ঘড়ির নিচে কাস্টম টেক্সট দেখান\",\n    \"fahrenheitCelsiusCheckbox\": \"ফারেনহাইটে পরিবর্তন করুন\",\n    \"fahrenheitCelsiusText\": \"পরিবর্তন প্রয়োগ করতে পেজ রিফ্রেশ করুন\",\n    \"hideWeatherTitle\": \"আবহাওয়া লুকান\",\n    \"hideWeatherInfo\": \"আবহাওয়া উইজেট বন্ধ করুন\",\n    \"hideWeatherBox\": \"আবহাওয়া কার্ড লুকান\",\n    \"hideWeatherBoxInfo\": \"শুধুমাত্র তাপমাত্রা পিল দেখান\",\n    \"minMaxTempText\": \"সর্বনিম্ন-সর্বাধিক তাপমাত্রা\",\n    \"minMaxTempSubText\": \"অনুভূতি তাপমাত্রার পরিবর্তে সর্বনিম্ন ও সর্বাধিক তাপমাত্রা দেখান\",\n\n    // Search\n    \"micIconTitle\": \"মাইক্রোফোন আইকন লুকান\",\n    \"micIconInfo\": \"যদি ভয়েস টাইপিং কাজ না করে\",\n    \"hideSearchWith\": \"সার্চ ইঞ্জিন লুকান\",\n    \"hideSearchWithInfo\": \"সার্চ ইঞ্জিনের আইকনে ক্লিক করে সার্চ ইঞ্জিন পরিবর্তন করুন\",\n    \"motivationalQuotesText\": \"অনুপ্রেরণামূলক উক্তি\",\n    \"motivationalQuotesInfo\": \"সার্চবারের নিচে উক্তি দেখান\",\n    \"newQuoteOnRefreshText\": \"দৈনিক উক্তি\",\n    \"newQuoteOnRefreshInfo\": \"প্রতিবার রিফ্রেশ হওয়ার পরিবর্তে দিনে একটি উক্তি দেখান\",\n    \"search_suggestions_button\": \"সার্চ সাজেশন\",\n    \"search_suggestions_text\": \"সার্চ সাজেশন সক্রিয় করুন\",\n\n    // Proxy\n    \"useproxytitletext\": \"প্রক্সি বাইপাস\",\n    \"useproxyText\": \"যদি সার্চ সাজেশন কাজ না করে\",\n    \"ProxyText\": \"CORS বাইপাস প্রক্সি\",\n    \"ProxySubtext\": \"নিজস্ব CORS বাইপাস প্রক্সি যোগ করুন\",\n    \"HostproxyButton\": \"নিজস্ব প্রক্সি হোস্ট করুন\",\n\n    // Location\n    \"useGPS\": \"জিপিএস ব্যবহার করুন\",\n    \"useGPSInfo\": \"লাইভ লোকেশন আপডেটের জন্য জিপিএস সক্ষম করুন\",\n    \"UserLocText\": \"আপনার অবস্থান লিখুন\",\n    \"UserLocSubtext\": \"যদি আবহাওয়া অবস্থান সঠিক না হয়\",\n    \"userLoc\": \"আপনার শহর বা স্থানাঙ্ক (অক্ষাংশ, দ্রাঘিমাংশ)\",\n    \"PrivacyPolicy\": \"গোপনীয়তা নীতি\",\n\n    // Weather\n    \"WeatherApiText\": \"আপনার WeatherAPI কী লিখুন\",\n    \"WeatherApiSubtext\": \"যদি আবহাওয়ার ফাংশন কাজ না করে\",\n    \"userAPI\": \"আপনার WeatherAPI কী\",\n    \"LearnMoreButton\": \"আরও জানুন\",\n    \"saveAPI\": \"সংরক্ষণ করুন\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['রবি', 'সোম', 'মঙ্গল', 'বুধ', 'বৃহস্পতি', 'শুক্র', 'শনি'],   // Truncated for display\n    //\"days\": ['রবিবার', 'সোমবার', 'মঙ্গলবার', 'বুধবার', 'বৃহস্পতিবার', 'শুক্রবার', 'শনিবার'],   // Full\n    \"months\": ['জানুয়ারি', 'ফেব্রুয়ারি', 'মার্চ', 'এপ্রিল', 'মে', 'জুন', 'জুলাই', 'আগস্ট', 'সেপ্টেম্বর', 'অক্টোবর', 'নভেম্বর', 'ডিসেম্বর'],\n    // \"months\": ['জানু', 'ফেব্রু', 'মার্চ', 'এপ্রি', 'মে', 'জুন', 'জুলাই', 'আগ', 'সেপ্টে', 'অক্টো', 'নভে', 'ডিসে'],   // Truncated\n\n    // Bookmarks\n    \"bookmarksHeading\": \"বুকমার্কস\",\n    \"bookmarkSortBy\": \"অনুসারে সাজান\",\n    \"sortAlphabetical\": \"A-Z\",\n    \"sortTimeAdded\": \"পুরাতন-নতুন\",\n    \"bookmarkViewAs\": \"এইভাবে দেখুন\",\n    \"bookmarkViewGrid\": \"গ্রিড\",\n    \"bookmarkViewList\": \"লিস্ট\",\n    \"bookmarkSearch\": \"বুকমার্ক সার্চ করুন\",\n    \"editBookmarkHeading\": \"বুকমার্ক সম্পাদনা করুন\",\n    \"editBookmarkName\": \"বুকমার্কের নাম\",\n    \"editBookmarkURL\": \"বুকমার্কের URL\",\n\n    // New Tab Item\n    \"conditionText\": \"হ্যালো! আজ আপনি কেমন আছেন?\",\n    \"humidityLevel\": \"আর্দ্রতা\",\n    \"feelsLike\": \"অনুভূতি হয়\",\n    \"minMaxTemp\": \"নিম্ন ~ উচ্চ\",\n    \"location\": \"পৃথিবী\",\n    \"enterBtn\": \"সার্চ করুন\",\n    \"searchPlaceholder\": \"এখানে টাইপ করুন...\",\n    \"listenPlaceholder\": \"শোনা হচ্ছে...\",\n    \"searchWithHint\": \"দিয়ে সার্চ করুন\",\n    \"searchOnHint\": \"এ সার্চ করুন\",\n    \"userText\": \"এডিট করতে এখানে ক্লিক করুন\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"শুভ সকাল!\",\n        \"afternoon\": \"শুভ বিকেল!\",\n        \"evening\": \"শুভ সন্ধ্যা!\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"ডিফল্ট\",\n    \"googleEngine\": \"গুগল\",\n    \"duckEngine\": \"ডাকডাকগো\",\n    \"bingEngine\": \"বিং\",\n    \"braveEngine\": \"ব্রেভ\",\n    \"youtubeEngine\": \"ইউটিউব\",\n    \"gImagesEngine\": \"ছবি\",\n    \"redditEngine\": \"রেডিট\",\n    \"wikipediaEngine\": \"উইকিপিডিয়া\",\n    \"quoraEngine\": \"কোরা\",\n\n    // AI Tools\n    \"ai_tools\": \"এআই টুলস\",\n    \"chatGPT\": \"চ্যাটজিপিটি\",\n    \"gemini\": \"জেমিনি\",\n    \"copilot\": \"কোপাইলট\",\n    \"claude\": \"ক্লড\",\n    \"grok\": \"গ্রোক\",\n    \"qwen\": \"ক্বেন\",\n    \"perplexity\": \"পারপ্লেক্সিটি\",\n    \"deepseek\": \"ডিপসিক\",\n    \"metaAI\": \"মেটা এআই\",\n    \"firefly\": \"অ্যাডোবি ফায়ারফ্লাই\",\n    \"aiSettingsIntro\": \"যে এআই টুলগুলো দেখাতে চান তা নির্বাচন করুন\",\n    \"resetAISettingsBtn\": \"রিসেট করুন\",\n\n    // Theme\n    \"lightThemed\": \"লাইট\",\n    \"darkThemed\": \"ডার্ক\",\n    \"systemThemed\": \"সিস্টেম\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"ওয়ালপেপার দিন\",\n    \"rangColor\": \"রঙ নির্বাচন করুন\",\n    \"opacityTitle\": \"অস্বচ্ছতা\",\n    \"adjustOpacityDesc\": \"ইন্টারফেসের স্বচ্ছতা সামঞ্জস্য করুন\",\n    \"backupText\": \"ব্যাকআপ করুন\",\n    \"restoreText\": \"পুনরুদ্ধার করুন\",\n    \"resetsettings\": \"সেটিংস পুনরায় সেট করুন\",\n    \"menuCloseText\": \"বন্ধ করুন\",\n\n    // Tips\n    \"switchSearchModes\": \"সার্চ মোড পরিবর্তন করুন\",\n    \"switchSearchModesInfo\": \"মোড পরিবর্তন করতে ‘দিয়ে সার্চ করুন’ এ ক্লিক করুন\",\n    \"adjustZoom\": \"জুম সমন্বয় করুন\",\n    \"adjustZoomInfo\": \"জুম সমন্বয় করতে Ctrl + \\\"+\\\" বা Ctrl + \\\"-\\\" চাপুন।\",\n    \"changeBrowserTheme\": \"ব্রাউজারের থিম পরিবর্তন করুন\",\n    \"chromeThemeInfo\": \"তিনটি ডট (⋮) এ ক্লিক করুন > আরও টুলস > ক্রোম কাস্টমাইজ করুন, তারপর এক্সটেনশনের থিমের সাথে মিলিয়ে একটি রঙ নির্বাচন করুন।\",\n    \"edgeThemeInfo\": \"সেটিংসে যান > রূপ, তারপর এক্সটেনশনের থিমের সাথে মিলিয়ে একটি রঙ নির্বাচন করুন।\",\n    \"braveThemeInfo\": '<a href=\"https://chromewebstore.google.com/category/themes/\" target=\"_blank\">ক্রোম থিম স্টোর</a> এ যান, থিম ডাউনলোড করুন এবং এক্সটেনশনের থিমের সাথে মিলিয়ে একটি রঙ নির্বাচন করুন।',\n    \"firefoxThemeInfo\": '<a href=\"https://addons.mozilla.org/firefox/themes/\" target=\"_blank\">ফায়ারফক্স থিম</a> এ যান, থিম ডাউনলোড করুন এবং এক্সটেনশনের থিমের সাথে মিলিয়ে একটি রঙ নির্বাচন করুন।',\n    \"updateFirefoxHomepage\": \"হোমপেজ আপডেট করুন\",\n    \"updateFirefoxHomepageInfo\": \"আপনার হোমপেজকে নতুন ট্যাবের মতো পরিবর্তন করতে, <a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\">এই লিংকে</a> যান এবং নির্দেশিকা অনুসরণ করুন।\",\n    \"dontShowTips\": \"এটি আর দেখাবেন না\",\n\n    // Footer Toast\n    \"footerToastTitle\": \"নীচে কোনো ব্যানার দেখাচ্ছে?\",\n    \"footerToastMessage\": \"এটি লুকাতে, এর উপর রাইট-ক্লিক করুন এবং 'নিউ ট্যাব পেজে ফুটার লুকান' নির্বাচন করুন।\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"ঠিক আছে\",\n    \"yesText\": \"হ্যাঁ\",\n    \"noText\": \"না\",\n    \"agreeText\": \"আমি রাজি\",\n    \"cancelText\": \"বাতিল করুন\",\n    \"confirmWallpaper\": \"আপনি কি আজকের জন্য একটি নতুন ছবি ওয়ালপেপার হিসেবে সেট করতে চান?\",\n    \"confirmRestore\": \"আপনি কি নিশ্চিত যে আপনি আপনার সেটিংস রিসেট করতে চান? এটি পূর্বাবস্থায় ফেরানো যাবে না।\",\n    \"Nobackgroundset\": \"বর্তমানে কোন ব্যাকগ্রাউন্ড ইমেজ সেট করা হয়নি।\",\n    \"clearbackgroundimage\": \"আপনি কি ব্যাকগ্রাউন্ড ইমেজ মুছে ফেলতে চান?\",\n    \"ProxyDisclaimer\": \"সমস্ত প্রক্সি ফিচার ডিফল্টভাবে বন্ধ থাকে।\\n\\nআপনি যদি সার্চ সাজেশন এবং CORS বাইপাস প্রক্সি সক্রিয় করেন, তাহলে উন্নত গোপনীয়তার জন্য আপনার নিজস্ব প্রক্সি হোস্ট করার পরামর্শ দেওয়া হয়।\\n\\nডিফল্টভাবে প্রক্সি https://mynt-proxy.rhythmcorehq.com এ সেট করা হবে, যার মানে আপনার সমস্ত ডেটা এই পরিষেবার মাধ্যমে যাবে, যা গোপনীয়তার ঝুঁকি তৈরি করতে পারে।\",\n    \"GPSDisclaimer\": \"আপনার অবস্থানের তথ্য শুধুমাত্র সঠিক আবহাওয়ার আপডেট প্রদানের জন্য ব্যবহার করা হয়। এটি অস্থায়ীভাবে ব্রাউজারের মধ্যে সংরক্ষণ করা হয় এবং কোনও তৃতীয় পক্ষের পরিষেবার সাথে শেয়ার করা হয় না এবং আমাদের কাছে অ্যাক্সেসযোগ্যও নয়।\\n\\nজিপিএস সক্ষম করার মাধ্যমে, আপনি স্থানীয়ভাবে এক্সটেনশনের সাথে আপনার অবস্থান শেয়ার করে নেওয়ার জন্য সম্মতি দিচ্ছেন।\",\n    \"failedbackup\": \"ব্যাকআপ ব্যর্থ: \",\n    \"restorecompleted\": \"পুনরুদ্ধার সফলভাবে সম্পন্ন হয়েছে!\",\n    \"restorefailed\": \"পুনরুদ্ধার ব্যর্থ: \",\n    \"invalidBackup\": \"অবৈধ ব্যাকআপ ফাইল নির্বাচিত হয়েছে।\",\n    \"deleteBookmark\": \"আপনি কি নিশ্চিত যে আপনি \\\"{title}\\\" বুকমার্কটি মুছে ফেলতে চান?\",\n    \"UnsupportedBrowser\": \"আপনার ব্রাউজারে বুকমার্ক সমর্থিত নয়।\",\n    \"resetShortcutsPrompt\": \"সব সংরক্ষিত শর্টকাট মুছে ফেলা হবে এবং ডিফল্ট অবস্থায় পুনরায় সেট করা হবে। আপনি কি চালিয়ে যেতে চান?\",\n    \"invalidFileTypeMessage\": \"একটি বৈধ ইমেজ ফাইল নির্বাচন করুন।\",\n    \"invalidSvgMessage\": \"অবৈধ SVG অথবা এতে অনিরাপদ বিষয়বস্তু রয়েছে এবং এটি আইকন হিসাবে ব্যবহার করা যাবে না।\",\n    \"invalidIconUrlMessage\": \"একটি বৈধ ইমেজ URL লিখুন (https://, http://, অথবা data:image/ দিয়ে শুরু হতে হবে)।\",\n    \"iconFileTooLargeMessage\": \"নির্বাচিত ফাইলটি খুব বড়: {size} KB। অনুগ্রহ করে {max} KB এর কম আকারের ফাইল ব্যবহার করুন।\",\n    \"iconStorageQuotaMessage\": \"স্টোরেজ সীমা পূর্ণ হয়ে যাওয়ায় আইকন সংরক্ষণ করা যায়নি। অনুগ্রহ করে ছোট আকারের ছবি ব্যবহার করুন।\"\n};\n"
  },
  {
    "path": "locales/cs.js",
    "content": "// Czech\nconst cs = {\n    \"newTabTitle\": \"Nová karta\",\n\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"Zpětná vazba\",\n\n    // Section titles\n    \"personalizationSectionTitle\": \"Přizpůsobení\",\n    \"clockSectionTitle\": \"Hodiny\",\n    \"searchSectionTitle\": \"Vyhledávání\",\n    \"weatherSectionTitle\": \"Počasí\",\n    \"appearanceSectionTitle\": \"Vzhled\",\n    \"settingsSectionTitle\": \"Nastavení\",\n\n    // Shortcuts\n    \"shortcutsText\": \"Zkratky\",\n    \"enableShortcutsText\": \"Zobrazí zkratky\",\n    \"editShortcutsText\": \"Upravit zkratky\",\n    \"shortcutsInfoText\": \"Vyberte, které zkratky se mají zobrazit\",\n    \"editShortcutsList\": \"Uložené zkratky\",\n    \"editShortcutsListInfo\": \"Nové zkratky můžete přidat klepnutím na ikonku „+“. Upravit existující můžete klepnutím na název nebo URL adresu zkratky.\\nVlastní ikonu resetujete jednoduše smazáním URL adresy obrázku.\",\n    \"adaptiveIconText\": \"Adaptivní ikony\",\n    \"adaptiveIconInfoText\": \"Ikony zkratek se adaptují vzhledem k motivu\",\n    \"bookmarksText\": \"Záložky\",\n    \"bookmarksInfo\": \"Zobrazí boční panel se záložkami\",\n    \"ai_tools_button\": \"AI nástroje\",\n    \"enable_ai_tools\": \"Zobrazí zkratky AI nástrojů\",\n    \"aiToolsSettingsText\": \"Nastavení AI nástrojů\",\n    \"aiToolsSettingsInfo\": \"Nastavte si zkratky AI nástrojů\",\n    \"googleAppsMenuText\": \"Google aplikace\",\n    \"googleAppsMenuInfo\": \"Zobrazí zkratky Google aplikací\",\n    \"googleAppsHover\": \"Google aplikace\",\n\n    \"shortcutDefaultName\": \"Nová zkratka\",\n    \"shortcutInputName\": \"Název zkratky\",\n    \"shortcutInputUrl\": \"URL adresa zkratky\",\n    \"shortcutInputIcon\": \"Vlastní ikona: URL nebo SVG (nepovinné)\",\n    \"recentlyAddedBookmarks\": \"Nedávno přidané\",\n\n    // To-do List\n    \"todoListText\": \"Seznam úkolů\",\n    \"todoListInfo\": \"Zobrazí denní seznam úkolů\",\n    \"todoListHover\": \"Seznam úkolů\",\n    \"todoPlaceholder\": \"Přidat úkol…\",\n\n    // Clock\n    \"hideClockBox\": \"Skrýt hodiny\",\n    \"hideClockBoxInfo\": \"Skryje hodiny a datum\",\n    \"digitalclocktitle\": \"Digitální hodiny\",\n    \"digitalclockinfo\": \"Přepne hodiny na digitální\",\n    \"timeformattitle\": \"12hodinový formát\",\n    \"timeformatinfo\": \"Použije se 12hodinový formát času\",\n    \"greetingtitle\": \"Pozdrav\",\n    \"greetinginfo\": \"Zobrazí pozdrav pod upravitelným textem\",\n\n    // Misc\n    \"userTextTitle\": \"Upravitelný text\",\n    \"userTextInfo\": \"Zobrazí upravitelný text pod hodinami\",\n    \"fahrenheitCelsiusCheckbox\": \"Přepnout na stupně Fahrenheita\",\n    \"fahrenheitCelsiusText\": \"Změny se projeví po obnovení stránky\",\n    \"hideWeatherTitle\": \"Skrýt počasí\",\n    \"hideWeatherInfo\": \"Vypne widgety s počasím\",\n    \"hideWeatherBox\": \"Skrýt kartu s počasím\",\n    \"hideWeatherBoxInfo\": \"Zobrazí pouze pilulku s teplotou\",\n    \"minMaxTempText\": \"Teplota daná rozsahem\",\n    \"minMaxTempSubText\": \"Nahradí pocitovou teplotu rozsahem minimální a maximální teploty\",\n\n    // Search\n    \"micIconTitle\": \"Skrýt ikonu mikrofonu\",\n    \"micIconInfo\": \"Pokud nefunguje hlasové vyhledávání\",\n    \"hideSearchWith\": \"Skrýt vyhledávače\",\n    \"hideSearchWithInfo\": \"Mezi vyhledávači přepnete klepnutím na jejich ikonky\",\n    \"motivationalQuotesText\": \"Motivační citáty\",\n    \"motivationalQuotesInfo\": \"Zobrazí citáty pod vyhledávacím polem\",\n    \"newQuoteOnRefreshText\": \"Denní citát\",\n    \"newQuoteOnRefreshInfo\": \"Místo neustálé obměny citátů zobrazí jeden citát na celý den\",\n    \"search_suggestions_button\": \"Návrhy ve vyhledávání\",\n    \"search_suggestions_text\": \"Zapne návrhy vyhledávání\",\n\n    // Proxy\n    \"useproxytitletext\": \"Obcházení proxy\",\n    \"useproxyText\": \"Pokud nefungují návrhy ve vyhledávání\",\n    \"ProxyText\": \"Proxy pro obcházení CORS\",\n    \"ProxySubtext\": \"Nastavte si vlastní proxy pro obcházení CORS\",\n    \"HostproxyButton\": \"Provozování vlastní proxy\",\n\n    // Location\n    \"useGPS\": \"Použít GPS\",\n    \"useGPSInfo\": \"Zapne GPS pro průběžnou aktualizaci polohy\",\n    \"UserLocText\": \"Zadejte svou polohu\",\n    \"UserLocSubtext\": \"Pokud není správná poloha počasí\",\n    \"userLoc\": \"Město nebo souřadnice (šířka, délka)\",\n    \"PrivacyPolicy\": \"Ochrana osobních údajů\",\n\n    // Weather\n    \"WeatherApiText\": \"Zadejte svůj klíč k WeatherAPI\",\n    \"WeatherApiSubtext\": \"Pokud nefunguje funkce počasí\",\n    \"userAPI\": \"Váš klíč k WeatherAPI\",\n    \"LearnMoreButton\": \"Zjistit více\",\n    \"saveAPI\": \"Uložit\",\n\n    // Body Items\n    // Calendar\n    \"days\": [\"neděle\", \"pondělí\", \"úterý\", \"středa\", \"čtvrtek\", \"pátek\", \"sobota\"],\n    \"months\": [\"ledna\", \"února\", \"března\", \"dubna\", \"května\", \"června\", \"července\", \"srpna\", \"září\", \"října\", \"listopadu\", \"prosince\"],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"Záložky\",\n    \"bookmarkSortBy\": \"Seřadit podle\",\n    \"sortAlphabetical\": \"A–Ž\",\n    \"sortTimeAdded\": \"Stáří\",\n    \"bookmarkViewAs\": \"Způsob zobrazení\",\n    \"bookmarkViewGrid\": \"Mřížka\",\n    \"bookmarkViewList\": \"Seznam\",\n    \"bookmarkSearch\": \"Vyhledejte záložku\",\n    \"editBookmarkHeading\": \"Upravit záložku\",\n    \"editBookmarkName\": \"Název záložky\",\n    \"editBookmarkURL\": \"URL adresa záložky\",\n\n    // New Tab Item\n    \"conditionText\": \"Dobrý den! Jak se máte?\",\n    \"humidityLevel\": \"Vlhkost\",\n    \"feelsLike\": \"Pocitová teplota\",\n    \"minMaxTemp\": \"Min až max\",\n    \"location\": \"Země\",\n    \"enterBtn\": \"Vyhledat\",\n    \"searchPlaceholder\": \"Zadejte hledaný výraz…\",\n    \"listenPlaceholder\": \"Poslouchám…\",\n    \"searchWithHint\": \"Vyhledávat prostřednictvím\",\n    \"searchOnHint\": \"Vyhledávat na\",\n    \"userText\": \"Upravíte po kliknutí\",\n\n    // Greeting\n    \"greeting\": {\n        \"morning\": \"Dobré ráno!\",\n        \"afternoon\": \"Dobré odpoledne!\",\n        \"evening\": \"Dobrý večer!\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"Výchozí\",\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"Obrázky\",\n    \"redditEngine\": \"Reddit\",\n    \"wikipediaEngine\": \"Wikipedie\",\n    \"quoraEngine\": \"Quora\",\n\n    // AI Tools\n    \"ai_tools\": \"AI nástroje\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"grok\": \"Grok\",\n    \"qwen\": \"Qwen\",\n    \"perplexity\": \"Perplexity\",\n    \"deepseek\": \"DeepSeek\",\n    \"metaAI\": \"Meta AI\",\n    \"firefly\": \"Adobe Firefly\",\n    \"aiSettingsIntro\": \"Vyberte, jaké AI nástroje budou zobrazeny\",\n    \"resetAISettingsBtn\": \"Resetovat\",\n\n    // Theme\n    \"lightThemed\": \"Světlý\",\n    \"darkThemed\": \"Temný\",\n    \"systemThemed\": \"Podle systému\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"Nahrát tapetu\",\n    \"rangColor\": \"Vybrat barvu\",\n    \"opacityTitle\": \"Průhlednost\",\n    \"adjustOpacityDesc\": \"Upraví průhlednost uživatelského rozhraní\",\n    \"backupText\": \"Zálohovat\",\n    \"restoreText\": \"Obnovit\",\n    \"resetsettings\": \"Resetovat nastavení\",\n    \"menuCloseText\": \"Zavřít\",\n\n    // Tips\n    \"switchSearchModes\": \"Změna způsobu vyhledávání\",\n    \"switchSearchModesInfo\": \"Pro změnu způsobu vyhledávání klepněte na „Vyhledat prostřednictvím“.\",\n    \"adjustZoom\": \"Přizpůsobení přiblížení\",\n    \"adjustZoomInfo\": \"Pro přizpůsobení přiblížení stiskněte Ctrl + „+“ nebo Ctrl + „-“.\",\n    \"changeBrowserTheme\": \"Změna motivu prohlížeče\",\n    \"chromeThemeInfo\": \"Klepněte na tři tečky (⋮) > Další nástroje > Přizpůsobení Chrome, následně zvolte barvu, která sedí k motivu rozšíření.\",\n    \"edgeThemeInfo\": \"Běžte do Nastavení > Vzhled, následně zvolte barvu, která sedí k motivu rozšíření.\",\n    \"braveThemeInfo\": 'Navštivte <a href=\"https://chromewebstore.google.com/category/themes/\" target=\"_blank\">Obchod s motivy pro Chrome</a>, stáhněte a aktivujte motiv, který sedí k rozšíření.',\n    \"firefoxThemeInfo\": 'Navštivte <a href=\"https://addons.mozilla.org/firefox/themes/\" target=\"_blank\">Motivy vzhledu Firefox</a>, stáhněte a aktivujte motiv, který sedí k rozšíření.',\n    \"updateFirefoxHomepage\": \"Aktualizace domovské stránky\",\n    \"updateFirefoxHomepageInfo\": \"Pro změnu domovské stránky, stejně jako nové karty, navštivte <a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\">tento odkaz</a> a následujte instrukce (anglicky).\",\n    \"dontShowTips\": \"Již nezobrazovat\",\n\n    // Footer Toast\n    \"footerToastTitle\": \"Vidíte baner ve spodní části obrazovky?\",\n    \"footerToastMessage\": \"Skryjete ho tak, že na něho klepnete pravým tlačítkem a zvolíte „Skrýt zápatí na stránce Nová karta“.\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"Budiž\",\n    \"yesText\": \"Ano\",\n    \"noText\": \"Ne\",\n    \"agreeText\": \"Souhlasím\",\n    \"cancelText\": \"Zrušit\",\n    \"confirmWallpaper\": \"Přejete si nastavit nový obrázek jako denní tapetu?\",\n    \"confirmRestore\": \"Opravdu si přejete resetovat nastavení? Tuto akci nelze zvrátit.\",\n    \"Nobackgroundset\": \"Aktuálně nemáte nastavený žádný obrázek na pozadí.\",\n    \"clearbackgroundimage\": \"Opravdu si přejete smazat obrázek na pozadí?\",\n    \"ProxyDisclaimer\": \"Všechny funkce proxy jsou ve výchozím nastavení vypnuté.\\n\\nPokud zapnete našeptávání ve vyhledávání s proxy pro obcházení CORS, pro lepší zabezpečení vám důrazně doporučujeme hostovat si vlastní proxy.\\n\\nVe výchozím nastavení je proxy nastavena na https://mynt-proxy.rhythmcorehq.com, což znamená, že všechna vaše data procházejí skrz tuto službu. To může vyvolat obavy o soukromí.\",\n    \"GPSDisclaimer\": \"Data o poloze jsou využívána pouze pro poskytování odpovídajících aktualizací počasí. Jsou dočasně uložena v prohlížeči, přičemž nejsou ani sdílena se třetími stanami, ani přístupná pro nás.\\n\\nPovolením GPS souhlasíte s tím, že bude poloha lokálně využita tímto rozšířením.\",\n    \"failedbackup\": \"Zálohování selhalo: \",\n    \"restorecompleted\": \"Obnova ze zálohy byla úspěšně dokončena!\",\n    \"restorefailed\": \"Obnova ze zálohy selhala: \",\n    \"invalidBackup\": \"Vybrali jste neplatný soubor se zálohou.\",\n    \"deleteBookmark\": \"Opravdu si přejete smazat záložku „{title}“?\",\n    \"UnsupportedBrowser\": \"Ve vašem prohlížeči nejsou záložky podporované\",\n    \"resetShortcutsPrompt\": \"Budou odstraněny všechny uložené zkratky a následně se obnoví výchozí sada zkratek. Přejete si pokračovat?\",\n    \"invalidFileTypeMessage\": \"Vyberte prosím validní soubor s obrázkem.\",\n    \"invalidSvgMessage\": \"Vložené SVG je nevalidní nebo obsahuje nebezpečný obsah, a nemůže být použito jako ikona.\",\n    \"invalidIconUrlMessage\": \"Zadejte prosím validní URL adresu obrázku (musí začínat https://, http://, nebo data:image/).\",\n    \"iconFileTooLargeMessage\": \"Vybraný soubor je příliš velký: {size} KB. Použijte prosím menší soubor do velikosti {max} KB.\",\n    \"iconStorageQuotaMessage\": \"Ikonu nebylo možné uložit kvůli překročení kapacity úložiště. Odstraňte některé vlastní ikony nebo použijte menší obrázek.\",\n};\n"
  },
  {
    "path": "locales/de.js",
    "content": "// German\nconst de = {\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"Rückmeldung\",\n\n    // Shortcuts\n    \"shortcutsText\": \"Shortcuts\",\n    \"enableShortcutsText\": \"Gespeicherte Shortcuts anzeigen\",\n    \"editShortcutsText\": \"Tastenkombinationen bearbeiten\",\n    \"shortcutsInfoText\": \"Wählen Sie, welche Verknüpfungen angezeigt werden\",\n    \"editShortcutsList\": \"Gespeicherte Shortcuts\",\n    \"editShortcutsListInfo\": \"Sie können neue Verknüpfungen hinzufügen, indem Sie auf das Symbol „+“ klicken, oder vorhandene Verknüpfungen bearbeiten, indem Sie auf den Namen oder die URL der Verknüpfung klicken.\",\n    \"adaptiveIconText\": \"Adaptive Symbole\",\n    \"adaptiveIconInfoText\": \"Verknüpfungssymbole passen sich der Farbe des Themas an und erscheinen kleiner\",\n    \"bookmarksText\": \"Lesezeichen\",\n    \"bookmarksInfo\": \"Lesezeichen-Seitenleiste anzeigen\",\n    \"ai_tools_button\": \"KI-Werkzeuge\",\n    \"enable_ai_tools\": \"Abkürzungen für KI-Werkzeuge anzeigen\",\n    \"aiToolsSettingsText\": \"Einstellungen für KI-Werkzeuge\",\n    \"aiToolsSettingsInfo\": \"Verknüpfungen zu KI-Werkzeugen verwalten\",\n    \"googleAppsMenuText\": \"Google Apps\",\n    \"googleAppsMenuInfo\": \"Shortcuts für Google Apps anzeigen\",\n    \"googleAppsHover\": \"Google Apps\",\n\n    // To-do List\n    \"todoListText\": \"To-Do Liste\",\n    \"todoListInfo\": \"Zeige eine tägliche To-Do-Liste an\",\n    \"todoListHover\": \"To-Do Liste\",\n    \"todoPlaceholder\": \"Aufgabe hinzufügen...\",\n\n    // Clock\n    \"hideClockBox\": \"Uhr ausblenden\",\n    \"hideClockBoxInfo\": \"Uhr und Datum ausblenden\",\n    \"digitalclocktitle\": \"Digitaluhr\",\n    \"digitalclockinfo\": \"Umschalten auf die digitale Uhr\",\n    \"timeformattitle\": \"12-Stunden-Format\",\n    \"timeformatinfo\": \"12-Stunden-Zeitformat verwenden\",\n    \"greetingtitle\": \"Gruß\",\n    \"greetinginfo\": \"Begrüßung unter benutzerdefiniertem Text anzeigen\",\n\n    // Misc\n    \"userTextTitle\": \"Anpassbarer Text\",\n    \"userTextInfo\": \"Benutzerdefinierten Text unter der Uhr anzeigen\",\n    \"fahrenheitCelsiusCheckbox\": \"Auf Fahrenheit umschalten\",\n    \"fahrenheitCelsiusText\": \"Aktualisieren Sie die Seite, um die Änderungen zu übernehmen\",\n    \"hideWeatherTitle\": \"Wetter verbergen\",\n    \"hideWeatherInfo\": \"Deaktivieren Sie die Wetter-Widgets\",\n    \"hideWeatherBox\": \"Wetterkarte ausblenden\",\n    \"hideWeatherBoxInfo\": \"Nur Temperaturpille anzeigen\",\n    \"minMaxTempText\": \"Min-Max Temperatur\",\n    \"minMaxTempSubText\": \"Ersetze „Fühlt sich an“ durch Min- und Max-Temperatur\",\n\n    // Search\n    \"micIconTitle\": \"Mikrofon-Symbol ausblenden\",\n    \"micIconInfo\": \"Wenn die Spracheingabe nicht funktioniert\",\n    \"hideSearchWith\": \"Suchmaschinen ausblenden\",\n    \"hideSearchWithInfo\": \"Wechseln Sie zwischen Suchmaschinen, indem Sie auf das Symbol klicken\",\n    \"motivationalQuotesText\": \"Motivationszitate\",\n    \"motivationalQuotesInfo\": \"Zitate unterhalb der Suchleiste anzeigen\",\n    \"search_suggestions_button\": \"Suchvorschläge\",\n    \"search_suggestions_text\": \"Suchvorschläge aktivieren\",\n\n    // Proxy\n    \"useproxytitletext\": \"Proxy-Umgehung\",\n    \"useproxyText\": \"Wenn Suchvorschläge nicht funktionieren\",\n    \"ProxyText\": \"CORS Bypass Proxy\",\n    \"ProxySubtext\": \"Fügen Sie Ihren eigenen CORS-Bypass-Proxy hinzu\",\n    \"HostproxyButton\": \"Hosten Sie Ihren eigenen Proxy\",\n\n    // Location\n    \"useGPS\": \"GPS verwenden\",\n    \"useGPSInfo\": \"GPS für Live-Standortaktualisierungen aktivieren\",\n    \"UserLocText\": \"Geben Sie Ihren Standort ein\",\n    \"UserLocSubtext\": \"Wenn der Wetterstandort nicht korrekt ist\",\n    \"userLoc\": \"Ihre Stadt oder Koordinaten (Breitengrad, Längengrad)\",\n    \"PrivacyPolicy\": \"Datenschutz\",\n\n    // Weather\n    \"WeatherApiText\": \"Geben Sie Ihren WeatherAPI-Schlüssel ein\",\n    \"WeatherApiSubtext\": \"Wenn die Wetterfunktionalität nicht funktioniert\",\n    \"userAPI\": \"Ihr weatherAPI-Schlüssel\",\n    \"LearnMoreButton\": \"Mehr erfahren\",\n    \"saveAPI\": \"Speichern\",\n\n    // Body Items\n    // Calendar\n    \"days\": [\"Sonntag\", \"Montag\", \"Dienstag\", \"Mittwoch\", \"Donnerstag\", \"Freitag\", \"Samstag\"],\n    \"months\": [\"Januar\", \"Februar\", \"März\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Dezember\"],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"Lesezeichen\",\n    \"bookmarkSortBy\": \"Sortieren nach\",\n    \"sortAlphabetical\": \"A-Z\",\n    \"sortTimeAdded\": \"Alt-Neu\",\n    \"bookmarkViewAs\": \"Ansicht als\",\n    \"bookmarkViewGrid\": \"Grid\",\n    \"bookmarkViewList\": \"List\",\n    \"bookmarkSearch\": \"Lesezeichen suchen\",\n    \"editBookmarkHeading\": \"Lesezeichen bearbeiten\",\n    \"editBookmarkName\": \"Lesezeichen-Name\",\n    \"editBookmarkURL\": \"Lesezeichen-URL\",\n\n    // New Tab Item\n    \"conditionText\": \"Hallo! Wie geht's dir heute?\",\n    \"humidityLevel\": \"Luftfeuchtigkeit\",\n    \"feelsLike\": \"Fühlt sich an\",\n    \"minMaxTemp\": \"Min ~ Max\",\n    \"location\": \"Erde\",\n    \"enterBtn\": \"Suche\",\n    \"searchPlaceholder\": \"Geben Sie hier einen Suchbegriff ein...\",\n    \"listenPlaceholder\": \"Sprich jetzt...\",\n    \"searchWithHint\": \"Suche mit\",\n    \"searchOnHint\": \"Suche auf\",\n    \"userText\": \"Hier klicken zum Bearbeiten\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"Guten Morgen!\",\n        \"afternoon\": \"Guten Tag!\",\n        \"evening\": \"Guten Abend!\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"Default\",\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"Bilder\",\n    \"redditEngine\": \"Reddit\",\n    \"wikipediaEngine\": \"Wikipedia\",\n    \"quoraEngine\": \"Quora\",\n\n    // AI Tools\n    \"ai_tools\": \"KI-Werkzeuge\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"grok\": \"Grok\",\n    \"qwen\": \"Qwen\",\n    \"perplexity\": \"Perplexity\",\n    \"deepseek\": \"DeepSeek\",\n    \"metaAI\": \"Meta AI\",\n    \"firefly\": \"Adobe Firefly\",\n    \"aiSettingsIntro\": \"Wählen Sie aus, welche KI-Tools angezeigt werden sollen\",\n    \"resetAISettingsBtn\": \"Zurücksetzen\",\n\n    // Theme\n    \"enableDarkMode\": \"Dunkelmodus (experimentell)\",\n    \"enableDarkModeInfo\": \"Themen für den dunklen Modus aktivieren\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"Hintergrundbild hochladen\",\n    \"rangColor\": \"Farbe auswählen\",\n    \"opacityTitle\": \"Opazität\",\n    \"adjustOpacityDesc\": \"Transparenz der Schnittstelle anpassen\",\n    \"backupText\": \"Sicherung\",\n    \"restoreText\": \"Wiederherstellen\",\n    \"resetsettings\": \"Einstellungen zurücksetzen\",\n    \"menuCloseText\": \"Schließen\",\n\n    // Tips\n    \"switchSearchModes\": \"Suchmodi wechseln\",\n    \"switchSearchModesInfo\": \"Klicken Sie auf „Suche mit“, um den Modus zu ändern.\",\n    \"adjustZoom\": \"Zoom anpassen\",\n    \"adjustZoomInfo\": \"Drücken Sie Strg + „+“ oder Strg + „-“, um den Zoom anzupassen.\",\n    \"changeBrowserTheme\": \"Browserthema ändern\",\n    \"chromeThemeInfo\": \"Klicken Sie auf die drei Punkte (⋮) > Weitere Tools > Chrome anpassen und wählen Sie dann eine Farbe, die zum Thema der Erweiterung passt.\",\n    \"edgeThemeInfo\": \"Gehen Sie zu Einstellungen > Aussehen und wählen Sie dann eine Farbe, die zum Thema der Erweiterung passt\",\n    \"braveThemeInfo\": 'Besuchen Sie <a href=\"https://chromewebstore.google.com/category/themes/\" target=\"_blank\">Chrome Theme Store</a>, laden Sie das zur Erweiterung passende Theme herunter und wenden Sie es an.',\n    \"firefoxThemeInfo\": 'Besuchen Sie <a href=\"https://addons.mozilla.org/firefox/themes/\" target=\"_blank\">Firefox Themes</a>, laden Sie das zur Erweiterung passende Theme herunter und wenden Sie es an.',\n    \"updateFirefoxHomepage\": \"Homepage aktualisieren\",\n    \"updateFirefoxHomepageInfo\": \"Um Ihre Homepage wie auch den neuen Tab zu ändern, besuchen Sie <a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\">diesen Link</a> und folgen Sie den Anweisungen.\",\n    \"dontShowTips\": \"Nicht mehr anzeigen\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"OK\",\n    \"yesText\": \"Ja\",\n    \"noText\": \"Nein\",\n    \"agreeText\": \"Ich stimme zu\",\n    \"cancelText\": \"Abbrechen\",\n    \"confirmWallpaper\": \"Möchten Sie ein neues Bild als Hintergrundbild für den heutigen Tag festlegen?\",\n    \"confirmRestore\": \"Sind Sie sicher, dass Sie Ihre Einstellungen zurücksetzen wollen? Diese Aktion kann nicht rückgängig gemacht werden.\",\n    \"Nobackgroundset\": \"Es ist derzeit kein Hintergrundbild eingestellt.\",\n    \"clearbackgroundimage\": \"Möchten Sie das Hintergrundbild wirklich entfernen?\",\n    \"ProxyDisclaimer\": \"Alle Proxy-Funktionen sind standardmäßig ausgeschaltet.\\n\\nWenn Sie Suchvorschläge und CORS-Bypass-Proxy aktivieren, wird dringend empfohlen, Ihren eigenen Proxy zu hosten, um den Datenschutz zu verbessern.\\n\\nStandardmäßig ist der Proxy auf https://mynt-proxy.rhythmcorehq.com eingestellt, was bedeutet, dass alle Ihre Daten über diesen Dienst laufen, was zu Datenschutzproblemen führen kann.\",\n    \"GPSDisclaimer\": \"Ihre Standortdaten werden ausschließlich für die Bereitstellung von genauen Wetter-Updates verwendet. Sie werden vorübergehend im Browser gespeichert und weder an Drittanbieterdienste weitergegeben noch für uns zugänglich gemacht.\\n\\nIndem Sie GPS aktivieren, stimmen Sie der lokalen Weitergabe Ihres Standorts an die Erweiterung zu.\",\n    \"failedbackup\": \"Sicherung fehlgeschlagen: \",\n    \"restorecompleted\": \"Wiederherstellung erfolgreich abgeschlossen!\",\n    \"restorefailed\": \"Wiederherstellung fehlgeschlagen: \",\n    \"invalidBackup\": \"Ungültige Sicherungsdatei ausgewählt.\",\n    \"deleteBookmark\": \"Sind Sie sicher, dass Sie das Lesezeichen „{title}“ löschen wollen?\",\n    \"UnsupportedBrowser\": \"Lesezeichen werden von Ihrem Browser nicht unterstützt.\",\n    \"resetShortcutsPrompt\": \"Alle gespeicherten Verknüpfungen werden gelöscht und auf die Standardwerte zurückgesetzt. Möchten Sie fortfahren?\"\n};\n"
  },
  {
    "path": "locales/el.js",
    "content": "//Greek\nconst el = {\n    // Στοιχεία Μενού\n    \"github\": \"GitHub\",\n    \"feedback\": \"Σχόλια\",\n\n    // Συντομεύσεις\n    \"shortcutsText\": \"Συντομεύσεις\",\n    \"enableShortcutsText\": \"Εμφάνιση αποθηκευμένων συντομεύσεων\",\n    \"editShortcutsText\": \"Επεξεργασία Συντομεύσεων\",\n    \"shortcutsInfoText\": \"Επιλέξτε ποιες συντομεύσεις θα εμφανίζονται\",\n    \"editShortcutsList\": \"Αποθηκευμένες Συντομεύσεις\",\n    \"editShortcutsListInfo\": \"Μπορείτε να προσθέσετε νέες συντομεύσεις κάνοντας κλικ στο εικονίδιο \\\"+\\\" ή επεξεργαστείτε τις υπάρχουσες κάνοντας κλικ στο όνομα της συντόμευσης ή στη διεύθυνση URL.\",\n    \"adaptiveIconText\": \"Προσαρμοστικά Εικονίδια\",\n    \"adaptiveIconInfoText\": \"Τα εικονίδια συντομεύσεων θα προσαρμόζονται στο θέμα\",\n    \"bookmarksText\": \"Σελιδοδείκτες\",\n    \"bookmarksInfo\": \"Εμφάνιση πλαϊνής μπάρας σελιδοδεικτών\",\n    \"ai_tools_button\": \"Εργαλεία AI\",\n    \"enable_ai_tools\": \"Εμφάνιση συντομεύσεων για εργαλεία AI\",\n    \"aiToolsSettingsText\": \"Ρυθμίσεις Εργαλείων AI\",\n    \"aiToolsSettingsInfo\": \"Διαχείριση συντομεύσεων εργαλείων AI\",\n    \"googleAppsMenuText\": \"Εφαρμογές Google\",\n    \"googleAppsMenuInfo\": \"Εμφάνιση συντομεύσεων για Εφαρμογές Google\",\n    \"googleAppsHover\": \"Εφαρμογές Google\",\n\n    // Λίστα Εργασιών\n    \"todoListText\": \"Λίστα Εργασιών\",\n    \"todoListInfo\": \"Εμφάνιση καθημερινής λίστας εργασιών\",\n    \"todoListHover\": \"Λίστα Εργασιών\",\n    \"todoPlaceholder\": \"Προσθήκη εργασίας...\",\n\n    // Ρολόι\n    \"hideClockBox\": \"Απόκρυψη Ρολογιού\",\n    \"hideClockBoxInfo\": \"Απόκρυψη ρολογιού και ημερομηνίας\",\n    \"digitalclocktitle\": \"Ψηφιακό Ρολόι\",\n    \"digitalclockinfo\": \"Μετάβαση στο ψηφιακό ρολόι\",\n    \"timeformattitle\": \"Μορφή 12 ωρών\",\n    \"timeformatinfo\": \"Χρήση μορφής ώρας 12 ωρών\",\n    \"greetingtitle\": \"Χαιρετισμός\",\n    \"greetinginfo\": \"Εμφάνιση χαιρετισμού κάτω από το προσαρμοσμένο κείμενο\",\n\n    // Διάφορα\n    \"userTextTitle\": \"Προσαρμόσιμο Κείμενο\",\n    \"userTextInfo\": \"Εμφάνιση προσαρμοσμένου κειμένου κάτω από το ρολόι\",\n    \"fahrenheitCelsiusCheckbox\": \"Μετάβαση σε Φαρενάιτ\",\n    \"fahrenheitCelsiusText\": \"Ανανεώστε τη σελίδα για να εφαρμοστούν οι αλλαγές\",\n    \"hideWeatherTitle\": \"Απόκρυψη Καιρού\",\n    \"hideWeatherInfo\": \"Απενεργοποίηση γραφικών στοιχείων καιρού\",\n    \"hideWeatherBox\": \"Απόκρυψη Κάρτας Καιρού\",\n    \"hideWeatherBoxInfo\": \"Εμφάνιση μόνο της ένδειξης θερμοκρασίας\",\n    \"minMaxTempText\": \"Ελάχιστη-Μέγιστη Θερμοκρασία\",\n    \"minMaxTempSubText\": \"Αντικατάσταση της 'Αίσθησης' με την ελάχιστη και μέγιστη θερμοκρασία\",\n\n    // Αναζήτηση\n    \"micIconTitle\": \"Απόκρυψη Εικονιδίου Μικροφώνου\",\n    \"micIconInfo\": \"Αν η φωνητική πληκτρολόγηση δεν λειτουργεί\",\n    \"hideSearchWith\": \"Απόκρυψη Μηχανών Αναζήτησης\",\n    \"hideSearchWithInfo\": \"Εναλλαγή μηχανών αναζήτησης κάνοντας κλικ στο εικονίδιό τους\",\n    \"motivationalQuotesText\": \"Παρακινητικά Αποφθέγματα\",\n    \"motivationalQuotesInfo\": \"Εμφάνιση αποφθεγμάτων κάτω από τη γραμμή αναζήτησης\",\n    \"search_suggestions_button\": \"Προτάσεις Αναζήτησης\",\n    \"search_suggestions_text\": \"Ενεργοποίηση προτάσεων αναζήτησης\",\n\n    // Proxy\n    \"useproxytitletext\": \"Παράκαμψη Proxy\",\n    \"useproxyText\": \"Αν οι προτάσεις αναζήτησης δεν λειτουργούν\",\n    \"ProxyText\": \"Proxy Παράκαμψης CORS\",\n    \"ProxySubtext\": \"Προσθέστε τον δικό σας proxy παράκαμψης CORS\",\n    \"HostproxyButton\": \"Φιλοξενήστε τον δικό σας proxy\",\n\n    // Τοποθεσία\n    \"useGPS\": \"Χρήση GPS\",\n    \"useGPSInfo\": \"Ενεργοποίηση GPS για ζωντανές ενημερώσεις τοποθεσίας\",\n    \"UserLocText\": \"Εισαγάγετε την Τοποθεσία σας\",\n    \"UserLocSubtext\": \"Αν η τοποθεσία του καιρού δεν είναι σωστή\",\n    \"userLoc\": \"Η Πόλη σας ή Συντεταγμένες (Γεωγραφικό Πλάτος, Γεωγραφικό Μήκος)\",\n    \"PrivacyPolicy\": \"Πολιτική απορρήτου\",\n\n    // Καιρός\n    \"WeatherApiText\": \"Εισαγάγετε το κλειδί σας WeatherAPI\",\n    \"WeatherApiSubtext\": \"Αν η λειτουργία καιρού δεν λειτουργεί\",\n    \"userAPI\": \"Το κλειδί σας weatherAPI\",\n    \"LearnMoreButton\": \"Μάθετε περισσότερα\",\n    \"saveAPI\": \"Αποθήκευση\",\n\n    // Στοιχεία Σώματος\n    // Ημερολόγιο\n    \"days\": ['Κυριακή', 'Δευτέρα', 'Τρίτη', 'Τετάρτη', 'Πέμπτη', 'Παρασκευή', 'Σάββατο'],\n    //\"months\": ['Ιανουάριος', 'Φεβρουάριος', 'Μάρτιος', 'Απρίλιος', 'Μάιος', 'Ιούνιος', 'Ιούλιος', 'Αύγουστος', 'Σεπτέμβριος', 'Οκτώβριος', 'Νοέμβριος', 'Δεκέμβριος'],\n    \"months\": ['Ιαν', 'Φεβ', 'Μαρ', 'Απρ', 'Μάι', 'Ιουν', 'Ιουλ', 'Αυγ', 'Σεπ', 'Οκτ', 'Νοέ', 'Δεκ'],\n\n\n    // Σελιδοδείκτες\n    \"bookmarksHeading\": \"Σελιδοδείκτες\",\n    \"bookmarkSortBy\": \"Ταξινόμηση κατά\",\n    \"sortAlphabetical\": \"Α-Ω\",\n    \"sortTimeAdded\": \"Παλιό-Νέο\",\n    \"bookmarkViewAs\": \"Προβολή ως\",\n    \"bookmarkViewGrid\": \"Πλέγμα\",\n    \"bookmarkViewList\": \"Λίστα\",\n    \"bookmarkSearch\": \"Αναζήτηση σελιδοδείκτη\",\n    \"editBookmarkHeading\": \"Επεξεργασία Σελιδοδείκτη\",\n    \"editBookmarkName\": \"Όνομα Σελιδοδείκτη\",\n    \"editBookmarkURL\": \"URL Σελιδοδείκτη\",\n\n    // Στοιχείο Νέας Καρτέλας\n    \"conditionText\": \"Γεια! Πώς είστε σήμερα;\",\n    \"humidityLevel\": \"Υγρασία\",\n    \"feelsLike\": \"Αίσθηση\",\n    \"minMaxTemp\": \"Ελάχ. ~ Μέγ.\",\n    \"location\": \"Γη\",\n    \"enterBtn\": \"Αναζήτηση\",\n    \"searchPlaceholder\": \"Πληκτρολογήστε εδώ...\",\n    \"listenPlaceholder\": \"Ακρόαση...\",\n    \"searchWithHint\": \"Αναζήτηση με\",\n    \"searchOnHint\": \"Αναζήτηση σε\",\n    \"userText\": \"Κλικ εδώ για επεξεργασία\",\n\n    // Χαιρετισμός\n    greeting: {\n        \"morning\": \"Καλημέρα!\",\n        \"afternoon\": \"Καλησπέρα!\",\n        \"evening\": \"Καλησπέρα!\"\n    },\n\n    // Μηχανές Αναζήτησης\n    \"defaultEngine\": \"Προεπιλογή\",\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"Εικόνες\",\n    \"redditEngine\": \"Reddit\",\n    \"wikipediaEngine\": \"Βικιπαίδεια\",\n    \"quoraEngine\": \"Quora\",\n\n    // Εργαλεία AI\n    \"ai_tools\": \"Εργαλεία AI\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"grok\": \"Grok\",\n    \"qwen\": \"Qwen\",\n    \"perplexity\": \"Perplexity\",\n    \"deepseek\": \"DeepSeek\",\n    \"metaAI\": \"Meta AI\",\n    \"firefly\": \"Adobe Firefly\",\n    \"aiSettingsIntro\": \"Επιλέξτε ποια εργαλεία AI θα εμφανίζονται\",\n    \"resetAISettingsBtn\": \"Επαναφορά\",\n\n    // Θέμα\n    \"enableDarkMode\": \"Σκοτεινή Λειτουργία (Πειραματική)\",\n    \"enableDarkModeInfo\": \"Ενεργοποίηση θεμάτων σκοτεινής λειτουργίας\",\n\n    // Ταπετσαρία και ρυθμίσεις\n    \"uploadWallpaperText\": \"Μεταφόρτωση Ταπετσαρίας\",\n    \"rangColor\": \"Επιλογή χρώματος\",\n    \"backupText\": \"Αντίγραφο ασφαλείας\",\n    \"restoreText\": \"Επαναφορά\",\n    \"resetsettings\": \"Επαναφορά Ρυθμίσεων\",\n    \"menuCloseText\": \"Κλείσιμο\",\n\n    // Συμβουλές\n    \"switchSearchModes\": \"Εναλλαγή Τρόπων Αναζήτησης\",\n    \"switchSearchModesInfo\": \"Κάντε κλικ στο 'Αναζήτηση με' για να αλλάξετε τον τρόπο.\",\n    \"adjustZoom\": \"Προσαρμογή Μεγέθυνσης\",\n    \"adjustZoomInfo\": \"Πατήστε Ctrl + \\\"+\\\" ή Ctrl + \\\"-\\\" για να προσαρμόσετε τη μεγέθυνση.\",\n    \"changeBrowserTheme\": \"Αλλαγή Θέματος Περιηγητή\",\n    \"chromeThemeInfo\": \"Κάντε κλικ στις τρεις τελείες (⋮) > Περισσότερα εργαλεία > Προσαρμογή Chrome και, στη συνέχεια, επιλέξτε ένα χρώμα που ταιριάζει με το θέμα της επέκτασης.\",\n    \"edgeThemeInfo\": \"Μεταβείτε στις Ρυθμίσεις > Εμφάνιση και, στη συνέχεια, επιλέξτε ένα χρώμα που ταιριάζει με το θέμα της επέκτασης.\",\n    \"braveThemeInfo\": 'Επισκεφθείτε το <a href=\"https://chromewebstore.google.com/category/themes/\" target=\"_blank\">Chrome Theme Store</a>, κατεβάστε και εφαρμόστε το θέμα που ταιριάζει με την επέκταση.',\n    \"firefoxThemeInfo\": 'Επισκεφθείτε τα <a href=\"https://addons.mozilla.org/firefox/themes/\" target=\"_blank\">Θέματα του Firefox</a>, κατεβάστε και εφαρμόστε το θέμα που ταιριάζει με την επέκταση.',\n    \"updateFirefoxHomepage\": \"Ενημέρωση Αρχικής Σελίδας\",\n    \"updateFirefoxHomepageInfo\": \"Για να αλλάξετε και την αρχική σας σελίδα όπως τη νέα καρτέλα, επισκεφθείτε <a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\">αυτόν τον σύνδεσμο</a> και ακολουθήστε τις οδηγίες.\",\n    \"dontShowTips\": \"Να μην εμφανιστεί ξανά\",\n\n    // Παράθυρα διαλόγου (ειδοποιήσεις)\n    \"okText\": \"OK\",\n    \"yesText\": \"Ναι\",\n    \"noText\": \"Όχι\",\n    \"agreeText\": \"Συμφωνώ\",\n    \"cancelText\": \"Άκυρο\",\n    \"confirmWallpaper\": \"Θα θέλατε να ορίσετε μια νέα εικόνα ως ταπετσαρία σας για σήμερα;\",\n    \"confirmRestore\": \"Είστε βέβαιοι ότι θέλετε να επαναφέρετε τις ρυθμίσεις σας; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.\",\n    \"Nobackgroundset\": \"Δεν έχει οριστεί καμία εικόνα φόντου.\",\n    \"clearbackgroundimage\": \"Είστε βέβαιοι ότι θέλετε να διαγράψετε την εικόνα φόντου;\",\n    \"ProxyDisclaimer\": \"Όλες οι λειτουργίες proxy είναι απενεργοποιημένες από προεπιλογή.\\n\\nΑν ενεργοποιήσετε τις προτάσεις αναζήτησης και τον proxy παράκαμψης CORS, συνιστάται έντονα να φιλοξενήσετε τον δικό σας proxy για βελτιωμένη προστασία της ιδιωτικής ζωής.\\n\\nΑπό προεπιλογή, ο proxy θα οριστεί σε https://mynt-proxy.rhythmcorehq.com, που σημαίνει ότι όλα τα δεδομένα σας θα διέρχονται μέσω αυτής της υπηρεσίας, γεγονός που μπορεί να εγείρει ανησυχίες για την προστασία της ιδιωτικής ζωής.\",\n    \"GPSDisclaimer\": \"Τα δεδομένα της τοποθεσίας σας χρησιμοποιούνται αποκλειστικά για την παροχή ακριβών ενημερώσεων για τον καιρό. Αποθηκεύονται προσωρινά στον περιηγητή και δεν κοινοποιούνται σε τρίτες υπηρεσίες ούτε είναι προσβάσιμα από εμάς.\\n\\nΕνεργοποιώντας το GPS, συναινείτε στην κοινοποίηση της τοποθεσίας σας με την επέκταση τοπικά.\",\n    \"failedbackup\": \"Η δημιουργία αντιγράφου ασφαλείας απέτυχε: \",\n    \"restorecompleted\": \"Η επαναφορά ολοκληρώθηκε με επιτυχία!\",\n    \"restorefailed\": \"Η επαναφορά απέτυχε: \",\n    \"invalidBackup\": \"Επιλέχθηκε μη έγκυρο αρχείο αντιγράφου ασφαλείας.\",\n    \"deleteBookmark\": \"Είστε βέβαιοι ότι θέλετε να διαγράψετε τον σελιδοδείκτη \\\"{title}\\\";\",\n    \"UnsupportedBrowser\": \"Οι σελιδοδείκτες δεν υποστηρίζονται στον περιηγητή σας.\",\n    \"resetShortcutsPrompt\": \"Όλες οι αποθηκευμένες συντομεύσεις θα διαγραφούν και θα επανέλθουν στις προεπιλογές. Θέλετε να συνεχίσετε;\"\n};\n"
  },
  {
    "path": "locales/en.js",
    "content": "// English (Default)\nconst en = {\n    \"newTabTitle\": \"New Tab\",\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"Feedback\",\n\n    // Section titles\n    \"personalizationSectionTitle\": \"Personalization\",\n    \"clockSectionTitle\": \"Clock\",\n    \"searchSectionTitle\": \"Search\",\n    \"weatherSectionTitle\": \"Weather\",\n    \"appearanceSectionTitle\": \"Appearance\",\n    \"settingsSectionTitle\": \"Settings\",\n\n    // Shortcuts\n    \"shortcutsText\": \"Shortcuts\",\n    \"enableShortcutsText\": \"Show saved shortcuts\",\n    \"editShortcutsText\": \"Edit Shortcuts\",\n    \"shortcutsInfoText\": \"Choose which shortcuts get shown\",\n    \"editShortcutsList\": \"Saved Shortcuts\",\n    \"editShortcutsListInfo\": \"You can add new shortcuts by clicking the \\\"+\\\" icon or edit existing ones by clicking on the shortcut name or URL.\\nTo reset a custom icon, simply clear the image URL.\",\n    \"adaptiveIconText\": \"Adaptive Icons\",\n    \"adaptiveIconInfoText\": \"Shortcut icons will adapt to theme\",\n    \"bookmarksText\": \"Bookmarks\",\n    \"bookmarksInfo\": \"Show bookmarks sidebar\",\n    \"ai_tools_button\": \"AI Tools\",\n    \"enable_ai_tools\": \"Show shortcuts for AI tools\",\n    \"aiToolsSettingsText\": \"AI Tools Settings\",\n    \"aiToolsSettingsInfo\": \"Manage AI tools shortcuts\",\n    \"googleAppsMenuText\": \"Google Apps\",\n    \"googleAppsMenuInfo\": \"Show shortcuts for Google Apps\",\n    \"googleAppsHover\": \"Google Apps\",    // Keep this shorter\n\n    \"shortcutDefaultName\": \"New Shortcut\",\n    \"shortcutInputName\": \"Shortcut Name\",\n    \"shortcutInputUrl\": \"Shortcut URL\",\n    \"shortcutInputIcon\": \"Custom Icon: URL or SVG (optional)\",\n    \"recentlyAddedBookmarks\": \"Recently Added\",\n\n    // To-do List\n    \"todoListText\": \"To Do List\",\n    \"todoListInfo\": \"Show a daily To Do list\",\n    \"todoListHover\": \"ToDo List\",    // Keep this short\n    \"todoPlaceholder\": \"Add task...\",\n\n    // Clock\n    \"hideClockBox\": \"Hide Clock\",\n    \"hideClockBoxInfo\": \"Hide the clock and date\",\n    \"digitalclocktitle\": \"Digital Clock\",\n    \"digitalclockinfo\": \"Switch to the digital clock\",\n    \"timeformattitle\": \"12-Hour Format\",\n    \"timeformatinfo\": \"Use 12-hour time format\",\n    \"greetingtitle\": \"Greeting\",\n    \"greetinginfo\": \"Show greeting below custom text\",\n\n    // Misc\n    \"userTextTitle\": \"Customizable Text\",\n    \"userTextInfo\": \"Show custom text below the clock\",\n    \"fahrenheitCelsiusCheckbox\": \"Switch to Fahrenheit\",\n    \"fahrenheitCelsiusText\": \"Refresh the page to apply changes\",\n    \"hideWeatherTitle\": \"Hide Weather\",\n    \"hideWeatherInfo\": \"Disable the weather widgets\",\n    \"hideWeatherBox\": \"Hide Weather Card\",    // Toggle for mobile devices only\n    \"hideWeatherBoxInfo\": \"Show only temperature pill\",\n    \"minMaxTempText\": \"Min-Max Temperature\",\n    \"minMaxTempSubText\": \"Replace 'Feels Like' with minimum and maximum temperature\",\n\n    // Search\n    \"micIconTitle\": \"Hide Microphone Icon\",\n    \"micIconInfo\": \"If voice typing is not working\",\n    \"hideSearchWith\": \"Hide Search Engines\",\n    \"hideSearchWithInfo\": \"Switch between search engines by clicking its icon\",\n    \"motivationalQuotesText\": \"Motivational Quotes\",\n    \"motivationalQuotesInfo\": \"Show quotes below the searchbar\",\n    \"newQuoteOnRefreshText\": \"Daily Quote\",\n    \"newQuoteOnRefreshInfo\": \"Show one quote per day instead of refreshing each time\",\n    \"search_suggestions_button\": \"Search Suggestions\",\n    \"search_suggestions_text\": \"Enable search suggestions\",\n\n    // Proxy\n    \"useproxytitletext\": \"Proxy Bypass\",\n    \"useproxyText\": \"If search suggestions aren't working\",\n    \"ProxyText\": \"CORS Bypass Proxy\",\n    \"ProxySubtext\": \"Add your own CORS bypass proxy\",\n    \"HostproxyButton\": \"Host your own proxy\",\n\n    // Location\n    \"useGPS\": \"Use GPS\",\n    \"useGPSInfo\": \"Enable GPS for live location updates\",\n    \"UserLocText\": \"Enter your Location\",\n    \"UserLocSubtext\": \"If the weather location isn't correct\",\n    \"userLoc\": \"Your City or Coordinates (Latitude, Longitude)\",\n    \"PrivacyPolicy\": \"Privacy policy\",\n\n    // Weather\n    \"WeatherApiText\": \"Enter your WeatherAPI key\",    // For 'WeatherAPI' string, only transliterate\n    \"WeatherApiSubtext\": \"If the weather functionality isn't working\",\n    \"userAPI\": \"Your weatherAPI key\",\n    \"LearnMoreButton\": \"Learn more\",\n    \"saveAPI\": \"Save\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n    \"months\": ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"Bookmarks\",\n    \"bookmarkSortBy\": \"Sort by\",\n    \"sortAlphabetical\": \"A-Z\",\n    \"sortTimeAdded\": \"Old-New\",\n    \"bookmarkViewAs\": \"View as\",\n    \"bookmarkViewGrid\": \"Grid\",    // Keep this shorter\n    \"bookmarkViewList\": \"List\",    // Keep this shorter\n    \"bookmarkSearch\": \"Search bookmark\",\n    \"editBookmarkHeading\": \"Edit Bookmark\",\n    \"editBookmarkName\": \"Bookmark Name\",\n    \"editBookmarkURL\": \"Bookmark URL\",\n\n    // New Tab Item\n    \"conditionText\": \"Hello! How are you today?\",\n    \"humidityLevel\": \"Humidity\",\n    \"feelsLike\": \"Feels\",\n    \"minMaxTemp\": \"Min ~ Max\",\n    \"location\": \"Earth\",\n    \"enterBtn\": \"Search\",\n    \"searchPlaceholder\": \"Type here...\",\n    \"listenPlaceholder\": \"Listening...\",\n    \"searchWithHint\": \"Search With\",\n    \"searchOnHint\": \"Search On\",\n    \"userText\": \"Click here to edit\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"Good Morning!\",\n        \"afternoon\": \"Good Afternoon!\",\n        \"evening\": \"Good Evening!\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"Default\",\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",    // DuckDuckGo\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"Images\",  // Google Images, https://www.google.com/search?q=check&hl=bn\n    \"redditEngine\": \"Reddit\",\n    \"wikipediaEngine\": \"Wikipedia\",\n    \"quoraEngine\": \"Quora\",\n\n    // AI Tools\n    \"ai_tools\": \"AI Tools\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"grok\": \"Grok\",\n    \"qwen\": \"Qwen\",\n    \"perplexity\": \"Perplexity\",\n    \"deepseek\": \"DeepSeek\",\n    \"metaAI\": \"Meta AI\",\n    \"firefly\": \"Adobe Firefly\",\n    \"aiSettingsIntro\": \"Select which AI tools to display\",\n    \"resetAISettingsBtn\": \"Reset\",\n\n    // Theme\n    \"lightThemed\": \"Light\",\n    \"darkThemed\": \"Dark\",\n    \"systemThemed\": \"System\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"Upload Wallpaper\",    // Keep this short\n    \"rangColor\": \"Pick color\",    // Keep this short\n    \"opacityTitle\": \"Opacity\",\n    \"adjustOpacityDesc\": \"Adjust interface transparency\",\n    \"backupText\": \"Backup\",\n    \"restoreText\": \"Restore\",\n    \"resetsettings\": \"Reset Settings\",\n    \"menuCloseText\": \"Close\",\n\n    // Tips\n    \"switchSearchModes\": \"Switch Search Modes\",\n    \"switchSearchModesInfo\": \"Click on ‘Search With’ to change the mode.\",\n    \"adjustZoom\": \"Adjust Zoom\",\n    \"adjustZoomInfo\": \"Press Ctrl + \\\"+\\\" or Ctrl + \\\"-\\\" to adjust the zoom.\",\n    \"changeBrowserTheme\": \"Change Browser Theme\",\n    \"chromeThemeInfo\": \"Click the three dots (⋮) > More tools > Customize Chrome, then choose a color that matches the extension theme.\",\n    \"edgeThemeInfo\": \"Goto Settings > Appearance, then choose a color that matches the extension theme.\",\n    \"braveThemeInfo\": \"Visit <a href=\\\"https://chromewebstore.google.com/category/themes/\\\" target=\\\"_blank\\\">Chrome Theme Store</a>, download and apply the theme that matches the extension.\",\n    \"firefoxThemeInfo\": \"Visit <a href=\\\"https://addons.mozilla.org/firefox/themes/\\\" target=\\\"_blank\\\">Firefox Themes</a>, download and apply the theme that matches the extension.\",\n    \"updateFirefoxHomepage\": \"Update Homepage\",\n    \"updateFirefoxHomepageInfo\": \"To change your homepage like the new tab as well, visit <a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\">this link</a> and follow the instructions.\",\n    \"dontShowTips\": \"Don't show it again\",\n\n    // Footer Toast\n    \"footerToastTitle\": \"Seeing a banner at the bottom?\",\n    \"footerToastMessage\": \"To hide it, right-click it and select 'Hide Footer on New Tab Page'.\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"OK\",\n    \"yesText\": \"Yes\",\n    \"noText\": \"No\",\n    \"agreeText\": \"I Agree\",\n    \"cancelText\": \"Cancel\",\n    \"confirmWallpaper\": \"Would you like to set a new image as your wallpaper for the day?\",\n    \"confirmRestore\": \"Are you sure you want to reset your settings? This action cannot be undone.\",\n    \"Nobackgroundset\": \"No background image is currently set.\",\n    \"clearbackgroundimage\": \"Are you sure you want to clear the background image?\",\n    \"ProxyDisclaimer\": \"All proxy features are off by default.\\n\\nIf you enable search suggestions and CORS bypass proxy, it is strongly recommended to host your own proxy for enhanced privacy.\\n\\nBy default, the proxy will be set to https://mynt-proxy.rhythmcorehq.com, meaning all your data will go through this service, which may pose privacy concerns.\",\n    \"GPSDisclaimer\": \"Your location data is used solely to provide accurate weather updates. It is temporarily stored within the browser and neither shared with any third-party services nor accessible to us.\\n\\nBy enabling GPS, you consent to sharing your location with the extension locally.\",\n    \"failedbackup\": \"Backup failed: \",\n    \"restorecompleted\": \"Restore completed successfully!\",\n    \"restorefailed\": \"Restore failed: \",\n    \"invalidBackup\": \"Invalid backup file selected.\",\n    \"deleteBookmark\": \"Are you sure you want to delete the bookmark \\\"{title}\\\"?\",  // Do not translate {title}\n    \"UnsupportedBrowser\": \"Bookmarks are not supported in your browser.\",\n    \"resetShortcutsPrompt\": \"All saved shortcuts will be deleted and reset to default. Do you want to continue?\",\n    \"invalidFileTypeMessage\": \"Please select a valid image file.\",\n    \"invalidSvgMessage\": \"Inserted SVG is invalid, or it contains unsafe content and cannot be used as an icon.\",\n    \"invalidIconUrlMessage\": \"Please enter a valid image URL (must start with https://, http://, or data:image/).\",\n    \"iconFileTooLargeMessage\": \"Selected file is too large: {size} KB. Please use a file smaller than {max} KB.\",\n    \"iconStorageQuotaMessage\": \"Icon couldn’t be saved because the storage limit has been reached. Remove some custom icons or use a smaller image.\"\n};\n"
  },
  {
    "path": "locales/es.js",
    "content": "// Spanish\nconst es = {\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"Comentarios\",\n\n    // Section titles\n    \"personalizationSectionTitle\": \"Personalización\",\n    \"clockSectionTitle\": \"Reloj\",\n    \"searchSectionTitle\": \"Buscar\",\n    \"weatherSectionTitle\": \"Clima\",\n    \"appearanceSectionTitle\": \"Apariencia\",\n    \"settingsSectionTitle\": \"Configuración\",\n\n    // Shortcuts\n    \"shortcutsText\": \"Accesos directos\",\n    \"enableShortcutsText\": \"Mostrar accesos directos guardados\",\n    \"editShortcutsText\": \"Editar accesos directos\",\n    \"shortcutsInfoText\": \"Elige qué accesos directos mostrar\",\n    \"editShortcutsList\": \"Accesos directos guardados\",\n    \"editShortcutsListInfo\": \"Puedes añadir nuevos atajos haciendo click en \\\"+\\\" o editando los existentes, haciendo click en el atajo o URL.\",\n    \"adaptiveIconText\": \"Iconos adaptativos\",\n    \"adaptiveIconInfoText\": \"Los iconos de accesos directos se adaptarán al tema\",\n    \"bookmarksText\": \"Marcadores\",\n    \"bookmarksInfo\": \"Mostrar barra lateral de marcadores\",\n    \"ai_tools_button\": \"Herramientas de IA\",\n    \"enable_ai_tools\": \"Mostrar accesos directos de herramientas de IA\",\n    \"aiToolsSettingsText\": \"Ajustes de Herramientas de IA\",\n    \"aiToolsSettingsInfo\": \"Gestionar atajos de Herramientas de IA\",\n    \"googleAppsMenuText\": \"Aplicaciones de Google\",\n    \"googleAppsMenuInfo\": \"Mostrar accesos directos a las apps de Google\",\n    \"googleAppsHover\": \"Aplicaciones de Google\",\n\n    // To-do List\n    \"todoListText\": \"Lista de tareas\",\n    \"todoListInfo\": \"Mostrar una lista diaria de tareas\",\n    \"todoListHover\": \"Lista de tareas\",\n    \"todoPlaceholder\": \"Añadir tarea...\",\n\n    // Clock\n    \"hideClockBox\": \"Ocultar Reloj\",\n    \"hideClockBoxInfo\": \"Ocultar reloj y fecha\",\n    \"digitalclocktitle\": \"Reloj digital\",\n    \"digitalclockinfo\": \"Cambiar a reloj digital\",\n    \"timeformattitle\": \"Formato de 12 horas\",\n    \"timeformatinfo\": \"Usar formato de 12 horas\",\n    \"greetingtitle\": \"Saludo\",\n    \"greetinginfo\": \"Mostrar saludo debajo del texto personalizado\",\n\n    // Misc\n    \"userTextTitle\": \"Texto personalizable\",\n    \"userTextInfo\": \"Mostrar texto personalizado debajo del reloj\",\n    \"fahrenheitCelsiusCheckbox\": \"Cambiar a Fahrenheit\",\n    \"fahrenheitCelsiusText\": \"Recarga la página para aplicar cambios\",\n    \"hideWeatherTitle\": \"Ocultar el clima\",\n    \"hideWeatherInfo\": \"Deshabilitar las widgets del clima\",\n    \"hideWeatherBox\": \"Ocultar tarjeta del clima\",\n    \"hideWeatherBoxInfo\": \"Mostrar solo la etiqueta del clima\",\n    \"minMaxTempText\": \"Temperatura Mínima-Máxima\",\n    \"minMaxTempSubText\": \"Mostrar temperatura mínima y máxima en lugar de \\\"Sensación\\\"\",\n\n    // Search\n    \"micIconTitle\": \"Ocultar micrófono\",\n    \"micIconInfo\": \"En caso de que la escritura por voz no funcione\",\n    \"hideSearchWith\": \"Ocultar motores de búsqueda\",\n    \"hideSearchWithInfo\": \"Cambiar entre motores de búsqueda haciendo click en \\\"Buscar con\\\"\",\n    \"motivationalQuotesText\": \"Citas motivacionales\",\n    \"motivationalQuotesInfo\": \"Mostrar citas debajo de barra de búsqueda\",\n    \"search_suggestions_button\": \"Sugerencias de búsqueda\",\n    \"search_suggestions_text\": \"Habilitar sugerencias de búsqueda\",\n\n    // Proxy\n    \"useproxytitletext\": \"Omisión de proxy\",\n    \"useproxyText\": \"Si las sugerencias de búsqueda no funcionan\",\n    \"ProxyText\": \"Proxy para omitir CORS\",\n    \"ProxySubtext\": \"Añade tu propio proxy CORS\",\n    \"HostproxyButton\": \"Aloja tu propio proxy\",\n\n    // Location\n    \"useGPS\": \"Usar GPS\",\n    \"useGPSInfo\": \"Habilitar GPS para actualizaciones de ubicación\",\n    \"UserLocText\": \"Ingresa tu ubicación\",\n    \"UserLocSubtext\": \"Si la ubicación del clima es incorrecta\",\n    \"userLoc\": \"Ciudad o coordenadas (Latitud, Longitud)\",\n    \"PrivacyPolicy\": \"Política de privacidad\",\n\n    // Weather\n    \"WeatherApiText\": \"Ingresa tu clave de WeatherAPI\",\n    \"WeatherApiSubtext\": \"Si hay un problema con la funcionalidad del clima\",\n    \"userAPI\": \"Tu clave de WeatherAPI\",\n    \"LearnMoreButton\": \"Más información\",\n    \"saveAPI\": \"Guardar\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],\n    \"months\": ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"Marcadores\",\n    \"bookmarkSortBy\": \"Ordenar por\",\n    \"sortAlphabetical\": \"A-Z\",\n    \"sortTimeAdded\": \"Viejo-Nuevo\",\n    \"bookmarkViewAs\": \"Ver como\",\n    \"bookmarkViewGrid\": \"Icono\",\n    \"bookmarkViewList\": \"Lista\",\n    \"bookmarkSearch\": \"Buscar marcador\",\n    \"editBookmarkHeading\": \"Editar marcador\",\n    \"editBookmarkName\": \"Nombre del marcador\",\n    \"editBookmarkURL\": \"URL del marcador\",\n\n    // New Tab Item\n    \"conditionText\": \"¡Hola! ¿Cómo estás hoy?\",\n    \"humidityLevel\": \"Humedad\",\n    \"feelsLike\": \"Sensación\",\n    \"minMaxTemp\": \"Min ~ Max\",\n    \"location\": \"Ubicación\",\n    \"enterBtn\": \"Buscar\",\n    \"searchPlaceholder\": \"Escribe tu búsqueda...\",\n    \"listenPlaceholder\": \"Escuchando...\",\n    \"searchWithHint\": \"Buscar con\",\n    \"searchOnHint\": \"Buscar en\",\n    \"userText\": \"Haz clic aquí para editar\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"¡Buenos días!\",\n        \"afternoon\": \"¡Buenas tardes!\",\n        \"evening\": \"¡Buenas noches!\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"Predeterminado\",\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"Imágenes\",\n    \"redditEngine\": \"Reddit\",\n    \"wikipediaEngine\": \"Wikipedia\",\n    \"quoraEngine\": \"Quora\",\n\n    // AI Tools\n    \"ai_tools\": \"Herramientas de IA\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"grok\": \"Grok\",\n    \"qwen\": \"Qwen\",\n    \"perplexity\": \"Perplexity\",\n    \"deepseek\": \"DeepSeek\",\n    \"metaAI\": \"Meta AI\",\n    \"firefly\": \"Adobe Firefly\",\n    \"aiSettingsIntro\": \"Selecciona qué herramientas de IA utilizar\",\n    \"resetAISettingsBtn\": \"Restablecer\",\n\n    // Theme\n    \"lightThemed\": \"Claro\",\n    \"darkThemed\": \"Oscuro\",\n    \"systemThemed\": \"Sistema\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"Subir Wallpaper\",\n    \"rangColor\": \"Elegir color\",\n    \"opacityTitle\": \"Opacidad\",\n    \"adjustOpacityDesc\": \"Ajustar transparencia de interfaz\",\n    \"backupText\": \"Copia de seguridad\",\n    \"restoreText\": \"Restablecer\",\n    \"resetsettings\": \"Restablecer configuraciones\",\n    \"menuCloseText\": \"Cerrar\",\n\n    // Tips\n    \"switchSearchModes\": \"Cambiar modos de búsqueda\",\n    \"switchSearchModesInfo\": \"Haz click en \\\"Buscar con\\\" para cambiar el modo.\",\n    \"adjustZoom\": \"Ajustar zoom\",\n    \"adjustZoomInfo\": \"Presiona Ctrl + \\\"+\\\" o Ctrl + \\\"-\\\" para ajustar el zoom.\",\n    \"changeBrowserTheme\": \"Cambiar tema del navegador\",\n    \"chromeThemeInfo\": \"Haz click en los tres puntos (⋮) > Más herramientas > Personalizar Chrome, luego escoge un color que coincida con la extensión.\",\n    \"edgeThemeInfo\": \"Ve a Configuración > Apariencia, luego escoge el color que coincida con la extensión.\",\n    \"braveThemeInfo\": \"Visita <a href=\\\"https://chromewebstore.google.com/category/themes/\\\" target=\\\"_blank\\\">Chrome Web Store de temas</a>, descarga y aplica el tema que combine con la extensión.\",\n    \"firefoxThemeInfo\": \"Visita <a href=\\\"https://addons.mozilla.org/firefox/themes/\\\" target=\\\"_blank\\\">Temas para Firefox</a>, descarga y aplica el tema que combine con la extensión.\",\n    \"updateFirefoxHomepage\": \"Actualizar página de inicio\",\n    \"updateFirefoxHomepageInfo\": \"Para cambiar tu página de inicio y también la nueva pestaña, visita <a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\">este enlace</a> y sigue las instrucciones.\",\n    \"dontShowTips\": \"No volver a mostrar\",\n\n    // Footer Toast\n    \"footerToastTitle\": \"¿Ver un banner en la parte inferior?\",\n    \"footerToastMessage\": \"Para ocultarlo, haz click sobre él y selecciona 'Ocultar el pie de página en la página de pestaña nueva'.\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"Aceptar\",\n    \"yesText\": \"Sí\",\n    \"noText\": \"No\",\n    \"agreeText\": \"Acepto\",\n    \"cancelText\": \"Cancelar\",\n    \"confirmWallpaper\": \"¿Deseas establecer una nueva imagen como fondo de pantalla para el día?\",\n    \"confirmRestore\": \"¿Estás seguro de que deseas restablecer la configuración? Esta acción no se puede deshacer.\",\n    \"Nobackgroundset\": \"No se ha establecido ninguna imagen de fondo.\",\n    \"clearbackgroundimage\": \"¿Estás seguro de que deseas borrar la imagen de fondo?\",\n    \"ProxyDisclaimer\": \"Todas las funciones de proxy están desactivadas por defecto.\\n\\nSi habilitas las sugerencias de búsqueda y el proxy de omisión CORS, se recomienda encarecidamente alojar tu propio proxy para mejorar la privacidad.\\n\\nPor defecto, el proxy se establecerá en https://mynt-proxy.rhythmcorehq.com, lo que significa que todos tus datos pasarán por este servicio, lo que puede plantear preocupaciones de privacidad.\",\n    \"GPSDisclaimer\": \"Tus datos de ubicación se usan únicamente para ofrecer actualizaciones meteorológicas precisas. Se almacenan temporalmente en el navegador y no se comparten con servicios de terceros ni son accesibles para nosotros.\\n\\nAl habilitar el GPS, aceptas compartir tu ubicación con la extensión de forma local.\",\n    \"failedbackup\": \"Error de copia de seguridad: \",\n    \"restorecompleted\": \"¡Restauración completada con éxito!\",\n    \"restorefailed\": \"Error de restauración: \",\n    \"invalidBackup\": \"Archivo de copia de seguridad no válido.\",\n    \"deleteBookmark\": \"¿Estás seguro de que deseas eliminar el marcador \\\"{title}\\\"?\",\n    \"UnsupportedBrowser\": \"Los marcadores no son compatibles con tu navegador\",\n    \"resetShortcutsPrompt\": \"Todos los marcadores guardados serán eliminados y restablecidos ¿Deseas continuar?\",\n};\n"
  },
  {
    "path": "locales/fa.js",
    "content": "// Farsi (Persian)\nconst fa = {\n    // Menu Items\n    github: \"گیت‌هاب\",\n    feedback: \"بازخورد\",\n\n    // Shortcuts\n    shortcutsText: \"میانبر‌ها\",\n    enableShortcutsText: \"نمایش میانبرهای ذخیره شده\",\n    editShortcutsText: \"ویرایش میانبر‌ها\",\n    shortcutsInfoText: \"انتخاب کنید کدام میانبر‌ها نمایش داده شوند\",\n    editShortcutsList: \"میانبرهای ذخیره شده\",\n    editShortcutsListInfo:\n        'می‌توانید با کلیک روی آیکون \"+\" میانبرهای جدید اضافه کنید یا با کلیک روی نام یا URL میانبر، موارد موجود را ویرایش کنید.',\n    adaptiveIconText: \"آیکون‌های تطبیقی\",\n    adaptiveIconInfoText:\n        \"آیکون‌های میانبر با رنگ پوسته مطابقت داشته و کوچکتر ظاهر می‌شوند\",\n    bookmarksText: \"نشانک‌ها\",\n    bookmarksInfo: \"نمایش نوار کناری نشانک‌ها\",\n    ai_tools_button: \"ابزارهای هوش مصنوعی\",\n    enable_ai_tools: \"نمایش میانبرهای ابزارهای هوش مصنوعی\",\n    aiToolsSettingsText: \"تنظیمات ابزارهای هوش مصنوعی\",\n    aiToolsSettingsInfo: \"مدیریت میانبرهای ابزارهای هوش مصنوعی\",\n    googleAppsMenuText: \"برنامه‌های گوگل\",\n    googleAppsMenuInfo: \"نمایش میانبرهای برنامه‌های گوگل\",\n    googleAppsHover: \"برنامه‌های گوگل\",\n\n    // To-do List\n    todoListText: \"لیست کارها\",\n    todoListInfo: \"نمایش لیست کارهای روزانه\",\n    todoListHover: \"لیست کارها\",\n    todoPlaceholder: \"افزودن کار...\",\n\n    // Clock\n    hideClockBox: \"پنهان کردن ساعت\",\n    hideClockBoxInfo: \"پنهان کردن ساعت و تاریخ\",\n    digitalclocktitle: \"ساعت دیجیتال\",\n    digitalclockinfo: \"تغییر به ساعت دیجیتال\",\n    timeformattitle: \"قالب ۱۲ ساعته\",\n    timeformatinfo: \"استفاده از قالب زمانی ۱۲ ساعته\",\n    greetingtitle: \"خوشامدگویی\",\n    greetinginfo: \"نمایش خوشامدگویی زیر متن سفارشی\",\n\n    // Misc\n    userTextTitle: \"متن قابل تنظیم\",\n    userTextInfo: \"نمایش متن سفارشی زیر ساعت\",\n    fahrenheitCelsiusCheckbox: \"تغییر به فارنهایت\",\n    fahrenheitCelsiusText: \"برای اعمال تغییرات، صفحه را بازخوانی کنید\",\n    hideWeatherTitle: \"پنهان کردن آب و هوا\",\n    hideWeatherInfo: \"غیرفعال کردن ویجت‌های آب و هوا\",\n    hideWeatherBox: \"پنهان کردن کارت آب و هوا\",\n    hideWeatherBoxInfo: \"نمایش فقط نشانگر دما\",\n    minMaxTempText: \"دمای حداقل-حداکثر\",\n    minMaxTempSubText: \"جایگزینی 'دمای محسوس' با دمای حداقل و حداکثر\",\n\n    // Search\n    micIconTitle: \"پنهان کردن آیکون میکروفون\",\n    micIconInfo: \"اگر تایپ صوتی کار نمی‌کند\",\n    hideSearchWith: \"پنهان کردن موتورهای جستجو\",\n    hideSearchWithInfo: \"با کلیک روی آیکون موتور جستجو، بین آنها جابجا شوید\",\n    motivationalQuotesText: \"جملات انگیزشی\",\n    motivationalQuotesInfo: \"نمایش جملات زیر نوار جستجو\",\n    search_suggestions_button: \"پیشنهادات جستجو\",\n    search_suggestions_text: \"فعال کردن پیشنهادات جستجو\",\n\n    // Proxy\n    useproxytitletext: \"دور زدن پروکسی\",\n    useproxyText: \"اگر پیشنهادات جستجو کار نمی‌کنند\",\n    ProxyText: \"پروکسی دور زدن CORS\",\n    ProxySubtext: \"پروکسی دور زدن CORS خود را اضافه کنید\",\n    HostproxyButton: \"میزبانی پروکسی شخصی\",\n\n    // Location\n    useGPS: \"استفاده از GPS\",\n    useGPSInfo: \"فعال کردن GPS برای به‌روزرسانی زنده موقعیت مکانی\",\n    UserLocText: \"موقعیت مکانی خود را وارد کنید\",\n    UserLocSubtext: \"اگر موقعیت مکانی آب و هوا صحیح نیست\",\n    userLoc: \"شهر یا مختصات شما (عرض جغرافیایی، طول جغرافیایی)\",\n    PrivacyPolicy: \"سیاست حفظ حریم خصوصی\",\n\n    // Weather\n    WeatherApiText: \"کلید WeatherAPI خود را وارد کنید\", // ودرای‌پی‌آی\n    WeatherApiSubtext: \"اگر عملکرد آب و هوا کار نمی‌کند\",\n    userAPI: \"کلید weatherAPI شما\",\n    LearnMoreButton: \"بیشتر بدانید\",\n    saveAPI: \"ذخیره\",\n\n    // Body Items\n    // Calendar\n    days: [\"یکشنبه\", \"دوشنبه\", \"سه‌شنبه\", \"چهارشنبه\", \"پنجشنبه\", \"جمعه\", \"شنبه\"],\n    months: [\n        \"ژانویه\",\n        \"فوریه\",\n        \"مارس\",\n        \"آوریل\",\n        \"مه\",\n        \"ژوئن\",\n        \"ژوئیه\",\n        \"اوت\",\n        \"سپتامبر\",\n        \"اکتبر\",\n        \"نوامبر\",\n        \"دسامبر\",\n    ],\n\n    // Bookmarks\n    bookmarksHeading: \"نشانک‌ها\",\n    bookmarkSortBy: \"مرتب‌سازی بر اساس\",\n    sortAlphabetical: \"A-Z\",\n    sortTimeAdded: \"قدیمی-جدید\",\n    bookmarkViewAs: \"نمایش به صورت\",\n    bookmarkViewGrid: \"شبکه‌ای\",\n    bookmarkViewList: \"لیستی\",\n    bookmarkSearch: \"جستجوی نشانک\",\n    editBookmarkHeading: \"ویرایش نشانک\",\n    editBookmarkName: \"نام نشانک\",\n    editBookmarkURL: \"URL نشانک\",\n\n    // New Tab Item\n    conditionText: \"سلام! امروز چطورید؟\",\n    humidityLevel: \"رطوبت\",\n    feelsLike: \"دمای محسوس\",\n    minMaxTemp: \"حداقل ~ حداکثر\",\n    location: \"زمین\",\n    enterBtn: \"جستجو\",\n    searchPlaceholder: \"اینجا تایپ کنید...\",\n    listenPlaceholder: \"در حال شنیدن...\",\n    searchWithHint: \"جستجو با\",\n    searchOnHint: \"جستجو در\",\n    userText: \"برای ویرایش اینجا کلیک کنید\",\n\n    // Greeting\n    greeting: {\n        morning: \"صبح بخیر!\",\n        afternoon: \"بعد از ظهر بخیر!\",\n        evening: \"عصر بخیر!\",\n    },\n\n    // Search Engines\n    defaultEngine: \"پیش‌فرض\",\n    googleEngine: \"گوگل\",\n    duckEngine: \"داک‌داک‌گو\",\n    bingEngine: \"بینگ\",\n    braveEngine: \"بریو\",\n    youtubeEngine: \"یوتیوب\",\n    gImagesEngine: \"تصاویر\",\n    redditEngine: \"ردیت\",\n    wikipediaEngine: \"ویکی‌پدیا\",\n    quoraEngine: \"کورا\",\n\n    // AI Tools\n    ai_tools: \"ابزارهای هوش مصنوعی\",\n    chatGPT: \"ChatGPT\",\n    gemini: \"Gemini\",\n    copilot: \"Copilot\",\n    claude: \"Claude\",\n    grok: \"Grok\",\n    qwen: \"Qwen\",\n    perplexity: \"Perplexity\",\n    deepseek: \"DeepSeek\",\n    metaAI: \"Meta AI\",\n    firefly: \"Adobe Firefly\",\n    aiSettingsIntro: \"انتخاب کنید کدام ابزارهای هوش مصنوعی نمایش داده شوند\",\n    resetAISettingsBtn: \"بازنشانی\",\n\n    // Theme\n    enableDarkMode: \"حالت تاریک (آزمایشی)\",\n    enableDarkModeInfo: \"فعال کردن پوسته‌های حالت تاریک\",\n\n    // Wallpaper and settings\n    uploadWallpaperText: \"آپلود تصویر زمینه\",\n    rangColor: \"انتخاب رنگ\",\n    opacityTitle: \"شفافیت\",\n    adjustOpacityDesc: \"تنظیم شفافیت رابط کاربری\",\n    backupText: \"پشتیبان‌گیری\",\n    restoreText: \"بازیابی\",\n    resetsettings: \"بازنشانی تنظیمات\",\n    menuCloseText: \"بستن\",\n\n    // Tips\n    switchSearchModes: \"تغییر حالت‌های جستجو\",\n    switchSearchModesInfo: \"برای تغییر حالت، روی 'جستجو با' کلیک کنید.\",\n    adjustZoom: \"تنظیم بزرگنمایی\",\n    adjustZoomInfo:\n        'برای تنظیم بزرگنمایی، Ctrl + \"+\" یا Ctrl + \"-\" را فشار دهید.',\n    changeBrowserTheme: \"تغییر پوسته مرورگر\",\n    chromeThemeInfo:\n        \"روی سه نقطه (⋮) > ابزارهای بیشتر > سفارشی کردن Chrome کلیک کنید، سپس رنگی را انتخاب کنید که با پوسته افزونه مطابقت داشته باشد.\",\n    edgeThemeInfo:\n        \"به تنظیمات > ظاهر بروید، سپس رنگی را انتخاب کنید که با پوسته افزونه مطابقت داشته باشد.\",\n    braveThemeInfo:\n        'از <a href=\"https://chromewebstore.google.com/category/themes/\" target=\"_blank\">فروشگاه پوسته Chrome</a> بازدید کنید، پوسته‌ای را که با افزونه مطابقت دارد دانلود و اعمال کنید.',\n    firefoxThemeInfo:\n        'از <a href=\"https://addons.mozilla.org/firefox/themes/\" target=\"_blank\">پوسته‌های Firefox</a> بازدید کنید، پوسته‌ای را که با افزونه مطابقت دارد دانلود و اعمال کنید.',\n    updateFirefoxHomepage: \"به‌روزرسانی صفحه اصلی\",\n    updateFirefoxHomepageInfo:\n        'برای تغییر صفحه اصلی خود مانند برگه جدید، از <a href=\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\" target=\"_blank\">این پیوند</a> بازدید کرده و دستورالعمل‌ها را دنبال کنید.',\n    dontShowTips: \"دیگر نمایش نده\",\n\n    // Dialog boxes (alerts)\n    okText: \"تأیید\",\n    yesText: \"بله\",\n    noText: \"خیر\",\n    agreeText: \"موافقم\",\n    cancelText: \"لغو\",\n    confirmWallpaper:\n        \"آیا می‌خواهید تصویر جدیدی را به عنوان تصویر زمینه امروز خود تنظیم کنید؟\",\n    confirmRestore:\n        \"آیا مطمئن هستید که می‌خواهید تنظیمات خود را بازنشانی کنید؟ این عمل قابل بازگشت نیست.\",\n    Nobackgroundset: \"در حال حاضر هیچ تصویر پس‌زمینه‌ای تنظیم نشده است.\",\n    clearbackgroundimage:\n        \"آیا مطمئن هستید که می‌خواهید تصویر پس‌زمینه را پاک کنید؟\",\n    ProxyDisclaimer:\n        \"تمام ویژگی‌های پروکسی به طور پیش‌فرض خاموش هستند.\\n\\nاگر پیشنهادات جستجو و پروکسی دور زدن CORS را فعال کنید، به شدت توصیه می‌شود برای افزایش حریم خصوصی، پروکسی شخصی خود را میزبانی کنید.\\n\\nبه طور پیش‌فرض، پروکسی روی https://mynt-proxy.rhythmcorehq.com تنظیم می‌شود، به این معنی که تمام داده‌های شما از طریق این سرویس عبور می‌کند، که ممکن است نگرانی‌های مربوط به حریم خصوصی را ایجاد کند.\",\n    GPSDisclaimer:\n        \"داده‌های موقعیت مکانی شما صرفاً برای ارائه به‌روزرسانی‌های دقیق آب و هوا استفاده می‌شود. این داده‌ها به طور موقت در مرورگر ذخیره شده و نه با هیچ سرویس شخص ثالثی به اشتراک گذاشته می‌شود و نه برای ما قابل دسترسی است.\\n\\nبا فعال کردن GPS، شما با اشتراک‌گذاری موقعیت مکانی خود با افزونه به صورت محلی موافقت می‌کنید.\",\n    failedbackup: \"پشتیبان‌گیری ناموفق بود: \",\n    restorecompleted: \"بازیابی با موفقیت انجام شد!\",\n    restorefailed: \"بازیابی ناموفق بود: \",\n    invalidBackup: \"فایل پشتیبان نامعتبر انتخاب شده است.\",\n    deleteBookmark: 'آیا مطمئن هستید که می‌خواهید نشانک \"{title}\" را حذف کنید؟',\n    UnsupportedBrowser: \"نشانک‌ها در مرورگر شما پشتیبانی نمی‌شوند.\",\n    resetShortcutsPrompt: \"همه میانبرهای ذخیره‌شده حذف و به حالت پیش‌فرض بازنشانی خواهند شد. آیا می‌خواهید ادامه دهید؟\"\n};\n"
  },
  {
    "path": "locales/fr.js",
    "content": "// French\nconst fr = {\n    \"newTabTitle\": \"Nouvel Onglet\",\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"Feedback\",\n    \"resetsettings\": \"Réinitialiser les paramètres\",\n    \"menuCloseText\": \"Fermer\",\n\n    // Section titles\n    \"personalizationSectionTitle\": \"Personnalisation\",\n    \"clockSectionTitle\": \"Horloge\",\n    \"searchSectionTitle\": \"Recherche\",\n    \"weatherSectionTitle\": \"Météo\",\n    \"appearanceSectionTitle\": \"Apparence\",\n    \"settingsSectionTitle\": \"Paramètres\",\n\n    // Shortcuts\n    \"shortcutsText\": \"Raccourcis\",\n    \"enableShortcutsText\": \"Afficher les raccourcis enregistrés\",\n    \"editShortcutsText\": \"Modifier les raccourcis\",\n    \"shortcutsInfoText\": \"Choisir les raccourcis à afficher\",\n    \"editShortcutsList\": \"Raccourcis Enregistrés\",\n    'editShortcutsListInfo': 'Vous pouvez ajouter de nouveaux raccourcis en cliquant sur l\\'icône « + » ou modifier les raccourcis existants en cliquant sur le nom ou l\\'URL du raccourci.',\n    \"adaptiveIconText\": \"Icônes Adaptatives\",\n    \"adaptiveIconInfoText\": \"L'icône du raccourci correspondra à la couleur du thème et apparaîtra plus petite\",\n    \"bookmarksText\": \"Favoris\",\n    \"bookmarksInfo\": \"Afficher la barre latérale des favoris\",\n    \"ai_tools_button\": \"Outils IA\",\n    \"enable_ai_tools\": \"Afficher les raccourcis pour les Outils IA\",\n    \"aiToolsSettingsText\": \"Paramètres des Outils IA\",\n    \"aiToolsSettingsInfo\": \"Gérer les raccourcis des Outils IA\",\n    \"googleAppsMenuText\": \"Apps Google\",\n    \"googleAppsMenuInfo\": \"Afficher les raccourcis pour les Applications Google\",\n    \"googleAppsHover\": \"Apps Google\",\n\n    // To-do List\n    \"todoListText\": \"Liste To-Do\",\n    \"todoListInfo\": \"Afficher une liste de tâches quotidiennes\",\n    \"todoListHover\": \"Liste To-Do\",\n    \"todoPlaceholder\": \"Ajouter une tâche...\",\n\n    // Digital Clock\n    \"hideClockBox\": \"Masquer l'horloge\",\n    \"hideClockBoxInfo\": \"Afficher ou masquer l'horloge et la date\",\n    \"digitalclocktitle\": \"Horloge Numérique\",\n    \"digitalclockinfo\": \"Passer à l'horloge numérique\",\n    \"timeformattitle\": \"Format 12h\",\n    \"timeformatinfo\": \"Utiliser le format 12h\",\n    \"greetingtitle\": \"Salutation\",\n    \"greetinginfo\": \"Afficher la salutation sous le texte personnalisé\",\n\n    // Misc\n    \"userTextTitle\": \"Texte personnalisé\",\n    \"userTextInfo\": \"Afficher le texte personnalisé sous l'horloge\",\n    \"fahrenheitCelsiusCheckbox\": \"Passer à Fahrenheit\",\n    \"fahrenheitCelsiusText\": \"Actualiser la page pour appliquer les changements\",\n    \"hideWeatherTitle\": \"Masquer la météo\",\n    \"hideWeatherInfo\": \"Désactiver les widgets de météo\",\n    \"hideWeatherBox\": \"Masquer la carte météo\",\n    \"hideWeatherBoxInfo\": \"Afficher uniquement la température sur mobile\",\n    \"minMaxTempText\": \"Température Min-Max\",\n    \"minMaxTempSubText\": \"Remplacer 'Ressenti' par la température minimale et maximale\",\n\n    // Search\n    \"micIconTitle\": \"Masquer l'Icône du Microphone\",\n    \"micIconInfo\": \"Si la saisie vocale ne fonctionne pas\",\n    \"switchSearchModes\": \"Changer de mode de Recherche\",\n    \"switchSearchModesInfo\": \"Cliquez sur ‘Rechercher avec’ pour changer le mode\",\n    \"hideSearchWith\": \"Masquer les Moteurs de Recherche\",\n    \"hideSearchWithInfo\": \"Passez d'un moteur de recherche à l'autre en cliquant sur son icône\",\n    \"motivationalQuotesText\": \"Citations de motivation\",\n    \"motivationalQuotesInfo\": \"Afficher les citations sous la barre de recherche\",\n    \"search_suggestions_button\": \"Suggestions de Recherche\",\n    \"search_suggestions_text\": \"Activer les suggestions de recherche\",\n\n    // Proxy\n    \"useproxytitletext\": \"Contournement du Proxy\",\n    \"useproxyText\": \"Si les suggestions de recherche ne fonctionnent pas\",\n    \"ProxyText\": \"Proxy de contournement CORS\",\n    \"ProxySubtext\": \"Ajouter votre propre proxy de contournement CORS\",\n    \"HostproxyButton\": \"Hébergez votre propre proxy\",\n\n    // Location\n    \"useGPS\": \"Utiliser le GPS\",\n    \"useGPSInfo\": \"Activer le GPS pour des mises à jour en temps réel de la localisation\",\n    \"UserLocText\": \"Saisissez votre localisation\",\n    \"UserLocSubtext\": \"Si la localisation de la météo n'est pas correct\",\n    \"userLoc\": \"Votre ville ou vos coordonnées (Latitude, Longitude)\",\n    \"PrivacyPolicy\": \"Politique de confidentialité\",\n\n    // Weather\n    \"WeatherApiText\": \"Entrez votre clé WeatherAPI\",\n    \"WeatherApiSubtext\": \"Si la fonctionnalité météo ne fonctionne pas\",\n    \"userAPI\": \"Votre clé WeatherAPI\",\n    \"LearnMoreButton\": \"En savoir plus\",\n    \"saveAPI\": \"Enregistrer\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],\n    \"months\": ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"Favoris\",\n    \"bookmarkSortBy\": \"Trier par\",\n    \"sortAlphabetical\": \"A-Z\",\n    \"sortTimeAdded\": \"Plus vieux\",\n    \"bookmarkViewAs\": \"Afficher en\",\n    \"bookmarkViewGrid\": \"Grille\",\n    \"bookmarkViewList\": \"Liste\",\n    \"bookmarkSearch\": \"Rechercher un favori\",\n    \"editBookmarkHeading\": \"Modifier un favori\",\n    \"editBookmarkName\": \"Nom du favori\",\n    \"editBookmarkURL\": \"URL du favori\",\n\n    // New Tab Item\n    \"conditionText\": \"Bonjour, comment allez-vous?\",\n    \"humidityLevel\": \"Humidité\",\n    \"feelsLike\": \"Ressenti\",\n    \"minMaxTemp\": \"Min ~ Max\",\n    \"location\": \"Terre\",\n    \"enterBtn\": \"Rechercher\",\n    \"searchPlaceholder\": \"Saisissez ici...\",\n    \"listenPlaceholder\": \"Écoute...\",\n    \"searchWithHint\": \"Rechercher avec\",\n    \"searchOnHint\": \"Rechercher sur\",\n    \"userText\": \"Cliquez ici pour modifier\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"Bonjour!\",\n        \"afternoon\": \"Bonsoir!\",\n        \"evening\": \"Bonne nuit!\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"Par défaut\",\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"Images\",\n    \"redditEngine\": \"Reddit\",\n    \"wikipediaEngine\": \"Wikipedia\",\n    \"quoraEngine\": \"Quora\",\n\n    // AI Tools\n    \"ai_tools\": \"Outils IA\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"grok\": \"Grok\",\n    \"qwen\": \"Qwen\",\n    \"perplexity\": \"Perplexity\",\n    \"deepseek\": \"DeepSeek\",\n    \"metaAI\": \"Meta AI\",\n    \"firefly\": \"Adobe Firefly\",\n    \"aiSettingsIntro\": \"Sélectionnez les outils IA à afficher\",\n    \"resetAISettingsBtn\": \"Réinitialiser\",\n\n    // Theme\n    \"lightThemed\": \"Clair\",\n    \"darkThemed\": \"Sombre\",\n    \"systemThemed\": \"Système\",\n\n\n    // Wallpaper and misc\n    \"uploadWallpaperText\": \"Charger un fond d'écran\",\n    \"backupText\": \"Sauvegarder\",\n    \"restoreText\": \"Restaurer\",\n    \"rangColor\": \"Choisir la couleur\",\n    \"opacityTitle\": \"Opacité\",\n    \"adjustOpacityDesc\": \"Ajuster la transparence de l'interface\",\n\n    // Tips\n    \"switchSearchModes\": \"Changer de mode de recherche\",\n    \"switchSearchModesInfo\": \"Cliquer sur ‘Rechercher avec’ pour changer de mode.\",\n    \"adjustZoom\": \"Ajuster le zoom\",\n    \"adjustZoomInfo\": \"Appuyez Ctrl + \\\"+\\\" ou Ctrl + \\\"-\\\" pour ajuster le zoom.\",\n    \"changeBrowserTheme\": \"Changer le thème du navigateur\",\n    \"chromeThemeInfo\": \"Clquez sur les trois points (⋮) > Plus d'outils > Personnaliser Chrome, puis choisissez une couleur qui correspond au thème de l'extension.\",\n    \"edgeThemeInfo\": \"Aller dans Paramètres > Apparence, puis choisissez une couleur qui correspond au thème de l'extension.\",\n    \"braveThemeInfo\": 'Visitez <a href=\"https://chromewebstore.google.com/category/themes/\" target=\"_blank\">Chrome Theme Store</a>, telecharger et appliquer le thème qui correspond au thème de l\\'extension.',\n    \"firefoxThemeInfo\": 'Visitez <a href=\"https://addons.mozilla.org/firefox/themes/\" target=\"_blank\">Firefox Themes</a>, telecharger et appliquer le thème qui correspond au thème de l\\'extension.',\n    \"updateFirefoxHomepage\": \"Mettre à jour la page d'accueil\",\n    \"updateFirefoxHomepageInfo\": \"Pour changer votre page d'accueil comme le nouvel onglet, visitez <a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\">ce lien</a> et suivez les instructions.\",\n    \"dontShowTips\": \"Ne plus afficher\",\n\n    // Footer Toast\n    \"footerToastTitle\": \"En train de voir une bannière?\",\n    \"footerToastMessage\": \"Pour masquer la bannière, faites un clic droit dessus et sélectionnez 'Masquer le pied de page sur un nouvel onglet'.\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"OK\",\n    \"yesText\": \"Oui\",\n    \"noText\": \"Non\",\n    \"agreeText\": \"J'accepte\",\n    \"cancelText\": \"Annuler\",\n    \"confirmWallpaper\": \"Souhaitez-vous définir une nouvelle image comme fond d'écran pour la journée?\",\n    \"confirmRestore\": \"Êtes-vous sûr de vouloir réinitialiser vos paramètres? Cette action ne peut être annulée.\",\n    \"Nobackgroundset\": \"Aucune image de fond n'est actuellement définie.\",\n    \"clearbackgroundimage\": \"Êtes-vous sûr de vouloir effacer l'image de fond?\",\n    \"ProxyDisclaimer\": \"Toutes les fonctions du proxy sont désactivées par défaut.\\n\\nSi vous activez les suggestions de recherche et le proxy de contournement CORS, il est fortement recommandé d'héberger votre propre proxy pour une meilleure confidentialité.\\n\\nPar défaut, le proxy sera réglé sur https://mynt-proxy.rhythmcorehq.com, ce qui signifie que toutes vos données passeront par ce service, ce qui peut poser des problèmes de confidentialité.\",\n    \"GPSDisclaimer\": \"Vos données de localisation sont utilisées uniquement pour fournir des mises à jour météorologiques précises. Elles sont stockées temporairement dans le navigateur et ne sont ni partagées avec des services tiers, ni accessibles à nous.\\n\\nEn activant le GPS, vous consentez à partager localement votre localisation avec l'extension.\",\n    \"failedbackup\": \"Échec de la sauvegarde: \",\n    \"restorecompleted\": \"Restauration terminée avec succès!\",\n    \"restorefailed\": \"Échec de la restauration: \",\n    \"invalidBackup\": \"Fichier de sauvegarde invalide\",\n    \"deleteBookmark\": \"Êtes-vous sûr de vouloir supprimer le favori \\\"{title}\\\"?\",\n    \"UnsupportedBrowser\": \"Les favoris ne sont pas supportés dans votre navigateur.\",\n    \"resetShortcutsPrompt\": \"Tous les raccourcis enregistrés seront supprimés et réinitialisés par défaut. Voulez-vous continuer?\"\n};"
  },
  {
    "path": "locales/hi.js",
    "content": "// Hindi\nconst hi = {\n    \"newTabTitle\": \"नया टैब\",\n    // Menu Items\n    \"github\": \"गिटहब\",\n    \"feedback\": \"प्रतिक्रिया\",\n\n    // Section titles\n    \"personalizationSectionTitle\": \"व्यक्तिगतकरण\",\n    \"clockSectionTitle\": \"घड़ी\",\n    \"searchSectionTitle\": \"खोज\",\n    \"weatherSectionTitle\": \"मौसम\",\n    \"appearanceSectionTitle\": \"दिखावट\",\n    \"settingsSectionTitle\": \"सेटिंग्स\",\n\n    // Shortcuts\n    \"shortcutsText\": \"शॉर्टकट्स\",\n    \"enableShortcutsText\": \"सहेजे गए शॉर्टकट प्रदर्शित करें\",\n    \"editShortcutsText\": \"शॉर्टकट्स संपादित करें\",\n    \"shortcutsInfoText\": \"निर्धारित करें कि कौन से शॉर्टकट दिखेंगे\",\n    \"editShortcutsList\": \"सहेजे गए शॉर्टकट\",\n    \"editShortcutsListInfo\": \"आप \\\"+\\\" आइकन पर क्लिक करके नए शॉर्टकट्स जोड़ सकते हैं या शॉर्टकट के नाम या URL पर क्लिक करके मौजूदा शॉर्टकट्स को संपादित कर सकते हैं। कस्टम आइकन रीसेट करने के लिए इमेज URL को खाली करें।\",\n    \"adaptiveIconText\": \"अनुकूलनीय आइकन\",\n    \"adaptiveIconInfoText\": \"शॉर्टकट आइकन थीम से मेल खाते हुए दिखेंगे\",\n    \"bookmarksText\": \"बुकमार्क्स\",\n    \"bookmarksInfo\": \"बुकमार्क्स साइडबार दिखाएँ\",\n    \"ai_tools_button\": \"AI उपकरण\",\n    \"enable_ai_tools\": \"AI उपकरणों के शॉर्टकट्स प्रदर्शित करें\",\n    \"aiToolsSettingsText\": \"AI उपकरण सेटिंग्स\",\n    \"aiToolsSettingsInfo\": \"AI उपकरणों के शॉर्टकट्स प्रबंधित करें\",\n    \"googleAppsMenuText\": \"गूगल ऐप्स\",\n    \"googleAppsMenuInfo\": \"गूगल ऐप्स के शॉर्टकट्स प्रदर्शित करें\",\n    \"googleAppsHover\": \"गूगल ऐप्स\",\n\n    \"shortcutDefaultName\": \"नया शॉर्टकट\",\n    \"shortcutInputName\": \"शॉर्टकट का नाम\",\n    \"shortcutInputUrl\": \"शॉर्टकट का URL\",\n    \"shortcutInputIcon\": \"कस्टम आइकन: URL या SVG (वैकल्पिक)\",\n    \"recentlyAddedBookmarks\": \"हाल ही में जोड़े गए\",\n\n    // To-do List\n    \"todoListText\": \"कार्य सूची\",\n    \"todoListInfo\": \"दैनिक कार्यों की सूची देखें\",\n    \"todoListHover\": \"कार्य सूची\",\n    \"todoPlaceholder\": \"कार्य जोड़ें...\",\n\n    // Clock\n    \"hideClockBox\": \"घड़ी छिपाएँ\",\n    \"hideClockBoxInfo\": \"घड़ी और तारीख छिपाएँ\",\n    \"digitalclocktitle\": \"डिजिटल घड़ी\",\n    \"digitalclockinfo\": \"डिजिटल घड़ी पर स्विच करें\",\n    \"timeformattitle\": \"12 घंटे का प्रारूप\",\n    \"timeformatinfo\": \"12 घंटे का समय प्रारूप उपयोग करें\",\n    \"greetingtitle\": \"अभिवादन\",\n    \"greetinginfo\": \"कस्टम टेक्स्ट के नीचे अभिवादन दिखाएँ\",\n\n    // Misc\n    \"userTextTitle\": \"कस्टमाइज़ेबल टेक्स्ट\",\n    \"userTextInfo\": \"घड़ी के नीचे कस्टम टेक्स्ट दिखाएँ\",\n    \"fahrenheitCelsiusCheckbox\": \"तापमान फ़ारेनहाइट में बदलें\",\n    \"fahrenheitCelsiusText\": \"बदलाव के लिए पृष्ठ को रीफ्रेश करें\",\n    \"hideWeatherTitle\": \"मौसम छिपाएँ\",\n    \"hideWeatherInfo\": \"मौसम विजेट्स को अक्षम करें\",\n    \"hideWeatherBox\": \"मौसम कार्ड छिपाएँ\",\n    \"hideWeatherBoxInfo\": \"केवल तापमान पिल दिखाएँ\",\n    \"minMaxTempText\": \"न्यूनतम-अधिकतम तापमान\",\n    \"minMaxTempSubText\": \"अनुभूत तापमान की जगह न्यूनतम और अधिकतम तापमान दिखाएँ\",\n\n    // Search\n    \"micIconTitle\": \"माइक्रोफोन आइकन छिपाएँ\",\n    \"micIconInfo\": \"अगर वॉइस टाइपिंग काम नहीं कर रहा है\",\n    \"hideSearchWith\": \"सर्च इंजन छिपाएँ\",\n    \"hideSearchWithInfo\": \"आइकन पर क्लिक करके सर्च इंजन बदलें\",\n    \"motivationalQuotesText\": \"प्रेरणादायक उद्धरण\",\n    \"motivationalQuotesInfo\": \"खोज बार के नीचे उद्धरण दिखाएँ\",\n    \"newQuoteOnRefreshText\": \"दैनिक उद्धरण\",\n    \"newQuoteOnRefreshInfo\": \"हर बार रिफ्रेश होने के बजाय दिन में एक ही उद्धरण दिखाएँ\",\n    \"search_suggestions_button\": \"खोज सुझाव\",\n    \"search_suggestions_text\": \"खोज सुझाव सक्षम करें\",\n\n    // Proxy\n    \"useproxytitletext\": \"प्रॉक्सी बायपास\",\n    \"useproxyText\": \"यदि खोज सुझाव काम नहीं कर रहे हैं\",\n    \"ProxyText\": \"CORS बायपास प्रॉक्सी\",\n    \"ProxySubtext\": \"अपना CORS बायपास प्रॉक्सी जोड़ें\",\n    \"HostproxyButton\": \"अपना प्रॉक्सी संचालित करें\",\n\n    // Location\n    \"useGPS\": \"GPS का उपयोग करें\",\n    \"useGPSInfo\": \"लाइव स्थान अपडेट के लिए GPS सक्षम करें\",\n    \"UserLocText\": \"अपना स्थान दर्ज करें\",\n    \"UserLocSubtext\": \"यदि मौसम का स्थान सही नहीं है\",\n    \"userLoc\": \"आपका शहर या निर्देशांक (अक्षांश, देशांतर)\",\n    \"PrivacyPolicy\": \"गोपनीयता नीति\",\n\n    // Weather\n    \"WeatherApiText\": \"अपनी WeatherAPI कुंजी दर्ज करें\",\n    \"WeatherApiSubtext\": \"यदि मौसम की सुविधा काम नहीं कर रही है\",\n    \"userAPI\": \"आपकी WeatherAPI कुंजी\",\n    \"LearnMoreButton\": \"और जानें\",\n    \"saveAPI\": \"सहेजें\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'],   // Truncated for display\n    // \"days\": ['रविवार', 'सोमवार', 'मंगलवार', 'बुधवार', 'गुरुवार', 'शुक्रवार', 'शनिवार'],  // Full\n    \"months\": ['जनवरी', 'फ़रवरी', 'मार्च', 'अप्रैल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितम्बर', 'अक्टूबर', 'नवंबर', 'दिसंबर'],\n    // \"months\": ['जन', 'फर', 'मार्च', 'अप्र', 'मई', 'जून', 'जुला', 'अग', 'सित', 'अक्टू', 'नव', 'दिस'],   // Truncated\n\n    // Bookmarks\n    \"bookmarksHeading\": \"बुकमार्क्स\",\n    \"bookmarkSortBy\": \"क्रमबद्ध करें\",\n    \"sortAlphabetical\": \"A-Z\",\n    \"sortTimeAdded\": \"पुराना-नया\",\n    \"bookmarkViewAs\": \"इस रूप में देखें\",\n    \"bookmarkViewGrid\": \"ग्रिड\",\n    \"bookmarkViewList\": \"लिस्ट\",\n    \"bookmarkSearch\": \"बुकमार्क खोजें\",\n    \"editBookmarkHeading\": \"बुकमार्क संपादित करें\",\n    \"editBookmarkName\": \"बुकमार्क नाम\",\n    \"editBookmarkURL\": \"बुकमार्क URL\",\n\n    // New Tab Item\n    \"conditionText\": \"नमस्ते! आप आज कैसे हैं?\",\n    \"humidityLevel\": \"नमी\",\n    \"feelsLike\": \"महसूस\",\n    \"minMaxTemp\": \"न्यून ~ अधिक\",\n    \"location\": \"पृथ्वी\",\n    \"enterBtn\": \"सर्च करें\",\n    \"searchPlaceholder\": \"यहाँ लिखें...\",\n    \"listenPlaceholder\": \"सुन रहे हैं...\",\n    \"searchWithHint\": \"खोज माध्यम\",\n    \"searchOnHint\": \"खोज स्रोत\",\n    \"userText\": \"यहाँ अपना टेक्स्ट लिखें\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"सुप्रभात!\",\n        \"afternoon\": \"शुभ अपराह्न!\",\n        \"evening\": \"शुभ संध्या!\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"डिफ़ॉल्ट\",\n    \"googleEngine\": \"गूगल\",\n    \"duckEngine\": \"डकडकगो\",\n    \"bingEngine\": \"बिंग\",\n    \"braveEngine\": \"ब्रेव\",\n    \"youtubeEngine\": \"यूट्यूब\",\n    \"gImagesEngine\": \"इमेज\",\n    \"redditEngine\": \"रेडिट\",\n    \"wikipediaEngine\": \"विकिपीडिया\",\n    \"quoraEngine\": \"क्वोरा\",\n\n    // AI Tools\n    \"ai_tools\": \"AI उपकरण\",\n    \"chatGPT\": \"चैटGPT\",\n    \"gemini\": \"जेमिनी\",\n    \"copilot\": \"कोपायलट\",\n    \"claude\": \"क्लॉड\",\n    \"grok\": \"ग्रोक\",\n    \"qwen\": \"क्वेन\",\n    \"perplexity\": \"पर्प्लेक्सिटी\",\n    \"deepseek\": \"डीपसीक\",\n    \"metaAI\": \"मेटा AI\",\n    \"firefly\": \"एडोबी फायरफ्लाई\",\n    \"aiSettingsIntro\": \"चुनें की कौन से AI शॉर्टकट्स रखने हैं\",\n    \"resetAISettingsBtn\": \"रीसेट करें\",\n\n    // Theme\n    \"lightThemed\": \"लाइट\",\n    \"darkThemed\": \"डार्क\",\n    \"systemThemed\": \"सिस्टम\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"वॉलपेपर सेट करें\",\n    \"rangColor\": \"रंग चुनें\",\n    \"opacityTitle\": \"अपारदर्शिता\",\n    \"adjustOpacityDesc\": \"इंटरफ़ेस की पारदर्शिता समायोजित करें\",\n    \"backupText\": \"बैकअप करें\",\n    \"restoreText\": \"रिस्टोर करें\",\n    \"resetsettings\": \"सेटिंग्स रीसेट करें\",\n    \"menuCloseText\": \"बंद करें\",\n\n    // Tips\n    \"switchSearchModes\": \"खोज मोड बदलें\",\n    \"switchSearchModesInfo\": \"मोड बदलने के लिए ‘खोज माध्यम’ पर क्लिक करें।\",\n    \"adjustZoom\": \"ज़ूम समायोजित करें\",\n    \"adjustZoomInfo\": \"ज़ूम समायोजित करने के लिए Ctrl + \\\"+\\\" या Ctrl + \\\"-\\\" दबाएँ।\",\n    \"changeBrowserTheme\": \"ब्राउज़र थीम बदलें\",\n    \"chromeThemeInfo\": \"तीन बिंदु (⋮) पर क्लिक करें > अधिक टूल्स > क्रोम को कस्टमाइज़ करें, फिर एक्सटेंशन थीम से मेल खाने वाला रंग चुनें।\",\n    \"edgeThemeInfo\": \"सेटिंग्स > रूपरंग (Appearance) पर जाएं, फिर एक्सटेंशन थीम से मेल खाने वाला रंग चुनें।\",\n    \"braveThemeInfo\": ' <a href=\"https://chromewebstore.google.com/category/themes/\" target=\"_blank\">क्रोम थीम स्टोर</a> पर जाएं, उपयुक्त थीम डाउनलोड करें और लागू करें।',\n    \"firefoxThemeInfo\": '<a href=\"https://addons.mozilla.org/firefox/themes/\" target=\"_blank\">फ़ायरफ़ॉक्स थीम्स</a> पर जाएँ, अपनी पसंद की थीम डाउनलोड करें और उसे लागू करें।',\n    \"updateFirefoxHomepage\": \"होमपेज अपडेट करें\",\n    \"updateFirefoxHomepageInfo\": 'अपने होमपेज को भी नए टैब की तरह बदलने के लिए, <a href=\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\"_blank\">इस लिंक</a> पर जाएं और दिए गए निर्देशों का पालन करें।',\n    \"dontShowTips\": \"इसे फिर से न दिखाएँ\",\n\n    // Footer Toast\n    \"footerToastTitle\": \"नीचे एक बैनर दिखाई दे रहा है?\",\n    \"footerToastMessage\": \"इसे छिपाने के लिए, उस पर राइट-क्लिक करें और 'नए टैब पेज पर फुटर छिपाएँ' चुनें।\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"ठीक है\",\n    \"yesText\": \"हाँ\",\n    \"noText\": \"नहीं\",\n    \"agreeText\": \"मैं सहमत हूँ\",\n    \"cancelText\": \"रद्द करें\",\n    \"confirmWallpaper\": \"क्या आप आज के लिए एक नई छवि को वॉलपेपर के रूप में सेट करना चाहेंगे?\",\n    \"confirmRestore\": \"क्या आप अपनी सेटिंग्स रीसेट करना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती।\",\n    \"Nobackgroundset\": \"कोई बैकग्राउंड छवि वर्तमान में सेट नहीं है।\",\n    \"clearbackgroundimage\": \"क्या आप बैकग्राउंड छवि को हटाना चाहते हैं?\",\n    \"ProxyDisclaimer\": \"सभी प्रॉक्सी फीचर डिफ़ॉल्ट रूप से बंद रहते हैं।\\n\\nयदि आप खोज सुझाव और CORS बायपास प्रॉक्सी सक्षम करते हैं, तो गोपनीयता बढ़ाने के लिए अपना प्रॉक्सी होस्ट करना अत्यधिक अनुशंसित है।\\n\\nडिफ़ॉल्ट रूप से प्रॉक्सी को https://mynt-proxy.rhythmcorehq.com पर सेट किया जाएगा, जिसका अर्थ है कि आपका सारा डेटा इस सेवा से गुजरेगा, जिससे गोपनीयता संबंधित चिंताएँ हो सकती हैं।\",\n    \"GPSDisclaimer\": \"आपका स्थान का डेटा केवल सटीक मौसम अपडेट प्रदान करने के लिए उपयोग किया जाता है। इसे अस्थायी रूप से ब्राउज़र में संग्रहीत किया जाता है और न तो किसी तृतीय-पक्ष सेवा के साथ साझा किया जाता है और न ही हमारे लिए सुलभ है।\\n\\nGPS सक्षम करके, आप एक्सटेंशन के साथ स्थानीय रूप से अपना स्थान साझा करने की सहमति देते हैं।\",\n    \"failedbackup\": \"बैकअप विफल: \",\n    \"restorecompleted\": \"पुनर्स्थापना सफलतापूर्वक पूरी हुई!\",\n    \"restorefailed\": \"पुनर्स्थापना विफल: \",\n    \"invalidBackup\": \"अमान्य बैकअप फ़ाइल चयनित है।\",\n    \"deleteBookmark\": \"क्या आप \\\"{title}\\\" बुकमार्क डिलीट करना चाहते हैं?\",\n    \"UnsupportedBrowser\": \"आपके ब्राउज़र में बुकमार्क समर्थित नहीं हैं।\",\n    \"resetShortcutsPrompt\": \"सभी सहेजे गए शॉर्टकट हटा दिए जाएंगे और डिफ़ॉल्ट पर रीसेट हो जाएंगे। क्या आप जारी रखना चाहते हैं?\",\n    \"invalidFileTypeMessage\": \"कृपया एक मान्य छवि फ़ाइल चुनें।\",\n    \"invalidSvgMessage\": \"अमान्य SVG या इसमें असुरक्षित सामग्री है और इसे आइकन के रूप में उपयोग नहीं किया जा सकता।\",\n    \"invalidIconUrlMessage\": \"कृपया एक मान्य छवि URL दर्ज करें (https://, http://, या data:image/ से शुरू होना चाहिए)।\",\n    \"iconFileTooLargeMessage\": \"चयनित फ़ाइल बहुत बड़ी है: {size} KB। कृपया {max} KB से छोटी फ़ाइल का उपयोग करें।\",\n    \"iconStorageQuotaMessage\": \"आइकन सहेजा नहीं जा सका क्योंकि स्टोरेज सीमा पूरी हो गई है। कृपया छोटा चित्र उपयोग करें।\"\n};\n"
  },
  {
    "path": "locales/hu.js",
    "content": "// Hungarian\nconst hu = {\n  \"newTabTitle\": \"Új oldal\",\n\n  // Menu Items\n  \"github\": \"GitHub\",\n  \"feedback\": \"Visszajelzés\",\n\n  // Section titles\n  \"personalizationSectionTitle\": \"Személyre szabás\",\n  \"clockSectionTitle\": \"Óra\",\n  \"searchSectionTitle\": \"Keresés\",\n  \"weatherSectionTitle\": \"Időjárás\",\n  \"appearanceSectionTitle\": \"Megjelenés\",\n  \"settingsSectionTitle\": \"Beállítások\",\n\n  // Shortcuts\n  \"shortcutsText\": \"Parancsikonok\",\n  \"enableShortcutsText\": \"Parancsikonok megjelenítése\",\n  \"editShortcutsText\": \"Parancsikonok szerkesztése\",\n  \"shortcutsInfoText\": \"Válassza ki a parancsikonokat, amelyeket meg szeretné jeleníteni a kezdőképernyőn\",\n  \"editShortcutsList\": \"Elmentett parancsikonok\",\n  \"editShortcutsListInfo\": \"Új parancsikonokat adhat hozzá a '+' ikonra kattintva, vagy szerkesztheti a meglévőket a parancsikon nevére vagy URL címére kattintva.\",\n  \"adaptiveIconText\": \"Alkalmazkodó ikonformák\",\n  \"adaptiveIconInfoText\": \"A parancsikonok a témához alkalmazkodnak\",\n  \"bookmarksText\": \"Könyvjelzők\",\n  \"bookmarksInfo\": \"Könyvjelzők oldalsáv megjelenítése\",\n  \"ai_tools_button\": \"MI-Eszközök\",\n  \"enable_ai_tools\": \"Parancsikon az MI-eszközökhöz\",\n  \"aiToolsSettingsText\": \"MI-eszközök Beállításai\",\n  \"aiToolsSettingsInfo\": \"MI-eszközök parancsikonjainak kezelése\",\n  \"googleAppsMenuText\": \"Google Alkalmazások\",\n  \"googleAppsMenuInfo\": \"Parancsikonok a Google alkalmazásaihoz\",\n  \"googleAppsHover\": \"Google Appok\",\n\n  // To-do List\n  \"todoListText\": \"Teendő lista\",\n  \"todoListInfo\": \"Napi teendők lista megjelenítése\",\n  \"todoListHover\": \"Teendő lista\",\n  \"todoPlaceholder\": \"Feladat hozzáadása...\",\n\n  // Digital Clock\n  \"hideClockBox\": \"Óra elrejtése\",\n  \"hideClockBoxInfo\": \"Az óra és dátum elrejtése\",\n  \"digitalclocktitle\": \"Digitális óra\",\n  \"digitalclockinfo\": \"Váltás a digitális órára\",\n  \"timeformattitle\": \"12 órás formátum\",\n  \"timeformatinfo\": \"12 órás időformátum használata\",\n  \"greetingtitle\": \"Üdvözlés\",\n  \"greetinginfo\": \"Üdvözlet megjelenítése az egyéni szöveg alatt\",\n\n  // Misc\n  \"userTextTitle\": \"Testreszabható szöveg\",\n  \"userTextInfo\": \"Egyéni szöveg megjelenítése az óra alatt\",\n  \"fahrenheitCelsiusCheckbox\": \"Fahrenheit használata\",\n  \"fahrenheitCelsiusText\": \"Frissítse az oldalt a módosítások alkalmazásához\",\n  \"hideWeatherTitle\": \"Időjárás elrejtése\",\n  \"hideWeatherInfo\": \"Az időjárási widgetek letiltása\",\n  \"hideWeatherBox\": \"Időjárás kártya elrejtése\",\n  \"hideWeatherBoxInfo\": \"Csak a hőmérséklet megjelenítése\",\n  \"minMaxTempText\": \"Min-Max hőmérséklet\",\n  \"minMaxTempSubText\": \"Kicserélni a 'Hőérzet szerint' a minimum és maximum hőmérsékletre\",\n\n  // Search\n  \"micIconTitle\": \"Mikrofon ikon elrejtése\",\n  \"micIconInfo\": \"Ha a hangalapú keresés nem működik\",\n  \"hideSearchWith\": \"Keresőmotorok elrejtése\",\n  \"hideSearchWithInfo\": \"Váltás a keresőmotorok között az ikonra kattintva\",\n  \"motivationalQuotesText\": \"Motivációs idézetek\",\n  \"motivationalQuotesInfo\": \"Idézetek megjelenítése a keresősáv alatt\",\n  \"search_suggestions_button\": \"Keresési javaslatok\",\n  \"search_suggestions_text\": \"Keresési javaslatok bekapcsolása\",\n\n  // Proxy\n  \"useproxytitletext\": \"Proxy megkerülése\",\n  \"useproxyText\": \"Ha a keresési javaslatok nem működnek\",\n  \"ProxyText\": \"CORS megkerülő proxy\",\n  \"ProxySubtext\": \"Saját CORS megkerülő proxy hozzáadása\",\n  \"HostproxyButton\": \"Saját proxy üzemeltetése\",\n\n  // Location\n  \"useGPS\": \"GPS használata\",\n  \"useGPSInfo\": \"GPS engedélyezése az élő helyzet frissítéséhez\",\n  \"UserLocText\": \"Adja meg a tartózkodási helyét\",\n  \"UserLocSubtext\": \"Ha az időjárás helye nem megfelelő\",\n  \"userLoc\": \"A városa vagy koordinátái (földrajzi szélesség, hosszúság)\",\n  \"PrivacyPolicy\": \"Adatvédelmi nyilatkozat\",\n\n  // Weather\n  \"WeatherApiText\": \"Adja meg a WeatherAPI kulcsát\",\n  \"WeatherApiSubtext\": \"Ha az időjárási funkciók nem működnek\",\n  \"userAPI\": \"A WeatherAPI kulcsa\",\n  \"LearnMoreButton\": \"További információk\",\n  \"saveAPI\": \"Mentés\",\n\n  // Body Items\n  // Calendar\n  \"days\": [\n    \"Vasárnap\", \"Hétfő\", \"Kedd\", \"Szerda\", \"Csütörtök\", \"Péntek\", \"Szombat\"\n  ],\n  \"months\": [\"Január\", \"Február\", \"Március\", \"Április\", \"Május\", \"Június\", \"Július\", \"Augusztus\", \"Szeptember\", \"Október\", \"November\", \"December\"\n  ],\n\n  // Bookmarks\n  \"bookmarksHeading\": \"Könyvjelzők\",\n  \"bookmarkSortBy\": \"Rendezés\",\n  \"sortAlphabetical\": \"A-Z\",\n  \"sortTimeAdded\": \"Régi-Új\",\n  \"bookmarkViewAs\": \"Megjelenítés mint\",\n  \"bookmarkViewGrid\": \"Rács\",\n  \"bookmarkViewList\": \"Lista\",\n  \"bookmarkSearch\": \"Könyvjelző keresése\",\n  \"editBookmarkHeading\": \"Könyvjelző szerkesztése\",\n  \"editBookmarkName\": \"Könyvjelző neve\",\n  \"editBookmarkURL\": \"Könyvjelző URL-je\",\n\n  // New Tab Item\n  \"conditionText\": \"Szia! Hogy vagy ma?\",\n  \"humidityLevel\": \"Páratartalom\",\n  \"minMaxTemp\": \"Min / Max\",\n  \"feelsLike\": \"Hőérzet szerint\",\n  \"location\": \"Föld\",\n  \"enterBtn\": \"Keresés\",\n  \"searchPlaceholder\": \"Írj ide...\",\n  \"listenPlaceholder\": \"Hallgatlak...\",\n  \"searchWithHint\": \"Keresés a következővel\",\n  \"searchOnHint\": \"Keresés a következőn\",\n  \"userText\": \"Kattints ide a szerkesztéshez\",\n\n  // Greeting\n  \"greeting\": {\n    \"morning\": \"Jó reggelt!\",\n    \"afternoon\": \"Jó napot!\",\n    \"evening\": \"Jó estét!\"\n  },\n\n  // Search Engines and rest\n  \"defaultEngine\": \"Alapértelmezett\",\n  \"googleEngine\": \"Google\",\n  \"duckEngine\": \"Duck\",\n  \"bingEngine\": \"Bing\",\n  \"braveEngine\": \"Brave\",\n  \"youtubeEngine\": \"YouTube\",\n  \"gImagesEngine\": \"Képek\",\n  \"redditEngine\": \"Reddit\",\n  \"wikipediaEngine\": \"Wikipedia\",\n  \"quoraEngine\": \"Quora\",\n\n  // AI Tools\n  \"ai_tools\": \"MI Eszközök\",\n  \"chatGPT\": \"ChatGPT\",\n  \"gemini\": \"Gemini\",\n  \"copilot\": \"Copilot\",\n  \"claude\": \"Claude\",\n  \"grok\": \"Grok\",\n  \"qwen\": \"Qwen\",\n  \"perplexity\": \"Perplexity\",\n  \"deepseek\": \"DeepSeek\",\n  \"metaAI\": \"Meta AI\",\n  \"firefly\": \"Adobe Firefly\",\n  \"aiSettingsIntro\": \"Válassza ki a MI eszközöket, amelyeket szeretne használni\",\n  \"resetAISettingsBtn\": \"Visszaállítás\",\n\n  // Theme\n  \"lightThemed\": \"Világos\",\n  \"darkThemed\": \"Sötét\",\n  \"systemThemed\": \"Rendszer\",\n\n  // Wallpaper and misc\n  \"uploadWallpaperText\": \"Háttérkép feltöltése\",\n  \"rangColor\": \"Szín kiválasztása\",\n  \"opacityTitle\": \"Homályosság\",\n  \"adjustOpacityDesc\": \"Homályosság beállítása\",\n  \"backupText\": \"Mentés\",\n  \"restoreText\": \"Visszaállítás\",\n  \"resetsettings\": \"Beállítások visszaállítása\",\n  \"menuCloseText\": \"Bezárás\",\n\n  // Tips\n  \"switchSearchModes\": \"Keresési módok váltása\",\n  \"switchSearchModesInfo\": \"Kattintson a 'Keresés a következővel' gombra a mód változtatásához.\",\n  \"adjustZoom\": \"Zoom beállítása\",\n  \"adjustZoomInfo\": \"Nyomja meg a Ctrl + '+' vagy Ctrl + '-' billentyűket a zoom beállításához.\",\n  \"changeBrowserTheme\": \"Böngésző témájának változtatása\",\n  \"chromeThemeInfo\": \"Nyomja meg a három pontot (⋮) > További eszközök > Chrome személyre szabása, azután pedig válassza ki a kívánt színt.\",\n  \"edgeThemeInfo\": \"Lépjen a Beállítások > Megjelenés menüpontba, majd válassza ki a kívánt színt.\",\n  \"braveThemeInfo\": \"Látogassa meg a <a href='https://chromewebstore.google.com/category/themes/' target='_blank'>Chrome Theme Store</a>, töltse le és alkalmazza a kívánt témát.\",\n  \"firefoxThemeInfo\": \"Látogassa meg a <a href='https://addons.mozilla.org/firefox/themes/' target='_blank'>Firefox Themes</a>, töltse le és alkalmazza a kívánt témát.\",\n  \"updateFirefoxHomepage\": \"Kezdőlap frissítése\",\n  \"updateFirefoxHomepageInfo\": \"Ha a kezdőlapot is új lapként szeretné kezelni, látogasson el <a href='https://github.com/prem-k-r/MaterialYouNewTab#-firefox' target='_blank'>erre a linkre</a> és kövesse a lépéseket.\",\n  \"dontShowTips\": \"Ne mutassa újra\",\n\n  // Footer Toast\n  \"footerToastTitle\": \"Van egy banner az oldal alján?\",\n  \"footerToastMessage\": \"Hogy elrejtse, kattintson rá jobb gombbal és válassza ki a 'Lábléc elrejtése' opciót.\",\n\n  // Dialog boxes (alerts)\n  \"okText\": \"OK\",\n  \"yesText\": \"Igen\",\n  \"noText\": \"Nem\",\n  \"agreeText\": \"Egyetértek\",\n  \"cancelText\": \"Mégse\",\n  \"confirmWallpaper\": \"Szeretne egy újabb képet beállítani a napi háttérképének?\",\n  \"confirmRestore\": \"Biztos, hogy vissza akarja állítani a beállításokat? Ezt a műveletet nem lehet visszacsinálni.\",\n  \"Nobackgroundset\": \"Jelenleg nincs beállítva háttérkép.\",\n  \"clearbackgroundimage\": \"Biztos, hogy törölni szeretné a háttérképet?\",\n  \"ProxyDisclaimer\": \"Alapértelmezés szerint minden proxy funkció ki van kapcsolva.\\n\\nHa engedélyezi a keresési javaslatokat és a CORS megkerülő proxy-t, erősen ajánlott saját proxy-t üzemeltetni a fokozott adatvédelem érdekében.\\n\\n\\nA proxy alapértelmezés szerint a https://mynt-proxy.rhythmcorehq.com beállítással működik, ami azt jelenti, hogy minden adat ezen a szolgáltatáson keresztül fog átmenni, ami adatvédelmi aggályokat vethet fel.\",\n  \"GPSDisclaimer\": \"A helyadataid kizárólag a pontos időjárás-előrejelzés biztosítására szolgálnak. Ezeket a böngésző ideiglenesen tárolja, és semmilyen harmadik fél szolgáltatással nem osztjuk meg, illetve számunkra sem hozzáférhetőek.\\n\\nA GPS engedélyezésével hozzájárulsz ahhoz, hogy a helyadataidat lokálisan, a bővítménnyel megoszd.\",\n  \"failedbackup\": \"Sikertelen mentés: \",\n  \"restorecompleted\": \"A visszaállítás sikeresen befejeződött!\",\n  \"restorefailed\": \"Sikertelen visszaállítás: \",\n  \"invalidBackup\": \"A választott mentési fájl érvénytelen.\",\n  \"deleteBookmark\": \"Biztos, hogy törölni szeretné a könyvjelzőt '{title}'?\",\n  \"UnsupportedBrowser\": \"A könyvjelzők nem támogatottak a böngészőjében\",\n  \"resetShortcutsPrompt\": \"Az összes mentett parancsikon törlésre kerül és visszaállításra kerülnek az alapértelmezett beállítások. Szeretné folytatni?\",\n  \"iconFileTooLargeMessage\": \"A kiválasztott fájl túl nagy: {size} KB. Kérjük, használjon {max} KB-nál kisebb fájlt.\",\n  \"iconStorageQuotaMessage\": \"Az ikon mentése nem sikerült, mert elérte a tárhelykeretet. Távolítson el néhány egyéni ikont, vagy használjon kisebb képet.\"\n};\n"
  },
  {
    "path": "locales/idn.js",
    "content": "// Indonesian\nconst idn = {\n    \"newTabTitle\": \"Tab Baru\",\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"Masukan\",\n\n    // Section titles\n    \"personalizationSectionTitle\": \"Personalisasi\",\n    \"clockSectionTitle\": \"Jam\",\n    \"searchSectionTitle\": \"Pencarian\",\n    \"weatherSectionTitle\": \"Cuaca\",\n    \"appearanceSectionTitle\": \"Tampilan\",\n    \"settingsSectionTitle\": \"Pengaturan\",\n\n    // Shortcuts\n    \"shortcutsText\": \"Pintasan\",\n    \"enableShortcutsText\": \"Tampilkan Pintasan\",\n    \"editShortcutsText\": \"Edit Pintasan\",\n    \"shortcutsInfoText\": \"Pilih pintasan apa yang dapat ditampilkan\",\n    \"editShortcutsList\": \"Pintasan Tersimpan\",\n    'editShortcutsListInfo': 'Anda dapat menambahkan pintasan baru dengan mengeklik ikon \\\"+\\\" atau mengedit yang sudah ada dengan mengeklik nama pintasan atau URL.\\nUntuk mengatur ulang ikon kustom, cukup kosongkan URL gambar',\n    \"adaptiveIconText\": \"Ikon Adaptif\",\n    \"adaptiveIconInfoText\": \"Ikon pintasan akan menyesuaikan dengan tema\",\n    \"bookmarksText\": \"Markah Buku\",\n    \"bookmarksInfo\": \"Tampilkan sidebar markah buku\",\n    \"ai_tools_button\": \"Utilitas AI\",\n    \"enable_ai_tools\": \"Tampilkan pintasan untuk utilitas AI\",\n    \"aiToolsSettingsText\": \"Setelan Utilitas AI\",\n    \"aiToolsSettingsInfo\": \"Kelola pintasan utilitas AI\",\n    \"googleAppsMenuText\": \"Google Apps\",\n    \"googleAppsMenuInfo\": \"Tampilkan pintasan untuk Google Apps\",\n    \"googleAppsHover\": \"Google Apps\",    // Keep this shorter\n\n    \"shortcutDefaultName\": \"Pintasan Baru\",\n    \"shortcutInputName\": \"Nama Pintasan\",\n    \"shortcutInputUrl\": \"URL Pintasan\",\n    \"shortcutInputIcon\": \"Ikon Kustom: URL atau SVG (opsional)\",\n    \"recentlyAddedBookmarks\": \"Terbaru\",\n\n    // To-do List\n    \"todoListText\": \"To-Do List\",\n    \"todoListInfo\": \"Tampilkan To-Do list harian\",\n    \"todoListHover\": \"To-Do List\",\n    \"todoPlaceholder\": \"Tambah tugas...\",\n\n    // Clock\n    \"hideClockBox\": \"Sembunyikan Jam\",\n    \"hideClockBoxInfo\": \"Sembunyikan jam dan tanggal\",\n    \"digitalclocktitle\": \"Jam Digital\",\n    \"digitalclockinfo\": \"Ganti dengan jam digital\",\n    \"timeformattitle\": \"Format 12-Jam\",\n    \"timeformatinfo\": \"Gunakan format waktu 12-jam\",\n    \"greetingtitle\": \"Sapaan\",\n    \"greetinginfo\": \"Tampilkan sapaan di bawah teks kustom\",\n\n    // Misc\n    \"userTextTitle\": \"Teks Kostum\",\n    \"userTextInfo\": \"Tampilkan teks kustom di bawah jam\",\n    \"fahrenheitCelsiusCheckbox\": \"Ganti dengan Fahrenheit\",\n    \"fahrenheitCelsiusText\": \"Muat ulang halaman untuk mengaplikasikan perubahan\",\n    \"hideWeatherTitle\": \"Sembunyikan Cuaca\",\n    \"hideWeatherInfo\": \"Nonaktifkan widget cuaca\",\n    \"hideWeatherBox\": \"Sembunyikan Kartu Cuaca\", // Toggle for mobile devices only\n    \"hideWeatherBoxInfo\": \"Hanya tampilkan kapsul suhu\",\n    \"minMaxTempText\": \"Suhu Min-Maks\",\n    \"minMaxTempSubText\": \"Ganti 'Terasa Seperti' dengan suhu minimum dan maksimum\",\n\n    // Search\n    \"micIconTitle\": \"Sembunyikan Ikon Mikrofon\",\n    \"micIconInfo\": \"Jika pengenalan suara tidak berfungsi\",\n    \"hideSearchWith\": \"Sembunyikan Mesin Pencarian\",\n    \"hideSearchWithInfo\": \"Ganti mesin pencarian dengan mengeklik ikon-nya\",\n    \"motivationalQuotesText\": \"Kutipan Motivasi\",\n    \"motivationalQuotesInfo\": \"Tampilkan kutipan di bawah bar pencarian\",\n    \"newQuoteOnRefreshText\": \"Kutipan Harian\",\n    \"newQuoteOnRefreshInfo\": \"Tampilkan 1 kutipan/hari daripada memuat ulang setiap saat\",\n    \"search_suggestions_button\": \"Saran Pencarian\",\n    \"search_suggestions_text\": \"Aktifkan saran pencarian\",\n\n    // Proxy\n    \"useproxytitletext\": \"Bypass Proksi\",\n    \"useproxyText\": \"Jika saran pencarian tidak berfungsi\",\n    \"ProxyText\": \"Bypass proksi CORS\",\n    \"ProxySubtext\": \"Tambahkan bypass proksi CORS Anda sendiri\",\n    \"HostproxyButton\": \"Host proksi Anda sendiri\",\n\n    // Location\n    \"useGPS\": \"Gunakan GPS\",\n    \"useGPSInfo\": \"Aktifkan GPS untuk pembaruan lokasi secara langsung\",\n    \"UserLocText\": \"Masukkan Lokasi Anda\",\n    \"UserLocSubtext\": \"Jika lokasi cuaca tidak berfungsi\",\n    \"userLoc\": \"Kota atau Koordinat Anda (Lintang, Bujur)\",\n    \"PrivacyPolicy\": \"Kebijakan privasi\",\n\n    // Weather\n    \"WeatherApiText\": \"Masukkan kunci WeatherAPI Anda\",\n    \"WeatherApiSubtext\": \"Jika fungsionalitas cuaca tidak berfungsi\",\n    \"userAPI\": \"Kunci weatherAPI Anda\",\n    \"LearnMoreButton\": \"Pelajari lebih lanjut\",\n    \"saveAPI\": \"Simpan\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu'],\n    \"months\": ['Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember'],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"Markah Buku\",\n    \"bookmarkSortBy\": \"Urutkan berdasarkan\",\n    \"sortAlphabetical\": \"A-Z\",\n    \"sortTimeAdded\": \"Lama-Baru\",\n    \"bookmarkViewAs\": \"Kisi-kisi\",\n    \"bookmarkViewGrid\": \"Tata Letak\",\n    \"bookmarkViewList\": \"Daftar\",\n    \"bookmarkSearch\": \"Cari markah buku\",\n    \"editBookmarkHeading\": \"Edit Markah Buku\",\n    \"editBookmarkName\": \"Nama Markah Buku\",\n    \"editBookmarkURL\": \"URL Markah Buku\",\n\n    // New Tab Item\n    \"conditionText\": \"Halo! Bagaimana kabarmu hari ini?\",\n    \"humidityLevel\": \"Kelembapan\",\n    \"feelsLike\": \"Terasa\",\n    \"minMaxTemp\": \"Min ~ Maks\",\n    \"location\": \"Bumi\",\n    \"enterBtn\": \"Telusuri\",\n    \"searchPlaceholder\": \"Ketik disini...\",\n    \"listenPlaceholder\": \"Mendengarkan...\",\n    \"searchWithHint\": \"Cari Dengan\",\n    \"searchOnHint\": \"Cari Pada\",\n    \"userText\": \"Klik disini untuk mengedit\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"Selamat Pagi!\",\n        \"afternoon\": \"Selamat Sore!\",\n        \"evening\": \"Selamat Malam!\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"Default\",\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"Images\",\n    \"redditEngine\": \"Reddit\",\n    \"wikipediaEngine\": \"Wikipedia\",\n    \"quoraEngine\": \"Quora\",\n\n    // AI Tools\n    \"ai_tools\": \"Utilitas AI\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"grok\": \"Grok\",\n    \"qwen\": \"Qwen\",\n    \"perplexity\": \"Perplexity\",\n    \"deepseek\": \"DeepSeek\",\n    \"metaAI\": \"Meta AI\",\n    \"firefly\": \"Adobe Firefly\",\n    \"aiSettingsIntro\": \"Pilih utilitas AI mana yang ditampilkan\",\n    \"resetAISettingsBtn\": \"Atur Ulang\",\n\n    // Theme\n    \"lightThemed\": \"Terang\",\n    \"darkThemed\": \"Gelap\",\n    \"systemThemed\": \"Sistem\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"Unggah Wallpaper\",\n    \"rangColor\": \"Pilih warna\",\n    \"opacityTitle\": \"Opasitas\",\n    \"adjustOpacityDesc\": \"Mengatur transparansi antarmuka\",\n    \"backupText\": \"Cadangkan\",\n    \"restoreText\": \"Pulihkan\",\n    \"resetsettings\": \"Atur Ulang Setelan\",\n    \"menuCloseText\": \"Tutup\",\n\n    // Tips\n    \"switchSearchModes\": \"Ubah Mode Pencarian\",\n    \"switchSearchModesInfo\": \"Klik pada ‘Cari Dengan’ untuk mengubah mode\",\n    \"adjustZoom\": \"Atur Zoom\",\n    \"adjustZoomInfo\": \"Tekan Ctrl + \\\"+\\\" atau Ctrl + \\\"-\\\" untuk mengatur zoom.\",\n    \"changeBrowserTheme\": \"Ubah Tema Browser\",\n    \"chromeThemeInfo\": \"Klik pada tiga titik (⋮) > Lainnya > Kustomisasi Chrome, lalu pilih warna yang cocok dengan tema ekstensi.\",\n    \"edgeThemeInfo\": \"Pergi ke Setelan > Tampilan, lalu pilih warna yang cocok dengan tema ekstensi.\",\n    \"braveThemeInfo\": 'Kunjungi <a href=\"https://chromewebstore.google.com/category/themes/\" target=\"_blank\">Chrome Theme Store</a>, unduh dan terapkan tema yang cocok dengan ekstensi.',\n    \"firefoxThemeInfo\": 'Kunjungi <a href=\"https://addons.mozilla.org/firefox/themes/\" target=\"_blank\">Firefox Themes</a>, unduh dan terapkan tema yang cocok dengan ekstensi.',\n    \"updateFirefoxHomepage\": \"Perbarui Beranda\",\n    \"updateFirefoxHomepageInfo\": \"Untuk mengubah beranda Anda seperti tab baru juga, kunjungi <a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\">tautan ini</a> dan ikuti intruksi-nya.\",\n    \"dontShowTips\": \"Jangan tampilkan lagi\",\n\n    // Footer Toast\n    \"footerToastTitle\": \"Melihat banner di bawah?\",\n    \"footerToastMessage\": \"Untuk menyembunyikannya, klik kanan pada banner dan pilih 'Sembunyikan Footer Pada Halaman Tab Baru'.\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"OK\",\n    \"yesText\": \"Ya\",\n    \"noText\": \"Tidak\",\n    \"agreeText\": \"Saya Setuju\",\n    \"cancelText\": \"Batalkan\",\n    \"confirmWallpaper\": \"Apakah Anda ingin memasang gambar baru sebagai wallpaper harian Anda?\",\n    \"confirmRestore\": \"Apakah Anda yakin ingin mengatur ulang setelan Anda? Tindakan ini tidak dapat dibatalkan.\",\n    \"Nobackgroundset\": \"Tidak ada gambar latar belakang yang dipasang saat ini.\",\n    \"clearbackgroundimage\": \"Apakah Anda yakin ingin menghapus gambar latar belakang?\",\n    \"ProxyDisclaimer\": \"Semua fitur proxy dimatikan secara default.\\n\\nJika Anda mengaktifkan saran pencarian dan bypass proksi CORS, sangat disarankan untuk host proksi Anda sendiri untuk privasi yang lebih baik.\\n\\nSecara default, proksi akan disetel ke https://mynt-proxy.rhythmcorehq.com, yang berarti semua data Anda akan melewati layanan ini, yang mungkin saja dapat menimbulkan kekhawatiran privasi.\",\n    \"GPSDisclaimer\": \"Data lokasi Anda digunakan hanya sebatas untuk memberikan pembaruan cuaca yang akurat. Ini tersimpan sementara pada browser dan tidak juga dibagikan pada layanan pihak ketiga apapun dan juga tidak dapat diakses oleh Kami.\\n\\nDengan mengaktifkan GPS, Anda setuju untuk membagikan lokasi Anda dengan ekstensi ini secara lokal.\",\n    \"failedbackup\": \"Pencadangan gagal: \",\n    \"restorecompleted\": \"Pemulihan berhasil dengan sukses!\",\n    \"restorefailed\": \"Pemulihan gagal: \",\n    \"invalidBackup\": \"File cadangan yang dipilih tidak valid\",\n    \"deleteBookmark\": \"Apakah Anda yakin untuk menghapus markah buku \\\"{title}\\\"?\",\n    \"UnsupportedBrowser\": \"Markah buku tidak didukung oleh browser Anda\",\n    \"resetShortcutsPrompt\": \"Semua pintasan yang tersimpan akan terhapus dan diatur ulang ke default. Apakah Anda ingin melanjutkannya?\",\n    \"invalidFileTypeMessage\": \"Pilih file gambar yang valid.\",\n    \"invalidSvgMessage\": \"SVG yang dipilih tidak valid, atau mengandung konten tidak pantas dan tidak bisa digunakan sebagai ikon.\",\n    \"invalidIconUrlMessage\": \"Masukkan URL gambar yang valid (perlu diawali dengan https://, http://, atau data:image/).\",\n    \"iconFileTooLargeMessage\": \"File yang terpilih terlalu besar: {size} KB. Tolong gunakan file yang kurang dari {max} KB.\",\n    \"iconStorageQuotaMessage\": \"Ikon tidak bisa tersimpan karena menyentuh batas maksimal penyimpanan. Hapus beberapa ikon kustom atau gunakan gambar yang lebih kecil.\"\n};\n"
  },
  {
    "path": "locales/it.js",
    "content": "// Italian\nconst it = {\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"Feedback\",\n\n    // Shortcuts\n    \"shortcutsText\": \"Scorciatoie\",\n    \"enableShortcutsText\": \"Abilita/disabilita scorciatoie\",\n    \"editShortcutsText\": \"Modifica Scorciatoie\",\n    \"shortcutsInfoText\": \"Scegli quali scorciatoie mostrare\",\n    \"editShortcutsList\": \"Scorciatoie Salvate\",\n    \"editShortcutsListInfo\": \"Puoi aggiungere nuove scorciatoie cliccando l'icona \\\"+\\\" o modificiare le esistenti cliccando il nome della scorciatoia o dell'URL.\",\n    \"adaptiveIconText\": \"Forme di Icona Adattiva\",\n    \"adaptiveIconInfoText\": \"Le icone delle scorciatoie saranno sempre rotonde\",\n    \"bookmarksText\": \"Segnalibri\",\n    \"bookmarksInfo\": \"Mostra segnalibri sulla barra laterale\",\n    \"ai_tools_button\": \"Strumenti IA\",\n    \"enable_ai_tools\": \"Abilita/disabilita scorciatoie Strumenti IA\",\n    \"googleAppsMenuText\": \"App Google\",\n    \"googleAppsMenuInfo\": \"Mostra collegamenti App Google\",\n    \"googleAppsHover\": \"App di Google\",   // Keep this shorter\n\n    // To-do List\n    \"todoListText\": \"Lista cose da fare\",\n    \"todoListInfo\": \"Mostra una lista di cose da fare giornaliera\",\n    \"todoListHover\": \"Lista ToDo\",    // Keep this short\n    \"todoPlaceholder\": \"Aggiungi attività...\",\n\n    // Clock\n    \"hideClockBox\": \"Nascondi Orologio\",\n    \"hideClockBoxInfo\": \"Mostra e nascodi orologio e ora\",\n    \"digitalclocktitle\": \"Orologio Digitale\",\n    \"digitalclockinfo\": \"Abilita/disabilita Orologio Digitale\",\n    \"timeformattitle\": \"Usa formato 12h\",\n    \"timeformatinfo\": \"Usa formato orario a 12 ore\",\n    \"greetingtitle\": \"Saluto\",\n    \"greetinginfo\": \"Mostra il saluto sotto il testo personalizzato\",\n\n    // Misc\n    \"userTextTitle\": \"Testo personalizzabile\",\n    \"userTextInfo\": \"Mostra il testo personalizzato sotto l'orologio\",\n    \"fahrenheitCelsiusCheckbox\": \"Passa a Fahrenheit\",\n    \"fahrenheitCelsiusText\": \"Ricarica la pagina per vedere gli aggiornamenti\",\n    \"hideWeatherTitle\": \"Nascondi Meteo\",\n    \"hideWeatherInfo\": \"Disabilita i widget meteo\",\n    \"hideWeatherBox\": \"Nascondi Scheda Meteo\",    // Toggle for mobile devices only\n    \"hideWeatherBoxInfo\": \"Mostra solo l'indicatore della temperatura\",\n\n    // Search\n    \"micIconTitle\": \"Nascondi icona del microfono\",\n    \"micIconInfo\": \"Se la digitazione vocale non funziona\",\n    \"hideSearchWith\": \"Nascondi motori di ricerca\",\n    \"hideSearchWithInfo\": \"Scegli tra i motori di ricerca cliccando l'icona\",\n    \"motivationalQuotesText\": \"Frasi Motivazionali\",\n    \"motivationalQuotesInfo\": \"Mostra frasi sotto la barra di ricerca\",\n    \"search_suggestions_button\": \"Suggerimenti di Ricerca\",\n    \"search_suggestions_text\": \"Abilita/disabilita Suggerimenti di Ricerca\",\n\n    // Proxy\n    \"useproxytitletext\": \"Bypass Proxy\",\n    \"useproxyText\": \"Se i suggerimenti di ricerca non funzionano\",\n    \"ProxyText\": \"Proxy di Bypass CORS\",\n    \"ProxySubtext\": \"Aggiungi il tuo Proxy di Bypass CORS\",\n    \"HostproxyButton\": \"Hosta il Tuo Proxy\",\n\n    // Location\n    \"useGPS\": \"Usa il GPS\",\n    \"useGPSInfo\": \"Abilita il GPS per aggiornamenti in tempo reale sulla posizione\",\n    \"UserLocText\": \"Inserisci la tua posizione\",\n    \"UserLocSubtext\": \"Se la posizione meteo non è corretta\",\n    \"userLoc\": \"La tua posizione (Città/Latitudine,Longitudine)\",\n    \"PrivacyPolicy\": \"Informativa sulla privacy\",\n\n    // Weather\n    \"WeatherApiText\": \"Inserisci la tua chiave WeatherAPI\",\n    \"WeatherApiSubtext\": \"Se la funzionalità meteo non funziona\",\n    \"userAPI\": \"La tua chiave WeatherAPI\",\n    \"LearnMoreButton\": \"Scopri di più\",\n    \"saveAPI\": \"Salva\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'],\n    \"months\": ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'],\n\n    // Bookmarks ---------\n    \"bookmarksHeading\": \"Segnalibri\",\n    \"bookmarkSortBy\": \"Ordina per\",\n    \"sortAlphabetical\": \"A-Z\",\n    \"sortTimeAdded\": \"Old-New\",\n    \"bookmarkViewAs\": \"Visualizza come\",\n    \"bookmarkViewGrid\": \"Griglia\",      // Keep this shorter\n    \"bookmarkViewList\": \"Elenco\",       // Keep this shorter\n    \"bookmarkSearch\": \"Cerca segnalibro\",\n    \"editBookmarkHeading\": \"Modifica Segnalibro\",\n    \"editBookmarkName\": \"Nome del Segnalibro\",\n    \"editBookmarkURL\": \"URL del Segnalibro\",\n\n    // New Tab Item\n    \"conditionText\": \"Ciao! Come stai oggi?\",\n    \"humidityLevel\": \"Umidità\",\n    \"feelsLike\": \"Percepito\",\n    \"location\": \"Terra\",\n    \"enterBtn\": \"Cerca\",\n    \"searchPlaceholder\": \"Cerca...\",\n    \"listenPlaceholder\": \"Ascoltando...\",\n    \"searchWithHint\": \"Cerca con\",\n    \"searchOnHint\": \"Cerca su\",\n    \"userText\": \"Clicca qui per modificare\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"Buongiorno!\",\n        \"afternoon\": \"Buon pomeriggio!\",\n        \"evening\": \"Buona sera!\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"Default\",\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"Immagini\",\n    \"redditEngine\": \"Reddit\",\n    \"wikipediaEngine\": \"Wikipedia\",\n    \"quoraEngine\": \"Quora\",\n\n    // AI Tools\n    \"ai_tools\": \"Strumenti IA\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"grok\": \"Grok\",\n    \"qwen\": \"Qwen\",\n    \"perplexity\": \"Perplexity\",\n    \"deepseek\": \"DeepSeek\",\n    \"metaAI\": \"Meta AI\",\n    \"firefly\": \"Adobe Firefly\",\n\n    // Theme\n    \"enableDarkMode\": \"Modalità Scura (Sperimentale)\",\n    \"enableDarkModeInfo\": \"Abilita i temi in modalità scura\",\n\n    // Wallpaper and misc\n    \"uploadWallpaperText\": \"Carica immagine\",\n    \"backupText\": \"Backup\",\n    \"restoreText\": \"Ripristina\",\n    \"rangColor\": \"Scegli colore\",\n    \"resetsettings\": \"Reimposta Impostazioni\",\n    \"menuCloseText\": \"Chiudi\",\n\n    // Tips\n    \"switchSearchModes\": \"Cambia modalità di ricerca\",\n    \"switchSearchModesInfo\": \"Clicca su ‘Cerca con’ per cambiare modalità.\",\n    \"adjustZoom\": \"Regola lo zoom\",\n    \"adjustZoomInfo\": \"Premi Ctrl + \\\" +\\\" o Ctrl + \\\" -\\\" per regolare lo zoom.\",\n    \"changeBrowserTheme\": \"Cambia il tema del browser\",\n    \"chromeThemeInfo\": \"Clicca sui tre puntini (⋮) > Altri strumenti > Personalizza Chrome, quindi scegli un colore che si abbini al tema dell'estensione.\",\n    \"edgeThemeInfo\": \"Vai su Impostazioni > Aspetto, quindi scegli un colore che si abbini al tema dell'estensione.\",\n    \"braveThemeInfo\": \"Visita <a href=\\\"https://chromewebstore.google.com/category/themes/\\\" target=\\\"_blank\\\">Chrome Theme Store</a>, scarica e applica il tema che corrisponde all'estensione.\",\n    \"firefoxThemeInfo\": \"Visita <a href=\\\"https://addons.mozilla.org/firefox/themes/\\\" target=\\\"_blank\\\">Temi di Firefox</a>, scarica e applica il tema che corrisponde all'estensione.\",\n    \"updateFirefoxHomepage\": \"Aggiorna Homepage\",\n    \"updateFirefoxHomepageInfo\": \"Per cambiare la tua homepage come la nuova scheda, visita <a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\">questo link</a> e segui le istruzioni.\",\n    \"dontShowTips\": \"Non mostrarlo di nuovo\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"OK\",\n    \"yesText\": \"Yes\",\n    \"noText\": \"No\",\n    \"agreeText\": \"Accetto\",\n    \"cancelText\": \"Annulla\",\n    \"confirmWallpaper\": \"Vuoi impostare una nuova immagine come sfondo per oggi?\",\n    \"confirmRestore\": \"Sei sicuro di voler reimpostare le impostazioni? Questa azione non può essere annullata.\",\n    \"Nobackgroundset\": \"Nessuna immagine di sfondo è attualmente impostata.\",\n    \"clearbackgroundimage\": \"Sei sicuro di voler rimuovere l'immagine di sfondo?\",\n    \"ProxyDisclaimer\": \"Tutte le funzionalità del proxy sono disattivate di default.\\n\\nSe abiliti i suggerimenti di ricerca e il proxy per il bypass CORS, è fortemente consigliato usare un proprio proxy per una maggiore privacy.\\n\\nIl proxy predefinito sarà configurato su https://mynt-proxy.rhythmcorehq.com, il che significa che tutti i tuoi dati passeranno attraverso questo servizio, con possibili rischi per la privacy.\",\n    \"GPSDisclaimer\": \"I dati sulla tua posizione vengono utilizzati esclusivamente per fornire aggiornamenti meteo accurati. Sono temporaneamente memorizzati all'interno del browser e non vengono condivisi con servizi di terze parti né sono accessibili da noi.\\n\\nAbilitando il GPS, acconsenti alla condivisione della tua posizione con l'estensione a livello locale.\",\n    \"failedbackup\": \"Backup fallito: \",\n    \"restorecompleted\": \"Ripristino completato con successo!\",\n    \"restorefailed\": \"Ripristino fallito: \",\n    \"invalidBackup\": \"File di backup non valido\",\n    \"deleteBookmark\": \"Sei sicuro di voler eliminare il segnalibro\",\n    \"UnsupportedBrowser\": \"I segnalibri non sono supportati nel tuo browser \\\"{title}\\\"?\",\n};"
  },
  {
    "path": "locales/ja.js",
    "content": "// Japanese\nconst ja = {\n    \"newTabTitle\": \"新しいタブ\",\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"フィードバック\",\n\n    // Section titles\n    \"personalizationSectionTitle\": \"パーソナライズ\",\n    \"clockSectionTitle\": \"時計\",\n    \"searchSectionTitle\": \"検索\",\n    \"weatherSectionTitle\": \"天気\",\n    \"appearanceSectionTitle\": \"外観\",\n    \"settingsSectionTitle\": \"設定\",\n\n    // Shortcuts\n    \"shortcutsText\": \"ショートカット\",\n    \"enableShortcutsText\": \"保存されたショートカットを表示\",\n    \"editShortcutsText\": \"ショートカットを編集\",\n    \"shortcutsInfoText\": \"表示するショートカットを選択\",\n    \"editShortcutsList\": \"保存されたショートカット\",\n    \"editShortcutsListInfo\": \"\\\"+\\\" アイコンをクリックして新しいショートカットを追加したり、名前やURLをクリックして既存のものを編集できます。\\nアイコンをリセットするには、画像のURLを空にしてください。\",\n    \"adaptiveIconText\": \"アダプティブアイコン\",\n    \"adaptiveIconInfoText\": \"ショートカットアイコンをテーマに適応させます\",\n    \"bookmarksText\": \"ブックマーク\",\n    \"bookmarksInfo\": \"ブックマークのサイドバーを表示\",\n    \"ai_tools_button\": \"AIツール\",\n    \"enable_ai_tools\": \"AIツールのショートカットを表示\",\n    \"aiToolsSettingsText\": \"AIツール設定\",\n    \"aiToolsSettingsInfo\": \"AIツールのショートカットを管理\",\n    \"googleAppsMenuText\": \"Googleアプリ\",\n    \"googleAppsMenuInfo\": \"Googleアプリのショートカットを表示\",\n    \"googleAppsHover\": \"Googleアプリ\",\n\n    \"shortcutDefaultName\": \"新しいショートカット\",\n    \"shortcutInputName\": \"ショートカット名\",\n    \"shortcutInputUrl\": \"ショートカットのURL\",\n    \"shortcutInputIcon\": \"カスタムアイコン: URL または SVG (任意)\",\n    \"recentlyAddedBookmarks\": \"最近追加された項目\",\n\n    // To-do List\n    \"todoListText\": \"To Doリスト\",\n    \"todoListInfo\": \"毎日のTo Doリストを表示\",\n    \"todoListHover\": \"To Doリスト\",\n    \"todoPlaceholder\": \"タスクを追加...\",\n\n    // Clock\n    \"hideClockBox\": \"時計を非表示\",\n    \"hideClockBoxInfo\": \"時計と日付を非表示にする\",\n    \"digitalclocktitle\": \"デジタル時計\",\n    \"digitalclockinfo\": \"デジタル時計に切り替え\",\n    \"timeformattitle\": \"12時間形式\",\n    \"timeformatinfo\": \"12時間形式を使用する\",\n    \"greetingtitle\": \"あいさつ\",\n    \"greetinginfo\": \"カスタムテキストの下にあいさつを表示\",\n\n    // Misc\n    \"userTextTitle\": \"カスタムテキスト\",\n    \"userTextInfo\": \"時計の下にカスタムテキストを表示\",\n    \"fahrenheitCelsiusCheckbox\": \"華氏に切り替え\",\n    \"fahrenheitCelsiusText\": \"変更を適用するにはページを再読み込みしてください\",\n    \"hideWeatherTitle\": \"天気を非表示\",\n    \"hideWeatherInfo\": \"天気ウィジェットを無効にする\",\n    \"hideWeatherBox\": \"天気カードを非表示\",\n    \"hideWeatherBoxInfo\": \"気温のピルのみを表示\",\n    \"minMaxTempText\": \"最低・最高気温\",\n    \"minMaxTempSubText\": \"「体感温度」を最低・最高気温に置き換える\",\n\n    // Search\n    \"micIconTitle\": \"マイクアイコンを非表示\",\n    \"micIconInfo\": \"音声入力が動作しない場合\",\n    \"hideSearchWith\": \"検索エンジンを隠す\",\n    \"hideSearchWithInfo\": \"アイコンをクリックして検索エンジンを切り替える\",\n    \"motivationalQuotesText\": \"モチベーションの名言\",\n    \"motivationalQuotesInfo\": \"検索バーの下に名言を表示\",\n    \"newQuoteOnRefreshText\": \"毎日の名言\",\n    \"newQuoteOnRefreshInfo\": \"更新のたびではなく、1日1つの名言を表示\",\n    \"search_suggestions_button\": \"検索候補\",\n    \"search_suggestions_text\": \"検索候補を有効にする\",\n\n    // Proxy\n    \"useproxytitletext\": \"プロキシバイパス\",\n    \"useproxyText\": \"検索候補が機能しない場合\",\n    \"ProxyText\": \"CORSバイパスプロキシ\",\n    \"ProxySubtext\": \"独自のCORSバイパスプロキシを追加\",\n    \"HostproxyButton\": \"独自のプロキシをホスト\",\n\n    // Location\n    \"useGPS\": \"GPSを使う\",\n    \"useGPSInfo\": \"ライブ位置情報更新用にGPSを有効にする\",\n    \"UserLocText\": \"場所を入力\",\n    \"UserLocSubtext\": \"天気の地域が正しくない場合\",\n    \"userLoc\": \"都市または座標（緯度、経度）\",\n    \"PrivacyPolicy\": \"プライバシーポリシー\",\n\n    // Weather\n    \"WeatherApiText\": \"WeatherAPIキーを入力\",\n    \"WeatherApiSubtext\": \"天気機能が動作しない場合\",\n    \"userAPI\": \"WeatherAPIキー\",\n    \"LearnMoreButton\": \"詳細情報\",\n    \"saveAPI\": \"保存\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'],\n    \"months\": ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"ブックマーク\",\n    \"bookmarkSortBy\": \"並び替え\",\n    \"sortAlphabetical\": \"A-Z\",\n    \"sortTimeAdded\": \"追加順\",\n    \"bookmarkViewAs\": \"表示形式\",\n    \"bookmarkViewGrid\": \"グリッド\",\n    \"bookmarkViewList\": \"リスト\",\n    \"bookmarkSearch\": \"ブックマークを検索\",\n    \"editBookmarkHeading\": \"ブックマークを編集\",\n    \"editBookmarkName\": \"ブックマーク名\",\n    \"editBookmarkURL\": \"ブックマークのURL\",\n\n    // New Tab Item\n    \"conditionText\": \"こんにちは！本日の調子はいかがですか？\",\n    \"humidityLevel\": \"湿度\",\n    \"feelsLike\": \"体感\",\n    \"minMaxTemp\": \"最低 ~ 最高\",\n    \"location\": \"地球\",\n    \"enterBtn\": \"検索\",\n    \"searchPlaceholder\": \"検索キーワードを入力...\",\n    \"listenPlaceholder\": \"聴き取り中...\",\n    \"searchWithHint\": \"検索モード\",\n    \"searchOnHint\": \"次で検索\",\n    \"userText\": \"ここをクリックして編集\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"おはようございます！\",\n        \"afternoon\": \"こんにちは！\",\n        \"evening\": \"こんばんは！\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"デフォルト\",\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"画像\",\n    \"redditEngine\": \"Reddit\",\n    \"wikipediaEngine\": \"Wikipedia\",\n    \"quoraEngine\": \"Quora\",\n\n    // AI Tools\n    \"ai_tools\": \"AIツール\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"grok\": \"Grok\",\n    \"qwen\": \"Qwen\",\n    \"perplexity\": \"Perplexity\",\n    \"deepseek\": \"DeepSeek\",\n    \"metaAI\": \"Meta AI\",\n    \"firefly\": \"Adobe Firefly\",\n    \"aiSettingsIntro\": \"表示するAIツールを選択\",\n    \"resetAISettingsBtn\": \"リセット\",\n\n    // Theme\n    \"lightThemed\": \"ライト\",\n    \"darkThemed\": \"ダーク\",\n    \"systemThemed\": \"システム\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"壁紙をアップロード\",\n    \"rangColor\": \"色を選択\",\n    \"opacityTitle\": \"不透明度\",\n    \"adjustOpacityDesc\": \"インターフェースの透明度を調整\",\n    \"backupText\": \"バックアップ\",\n    \"restoreText\": \"復元\",\n    \"resetsettings\": \"設定をリセット\",\n    \"menuCloseText\": \"閉じる\",\n\n    // Tips\n    \"switchSearchModes\": \"検索モードを切り替え\",\n    \"switchSearchModesInfo\": \"「検索モード」をクリックしてモードを変更できます。\",\n    \"adjustZoom\": \"ズーム調整\",\n    \"adjustZoomInfo\": \"Ctrl + 「+」またはCtrl + 「-」でズームを調整できます。\",\n    \"changeBrowserTheme\": \"ブラウザテーマを変更\",\n    \"chromeThemeInfo\": \"「⋮」＞その他のツール＞Chromeのカスタマイズから、テーマに合った色を選択してください。\",\n    \"edgeThemeInfo\": \"設定＞外観から、テーマに合った色を選択してください。\",\n    \"braveThemeInfo\": \"<a href=\\\"https://chromewebstore.google.com/category/themes/\\\" target=\\\"_blank\\\">Chrome テーマストア</a>からテーマを適用してください。\",\n    \"firefoxThemeInfo\": \"<a href=\\\"https://addons.mozilla.org/firefox/themes/\\\" target=\\\"_blank\\\">Firefox テーマ</a>からテーマを適用してください。\",\n    \"updateFirefoxHomepage\": \"ホームページを更新\",\n    \"updateFirefoxHomepageInfo\": \"ホームページも新しいタブと同じように変更するには、<a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\">こちらのリンク</a>の手順に従ってください。\",\n    \"dontShowTips\": \"今後表示しない\",\n\n    // Footer Toast\n    \"footerToastTitle\": \"下部にバナーが表示されていますか？\",\n    \"footerToastMessage\": \"非表示にするには、右クリックして「新しいタブページでフッターを隠す」を選択してください。\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"OK\",\n    \"yesText\": \"はい\",\n    \"noText\": \"いいえ\",\n    \"agreeText\": \"同意する\",\n    \"cancelText\": \"キャンセル\",\n    \"confirmWallpaper\": \"新しい画像を今日の壁紙として設定しますか？\",\n    \"confirmRestore\": \"設定をリセットしてもよろしいですか？この操作は元に戻せません。\",\n    \"Nobackgroundset\": \"背景画像が設定されていません。\",\n    \"clearbackgroundimage\": \"背景画像を削除してもよろしいですか？\",\n    \"ProxyDisclaimer\": \"すべてのプロキシ機能はデフォルトでオフになっています。\\n\\n検索候補やCORSバイパスプロキシを有効にする場合は、プライバシー保護のために独自のプロキシをホストすることを強くお勧めします。\\n\\nデフォルトでは https://mynt-proxy.rhythmcorehq.com が使用され、すべてのデータがこのサービスを通過するため、プライバシー上の懸念が生じる可能性があります。\",\n    \"GPSDisclaimer\": \"位置情報は天気の更新のためだけに使用されます。データはブラウザ内に一時保存され、第三者に共有されたり、開発者がアクセスしたりすることはありません。\\n\\nGPSを有効にすることで、ローカルでの位置情報の共有に同意したものとみなされます。\",\n    \"failedbackup\": \"バックアップに失敗しました: \",\n    \"restorecompleted\": \"復元が完了しました！\",\n    \"restorefailed\": \"復元に失敗しました: \",\n    \"invalidBackup\": \"無効なバックアップファイルが選択されました。\",\n    \"deleteBookmark\": \"ブックマーク「{title}」を削除してもよろしいですか？\",\n    \"UnsupportedBrowser\": \"お使いのブラウザではブックマークはサポートされていません。\",\n    \"resetShortcutsPrompt\": \"すべての保存済みショートカットが削除され、デフォルトにリセットされます。続行しますか？\",\n    \"invalidFileTypeMessage\": \"有効な画像ファイルを選択してください。\",\n    \"invalidSvgMessage\": \"挿入されたSVGが無効か、安全でないコンテンツが含まれているため、アイコンとして使用できません。\",\n    \"invalidIconUrlMessage\": \"有効な画像のURLを入力してください（https://、http://、またはdata:image/で始まる必要があります）。\",\n    \"iconFileTooLargeMessage\": \"選択されたファイルが大きすぎます: {size} KB。{max} KB 未満のファイルを使用してください。\",\n    \"iconStorageQuotaMessage\": \"ストレージ制限に達したため、アイコンを保存できませんでした。いくつかのカスタムアイコンを削除するか、より小さな画像を使用してください。\"\n};\n"
  },
  {
    "path": "locales/ko.js",
    "content": "// Korean\nconst ko = {\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"피드백\",\n\n    // Shortcuts\n    \"shortcutsText\": \"바로가기\",\n    \"enableShortcutsText\": \"저장된 바로가기 보기\",\n    \"editShortcutsText\": \"바로가기 편집\",\n    \"shortcutsInfoText\": \"표시할 바로가기를 선택하세요\",\n    \"editShortcutsList\": \"저장된 바로가기\",\n    \"editShortcutsListInfo\": \"\\\"+\\\" 아이콘을 클릭해서 새 바로가기를 추가하거나, 이름 또는 URL을 클릭해서 수정할 수 있어요.\",\n    \"adaptiveIconText\": \"테마 적용 아이콘\",\n    \"adaptiveIconInfoText\": \"바로가기 아이콘이 테마에 맞춰 변해요\",\n    \"bookmarksText\": \"즐겨찾기\",\n    \"bookmarksInfo\": \"즐겨찾기 사이드바 표시\",\n    \"ai_tools_button\": \"AI 도구\",\n    \"enable_ai_tools\": \"AI 도구 바로가기 표시\",\n    \"aiToolsSettingsText\": \"AI 도구 설정\",\n    \"aiToolsSettingsInfo\": \"AI 도구 바로가기 관리\",\n    \"googleAppsMenuText\": \"Google 앱\",\n    \"googleAppsMenuInfo\": \"Google 앱 바로가기 표시\",\n    \"googleAppsHover\": \"Google 앱\",\n\n    // To-do List\n    \"todoListText\": \"할 일\",\n    \"todoListInfo\": \"오늘의 할 일 목록 보기\",\n    \"todoListHover\": \"할 일\",\n    \"todoPlaceholder\": \"할 일 추가...\",\n\n    // Clock\n    \"hideClockBox\": \"시계 숨기기\",\n    \"hideClockBoxInfo\": \"시계와 날짜 숨기기\",\n    \"digitalclocktitle\": \"디지털 시계\",\n    \"digitalclockinfo\": \"디지털 시계로 바꾸기\",\n    \"timeformattitle\": \"12시간제\",\n    \"timeformatinfo\": \"12시간 형식으로 표시\",\n    \"greetingtitle\": \"인사말\",\n    \"greetinginfo\": \"사용자 지정 텍스트 아래에 인사말 표시\",\n\n    // Misc\n    \"userTextTitle\": \"사용자 지정 텍스트\",\n    \"userTextInfo\": \"시계 아래에 원하는 텍스트 표시\",\n    \"fahrenheitCelsiusCheckbox\": \"화씨로 전환\",\n    \"fahrenheitCelsiusText\": \"페이지를 새로고침하면 적용돼요\",\n    \"hideWeatherTitle\": \"날씨 숨기기\",\n    \"hideWeatherInfo\": \"날씨 위젯 끄기\",\n    \"hideWeatherBox\": \"날씨 카드 숨기기\",\n    \"hideWeatherBoxInfo\": \"온도만 표시하기\",\n    \"minMaxTempText\": \"최저·최고 기온\",\n    \"minMaxTempSubText\": \"체감 온도 대신 최저·최고 기온 표시\",\n\n    // Search\n    \"micIconTitle\": \"마이크 아이콘 숨기기\",\n    \"micIconInfo\": \"음성 입력이 안 될 때\",\n    \"hideSearchWith\": \"검색 엔진 숨기기\",\n    \"hideSearchWithInfo\": \"아이콘을 클릭해서 검색 엔진 바꾸기\",\n    \"motivationalQuotesText\": \"동기부여 명언\",\n    \"motivationalQuotesInfo\": \"검색창 아래에 명언 표시\",\n    \"search_suggestions_button\": \"검색 제안\",\n    \"search_suggestions_text\": \"검색 제안 켜기\",\n\n    // Proxy\n    \"useproxytitletext\": \"프록시 우회\",\n    \"useproxyText\": \"검색 제안이 안 될 때\",\n    \"ProxyText\": \"CORS 우회 프록시\",\n    \"ProxySubtext\": \"직접 만든 CORS 우회 프록시 추가\",\n    \"HostproxyButton\": \"내 프록시 호스팅하기\",\n\n    // Location\n    \"useGPS\": \"GPS 사용\",\n    \"useGPSInfo\": \"실시간 위치로 날씨 업데이트\",\n    \"UserLocText\": \"위치 입력\",\n    \"UserLocSubtext\": \"날씨 위치가 안 맞을 때\",\n    \"userLoc\": \"도시명 또는 좌표 (위도, 경도)\",\n    \"PrivacyPolicy\": \"개인정보 처리방침\",\n\n    // Weather\n    \"WeatherApiText\": \"WeatherAPI 키 입력\",\n    \"WeatherApiSubtext\": \"날씨 기능이 안 될 때\",\n    \"userAPI\": \"WeatherAPI 키\",\n    \"LearnMoreButton\": \"자세히 알아보기\",\n    \"saveAPI\": \"저장\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일'],\n    \"months\": ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"즐겨찾기\",\n    \"bookmarkSortBy\": \"정렬\",\n    \"sortAlphabetical\": \"이름순\",\n    \"sortTimeAdded\": \"추가순\",\n    \"bookmarkViewAs\": \"보기\",\n    \"bookmarkViewGrid\": \"격자\",\n    \"bookmarkViewList\": \"목록\",\n    \"bookmarkSearch\": \"즐겨찾기 검색\",\n    \"editBookmarkHeading\": \"즐겨찾기 편집\",\n    \"editBookmarkName\": \"이름\",\n    \"editBookmarkURL\": \"URL\",\n\n    // New Tab Item\n    \"conditionText\": \"안녕하세요! 오늘 기분은 어떠세요?\",\n    \"humidityLevel\": \"습도\",\n    \"feelsLike\": \"체감\",\n    \"minMaxTemp\": \"최저 ~ 최고\",\n    \"location\": \"지구\",\n    \"enterBtn\": \"검색\",\n    \"searchPlaceholder\": \"검색어를 입력하세요...\",\n    \"listenPlaceholder\": \"듣고 있어요...\",\n    \"searchWithHint\": \"검색 방법\",\n    \"searchOnHint\": \"검색 위치\",\n    \"userText\": \"클릭해서 수정\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"좋은 아침이에요!\",\n        \"afternoon\": \"좋은 오후예요!\",\n        \"evening\": \"좋은 저녁이에요!\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"기본\",\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"이미지\",\n    \"redditEngine\": \"Reddit\",\n    \"wikipediaEngine\": \"Wikipedia\",\n    \"quoraEngine\": \"Quora\",\n\n    // AI Tools\n    \"ai_tools\": \"AI 도구\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"grok\": \"Grok\",\n    \"qwen\": \"Qwen\",\n    \"perplexity\": \"Perplexity\",\n    \"deepseek\": \"DeepSeek\",\n    \"metaAI\": \"Meta AI\",\n    \"firefly\": \"Adobe Firefly\",\n    \"aiSettingsIntro\": \"표시할 AI 도구를 선택하세요\",\n    \"resetAISettingsBtn\": \"초기화\",\n\n    // Theme\n    \"enableDarkMode\": \"다크 모드 (실험적)\",\n    \"enableDarkModeInfo\": \"다크 모드 테마 켜기\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"배경화면 업로드\",\n    \"rangColor\": \"색상 선택\",\n    \"opacityTitle\": \"투명도\",\n    \"adjustOpacityDesc\": \"인터페이스 투명도 조절\",\n    \"backupText\": \"백업\",\n    \"restoreText\": \"복원\",\n    \"resetsettings\": \"설정 초기화\",\n    \"menuCloseText\": \"닫기\",\n\n    // Tips\n    \"switchSearchModes\": \"검색 모드 전환\",\n    \"switchSearchModesInfo\": \"'검색 방법'을 클릭해서 모드를 바꾸세요.\",\n    \"adjustZoom\": \"화면 확대/축소\",\n    \"adjustZoomInfo\": \"Ctrl + \\\"+\\\" 또는 Ctrl + \\\"-\\\"를 눌러서 화면을 확대/축소할 수 있어요.\",\n    \"changeBrowserTheme\": \"브라우저 테마 바꾸기\",\n    \"chromeThemeInfo\": \"점 세 개(⋮) > 도구 더보기 > Chrome 맞춤설정을 클릭한 다음 확장 프로그램 테마와 어울리는 색상을 선택하세요.\",\n    \"edgeThemeInfo\": \"설정 > 모양으로 가서 확장 프로그램 테마와 어울리는 색상을 선택하세요.\",\n    \"braveThemeInfo\": \"<a href=\\\"https://chromewebstore.google.com/category/themes/\\\" target=\\\"_blank\\\">Chrome 테마 스토어</a>에서 확장 프로그램과 어울리는 테마를 다운로드해서 적용하세요.\",\n    \"firefoxThemeInfo\": \"<a href=\\\"https://addons.mozilla.org/firefox/themes/\\\" target=\\\"_blank\\\">Firefox 테마</a>에서 확장 프로그램과 어울리는 테마를 다운로드해서 적용하세요.\",\n    \"updateFirefoxHomepage\": \"홈페이지 변경\",\n    \"updateFirefoxHomepageInfo\": \"새 탭과 함께 홈페이지도 바꾸려면 <a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\">이 링크</a>를 확인하세요.\",\n    \"dontShowTips\": \"다시 보지 않기\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"확인\",\n    \"yesText\": \"예\",\n    \"noText\": \"아니요\",\n    \"agreeText\": \"동의\",\n    \"cancelText\": \"취소\",\n    \"confirmWallpaper\": \"이 이미지를 오늘의 배경화면으로 설정할까요?\",\n    \"confirmRestore\": \"정말 설정을 초기화할까요? 이 작업은 되돌릴 수 없어요.\",\n    \"Nobackgroundset\": \"현재 설정된 배경 이미지가 없어요.\",\n    \"clearbackgroundimage\": \"배경 이미지를 지울까요?\",\n    \"ProxyDisclaimer\": \"모든 프록시 기능은 기본적으로 꺼져 있어요.\\n\\n검색 제안과 CORS 우회 프록시를 켜려면, 개인정보 보호를 위해 직접 프록시를 호스팅하는 걸 강력히 권장해요.\\n\\n기본 설정으로는 https://mynt-proxy.rhythmcorehq.com 프록시를 사용하는데, 이 경우 모든 데이터가 이 서비스를 거치게 돼서 개인정보 문제가 생길 수 있어요.\",\n    \"GPSDisclaimer\": \"위치 데이터는 정확한 날씨를 보여주기 위해서만 사용돼요. 브라우저 안에만 임시로 저장되며, 다른 서비스와 공유되지 않고 저희도 볼 수 없어요.\\n\\nGPS를 켜면 확장 프로그램 내에서만 위치 정보를 공유하는 것에 동의하는 거예요.\",\n    \"failedbackup\": \"백업 실패: \",\n    \"restorecompleted\": \"복원 완료!\",\n    \"restorefailed\": \"복원 실패: \",\n    \"invalidBackup\": \"잘못된 백업 파일이에요.\",\n    \"deleteBookmark\": \"\\\"{title}\\\" 즐겨찾기를 삭제할까요?\",\n    \"UnsupportedBrowser\": \"이 브라우저에서는 즐겨찾기를 지원하지 않아요.\",\n    \"resetShortcutsPrompt\": \"저장된 모든 바로가기가 삭제되고 기본값으로 초기화돼요. 계속할까요?\"\n};\n"
  },
  {
    "path": "locales/mr.js",
    "content": "// Marathi\nconst mr = {\n    \"newTabTitle\": \"नवा टैब\",\n    // Menu Items\n    \"github\": \"गिटहब\",\n    \"feedback\": \"प्रतिसाद\",\n\n    // Section titles\n    \"personalizationSectionTitle\": \"वैयक्तिकरण\",\n    \"clockSectionTitle\": \"घड्याळ\",\n    \"searchSectionTitle\": \"शोधा\",\n    \"weatherSectionTitle\": \"हवामान\",\n    \"appearanceSectionTitle\": \"रंगरूप\",\n    \"settingsSectionTitle\": \"सेटिंग्ज\",\n\n    // Shortcuts\n    \"shortcutsText\": \"शॉर्टकट्स\",\n    \"enableShortcutsText\": \"जतन केलेले शॉर्टकट्स दाखवा\",\n    \"editShortcutsText\": \"शॉर्टकट्स संपादित करा\",\n    \"shortcutsInfoText\": \"कोणते शॉर्टकट दाखवायचे ते निवडा\",\n    \"editShortcutsList\": \"जतन केलेले शॉर्टकट्स\",\n    'editShortcutsListInfo': \"आपण \\\"+\\\" आयकॉनवर क्लिक करून नवीन शॉर्टकट्स जोडू शकता किंवा शॉर्टकटच्या नावावर किंवा URL वर क्लिक करून विद्यमान शॉर्टकट्स संपादित करू शकता.\",\n    \"adaptiveIconText\": \"अनुकूल आयकॉन\",\n    \"adaptiveIconInfoText\": \"शॉर्टकट आयकॉन थीमनुसार जुळतील\",\n    \"bookmarksText\": \"बुकमार्क्स\",\n    \"bookmarksInfo\": \"बुकमार्क्स साइडबार दाखवा\",\n    \"ai_tools_button\": \"AI साधने\",\n    \"enable_ai_tools\": \"AI साधनांसाठी शॉर्टकट्स दाखवा\",\n    \"googleAppsMenuText\": \"गुगल ॲप्स\",\n    \"googleAppsMenuInfo\": \"गुगल ॲप्ससाठी शॉर्टकट्स दाखवा\",\n    \"googleAppsHover\": \"गुगल ॲप्स\",\n    \"aiToolsSettingsText\": \"AI साधनांची सेटिंग्ज\",\n    \"aiToolsSettingsInfo\": \"AI साधनांच्या शॉर्टकट्सचे व्यवस्थापन करा\",\n\n    // To-do List\n    \"todoListText\": \"कार्य सूची\",\n    \"todoListInfo\": \"दैनिक कार्यांची सूची पहा\",\n    \"todoListHover\": \"कार्य सूची\",\n    \"todoPlaceholder\": \"कार्ये समाविष्ट करा...\",\n\n    // Digital Clock\n    \"hideClockBox\": \"घड्याळ लपवा\",\n    \"hideClockBoxInfo\": \"घड्याळ आणि तारीख लपवा\",\n    \"digitalclocktitle\": \"डिजिटल घड्याळ\",\n    \"digitalclockinfo\": \"डिजिटल घड्याळावर स्विच करा\",\n    \"timeformattitle\": \"१२-तासांचा फॉरमॅट\",\n    \"timeformatinfo\": \"१२-तासांचा वेळ फॉरमॅट वापरा\",\n    \"greetingtitle\": \"शुभेच्छा\",\n    \"greetinginfo\": \"सानुकूल मजकुराखाली शुभेच्छा दाखवा\",\n\n    // Misc\n    \"userTextTitle\": \"सानुकूल मजकूर\",\n    \"userTextInfo\": \"घड्याळाखाली सानुकूल मजकूर दाखवा\",\n    \"fahrenheitCelsiusCheckbox\": \"फॅरनहाइटमध्ये दाखवा\",\n    \"fahrenheitCelsiusText\": \"बदल लागू करण्यासाठी पृष्ठ रीफ्रेश करा\",\n    \"hideWeatherTitle\": \"हवामान लपवा\",\n    \"hideWeatherInfo\": \"हवामान विजेट निष्क्रिय करा\",\n    \"hideWeatherBox\": \"हवामान कार्ड लपवा\",\n    \"hideWeatherBoxInfo\": \"फक्त तापमान पिल दाखवा\",\n    \"minMaxTempText\": \"किमान-अधिकतम तापमान\",\n    \"minMaxTempSubText\": \"भासणार्या तापमानाच्या जागी किमान व अधिकतम तापमान दाखवा\",\n\n    // Search\n    \"micIconTitle\": \"मायक्रोफोनचे चिन्ह लपवा\",\n    \"micIconInfo\": \"जर व्हॉइस टायपिंग चालत नसेल\",\n    \"hideSearchWith\": \"सर्च इंजिने लपवा\",\n    \"hideSearchWithInfo\": \"आयकॉनवर क्लिक करून सर्च इंजिन बदला\",\n    \"motivationalQuotesText\": \"प्रेरणादायी सुविचार\",\n    \"motivationalQuotesInfo\": \"शोधपट्टीच्या खाली सुविचार दाखवा\",\n    \"search_suggestions_button\": \"शोध सूचना\",\n    \"search_suggestions_text\": \"शोध सूचना चालू करा\",\n\n    // Proxy\n    \"useproxytitletext\": \"प्रॉक्सी बायपास\",\n    \"useproxyText\": \"जर शोध सूचना चालत नसेल\",\n    \"ProxyText\": \"CORS बायपास प्रॉक्सी\",\n    \"ProxySubtext\": \"आपला स्वतःचा CORS बायपास प्रॉक्सी जोडा\",\n    \"HostproxyButton\": \"आपला प्रॉक्सी होस्ट करा\",\n\n    // Location\n    \"useGPS\": \"GPSचा उपयोग\",\n    \"useGPSInfo\": \"लाइव स्थान अपडेट करण्यासाठी GPS सुरू करा\",\n    \"UserLocText\": \"आपले स्थान नोंद करा\",\n    \"UserLocSubtext\": \"जर हवामानाचे स्थान बरोबर नसेल\",\n    \"userLoc\": \"आपले शहर किंवा समन्वय (अक्षांश, रेखांश)\",\n    \"PrivacyPolicy\": \"गोपनीयता धोरणे\",\n\n    // Weather\n    \"WeatherApiText\": \"आपली WeatherAPI key नोंदवा\",\n    \"WeatherApiSubtext\": \"जर हवामान कार्यरत नसेल\",\n    \"userAPI\": \"आपली WeatherAPI key\",\n    \"LearnMoreButton\": \"अधिक माहिती\",\n    \"saveAPI\": \"जतन करा\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['रवि', 'सोम', 'मंगळ', 'बुध', 'गुरु', 'शुक्र', 'शनि'],   // Truncated for display\n    // \"days\": ['रविवार', 'सोमवार', 'मंगळवार', 'बुधवार', 'गुरुवार', 'शुक्रवार', 'शनिवार'],     // Full\n    \"months\": ['जानेवारी', 'फेब्रुवारी', 'मार्च', 'एप्रिल', 'मे', 'जून', 'जुलै', 'ऑगस्ट', 'सप्टेंबर', 'ऑक्टोबर', 'नोव्हेंबर', 'डिसेंबर'],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"बुकमार्क्स\",\n    \"bookmarkSortBy\": \"क्रमवारी लावा\",\n    \"sortAlphabetical\": \"ए-झेड\",\n    \"sortTimeAdded\": \"जुना-नवा\",\n    \"bookmarkViewAs\": \"या रूपात पाहा\",\n    \"bookmarkViewGrid\": \"ग्रिड\",\n    \"bookmarkViewList\": \"लिस्ट\",\n    \"bookmarkSearch\": \"बुकमार्क शोधा\",\n    \"editBookmarkHeading\": \"बुकमार्क संपादित करा\",\n    \"editBookmarkName\": \"बुकमार्कचे नाव\",\n    \"editBookmarkURL\": \"बुकमार्कचे URL\",\n\n    // New Tab Item\n    \"conditionText\": \"नमस्कार! तुम्ही आज कसे आहात?\",\n    \"humidityLevel\": \"दमटपणा\",\n    \"feelsLike\": \"वाटते\",\n    \"minMaxTemp\": \"किमान ~ अधिकतम\",\n    \"location\": \"पृथ्वी\",\n    \"enterBtn\": \"शोधा\",\n    \"searchPlaceholder\": \"येथे लिहा...\",\n    \"listenPlaceholder\": \"ऐकत आहे...\",\n    \"searchWithHint\": \"यासह शोधा\",\n    \"searchOnHint\": \"यावर शोधा\",\n    \"userText\": \"येथे आपला मजकूर लिहा\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"शुभ सकाळ!\",\n        \"afternoon\": \"शुभ दुपार!\",\n        \"evening\": \"शुभ संध्याकाळ!\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"डिफॉल्ट\",\n    \"googleEngine\": \"गुगल\",\n    \"duckEngine\": \"डकडकगो\",\n    \"bingEngine\": \"बिंग\",\n    \"braveEngine\": \"ब्रेव्ह\",\n    \"youtubeEngine\": \"यूट्यूब\",\n    \"gImagesEngine\": \"इमेज\",\n    \"redditEngine\": \"रेडिट\",\n    \"wikipediaEngine\": \"विकिपीडिया\",\n    \"quoraEngine\": \"क्वोरा\",\n\n    // AI Tools\n    \"ai_tools\": \"AI साधने\",\n    \"chatGPT\": \"चॅटGPT\",\n    \"gemini\": \"जेमिनी\",\n    \"copilot\": \"कोपायलट\",\n    \"claude\": \"क्लॉड\",\n    \"grok\": \"ग्रोक\",\n    \"qwen\": \"क्वेन\",\n    \"perplexity\": \"पर्प्लेक्सिटी\",\n    \"deepseek\": \"डीपसीक\",\n    \"metaAI\": \"मेटा AI\",\n    \"firefly\": \"अडोबी फायरफ्लाय\",\n    \"aiSettingsIntro\": \"कोणती AI साधने दाखवायची, ते निवडा.\",\n    \"resetAISettingsBtn\": \"रीसेट करा\",\n\n    // Theme\n    \"lightThemed\": \"लाइट\",\n    \"darkThemed\": \"डार्क\",\n    \"systemThemed\": \"सिस्टम\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"वॉलपेपर सेट करा\",\n    \"rangColor\": \"रंग निवडा\",\n    \"opacityTitle\": \"अपारदर्शकता\",\n    \"adjustOpacityDesc\": \"इंटरफेसची अपारदर्शकता समायोजित करा\",\n    \"backupText\": \"बॅकअप करा\",\n    \"restoreText\": \"पुनर्संचयित करा\",\n    \"resetsettings\": \"सेटिंग्ज रीसेट करा\",\n    \"menuCloseText\": \"बंद करा\",\n\n    // Tips\n    \"switchSearchModes\": \"शोधण्याचा मोड बदला\",\n    \"switchSearchModesInfo\": \"मोड बदलण्यासाठी ‘यासह शोधा’ वर क्लिक करा\",\n    \"adjustZoom\": \"ज़ूम समायोजित करा\",\n    \"adjustZoomInfo\": \"ज़ूम समायोजित करण्यासाठी Ctrl + \\\"+\\\" अथवा Ctrl + \\\"-\\\" दाबा\",\n    \"changeBrowserTheme\": \"ब्राउझरची थीम बदला\",\n    \"chromeThemeInfo\": \"तीन बिंदूंवर (⋮) क्लिक करा > अधिक साधने > क्रोम कस्टमाइझ करा, त्यानंतर एक्सटेंशन थीमसोबत जुळणारा रंग निवडा\",\n    \"edgeThemeInfo\": \"सेटिंग्ज > स्वरूप (Appearance) वर जा, मग एक्सटेंशन थीमसोबत जुळणारा रंग निवडा\",\n    \"braveThemeInfo\": '<a href=\"https://chromewebstore.google.com/category/themes/\" target=\"_blank\">क्रोम थीम स्टोर</a> वर जाऊन, आपल्या पसंतीची थीम डाउनलोड करा आणि लागू करा',\n    \"firefoxThemeInfo\": '<a href=\"https://addons.mozilla.org/firefox/themes/\" target=\"_blank\">फायरफॉक्स थीम्स</a> वर जाऊन, आपल्या आवडीचा थीम डाउनलोड करा आणि लागू करा',\n    \"updateFirefoxHomepage\": \"होमपेज अपडेट करा\",\n    \"updateFirefoxHomepageInfo\": 'आपल्या होमपेजला सुद्धा नवीन टॅबाप्रमाणे बदलण्यासाठी, <a href=\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\"_blank\">या लिंक</a> वर जा आणि दिलेल्या सूचनांचे पालन करा.',\n    \"dontShowTips\": \"हे पुन्हा दाखवू नका\",\n\n    // Footer Toast\n    \"footerToastTitle\": \"खाली एक बॅनर दिसतोय?\",\n    \"footerToastMessage\": \"ते लपवण्यासाठी, त्यावर राइट-क्लिक करा आणि 'नवीन टॅबा पेजवर लपवा' निवडा\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"ठीक आहे\",\n    \"yesText\": \"होय\",\n    \"noText\": \"नाही\",\n    \"agreeText\": \"मी सहमत आहे\",\n    \"cancelText\": \"रद्द करा\",\n    \"confirmWallpaper\": \"तुम्हाला आजचा वॉलपेपर बदलायचा आहे का?\",\n    \"confirmRestore\": \"तुम्हाला खरंच तुमचे सेटिंग्स रीसेट करायचे आहेत का? ही क्रिया परत केली जाऊ शकत नाही.\",\n    \"Nobackgroundset\": \"सद्यस्थितीत कोणतीही पार्श्वभूमी सेट केलेली नाही.\",\n    \"clearbackgroundimage\": \"तुम्हाला पार्श्वभूमी इमेज क्लिअर करायची आहे का?\",\n    \"ProxyDisclaimer\": \"सर्व प्रॉक्सी फीचर्स डिफॉल्टनुसार बंद असतात.\\n\\nजर तुम्ही सर्च सुजेशन्स आणि CORS बायपास प्रॉक्सी सक्षम केले, तर गोपनीयतेसाठी तुमची स्वतःची प्रॉक्सी होस्ट करणे अत्यंत शिफारसीय आहे.\\n\\nडिफॉल्टनुसार, प्रॉक्सी https://mynt-proxy.rhythmcorehq.com म्हणून सेट केले जाईल, म्हणजे तुमचे सर्व डेटा या सर्विसमधून जाईल, ज्यामुळे गोपनीयतेच्या संदर्भात धोका होऊ शकतो.\",\n    \"GPSDisclaimer\": \"आपल्या स्थानाची माहिती केवळ अचूक हवामान अपडेट करण्यासाठी उपयोग केली जात आहे. हे ब्राउझरमध्ये तात्पुरते साठवले जाते. ते कोणत्याही त्रयस्थ सेवांशी सामायिक केले जात नाही, तसेच आम्हालाही ते ॲक्सेस करता येत नाही.\\n\\nGPS सक्षम करून, तुम्ही तुमचे स्थान या एक्स्टेंशनसोबत स्थानिक पातळीवर सामायिक करण्यास संमती देता.\",\n    \"failedbackup\": \"बॅकअप अयशस्वी: \",\n    \"restorecompleted\": \"पुनर्संचयित यशस्वी झाले!\",\n    \"restorefailed\": \"पुनर्संचयित अयशस्वी: \",\n    \"invalidBackup\": \"अवैध बॅकअप फाइल निवडली आहे.\",\n    \"deleteBookmark\": \"तुम्हाला \\\"{title}\\\" बुकमार्क डिलीट करायचा आहे का?\",\n    \"UnsupportedBrowser\": \"तुमच्या ब्राउझरमध्ये बुकमार्क्सला समर्थन नाही.\",\n    \"resetShortcutsPrompt\": \"जतन केलेले सर्व शॉर्टकट्स हटवले जातील आणि पूर्ववत केले जातील. तुम्हाला खरंच पुढे जायचे आहे का?\"\n};\n"
  },
  {
    "path": "locales/ne.js",
    "content": "// Nepali\nconst ne = {\n    // Menu Items\n    \"github\": \"गिटहब\",\n    \"feedback\": \"प्रतिक्रिया\",\n    \"resetsettings\": \"सेटिङहरू रिसेट गर्नुहोस्\",\n    \"menuCloseText\": \"मेनु बन्द गर्नुहोस्\",\n\n    // Shortcuts\n    \"shortcutsText\": \"सर्टकटहरू\",\n    \"enableShortcutsText\": \"Saved गरिएका सर्टकटहरू देखाउनुहोस्\",\n    \"editShortcutsText\": \"सर्टकटहरू परिवर्तन गर्नुहोस्\",\n    \"shortcutsInfoText\": \"कुन सर्टकटहरू देखाइन्छ छनौट गर्नुहोस्\",\n    \"editShortcutsList\": \"Saved सर्टकटहरू\",\n    \"editShortcutsListInfo\": \"तपाईंले \\\"+\\\" आइकनमा क्लिक गरेर नयाँ सर्टकटहरू थप्न सक्नुहुन्छ वा सर्टकट नाम वा URL मा क्लिक गरेर अवस्थितहरूलाई परिवर्तन गर्न सक्नुहुन्छ।\",\n    \"adaptiveIconText\": \"अनुकूल आइकनहरू\",\n    \"adaptiveIconInfoText\": \"सर्टकट आइकनहरू विषयवस्तुको रङसँग मेल खाने र साना देखिनेछन्\",\n    \"bookmarksText\": \"बुकमार्कहरू\",\n    \"bookmarksInfo\": \"बुकमार्क साइडबार देखाउनुहोस्\",\n    \"ai_tools_button\": \"AI-उपकरणहरू\",\n    \"enable_ai_tools\": \"AI उपकरणहरूका लागि सर्टकटहरू देखाउनुहोस्\",\n    \"googleAppsMenuText\": \"गुगल एप्स\",\n    \"googleAppsMenuInfo\": \"गुगल एप्सका लागि सर्टकटहरू देखाउनुहोस्\",\n    \"googleAppsHover\": \"गुगल एप्स\",\n\n    // To-do List\n    \"todoListText\": \"गर्नुपर्ने कार्यहरु\",\n    \"todoListInfo\": \"दैनिक गर्नुपर्ने कार्यहरु देखाउनुहोस \",\n    \"todoListHover\": \"गर्नुपर्ने कार्यहरु\",\n    \"todoPlaceholder\": \"गर्नु पर्ने काम थप्नुहोस...\",\n\n    // Digital Clock\n    \"digitalclocktitle\": \"डिजिटल घडी\",\n    \"digitalclockinfo\": \"डिजिटल घडीमा परिवर्तन गर्नुहोस्\",\n    \"timeformattitle\": \"12-घण्टा ढाँचा\",\n    \"timeformatinfo\": \"12-घण्टा समय ढाँचा प्रयोग गर्नुहोस्\",\n    \"greetingtitle\": \"अभिवादन\",\n    \"greetinginfo\": \"अनुकूलन पाठ अभिवादनको तल देखाउनुहोस्\",\n\n    // Misc\n    \"userTextTitle\": \"अनुकूलन योग्य पाठ\",\n    \"userTextInfo\": \"घडीको तल अनुकूलन पाठ देखाउनुहोस्\",\n    \"fahrenheitCelsiusCheckbox\": \"फरेनहाइट मा स्विच गर्नुहोस्\",\n    \"fahrenheitCelsiusText\": \"परिवर्तनहरू लागू गर्न रिफ्रेस गर्नुहोस्\",\n    \"micIconTitle\": \"माइक्रोफोन आइकन लुकाउनुहोस्\",\n    \"micIconInfo\": \"यदि भ्वाइस टाइपिङले काम गरिरहेको छैन भने\",\n    \"hideSearchWith\": \"खोज इन्जिनहरू लुकाउनुहोस्\",\n    \"hideSearchWithInfo\": \"यसको आइकनमा क्लिक गरेर खोज इन्जिनहरू बीच स्विच गर्नुहोस्\",\n    \"search_suggestions_button\": \"खोज सुझावहरू\",\n    \"search_suggestions_text\": \"खोज सुझावहरू सक्षम गर्नुहोस्\",\n\n    // Proxy\n    \"useproxytitletext\": \"Proxy Bypass\",\n    \"useproxyText\": \"यदि खोज सुझावहरूले काम गरिरहेको छैन भने\",\n    \"ProxyText\": \"CORS Bypass Proxy\",\n    \"ProxySubtext\": \"आफ्नो CORS bypass proxy थप्नुहोस्\",\n    \"HostproxyButton\": \"तपाईंको आफ्नै proxy host गर्नुहोस्\",\n\n    // Location\n    \"UserLocText\": \"आफ्नो स्थान प्रविष्ट गर्नुहोस्\",\n    \"UserLocSubtext\": \"मौसम स्थान सही छैन भने\",\n    \"userLoc\": \"तपाईंको शहर वा निर्देशांक (अक्षांश, देशान्तर)\",\n    \"useGPS\": \"GPS प्रयोग गर्नुहोस्\",\n\n    // Weather\n    \"WeatherApiText\": \"आफ्नो WeatherAPI Key प्रविष्ट गर्नुहोस्\",\n    \"WeatherApiSubtext\": \"यदि मौसम कार्यक्षमता काम गरिरहेको छैन भने\",\n    \"userAPI\": \"तपाईंको weatherAPI key\",\n    \"LearnMoreButton\": \"थप जान्नुहोस्\",\n    \"saveAPI\": \"Save\",\n\n    // Body Items\n    // Calendar\n    \"days\": [\"आइतबार\", \"सोमबार\", \"मङ्गलबार\", \"बुधबार\", \"बिहीबार\", \"शुक्रबार\", \"शनिबार\"],\n    \"months\": [\"जानेवारी\", \"फेब्रुवारी\", \"मार्च\", \"एप्रिल\", \"मे\", \"जून\", \"जुलै\", \"ऑगस्ट\", \"सप्टेंबर\", \"ऑक्टोबर\", \"नोव्हेंबर\", \"डिसेंबर\"],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"बुकमार्कहरू\",\n    \"bookmarkViewAs\": \"को रूपमा हेर्नुहोस्\",\n    \"bookmarkViewGrid\": \"ग्रिड\",\n    \"bookmarkViewList\": \"सूची\",\n    \"bookmarkSearch\": \"बुकमार्क खोज्नुहोस्\",\n\n    // New Tab Item\n    \"conditionText\": \"नमस्ते! तपाइलाई आज कस्तो छ?\",\n    \"humidityLevel\": \"आर्द्रता\",\n    \"feelsLike\": \"महसुस हुन्छ\",\n    \"location\": \"पृथ्वी\",\n    \"enterBtn\": \"खोज्नुहोस्\",\n    \"searchPlaceholder\": \"कृपया यहाँ लेख्नुहोस्\",\n    \"listenPlaceholder\": \"सुन्दै...\",\n    \"searchWithHint\": \"साथ खोज्नुहोस्\",\n    \"userText\": \"तपाईं यहाँ लेख्न सक्नुहुन्छ\",\n\n    // Greeting\n    \"greeting\": {\n        \"morning\": \"शुभ प्रभात!\",\n        \"afternoon\": \"शुभ दिउँसो!\",\n        \"evening\": \"शुभ साँझ!\",\n    },\n\n    // Search Engines\n    \"googleEngine\": \"गूगल\",\n    \"duckEngine\": \"डकडकगो\",\n    \"bingEngine\": \"बिंग\",\n    \"braveEngine\": \"ब्रेव\",\n    \"youtubeEngine\": \"यूट्यूब\",\n\n    // AI Tools\n    \"ai_tools\": \"AI उपकरणहरू\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"perplexity\": \"Perplexity\",\n    \"metaAI\": \"Meta AI\",\n\n    // Wallpaper and misc\n    \"uploadWallpaperText\": \"वालपेपर अपलोड गर्नुहोस्\",\n    \"backupText\": \"ब्याकअप\",\n    \"restoreText\": \"पुनर्स्थापना गर्नुहोस्\",\n    \"rangColor\": \"रंग छान्नुहोस्\",\n\n    // Dialog boxes (alerts)\n    \"confirmWallpaper\": \"के तपाईं दिनको लागि आफ्नो वालपेपरको रूपमा नयाँ छवि सेट गर्न चाहनुहुन्छ?\",\n    \"confirmRestore\": \"के तपाइँ तपाइँको सेटिङहरू रिसेट गर्न निश्चित हुनुहुन्छ? यो कार्य पुनर्स्थापना गर्न सकिँदैन।\",\n    \"Nobackgroundset\": \"हाल कुनै पनि पृष्ठभूमि फोटो सेट गरिएको छैन।\",\n    \"clearbackgroundimage\": \"के तपाइँ पृष्ठभूमि फोटो हटाउन निश्चित हुनुहुन्छ?\",\n    \"ProxyDisclaimer\": \"सबै प्रोक्सी सुविधाहरू पूर्वनिर्धारित रूपमा बन्द छन्।\\n\\nयदि तपाईंले खोज सुझावहरू र CORS बाइपास प्रोक्सी सक्षम गर्नुभयो भने, परिष्कृत गोपनीयताको लागि तपाईंको आफ्नै प्रोक्सी होस्ट गर्न दृढ रूपमा सिफारिस गरिन्छ।\\n\\nपूर्वनिर्धारित रूपमा, प्रोक्सीलाई https://mynt-proxy.rhythmcorehq.com मा सेट गरिनेछ, जसको अर्थ तपाइँको सबै डेटा यस सेवा मार्फत जानेछ, जसले गोपनीयता चिन्ताहरू खडा गर्न सक्छ।\",\n    \"failedbackup\": \"ब्याकअप असफल भयो: \",\n    \"restorecompleted\": \"पुनर्स्थापना सफलतापूर्वक सम्पन्न भयो!\",\n    \"restorefailed\": \"ब्याकअप असफल भयो: \",\n    \"invalidBackup\": \"अवैध ब्याकअप फाइल\",\n    \"deleteBookmark\": \"के तपाइँ निश्चित रूपमा \\\"{title}\\\" बुकमार्क मेटाउन चाहनुहुन्छ?\",\n    \"UnsupportedBrowser\": \"बुकमार्कहरू तपाईंको ब्राउजरमा समर्थित छैनन्\"\n};\n"
  },
  {
    "path": "locales/pl.js",
    "content": "// Polish\nconst pl = {\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"Opinie\",\n\n    // Shortcuts\n    \"shortcutsText\": \"Skróty\",\n    \"enableShortcutsText\": \"Pokaż zapisane skróty\",\n    \"editShortcutsText\": \"Edytuj skróty\",\n    \"shortcutsInfoText\": \"Wybierz pokazywane skróty\",\n    \"editShortcutsList\": \"Zapisane skróty\",\n    \"editShortcutsListInfo\": \"Możesz dodać nowe skróty klikając ikonę \\\"+\\\" lub edytować istniejące klikając na nazwę lub adres URL skrótu.\",\n    \"adaptiveIconText\": \"Adaptacyjne ikony\",\n    \"adaptiveIconInfoText\": \"Ikony skrótów będą dostosowywać się do motywu\",\n    \"bookmarksText\": \"Zakładki\",\n    \"bookmarksInfo\": \"Pokaż pasek boczny zakładek\",\n    \"ai_tools_button\": \"Narzędzia AI\",\n    \"enable_ai_tools\": \"Pokaż skróty do narzędzi AI\",\n    \"aiToolsSettingsText\": \"Ustawienia narzędzi AI\",\n    \"aiToolsSettingsInfo\": \"Zarządzaj skrótami do narzędzi AI\",\n    \"googleAppsMenuText\": \"Aplikacje Google\",\n    \"googleAppsMenuInfo\": \"Pokaż skróty do aplikacji Google\",\n    \"googleAppsHover\": \"Aplikacje Google\",\n\n    // To-do List\n    \"todoListText\": \"Lista zadań\",\n    \"todoListInfo\": \"Pokaż codzienną listę zadań\",\n    \"todoListHover\": \"Lista zadań\",\n    \"todoPlaceholder\": \"Dodaj zadanie...\",\n\n    // Clock\n    \"hideClockBox\": \"Ukryj zegar\",\n    \"hideClockBoxInfo\": \"Ukryj zegar i datę\",\n    \"digitalclocktitle\": \"Zegar cyfrowy\",\n    \"digitalclockinfo\": \"Przełącz na zegar cyfrowy\",\n    \"timeformattitle\": \"Format 12-godzinny\",\n    \"timeformatinfo\": \"Używaj formatu 12-godzinnego\",\n    \"greetingtitle\": \"Powitanie\",\n    \"greetinginfo\": \"Pokaż powitanie poniżej niestandardowego tekstu\",\n\n    // Misc\n    \"userTextTitle\": \"Tekst konfigurowalny\",\n    \"userTextInfo\": \"Pokaż niestandardowy tekst poniżej zegara\",\n    \"fahrenheitCelsiusCheckbox\": \"Przełącz na Fahrenheita\",\n    \"fahrenheitCelsiusText\": \"Odśwież stronę, aby zastosować zmiany\",\n    \"hideWeatherTitle\": \"Ukryj pogodę\",\n    \"hideWeatherInfo\": \"Wyłącz widżety pogodowe\",\n    \"hideWeatherBox\": \"Ukryj kartę pogody\",\n    \"hideWeatherBoxInfo\": \"Pokaż tylko kapsułę temperatury\",\n    \"minMaxTempText\": \"Min-Maks temperatura\",\n    \"minMaxTempSubText\": \"Zastąp 'Odczuwalna' minimalną i maksymalną temperaturą\",\n\n    // Search\n    \"micIconTitle\": \"Ukryj ikonę mikrofonu\",\n    \"micIconInfo\": \"Jeśli pisanie głosowe nie działa\",\n    \"hideSearchWith\": \"Ukryj wyszukiwarki\",\n    \"hideSearchWithInfo\": \"Przełączaj się między wyszukiwarkami klikając ich ikonę\",\n    \"motivationalQuotesText\": \"Motywacyjne cytaty\",\n    \"motivationalQuotesInfo\": \"Pokaż cytaty pod paskiem wyszukiwania\",\n    \"search_suggestions_button\": \"Sugestie wyszukiwania\",\n    \"search_suggestions_text\": \"Włącz sugestie wyszukiwania\",\n\n    // Proxy\n    \"useproxytitletext\": \"Obejście Proxy\",\n    \"useproxyText\": \"Jeśli sugestie wyszukiwania nie działają\",\n    \"ProxyText\": \"Proxy CORS Bypass\",\n    \"ProxySubtext\": \"Dodaj własne proxy omijające CORS\",\n    \"HostproxyButton\": \"Hostuj własne proxy\",\n\n    // Location\n    \"useGPS\": \"Używaj GPS\",\n    \"useGPSInfo\": \"Włącz GPS dla aktualizacji lokalizacji na żywo\",\n    \"UserLocText\": \"Wprowadź swoją lokalizację\",\n    \"UserLocSubtext\": \"Jeśli lokalizacja pogody jest niepoprawna\",\n    \"userLoc\": \"Twoje miasto lub współrzędne (szerokość, długość geograficzna)\",\n    \"PrivacyPolicy\": \"Polityka prywatności\",\n\n    // Weather\n    \"WeatherApiText\": \"Wprowadź swój klucz WeatherAPI\",\n    \"WeatherApiSubtext\": \"Jeśli funkcja pogody nie działa\",\n    \"userAPI\": \"Twój klucz WeatherAPI\",\n    \"LearnMoreButton\": \"Dowiedz się więcej\",\n    \"saveAPI\": \"Zapisz\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['Niedziela', 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota'],\n    \"months\": ['Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień'],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"Zakładki\",\n    \"bookmarkSortBy\": \"Sortuj według\",\n    \"sortAlphabetical\": \"A-Z\",\n    \"sortTimeAdded\": \"Stare-Nowe\",\n    \"bookmarkViewAs\": \"Wyświetl jako\",\n    \"bookmarkViewGrid\": \"Siatka\",\n    \"bookmarkViewList\": \"Lista\",\n    \"bookmarkSearch\": \"Szukaj zakładki\",\n    \"editBookmarkHeading\": \"Edytuj zakładkę\",\n    \"editBookmarkName\": \"Nazwa zakładki\",\n    \"editBookmarkURL\": \"Adres URL zakładki\",\n\n    // New Tab Item\n    \"conditionText\": \"Cześć! Jak się dziś masz?\",\n    \"humidityLevel\": \"Wilgotność\",\n    \"feelsLike\": \"Odczuwalna\",\n    \"minMaxTemp\": \"Min ~ Maks\",\n    \"location\": \"Ziemia\",\n    \"enterBtn\": \"Szukaj\",\n    \"searchPlaceholder\": \"Pisz tutaj...\",\n    \"listenPlaceholder\": \"Słucham...\",\n    \"searchWithHint\": \"Szukaj za pomocą\",\n    \"searchOnHint\": \"Szukaj w\",\n    \"userText\": \"Kliknij tutaj, aby edytować\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"Dzień dobry!\",\n        \"afternoon\": \"Dzień dobry po południu!\",\n        \"evening\": \"Dobry wieczór!\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"Domyślna\",\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"Obrazy\",\n    \"redditEngine\": \"Reddit\",\n    \"wikipediaEngine\": \"Wikipedia\",\n    \"quoraEngine\": \"Quora\",\n\n    // AI Tools\n    \"ai_tools\": \"Narzędzia AI\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"grok\": \"Grok\",\n    \"qwen\": \"Qwen\",\n    \"perplexity\": \"Perplexity\",\n    \"deepseek\": \"DeepSeek\",\n    \"metaAI\": \"Meta AI\",\n    \"firefly\": \"Adobe Firefly\",\n    \"aiSettingsIntro\": \"Wybierz, które narzędzia AI wyświetlać\",\n    \"resetAISettingsBtn\": \"Resetuj\",\n\n    // Theme\n    \"enableDarkMode\": \"Tryb ciemny (eksperymentalny)\",\n    \"enableDarkModeInfo\": \"Włącz motywy ciemne\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"Prześlij tapetę\",\n    \"rangColor\": \"Wybierz kolor\",\n    \"opacityTitle\": \"Przezroczystość\",\n    \"adjustOpacityDesc\": \"Dostosuj przezroczystość interfejsu\",\n    \"backupText\": \"Kopia zapasowa\",\n    \"restoreText\": \"Przywróć\",\n    \"resetsettings\": \"Resetuj ustawienia\",\n    \"menuCloseText\": \"Zamknij\",\n\n    // Tips\n    \"switchSearchModes\": \"Przełącz tryby wyszukiwania\",\n    \"switchSearchModesInfo\": \"Kliknij ‘Szukaj za pomocą’, aby zmienić tryb.\",\n    \"adjustZoom\": \"Dostosuj powiększenie\",\n    \"adjustZoomInfo\": \"Naciśnij Ctrl + \\\"+\\\" lub Ctrl + \\\"-\\\", aby dostosować powiększenie.\",\n    \"changeBrowserTheme\": \"Zmień motyw przeglądarki\",\n    \"chromeThemeInfo\": \"Kliknij trzy kropki (⋮) > Więcej narzędzi > Dostosuj Chrome, a następnie wybierz kolor pasujący do motywu rozszerzenia.\",\n    \"edgeThemeInfo\": \"Przejdź do Ustawienia > Wygląd, a następnie wybierz kolor pasujący do motywu rozszerzenia.\",\n    \"braveThemeInfo\": \"Odwiedź <a href=\\\"https://chromewebstore.google.com/category/themes/\\\" target=\\\"_blank\\\">Chrome Theme Store</a>, pobierz i zastosuj motyw pasujący do rozszerzenia.\",\n    \"firefoxThemeInfo\": \"Odwiedź <a href=\\\"https://addons.mozilla.org/firefox/themes/\\\" target=\\\"_blank\\\">Firefox Themes</a>, pobierz i zastosuj motyw pasujący do rozszerzenia.\",\n    \"updateFirefoxHomepage\": \"Zaktualizuj stronę główną\",\n    \"updateFirefoxHomepageInfo\": \"Aby zmienić stronę główną również na nową kartę, odwiedź <a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\">ten link</a> i postępuj zgodnie z instrukcjami.\",\n    \"dontShowTips\": \"Nie pokazuj tego ponownie\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"OK\",\n    \"yesText\": \"Tak\",\n    \"noText\": \"Nie\",\n    \"agreeText\": \"Zgadzam się\",\n    \"cancelText\": \"Anuluj\",\n    \"confirmWallpaper\": \"Czy chcesz ustawić nowy obraz jako tapetę dnia?\",\n    \"confirmRestore\": \"Czy na pewno chcesz zresetować ustawienia? Tej akcji nie można cofnąć.\",\n    \"Nobackgroundset\": \"Obecnie nie ustawiono obrazu tła.\",\n    \"clearbackgroundimage\": \"Czy na pewno chcesz usunąć obraz tła?\",\n    \"ProxyDisclaimer\": \"Wszystkie funkcje proxy są domyślnie wyłączone.\\n\\nJeśli włączysz sugestie wyszukiwania i proxy CORS bypass, zdecydowanie zaleca się hostowanie własnego proxy dla lepszej prywatności.\\n\\nDomyślnie proxy będzie ustawione na https://mynt-proxy.rhythmcorehq.com, co oznacza, że wszystkie Twoje dane będą przechodzić przez tę usługę, co może stanowić zagrożenie dla prywatności.\",\n    \"GPSDisclaimer\": \"Twoje dane lokalizacyjne są używane wyłącznie do dostarczania dokładnych aktualizacji pogody. Są tymczasowo przechowywane w przeglądarce i nie są ani udostępniane usługom trzecim, ani dostępne dla nas.\\n\\nWłączając GPS, wyrażasz zgodę na udostępnienie swojej lokalizacji rozszerzeniu lokalnie.\",\n    \"failedbackup\": \"Błąd tworzenia kopii zapasowej: \",\n    \"restorecompleted\": \"Przywracanie zakończone pomyślnie!\",\n    \"restorefailed\": \"Błąd przywracania: \",\n    \"invalidBackup\": \"Wybrano nieprawidłowy plik kopii zapasowej.\",\n    \"deleteBookmark\": \"Czy na pewno chcesz usunąć zakładkę \\\"{title}\\\"?\",\n    \"UnsupportedBrowser\": \"Zakładki nie są obsługiwane w twojej przeglądarce.\",\n    \"resetShortcutsPrompt\": \"Wszystkie zapisane skróty zostaną usunięte i zresetowane do wartości domyślnych. Czy chcesz kontynuować?\"\n};\n"
  },
  {
    "path": "locales/pt.js",
    "content": "// Portuguese (Brazil)\nconst pt = {\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"Feedback\",\n\n    // Shortcuts\n    \"shortcutsText\": \"Atalhos\",\n    \"enableShortcutsText\": \"Mostrar atalhos salvos\",\n    \"editShortcutsText\": \"Editar Atalhos\",\n    \"shortcutsInfoText\": \"Escolha quais atalhos serão exibidos\",\n    \"editShortcutsList\": \"Atalhos Salvos\",\n    \"editShortcutsListInfo\": \"Você pode adicionar novos atalhos clicando no ícone \\\"+\\\" ou editar os existentes clicando no nome ou URL do atalho\",\n    \"adaptiveIconText\": \"Ícones Adaptativos\",\n    \"adaptiveIconInfoText\": \"Os ícones de atalho aparecerão redondos\",\n    \"bookmarksText\": \"Favoritos\",\n    \"bookmarksInfo\": \"Mostrar barra lateral de favoritos\",\n    \"ai_tools_button\": \"Ferramentas de IA\",\n    \"enable_ai_tools\": \"Mostrar atalhos para ferramentas de IA\",\n    \"aiToolsSettingsText\": \"Configurações de IA\",\n    \"aiToolsSettingsInfo\": \"Gerenciar atalhos de ferramentas de IA\",\n    \"googleAppsMenuText\": \"Apps Google\",\n    \"googleAppsMenuInfo\": \"Mostrar atalhos para Apps Google\",\n    \"googleAppsHover\": \"Apps do Google\",\n\n    // To-do List\n    \"todoListText\": \"Lista de Tarefas\",\n    \"todoListInfo\": \"Mostrar uma Lista de Tarefas\",\n    \"todoListHover\": \"Lista de Tarefas\",\n    \"todoPlaceholder\": \"Adicionar tarefa...\",\n\n    // Clock\n    \"hideClockBox\": \"Ocultar Relógio\",\n    \"hideClockBoxInfo\": \"Mostrar ou ocultar o relogio e data\",\n    \"digitalclocktitle\": \"Relógio Digital\",\n    \"digitalclockinfo\": \"Mudar para o relógio digital\",\n    \"timeformattitle\": \"Formato 12 Horas\",\n    \"timeformatinfo\": \"Usar formato de 12 horas\",\n    \"greetingtitle\": \"Saudação\",\n    \"greetinginfo\": \"Mostrar saudação abaixo do texto personalizado\",\n\n    // Misc\n    \"userTextTitle\": \"Texto Personalizável\",\n    \"userTextInfo\": \"Mostrar texto personalizado abaixo do relógio\",\n    \"fahrenheitCelsiusCheckbox\": \"Mudar para Fahrenheit\",\n    \"fahrenheitCelsiusText\": \"Atualize a página para aplicar as mudanças\",\n    \"hideWeatherTitle\": \"Ocultar Cartão do Tempo\",\n    \"hideWeatherInfo\": \"Desativar os widgets do clima\",\n    \"hideWeatherBox\": \"Ocultar Cartão do Tempo\",\n    \"hideWeatherBoxInfo\": \"Mostrar apenas o pílula de temperatura\",\n    \"minMaxTempText\": \"Temperatura Min-Max\",\n    \"minMaxTempSubText\": \"Substitua 'Sensação' por 'Min-Max'\",\n\n    // Search\n    \"micIconTitle\": \"Ocultar Ícone do Microfone\",\n    \"micIconInfo\": \"Se o ditado por voz não estiver funcionando\",\n    \"hideSearchWith\": \"Ocultar o Motor de Busca\",\n    \"hideSearchWithInfo\": \"Alternar entre os motores de busca clicando no ícone\",\n    \"motivationalQuotesText\": \"Frases Motivacionais\",\n    \"motivationalQuotesInfo\": \"Mostrar frases motivacionais abaixo do texto personalizado\",\n    \"search_suggestions_button\": \"Sugestões de Pesquisa\",\n    \"search_suggestions_text\": \"Ativar sugestões de pesquisa\",\n\n    // Proxy\n    \"useproxytitletext\": \"Bypass de Proxy\",\n    \"useproxyText\": \"Se as sugestões de pesquisa não estiverem funcionando\",\n    \"ProxyText\": \"Proxy de Bypass CORS\",\n    \"ProxySubtext\": \"Adicione seu próprio proxy de bypass CORS\",\n    \"HostproxyButton\": \"Hospede seu próprio proxy\",\n\n    // Location\n    \"useGPS\": \"Usar GPS\",\n    \"useGPSInfo\": \"Ativar GPS para atualização de localização\",\n    \"UserLocText\": \"Digite sua Localização\",\n    \"UserLocSubtext\": \"Se a localização do clima não estiver correta\",\n    \"userLoc\": \"Sua Cidade ou Coordenadas (Latitude, Longitude)\",\n    \"PrivacyPolicy\": \"Política de Privacidade\",\n\n    // Weather\n    \"WeatherApiText\": \"Digite sua chave WeatherAPI\",\n    \"WeatherApiSubtext\": \"Se a funcionalidade do clima não estiver funcionando\",\n    \"userAPI\": \"Sua chave weatherAPI\",\n    \"LearnMoreButton\": \"Saiba mais\",\n    \"saveAPI\": \"Salvar\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'Sábado'],\n    \"months\": ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"Favoritos\",\n    \"bookmarkSortBy\": \"Ordenar por\",\n    \"sortAlphabetical\": \"A-Z\",\n    \"sortTimeAdded\": \"Antigo-Novo\",\n    \"bookmarkViewAs\": \"Visualizar como\",\n    \"bookmarkViewGrid\": \"Grade\",\n    \"bookmarkViewList\": \"Lista\",\n    \"bookmarkSearch\": \"Pesquisar favorito\",\n    \"editBookmarkHeading\": \"Editar Favorito\",\n    \"editBookmarkName\": \"Nome do Favorito\",\n    \"editBookmarkURL\": \"URL do Favorito\",\n\n    // New Tab Item\n    \"conditionText\": \"Olá! Como você está hoje?\",\n    \"humidityLevel\": \"Umidade\",\n    \"feelsLike\": \"Sensação de\",\n    \"minMaxTemp\": \"Min ~ Max\",\n    \"location\": \"Terra\",\n    \"enterBtn\": \"Pesquisar\",\n    \"searchPlaceholder\": \"Digite aqui...\",\n    \"listenPlaceholder\": \"Ouvindo...\",\n    \"searchWithHint\": \"Pesquisar Com\",\n    \"searchOnHint\": \"Pesquisar Em\",\n    \"userText\": \"Clique aqui para editar\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"Bom dia!\",\n        \"afternoon\": \"Boa tarde!\",\n        \"evening\": \"Boa noite!\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"Padrão\",\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"Imagens\",\n    \"redditEngine\": \"Reddit\",\n    \"wikipediaEngine\": \"Wikipédia\",\n    \"quoraEngine\": \"Quora\",\n\n    // AI Tools\n    \"ai_tools\": \"Ferramentas de IA\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"grok\": \"Grok\",\n    \"qwen\": \"Qwen\",\n    \"perplexity\": \"Perplexity\",\n    \"deepseek\": \"DeepSeek\",\n    \"metaAI\": \"Meta AI\",\n    \"firefly\": \"Adobe Firefly\",\n    \"aiSettingsIntro\": \"Selecione quais ferramentas de IA exibir\",\n    \"resetAISettingsBtn\": \"Redefinir\",\n\n    // Theme\n    \"enableDarkMode\": \"Modo Escuro\",\n    \"enableDarkModeInfo\": \"Ativar temas em modo escuro\",\n\n    // Wallpaper and misc\n    \"uploadWallpaperText\": \"Enviar Papel de Parede\",\n    \"rangColor\": \"Escolher cor\",\n    \"backupText\": \"Backup\",\n    \"restoreText\": \"Restaurar\",\n    \"resetsettings\": \"Redefinir Configurações\",\n    \"menuCloseText\": \"Fechar\",\n\n    // Tips\n    \"switchSearchModes\": \"Mudar modo de pesquisa\",\n    \"switchSearchModesInfo\": \"Clique no ‘Pesquisar Com’ para mudar o modo.\",\n    \"adjustZoom\": \"Ajustar Zoom\",\n    \"adjustZoomInfo\": \"Aperte Ctrl + \\\"+\\\" or Ctrl + \\\"-\\\" para ajustar o zoom.\",\n    \"changeBrowserTheme\": \"Mudar Tema do Navegador\",\n    \"chromeThemeInfo\": \"Clique nos tres pontos (⋮) > Mais ferramentas > Personalizar Chrome, depois escolha uma cor que corresponde ao tema da extensão.\",\n    \"edgeThemeInfo\": \"Va para Configurações > Aparencia, depois escolha uma cor que corresponde ao tema da extensão.\",\n    \"braveThemeInfo\": 'Visite <a href=\"https://chromewebstore.google.com/category/themes/\" target=\"_blank\">Chrome Theme Store</a>, Baixe e aplique o tema que corresponde ao tema da extensão.',\n    \"firefoxThemeInfo\": 'Visite <a href=\"https://addons.mozilla.org/firefox/themes/\" target=\"_blank\">Firefox Themes</a>, Baixe e aplique o tema que corresponde ao tema da extensão.',\n    \"updateFirefoxHomepage\": \"Atualizar Pagina Inicial\",\n    \"updateFirefoxHomepageInfo\": \"Para mudar sua página inicial como o NewTab, visite <a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\">este link</a> e siga as instruções.\",\n    \"dontShowTips\": \"Não mostrar novamente\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"OK\",\n    \"yesText\": \"Sim\",\n    \"noText\": \"Não\",\n    \"agreeText\": \"Concordo\",\n    \"cancelText\": \"Cancelar\",\n    \"confirmWallpaper\": \"Você gostaria de definir uma nova imagem como seu papel de parede para o dia?\",\n    \"confirmRestore\": \"Você tem certeza de que deseja redefinir suas configurações? Esta ação não pode ser desfeita.\",\n    \"Nobackgroundset\": \"Nenhuma imagem de fundo está atualmente definida.\",\n    \"clearbackgroundimage\": \"Você tem certeza de que deseja limpar a imagem de fundo?\",\n    \"ProxyDisclaimer\": \"Todos os recursos de proxy estão desativados por padrão.\\n\\nSe você ativar sugestões de pesquisa e o proxy de contorno CORS, é altamente recomendável hospedar seu próprio proxy para maior privacidade.\\n\\nPor padrão, o proxy será definido como https://mynt-proxy.rhythmcorehq.com, o que significa que todos os seus dados passarão por este serviço, o que pode levantar preocupações de privacidade.\",\n    \"GPSDisclaimer\": \"Os dados da sua localização são usados exclusivamente para fornecer atualizações precisas sobre o clima. Eles são armazenados temporariamente no navegador e não são compartilhados com nenhum serviço de terceiros nem acessíveis a nós.\\n\\nAo habilitar o GPS, você consente em compartilhar sua localização localmente com a extensão.\",\n    \"failedbackup\": \"Falha no backup: \",\n    \"restorecompleted\": \"Restauração concluída com sucesso!\",\n    \"restorefailed\": \"Restauração falhou: \",\n    \"invalidBackup\": \"Arquivo de backup inválido\",\n    \"deleteBookmark\": \"Você tem certeza de que deseja excluir o favorito \\\"{title}\\\"?\",\n    \"UnsupportedBrowser\": \"Bookmarks não são suportados no seu navegador.\",\n};\n"
  },
  {
    "path": "locales/ru.js",
    "content": "// Russian\nconst ru = {\n    \"newTabTitle\": \"Новая вкладка\",\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"Отзывы\",\n\n    // Section titles\n    \"personalizationSectionTitle\": \"Персонализация\",\n    \"clockSectionTitle\": \"Часы\",\n    \"searchSectionTitle\": \"Поиск\",\n    \"weatherSectionTitle\": \"Погода\",\n    \"appearanceSectionTitle\": \"Оформление\",\n    \"settingsSectionTitle\": \"Настройки\",\n\n    // Shortcuts\n    \"shortcutsText\": \"Ярлыки\",\n    \"enableShortcutsText\": \"Включить/Отключить ярлыки\",\n    \"editShortcutsText\": \"Редактировать ярлыки\",\n    \"shortcutsInfoText\": \"Выберите, какие ярлыки будут отображаться\",\n    \"editShortcutsList\": \"Сохранённые ярлыки\",\n    'editShortcutsListInfo': 'Вы можете добавить новые ярлыки, нажав на \"+\", или отредактировать существующие, щёлкнув по ярлыку или URL.',\n    \"adaptiveIconText\": \"Адаптивные значки\",\n    \"adaptiveIconInfoText\": \"Значки всегда будут круглыми\",\n    \"bookmarksText\": \"Закладки\",\n    \"bookmarksInfo\": \"Показать боковую панель закладок\",\n    \"ai_tools_button\": \"Инструменты ИИ\",\n    \"enable_ai_tools\": \"Включить/Отключить ярлыки ИИ\",\n    \"aiToolsSettingsText\": \"Настройки ИИ\",\n    \"aiToolsSettingsInfo\": \"Управление ярлыками ИИ\",\n    \"googleAppsMenuText\": \"Приложения Google\",\n    \"googleAppsMenuInfo\": \"Показать ярлыки для приложений Google\",\n    \"googleAppsHover\": \"Приложения Google\",\n\n    // To-do List\n    \"todoListText\": \"Список дел\",\n    \"todoListInfo\": \"Показать ежедневный список дел\",\n    \"todoListHover\": \"Список дел\",\n    \"todoPlaceholder\": \"Добавить задачу...\",\n\n    // Clock\n    \"hideClockBox\": \"Скрыть часы\",\n    \"hideClockBoxInfo\": \"Скрыть часы и дату\",\n    \"digitalclocktitle\": \"Цифровые часы\",\n    \"digitalclockinfo\": \"Включить/Отключить цифровые часы\",\n    \"timeformattitle\": \"12-часовой формат\",\n    \"timeformatinfo\": \"Использовать 12-часовой формат времени\",\n    \"greetingtitle\": \"Приветствие\",\n    \"greetinginfo\": \"Показать приветствие под часами\",\n\n    // Misc\n    \"userTextTitle\": \"Пользовательский текст\",\n    \"userTextInfo\": \"Отображение текста под часами\",\n    \"fahrenheitCelsiusCheckbox\": \"Использовать Фаренгейт\",\n    \"fahrenheitCelsiusText\": \"Обновите страницу, чтобы применить\",\n    \"hideWeatherTitle\": \"Скрыть погоду\",\n    \"hideWeatherInfo\": \"Отключить виджет погоды\",\n    \"hideWeatherBox\": \"Скрыть карту погоды\",\n    \"hideWeatherBoxInfo\": \"Показать только температуру\",\n    \"minMaxTempText\": \"Мин-Макс температура\",\n    \"minMaxTempSubText\": \"Заменить 'Ощущается' на минимальную/максимальную температуру\",\n\n    // Search\n    \"micIconTitle\": \"Скрыть значок микрофона\",\n    \"micIconInfo\": \"Если голосовой ввод не работает\",\n    \"hideSearchWith\": \"Скрыть поисковые системы\",\n    \"hideSearchWithInfo\": \"Переключайте поисковые системы, щёлкая по их значку\",\n    \"motivationalQuotesText\": \"Мотивационные цитаты\",\n    \"motivationalQuotesInfo\": \"Показывать мотивационные цитаты под панелью поиска\",\n    \"search_suggestions_button\": \"Поисковые подсказки\",\n    \"search_suggestions_text\": \"Включить/Отключить поисковые подсказки\",\n\n    // Proxy\n    \"useproxytitletext\": \"Использовать прокси\",\n    \"useproxyText\": \"Если поисковые подсказки не работают\",\n    \"ProxyText\": \"CORS-прокси для обхода\",\n    \"ProxySubtext\": \"Добавьте свой CORS-прокси\",\n    \"HostproxyButton\": \"Разместить свой прокси\",\n\n    // Location\n    \"useGPS\": \"Использовать GPS\",\n    \"useGPSInfo\": \"Включите GPS для обновления местоположения в режиме реального времени\",\n    \"UserLocText\": \"Введите ваше местоположение\",\n    \"UserLocSubtext\": \"Если местоположение для погоды указано неверно\",\n    \"userLoc\": \"Ваш город или координаты (Широта, Долгота)\",\n    \"PrivacyPolicy\": \"Конфиденциальность\",\n\n    // Weather\n    \"WeatherApiText\": \"Введите свой ключ WeatherAPI\",\n    \"WeatherApiSubtext\": \"Если функция погоды не работает\",\n    \"userAPI\": \"Ваш ключ WeatherAPI\",\n    \"LearnMoreButton\": \"Узнать больше\",\n    \"saveAPI\": \"Сохранить\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],\n    \"months\": ['Янв', 'Фев', 'Март', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сент', 'Окт', 'Нояб', 'Дек'],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"Закладки\",\n    \"bookmarkSortBy\": \"Сортировка\",\n    \"sortAlphabetical\": \"A-Z\",\n    \"sortTimeAdded\": \"По дате добавления\",\n    \"bookmarkViewAs\": \"Отображение\",\n    \"bookmarkViewGrid\": \"Сетка\",\n    \"bookmarkViewList\": \"Список\",\n    \"bookmarkSearch\": \"Поиск закладки\",\n    \"editBookmarkHeading\": \"Редактировать закладку\",\n    \"editBookmarkName\": \"Имя закладки\",\n    \"editBookmarkURL\": \"URL закладки\",\n\n    // New Tab Item\n    \"conditionText\": \"Привет! Как ты сегодня?\",\n    \"humidityLevel\": \"Влажность\",\n    \"feelsLike\": \"Ощущается\",\n    \"minMaxTemp\": \"Мин ~ Макс\",\n    \"location\": \"Земля\",\n    \"enterBtn\": \"Поиск\",\n    \"searchPlaceholder\": \"Ваш запрос...\",\n    \"listenPlaceholder\": \"Слушаю...\",\n    \"searchWithHint\": \"Поиск с\",\n    \"searchOnHint\": \"Искать в\",\n    \"userText\": \"Нажмите здесь, чтобы редактировать\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"Доброе утро!\",\n        \"afternoon\": \"Добрый день!\",\n        \"evening\": \"Добрый вечер!\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"По умолчанию\",\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"DuckDuckGo\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"Картинки\",\n    \"redditEngine\": \"Reddit\",\n    \"wikipediaEngine\": \"Википедия\",\n    \"quoraEngine\": \"Quora\",\n\n    // AI Tools\n    \"ai_tools\": \"Нейросети\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"grok\": \"Grok\",\n    \"qwen\": \"Qwen\",\n    \"perplexity\": \"Perplexity\",\n    \"deepseek\": \"DeepSeek\",\n    \"metaAI\": \"Meta AI\",\n    \"firefly\": \"Adobe Firefly\",\n    \"aiSettingsIntro\": \"Выберите, какие инструменты искусственного интеллекта отображать\",\n    \"resetAISettingsBtn\": \"Сбросить\",\n\n    // Theme\n    \"lightThemed\": \"Светлая\",\n    \"darkThemed\": \"Тёмная\",\n    \"systemThemed\": \"Система\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"Загрузить обои\",\n    \"rangColor\": \"Выбрать цвет\",\n    \"opacityTitle\": \"Прозрачность\",\n    \"adjustOpacityDesc\": \"Настройка прозрачности интерфейса\",\n    \"backupText\": \"Экспорт\",\n    \"restoreText\": \"Восстановить\",\n    \"resetsettings\": \"Сброс настроек\",\n    \"menuCloseText\": \"Закрыть\",\n\n    // Tips\n    \"switchSearchModes\": \"Переключение режимов поиска\",\n    \"switchSearchModesInfo\": \"Нажмите на ‘Поиск с’, чтобы изменить режим\",\n    \"adjustZoom\": \"Регулировка масштаба\",\n    \"adjustZoomInfo\": \"Нажмите Ctrl + \\\"+\\\" или Ctrl + \\\"-\\\", чтобы отрегулировать масштаб.\",\n    \"changeBrowserTheme\": \"Изменить тему браузера\",\n    \"chromeThemeInfo\": \"Нажмите на три точки (⋮) > Дополнительные инструменты > Настройка Chrome, затем выберите цвет, соответствующий теме расширения.\",\n    \"edgeThemeInfo\": \"Перейдите в Настройки > Внешний вид, затем выберите цвет, соответствующий теме расширения.\",\n    \"braveThemeInfo\": 'Посетите <a href=\"https://chromewebstore.google.com/category/themes/\" target=\"_blank\">Chrome Theme Store</a>, загрузите и примените тему, соответствующую расширению.',\n    \"firefoxThemeInfo\": 'Посетите <a href=\"https://addons.mozilla.org/firefox/themes/\" target=\"_blank\">Firefox Themes</a>, загрузите и примените тему, соответствующую расширению.',\n    \"updateFirefoxHomepage\": \"Обновить домашнюю страницу\",\n    \"updateFirefoxHomepageInfo\": \"Чтобы изменить свою домашнюю страницу на новую вкладку, посетите <a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\">эту ссылку</a> и следуйте инструкциям.\",\n    \"dontShowTips\": \"Не показывать снова\",\n\n    // Footer Toast\n    \"footerToastTitle\": \"Видите баннер внизу?\",\n    \"footerToastMessage\": \"Чтобы скрыть его, нажмите на него правой кнопкой мыши и выберите 'Скрыть нижний колонтитул на странице новой вкладки'.\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"OK\",\n    \"yesText\": \"Да\",\n    \"noText\": \"Нет\",\n    \"agreeText\": \"Согласен\",\n    \"cancelText\": \"Отмена\",\n    \"confirmWallpaper\": \"Хотите установить новое изображение в качестве обоев на весь день?\",\n    \"confirmRestore\": \"Вы уверены, что хотите сбросить настройки? Это действие нельзя отменить.\",\n    \"Nobackgroundset\": \"В настоящее время обои не установлены.\",\n    \"clearbackgroundimage\": \"Вы уверены, что хотите убрать обои?\",\n    \"ProxyDisclaimer\": \"По умолчанию все функции прокси отключены.\\n\\nЕсли вы включите поисковые предложения и прокси для обхода CORS, настоятельно рекомендуется разместить собственный прокси для повышения конфиденциальности.\\n\\nПо умолчанию прокси будет установлен на https://mynt-proxy.rhythmcorehq.com, то есть все ваши данные будут проходить через этот сервис, что может вызвать проблемы с конфиденциальностью.\",\n    \"GPSDisclaimer\": \"Данные о вашем местоположении используются исключительно для предоставления точных обновлений погоды. Они временно хранятся в браузере, не передаются сторонним службам и не доступны нам.\\n\\nВключая GPS, вы соглашаетесь на передачу данных о вашем местоположении расширению на месте.\",\n    \"failedbackup\": \"Резервное копирование не удалось: \",\n    \"restorecompleted\": \"Восстановление настроек успешно завершено!\",\n    \"restorefailed\": \"Восстановление настроек не удалось: \",\n    \"invalidBackup\": \"Недопустимый файл резервной копии.\",\n    \"deleteBookmark\": \"Вы уверены, что хотите удалить эту закладку \\\"{title}\\\"?\",\n    \"UnsupportedBrowser\": \"Закладки не поддерживаются в вашем браузере.\",\n    \"resetShortcutsPrompt\": \"Все сохранённые ярлыки будут удалены, и их значение будет восстановлено по умолчанию. Хотите продолжить?\",\n    \"iconFileTooLargeMessage\": \"Выбранный файл слишком большой: {size} КБ. Пожалуйста, используйте файл размером менее {max} КБ.\",\n    \"iconStorageQuotaMessage\": \"Не удалось сохранить иконку, так как достигнут лимит хранилища. Удалите некоторые пользовательские иконки или используйте изображение меньшего размера.\"\n};\n"
  },
  {
    "path": "locales/sl.js",
    "content": "// Slovenian\nconst sl = {\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"Povratne informacije\",\n    \"resetsettings\": \"Ponastavi nastavitve\",\n    \"menuCloseText\": \"Zapri\",\n\n    // Shortcuts\n    \"shortcutsText\": \"Bližnjice\",\n    \"enableShortcutsText\": \"Prikaži shranjene bližnjice\",\n    \"editShortcutsText\": \"Uredi bližnjice\",\n    \"shortcutsInfoText\": \"Izberite, katere bližnjice bodo prikazane\",\n    \"editShortcutsList\": \"Shranjene bližnjice\",\n    'editShortcutsListInfo': 'Dodate lahko nove bližnjice s klikom na ikono \"+\" ali uredite obstoječe s klikom na ime bližnjice ali URL.',\n    \"adaptiveIconText\": \"Prilagodljive oblike ikon\",\n    \"adaptiveIconInfoText\": \"Ikone bodo videti manjše\",\n    \"bookmarksText\": \"Zaznamki\",\n    \"bookmarksInfo\": \"Prikaži stransko vrstico z zaznamki\",\n    \"ai_tools_button\": \"AI-orodja\",\n    \"enable_ai_tools\": \"Prikaži bližnjice za AI orodja\",\n    \"googleAppsMenuText\": \"Google Aplikacije\",\n    \"googleAppsMenuInfo\": \"Prikaži bližnjice za Google aplikacije\",\n    \"googleAppsHover\": \"Google Aplikacije\",\n\n    // To-do List\n    \"todoListText\": \"Seznam opravil\",\n    \"todoListInfo\": \"Prikaži dnevni seznam opravil\",\n    \"todoListHover\": \"Seznam opravil\",\n    \"todoPlaceholder\": \"Dodaj nalogo...\",\n\n    // Digital Clock\n    \"digitalclocktitle\": \"Digitalna ura\",\n    \"digitalclockinfo\": \"Preklopi na digitalno uro\",\n    \"timeformattitle\": \"12-urni format\",\n    \"timeformatinfo\": \"Uporabi 12-urni časovni format\",\n    \"greetingtitle\": \"Pozdrav\",\n    \"greetinginfo\": \"Prikaži pozdrav pod prilagojenim besedilom\",\n\n    // Misc\n    \"userTextTitle\": \"Uporabniško prilagodljivo besedilo\",\n    \"userTextInfo\": \"Prikaži uporabniško prilagodljivo besedilo pod uro\",\n    \"fahrenheitCelsiusCheckbox\": \"Preklopi na Fahrenheit\",\n    \"fahrenheitCelsiusText\": \"Osvežite stran za uveljavitev sprememb\",\n    \"micIconTitle\": \"Skrij ikono mikrofona\",\n    \"micIconInfo\": \"Če glasovno tipkanje ne deluje\",\n    \"hideSearchWith\": \"Skrij iskalnike\",\n    \"hideSearchWithInfo\": \"Preklapljajte med iskalniki s klikom na ikono\",\n    \"search_suggestions_button\": \"Predlogi za iskanje\",\n    \"search_suggestions_text\": \"Omogoči predloge za iskanje\",\n\n    // Proxy\n    \"useproxytitletext\": \"Proxy obid\",\n    \"useproxyText\": \"Če predlogi za iskanje ne delujejo\",\n    \"ProxyText\": \"Proxy obid za CORS\",\n    \"ProxySubtext\": \"Dodajte svoj proxy obid za CORS\",\n    \"HostproxyButton\": \"Gostite svoj proxy\",\n\n    // Location\n    \"UserLocText\": \"Vnesite svojo lokacijo\",\n    \"UserLocSubtext\": \"Če lokacija vremena ni pravilna\",\n    \"userLoc\": \"Vaše mesto ali koordinate (geografska širina, dolžina)\",\n\n    // Weather\n    \"WeatherApiText\": \"Vnesite svoj WeatherAPI ključ\",\n    \"WeatherApiSubtext\": \"Če vremenska funkcionalnost ne deluje\",\n    \"userAPI\": \"Vaš WeatherAPI ključ\",\n    \"LearnMoreButton\": \"Izvedite več\",\n    \"saveAPI\": \"Shrani\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['nedelja', 'ponedeljek', 'torek', 'sreda', 'četrtek', 'petek', 'sobota'],\n    \"months\": ['januar', 'februar', 'marec', 'april', 'maj', 'junij', 'julij', 'avgust', 'september', 'oktober', 'november', 'december'],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"Zaznamki\",\n    \"bookmarkViewAs\": \"Prikaži kot\",\n    \"bookmarkViewGrid\": \"Mreža\",\n    \"bookmarkViewList\": \"Seznam\",\n    \"bookmarkSearch\": \"Išči zaznamek\",\n\n    // New Tab Item\n    \"conditionText\": \"Živijo! Kako ste danes?\",\n    \"humidityLevel\": \"Vlažnost\",\n    \"feelsLike\": \"Občutek\",\n    \"location\": \"Zemlja\",\n    \"enterBtn\": \"Išči\",\n    \"searchPlaceholder\": \"Vnesite tukaj...\",\n    \"listenPlaceholder\": \"Poslušam...\",\n    \"searchWithHint\": \"Išči z\",\n    \"userText\": \"Kliknite tukaj za urejanje\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"Dobro jutro!\",\n        \"afternoon\": \"Dober dan!\",\n        \"evening\": \"Dober večer!\"\n    },\n\n    // Search Engines\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n\n    // AI Tools\n    \"ai_tools\": \"AI orodja\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"perplexity\": \"Perplexity\",\n    \"metaAI\": \"Meta AI\",\n\n    // Wallpaper and misc\n    \"uploadWallpaperText\": \"Naloži ozadje\",\n    \"backupText\": \"Varnostna kopija\",\n    \"restoreText\": \"Obnovi\",\n    \"rangColor\": \"Izberi barvo\",\n\n    // Dialog boxes (alerts)\n    \"confirmWallpaper\": \"Ali želite nastaviti novo sliko kot ozadje danes?\",\n    \"confirmRestore\": \"Ali ste prepričani, da želite ponastaviti nastavitve? To dejanje ni mogoče razveljaviti.\",\n    \"Nobackgroundset\": \"Trenutno ni nastavljena nobena slika za ozadje.\",\n    \"clearbackgroundimage\": \"Ali ste prepričani, da želite odstraniti sliko ozadja?\",\n    \"ProxyDisclaimer\": \"Vse funkcije proxyja so privzeto izklopljene.\\n\\nČe omogočite predloge za iskanje in proxy za obvoz CORS, je močno priporočljivo, da gostite svoj proxy za boljšo zasebnost.\\n\\nPrivzeto bo proxy nastavljen na https://mynt-proxy.rhythmcorehq.com, kar pomeni, da bodo vsi vaši podatki šli skozi to storitev, kar lahko predstavlja tveganje za zasebnost.\",\n    \"failedbackup\": \"Varnostna kopija ni uspela: \",\n    \"restorecompleted\": \"Obnovitev je bila uspešna!\",\n    \"restorefailed\": \"Obnovitev ni uspela: \",\n    \"invalidBackup\": \"Neveljavna datoteka za varnostno kopijo\",\n    \"deleteBookmark\": \"Ali ste prepričani, da želite odstraniti zaznamek \\\"{title}\\\"?\",\n    // \"UnsupportedBrowser\": \"Bookmarks are not supported in your browser\",\n};\n"
  },
  {
    "path": "locales/sv.js",
    "content": "const sv = {\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"Feedback\",\n\n    // Section titles\n    \"personalizationSectionTitle\": \"Anpassning\",\n    \"clockSectionTitle\": \"Klocka\",\n    \"searchSectionTitle\": \"Sök\",\n    \"weatherSectionTitle\": \"Väder\",\n    \"appearanceSectionTitle\": \"Utseende\",\n    \"settingsSectionTitle\": \"Inställningar\",\n\n    // Shortcuts\n    \"shortcutsText\": \"Genvägar\",\n    \"enableShortcutsText\": \"Visa sparade genvägar\",\n    \"editShortcutsText\": \"Redigera genvägar\",\n    \"shortcutsInfoText\": \"Välj vilka genvägar som ska visas\",\n    \"editShortcutsList\": \"Sparade genvägar\",\n    \"editShortcutsListInfo\": \"Du kan lägga till genvägar genom att klicka på \\\"+\\\"-ikonen eller ändra befintliga genvägar genom att klicka på deras namn eller adress.\",\n    \"adaptiveIconText\": \"Adaptiva ikoner\",\n    \"adaptiveIconInfoText\": \"Genvägarnas ikoner anpassas efter temat.\",\n    \"bookmarksText\": \"Bokmärken\",\n    \"bookmarksInfo\": \"Visa bokmärkespanel\",\n    \"ai_tools_button\": \"AI-verktyg\",\n    \"enable_ai_tools\": \"Visa genvägar för AI-verktyg\",\n    \"aiToolsSettingsText\": \"AI-verktygsinställningar\",\n    \"aiToolsSettingsInfo\": \"Inställningar för AI-verktygsgenvägar\",\n    \"googleAppsMenuText\": \"Google-appar\",\n    \"googleAppsMenuInfo\": \"Visa genvägar för Google-appar\",\n    \"googleAppsHover\": \"Google-appar\",\n\n    // To-do List\n    \"todoListText\": \"Att göra-lista\",\n    \"todoListInfo\": \"Visa en daglig att göra-lista\",\n    \"todoListHover\": \"Att göra\",\n    \"todoPlaceholder\": \"Lägg till uppgift...\",\n\n    // Clock\n    \"hideClockBox\": \"Dölj klocka\",\n    \"hideClockBoxInfo\": \"Dölj klocka och datum\",\n    \"digitalclocktitle\": \"Digital klocka\",\n    \"digitalclockinfo\": \"Byt till digital klocka\",\n    \"timeformattitle\": \"12-timmarsformat\",\n    \"timeformatinfo\": \"Använd 12-timmarsformat\",\n    \"greetingtitle\": \"Hälsning\",\n    \"greetinginfo\": \"Visa hälsning under anpassad text\",\n\n    // Misc\n    \"userTextTitle\": \"Anpassningsbar text\",\n    \"userTextInfo\": \"Visa anpassad text under klockan\",\n    \"fahrenheitCelsiusCheckbox\": \"Byt till Fahrenheit\",\n    \"fahrenheitCelsiusText\": \"Uppdatera sidan för att tillämpa ändringar\",\n    \"hideWeatherTitle\": \"Dölj väder\",\n    \"hideWeatherInfo\": \"Inaktivera väderwidgetar\",\n    \"hideWeatherBox\": \"Dölj väderkort\",\n    \"hideWeatherBoxInfo\": \"Visa endast temperatur\",\n    \"minMaxTempText\": \"Min–max-temperatur\",\n    \"minMaxTempSubText\": \"Ersätt 'Känns som' med min- och maxtemperatur\",\n\n    // Search\n    \"micIconTitle\": \"Dölj mikrofonikon\",\n    \"micIconInfo\": \"Om röstinmatning inte fungerar\",\n    \"hideSearchWith\": \"Dölj sökmotorer\",\n    \"hideSearchWithInfo\": \"Växla mellan sökmotorer genom att klicka på deras ikon\",\n    \"motivationalQuotesText\": \"Motiverande citat\",\n    \"motivationalQuotesInfo\": \"Visa citat under sökfältet\",\n    \"search_suggestions_button\": \"Sökförslag\",\n    \"search_suggestions_text\": \"Aktivera sökförslag\",\n\n    // Proxy\n    \"useproxytitletext\": \"Proxygenomgång\",\n    \"useproxyText\": \"Om sökförslag inte fungerar\",\n    \"ProxyText\": \"CORS-proxy\",\n    \"ProxySubtext\": \"Lägg till din egen CORS-proxy\",\n    \"HostproxyButton\": \"Hosta din egen proxy\",\n\n    // Location\n    \"useGPS\": \"Använd GPS\",\n    \"useGPSInfo\": \"Aktivera GPS för liveplatsuppdateringar\",\n    \"UserLocText\": \"Ange din plats\",\n    \"UserLocSubtext\": \"Om väderplatsen inte är korrekt\",\n    \"userLoc\": \"Din stad eller koordinater (latitud, longitud)\",\n    \"PrivacyPolicy\": \"Integritetspolicy\",\n\n    // Weather\n    \"WeatherApiText\": \"Ange din WeatherAPI-nyckel\",\n    \"WeatherApiSubtext\": \"Om väderfunktionen inte fungerar\",\n    \"userAPI\": \"Din WeatherAPI-nyckel\",\n    \"LearnMoreButton\": \"Läs mer\",\n    \"saveAPI\": \"Spara\",\n\n    // Body Items\n    \"days\": ['Söndag', 'Måndag', 'Tisdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lördag'],\n    \"months\": ['Januari', 'Februari', 'Mars', 'April', 'Maj', 'Juni', 'Juli', 'Augusti', 'September', 'Oktober', 'November', 'December'],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"Bokmärken\",\n    \"bookmarkSortBy\": \"Sortera efter\",\n    \"sortAlphabetical\": \"A–Ö\",\n    \"sortTimeAdded\": \"Äldst–nyast\",\n    \"bookmarkViewAs\": \"Visa som\",\n    \"bookmarkViewGrid\": \"Rutnät\",\n    \"bookmarkViewList\": \"Lista\",\n    \"bookmarkSearch\": \"Sök bokmärke\",\n    \"editBookmarkHeading\": \"Redigera bokmärke\",\n    \"editBookmarkName\": \"Bokmärkesnamn\",\n    \"editBookmarkURL\": \"Bokmärkes-URL\",\n\n    // New Tab Item\n    \"conditionText\": \"Hej! Hur mår du idag?\",\n    \"humidityLevel\": \"Luftfuktighet\",\n    \"feelsLike\": \"Känns som\",\n    \"minMaxTemp\": \"Min ~ Max\",\n    \"location\": \"Jorden\",\n    \"enterBtn\": \"Sök\",\n    \"searchPlaceholder\": \"Skriv här...\",\n    \"listenPlaceholder\": \"Lyssnar...\",\n    \"searchWithHint\": \"Sök med\",\n    \"searchOnHint\": \"Sök på\",\n    \"userText\": \"Klicka här för att redigera\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"God morgon!\",\n        \"afternoon\": \"God eftermiddag!\",\n        \"evening\": \"God kväll!\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"Standard\",\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"Bilder\",\n    \"redditEngine\": \"Reddit\",\n    \"wikipediaEngine\": \"Wikipedia\",\n    \"quoraEngine\": \"Quora\",\n\n    // AI Tools\n    \"ai_tools\": \"AI-verktyg\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"grok\": \"Grok\",\n    \"qwen\": \"Qwen\",\n    \"perplexity\": \"Perplexity\",\n    \"deepseek\": \"DeepSeek\",\n    \"metaAI\": \"Meta AI\",\n    \"firefly\": \"Adobe Firefly\",\n    \"aiSettingsIntro\": \"Välj vilka AI-verktyg som ska visas\",\n    \"resetAISettingsBtn\": \"Återställ\",\n\n    // Theme\n    \"lightThemed\": \"Ljust\",\n    \"darkThemed\": \"Mörkt\",\n    \"systemThemed\": \"System\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"Ladda upp bakgrund\",\n    \"rangColor\": \"Välj färg\",\n    \"opacityTitle\": \"Opacitet\",\n    \"adjustOpacityDesc\": \"Justera gränssnittets transparens\",\n    \"backupText\": \"Säkerhetskopiera\",\n    \"restoreText\": \"Återställ\",\n    \"resetsettings\": \"Återställ inställningar\",\n    \"menuCloseText\": \"Stäng\",\n\n    // Tips\n    \"switchSearchModes\": \"Växla söklägen\",\n    \"switchSearchModesInfo\": \"Klicka på ‘Sök med’ för att ändra läge.\",\n    \"adjustZoom\": \"Justera zoom\",\n    \"adjustZoomInfo\": \"Tryck Ctrl + \\\"+\\\" eller Ctrl + \\\"-\\\" för att ändra zoomnivå.\",\n    \"changeBrowserTheme\": \"Ändra webbläsartema\",\n    \"dontShowTips\": \"Visa inte igen\",\n\n    // Footer Toast\n    \"footerToastTitle\": \"Ser du en banner längst ner?\",\n    \"footerToastMessage\": \"För att dölja den, högerklicka och välj 'Dölj sidfot på ny flik'.\",\n\n    // Dialog boxes\n    \"okText\": \"OK\",\n    \"yesText\": \"Ja\",\n    \"noText\": \"Nej\",\n    \"agreeText\": \"Jag godkänner\",\n    \"cancelText\": \"Avbryt\"\n};\n"
  },
  {
    "path": "locales/ta.js",
    "content": "// தமிழ் (Tamil)\nconst ta = {\n    // Menu Items\n    \"github\": \"கிட்ஹப்\",\n    \"feedback\": \"பின்னூட்டம்\",\n\n    // Shortcuts\n    \"shortcutsText\": \"குறுக்குவழிகள்\",\n    \"enableShortcutsText\": \"சேமித்த குறுக்குவழிகளைக் காட்டு\",\n    \"editShortcutsText\": \"குறுக்குவழிகளைத் திருத்து\",\n    \"shortcutsInfoText\": \"எந்த குறுக்குவழிகள் காண்பிக்கப்பட வேண்டும் என்பதைத் தேர்வுசெய்க\",\n    \"editShortcutsList\": \"சேமித்த குறுக்குவழிகள்\",\n    \"editShortcutsListInfo\": \"\\\"+\\\" சின்னத்தைக் சொடுக்குவதன் மூலம் புதிய குறுக்குவழிகளைச் சேர்க்கலாம் அல்லது குறுக்குவழி பெயர் அல்லது முகவரியை சொடுக்குவதன் மூலம் ஏற்கனவே உள்ளவற்றைத் திருத்தலாம்.\",\n    \"adaptiveIconText\": \"தகவமைப்பு சின்னகள்\",\n    \"adaptiveIconInfoText\": \"குறுக்குவழி சின்னகள் கருப்பொருளுக்கு ஏற்ப மாறும்\",\n    \"bookmarksText\": \"புத்தக்குறிகள்\",\n    \"bookmarksInfo\": \"புத்தக்குறிகள் பக்கப்பட்டியைக் காட்டு\",\n    \"ai_tools_button\": \"செஅ கருவிகள்\",\n    \"enable_ai_tools\": \"செஅ கருவிகளுக்கான குறுக்குவழிகளைக் காட்டு\",\n    \"aiToolsSettingsText\": \"செஅ கருவிகள் அமைப்புகள்\",\n    \"aiToolsSettingsInfo\": \"செஅ கருவிகள் குறுக்குவழிகளை நிர்வகி\",\n    \"googleAppsMenuText\": \"கூகிள் பயன்கள்\",\n    \"googleAppsMenuInfo\": \"கூகிள் பயன்களுக்கான குறுக்குவழிகளைக் காட்டு\",\n    \"googleAppsHover\": \"கூகிள் பயன்கள்\",\n\n    // To-do List\n    \"todoListText\": \"செய்ய வேண்டிய பட்டியல்\",\n    \"todoListInfo\": \"தினசரி செய்ய வேண்டிய பட்டியலைக் காட்டு\",\n    \"todoListHover\": \"செய்ய வேண்டிய பட்டியல்\",\n    \"todoPlaceholder\": \"பணியைச் சேர்...\",\n\n    // Clock\n    \"hideClockBox\": \"கடிகாரத்தை மறை\",\n    \"hideClockBoxInfo\": \"கடிகாரத்தையும் தேதியையும் மறை\",\n    \"digitalclocktitle\": \"எண்முறை கடிகாரம்\",\n    \"digitalclockinfo\": \"எண்முறை கடிகாரத்திற்கு மாறு\",\n    \"timeformattitle\": \"12-மணிநேர வடிவமைப்பு\",\n    \"timeformatinfo\": \"12-மணிநேர வடிவமைப்பைப் பயன்படுத்து\",\n    \"greetingtitle\": \"வாழ்த்து\",\n    \"greetinginfo\": \"தனிப்பயன் உரைக்கு கீழே வாழ்த்துக்களைக் காட்டு\",\n\n    // Misc\n    \"userTextTitle\": \"தனிப்பயனாக்கக்கூடிய உரை\",\n    \"userTextInfo\": \"கடிகாரத்திற்கு கீழே தனிப்பயன் உரையைக் காட்டு\",\n    \"fahrenheitCelsiusCheckbox\": \"பரனைற்றுக்கு மாறு\",\n    \"fahrenheitCelsiusText\": \"மாற்றங்களைப் பயன்படுத்த பக்கத்தைப் புதுப்பி\",\n    \"hideWeatherTitle\": \"வானிலையை மறை\",\n    \"hideWeatherInfo\": \"வானிலை நிரல்பலகைகளை முடக்கு\",\n    \"hideWeatherBox\": \"வானிலை அட்டையை மறை\",\n    \"hideWeatherBoxInfo\": \"வெப்பநிலை மாத்திரையை மட்டும் காட்டு\",\n    \"minMaxTempText\": \"குறைந்தஅளவு-அதிகஅளவு வெப்பநிலை\",\n    \"minMaxTempSubText\": \"குறைந்தஅளவு மற்றும் அதிகஅளவு வெப்பநிலையுடன் 'உணர்கிறேன்' என்பதை மாற்று\",\n\n    // Search\n    \"micIconTitle\": \"ஒலிவாங்கி சின்னத்தை மறை\",\n    \"micIconInfo\": \"குரல் தட்டச்சு வேலை செய்யவில்லை என்றால்\",\n    \"hideSearchWith\": \"தேடல் பொறிகளை மறை\",\n    \"hideSearchWithInfo\": \"அதன் சின்னத்தைக் சொடுக்குவதன் மூலம் தேடுபொறிகளுக்கு இடையில் மாறு\",\n    \"motivationalQuotesText\": \"ஊக்கமளிக்கும் மேற்கோள்கள்\",\n    \"motivationalQuotesInfo\": \"தேடல் பட்டியின் கீழே மேற்கோள்களைக் காட்டு\",\n    \"search_suggestions_button\": \"தேடல் பரிந்துரைகள்\",\n    \"search_suggestions_text\": \"தேடல் பரிந்துரைகளை இயக்கு\",\n\n    // Proxy\n    \"useproxytitletext\": \"கடந்து செல் பதிலாள்\",\n    \"useproxyText\": \"தேடல் பரிந்துரைகள் வேலை செய்யவில்லை என்றால்\",\n    \"ProxyText\": \"CORS கடந்து செல் பதிலாள்\",\n    \"ProxySubtext\": \"உங்கள் சொந்த CORS கடந்து செல் பதிலாளைச் சேர்\",\n    \"HostproxyButton\": \"உங்கள் சொந்த பதிலாளை புரவலன் செய்யவும்\",\n\n    // Location\n    \"useGPS\": \"இடம் காட்டியைப் பயன்படுத்து\",\n    \"useGPSInfo\": \"நேரடி இருப்பிட புதுப்பிப்புகளுக்கு இடம் காட்டியை இயக்கு\",\n    \"UserLocText\": \"உங்கள் இருப்பிடத்தை உள்ளிடவும்\",\n    \"UserLocSubtext\": \"வானிலை இருப்பிடம் சரியாக இல்லாவிட்டால்\",\n    \"userLoc\": \"உங்கள் நகரம் அல்லது ஆயத்தொலைவுகள் (நிலகிடமட்டக்கோடு, நிலநடுக்கோடு)\",\n    \"PrivacyPolicy\": \"தனியுரிமைக் கொள்கை\",\n\n    // Weather\n    \"WeatherApiText\": \"உங்கள் WeatherAPI விசையை உள்ளிடவும்\",\n    \"WeatherApiSubtext\": \"வானிலை செயல்பாடு வேலை செய்யவில்லை என்றால்\",\n    \"userAPI\": \"உங்கள் வானிலைபநிஇ விசை\",\n    \"LearnMoreButton\": \"மேலும் அறிக\",\n    \"saveAPI\": \"சேமி\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['ஞாயிறு', 'திங்கள்', 'செவ்வாய்', 'அறிவன்', 'வியாழன்', 'வெள்ளி', 'காரி'],\n    \"months\": ['மா-தை', 'தை-மாசி', 'மா-பங்குனி', 'ப-சித்திரை', 'சி-வைகாசி', 'வை-ஆனி', 'ஆ-ஆடி', 'ஆ-ஆவணி', 'ஆ-புரட்டாசி', 'பு-ஐப்பசி', 'ஐ-கார்த்திகை', 'கா-மார்கழி'],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"புத்தக்குறிகள்\",\n    \"bookmarkSortBy\": \"வரிசைப்படுத்து\",\n    \"sortAlphabetical\": \"அ-ஔ\",\n    \"sortTimeAdded\": \"பழைய-புதிய\",\n    \"bookmarkViewAs\": \"இவ்வாறு காண்க\",\n    \"bookmarkViewGrid\": \"கட்டம்\",\n    \"bookmarkViewList\": \"பட்டியல்\",\n    \"bookmarkSearch\": \"புத்தக்குறியைத் தேடு\",\n    \"editBookmarkHeading\": \"புத்தக்குறியைத் திருத்து\",\n    \"editBookmarkName\": \"புத்தக்குறியின் பெயர்\",\n    \"editBookmarkURL\": \"புத்தக்குறி முகவரி\",\n\n    // New Tab Item\n    \"conditionText\": \"வணக்கம்! இன்று நீங்கள் எப்படி இருக்கிறீர்கள்?\",\n    \"humidityLevel\": \"ஈரப்பதம்\",\n    \"feelsLike\": \"உணர்கிறது\",\n    \"minMaxTemp\": \"குறைந்தஅளவு ~ அதிகஅளவு\",\n    \"location\": \"பூமி\",\n    \"enterBtn\": \"தேடு\",\n    \"searchPlaceholder\": \"இங்கே தட்டச்சு செய்க...\",\n    \"listenPlaceholder\": \"கேட்கிறேன்...\",\n    \"searchWithHint\": \"உடன் தேடு\",\n    \"searchOnHint\": \"மேல் தேடு\",\n    \"userText\": \"திருத்த இங்கே சொடுக்கு\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"காலை வணக்கம்!\",\n        \"afternoon\": \"பகல் வணக்கம்!\",\n        \"evening\": \"மாலை வணக்கம்!\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"இயல்புநிலை\",\n    \"googleEngine\": \"கூகுள்\",\n    \"duckEngine\": \"டக்டக்கோ\",\n    \"bingEngine\": \"பிங்\",\n    \"braveEngine\": \"பிரேவ்\",\n    \"youtubeEngine\": \"யூடியூப்\",\n    \"gImagesEngine\": \"படங்கள்\",\n    \"redditEngine\": \"ரெடிட்\",\n    \"wikipediaEngine\": \"விக்கிப்பீடியா\",\n    \"quoraEngine\": \"கோரா\",\n\n    // AI Tools\n    \"ai_tools\": \"செஅ கருவிகள்\",\n    \"chatGPT\": \"சாட்ஜிபிடி\",\n    \"gemini\": \"ஜெமினி\",\n    \"copilot\": \"கோபைலட்\",\n    \"claude\": \"கிளாட்\",\n    \"grok\": \"குரோக்\",\n    \"qwen\": \"க்வென்\",\n    \"perplexity\": \"பெர்ப்லெக்சிடி\",\n    \"deepseek\": \"டீப்சீக்\",\n    \"metaAI\": \"மெட்டா ஏஐ\",\n    \"firefly\": \"ஃபயர்ஃபிளை\",\n    \"aiSettingsIntro\": \"எந்த செஅ கருவிகளைக் காட்ட வேண்டும் என்பதைத் தேர்ந்தெடு\",\n    \"resetAISettingsBtn\": \"மீட்டமை\",\n\n    // Theme\n    \"enableDarkMode\": \"இருள் முறை(பரிசோதனை)\",\n    \"enableDarkModeInfo\": \"இருள் முறை கருப்பொருள்கள் இயக்கு\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"பின்படத்தை பதிவேற்று\",\n    \"rangColor\": \"நிறம் எடு\",\n    \"opacityTitle\": \"ஒளிபுகாநிலை\",\n    \"adjustOpacityDesc\": \"இடைமுக வெளிப்படைத்தன்மையை சரிசெய்\",\n    \"backupText\": \"காப்புப்பிரதி\",\n    \"restoreText\": \"மீட்டெடு\",\n    \"resetsettings\": \"அமைப்புகளை மீட்டமை\",\n    \"menuCloseText\": \"மூடு\",\n\n    // Tips\n    \"switchSearchModes\": \"தேடல் முறைகளை மாற்று\",\n    \"switchSearchModesInfo\": \"பயன்முறையை மாற்ற 'உடன் தேடு' என்பதைக் சொடுக்கு.\",\n    \"adjustZoom\": \"பெரிதாக்கத்தை சரிசெய்\",\n    \"adjustZoomInfo\": \"பெரிதாக்கத்தை சரிசெய்ய கட்டு + \\\"+\\\" அல்லது கட்டு + \\\"-\\\" ஐ அழுத்தவும்.\",\n    \"changeBrowserTheme\": \"உலாவி கருப்பொருளை மாற்று\",\n    \"chromeThemeInfo\": \"மூன்று புள்ளிகளைக் சொடுக்கவும் (⋮) > கூடுதல் கருவிகள் > நிறமியைத் தனிப்பயனாக்கு, பின்னர் நீட்டிப்பு கருப்பொருளுடன் பொருந்தக்கூடிய வண்ணத்தைத் தேர்வு செய்யவும்.\",\n    \"edgeThemeInfo\": \"அமைப்புகள் > தோற்றம் என்பதற்குச் சென்று, நீட்டிப்புகருப்பொருளுடன் பொருந்தக்கூடிய வண்ணத்தைத் தேர்வு செய்யவும்.\",\n    \"braveThemeInfo\": '<a href=\"https://chromewebstore.google.com/category/themes/\" target=\"_blank\">நிறமி கருப்பொருள் கடையைப்</a> பார்வையிடவும், நீட்டிப்புடன் பொருந்தக்கூடிய கருப்பொருளைப் பதிவிறக்கிப் பயன்படுத்தவும்.',\n    \"firefoxThemeInfo\": '<a href=\"https://addons.mozilla.org/firefox/themes/\" target=\"_blank\">தீநரி கருப்பொருள்களைப்</a> பார்வையிடவும், நீட்டிப்புடன் பொருந்தக்கூடிய கருப்பொருளைப் பதிவிறக்கிப் பயன்படுத்தவும்.',\n    \"updateFirefoxHomepage\": \"முகப்புப் பக்கத்தைப் புதுப்பி\",\n    \"updateFirefoxHomepageInfo\": \"புதிய தாவலைப் போல உங்கள் முகப்புப் பக்கத்தையும் மாற்ற, <a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\">இந்த இணைப்பைப்</a> பார்வையிட்டு வழிமுறைகளைப் பின்பற்றவும்.\",\n    \"dontShowTips\": \"மீண்டும் காட்ட வேண்டாம்\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"சரி\",\n    \"yesText\": \"ஆம்\",\n    \"noText\": \"இல்லை\",\n    \"agreeText\": \"ஒப்புக்கொள்கிறேன்\",\n    \"cancelText\": \"நீக்கறல்\",\n    \"confirmWallpaper\": \"இன்றைய நாளுக்கு உங்கள் பின்னணிபடமாக ஒரு புதிய படத்தை அமைக்க விரும்புகிறீர்களா?\",\n    \"confirmRestore\": \"உங்கள் அமைப்புகளை மீட்டமைக்க விரும்புகிறீர்களா? இந்த செயலை செயல்தவிர்க்க முடியாது.\",\n    \"Nobackgroundset\": \"தற்போது எந்த பின்னணி படமும் அமைக்கப்படவில்லை.\",\n    \"clearbackgroundimage\": \"பின்னணி படத்தை அழிக்க விரும்புகிறீர்களா?\",\n    \"ProxyDisclaimer\": \"இயல்பாகவே அனைத்து பதிலாள் நற்பொருத்தங்களும் முடக்கப்பட்டுள்ளன.\\n\\nநீங்கள் தேடல் பரிந்துரைகளையும் CORS தனிவழி பதிலாள்யையும் இயக்கினால், மேம்பட்ட தனியுரிமைக்காக உங்கள் சொந்த பதிலாளை புரவலன் செய்ய கடுமையாக பரிந்துரைக்கப்படுகிறது.\\n\\nஇயல்புநிலையாக, பதிலாள் https://mynt-proxy.rhythmcorehq.com ஆக அமைக்கப்படும், அதாவது உங்கள் எல்லா தரவும் இந்த சேவையின் வழியாக செல்லும், இது தனியுரிமை கவலைகளை ஏற்படுத்தக்கூடும்.\",\n    \"GPSDisclaimer\": \"உங்கள் இருப்பிடத் தரவு துல்லியமான வானிலை புதுப்பிப்புகளை வழங்க மட்டுமே பயன்படுத்தப்படுகிறது. இது உலாவியில் தற்காலிகமாக சேமிக்கப்படுகிறது மற்றும் எந்த மூன்றாம் தரப்பு சேவைகளுடனும் பகிரப்படவில்லை அல்லது எங்களாலும் அணுக முடியாது.\\n\\nGPSஐ இயக்குவதன் மூலம், நீட்டிப்புடன் உங்கள் இருப்பிடத்தை உள்ளகத்தில் பகிர ஒப்புக்கொள்கிறீர்கள்.\",\n    \"failedbackup\": \"காப்புப்பிரதி தோல்வியடைந்தது: \",\n    \"restorecompleted\": \"மீட்டெடுப்பு வெற்றிகரமாக முடிந்தது!\",\n    \"restorefailed\": \"மீட்டெடுப்பு தோல்வியடைந்தது: \",\n    \"invalidBackup\": \"தவறான காப்புப்பிரதி கோப்பு தேர்ந்தெடுக்கப்பட்டது.\",\n    \"deleteBookmark\": \"\\\"{title}\\\"என்ற புத்தக்குறியை நீக்க விரும்புகிறீர்களா?\",\n    \"UnsupportedBrowser\": \"உங்கள் உலாவியில் புத்தக்குறிகள் ஆதரிக்கப்படவில்லை.\",\n    \"resetShortcutsPrompt\": \"சேமிக்கப்பட்ட அனைத்து குறுக்குவழிகளும் நீக்கப்பட்டு இயல்புநிலைக்கு மீட்டமைக்கப்படும். நீங்கள் தொடர விரும்புகிறீர்களா?\",\n};\n"
  },
  {
    "path": "locales/th.js",
    "content": "// ภาษาไทย (Thai)\nconst th = {\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"ข้อเสนอแนะ\",\n\n    // Shortcuts\n    \"shortcutsText\": \"คำสั่งลัด\",\n    \"enableShortcutsText\": \"แสดงคำสั่งลัดที่บันทึกไว้\",\n    \"editShortcutsText\": \"แก้ไขคำสั่งลัด\",\n    \"shortcutsInfoText\": \"เลือกคำสั่งลัดที่จะแสดง\",\n    \"editShortcutsList\": \"คำสั่งลัดทั้งหมด\",\n    \"editShortcutsListInfo\": \"คลิกที่เครื่องหมาย \\\"+\\\" เพื่อสร้างคำสั่งลัดใหม่ หรือแก้ไขคำสั่งลัดที่มีอยู่แล้วโดยคลิกชื่อคำสั่งลัดหรือ URL\",\n    \"adaptiveIconText\": \"ปรับไอคอนอัตโนมัติ\",\n    \"adaptiveIconInfoText\": \"ไอคอนจะปรับอัตโนมัติตามธีม\",\n    \"bookmarksText\": \"บุ๊กมาร์ก\",\n    \"bookmarksInfo\": \"แสดงรายการบุ๊กมาร์ก\",\n    \"ai_tools_button\": \"เครื่องมือ AI\",\n    \"enable_ai_tools\": \"แสดงคำสั่งลัดสำหรับเครื่องมือ AI\",\n    \"aiToolsSettingsText\": \"การตั้งค่าเครื่องมือ AI\",\n    \"aiToolsSettingsInfo\": \"จัดการคำสั่งลัดสำหรับเครื่องมือ AI\",\n    \"googleAppsMenuText\": \"Google Apps\",\n    \"googleAppsMenuInfo\": \"แสดงคำสั่งลัดสำหรับ Google Apps\",\n    \"googleAppsHover\": \"Google Apps\",\n\n    // To-do List\n    \"todoListText\": \"To Do List\",\n    \"todoListInfo\": \"แสดงรายการสิ่งที่ต้องทำประจำวัน\",\n    \"todoListHover\": \"ToDo List\",\n    \"todoPlaceholder\": \"เพิ่มรายการ...\",\n\n    // Clock\n    \"hideClockBox\": \"ปิดการแสดงนาฬิกา\",\n    \"hideClockBoxInfo\": \"ปิดการแสดงนาฬิกาและวันที่\",\n    \"digitalclocktitle\": \"นาฬิกาดิจิทัล\",\n    \"digitalclockinfo\": \"สลับไปใช้งานนาฬิกาดิจิทัล\",\n    \"timeformattitle\": \"รูปแบบ 12 ชั่วโมง\",\n    \"timeformatinfo\": \"ใช้รูปแบบเวลา 12 ชั่วโมง\",\n    \"greetingtitle\": \"คำทักทาย\",\n    \"greetinginfo\": \"แสดงคำทักทายด้านล่างข้อความที่กำหนดเอง\",\n    // Misc\n    \"userTextTitle\": \"ข้อความที่กำหนดเอง\",\n    \"userTextInfo\": \"แสดงข้อความที่กำหนดเองด้านล่างนาฬิกา\",\n    \"fahrenheitCelsiusCheckbox\": \"สลับไปใช้ฟาเรนไฮต์\",\n    \"fahrenheitCelsiusText\": \"รีเฟรชเพื่อใช้งานการเปลี่ยนแปลง\",\n    \"hideWeatherTitle\": \"ปิดการแสดงสภาพอากาศ\",\n    \"hideWeatherInfo\": \"ปิดการใช้งานวิดเจ็ตสภาพอากาศ\",\n    \"hideWeatherBox\": \"ปิดการแสดงรายละเอียดสภาพอากาศ\",\n    \"hideWeatherBoxInfo\": \"แสดงผลเพียงอุณหภูมิ\",\n    \"minMaxTempText\": \"อุณหภูมิต่ำสุด-สูงสุด\",\n    \"minMaxTempSubText\": \"แสดงอุณหภูมิต่ำสุด/สูงสุดแทน 'รู้สึกเหมือน'\",\n\n    // Search\n    \"micIconTitle\": \"ซ่อนไอคอนไมโครโฟน\",\n    \"micIconInfo\": \"ซ่อนไอคอนไมโครโฟน\",\n    \"hideSearchWith\": \"ซ่อนเครื่องมือค้นหา\",\n    \"hideSearchWithInfo\": \"สลับระหว่างเครื่องมือค้นหาโดยคลิกที่ไอคอน\",\n    \"motivationalQuotesText\": \"คำคมสร้างแรงบันดาลใจ\",\n    \"motivationalQuotesInfo\": \"แสดงคำคมใต้แถบค้นหา\",\n    \"search_suggestions_button\": \"คำแนะนำการค้นหา\",\n    \"search_suggestions_text\": \"เปิดใช้งานคำแนะนำการค้นหา\",\n\n    // Proxy\n    \"useproxytitletext\": \"Proxy Bypass\",\n    \"useproxyText\": \"หากคำแนะนำการค้นหาไม่ทำงาน\",\n    \"ProxyText\": \"CORS Bypass Proxy\",\n    \"ProxySubtext\": \"เพิ่ม CORS bypass proxy ของคุณ\",\n    \"HostproxyButton\": \"โฮสต์ proxy ของคุณ\",\n\n    // Location\n    \"useGPS\": \"เปิดใช้งาน GPS\",\n    \"useGPSInfo\": \"เปิดใช้งาน GPS สำหรับอัปเดตตำแหน่งแบบเรียลไทม์\",\n    \"UserLocText\": \"ป้อนตำแหน่งของคุณ\",\n    \"UserLocSubtext\": \"หากตำแหน่งไม่ถูกต้อง\",\n    \"userLoc\": \"เมืองของคุณหรือพิกัด (ละติจูด, ลองจิจูด)\",\n    \"PrivacyPolicy\": \"นโยบายความเป็นส่วนตัว\",\n\n    // Weather\n    \"WeatherApiText\": \"ป้อน WeatherAPI key ของคุณ\",\n    \"WeatherApiSubtext\": \"หากฟังก์ชันสภาพอากาศไม่ทำงาน\",\n    \"userAPI\": \"weatherAPI key ของคุณ\",\n    \"LearnMoreButton\": \"เรียนรู้เพิ่มเติม\",\n    \"saveAPI\": \"บันทึก\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['อาทิตย์', 'จันทร์', 'อังคาร', 'พุธ', 'พฤหัสบดี', 'ศุกร์', 'เสาร์'],\n    \"months\": ['มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"บุ๊กมาร์ก\",\n    \"bookmarkSortBy\": \"เรียงตาม\",\n    \"sortAlphabetical\": \"A-Z\",\n    \"sortTimeAdded\": \"เก่า-ใหม่\",\n    \"bookmarkViewAs\": \"แสดงผลแบบ\",\n    \"bookmarkViewGrid\": \"กริด\",\n    \"bookmarkViewList\": \"ลิสต์\",\n    \"bookmarkSearch\": \"ค้นหาบุ๊กมาร์ก\",\n    \"editBookmarkHeading\": \"แก้ไขบุ๊กมาร์ก\",\n    \"editBookmarkName\": \"ชื่อบุ๊กมาร์ก\",\n    \"editBookmarkURL\": \"URL บุ๊กมาร์ก\",\n\n    // New Tab Item\n    \"conditionText\": \"สวัสดี! วันนี้คุณเป็นอย่างไรบ้าง?\",\n    \"humidityLevel\": \"ความชื้น\",\n    \"feelsLike\": \"รู้สึกเหมือน\",\n    \"minMaxTemp\": \"ต่ำสุด ~ สูงสุด\",\n    \"location\": \"โลก\",\n    \"enterBtn\": \"ค้นหา\",\n    \"searchPlaceholder\": \"พิมพ์ที่นี่...\",\n    \"listenPlaceholder\": \"กำลังฟัง...\",\n    \"searchWithHint\": \"ค้นหาด้วย\",\n    \"searchOnHint\": \"ค้นหาใน\",\n    \"userText\": \"คลิกเพื่อแก้ไข\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"อรุณสวัสดิ์!\",\n        \"afternoon\": \"สวัสดีตอนบ่าย!\",\n        \"evening\": \"'สวัสดีตอนเย็น!\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"ค่าเริ่มต้น\",\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"Images\",\n    \"redditEngine\": \"Reddit\",\n    \"wikipediaEngine\": \"Wikipedia\",\n    \"quoraEngine\": \"Quora\",\n\n    // AI Tools\n    \"ai_tools\": \"เครื่องมือ AI\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"grok\": \"Grok\",\n    \"qwen\": \"Qwen\",\n    \"perplexity\": \"Perplexity\",\n    \"deepseek\": \"DeepSeek\",\n    \"metaAI\": \"Meta AI\",\n    \"firefly\": \"Adobe Firefly\",\n    \"aiSettingsIntro\": \"เลือกเครื่องมือ AI ที่ต้องการแสดง\",\n    \"resetAISettingsBtn\": \"รีเซ็ต\",\n\n    // Theme\n    \"enableDarkMode\": \"โหมดมืด (ทดลอง)\",\n    \"enableDarkModeInfo\": \"เปิดใช้งานธีมโหมดมืด\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"อัปโหลดวอลเปเปอร์\",\n    \"rangColor\": \"เลือกสี\",\n    \"opacityTitle\": \"ความทึบแสง\",\n    \"adjustOpacityDesc\": \"ปรับความโปร่งใสของอินเทอร์เฟซ\",\n    \"backupText\": \"สำรองข้อมูล\",\n    \"restoreText\": \"กู้คืน\",\n    \"resetsettings\": \"รีเซ็ตการตั้งค่า\",\n    \"menuCloseText\": \"ปิด\",\n\n    // Tips\n    \"switchSearchModes\": \"สลับโหมดการค้นหา\",\n    \"switchSearchModesInfo\": \"คลิกที่ 'ค้นหาด้วย' เพื่อเปลี่ยนโหมด\",\n    \"adjustZoom\": \"ปรับการซูม\",\n    \"adjustZoomInfo\": \"กด Ctrl + \\\"+\\\" หรือ Ctrl + \\\"-\\\" เพื่อปรับการซูม\",\n    \"changeBrowserTheme\": \"เปลี่ยนธีมเบราว์เซอร์\",\n    \"chromeThemeInfo\": \"คลิกจุดสามจุด (⋮) > เครื่องมือเพิ่มเติม > ปรับแต่ง Chrome แล้วเลือกสีให้ตรงกับธีมส่วนขยาย\",\n    \"edgeThemeInfo\": \"ไปที่ การตั้งค่า > ลักษณะที่ปรากฏ แล้วเลือกสีให้ตรงกับธีมส่วนขยาย\",\n    \"braveThemeInfo\": 'ไปที่ <a href=\"https://chromewebstore.google.com/category/themes/\" target=\"_blank\">Chrome Theme Store</a> ดาวน์โหลดและใช้ธีมที่ตรงกับส่วนขยาย',\n    \"firefoxThemeInfo\": 'ไปที่ <a href=\"https://addons.mozilla.org/firefox/themes/\" target=\"_blank\">Firefox Themes</a> ดาวน์โหลดและใช้ธีมที่ตรงกับส่วนขยาย',\n    \"updateFirefoxHomepage\": \"อัปเดตหน้าแรก\",\n    \"updateFirefoxHomepageInfo\": \"หากต้องการเปลี่ยนหน้าแรกให้เหมือนแท็บใหม่ ดูที่ <a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\">this link</a> และทำตามคำแนะนำ\",\n    \"dontShowTips\": \"ไม่ต้องแสดงอีก\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"ตกลง\",\n    \"yesText\": \"ใช่\",\n    \"noText\": \"ไม่\",\n    \"agreeText\": \"ยอมรับ\",\n    \"cancelText\": \"ยกเลิก\",\n    \"confirmWallpaper\": \"คุณต้องการตั้งรูปภาพใหม่เป็นวอลเปเปอร์สำหรับวันนี้หรือไม่?\",\n    \"confirmRestore\": \"การกระทำนี้ไม่สามารถยกเลิกได้ คุณแน่ใจหรือไม่ว่าต้องการรีเซ็ตการตั้งค่า?\",\n    \"Nobackgroundset\": \"ยังไม่ได้ตั้งภาพพื้นหลัง\",\n    \"clearbackgroundimage\": \"คุณแน่ใจหรือไม่ว่าต้องการลบภาพพื้นหลัง?\",\n    \"ProxyDisclaimer\": \"ฟีเจอร์ Proxy ทั้งหมดถูกปิดโดยค่าเริ่มต้น\\n\\nหากคุณเปิดใช้งานคำแนะนำการค้นหาและ CORS bypass proxy ขอแนะนำให้โฮสต์ Proxy ของคุณเองเพื่อความเป็นส่วนตัวที่ดียิ่งขึ้น\\n\\nโดยค่าเริ่มต้น Proxy จะถูกตั้งค่าเป็น https://mynt-proxy.rhythmcorehq.com ซึ่งหมายความว่าข้อมูลทั้งหมดของคุณผ่านบริการนี้อาจมีปัญหาความเป็นส่วนตัว\",\n    \"GPSDisclaimer\": \"ข้อมูลตำแหน่งของคุณถูกใช้เพื่อให้ข้อมูลสภาพอากาศที่แม่นยำเท่านั้น ข้อมูลจะถูกเก็บชั่วคราวในเบราว์เซอร์และไม่ถูกแบ่งปันกับบริการภายนอกหรือเข้าถึงโดยเรา\\n\\nเมื่อเปิดใช้งาน GPS คุณยินยอมให้แชร์ตำแหน่งกับส่วนขยายในเครื่องเท่านั้น\",\n    \"failedbackup\": \"สำรองข้อมูลล้มเหลว: \",\n    \"restorecompleted\": \"กู้คืนข้อมูลสำเร็จ!\",\n    \"restorefailed\": \"กู้คืนข้อมูลล้มเหลว: \",\n    \"invalidBackup\": \"เลือกไฟล์สำรองข้อมูลไม่ถูกต้อง\",\n    \"deleteBookmark\": \"คุณแน่ใจหรือไม่ว่าต้องการลบบุ๊กมาร์ก \\\"{title}\\\"?\",\n    \"UnsupportedBrowser\": \"เบราว์เซอร์ของคุณไม่รองรับบุ๊กมาร์ก\",\n    \"resetShortcutsPrompt\": \"คำสั่งลัดทั้งหมดที่บันทึกไว้จะถูกลบและรีเซ็ตเป็นค่าเริ่มต้น คุณต้องการดำเนินการต่อหรือไม่?\"\n};\n"
  },
  {
    "path": "locales/tr.js",
    "content": "// Turkish\nconst tr = {\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"Geri Bildirim\",\n    \"resetsettings\": \"Ayarları Sıfırla\",\n    \"menuCloseText\": \"Kapat\",\n\n    // Shortcuts\n    \"shortcutsText\": \"Kısayollar\",\n    \"enableShortcutsText\": \"Kaydedilen kısayolları göster\",\n    \"editShortcutsText\": \"Kısayolları Düzenle\",\n    \"shortcutsInfoText\": \"Hangi kısayolların gösterileceğini seçin\",\n    \"editShortcutsList\": \"Kaydedilen Kısayollar\",\n    \"editShortcutsListInfo\": \"\\\"+\\\" simgesine tıklayarak yeni kısayollar ekleyebilir veya kısayol adına ya da URL'ye tıklayarak mevcut kısayolları düzenleyebilirsiniz.\",\n    \"adaptiveIconText\": \"Uyarlanabilir İkon Şekilleri\",\n    \"adaptiveIconInfoText\": \"Kısayol ikonları tema rengine göre uyarlanacak ve daha küçük görünecektir\",\n    \"bookmarksText\": \"Yer İmleri\",\n    \"bookmarksInfo\": \"Yer imleri kenar çubuğunu göster\",\n    \"ai_tools_button\": \"Yapay Zeka Araçları\",\n    \"enable_ai_tools\": \"Yapay zeka araçları kısayollarını göster\",\n    \"googleAppsMenuText\": \"Google Uygulamaları\",\n    \"googleAppsMenuInfo\": \"Google uygulamaları için kısayollarını göster\",\n    \"googleAppsHover\": \"Google Apps\",\n\n    // To-do List\n    \"todoListText\": \"Yapılacaklar Listesi\",\n    \"todoListInfo\": \"Yapılacaklar listesini göster\",\n    \"todoListHover\": \"Yapılacaklar\",\n    \"todoPlaceholder\": \"Görev ekle\",\n\n    // Digital Clock\n    \"digitalclocktitle\": \"Dijital Saat\",\n    \"digitalclockinfo\": \"Dijital saate geçiş yap\",\n    \"timeformattitle\": \"12 Saat Formatı\",\n    \"timeformatinfo\": \"12 saat zaman formatını kullanın\",\n    \"greetingtitle\": \"Karşılama\",\n    \"greetinginfo\": \"Özel metinin altında karşılama mesajını göster\",\n\n    // Misc\n    \"userTextTitle\": \"Özelleştirilebilir Metin\",\n    \"userTextInfo\": \"Saatin altında özel metin göster\",\n    \"fahrenheitCelsiusCheckbox\": \"Fahrenheit'a geç\",\n    \"fahrenheitCelsiusText\": \"Güncellemeleri görmek için sayfayı yenileyin\",\n    \"micIconTitle\": \"Mikrofon Simgesini Gizle\",\n    \"micIconInfo\": \"Eğer sesli yazma çalışmıyorsa\",\n    \"hideSearchWith\": \"Arama Motorlarını Gizle\",\n    \"hideSearchWithInfo\": \"İkonuna tıklayarak arama motorları arasında geçiş yapın\",\n    \"search_suggestions_button\": \"Arama Önerileri\",\n    \"search_suggestions_text\": \"Arama önerilerini etkinleştir\",\n\n    // Proxy\n    \"useproxytitletext\": \"Proxy Atlatma\",\n    \"useproxyText\": \"Arama önerileri çalışmıyorsa\",\n    \"ProxyText\": \"CORS Atlatma Proxy\",\n    \"ProxySubtext\": \"Kendi proxy'nizi ekleyin\",\n    \"HostproxyButton\": \"Kendi Proxy'nizi Barındırın\",\n\n    // Location\n    \"UserLocText\": \"Konumunuzu girin\",\n    \"UserLocSubtext\": \"Hava durumu konumu doğru değilse\",\n    \"userLoc\": \"Bulunduğunuz şehir veya Koordinatlarınız (Enlem, Boylam)\",\n    \"useGPS\": \"GPS Kullan\",\n\n    // Weather\n    \"WeatherApiText\": \"WeatherAPI anahtarınızı girin\",\n    \"WeatherApiSubtext\": \"Hava durumu işlevi çalışmıyorsa\",\n    \"userAPI\": \"WeatherAPI anahtarınız\",\n    \"LearnMoreButton\": \"Daha Fazla Bilgi Edinin\",\n    \"saveAPI\": \"Kaydet\",\n    \"hideWeatherBox\": \"Hava Durumu Kartını Gizle\",\n    \"hideWeatherBoxInfo\": \"Sıcaklığı sadece mobilde göster\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['Pazar', 'Pazartesi', 'Salı', 'Çarşamba', 'Perşembe', 'Cuma', 'Cumartesi'],\n    \"months\": ['Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık'],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"Yer imleri\",\n    \"bookmarkViewAs\": \"Görünüm\",\n    \"bookmarkViewGrid\": \"Izgara\",\n    \"bookmarkViewList\": \"Liste\",\n    \"bookmarkSearch\": \"Yer imlerinde ara\",\n\n    // New Tab Item\n    \"conditionText\": \"Merhaba! Bugün nasılsın?\",\n    \"humidityLevel\": \"Nem\",\n    \"feelsLike\": \"Hissediyor\",\n    \"location\": \"Dünya\",\n    \"enterBtn\": \"Arama Yap\",\n    \"searchPlaceholder\": \"Buraya yazın...\",\n    \"listenPlaceholder\": \"Dinleniyor...\",\n    \"searchWithHint\": \"ile Ara\",\n    \"userText\": \"Düzenlemek için buraya tıklayın\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"Günaydın!\",\n        \"afternoon\": \"Tünaydın!\",\n        \"evening\": \"İyi akşamlar!\"\n    },\n\n    // Search Engines\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"Görseller\",\n    \"redditEngine\": \"Reddit\",\n\n    // AI Tools\n    \"ai_tools\": \"Yapay Zeka Araçları\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"perplexity\": \"Perplexity\",\n    \"metaAI\": \"Meta AI\",\n\n    // Theme\n    \"enableDarkMode\": \"Karanlık Mod\",\n    \"enableDarkModeInfo\": \"Karanlık moda geç\",\n\n    // Wallpaper and misc\n    \"uploadWallpaperText\": \"Duvar Kağıdı Yükle\",\n    \"backupText\": \"Yedekleme\",\n    \"restoreText\": \"Kurtarma\",\n    \"rangColor\": \"Renk seç\",\n\n    // Dialog boxes (alerts)\n    \"confirmWallpaper\": \"Bugün için yeni bir duvar kağıdı ayarlamak ister misiniz?\",\n    \"confirmRestore\": \"Ayarlarınızı sıfırlamak istediğinizden emin misiniz? Bu eylem geri alınamaz.\",\n    \"Nobackgroundset\": \"Şu anda hiçbir arka plan resmi ayarlanmamış.\",\n    \"clearbackgroundimage\": \"Arka plan resmini temizlemek istediğinizden emin misiniz?\",\n    \"ProxyDisclaimer\": \"Tüm proxy özellikleri varsayılan olarak kapalıdır.\\n\\nArama önerilerini ve CORS bypass proxy'sini etkinleştirirseniz, gelişmiş gizlilik için kendi proxy'nizi barındırmanız şiddetle önerilir.\\n\\nVarsayılan olarak https://mynt-proxy.rhythmcorehq.com ayarlanacaktır, yani tüm verileriniz bu hizmet üzerinden geçecektir, bu da gizlilik endişeleri yaratabilir.\",\n    \"failedbackup\": \"Yedekleme başarısız oldu: \",\n    \"restorecompleted\": \"Geri yükleme başarıyla tamamlandı!\",\n    \"restorefailed\": \"Geri yükleme başarısız oldu: \",\n    \"invalidBackup\": \"Geçersiz yedekleme dosyası seçildi.\",\n    \"deleteBookmark\": \"\\\"{title}\\\" yer imini silmek istediğinizden emin misiniz?\",\n    \"UnsupportedBrowser\": \"Yer imleri tarayıcınızda desteklenmiyor.\",\n};\n"
  },
  {
    "path": "locales/uk.js",
    "content": "// Ukrainian\nconst uk = {\n    \"newTabTitle\": \"Нова вкладка\",\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"Відгук\",\n\n    // Section titles\n    \"personalizationSectionTitle\": \"Персоналізація\",\n    \"clockSectionTitle\": \"Годинник\",\n    \"searchSectionTitle\": \"Пошук\",\n    \"weatherSectionTitle\": \"Погода\",\n    \"appearanceSectionTitle\": \"Зовнішній вигляд\",\n    \"settingsSectionTitle\": \"Налаштування\",\n\n    // Shortcuts\n    \"shortcutsText\": \"Ярлики\",\n    \"enableShortcutsText\": \"Показати збережені ярлики\",\n    \"editShortcutsText\": \"Редагувати ярлики\",\n    \"shortcutsInfoText\": \"Оберіть ярлики для відображення\",\n    \"editShortcutsList\": \"Збережені ярлики\",\n    \"editShortcutsListInfo\": \"Ви можете додати нові ярлики, натиснувши значок «+», або редагувати існуючі, натиснувши на назву ярлика або URL-адресу.\",\n    \"adaptiveIconText\": \"Адаптивні іконки\",\n    \"adaptiveIconInfoText\": \"Ярлики будуть адаптуватись до теми\",\n    \"bookmarksText\": \"Закладки\",\n    \"bookmarksInfo\": \"Показати панель закладок\",\n    \"ai_tools_button\": \"AI Інструменти\",\n    \"enable_ai_tools\": \"Показати ярлики для AI інструментів\",\n    \"aiToolsSettingsText\": \"Налаштування AI інструментів\",\n    \"aiToolsSettingsInfo\": \"Керування ярликами AI інструментів\",\n    \"googleAppsMenuText\": \"Google Apps\",\n    \"googleAppsMenuInfo\": \"Показати ярлики для Google Apps\",\n    \"googleAppsHover\": \"Google Apps\",\n\n    // To-do List\n    \"todoListText\": \"Список справ\",\n    \"todoListInfo\": \"Показати щоденний список справ\",\n    \"todoListHover\": \"Список справ\",\n    \"todoPlaceholder\": \"Додати задачу...\",\n\n    // Clock\n    \"hideClockBox\": \"Приховати годинник\",\n    \"hideClockBoxInfo\": \"Приховати годинник і дату\",\n    \"digitalclocktitle\": \"Цифровий годинник\",\n    \"digitalclockinfo\": \"Включити цифровий годинник\",\n    \"timeformattitle\": \"12-годинний формат\",\n    \"timeformatinfo\": \"Включити 12-годинний формат\",\n    \"greetingtitle\": \"Привітання\",\n    \"greetinginfo\": \"Показати привітання нижче власного тексту\",\n\n    // Misc\n    \"userTextTitle\": \"Кастомізувати текст\",\n    \"userTextInfo\": \"Показати змінений текст під годинником\",\n    \"fahrenheitCelsiusCheckbox\": \"Включити відображення в Фаренгейтах\",\n    \"fahrenheitCelsiusText\": \"Оновіть сторінку, щоб застосувати зміни\",\n    \"hideWeatherTitle\": \"Приховати погоду\",\n    \"hideWeatherInfo\": \"Вимкнути віджет погоди\",\n    \"hideWeatherBox\": \"Приховати картку погоди\",\n    \"hideWeatherBoxInfo\": \"Показати тільки температурну картку\",\n    \"minMaxTempText\": \"Мінімальна-Максимальна погода\",\n    \"minMaxTempSubText\": \"Замінити «Відчувається як» на мінімальну та максимальну температуру\",\n\n    // Search\n    \"micIconTitle\": \"Приховати іконку мікрофона\",\n    \"micIconInfo\": \"Якщо голосове введення не працює\",\n    \"hideSearchWith\": \"Приховати пошукові системи\",\n    \"hideSearchWithInfo\": \"Перемикайтеся між пошуковими системами, натискаючи на їхні значки.\",\n    \"motivationalQuotesText\": \"Мотиваційні цитати\",\n    \"motivationalQuotesInfo\": \"Показати цитати під рядком пошуку\",\n    \"search_suggestions_button\": \"Пошукові пропозиції\",\n    \"search_suggestions_text\": \"Увімкнути підказки для пошуку\",\n\n    // Proxy\n    \"useproxytitletext\": \"Обхід проксі-сервера\",\n    \"useproxyText\": \"Якщо пошукові підказки не працюють\",\n    \"ProxyText\": \"CORS Обхід проксі-сервера\",\n    \"ProxySubtext\": \"Додайте власний проксі-сервер для обходу CORS\",\n    \"HostproxyButton\": \"Розмістити власний проксі-сервер\",\n\n    // Location\n    \"useGPS\": \"Використовувати GPS\",\n    \"useGPSInfo\": \"Включити GPS для оновлення локації в реальному часі\",\n    \"UserLocText\": \"Введіть вашу геолокацію\",\n    \"UserLocSubtext\": \"Якщо місце розташування погоди невірне\",\n    \"userLoc\": \"Ваше місто або координати (широта, довгота)\",\n    \"PrivacyPolicy\": \"Політика конфіденційності\",\n\n    // Weather\n    \"WeatherApiText\": \"Введіть ваш WeatherAPI ключ\",\n    \"WeatherApiSubtext\": \"Якщо функція погоди не працює\",\n    \"userAPI\": \"Ваш weatherAPI ключ\",\n    \"LearnMoreButton\": \"Дізнатися більше\",\n    \"saveAPI\": \"Зберегти\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['Неділя', 'Понеділок', 'Вівторок', 'Середа', 'Четвер', 'П\\'ятниця', 'Субота'],\n    \"months\": ['Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"Закладки\",\n    \"bookmarkSortBy\": \"Сортувати за\",\n    \"sortAlphabetical\": \"A-Z\",\n    \"sortTimeAdded\": \"Старі-Нові\",\n    \"bookmarkViewAs\": \"Переглянути як\",\n    \"bookmarkViewGrid\": \"Сітка\",\n    \"bookmarkViewList\": \"Список\",\n    \"bookmarkSearch\": \"Пошук закладки\",\n    \"editBookmarkHeading\": \"Редагувати закладку\",\n    \"editBookmarkName\": \"Назва закладки\",\n    \"editBookmarkURL\": \"Посилання закладки\",\n\n    // New Tab Item\n    \"conditionText\": \"Привіт! Ти як сьогодні?\",\n    \"humidityLevel\": \"Вологість\",\n    \"feelsLike\": \"Відчувається як: \",\n    \"minMaxTemp\": \"Мін ~ Макс\",\n    \"location\": \"Земля\",\n    \"enterBtn\": \"Пошук\",\n    \"searchPlaceholder\": \"Пишіть сюди...\",\n    \"listenPlaceholder\": \"Слухаю...\",\n    \"searchWithHint\": \"Пошук за допомогою\",\n    \"searchOnHint\": \"Пошук\",\n    \"userText\": \"Натисніть для редагування\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"Доброго ранку!\",\n        \"afternoon\": \"Доброго дня!\",\n        \"evening\": \"Доброго вечора!\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"За Замовчуванням\",\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"Зображення\",\n    \"redditEngine\": \"Reddit\",\n    \"wikipediaEngine\": \"Wikipedia\",\n    \"quoraEngine\": \"Quora\",\n\n    // AI Tools\n    \"ai_tools\": \"AI Інструменти\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"grok\": \"Grok\",\n    \"qwen\": \"Qwen\",\n    \"perplexity\": \"Perplexity\",\n    \"deepseek\": \"DeepSeek\",\n    \"metaAI\": \"Meta AI\",\n    \"firefly\": \"Adobe Firefly\",\n    \"aiSettingsIntro\": \"Виберіть, які інструменти штучного інтелекту відображати\",\n    \"resetAISettingsBtn\": \"Скинути\",\n\n    // Theme\n    \"lightThemed\": \"Світла\",\n    \"darkThemed\": \"Темна\",\n    \"systemThemed\": \"Система\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"Завантажити шпалери\",\n    \"rangColor\": \"Оберіть колір\",\n    \"opacityTitle\": \"Прозорість\",\n    \"adjustOpacityDesc\": \"Налаштування прозорості інтерфейсу\",\n    \"backupText\": \"Резервне копіювання\",\n    \"restoreText\": \"Відновити\",\n    \"resetsettings\": \"Скинути налаштування\",\n    \"menuCloseText\": \"Закрити\",\n\n    // Tips\n    \"switchSearchModes\": \"Перемикання режимів пошуку\",\n    \"switchSearchModesInfo\": \"Натисніть «Шукати за допомогою», щоб змінити режим.\",\n    \"adjustZoom\": \"Налаштувати масштаб\",\n    \"adjustZoomInfo\": \"Натисніть Ctrl + \\\"+\\\" чи Ctrl + \\\"-\\\" щоб змінити масштаб\",\n    \"changeBrowserTheme\": \"Змінити тему браузера\",\n    \"chromeThemeInfo\": \"Натисніть три крапки (⋮) > Більше інструментів > Налаштувати Chrome, а потім виберіть колір, який відповідає темі розширення.\",\n    \"edgeThemeInfo\": \"Перейдіть до Налаштування > Зовнішній вигляд, а потім виберіть колір, який відповідає темі розширення.\",\n    \"braveThemeInfo\": \"Відвідати <a href=\\\"https://chromewebstore.google.com/category/themes/\\\" target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\">Chrome Theme Store</a>, завантажте та застосуйте тему, яка відповідає розширенню.\",\n    \"firefoxThemeInfo\": \"Відвідати <a href=\\\"https://addons.mozilla.org/firefox/themes/\\\" target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\">Firefox Themes</a>, завантажте та застосуйте тему, яка відповідає розширенню.\",\n    \"updateFirefoxHomepage\": \"Оновити стартову сторінку\",\n    \"updateFirefoxHomepageInfo\": \"Щоб змінити свою домашню сторінку, як і нову вкладку, відвідайте <a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\">це посилання</a> і дотримуйтесь інструкцій.\",\n    \"dontShowTips\": \"Не показувати знову\",\n\n    // Footer Toast\n    \"footerToastTitle\": \"Бачите банер внизу?\",\n    \"footerToastMessage\": \"Щоб приховати його, клацніть правою кнопкою миші та виберіть «Приховати нижній колонтитул на сторінці нової вкладки».\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"OK\",\n    \"yesText\": \"Так\",\n    \"noText\": \"Ні\",\n    \"agreeText\": \"Я згоден\",\n    \"cancelText\": \"Відмінити\",\n    \"confirmWallpaper\": \"Хочете встановити нове зображення як шпалери на сьогодні?\",\n    \"confirmRestore\": \"Ви впевнені, що хочете скинути налаштування? Цю дію неможливо скасувати.\",\n    \"Nobackgroundset\": \"Наразі фонове зображення не встановлено.\",\n    \"clearbackgroundimage\": \"Ви впевнені, що хочете видалити фонове зображення?\",\n    \"ProxyDisclaimer\": \"Всі функції проксі за замовчуванням вимкнені.\\n\\nЯкщо ви ввімкнете пошукові підказки та проксі-сервер для обходу CORS, настійно рекомендуємо розмістити власний проксі-сервер для підвищення рівня конфіденційності.\\n\\nЗа замовчуванням проксі буде встановлено на https://mynt-proxy.rhythmcorehq.com, це означає, що всі ваші дані будуть проходити через цей сервіс, що може викликати занепокоєння з приводу конфіденційності.\",\n    \"GPSDisclaimer\": \"Ваші дані про місцезнаходження використовуються виключно для надання точних прогнозів погоди. Вони тимчасово зберігаються в браузері і не передаються стороннім сервісам, а також недоступні для нас.\\n\\nУвімкнувши GPS, ви даєте згоду на передачу вашого місцезнаходження розширенню на місцевому рівні.\",\n    \"failedbackup\": \"Не вдалося створити резервну копію: \",\n    \"restorecompleted\": \"Відновлення завершено успішно!\",\n    \"restorefailed\": \"Відновлення не вдалося: \",\n    \"invalidBackup\": \"Вибрано недійсний файл резервної копії.\",\n    \"deleteBookmark\": \"Ви впевнені, що хочете видалити закладку \\\"{title}\\\"?\",\n    \"UnsupportedBrowser\": \"Закладки не підтримуються у вашому браузері.\",\n    \"resetShortcutsPrompt\": \"Усі збережені ярлики будуть видалені та скинуті до заводських налаштувань. Чи хочете ви продовжити?\",\n    \"iconFileTooLargeMessage\": \"Вибраний файл занадто великий: {size} КБ. Будь ласка, використайте файл менше {max} КБ.\",\n    \"iconStorageQuotaMessage\": \"Іконку не вдалося зберегти, оскільки було досягнуто ліміт сховища. Видаліть деякі власні іконки або використовуйте менше зображення.\"\n};\n"
  },
  {
    "path": "locales/ur.js",
    "content": "// Urdu\nconst ur = {\n    // Menu Items\n    \"github\": \"گٹ ہب\",\n\n    // Shortcuts\n    \"shortcutsText\": \"شارٹ کٹس\",\n    \"enableShortcutsText\": \"محفوظ کردہ شارٹ کٹس دکھائیں\",\n    \"editShortcutsText\": \"شارٹ کٹس میں ترمیم کریں\",\n    \"shortcutsInfoText\": \"انتخاب کریں کہ کون سے شارٹ کٹس دکھائے جائیں\",\n    \"editShortcutsList\": \"محفوظ کردہ شارٹ کٹس\",\n    \"editShortcutsListInfo\": \"آپ '+' آئیکن پر کلک کرکے نئے شارٹ کٹس شامل کرسکتے ہیں، یا موجودہ شارٹ کٹس کے نام یا یو آر ایل پر کلک کرکے ترمیم کرسکتے ہیں۔\",\n    \"adaptiveIconText\": \"موافقت پذیر آئیکن کی شکلیں\",\n    \"adaptiveIconInfoText\": \"شارٹ کٹ آئیکنز چھوٹے نظر آئیں گے\",\n    \"ai_tools_button\": \"اے آئی ٹولز\",\n    \"enable_ai_tools\": \"اے آئی ٹولز کے لیے شارٹ کٹس دکھائیں\",\n    //\"googleAppsMenuText\": \"Google Apps\",\n    \"googleAppsMenuInfo\": \"گوگل ایپس کے لیے شارٹ کٹس دکھائیں\",\n    \"todoListText\": \"To Do List\",\n    \"todoListInfo\": \"یومیہ ٹو ڈو لسٹ دکھائیں\",\n\n    // Digital Clock\n    \"digitalclocktitle\": \"ڈیجیٹل گھڑی\",\n    \"digitalclockinfo\": \"ڈیجیٹل گھڑی پر جائیں\",\n    \"timeformattitle\": \"12 گھنٹوں کی شکل\",\n    \"timeformatinfo\": \"12 گھنٹے کی شکل استعمال کریں\",\n    \"greetingtitle\": \"سلام\",\n    \"greetinginfo\": \"کسٹم ٹیکسٹ کے نیچے سلام دکھائیں\",\n\n    // Misc\n    \"userTextTitle\": \"حسب ضرورت ٹیکسٹ\",\n    \"userTextInfo\": \"گھڑی کے نیچے اپنا ٹیکسٹ دکھائیں\",\n    \"fahrenheitCelsiusCheckbox\": \"فارن ہائیٹ پر تبدیل کریں\",\n    \"fahrenheitCelsiusText\": \"تبدیلیوں کے لیے صفحہ ریفریش کریں\",\n    \"micIconTitle\": \"مائیکروفون آئیکن چھپائیں\",\n    \"micIconInfo\": \"اگر آواز سے ٹائپنگ کام نہیں کر رہی\",\n    \"hideSearchWith\": \"سرچ انجن چھپائیں\",\n    \"hideSearchWithInfo\": \"سرچ انجن تبدیل کرنے کے لیے آئیکن پر کلک کریں\",\n    \"search_suggestions_button\": \"سرچ تجاویز\",\n    \"search_suggestions_text\": \"سرچ تجاویز فعال کریں\",\n\n    // Proxy\n    \"useproxytitletext\": \"پراکسی بائی پاس\",\n    \"useproxyText\": \"اگر سرچ تجاویز کام نہیں کر رہیں\",\n    \"ProxyText\": \"CORS بائی پاس پراکسی\",\n    \"ProxySubtext\": \"اپنی CORS بائی پاس پراکسی شامل کریں\",\n    \"HostproxyButton\": \"اپنی پراکسی ہوسٹ کریں\",\n\n    // Location\n    \"UserLocText\": \"اپنا مقام درج کریں\",\n    \"UserLocSubtext\": \"اگر موسم کا مقام درست نہیں ہے\",\n    \"userLoc\": \"آپ کا شہر یا نقاط (عرض البلد، طول البلد)\",\n\n    // Weather\n    \"WeatherApiText\": \"اپنی WeatherAPI کلید درج کریں\",\n    \"WeatherApiSubtext\": \"اگر موسم کی فعالیت کام نہیں کر رہی\",\n    \"userAPI\": \"آپ کی weatherAPI کلید\",\n    \"LearnMoreButton\": \"مزید جانیں\",\n    \"saveAPI\": \"محفوظ کریں\",\n\n    // Body Items\n    // Calendar\n    \"days\": [\"اتوار\", \"پیر\", \"منگل\", \"بدھ\", \"جمعرات\", \"جمعہ\", \"ہفتہ\"],\n    \"months\": [\"جنوری\", \"فروری\", \"مارچ\", \"اپریل\", \"مئی\", \"جون\", \"جولائی\", \"اگست\", \"ستمبر\", \"اکتوبر\", \"نومبر\", \"دسمبر\"],\n\n    // Weather\n    \"humidityLevel\": \"نمی\",\n    \"feelsLike\": \"محسوس\",\n    \"location\": \"زمین\",\n\n    // New Tab Item\n    \"conditionText\": \"ہیلو! آج آپ کیسے ہیں؟\",\n    \"enterBtn\": \"تلاش کریں\",\n    \"searchPlaceholder\": \"یہاں لکھیں...\",\n    \"listenPlaceholder\": \"سن رہا ہے...\",\n    \"todoPlaceholder\": \"کام شامل کریں...\",\n    \"searchWithHint\": \"کے ساتھ تلاش کریں\",\n    \"ai_tools\": \"اے آئی ٹولز\",\n    \"userText\": \"ترمیم کے لیے یہاں کلک کریں\",\n\n    // Greeting\n    \"greeting\": {\n        \"morning\": \"صبح بخیر!\",\n        \"afternoon\": \"دوپہر بخیر!\",\n        \"evening\": \"شام بخیر!\"\n    },\n\n    // Search Engines\n    \"googleEngine\": \"گوگل\",\n    \"duckEngine\": \"ڈَک\",\n    \"bingEngine\": \"بِنگ\",\n    \"braveEngine\": \"بریو\",\n    \"youtubeEngine\": \"یوٹیوب\",\n\n    // AI Tools\n    \"chatGPT\": \"چیٹ جی پی ٹی\",\n    \"gemini\": \"جیمنائی\",\n    \"copilot\": \"کوپائلٹ\",\n    \"perplexity\": \"پرپلکسیٹی\",\n    \"metaAI\": \"میٹا اے آئی\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"وال پیپر اپلوڈ کریں\",\n    \"rangColor\": \"رنگ چنیں\",\n    \"backupText\": \"بیک اپ\",\n    \"restoreText\": \"بحال کریں\",\n    \"resetsettings\": \"ترتیبات ری سیٹ کریں\",\n    \"menuCloseText\": \"بند کریں\",\n\n    // Dialog boxes (alerts)\n    \"confirmWallpaper\": \"کیا آپ آج کے لیے ایک نئی تصویر کو وال پیپر کے طور پر سیٹ کرنا چاہتے ہیں؟\",\n    \"confirmRestore\": \"کیا آپ واقعی اپنی ترتیبات ری سیٹ کرنا چاہتے ہیں؟ یہ عمل واپس نہیں ہو سکے گا۔\",\n    \"Nobackgroundset\": \"اس وقت کوئی پس منظر تصویر سیٹ نہیں ہے۔\",\n    \"clearbackgroundimage\": \"کیا آپ واقعی پس منظر کی تصویر کو ہٹانا چاہتے ہیں؟\",\n    \"ProxyDisclaimer\": \"تمام پراکسی فیچرز ڈیفالٹ طور پر بند ہیں۔\\n\\nاگر آپ سرچ تجاویز اور CORS بائی پاس پراکسی کو فعال کرتے ہیں تو بہتر رازداری کے لیے اپنی پراکسی کو ہوسٹ کرنا سختی سے مشورہ دیا جاتا ہے۔\\n\\nڈیفالٹ طور پر پراکسی https://mynt-proxy.rhythmcorehq.com پر سیٹ ہوگی، اس کا مطلب ہے کہ آپ کا سارا ڈیٹا اس سروس کے ذریعے گزرے گا، جو رازداری کے مسائل پیدا کر سکتا ہے۔\",\n    \"failedbackup\": \"بیک اپ ناکام ہوگیا: \",\n    \"restorecompleted\": \"بحالی کامیابی سے مکمل ہوگئی!\",\n    \"restorefailed\": \"بحالی ناکام ہوگئی: \"\n};\n"
  },
  {
    "path": "locales/uz.js",
    "content": "// Uzbek\nconst uz = {\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"Fikr-mulohaza\",\n\n    // Section titles\n    \"personalizationSectionTitle\": \"Shaxsiylashtirish\",\n    \"clockSectionTitle\": \"Soat\",\n    \"searchSectionTitle\": \"Qidiruv\",\n    \"weatherSectionTitle\": \"Ob-havo\",\n    \"appearanceSectionTitle\": \"Tashqi ko'rinish\",\n    \"settingsSectionTitle\": \"Sozlamalar\",\n\n    // Shortcuts\n    \"shortcutsText\": \"Yorliqlar\",\n    \"enableShortcutsText\": \"Saqlangan yorliqlarni ko'rsatish\",\n    \"editShortcutsText\": \"Yorliqlarni tahrirlash\",\n    \"shortcutsInfoText\": \"Qaysi yorliqlar ko'rsatilishini tanlang\",\n    \"editShortcutsList\": \"Saqlangan yorliqlar\",\n    \"editShortcutsListInfo\": \"\\\"+\\\" tugmasi bilan yangi yorliq qo'shish yoki mavjudlarini nomi yoki URL orqali tahrirlash mumkin.\",\n    \"adaptiveIconText\": \"Moslashuvchan ikonlar\",\n    \"adaptiveIconInfoText\": \"Yorliq ikonlar mavzuga moslashadi\",\n    \"bookmarksText\": \"Xatcho'plar\",\n    \"bookmarksInfo\": \"Xatcho'plar panelini ko'rsatish\",\n    \"ai_tools_button\": \"AI vositalari\",\n    \"enable_ai_tools\": \"AI vositalari uchun yorliqlarni ko'rsatish\",\n    \"aiToolsSettingsText\": \"AI sozlamalari\",\n    \"aiToolsSettingsInfo\": \"AI vositalari yorliqlarini boshqarish\",\n    \"googleAppsMenuText\": \"Google ilovalari\",\n    \"googleAppsMenuInfo\": \"Google ilovalari uchun yorliqlarni ko'rsatish\",\n    \"googleAppsHover\": \"Google ilovalari\",\n\n    // To-do List\n    \"todoListText\": \"Vazifalar\",\n    \"todoListInfo\": \"Kundalik vazifalar ro'yxatini ko'rsatish\",\n    \"todoListHover\": \"Vazifalar\",\n    \"todoPlaceholder\": \"Vazifa qo'shish...\",\n\n\n    // Clock\n    \"hideClockBox\": \"Soatni yashirish\",\n    \"hideClockBoxInfo\": \"Soat va sanani yashirish\",\n    \"digitalclocktitle\": \"Raqamli soat\",\n    \"digitalclockinfo\": \"Raqamli soatga o'tish\",\n    \"timeformattitle\": \"12 soatlik format\",\n    \"timeformatinfo\": \"12 soatlik vaqt formatini ishlatish\",\n    \"greetingtitle\": \"Salomlashuv\",\n    \"greetinginfo\": \"Maxsus matn ostida salomlashuvni ko'rsatish\",\n\n    // Misc\n    \"userTextTitle\": \"Maxsus matn\",\n    \"userTextInfo\": \"Soat ostida maxsus matnni ko'rsatish\",\n    \"fahrenheitCelsiusCheckbox\": \"Farengeytga o'tish\",\n    \"fahrenheitCelsiusText\": \"O'zgarishlar uchun sahifani yangilang\",\n    \"hideWeatherTitle\": \"Ob-havoni yashirish\",\n    \"hideWeatherInfo\": \"Ob-havo vidjetlarini o'chirish\",\n    \"hideWeatherBox\": \"Ob-havo kartasini yashirish\",\n    \"hideWeatherBoxInfo\": \"Faqat harorat ikonini ko'rsatish\",\n    \"minMaxTempText\": \"Min-maks harorat\",\n    \"minMaxTempSubText\": \"\\\"His etiladi\\\" o'rniga minimal va maksimal haroratni ko'rsatish\",\n\n    // Search\n    \"micIconTitle\": \"Mikrofon ikonini yashirish\",\n    \"micIconInfo\": \"Agar ovozli yozish ishlamasa\",\n    \"hideSearchWith\": \"Qidiruv tizimlarini yashirish\", \n    \"hideSearchWithInfo\": \"Ikoni orqali qidiruv tizimlari o'zgartirish mumkin\",\n    \"motivationalQuotesText\": \"Ruhlantiruvchi iqtiboslar\",\n    \"motivationalQuotesInfo\": \"Qidiruv satri ostida iqtiboslarni ko'rsatish\",\n    \"search_suggestions_button\": \"Qidiruv tavsiyalari\",\n    \"search_suggestions_text\": \"Qidiruv tavsiyalarini yoqish\",\n\n    // Proxy\n    \"useproxytitletext\": \"Proksi orqali\",\n    \"useproxyText\": \"Qidiruv tavsiyalari ishlamasa\",\n    \"ProxyText\": \"CORS proksi orqali\",\n    \"ProxySubtext\": \"O'zingizning CORS proksingizni qo'shing\",\n    \"HostproxyButton\": \"O'zingizning proksingizni ishlatish\",\n\n    // Location\n    \"useGPS\": \"GPSdan foydalanish\",\n    \"useGPSInfo\": \"Jonli lokatsiya yangilanishlari uchun GPSni yoqish\",\n    \"UserLocText\": \"Lokatsiyani kiriting\",\n    \"UserLocSubtext\": \"Agar ob-havo lokatsiyasi noto'g'ri bo'lsa\",\n    \"userLoc\": \"Shaharingiz yoki koordinatalar (kenglik, uzunlik)\",\n    \"PrivacyPolicy\": \"Maxfiylik siyosati\",\n\n    // Weather\n    \"WeatherApiText\": \"WeatherAPI kalitini kiritish\",\n    \"WeatherApiSubtext\": \"Agar ob-havo funksiyasi ishlamasa\",\n    \"userAPI\": \"WeatherAPI kalitingiz\",\n    \"LearnMoreButton\": \"Batafsil ma'lumot\",\n    \"saveAPI\": \"Saqlash\",\n\n    // Body Items\n    // Calendar\n    \"days\": [\"Yakshanba\", \"Dushanba\", \"Seshanba\", \"Chorshanba\", \"Payshanba\", \"Juma\", \"Shanba\"],\n    \"months\": [\"Yanvar\", \"Fevral\", \"Mart\", \"Aprel\", \"May\", \"Iyun\", \"Iyul\", \"Avgust\", \"Sentabr\", \"Oktabr\", \"Noyabr\", \"Dekabr\"],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"Xatcho'plar\",\n    \"bookmarkSortBy\": \"Saralash\",\n    \"sortAlphabetical\": \"A-Z\",\n    \"sortTimeAdded\": \"Eski-Yangi\",\n    \"bookmarkViewAs\": \"Ko'rinish usuli\",\n    \"bookmarkViewGrid\": \"Katakli\",\n    \"bookmarkViewList\": \"Ro'yxatli\",\n    \"bookmarkSearch\": \"Xatcho'p qidirish\",\n    \"editBookmarkHeading\": \"Xatcho'pni tahrirlash\",\n    \"editBookmarkName\": \"Xatcho'p nomi\",\n    \"editBookmarkURL\": \"Xatcho'p URL\",\n\n    // New Tab Item\n    \"conditionText\": \"Salom! Qalaysiz?\",\n    \"humidityLevel\": \"Namlik\",\n    \"feelsLike\": \"Seziladi\",\n    \"minMaxTemp\": \"Min ~ Maks\",\n    \"location\": \"Yer\",\n    \"enterBtn\": \"Qidirish\",\n    \"searchPlaceholder\": \"Shu yerga yozing...\",\n    \"listenPlaceholder\": \"Tinglanmoqda...\",\n    \"searchWithHint\": \"Qidiruv tizimi\",\n    \"searchOnHint\": \"Qayerda qidirish\",\n    \"userText\": \"Tahrirlash uchun bosing\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"Xayrli tong!\",\n        \"afternoon\": \"Xayrli kun!\",\n        \"evening\": \"Xayrli kech!\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"Standart\",\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"Rasmlar\",\n    \"redditEngine\": \"Reddit\",\n    \"wikipediaEngine\": \"Wikipedia\",\n    \"quoraEngine\": \"Quora\",\n\n    // AI Tools\n    \"ai_tools\": \"AI Vositalari\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"grok\": \"Grok\",\n    \"qwen\": \"Qwen\",\n    \"perplexity\": \"Perplexity\",\n    \"deepseek\": \"DeepSeek\",\n    \"metaAI\": \"Meta AI\",\n    \"firefly\": \"Adobe Firefly\",\n    \"aiSettingsIntro\": \"Ko'rsatiladigan AI vositalarini tanlang\",\n    \"resetAISettingsBtn\": \"Qayta tiklash\",\n\n    // Theme\n    \"lightThemed\": \"Yorug'\",\n    \"darkThemed\": \"Qorong'u\",\n    \"systemThemed\": \"Tizim bo'yicha\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"Fon rasmini yuklash\",\n    \"rangColor\": \"Rang tanlang\",\n    \"opacityTitle\": \"Shaffoflik\",\n    \"adjustOpacityDesc\": \"Interfeys shaffofligini sozlash\",\n    \"backupText\": \"Zaxiralash\",\n    \"restoreText\": \"Qayta tiklash\",\n    \"resetsettings\": \"Sozlamalarni tiklash\",\n    \"menuCloseText\": \"Yopish\",\n\n    // Tips\n    \"switchSearchModes\": \"Qidiruv rejimini almashtirish\",\n    \"switchSearchModesInfo\": \"Rejimni o'zgartirish uchun 'Qidiruv tizimi'ni bosing.\",\n    \"adjustZoom\": \"Masshtabni sozlash\",\n    \"adjustZoomInfo\": \"Masshtabni o'zgartirish uchun Ctrl + \\\"+\\\" yoki Ctrl + \\\"-\\\" tugmalarini bosing.\",\n    \"changeBrowserTheme\": \"Brauzer mavzusini o'zgartirish\",\n    \"chromeThemeInfo\": \"Uch nuqta (⋮) > Qo'shimcha vositalar > Chrome'ni moslash bo'limiga o'ting va kengaytma mavzusiga mos rangni tanlang.\",\n    \"edgeThemeInfo\": \"Sozlamalar > Tashqi ko'rinish bo'limiga o'ting va kengaytma mavzusiga mos rangni tanlang.\",\n    \"braveThemeInfo\": \"<a href=\\\"https://chromewebstore.google.com/category/themes/\\\" target=\\\"_blank\\\">Chrome Theme Store</a> sahifasiga o'ting, kengaytmaga mos mavzuni yuklab o'rnating.\",\n    \"firefoxThemeInfo\": \"<a href=\\\"https://addons.mozilla.org/firefox/themes/\\\" target=\\\"_blank\\\">Firefox Themes</a> sahifasiga o'ting, mos mavzuni yuklab o'rnating.\",\n    \"updateFirefoxHomepage\": \"Bosh sahifani yangilash\",\n    \"updateFirefoxHomepageInfo\": \"Yangi varaq bilan bir xil bosh sahifa qilish uchun <a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\">ushbu havola</a> orqali o'ting va ko'rsatmalarga amal qiling.\",\n    \"dontShowTips\": \"Qayta ko'rsatilmasin\",\n\n    // Footer Toast\n    \"footerToastTitle\": \"Pastda banner ko'ryapsizmi?\",\n    \"footerToastMessage\": \"Uni yashirish uchun ustiga o'ng tugma bilan bosib, “Yangi varaqda pastki panelni yashirish”ni tanlang.\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"OK\",\n    \"yesText\": \"Ha\",\n    \"noText\": \"Yo'q\",\n    \"agreeText\": \"Roziman\",\n    \"cancelText\": \"Bekor qilish\",\n    \"confirmWallpaper\": \"Bugun uchun yangi rasmni fon sifatida o'rnatmoqchimisiz?\",\n    \"confirmRestore\": \"Sozlamalarni tiklashni xohlaysizmi? Bu amalni bekor qilib bo'lmaydi.\",\n    \"Nobackgroundset\": \"Hozircha fon rasmi o'rnatilmagan.\",\n    \"clearbackgroundimage\": \"Fon rasmini olib tashlamoqchimisiz?\",\n    \"ProxyDisclaimer\": \"Proksi funksiyalari standart holatda o'chirilgan.\\n\\nAgar qidiruv tavsiyalari va CORS proksini yoqsangiz, maxfiylikni oshirish uchun o'zingizning proksingizdan foydalanish tavsiya etiladi.\\n\\nStandart holatda proksi https://mynt-proxy.rhythmcorehq.com manziliga ulanadi. Bu holatda barcha ma'lumotlaringiz ushbu xizmat orqali o'tadi va maxfiylikka ta'sir qilishi mumkin.\",\n    \"GPSDisclaimer\": \"Lokatsiya ma'lumotlaringiz faqat aniq ob-havo ma'lumotlarini taqdim etish uchun ishlatiladi. U vaqtincha brauzer ichida saqlanadi va uchinchi tomon xizmatlariga uzatilmaydi.\\n\\nGPS'ni yoqish orqali lokatsiyangizni kengaytma bilan mahalliy tarzda bo'lishishga rozilik bildirasiz.\",\n    \"failedbackup\": \"Zaxiralash amalga oshmadi: \",\n    \"restorecompleted\": \"Tiklash muvaffaqiyatli yakunlandi!\",\n    \"restorefailed\": \"Tiklash amalga oshmadi: \",\n    \"invalidBackup\": \"Noto'g'ri zaxira fayli tanlandi.\",\n\n    \"deleteBookmark\": \"\\\"{title}\\\" xatcho'pini o'chirmoqchimisiz?\",\n    \"UnsupportedBrowser\": \"Xatcho'plar brauzeringizda qo'llab-quvvatlanmaydi.\",\n    \"resetShortcutsPrompt\": \"Barcha saqlangan yorliqlar o'chiriladi va standart holatga qaytariladi. Davom etilsinmi?\"\n};\n"
  },
  {
    "path": "locales/vi.js",
    "content": "// Vietnamese\nconst vi = {\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"Phản hồi\",\n    \"resetsettings\": \"Đặt lại cài đặt gốc\",\n    \"menuCloseText\": \"Đóng\",\n\n    // Shortcuts\n    \"shortcutsText\": \"Phím tắt\",\n    \"enableShortcutsText\": \"Bật/tắt phím tắt\",\n    \"editShortcutsText\": \"Chỉnh sửa Phím tắt\",\n    \"shortcutsInfoText\": \"Chọn các phím tắt muốn hiển thị\",\n    \"editShortcutsList\": \"Chỉnh sửa danh sách Phím tắt\",\n    \"editShortcutsListInfo\": \"Bạn có thể thêm phím tắt mới bằng cách nhấp vào biểu tượng \\\"+\\\" hoặc chỉnh sửa phím tắt hiện có bằng cách nhấp vào tên phím tắt hoặc URL.\",\n    \"adaptiveIconText\": \"Hình dạng biểu tượng Thích ứng\",\n    \"adaptiveIconInfoText\": \"Biểu tượng phím tắt sẽ luôn là hình tròn\",\n    \"bookmarksText\": \"Dấu trang\",\n    \"bookmarksInfo\": \"Hiển thị thanh bên dấu trang\",\n    \"ai_tools_button\": \"Công cụ AI\",\n    \"enable_ai_tools\": \"Bật/tắt các phím tắt công cụ AI\",\n    \"googleAppsMenuText\": \"Ứng dụng Google\",\n    \"googleAppsMenuInfo\": \"Hiển thị các phím tắt cho Ứng dụng Google\",\n    \"googleAppsHover\": \"Ứng dụng Google\",\n\n    // To-do List\n    \"todoListText\": \"Danh sách việc cần làm\",\n    \"todoListInfo\": \"Hiển thị danh sách việc cần làm hàng ngày\",\n    \"todoListHover\": \"Việc cần làm\",\n    \"todoPlaceholder\": \"Thêm nhiệm vụ...\",\n\n    // Digital Clock\n    \"digitalclocktitle\": \"Đồng hồ kỹ thuật số\",\n    \"digitalclockinfo\": \"Bật/tắt đồng hồ Kỹ thuật số\",\n    \"timeformattitle\": \"Sử dụng định dạng 12 giờ\",\n    \"timeformatinfo\": \"Sử dụng định dạng thời gian 12 giờ\",\n    \"greetingtitle\": \"Lời chào\",\n    \"greetinginfo\": \"Hiển thị lời chào dưới văn bản tùy chỉnh\",\n\n    // Misc\n    \"userTextTitle\": \"Văn bản tùy chỉnh\",\n    \"userTextInfo\": \"Hiển thị văn bản tùy chỉnh dưới đồng hồ\",\n    \"fahrenheitCelsiusCheckbox\": \"Chuyển sang Fahrenheit\",\n    \"fahrenheitCelsiusText\": \"Tải lại trang để thấy cập nhật\",\n    \"micIconTitle\": \"Ẩn biểu tượng mic\",\n    \"micIconInfo\": \"Nếu gõ bằng giọng nói không hoạt động\",\n    \"hideSearchWith\": \"Ẩn công cụ tìm kiếm\",\n    \"hideSearchWithInfo\": \"Chuyển đổi giữa các công cụ tìm kiếm bằng cách nhấp vào biểu tượng của nó\",\n    \"search_suggestions_button\": \"Gợi ý tìm kiếm\",\n    \"search_suggestions_text\": \"Bật/tắt gợi ý tìm kiếm\",\n\n    // Proxy\n    \"useproxytitletext\": \"Bỏ qua Proxy\",\n    \"useproxyText\": \"Nếu gợi ý tìm kiếm không hoạt động\",\n    \"ProxyText\": \"Proxy bỏ qua CORS\",\n    \"ProxySubtext\": \"Thiết lập proxy bỏ qua CORS của bạn.\",\n    \"HostproxyButton\": \"Lưu trữ proxy của riêng bạn\",\n\n    // Location\n    \"UserLocText\": \"Nhập vị trí của bạn\",\n    \"UserLocSubtext\": \"Nếu vị trí thời tiết không chính xác\",\n    \"userLoc\": \"Thành phố hoặc tọa độ của bạn (Vĩ độ, Kinh độ)\",\n    \"useGPS\": \"Sử dụng GPS\",\n\n    // Weather\n    \"WeatherApiText\": \"Nhập khóa WeatherAPI của bạn\",\n    \"WeatherApiSubtext\": \"Nếu tính năng thời tiết không hoạt động\",\n    \"userAPI\": \"Khóa WeatherAPI của bạn\",\n    \"LearnMoreButton\": \"Tìm hiểu Thêm\",\n    \"saveAPI\": \"Lưu\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'],\n    \"months\": ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu', 'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"Dấu trang\",\n    \"bookmarkViewAs\": \"Dạng xem\",\n    \"bookmarkViewGrid\": \"Lưới\",\n    \"bookmarkViewList\": \"Danh sách\",\n    \"bookmarkSearch\": \"Tìm dấu trang\",\n\n    // New Tab Item\n    \"conditionText\": \"Xin chào! Bạn cảm thấy thế nào hôm nay?\",\n    \"humidityLevel\": \"Độ ẩm\",\n    \"feelsLike\": \"Cảm giác như\",\n    \"location\": \"Trái Đất\",\n    \"enterBtn\": \"Tìm kiếm\",\n    \"searchPlaceholder\": \"Nhập câu hỏi của bạn...\",\n    \"listenPlaceholder\": \"Đang nghe...\",\n    \"searchWithHint\": \"Tìm kiếm Với\",\n    \"userText\": \"Nhấp vào đây để chỉnh sửa\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"Chào buổi sáng!\",\n        \"afternoon\": \"Chào buổi chiều!\",\n        \"evening\": \"Chào buổi tối!\"\n    },\n\n    // Search Engines\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"Hình ảnh\",\n\n    // AI Tools\n    \"ai_tools\": \"Công cụ AI\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"perplexity\": \"Perplexity\",\n    \"metaAI\": \"Meta AI\",\n\n    // Wallpaper and misc\n    \"uploadWallpaperText\": \"Tải hình nền\",\n    \"backupText\": \"Sao lưu\",\n    \"restoreText\": \"Khôi phục\",\n    \"rangColor\": \"Chọn màu\",\n\n    // Dialog boxes (alerts)\n    \"confirmWallpaper\": \"Bạn có muốn đặt một hình ảnh mới làm hình nền cho ngày không?\",\n    \"confirmRestore\": \"Bạn có chắc chắn muốn đặt lại cài đặt của mình không? Hành động này không thể hoàn tác.\",\n    \"Nobackgroundset\": \"Hiện tại chưa có hình nền nào được thiết lập.\",\n    \"clearbackgroundimage\": \"Bạn có chắc chắn muốn xóa hình nền không?\",\n    \"ProxyDisclaimer\": \"Theo mặc định, mọi tính năng của proxy đều bị tắt.\\n\\nNếu bạn bật gợi ý tìm kiếm và bỏ qua proxy CORS, chúng tôi khuyên bạn nên lưu trữ proxy riêng để tăng cường quyền riêng tư.\\n\\nTheo mặc định, proxy sẽ được đặt thành https://mynt-proxy.rhythmcorehq.com, nghĩa là mọi dữ liệu của bạn sẽ đi qua dịch vụ này, điều này có thể gây ra lo ngại về quyền riêng tư.\",\n    \"failedbackup\": \"Sao lưu không thành công: \",\n    \"restorecompleted\": \"Đã khôi phục thành công!\",\n    \"restorefailed\": \"Khôi phục không thành công: \",\n    \"invalidBackup\": \"Tệp sao lưu không hợp lệ\",\n    \"deleteBookmark\": \"Bạn có chắc chắn muốn xóa dấu trang \\\"{title}\\\" không?\",\n    \"UnsupportedBrowser\": \"Dấu trang không được hỗ trợ trong trình duyệt của bạn\",\n};\n"
  },
  {
    "path": "locales/zh.js",
    "content": "// Chinese (Simplified)\nconst zh = {\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"反馈\",\n    \"resetsettings\": \"重置设置\",\n    \"menuCloseText\": \"关闭\",\n\n    // Shortcuts\n    \"shortcutsText\": \"快捷方式\",\n    \"enableShortcutsText\": \"显示已保存的快捷方式\",\n    \"editShortcutsText\": \"编辑快捷方式\",\n    \"shortcutsInfoText\": \"选择要显示的快捷方式\",\n    \"editShortcutsList\": \"已保存的快捷方式\",\n    \"editShortcutsListInfo\": \"点击“+”图标添加新快捷方式，或点击名称/URL编辑现有快捷方式\",\n    \"adaptiveIconText\": \"自适应图标\",\n    \"adaptiveIconInfoText\": \"快捷方式图标随主题变化\",\n    \"bookmarksText\": \"书签\",\n    \"bookmarksInfo\": \"显示书签侧边栏\",\n    \"ai_tools_button\": \"AI工具\",\n    \"enable_ai_tools\": \"显示AI工具快捷方式\",\n    \"aiToolsSettingsText\": \"AI工具设置\",\n    \"aiToolsSettingsInfo\": \"管理AI工具快捷方式\",\n    \"googleAppsMenuText\": \"谷歌应用\",\n    \"googleAppsMenuInfo\": \"显示谷歌应用快捷方式\",\n    \"googleAppsHover\": \"谷歌应用\",\n\n    // To-do List\n    \"todoListText\": \"待办事项\",\n    \"todoListInfo\": \"显示每日待办清单\",\n    \"todoListHover\": \"待办清单\",\n    \"todoPlaceholder\": \"添加任务...\",\n\n    // Clock\n    \"hideClockBox\": \"隐藏时钟\",\n    \"hideClockBoxInfo\": \"隐藏时钟和日期\",\n    \"digitalclocktitle\": \"数字时钟\",\n    \"digitalclockinfo\": \"切换为数字时钟\",\n    \"timeformattitle\": \"12小时制\",\n    \"timeformatinfo\": \"使用12小时时间格式\",\n    \"greetingtitle\": \"问候语\",\n    \"greetinginfo\": \"在自定义文本下方显示问候语\",\n\n    // Misc\n    \"userTextTitle\": \"自定义文本\",\n    \"userTextInfo\": \"在时钟下方显示自定义文本\",\n    \"fahrenheitCelsiusCheckbox\": \"切换为华氏度\",\n    \"fahrenheitCelsiusText\": \"刷新页面以应用更改\",\n    \"hideWeatherTitle\": \"隐藏天气\",\n    \"hideWeatherInfo\": \"禁用天气组件\",\n    \"hideWeatherBox\": \"隐藏天气卡片\",\n    \"hideWeatherBoxInfo\": \"仅显示温度标签\",\n    \"minMaxTempText\": \"最低~最高温度\",\n    \"minMaxTempSubText\": \"用最低和最高温度替换“体感温度”\",\n    \"micIconTitle\": \"隐藏麦克风图标\",\n    \"micIconInfo\": \"若语音输入无法使用\",\n    \"hideSearchWith\": \"隐藏搜索引擎\",\n    \"hideSearchWithInfo\": \"点击图标切换搜索引擎\",\n    \"motivationalQuotesText\": \"励志名言\",\n    \"motivationalQuotesInfo\": \"在搜索栏下方显示名言\",\n    \"search_suggestions_button\": \"搜索建议\",\n    \"search_suggestions_text\": \"启用搜索建议\",\n\n    // Proxy\n    \"useproxytitletext\": \"代理绕过\",\n    \"useproxyText\": \"若搜索建议无法工作\",\n    \"ProxyText\": \"CORS绕过代理\",\n    \"ProxySubtext\": \"添加您的CORS绕过代理\",\n    \"HostproxyButton\": \"自托管代理\",\n\n    // Location\n    \"useGPS\": \"使用GPS\",\n    \"useGPSInfo\": \"启用GPS获取实时位置更新\",\n    \"UserLocText\": \"输入您的位置\",\n    \"UserLocSubtext\": \"若天气位置不准确\",\n    \"userLoc\": \"城市或坐标（纬度, 经度）\",\n    \"PrivacyPolicy\": \"隐私政策\",\n\n    // Weather\n    \"WeatherApiText\": \"输入WeatherAPI密钥\",\n    \"WeatherApiSubtext\": \"若天气功能无法工作\",\n    \"userAPI\": \"您的WeatherAPI密钥\",\n    \"LearnMoreButton\": \"了解更多\",\n    \"saveAPI\": \"保存\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\n    \"months\": ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"书签\",\n    \"bookmarkSortBy\": \"排序方式\",\n    \"sortAlphabetical\": \"A-Z\",\n    \"sortTimeAdded\": \"旧-新\",\n    \"bookmarkViewAs\": \"查看方式\",\n    \"bookmarkViewGrid\": \"网格\",\n    \"bookmarkViewList\": \"列表\",\n    \"bookmarkSearch\": \"搜索书签\",\n    \"editBookmarkHeading\": \"编辑书签\",\n    \"editBookmarkName\": \"书签名称\",\n    \"editBookmarkURL\": \"书签URL\",\n\n    // New Tab Item\n    \"conditionText\": \"你好！今天过得如何？\",\n    \"humidityLevel\": \"湿度\",\n    \"feelsLike\": \"体感\",\n    \"minMaxTemp\": \"最低 ~ 最高\",\n    \"location\": \"地球\",\n    \"enterBtn\": \"搜索\",\n    \"searchPlaceholder\": \"输入内容...\",\n    \"listenPlaceholder\": \"聆听中...\",\n    \"searchWithHint\": \"搜索方式\",\n    \"searchOnHint\": \"搜索平台\",\n    \"userText\": \"点击编辑\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"早上好！\",\n        \"afternoon\": \"下午好！\",\n        \"evening\": \"晚上好！\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"默认\",\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"图片\",\n    \"redditEngine\": \"Reddit\",\n    \"wikipediaEngine\": \"维基百科\",\n    \"quoraEngine\": \"Quora\",\n\n    // AI Tools\n    \"ai_tools\": \"AI工具\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"grok\": \"Grok\",\n    \"qwen\": \"Qwen\",\n    \"perplexity\": \"Perplexity\",\n    \"deepseek\": \"DeepSeek\",\n    \"metaAI\": \"Meta AI\",\n    \"firefly\": \"Adobe Firefly\",\n    \"aiSettingsIntro\": \"选择要显示的AI工具\",\n    \"resetAISettingsBtn\": \"重置\",\n\n    // Theme\n    \"enableDarkMode\": \"深色模式（实验性）\",\n    \"enableDarkModeInfo\": \"启用深色主题\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"上传壁纸\",\n    \"rangColor\": \"选择颜色\",\n    \"opacityTitle\": \"透明度\",\n    \"adjustOpacityDesc\": \"调整界面透明度\",\n    \"backupText\": \"备份\",\n    \"restoreText\": \"恢复\",\n\n    // Tips\n    \"switchSearchModes\": \"切换搜索模式\",\n    \"switchSearchModesInfo\": \"点击“搜索方式”切换模式\",\n    \"adjustZoom\": \"调整缩放\",\n    \"adjustZoomInfo\": \"按 Ctrl + \\\"+\\\" 或 Ctrl + \\\"-\\\" 调整\",\n    \"changeBrowserTheme\": \"更改浏览器主题\",\n    \"chromeThemeInfo\": \"点击 ⋮ > 更多工具 > 自定义 Chrome，选择匹配主题的颜色\",\n    \"edgeThemeInfo\": \"前往 设置 > 外观，选择匹配主题的颜色\",\n    \"braveThemeInfo\": \"访问 <a href=\\\"https://chromewebstore.google.com/category/themes/\\\" target=\\\"_blank\\\">Chrome主题商店</a>下载匹配主题\",\n    \"firefoxThemeInfo\": \"访问 <a href=\\\"https://addons.mozilla.org/firefox/themes/\\\" target=\\\"_blank\\\">Firefox主题</a>下载匹配主题\",\n    \"updateFirefoxHomepage\": \"更新主页\",\n    \"updateFirefoxHomepageInfo\": \"<a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\">点击此处</a>查看主页设置指南\",\n    \"dontShowTips\": \"不再显示\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"确定\",\n    \"yesText\": \"是\",\n    \"noText\": \"否\",\n    \"agreeText\": \"我同意\",\n    \"cancelText\": \"取消\",\n    \"confirmWallpaper\": \"要将此图片设为今日壁纸吗？\",\n    \"confirmRestore\": \"确定要重置设置吗？此操作不可撤销\",\n    \"Nobackgroundset\": \"当前未设置背景图片\",\n    \"clearbackgroundimage\": \"确定要清除背景图片吗？\",\n    \"ProxyDisclaimer\": \"所有代理功能默认关闭\\n\\n启用搜索建议和CORS代理时，建议自建代理以保护隐私\\n\\n默认代理为 https://mynt-proxy.rhythmcorehq.com，您的数据将经过该服务\",\n    \"GPSDisclaimer\": \"位置数据仅用于天气功能\\n临时存储在浏览器中，不会共享给第三方\\n启用GPS即表示同意本地位置共享\",\n    \"failedbackup\": \"备份失败：\",\n    \"restorecompleted\": \"恢复成功！\",\n    \"restorefailed\": \"恢复失败：\",\n    \"invalidBackup\": \"无效的备份文件\",\n    \"deleteBookmark\": \"确定要删除书签“{title}”吗？\",\n    \"UnsupportedBrowser\": \"您的浏览器不支持书签功能\",\n    \"resetShortcutsPrompt\": \"所有快捷方式将重置为默认值，是否继续？\"\n};\n"
  },
  {
    "path": "locales/zh_TW.js",
    "content": "// Chinese (Traditional)\nconst zh_TW = {\n    // Menu Items\n    \"github\": \"GitHub\",\n    \"feedback\": \"意見回饋\",\n\n    // Shortcuts\n    \"shortcutsText\": \"捷徑\",\n    \"enableShortcutsText\": \"顯示已儲存的捷徑\",\n    \"editShortcutsText\": \"編輯捷徑\",\n    \"shortcutsInfoText\": \"選擇要顯示的捷徑\",\n    \"editShortcutsList\": \"已儲存的捷徑\",\n    \"editShortcutsListInfo\": \"您可以透過點擊“+”圖示新增新的捷徑，或透過點擊捷徑名稱或 URL 來編輯現有捷徑\",\n    \"adaptiveIconText\": \"自適應圖示形狀\",\n    \"adaptiveIconInfoText\": \"捷徑圖示將依主題色顯示，且以較小尺寸呈現\",\n    \"bookmarksText\": \"書籤\",\n    \"bookmarksInfo\": \"顯示書籤側邊欄\",\n    \"ai_tools_button\": \"AI 工具\",\n    \"enable_ai_tools\": \"顯示 AI 工具捷徑\",\n    \"aiToolsSettingsText\": \"AI 工具設定\",\n    \"aiToolsSettingsInfo\": \"管理 AI 工具捷徑\",\n    \"googleAppsMenuText\": \"Google 應用程式\",\n    \"googleAppsMenuInfo\": \"顯示 Google 應用程式的捷徑\",\n    \"googleAppsHover\": \"Google 應用程式\",\n\n    // To-do List\n    \"todoListText\": \"待辦清單\",\n    \"todoListInfo\": \"顯示每日待辦清單\",\n    \"todoListHover\": \"待辦清單\",\n    \"todoPlaceholder\": \"新增任務...\",\n\n    // Clock\n    \"hideClockBox\": \"隱藏時鐘\",\n    \"hideClockBoxInfo\": \"顯示或隱藏時鐘和日期\",\n    \"digitalclocktitle\": \"數位時鐘\",\n    \"digitalclockinfo\": \"切換到數位時鐘\",\n    \"timeformattitle\": \"12 小時制\",\n    \"timeformatinfo\": \"使用 12 小時制時間格式\",\n    \"greetingtitle\": \"問候語\",\n    \"greetinginfo\": \"在自訂文字下顯示問候語\",\n\n    // Misc\n    \"userTextTitle\": \"自訂文字\",\n    \"userTextInfo\": \"在時鐘下方顯示自訂文字\",\n    \"fahrenheitCelsiusCheckbox\": \"切換到華氏溫度\",\n    \"fahrenheitCelsiusText\": \"重新整理頁面以套用變更\",\n    \"hideWeatherTitle\": \"隱藏天氣\",\n    \"hideWeatherInfo\": \"停用天氣小工具\",\n    \"hideWeatherBox\": \"隱藏天氣卡片\",\n    \"hideWeatherBoxInfo\": \"只在裝置上顯示溫度\",\n    \"minMaxTempText\": \"最低-最高溫度\",\n    \"minMaxTempSubText\": \"將「體感溫度」替換為最低和最高溫度\",\n\n    // Search\n    \"micIconTitle\": \"隱藏麥克風圖示\",\n    \"micIconInfo\": \"如果語音輸入無法使用\",\n    \"hideSearchWith\": \"隱藏搜尋引擎\",\n    \"hideSearchWithInfo\": \"透過點擊圖示切換搜尋引擎\",\n    \"motivationalQuotesText\": \"勵志語錄\",\n    \"motivationalQuotesInfo\": \"在搜尋列下方顯示語錄\",\n    \"search_suggestions_button\": \"搜尋建議\",\n    \"search_suggestions_text\": \"啟用搜尋建議\",\n\n    // Proxy\n    \"useproxytitletext\": \"繞過代理\",\n    \"useproxyText\": \"如果搜尋建議無法正常運作\",\n    \"ProxyText\": \"CORS 繞過代理\",\n    \"ProxySubtext\": \"新增您的地址以繞過 CORS 限制\",\n    \"HostproxyButton\": \"托管您自己的代理\",\n\n    // Location\n    \"useGPS\": \"使用 GPS\",\n    \"useGPSInfo\": \"啟用 GPS 以獲取即時位置更新\",\n    \"UserLocText\": \"輸入您的位置\",\n    \"UserLocSubtext\": \"如果天氣位置不正確\",\n    \"userLoc\": \"您的城市或座標（緯度，經度）\",\n    \"PrivacyPolicy\": \"隱私權政策\",\n\n    // Weather\n    \"WeatherApiText\": \"輸入您的 WeatherAPI 密鑰\",\n    \"WeatherApiSubtext\": \"如果天氣功能無法正常運作\",\n    \"userAPI\": \"您的 WeatherAPI 密鑰\",\n    \"LearnMoreButton\": \"了解更多\",\n    \"saveAPI\": \"儲存\",\n\n    // Body Items\n    // Calendar\n    \"days\": ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\n    \"months\": ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n\n    // Bookmarks\n    \"bookmarksHeading\": \"書籤\",\n    \"bookmarkSortBy\": \"排序方式\",\n    \"sortAlphabetical\": \"A-Z\",\n    \"sortTimeAdded\": \"由舊到新\",\n    \"bookmarkViewAs\": \"檢視方式\",\n    \"bookmarkViewGrid\": \"網格\",\n    \"bookmarkViewList\": \"列表\",\n    \"bookmarkSearch\": \"搜尋書籤\",\n    \"editBookmarkHeading\": \"編輯書籤\",\n    \"editBookmarkName\": \"書籤名稱\",\n    \"editBookmarkURL\": \"書籤網址\",\n\n    // New Tab Item\n    \"conditionText\": \"你好！今天感覺怎麼樣？\",\n    \"humidityLevel\": \"濕度\",\n    \"feelsLike\": \"體感溫度\",\n    \"minMaxTemp\": \"最低 ~ 最高\",\n    \"location\": \"地球\",\n    \"enterBtn\": \"搜尋\",\n    \"searchPlaceholder\": \"輸入搜尋內容...\",\n    \"listenPlaceholder\": \"正在聆聽...\",\n    \"searchWithHint\": \"搜尋引擎\",\n    \"searchOnHint\": \"搜尋網站\",\n    \"userText\": \"點擊這裡以編輯\",\n\n    // Greeting\n    greeting: {\n        \"morning\": \"早安！\",\n        \"afternoon\": \"午安！\",\n        \"evening\": \"晚安！\"\n    },\n\n    // Search Engines\n    \"defaultEngine\": \"預設\",\n    \"googleEngine\": \"Google\",\n    \"duckEngine\": \"Duck\",\n    \"bingEngine\": \"Bing\",\n    \"braveEngine\": \"Brave\",\n    \"youtubeEngine\": \"YouTube\",\n    \"gImagesEngine\": \"圖片\",\n    \"redditEngine\": \"Reddit\",\n    \"wikipediaEngine\": \"維基百科\",\n    \"quoraEngine\": \"Quora\",\n\n    // AI Tools\n    \"ai_tools\": \"AI 工具\",\n    \"chatGPT\": \"ChatGPT\",\n    \"gemini\": \"Gemini\",\n    \"copilot\": \"Copilot\",\n    \"claude\": \"Claude\",\n    \"grok\": \"Grok\",\n    \"qwen\": \"Qwen\",\n    \"perplexity\": \"Perplexity\",\n    \"deepseek\": \"DeepSeek\",\n    \"metaAI\": \"Meta AI\",\n    \"firefly\": \"Adobe Firefly\",\n    \"aiSettingsIntro\": \"選擇要顯示的 AI 工具\",\n    \"resetAISettingsBtn\": \"重設\",\n\n    // Theme\n    \"enableDarkMode\": \"深色模式（實驗性）\",\n    \"enableDarkModeInfo\": \"啟用深色模式主題\",\n\n    // Wallpaper and settings\n    \"uploadWallpaperText\": \"上傳桌布\",\n    \"rangColor\": \"選擇顏色\",\n    \"backupText\": \"備份\",\n    \"restoreText\": \"還原\",\n    \"resetsettings\": \"重設設定\",\n    \"menuCloseText\": \"關閉\",\n\n    // Tips\n    \"switchSearchModes\": \"切換搜尋模式\",\n    \"switchSearchModesInfo\": \"點擊「搜尋引擎」以更改模式。\",\n    \"adjustZoom\": \"調整縮放比例\",\n    \"adjustZoomInfo\": \"按下 Ctrl + 加號鍵或 Ctrl + 減號鍵來調整縮放比例。\",\n    \"changeBrowserTheme\": \"更改瀏覽器主題\",\n    \"chromeThemeInfo\": \"點擊右上角的三個點 (⋮) > 更多工具 > 自訂 Chrome，然後選擇與擴充套件主題相符的顏色。\",\n    \"edgeThemeInfo\": \"前往設定 > 外觀，然後選擇與擴充套件主題相符的顏色。\",\n    \"braveThemeInfo\": '造訪 <a href=\"https://chromewebstore.google.com/category/themes/\" target=\"_blank\">Chrome 主題商店</a>，下載並套用與擴充套件相符的主題。',\n    \"firefoxThemeInfo\": '造訪 <a href=\"https://addons.mozilla.org/firefox/themes/\" target=\"_blank\">Firefox 主題</a>，下載並套用與擴充套件相符的主題。',\n    \"updateFirefoxHomepage\": \"更新首頁\",\n    \"updateFirefoxHomepageInfo\": \"若要將首頁更改為與新分頁相同，請造訪 <a href=\\\"https://github.com/prem-k-r/MaterialYouNewTab#-firefox\\\" target=\\\"_blank\\\">此連結</a> 並按照指示操作。\",\n    \"dontShowTips\": \"不要再顯示此提示\",\n\n    // Dialog boxes (alerts)\n    \"okText\": \"確定\",\n    \"yesText\": \"是\",\n    \"noText\": \"否\",\n    \"agreeText\": \"我同意\",\n    \"cancelText\": \"取消\",\n    \"confirmWallpaper\": \"您想要將新的影像設定為今日的桌布嗎？\",\n    \"confirmRestore\": \"您確定要重設設定嗎？此動作無法恢復。\",\n    \"Nobackgroundset\": \"目前尚未設定背景圖片。\",\n    \"clearbackgroundimage\": \"確定要清除背景圖片嗎？\",\n    \"ProxyDisclaimer\": \"所有代理功能預設為關閉。\\n\\n如果啟用搜尋建議和 CORS 繞過代理，強烈建議自行代管代理伺服器以提升隱私。\\n\\n預設情況下，代理會設定為 https://mynt-proxy.rhythmcorehq.com，這表示您的所有資料都會通過此服務，可能會出現隱私疑慮。\",\n    \"GPSDisclaimer\": \"您的位置資料僅用於提供準確的天氣更新。資料會暫時儲存在瀏覽器內，不會與任何第三方共享或供我們存取。\\n\\n啟用 GPS 即表示您同意與擴充功能共享您的位置資料。\",\n    \"failedbackup\": \"備份失敗：\",\n    \"restorecompleted\": \"還原成功！\",\n    \"restorefailed\": \"還原失敗：\",\n    \"invalidBackup\": \"選擇的備份檔案無效。\",\n    \"deleteBookmark\": \"您確定要刪除書籤 \\\"{title}\\\" 嗎？\",\n    \"UnsupportedBrowser\": \"您的瀏覽器不支援書籤功能\",\n};\n"
  },
  {
    "path": "manifest(firefox).json",
    "content": "{\n\t\"manifest_version\": 2,\n\t\"name\": \"MYNT: Material You New Tab\",\n\t\"version\": \"3.3.504\",\n\t\"description\": \"A Simple New Tab (browser's home page) inspired by Google's 'Material You' design.\",\n\t\"permissions\": [\n\t\t\"search\",\n\t\t\"bookmarks\",\n\t\t\"https://www.google.com/complete/search?client=*\",\n\t\t\"https://duckduckgo.com/ac/?q=*\",\n\t\t\"https://search.brave.com/api/suggest?q=*\",\n\t\t\"https://*.wikipedia.org/w/api.php?action=opensearch&search=*\"\n\t],\n\t\"background\": {\n\t\t\"scripts\": [\"scripts/background.js\"]\n\t},\n\t\"icons\": {\n\t\t\"16\": \"favicon/icon16.png\",\n\t\t\"48\": \"favicon/icon48.png\",\n\t\t\"128\": \"favicon/icon128.png\"\n\t},\n\t\"browser_action\": {\n\t\t\"default_icon\": \"favicon/icon48.png\"\n\t},\n\t\"chrome_url_overrides\": {\n\t\t\"newtab\": \"index.html\"\n\t},\n\t\"incognito\": \"spanning\",\n\t\"browser_specific_settings\": {\n\t\t\"gecko\": {\n\t\t\t\"id\": \"{c30c387e-cd01-42b4-b5c7-6af2d820535b}\",\n\t\t\t\"data_collection_permissions\": {\n\t\t\t\t\"required\": [\"none\"]\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "manifest.json",
    "content": "{\n\t\"manifest_version\": 3,\n\t\"name\": \"MYNT: Material You New Tab\",\n\t\"version\": \"3.3.504\",\n\t\"description\": \"A Simple New Tab (browser's home page) inspired by Google's 'Material You' design.\",\n\t\"permissions\": [\"search\"],\n\t\"optional_permissions\": [\"bookmarks\", \"favicon\"],\n\t\"optional_host_permissions\": [\n\t\t\"https://www.google.com/complete/search?client=*\",\n\t\t\"https://duckduckgo.com/ac/?q=*\",\n\t\t\"https://search.brave.com/api/suggest?q=*\",\n\t\t\"https://*.wikipedia.org/w/api.php?action=opensearch&search=*\"\n\t],\n\t\"icons\": {\n\t\t\"16\": \"favicon/icon16.png\",\n\t\t\"48\": \"favicon/icon48.png\",\n\t\t\"128\": \"favicon/icon128.png\"\n\t},\n\t\"action\": {\n\t\t\"default_icon\": \"favicon/icon48.png\"\n\t},\n\t\"chrome_url_overrides\": {\n\t\t\"newtab\": \"index.html\"\n\t},\n\t\"incognito\": \"split\"\n}\n"
  },
  {
    "path": "privacy-policy.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Privacy Policy for MYNT</title>\n    <link href=\"favicon/icon128.png\" rel=\"icon\">\n    <link href=\"https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap\" rel=\"stylesheet\">\n    <style>\n        body {\n            font-family: 'Poppins', sans-serif;\n            background-color: #f3f4f6;\n            color: #333;\n            margin: 0;\n            padding: 20px;\n            line-height: 1.6;\n            transition: background 0.3s, color 0.3s;\n        }\n\n        .container {\n            max-width: 800px;\n            margin: auto;\n            background: white;\n            padding: 20px 30px;\n            border-radius: 8px;\n            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n            transition: background 0.3s, color 0.3s;\n        }\n\n        h1 {\n            font-size: 2rem;\n            margin-bottom: 10px;\n        }\n\n        h2 {\n            font-size: 1.5rem;\n            margin-top: 25px;\n            margin-bottom: 10px;\n        }\n\n        h3 {\n            font-size: 1.2rem;\n            margin-top: 15px;\n            margin-bottom: 5px;\n        }\n\n        p {\n            margin: 10px 0;\n            text-align: justify;\n        }\n\n        li {\n            margin-bottom: 12px;\n        }\n\n        a {\n            color: #6200ea;\n            text-decoration: none;\n        }\n\n        a:hover {\n            text-decoration: underline;\n        }\n\n        code {\n            word-break: break-word;\n            white-space: pre-wrap;\n            overflow-wrap: anywhere;\n            background-color: #f1f1f1;\n            padding: 2px 4px;\n            border-radius: 4px;\n            max-width: 100%;\n            vertical-align: middle;\n        }\n\n        /* Dark mode styles */\n        body.dark-mode {\n            background-color: #181a20;\n            color: #e0e0e0;\n        }\n\n        .container.dark-mode {\n            background: #23262f;\n            color: #e0e0e0;\n            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.4);\n        }\n\n        body.dark-mode a {\n            color: #bb86fc;\n        }\n\n        body.dark-mode code {\n            background-color: #23262f;\n            color: #bb86fc;\n        }\n\n        .dark-mode-toggle {\n            position: absolute;\n            top: 20px;\n            right: 20px;\n            background: #fff;\n            color: #333;\n            border: none;\n            border-radius: 16px;\n            padding: 8px;\n            display: inline-flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 1rem;\n            cursor: pointer;\n            box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);\n            transition: background 0.3s, color 0.3s;\n            z-index: 10;\n        }\n\n        .dark-mode-toggle:hover svg {\n            transform: scale(1.02);\n        }\n\n        body.dark-mode .dark-mode-toggle {\n            background: #23262f;\n            color: #e0e0e0;\n            border: 1px solid #444;\n        }\n    </style>\n</head>\n\n<body>\n\n    <button class=\"dark-mode-toggle\" id=\"darkModeToggle\">\n        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path id=\"iconPath\" d=\"\" fill=\"currentColor\" />\n        </svg>\n    </button>\n\n    <div class=\"container\" id=\"mainContainer\">\n        <h1>Privacy Policy for MYNT: Material You New Tab</h1>\n\n        <h2>Introduction</h2>\n        <p>\"MYNT: Material You New Tab\" is an open-source extension designed to enhance the appearance of your browser’s\n            default home page and new tab. It was originally developed as a personal project using HTML, CSS, and\n            JavaScript. Due to positive feedback, it was later made available on both the Firefox and Chrome Web Stores.\n        </p>\n\n        <h2>Community Contributions</h2>\n        <p>Since its release, talented developers from the community have contributed to improving the extension through\n            GitHub. These contributors have added new features and fixed bugs, making the extension even better. Each\n            pull request is carefully reviewed, tested, and verified to ensure it meets our standards before being\n            merged.\n        </p>\n\n        <h2>Data Collection and Permissions</h2>\n        <p>MYNT: Material You New Tab prioritizes your privacy and is focused solely on providing a better browsing\n            experience. This extension does <strong>not collect</strong>, <strong>store</strong>, or\n            <strong>share</strong> any personal data. All processing is done locally within your browser. No analytics,\n            tracking scripts, or remote logging systems are included.\n        </p>\n\n        <h3>Permissions</h3>\n        <p> We only request the minimal permissions needed to deliver a rich, dynamic browsing experience. Below is a\n            breakdown of the permissions used and what they are for:</p>\n\n        <ul>\n            <li><strong>Search:</strong> Enables integration with the browser’s default search engine.</li>\n            <li><strong>Bookmarks</strong> (optional): If granted, allows optional display of your bookmarks directly on\n                the new tab page.</li>\n            <li><strong>Favicon</strong> (optional): Used to retrieve bookmark favicons from the browser cache. It only\n                returns icons the browser already has cached and does not expose browsing history or page content.</li>\n        </ul>\n\n        <h3>Browser APIs</h3>\n        <ul>\n            <li><strong>Speech Recognition (Web Speech API):</strong> Enables voice search. Microphone access is\n                triggered only when the mic icon is clicked and is handled entirely by your browser. No voice data is\n                collected or stored.</li>\n            <li><strong>Geolocation:</strong> Used to improve weather accuracy. Access is browser-managed and is not\n                tracked or shared.</li>\n        </ul>\n\n        <h3>External APIs</h3>\n        <p>We use the following external services to improve the user experience:</p>\n        <ul>\n            <li><strong>Search Suggestions:</strong>\n                <ul>\n                    <li>Google: <code>https://www.google.com/complete/search?client=*</code></li>\n                    <li>DuckDuckGo: <code>https://duckduckgo.com/ac/?q=*</code></li>\n                    <li>Brave: <code>https://search.brave.com/api/suggest?q=*</code></li>\n                    <li>Wikipedia: <code>https://*.wikipedia.org/w/api.php?action=opensearch&search=*</code></li>\n                </ul>\n                <p>These are used to provide auto-complete suggestions while typing in the search bar. You can control\n                    which sites the extension can access from your browser settings.</p>\n            </li>\n\n            <li><strong>Location Detection (<a href=\"https://ipinfo.io/\" target=\"_blank\">IPinfo</a>):</strong>\n                <ul>\n                    <li><code>https://ipinfo.io/json</code> – fetches approximate city-level location based on your IP\n                        for local weather display.</li>\n                </ul>\n            </li>\n\n            <li><strong>Weather Updates (<a href=\"https://www.weatherapi.com/\" target=\"_blank\">WeatherAPI</a>):</strong>\n                <ul>\n                    <li><code>https://api.weatherapi.com/v1/forecast.json?key=*</code> – retrieves daily forecasts based\n                        on your location and language preferences.</li>\n\n                    <li><code>https://api.weatherapi.com/v1/search.json?key=*</code> – used to fetch location\n                        suggestions when searching for a city.</li>\n                </ul>\n            </li>\n\n            <li><strong>Random Wallpapers (<a href=\"https://picsum.photos/\" target=\"_blank\">Lorem Picsum</a>):</strong>\n                <ul>\n                    <li><code>https://picsum.photos/1920/1080</code> – used to fetch high-quality random images.</li>\n                </ul>\n            </li>\n\n            <li><strong>Quotes (<a href=\"https://github.com/prem-k-r/multilingual-quotes-api\"\n                        target=\"_blank\">Multilingual Quotes API</a>):</strong>\n                <ul>\n                    <li><code>https://github.com/prem-k-r/multilingual-quotes-api</code> – used to fetch quotes.\n                    </li>\n                </ul>\n            </li>\n\n            <li><strong>Favicon Fetching (Google's Favicon API):</strong>\n                <ul>\n                    <li><code>https://s2.googleusercontent.com/s2/favicons*</code></li>\n                    <li><code>https://www.google.com/s2/favicons*</code></li>\n                </ul>\n                These are used to fetch favicons of websites for shortcuts and bookmarks.\n            </li>\n        </ul>\n\n        <h3>Proxy Server (Optional)</h3>\n        <p>\n            MYNT: Material You New Tab includes an optional proxy feature that is <strong>disabled by default</strong>.\n            This feature can be used to bypass CORS restrictions when fetching search suggestions.\n        </p>\n        <p>\n            For users who wish to enable this feature, we <strong>highly recommend <a\n                    href=\"https://github.com/Minuga-RC/MYNT-CORS-Bypass-Proxy\" target=\"_blank\">hosting your own\n                    proxy server</a></strong> to maintain full control and ensure maximum privacy.\n        </p>\n        <p>\n            If enabled and left at the default setting, search suggestion requests will be routed through the public\n            proxy at: <code>https://mynt-proxy.rhythmcorehq.com</code>.\n        </p>\n\n        <h2>Transparency and Security</h2>\n        <p>While we strive to keep our code secure, we acknowledge that no project is entirely immune to potential\n            issues. In rare cases, unintended code or errors could be introduced through contributions. We encourage\n            users to review the source code directly on GitHub for peace of mind. Please use this extension only when\n            you are fully comfortable with its contents.</p>\n\n        <h2>Thank You</h2>\n        <p>Thank you for your trust in the MYNT: Material You New Tab extension. We hope it enhances your browsing\n            experience with every new tab you open!</p>\n\n    </div>\n\n\n    <script>\n        // Dark mode toggle logic\n        const toggleBtn = document.getElementById('darkModeToggle');\n        const container = document.getElementById('mainContainer');\n        const iconPath = document.getElementById('iconPath');\n        let isDark = localStorage.getItem('mynt-dark-mode');\n\n        // SVG paths\n        const moonPath = \"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\";\n        const sunPath = \"M11 4V1h2v3zm0 19v-3h2v3zm9-10v-2h3v2zM1 13v-2h3v2zm17.7-6.3l-1.4-1.4l1.75-1.8l1.45 1.45zM4.95 20.5L3.5 19.05l1.8-1.75l1.4 1.4zm14.1 0l-1.75-1.8l1.4-1.4l1.8 1.75zM5.3 6.7L3.5 4.95L4.95 3.5L6.7 5.3zM12 18q-2.5 0-4.25-1.75T6 12t1.75-4.25T12 6t4.25 1.75T18 12t-1.75 4.25T12 18\";\n\n        function setDarkMode(isDark) {\n            document.body.classList.toggle('dark-mode', isDark);\n            container.classList.toggle('dark-mode', isDark);\n            iconPath.setAttribute('d', isDark ? sunPath : moonPath);\n            localStorage.setItem('mynt-dark-mode', isDark);\n        }\n\n        // Determine initial state\n        if (isDark === null) {\n            isDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n        } else {\n            isDark = isDark === 'true';\n        }\n\n        setDarkMode(isDark);\n\n        toggleBtn.addEventListener('click', () => {\n            const newDarkState = !document.body.classList.contains('dark-mode');\n            setDarkMode(newDarkState);\n        });\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "scripts/README.md",
    "content": "# Contributing to the Project\n\n## Adding a New Feature\n\n1. **Create a new script file**\n    - Name the file appropriately to reflect the feature you're adding. For example, if your feature involves animations, the file could be named `animation-feature.js`.\n    - Place this new file in the `scripts` directory.\n\n2. **Include the copyright comment**\n    - Add the following copyright block at the top of your new script file:\n      ```javascript\n      /* \n       * Material You New Tab\n       * Copyright (c) 2024-2026 Prem, 2023-2025 XengShi\n       * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n       */\n      ```  \n\n3. **Integrate the script into the project**\n    - Open `index.html` and locate the `<!-- SCRIPTS -->` section.\n    - Add your script as follows:\n      ```html\n      <script defer src=\"scripts/animation-feature.js\"></script>\n      ```\n\n4. **Develop your feature**\n    - Implement your functionality within the script. Write clean, maintainable code and follow any existing coding standards used in the project.\n\n5. **Update the changelog**\n    - Edit [CHANGELOG.md](../CHANGELOG.md) and add your changes under the [Unreleased] section.\n    - Group all your changes under the most appropriate categories.\n\n---\n\n## Additional Notes\nEnsure you've read the [code of conduct](../CODE_OF_CONDUCT.md) and the [contributing](../CONTRIBUTING.md).\n"
  },
  {
    "path": "scripts/ai-tools.js",
    "content": "/*\n * Material You NewTab\n * Copyright (c) 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program.\n * If not, see <https://www.gnu.org/licenses/>.\n */\n\n// Define the list of available AI tools and their default visibility\nconst aiToolsRaw = [\n    { id: \"chatGPT\", visible: true, order: 0 },\n    { id: \"gemini\", visible: true, order: 1 },\n    { id: \"copilot\", visible: true, order: 2 },\n    { id: \"claude\", visible: true, order: 3 },\n    { id: \"deepseek\", visible: true, order: 4 },\n    { id: \"perplexity\", visible: false, order: 5 },\n    { id: \"grok\", visible: false, order: 6 },\n    { id: \"metaAI\", visible: false, order: 7 },\n    { id: \"qwen\", visible: false, order: 8 },\n    { id: \"firefly\", visible: false, order: 9 }\n];\n// Translations for AI tools\nconst aiTools = aiToolsRaw.map(tool => ({\n    ...tool,\n    label: translations[currentLanguage]?.[tool.id] || translations[\"en\"][tool.id]\n}));\n\n// DOM Elements\nconst aiToolName = document.getElementById(\"toolsCont\");\nconst shortcuts = document.getElementById(\"shortcutsContainer\");\nconst aiToolsIcon = document.getElementById(\"aiToolsIcon\");\nconst aiToolsSettingsModal = document.getElementById(\"aiToolsSettingsModal\");\nconst aiToolsSettingsOverlay = document.getElementById(\"aiToolsSettingsOverlay\");\nconst aiToolsForm = document.getElementById(\"aiToolsForm\");\nconst closeAISettingsBtn = document.getElementById(\"closeAISettingsBtn\");\nconst resetAISettingsBtn = document.getElementById(\"resetAISettingsBtn\");\nconst saveAISettingsBtn = document.getElementById(\"saveAISettingsBtn\");\nconst aiToolsEditButton = document.getElementById(\"aiToolsEditButton\");\nconst aiToolsCont = document.getElementById(\"aiToolsCont\");\nconst aiToolsEditField = document.getElementById(\"aiToolsEditField\");\n\n// Animation helper function\nfunction animateReorder(element1, element2, direction) {\n    return new Promise((resolve) => {\n        // Get the current positions\n        const rect1 = element1.getBoundingClientRect();\n        const rect2 = element2.getBoundingClientRect();\n\n        // Calculate the distance to move\n        const distance = Math.abs(rect1.top - rect2.top);\n\n        // Set CSS custom properties for the distance\n        element1.style.setProperty(\"--move-distance\", `${distance}px`);\n        element2.style.setProperty(\"--move-distance\", `${distance}px`);\n\n        // Get button references\n        const element1UpBtn = element1.querySelector(\".reorder-up\");\n        const element1DownBtn = element1.querySelector(\".reorder-down\");\n        const element2UpBtn = element2.querySelector(\".reorder-up\");\n        const element2DownBtn = element2.querySelector(\".reorder-down\");\n\n        // Disable interactions\n        element1.style.pointerEvents = \"none\";\n        element2.style.pointerEvents = \"none\";\n\n        // Add animation classes\n        if (direction === \"up\") {\n            element1.classList.add(\"reorder-animate-up\");\n            element2.classList.add(\"reorder-animate-down\");\n        } else {\n            element1.classList.add(\"reorder-animate-down\");\n            element2.classList.add(\"reorder-animate-up\");\n        }\n\n        // Update button states at halfway point\n        setTimeout(() => {\n            [element1UpBtn.disabled, element2UpBtn.disabled] = [element2UpBtn.disabled, element1UpBtn.disabled];\n            [element1DownBtn.disabled, element2DownBtn.disabled] = [element2DownBtn.disabled, element1DownBtn.disabled];\n        }, 150);\n\n        // Complete animation\n        setTimeout(() => {\n            // Perform DOM swap\n            if (direction === \"up\") {\n                aiToolsForm.insertBefore(element1, element2);\n            } else {\n                aiToolsForm.insertBefore(element2, element1);\n            }\n\n            // Clean up\n            [element1, element2].forEach(el => {\n                el.classList.remove(\"reorder-animate-up\", \"reorder-animate-down\");\n                el.style.removeProperty(\"--move-distance\");\n                el.style.pointerEvents = \"\";\n            });\n\n            updateReorderButtonStates();\n            resolve();\n        }, 300);\n    });\n}\n\n// Function to save AI tools settings\nfunction saveAIToolsSettings() {\n    const aiToolsSettings = [];\n    const toolOptions = document.querySelectorAll(\".ai-tool-option\");\n\n    // Save each tool's visibility based on current order\n    toolOptions.forEach((option) => {\n        const toolId = option.dataset.toolId;\n        const isVisible = document.getElementById(`setting_${toolId}`).checked;\n\n        // Add to array based on visibility\n        if (isVisible) {\n            // For visible tools, just add the ID string\n            aiToolsSettings.push(toolId);\n        } else {\n            // For hidden tools, add an object with the ID as key and false as value\n            const hiddenTool = {};\n            hiddenTool[toolId] = false;\n            aiToolsSettings.push(hiddenTool);\n        }\n    });\n\n    // Save settings to localStorage\n    localStorage.setItem(\"aiToolsSettings\", JSON.stringify(aiToolsSettings));\n}\n\n// Function to apply saved settings (visibility and order)\nfunction applyAIToolsSettings() {\n    const savedSettings = JSON.parse(localStorage.getItem(\"aiToolsSettings\") || \"null\");\n    let settingsToApply;\n\n    if (!savedSettings || !Array.isArray(savedSettings)) {\n        // Initialize with default values if no settings exist\n        settingsToApply = aiTools.map(tool => tool.visible ? tool.id : { [tool.id]: false });\n        localStorage.setItem(\"aiToolsSettings\", JSON.stringify(settingsToApply));\n    } else {\n        settingsToApply = savedSettings;\n    }\n\n    // Create a map of current tool elements for quick lookup\n    const toolElements = new Map();\n    const allToolLinks = aiToolName.querySelectorAll(\"a\");\n    allToolLinks.forEach(link => {\n        const toolId = [...link.children].find(el => aiToolsRaw.some(t => t.id === el.id))?.id;\n        if (toolId) toolElements.set(toolId, link);\n    });\n\n    // Clear container\n    aiToolName.innerHTML = \"\";\n\n    // Append tools in order based on settings\n    settingsToApply.forEach(item => {\n        let toolId, isVisible;\n\n        if (typeof item === \"string\") {\n            toolId = item;\n            isVisible = true;\n        } else {\n            toolId = Object.keys(item)[0];\n            isVisible = false;\n        }\n\n        const toolElement = toolElements.get(toolId);\n        if (toolElement) {\n            toolElement.style.display = isVisible ? \"flex\" : \"none\";\n            aiToolName.appendChild(toolElement);\n        }\n    });\n}\n\n// Function to generate the AI Tools settings form elements\nfunction generateAIToolsForm(settings) {\n    aiToolsForm.innerHTML = \"\";\n\n    // Create form elements\n    settings.forEach((settingItem, index) => {\n        let toolId, isVisible;\n\n        if (typeof settingItem === \"string\") {\n            toolId = settingItem;\n            isVisible = true;\n        } else {\n            toolId = Object.keys(settingItem)[0];\n            isVisible = false;\n        }\n\n        const originalTool = aiTools.find(t => t.id === toolId);\n        const toolLabel = originalTool?.label || toolId;\n\n        const toolOption = document.createElement(\"div\");\n        toolOption.className = \"ai-tool-option\";\n        toolOption.dataset.toolId = toolId;\n        toolOption.innerHTML = `\n            <div class=\"ai-tool-controls\">\n                <input type=\"checkbox\" id=\"setting_${toolId}\" ${isVisible ? \"checked\" : \"\"}>\n                <label for=\"setting_${toolId}\">${toolLabel}</label>\n            </div>\n            <div class=\"ai-tool-reorder\">\n                <button type=\"button\" class=\"reorder-up\" ${index === 0 ? \"disabled\" : \"\"}>▲</button>\n                <button type=\"button\" class=\"reorder-down\" ${index === settings.length - 1 ? \"disabled\" : \"\"}>▼</button>\n            </div>\n        `;\n        aiToolsForm.appendChild(toolOption);\n    });\n\n    // Single event listener for all reorder buttons\n    aiToolsForm.addEventListener(\"click\", async (event) => {\n        const upButton = event.target.closest(\".reorder-up\");\n        const downButton = event.target.closest(\".reorder-down\");\n\n        if (!upButton && !downButton) return;\n\n        const toolOption = event.target.closest(\".ai-tool-option\");\n        if (!toolOption) return;\n\n        // Skip if button is disabled or animation in progress\n        if (event.target.disabled || event.target.dataset.animating === \"true\") return;\n        event.target.dataset.animating = \"true\";\n\n        if (upButton) {\n            const prevToolOption = toolOption.previousElementSibling;\n            if (prevToolOption) {\n                await animateReorder(toolOption, prevToolOption, \"up\");\n            }\n        } else if (downButton) {\n            const nextToolOption = toolOption.nextElementSibling;\n            if (nextToolOption) {\n                await animateReorder(toolOption, nextToolOption, \"down\");\n            }\n        }\n\n        event.target.dataset.animating = \"false\";\n    });\n\n    updateReorderButtonStates();\n}\n\n// Function to show AI Tools settings modal\nfunction showAIToolsSettings() {\n    // Clear previous form content\n    aiToolsForm.innerHTML = \"\";\n\n    // Load saved tool order and visibility or initialize from defaults\n    let savedSettings = JSON.parse(localStorage.getItem(\"aiToolsSettings\") || \"null\");\n\n    // If no settings exist, create from aiTools\n    if (!savedSettings || !Array.isArray(savedSettings)) {\n        savedSettings = aiTools.map(tool => {\n            if (tool.visible) {\n                return tool.id;\n            } else {\n                const hiddenTool = {};\n                hiddenTool[tool.id] = false;\n                return hiddenTool;\n            }\n        });\n    }\n\n    // Generate the form with the saved settings\n    generateAIToolsForm(savedSettings);\n\n    // Show modal and overlay\n    aiToolsSettingsModal.style.display = \"block\";\n    aiToolsSettingsOverlay.style.display = \"block\";\n}\n\n// Function to update the enabled/disabled state of reorder buttons\nfunction updateReorderButtonStates() {\n    const toolOptions = document.querySelectorAll(\".ai-tool-option\");\n\n    toolOptions.forEach((option, index) => {\n        const upButton = option.querySelector(\".reorder-up\");\n        const downButton = option.querySelector(\".reorder-down\");\n\n        if (upButton) {\n            // Disable the first up button\n            upButton.disabled = index === 0;\n        }\n\n        if (downButton) {\n            // Disable the last down button\n            downButton.disabled = index === toolOptions.length - 1;\n        }\n    });\n}\n\n// Function to close settings modal\nfunction closeAIToolsSettings() {\n    aiToolsSettingsModal.style.display = \"none\";\n    aiToolsSettingsOverlay.style.display = \"none\";\n}\n\n// Function to toggle AI Tools panel\nlet isAIToolsTransitioning = false;\n\nfunction toggleAITools(event) {\n    if (isAIToolsTransitioning) return;\n    isAIToolsTransitioning = true;\n\n    const shortcutsCheckbox = document.getElementById(\"shortcutsCheckbox\");\n    const isAIToolVisible = aiToolName.style.display === \"flex\";\n\n    // Prevent outside click handler from triggering\n    if (event) event.stopPropagation();\n\n    if (isAIToolVisible) {\n        // Hide AI Tool panel\n        if (shortcutsCheckbox.checked) {\n            shortcuts.style.display = \"flex\";\n        } else {\n            shortcuts.style.display = \"none\";\n        }\n\n        aiToolName.style.opacity = \"0\";\n        aiToolName.style.gap = \"0\";\n        aiToolName.style.transform = \"translateX(-100%)\";\n\n        setTimeout(() => {\n            aiToolName.style.display = \"none\";\n            isAIToolsTransitioning = false;\n        }, 500);\n    } else {\n        // Show AI Tool panel\n        shortcuts.style.display = \"none\";\n        aiToolName.style.display = \"flex\";\n\n        requestAnimationFrame(() => {\n            aiToolName.style.opacity = \"1\";\n            aiToolName.style.transform = \"translateX(0)\";\n        });\n\n        setTimeout(() => {\n            aiToolName.style.gap = \"12px\";\n            isAIToolsTransitioning = false;\n        }, 300);\n    }\n}\n\n// Event Listeners\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n    // Apply saved settings\n    applyAIToolsSettings();\n\n    // Allow horizontal scrolling with the mouse wheel\n    aiToolsCont.addEventListener(\"wheel\", (event) => {\n        // Check if the container is scrollable in x-axis\n        if (aiToolsCont.scrollWidth > aiToolsCont.clientWidth) {\n            if (event.deltaY !== 0) {\n                event.preventDefault(); // Prevent vertical scrolling\n                // Apply the deltaY from the wheel event to horizontal scroll\n                aiToolsCont.scrollLeft += event.deltaY;\n            }\n        }\n    }, { passive: false });\n\n    // AI Tools icon click handler\n    aiToolsIcon.addEventListener(\"click\", toggleAITools);\n\n    // AI Tools edit button click handler\n    aiToolsEditButton.addEventListener(\"click\", function (e) {\n        e.preventDefault();\n        e.stopPropagation();\n        showAIToolsSettings();\n    });\n\n    // Close button in settings modal\n    closeAISettingsBtn.addEventListener(\"click\", closeAIToolsSettings);\n\n    // Reset button in settings modal\n    resetAISettingsBtn.addEventListener(\"click\", function () {\n        // Create default settings\n        const defaultSettings = aiTools.map(tool => {\n            if (tool.visible) {\n                return tool.id;\n            } else {\n                const hiddenTool = {};\n                hiddenTool[tool.id] = false;\n                return hiddenTool;\n            }\n        });\n\n        // Generate the form with default settings\n        generateAIToolsForm(defaultSettings);\n\n        // Animate the list reset\n        const toolsList = document.querySelector(\".ai-tools-list\");\n        const toolOptions = document.querySelectorAll(\".ai-tool-option\");\n\n        // Add shake animation to the entire list\n        toolsList.style.animation = \"resetShake 0.6s ease-in-out\";\n\n        // Staggered fade effect for each option\n        toolOptions.forEach((option, index) => {\n            setTimeout(() => {\n                option.style.animation = \"resetFlash 0.4s ease-in-out\";\n\n                // Update checkbox during animation\n                const toolId = option.dataset.toolId;\n                const checkbox = document.getElementById(`setting_${toolId}`);\n                const defaultTool = aiTools.find(t => t.id === toolId);\n\n                if (defaultTool && checkbox) {\n                    checkbox.checked = defaultTool.visible;\n                }\n            }, index * 50); // Stagger by 50ms\n        });\n\n        // Briefly disable the reset button to prevent multiple clicks\n        resetAISettingsBtn.disabled = true;\n\n        // Clean up all animation properties and restore button\n        setTimeout(() => {\n            toolsList.style.animation = \"\";\n            toolOptions.forEach(option => {\n                option.style.animation = \"\";\n                option.style.transform = \"\";\n                option.style.backgroundColor = \"\";\n            });\n            resetAISettingsBtn.disabled = false;\n        }, 700);\n    });\n\n    // Save button in settings modal\n    saveAISettingsBtn.addEventListener(\"click\", function () {\n        const newSettings = [];\n        const toolOptions = document.querySelectorAll(\".ai-tool-option\");\n\n        // Save each tool's visibility based on current order in the form\n        toolOptions.forEach((option) => {\n            const toolId = option.dataset.toolId;\n            const isVisible = document.getElementById(`setting_${toolId}`).checked;\n\n            // Add to array based on visibility\n            if (isVisible) {\n                // For visible tools, just add the ID string\n                newSettings.push(toolId);\n            } else {\n                // For hidden tools, add an object with the ID as key and false as value\n                const hiddenTool = {};\n                hiddenTool[toolId] = false;\n                newSettings.push(hiddenTool);\n            }\n        });\n\n        // Save settings to localStorage\n        localStorage.setItem(\"aiToolsSettings\", JSON.stringify(newSettings));\n\n        // Apply new settings\n        applyAIToolsSettings();\n\n        // Close modal\n        closeAIToolsSettings();\n    });\n\n    // Settings overlay click handler\n    aiToolsSettingsOverlay.addEventListener(\"click\", closeAIToolsSettings);\n\n    // Handle checkbox state for AI Tools visibility\n    const aiToolsCheckbox = document.getElementById(\"aiToolsCheckbox\");\n\n    aiToolsCheckbox.addEventListener(\"change\", function () {\n        saveCheckboxState(\"aiToolsCheckboxState\", aiToolsCheckbox);\n        if (aiToolsCheckbox.checked) {\n            aiToolsCont.style.display = \"flex\";\n            saveDisplayStatus(\"aiToolsDisplayStatus\", \"flex\");\n            aiToolsEditField.classList.remove(\"inactive\");\n        } else {\n            aiToolsCont.style.display = \"none\";\n            saveDisplayStatus(\"aiToolsDisplayStatus\", \"none\");\n            aiToolsEditField.classList.add(\"inactive\");\n        }\n    });\n\n    // Load saved state\n    loadCheckboxState(\"aiToolsCheckboxState\", aiToolsCheckbox);\n    loadDisplayStatus(\"aiToolsDisplayStatus\", aiToolsCont);\n    if (aiToolsCheckbox.checked) {\n        aiToolsEditField.classList.remove(\"inactive\");\n    } else {\n        aiToolsEditField.classList.add(\"inactive\");\n    }\n\n    // Collapse when clicking outside toolsCont\n    document.addEventListener(\"click\", (event) => {\n        if (!aiToolName.contains(event.target) && aiToolName.style.display === \"flex\") {\n            toggleAITools();\n        }\n    });\n});\n"
  },
  {
    "path": "scripts/alert-modal.js",
    "content": "/*\n * Material You NewTab\n * Copyright (c) 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program.\n * If not, see <https://www.gnu.org/licenses/>.\n */\n\n\n// Create modal container if not already present\n(function setupCustomModal() {\n    if (document.getElementById(\"prompt-modal-container\")) return;\n\n    const blurOverlay = document.createElement(\"div\");\n    blurOverlay.id = \"prompt-modal-blur\";\n\n    const modalContainer = document.createElement(\"div\");\n    modalContainer.id = \"prompt-modal-container\";\n\n    const modalBox = document.createElement(\"div\");\n    modalBox.id = \"prompt-modal-box\";\n\n    const messageElement = document.createElement(\"p\");\n    messageElement.id = \"prompt-modal-message\";\n\n    const buttonContainer = document.createElement(\"div\");\n    buttonContainer.id = \"prompt-modal-buttons\";\n\n    modalBox.appendChild(messageElement);\n    modalBox.appendChild(buttonContainer);\n    modalContainer.appendChild(modalBox);\n    document.body.appendChild(blurOverlay);\n    document.body.appendChild(modalContainer);\n})();\n\n// Function for alert and confirm\nfunction alertPrompt(message, isAlert = true, okText, cancelText) {\n    return new Promise((resolve) => {\n        const modalContainer = document.getElementById(\"prompt-modal-container\");\n        const blurOverlay = document.getElementById(\"prompt-modal-blur\");\n        const messageElement = document.getElementById(\"prompt-modal-message\");\n        const buttonContainer = document.getElementById(\"prompt-modal-buttons\");\n        const bookmarkContainer = document.getElementById(\"bookmarkSidebar\");\n\n        // Clear previous message\n        messageElement.innerHTML = \"\";\n\n        // Handle newlines by splitting & appending text nodes\n        message.split(\"\\n\").forEach((line, index) => {\n            if (index > 0) messageElement.appendChild(document.createElement(\"br\"));\n            messageElement.appendChild(document.createTextNode(line));\n        });\n\n        buttonContainer.innerHTML = \"\"; // Clear buttons\n\n        // Default button text with translations\n        if (isAlert) {\n            okText = okText || translations[currentLanguage]?.okText || translations[\"en\"].okText;\n        } else {\n            okText = okText || translations[currentLanguage]?.yesText || translations[\"en\"].yesText;\n            cancelText = cancelText || translations[currentLanguage]?.noText || translations[\"en\"].noText;\n        }\n\n        // Create OK button\n        const okButton = document.createElement(\"button\");\n        okButton.textContent = okText;\n        okButton.classList.add(\"prompt-modal-button\", \"prompt-modal-ok\");\n        okButton.onclick = closeModal.bind(null, true);\n\n        buttonContainer.appendChild(okButton);\n\n        let cancelButton = null;\n        // If it's a confirm modal, add Cancel button\n        if (!isAlert) {\n            cancelButton = document.createElement(\"button\");\n            cancelButton.textContent = cancelText;\n            cancelButton.classList.add(\"prompt-modal-button\", \"prompt-modal-cancel\");\n            cancelButton.onclick = closeModal.bind(null, false);\n\n            buttonContainer.appendChild(cancelButton);\n        }\n\n        modalContainer.style.display = \"flex\";\n        blurOverlay.style.display = \"block\";\n\n        // Disable background interaction\n        document.body.style.pointerEvents = \"none\";\n        if (bookmarkContainer) bookmarkContainer.style.pointerEvents = \"none\";\n        modalContainer.style.pointerEvents = \"auto\";\n\n        // Focus OK button by default and track last focused button\n        let lastFocusedButton = okButton;\n        okButton.focus();\n\n        // Prevent focus loss when clicking outside or on non-buttons\n        function preventFocusLoss(event) {\n            const isInsideModal = modalContainer.contains(event.target);\n            const isButton = event.target.classList.contains(\"prompt-modal-button\");\n\n            if (!isInsideModal || !isButton) {\n                event.preventDefault();\n                lastFocusedButton.focus(); // Restore focus to the last button\n            }\n        }\n\n        document.addEventListener(\"mousedown\", preventFocusLoss);\n\n        // Handle keyboard events\n        function handleKeydown(event) {\n            if (event.key === \"Enter\") {\n                if (document.activeElement === okButton) {\n                    closeModal(true);\n                } else if (document.activeElement === cancelButton) {\n                    closeModal(false);\n                }\n            } else if (event.key === \"Escape\") {\n                closeModal(isAlert ? undefined : false);\n            } else if (event.key === \"ArrowRight\" || event.key === \"ArrowLeft\") {\n                event.preventDefault();\n                const buttons = buttonContainer.querySelectorAll(\"button\");\n                let index = [...buttons].indexOf(document.activeElement);\n                if (event.key === \"ArrowRight\") {\n                    index = (index + 1) % buttons.length;\n                } else if (event.key === \"ArrowLeft\") {\n                    index = (index - 1 + buttons.length) % buttons.length;\n                }\n                buttons[index].focus();\n                lastFocusedButton = buttons[index];\n            }\n        }\n\n        document.addEventListener(\"keydown\", handleKeydown);\n\n        function closeModal(result) {\n            modalContainer.style.display = \"none\";\n            blurOverlay.style.display = \"none\";\n            document.removeEventListener(\"keydown\", handleKeydown);\n            document.removeEventListener(\"mousedown\", preventFocusLoss);\n            document.body.style.pointerEvents = \"auto\";\n            if (bookmarkContainer) bookmarkContainer.style.pointerEvents = \"auto\";\n            resolve(result);\n        }\n    });\n}\n\n// Wrapper function for confirm\nfunction confirmPrompt(message, okText, cancelText) {\n    return alertPrompt(message, false, okText, cancelText);\n}\n\nconst agreeText = translations[currentLanguage]?.agreeText || translations[\"en\"].agreeText;\nconst cancelText = translations[currentLanguage]?.cancelText || translations[\"en\"].cancelText;\n//const saveText = translations[currentLanguage]?.saveAPI || translations[\"en\"].saveAPI;\n//const deleteText = translations[currentLanguage]?.deleteText || translations[\"en\"].deleteText;\n"
  },
  {
    "path": "scripts/background.js",
    "content": ""
  },
  {
    "path": "scripts/backup-restore.js",
    "content": "/*\n * Material You NewTab\n * Copyright (c) 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program.\n * If not, see <https://www.gnu.org/licenses/>.\n */\n\n// -------------------- Backup-Restore Settings ----------------------\ndocument.getElementById(\"backupBtn\").addEventListener(\"click\", backupData);\ndocument.getElementById(\"restoreBtn\").addEventListener(\"click\", () => document.getElementById(\"fileInput\").click());\ndocument.getElementById(\"fileInput\").addEventListener(\"change\", validateAndRestoreData);\n\n// Backup data from localStorage and IndexedDB\nasync function backupData() {\n    try {\n        const backup = { localStorage: {}, indexedDB: {} };\n\n        // Backup localStorage\n        for (let key in localStorage) {\n            if (localStorage.hasOwnProperty(key)) {\n                backup.localStorage[key] = localStorage.getItem(key);\n            }\n        }\n\n        // Backup IndexedDB (ImageDB)\n        backup.indexedDB = await backupIndexedDB();\n\n        // Generate filename with current date (format: DDMMYYYY)\n        const date = new Date();\n        const formattedDate = `${String(date.getDate()).padStart(2, \"0\")}${String(date.getMonth() + 1).padStart(2, \"0\")}${date.getFullYear()}`;\n        const fileName = `MYNT_Backup_${formattedDate}.json`;\n\n        // Create and download the backup file\n        const blob = new Blob([JSON.stringify(backup, null, 2)], { type: \"application/json\" });\n        const link = document.createElement(\"a\");\n        link.href = URL.createObjectURL(blob);\n        link.download = fileName;\n        document.body.appendChild(link);\n        link.click();\n        document.body.removeChild(link);\n\n        console.log(\"Backup completed successfully!\");\n    } catch (error) {\n        await alertPrompt((translations[currentLanguage]?.failedbackup || translations[\"en\"].failedbackup) + error.message);\n    }\n}\n\n// Validate and restore data from a backup file\nasync function validateAndRestoreData(event) {\n    const file = event.target.files[0];\n    if (!file) return;\n\n    const reader = new FileReader();\n    reader.onload = async (e) => {\n        try {\n            const backup = JSON.parse(e.target.result);\n\n            // Validate the structure of the JSON file\n            if (!isValidBackupFile(backup)) {\n                await alertPrompt(translations[currentLanguage]?.invalidBackup || translations[\"en\"].invalidBackup);\n                return;\n            }\n\n            await restoreData(backup);\n\n            await alertPrompt(translations[currentLanguage]?.restorecompleted || translations[\"en\"].restorecompleted);\n            location.reload();\n        } catch (error) {\n            await alertPrompt(translations[currentLanguage]?.restorefailed || translations[\"en\"].restorefailed + error.message);\n        }\n    };\n    reader.readAsText(file);\n}\n\nfunction isValidBackupFile(backup) {\n    // Check if localStorage and indexedDB exist and are objects\n    return !(typeof backup.localStorage !== \"object\" || typeof backup.indexedDB !== \"object\");\n}\n\n// Backup IndexedDB: Extract data from ImageDB -> backgroundImages\nasync function backupIndexedDB() {\n    const db = await openDatabase();\n    return new Promise((resolve, reject) => {\n        const transaction = db.transaction(storeName, \"readonly\");\n        const store = transaction.objectStore(storeName);\n        const data = {};\n\n        store.getAllKeys().onsuccess = (keysEvent) => {\n            const keys = keysEvent.target.result;\n\n            if (!keys.length) {\n                resolve({});\n                return;\n            }\n\n            let pending = keys.length;\n            keys.forEach(key => {\n                store.get(key).onsuccess = (getEvent) => {\n                    const value = getEvent.target.result;\n                    if (value instanceof Blob) {\n                        // Convert Blob to Base64 for JSON compatibility\n                        const reader = new FileReader();\n                        reader.onload = () => {\n                            data[key] = { blob: reader.result, isBlob: true };\n                            if (--pending === 0) resolve(data);\n                        };\n                        reader.readAsDataURL(value);\n                    } else {\n                        data[key] = value;\n                        if (--pending === 0) resolve(data);\n                    }\n                };\n            });\n        };\n\n        transaction.onerror = () => reject(transaction.error);\n    });\n}\n\n// Restore IndexedDB: Clear and repopulate ImageDB -> backgroundImages\nasync function restoreIndexedDB(data) {\n    const db = await openDatabase();\n    return new Promise((resolve, reject) => {\n        const transaction = db.transaction(storeName, \"readwrite\");\n        const store = transaction.objectStore(storeName);\n\n        store.clear();\n        const entries = Object.entries(data);\n        let pending = entries.length;\n\n        if (pending === 0) {\n            resolve(); // If no data to restore, resolve immediately\n            return;\n        }\n\n        entries.forEach(([key, value]) => {\n            if (value.isBlob) {\n                // Convert Base64 back to Blob\n                const blob = base64ToBlob(value.blob);\n                store.put(blob, key);\n            } else {\n                store.put(value, key);\n            }\n\n            if (--pending === 0) resolve();\n        });\n\n        transaction.onerror = () => reject(transaction.error);\n    });\n}\n\n// Restore data for both localStorage and IndexedDB\nasync function restoreData(backup) {\n    // Clear localStorage before restoring\n    localStorage.clear();\n\n    // Restore localStorage from backup\n    if (backup.localStorage) {\n        Object.keys(backup.localStorage).forEach(key => {\n            localStorage.setItem(key, backup.localStorage[key]);\n        });\n    }\n\n    // Restore IndexedDB from backup\n    if (backup.indexedDB) {\n        await restoreIndexedDB(backup.indexedDB);\n    }\n}\n\n// Helper: Convert Base64 string to Blob\nfunction base64ToBlob(base64) {\n    const [metadata, data] = base64.split(\",\");\n    const mime = metadata.match(/:(.*?);/)[1];\n    const binary = atob(data);\n    const array = new Uint8Array(binary.length);\n    for (let i = 0; i < binary.length; i++) {\n        array[i] = binary.charCodeAt(i);\n    }\n    return new Blob([array], { type: mime });\n}\n\n// ------------------- Reset Settings ----------------------------\nconst resetbtn = document.getElementById(\"resetsettings\");\n\n// Clear localStorage and reload the page\nresetbtn.addEventListener(\"click\", async () => {\n    const confirmationMessage = translations[currentLanguage]?.confirmRestore || translations[\"en\"].confirmRestore;\n\n    if (await confirmPrompt(confirmationMessage)) {\n        localStorage.clear();\n        location.reload();\n    }\n});\n\n"
  },
  {
    "path": "scripts/bookmarks.js",
    "content": "/* \n * Material You NewTab\n * Copyright (c) 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program. \n * If not, see <https://www.gnu.org/licenses/>.\n */\n\n// ------------------------ Bookmark System -----------------------------------\n// DOM Variables\nconst bookmarkButton = document.getElementById(\"bookmarkButton\");\nconst bookmarkSidebar = document.getElementById(\"bookmarkSidebar\");\nconst bookmarkList = document.getElementById(\"bookmarkList\");\nconst bookmarkSearch = document.getElementById(\"bookmarkSearch\");\nconst bookmarkSearchClearButton = document.getElementById(\"clearSearchButton\");\nconst bookmarkViewGrid = document.getElementById(\"bookmarkViewGrid\");\nconst bookmarkViewList = document.getElementById(\"bookmarkViewList\");\nconst bookmarksCheckbox = document.getElementById(\"bookmarksCheckbox\");\n\nconst editBookmarkModal = document.getElementById(\"editBookmarkModal\");\nconst editBookmarkName = document.getElementById(\"editBookmarkName\");\nconst editBookmarkURL = document.getElementById(\"editBookmarkURL\");\nconst editBookmarkFavicon = document.getElementById(\"editBookmarkFavicon\");\nconst saveBookmarkChanges = document.getElementById(\"saveBookmarkChanges\");\nconst cancelBookmarkEdit = document.getElementById(\"cancelBookmarkEdit\");\nlet currentBookmarkId = null;\n\nconst sortAlphabetical = document.getElementById(\"sortAlphabetical\");\nconst sortTimeAdded = document.getElementById(\"sortTimeAdded\");\nlet currentSortMethod = localStorage.getItem(\"bookmarkSortMethod\") || 'title';\n\nvar bookmarksAPI;\nif (isFirefox) {\n    bookmarksAPI = browser.bookmarks;\n} else if (isChromiumBased) {\n    bookmarksAPI = chrome.bookmarks;\n}\n\n// Initialize sort buttons\nupdateSortButtons();\n\nbookmarkButton.addEventListener(\"click\", function () {\n    toggleBookmarkSidebar();\n    bookmarkSearchClearButton.click();\n    bookmarkSearch.focus();\n});\n\nbookmarkViewGrid.addEventListener(\"click\", function () {\n    if (!bookmarkGridCheckbox.checked) bookmarkGridCheckbox.click();\n});\n\nbookmarkViewList.addEventListener(\"click\", function () {\n    if (bookmarkGridCheckbox.checked) bookmarkGridCheckbox.click();\n});\n\ndocument.addEventListener(\"click\", function (event) {\n    const modalContainer = document.getElementById(\"prompt-modal-container\");\n    // If modal is open, don't close the sidebar\n    if (modalContainer && modalContainer.style.display === \"flex\") {\n        return;\n    }\n\n    if (\n        !bookmarkSidebar.contains(event.target) &&\n        !bookmarkButton.contains(event.target) &&\n        !editBookmarkModal.contains(event.target) &&\n        bookmarkSidebar.classList.contains(\"open\")\n    ) {\n        toggleBookmarkSidebar();\n\n        if (editBookmarkModal.style.display !== \"none\") {\n            editBookmarkModal.style.display = \"none\";\n        }\n    }\n});\n\n// Search Functionality\nbookmarkSearch.addEventListener(\"input\", function () {\n    const searchTerm = bookmarkSearch.value.toLowerCase();\n    const bookmarks = bookmarkList.querySelectorAll(\"li[data-url], li.folder\"); // Include both bookmarks and folders\n\n    Array.from(bookmarks).forEach(function (bookmark) {\n        const text = bookmark.textContent.toLowerCase();\n        const url = bookmark.dataset.url ? bookmark.dataset.url.toLowerCase() : \"\";\n        const isFolder = bookmark.classList.contains(\"folder\");\n\n        // Show bookmarks if the search term matches either the name or the URL\n        if (!isFolder && (text.includes(searchTerm) || url.includes(searchTerm))) {\n            bookmark.style.display = \"\"; // Show matching bookmarks\n        } else if (isFolder) {\n            // For folders, check if any child bookmarks match the search\n            const childBookmarks = bookmark.querySelectorAll(\"li[data-url]\");\n            let hasVisibleChild = false;\n            Array.from(childBookmarks).forEach(function (childBookmark) {\n                const childText = childBookmark.textContent.toLowerCase();\n                const childUrl = childBookmark.dataset.url ? childBookmark.dataset.url.toLowerCase() : \"\";\n                if (childText.includes(searchTerm) || childUrl.includes(searchTerm)) {\n                    hasVisibleChild = true;\n                    childBookmark.style.display = \"\"; // Show matching child bookmarks\n                } else {\n                    childBookmark.style.display = \"none\"; // Hide non-matching child bookmarks\n                }\n            });\n\n            if (hasVisibleChild) {\n                bookmark.style.display = \"\"; // Show folder if it has matching child bookmarks\n                bookmark.classList.add(\"open\"); // Open folder to show matching child bookmarks\n            } else {\n                bookmark.style.display = \"none\"; // Hide folder if no child matches\n                bookmark.classList.remove(\"open\");\n            }\n        } else {\n            bookmark.style.display = \"none\"; // Hide non-matching bookmarks\n        }\n    });\n\n    if (searchTerm === \"\") {\n        // Reset display for all bookmarks and folders\n        Array.from(bookmarks).forEach(function (bookmark) {\n            bookmark.style.display = \"\";\n            if (bookmark.classList.contains(\"folder\")) {\n                bookmark.classList.remove(\"open\");\n                const childList = bookmark.querySelector(\"ul\");\n                if (childList) {\n                    childList.classList.add(\"hidden\");\n                }\n            }\n        });\n    }\n\n    // Show or hide the clear button based on the search term\n    bookmarkSearchClearButton.style.display = searchTerm ? \"inline\" : \"none\";\n});\n\n// Sorting functionality\nsortAlphabetical.addEventListener(\"click\", function () {\n    if (!this.classList.contains(\"active\")) {\n        currentSortMethod = 'title';\n        localStorage.setItem(\"bookmarkSortMethod\", \"title\");\n        updateSortButtons();\n        loadBookmarks();\n    }\n});\n\nsortTimeAdded.addEventListener(\"click\", function () {\n    if (!this.classList.contains(\"active\")) {\n        currentSortMethod = 'date';\n        localStorage.setItem(\"bookmarkSortMethod\", \"date\");\n        updateSortButtons();\n        loadBookmarks();\n    }\n});\n\nfunction updateSortButtons() {\n    sortAlphabetical.classList.toggle(\"active\", currentSortMethod === 'title');\n    sortTimeAdded.classList.toggle(\"active\", currentSortMethod === 'date');\n}\n\n\nbookmarkSearchClearButton.addEventListener(\"click\", function () {\n    bookmarkSearch.value = \"\";\n    bookmarkSearch.dispatchEvent(new Event(\"input\")); // Trigger input event to clear search results\n});\n\nfunction updateBookmarkUI(enabled) {\n    bookmarksCheckbox.checked = enabled;\n    bookmarkButton.style.display = enabled ? \"flex\" : \"none\";\n    saveDisplayStatus(\"bookmarksDisplayStatus\", enabled ? \"flex\" : \"none\");\n    saveCheckboxState(\"bookmarksCheckboxState\", bookmarksCheckbox);\n}\n\nasync function verifyBookmarkPermission() {\n    // Early exit for unsupported browsers\n    let bookmarksPermission;\n    if (isFirefox) bookmarksPermission = browser.permissions;\n    else if (isChromiumBased) bookmarksPermission = chrome.permissions;\n\n    if (!bookmarksPermission) {\n        await alertPrompt(translations[currentLanguage]?.UnsupportedBrowser ||\n            translations['en'].UnsupportedBrowser);\n        updateBookmarkUI(false);\n        return false;\n    }\n\n    // Firefox always has permission\n    if (isFirefox) {\n        updateBookmarkUI(true);\n        return true;\n    }\n\n    // Chromium-based browsers\n    // Opera doesn't have favicon permission yet\n    const requiredPermissions = isOpera ? [\"bookmarks\"] : [\"bookmarks\", \"favicon\"];\n\n    const hasPermission = await new Promise(resolve =>\n        chrome.permissions.contains({ permissions: requiredPermissions }, resolve));\n\n    if (!hasPermission) {\n        const granted = await new Promise(resolve =>\n            chrome.permissions.request({ permissions: requiredPermissions }, resolve));\n\n        if (!granted) {\n            updateBookmarkUI(false);\n            return false;\n        }\n        bookmarksAPI = chrome.bookmarks; // Initialize if just granted\n    }\n\n    // Success case\n    updateBookmarkUI(true);\n    return true;\n}\n\nasync function toggleBookmarkSidebar() {\n    const hasPermission = await verifyBookmarkPermission();\n    if (hasPermission) {\n        bookmarkSidebar.classList.toggle(\"open\");\n        bookmarkButton.classList.toggle(\"rotate\");\n\n        if (bookmarkSidebar.classList.contains(\"open\")) {\n            loadBookmarks();\n        }\n    }\n}\n\n// Function to load bookmarks\nfunction loadBookmarks() {\n    if (!bookmarksAPI?.getTree) {\n        console.error(\"Bookmarks API is unavailable. Please check permissions or context.\");\n        return;\n    }\n\n    bookmarksAPI.getTree().then(bookmarkTreeNodes => {\n        // Clear the current list\n        bookmarkList.innerHTML = \"\";\n\n        // Display the \"Recently Added\" folder\n        if (bookmarksAPI.getRecent) {\n            bookmarksAPI.getRecent(8).then(recentBookmarks => {\n                if (recentBookmarks.length > 0) {\n                    const recentAddedFolder = {\n                        title: translations[currentLanguage]?.recentlyAddedBookmarks || translations[\"en\"]?.recentlyAddedBookmarks,\n                        children: recentBookmarks\n                    };\n                    bookmarkList.appendChild(displayBookmarks([recentAddedFolder]));\n                }\n            });\n        }\n\n        // For Firefox: \"Bookmarks Menu\" and \"Other Bookmarks\" are distinct nodes\n        if (isFirefox) {\n            const toolbarNode = bookmarkTreeNodes[0]?.children?.find(node => node.title === \"Bookmarks Toolbar\");\n            const menuNode = bookmarkTreeNodes[0]?.children?.find(node => node.title === \"Bookmarks Menu\");\n            const otherNode = bookmarkTreeNodes[0]?.children?.find(node => node.title === \"Other Bookmarks\");\n\n            if (toolbarNode?.children) bookmarkList.appendChild(displayBookmarks(toolbarNode.children));\n            if (menuNode?.children) bookmarkList.appendChild(displayBookmarks(menuNode.children));\n            if (otherNode?.children) bookmarkList.appendChild(displayBookmarks(otherNode.children));\n        }\n        else {\n            let default_folder = \"Bookmarks bar\";\n            if (isEdge) default_folder = \"Favorites bar\";\n            if (isBrave) default_folder = \"Bookmarks\";\n\n            // Get the children of the root bookmark folder\n            const rootChildren = bookmarkTreeNodes[0]?.children || [];\n\n            // Find and process the default bookmarks folder\n            const mainBookmarks = rootChildren.find(node =>\n                node.title === default_folder ||\n                node.folderType === \"bookmarks-bar\"\n            );\n\n            // If the default folder has children, display its bookmarks\n            if (mainBookmarks?.children) {\n                bookmarkList.appendChild(displayBookmarks(mainBookmarks.children));\n            }\n\n            // Process all other root-level folders\n            rootChildren.forEach(node => {\n                if (node !== mainBookmarks && node.id !== \"1\" && node.children) {\n                    bookmarkList.appendChild(displayBookmarks([node]));\n                }\n            });\n        }\n    }).catch(err => {\n        console.error(\"Error loading bookmarks:\", err);\n    });\n}\n\n// Function to set the favicon for a bookmark\nfunction setBookmarkFavicon(faviconElement, pageUrl) {\n    // Final fallback to local offline icon\n    const offlineFallback = () => faviconElement.src = \"./svgs/offline.svg\";\n\n    // Google favicon api fallback\n    const googleFallback = () => {\n        faviconElement.src = `https://www.google.com/s2/favicons?domain=${new URL(pageUrl).hostname}&sz=32`;\n        faviconElement.onerror = offlineFallback;\n    };\n\n    // Try browser-specific favicon first (Chromium only)\n    if (!isFirefox || !isOpera) {\n        faviconElement.src = `chrome-extension://${chrome.runtime.id}/_favicon/?pageUrl=${encodeURIComponent(pageUrl)}&size=32`;\n        faviconElement.onerror = googleFallback;\n    } else {\n        googleFallback();\n    }\n}\n\nfunction displayBookmarks(bookmarkNodes) {\n    let list = document.createElement(\"ul\");\n\n    // Separate folders and bookmarks\n    const folders = bookmarkNodes.filter(node => node.children && node.children.length > 0);\n    const bookmarks = bookmarkNodes.filter(node => node.url);\n\n    // Sorting folders and bookmarks separately by title or dateAdded\n    if (currentSortMethod === 'title') {\n        folders.sort((a, b) => a.title.localeCompare(b.title));\n        bookmarks.sort((a, b) => a.title.localeCompare(b.title));\n    } else {\n        folders.sort((a, b) => (a.dateAdded || 0) - (b.dateAdded || 0));\n        bookmarks.sort((a, b) => (a.dateAdded || 0) - (b.dateAdded || 0));\n    }\n\n    // Combine folders and bookmarks\n    const sortedNodes = [...bookmarks, ...folders];\n\n    for (let node of sortedNodes) {\n        if (node.id === \"1\") continue;\n\n        if (node.children && node.children.length > 0) {\n            let folderItem = document.createElement(\"li\");\n\n            folderItem.dataset.id = node.id; // Add ID as dataset for context menu\n\n            // Use the SVG icon from HTML\n            const folderIcon = document.getElementById(\"folderIconTemplate\").cloneNode(true);\n            folderIcon.removeAttribute(\"id\"); // Remove the id to prevent duplicates\n            folderItem.appendChild(folderIcon);\n\n            folderItem.appendChild(document.createTextNode(node.title));\n            folderItem.classList.add(\"folder\", \"open\");\n\n            // Add event listener for unfolding/folding\n            folderItem.addEventListener(\"click\", function (event) {\n                event.stopPropagation();\n                folderItem.classList.toggle(\"open\");\n                const subList = folderItem.querySelector(\"ul\");\n                if (subList) {\n                    subList.classList.toggle(\"hidden\");\n                }\n            });\n\n            let subList = displayBookmarks(node.children);\n            folderItem.appendChild(subList);\n\n            list.appendChild(folderItem);\n        } else if (node.url) {\n            let item = document.createElement(\"li\");\n            item.dataset.id = node.id; // Add ID as dataset for context menu\n            item.dataset.url = node.url; // Add URL as dataset for search functionality\n            let link = document.createElement(\"a\");\n            link.href = node.url;\n            let span = document.createElement(\"span\");\n            span.textContent = node.title;\n\n            const favicon = document.createElement(\"img\");\n            setBookmarkFavicon(favicon, node.url);\n            favicon.classList.add(\"favicon\");\n\n            // Create the delete button\n            let deleteButton = document.createElement(\"button\");\n            deleteButton.textContent = \"✖\";\n            deleteButton.classList.add(\"bookmark-delete-button\");\n\n            deleteButton.addEventListener(\"click\", async function (event) {\n                event.preventDefault();\n                event.stopPropagation();\n\n                const confirmMessage = (translations[currentLanguage]?.deleteBookmark || translations[\"en\"].deleteBookmark)\n                    .replace(\"{title}\", node.title || node.url);\n\n                if (await confirmPrompt(confirmMessage)) {\n                    if (isFirefox) {\n                        // Firefox API (Promise-based)\n                        bookmarksAPI.remove(node.id).then(() => {\n                            item.remove(); // Remove the item from the DOM\n                        }).catch(err => {\n                            console.error(\"Error removing bookmark:\", err);\n                        });\n                    } else {\n                        // Chrome API (Callback-based)\n                        bookmarksAPI.remove(node.id, function () {\n                            item.remove(); // Remove the item from the DOM\n                        });\n                    }\n                }\n            });\n\n            link.appendChild(favicon);\n            link.appendChild(span);\n            item.appendChild(link);\n            item.appendChild(deleteButton); // Add delete button to the item\n\n            // Open links in the current tab or new tab if ctrl pressed\n            link.addEventListener(\"click\", function (event) {\n                if (event.ctrlKey || event.metaKey) {\n                    // Open in a new tab\n                    event.preventDefault();\n                    if (isFirefox) {\n                        browser.tabs.create({ url: node.url, active: false });\n                    } else if (isChromiumBased) {\n                        chrome.tabs.create({ url: node.url, active: false });\n                    } else {\n                        window.open(node.url, \"_blank\");\n                    }\n                } else {\n                    // Open in the current tab\n                    event.preventDefault();\n                    if (isFirefox) {\n                        browser.tabs.update({ url: node.url });\n                    } else if (isChromiumBased) {\n                        chrome.tabs.update({ url: node.url }, function () {\n                        });\n                    } else {\n                        window.location.href = node.url;\n                    }\n                }\n            });\n            list.appendChild(item);\n        }\n    }\n\n    list.addEventListener(\"click\", function (event) {\n        event.stopPropagation();\n    });\n\n    return list;\n}\n\n// Right-click (context menu) event\nbookmarkList.addEventListener(\"contextmenu\", function (event) {\n    event.preventDefault(); // Prevent default right-click menu\n\n    const bookmarkItem = event.target.closest(\"li[data-id]\");\n    if (!bookmarkItem) return;\n\n    currentBookmarkId = bookmarkItem.dataset.id;\n    const bookmarkTitle = bookmarkItem.querySelector(\"a\").textContent.trim();\n    const bookmarkURL = bookmarkItem.dataset.url;\n\n    // Populate modal fields\n    editBookmarkName.value = bookmarkTitle;\n    editBookmarkURL.value = bookmarkURL;\n    setBookmarkFavicon(editBookmarkFavicon, bookmarkURL);\n\n    // Show modal\n    editBookmarkModal.style.display = \"block\";\n    saveBookmarkChanges.disabled = false;\n});\n\n// Disable save button if URL is empty\neditBookmarkURL.addEventListener(\"input\", () => {\n    saveBookmarkChanges.disabled = editBookmarkURL.value.trim() === \"\";\n});\n\n// Save button action\nsaveBookmarkChanges.onclick = function () {\n    if (!currentBookmarkId) return;\n\n    const updatedTitle = editBookmarkName.value.trim();\n    const updatedURL = encodeURI(editBookmarkURL.value.trim());\n\n    const updatedData = { title: updatedTitle, url: updatedURL };\n\n    if (isFirefox) {\n        bookmarksAPI.update(currentBookmarkId, updatedData).then(() => {\n            updateBookmark(currentBookmarkId, updatedTitle, updatedURL);\n            editBookmarkModal.style.display = \"none\";\n        }).catch(err => {\n            console.error(\"Error updating bookmark:\", err);\n        });\n    } else {\n        bookmarksAPI.update(currentBookmarkId, updatedData, function () {\n            if (chrome.runtime.lastError) {\n                console.error(\"Error updating bookmark:\", chrome.runtime.lastError);\n                return;\n            }\n            updateBookmark(currentBookmarkId, updatedTitle, updatedURL);\n            editBookmarkModal.style.display = \"none\";\n        });\n    }\n\n    loadBookmarks();\n};\n\n// Cancel button action\ncancelBookmarkEdit.onclick = function () {\n    editBookmarkModal.style.display = \"none\";\n};\n\n// Function to update after edit\nfunction updateBookmark(bookmarkId, title, url) {\n    const bookmarkItem = document.querySelector(`li[data-id=\"${bookmarkId}\"]`);\n    if (bookmarkItem) {\n        const link = bookmarkItem.querySelector(\"a\");\n        link.textContent = title;\n        link.href = url;\n        bookmarkItem.dataset.url = url;\n    }\n}\n\n// Move focus to URL field when Enter is pressed in Name field\neditBookmarkName.addEventListener(\"keydown\", (event) => {\n    if (event.key === \"Enter\") {\n        event.preventDefault();\n        editBookmarkURL.focus();\n    }\n});\n\n// Trigger Save button when Enter is pressed in URL field\neditBookmarkURL.addEventListener(\"keydown\", (event) => {\n    if (event.key === \"Enter\") {\n        event.preventDefault();\n        if (!saveBookmarkChanges.disabled) {\n            saveBookmarkChanges.click();\n        }\n    }\n});\n\n// ------------------------ End of Bookmark System -----------------------------------\n\n// Save and load the state of the bookmarks toggle\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n    bookmarksCheckbox.addEventListener(\"change\", async function () {\n        if (!bookmarksCheckbox.checked) {\n            updateBookmarkUI(false);\n            return;\n        }\n        await verifyBookmarkPermission();\n    });\n\n    bookmarkGridCheckbox.addEventListener(\"change\", function () {\n        saveCheckboxState(\"bookmarkGridCheckboxState\", bookmarkGridCheckbox);\n        if (bookmarkGridCheckbox.checked) {\n            bookmarkList.classList.add(\"grid-view\");\n        } else {\n            bookmarkList.classList.remove(\"grid-view\");\n        }\n    });\n\n    loadCheckboxState(\"bookmarksCheckboxState\", bookmarksCheckbox);\n    loadDisplayStatus(\"bookmarksDisplayStatus\", bookmarkButton);\n    loadCheckboxState(\"bookmarkGridCheckboxState\", bookmarkGridCheckbox);\n});\n\n// Keyboard shortcut for bookmarks\ndocument.addEventListener(\"keydown\", function (event) {\n    // Prevent shortcut if modal or menu is open\n    const modalContainer = document.getElementById(\"prompt-modal-container\");\n    if (modalContainer?.style.display === \"flex\" || menuBar.style.display !== \"none\") {\n        return;\n    }\n\n    if (bookmarksCheckbox.checked &&\n        event.key === \"ArrowRight\" &&\n        !event.repeat &&\n        event.target.tagName !== \"INPUT\" &&\n        event.target.tagName !== \"TEXTAREA\" &&\n        event.target.isContentEditable !== true\n    ) {\n        bookmarkButton.click();\n    }\n});\n"
  },
  {
    "path": "scripts/browser-utils.js",
    "content": "/*\n * Material You NewTab\n * Copyright (c) 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program.\n * If not, see <https://www.gnu.org/licenses/>.\n */\n\n// Constants to detect the browser and platform details\n\n// Check if the browser is Firefox\nconst isFirefox = typeof browser !== \"undefined\" && navigator.userAgent.toLowerCase().includes(\"firefox\");\n\nconst isFirefoxAll = navigator.userAgent.toLowerCase().includes(\"firefox\"); // For website and live preview\n\n// Check if the browser is Chromium-based\nconst isChromiumBased = !!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime) && !isFirefox;\n\n// Check if the browser is Edge\nconst isEdge = /Edg/.test(navigator.userAgent);\n\n// Check if the browser is Brave\nconst isBrave = !!(navigator.brave && navigator.brave.isBrave());\n\n// Check if the browser is Opera\nconst isOpera = /OPR/.test(navigator.userAgent);\n\n// Check if the browser is Chrome\nconst isChrome = (/Chrome|CriOS/.test(navigator.userAgent)) && /Google Inc/.test(navigator.vendor) && !isEdge && !isBrave && !isOpera;\n\n// Check if the browser is Safari\nconst isSafari = /Safari/.test(navigator.userAgent) && !isChromiumBased && /Apple Computer/.test(navigator.vendor);\n\n// Check if the operating system is macOS\nconst isMac = /Macintosh|MacIntel|MacPPC|Mac68K/.test(navigator.platform);\n\n// Check if the device is a desktop (not mobile)\nconst isDesktop = !/Android|iPhone|iPad|iPod/.test(navigator.userAgent);\n"
  },
  {
    "path": "scripts/clock.js",
    "content": "/*\n * Material You NewTab\n * Copyright (c) 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program.\n * If not, see <https://www.gnu.org/licenses/>.\n */\n\n// Global variables to track intervals and last date strings\nlet analogIntervalId = null;\nlet digitalIntervalId = null;\nlet lastDateString = null;\nlet lastDigitalDateString = null;\nlet lastGreetingString = null;\n\n// ---------------------- Hiding clock func ----------------------\n// Select elements\nconst leftDiv = document.getElementById(\"leftDiv\");\nconst rightDiv = document.getElementById(\"rightDiv\");\nconst hideClockCheckbox = document.getElementById(\"hideClock\");\nconst clockHidden = document.getElementById(\"clockHidden\");\nconst clockOptions = document.querySelector(\".clockOptions\");\n\nfunction toggleHideState(isHidden) {\n    clockOptions.classList.toggle(\"not-applicable\", isHidden);\n\n    if (isHidden)\n        setTimeout(() => clockHidden.style.borderBottom = \"none\", 120);\n    else\n        clockHidden.style.borderBottom = \"\";\n}\n\nfunction applyClockState(isHidden) {\n    leftDiv.classList.toggle(\"clock-hidden-left\", isHidden);\n    rightDiv.classList.toggle(\"clock-shifted-right\", isHidden);\n    rightDiv.classList.toggle(\"clock-shifted-right-wide\", !isHidden);\n    rightDiv.classList.toggle(\"clock-padding-adjusted\", isHidden);\n}\n\nfunction handleClockVisibility() {\n    if (window.matchMedia(\"(max-width: 500px)\").matches) {\n        initializeClock();\n\n        clockOptions.classList.remove(\"not-applicable\");\n        rightDiv.classList.remove(\"clock-padding-adjusted\");\n    }\n    else {\n        // Retrieve saved state from localStorage\n        const isClockHidden = localStorage.getItem(\"hideClockVisible\") === \"true\";\n        hideClockCheckbox.checked = isClockHidden;\n\n        // Apply initial state\n        applyClockState(isClockHidden);\n        toggleHideState(isClockHidden);\n\n        if (!isClockHidden) {\n            initializeClock();\n        }\n\n        hideClockCheckbox.addEventListener(\"change\", function () {\n            const isChecked = hideClockCheckbox.checked;\n            localStorage.setItem(\"hideClockVisible\", isChecked);\n            applyClockState(isChecked);\n            toggleHideState(isChecked);\n\n            if (!isChecked) {\n                initializeClock();\n            }\n        });\n    }\n}\n\nhandleClockVisibility();\n// Update on window resize\nwindow.addEventListener(\"resize\", handleClockVisibility);\n\n// ---------------------- Clock func ----------------------\nasync function initializeClock() {\n    // Clear any existing intervals first\n    if (analogIntervalId) {\n        clearInterval(analogIntervalId);\n        analogIntervalId = null;\n    }\n    if (digitalIntervalId) {\n        clearInterval(digitalIntervalId);\n        digitalIntervalId = null;\n    }\n\n    let clocktype;\n\n    // Track cumulative rotations\n    let cumulativeSecondRotation = 0;\n    let cumulativeMinuteRotation = 0;\n    let cumulativeHourRotation = 0;\n\n    // Initialize on first load\n    let isFirstLoad = true;\n\n    // Retrieve current time and calculate initial angles\n    var currentTime = new Date();\n    var initialSeconds = currentTime.getSeconds();\n    var initialMinutes = currentTime.getMinutes();\n    var initialHours = currentTime.getHours();\n\n    // Initialize cumulative rotations\n    cumulativeSecondRotation = initialSeconds * 6;\n    cumulativeMinuteRotation = initialMinutes * 6 + (initialSeconds / 10);\n    cumulativeHourRotation = (30 * initialHours + initialMinutes / 2);\n\n    // Apply initial rotations (no need to wait 1s now)\n    document.getElementById(\"second\").style.transform = `rotate(${cumulativeSecondRotation}deg)`;\n    document.getElementById(\"minute\").style.transform = `rotate(${cumulativeMinuteRotation}deg)`;\n    document.getElementById(\"hour\").style.transform = `rotate(${cumulativeHourRotation}deg)`;\n\n    function initializeClockType() {\n        const savedClockType = localStorage.getItem(\"clocktype\");\n        clocktype = savedClockType ? savedClockType : \"analog\"; // Default to \"analog\" if nothing is saved\n        localStorage.setItem(\"clocktype\", clocktype); // Ensure it's set in local storage\n    }\n\n    // Call this function to initialize the clock type\n    initializeClockType();\n\n    function updateDate() {\n        if (clocktype === \"analog\") {\n            var currentTime = new Date();\n            var dayOfWeek = currentTime.getDay();\n            var dayOfMonth = currentTime.getDate();\n            var month = currentTime.getMonth();\n\n            // Define the current language\n            const currentLanguage = getLanguageStatus(\"selectedLanguage\") || \"en\";\n\n            // Get the translated name of the day\n            var dayName = translations[currentLanguage]?.days?.[dayOfWeek] ?? translations[\"en\"].days[dayOfWeek];\n\n            // Get the translated name of the month\n            var monthName = translations[currentLanguage]?.months?.[month] ?? translations[\"en\"].months[month];\n\n            // Localize the day of the month\n            var localizedDayOfMonth = localizeNumbers(dayOfMonth.toString(), currentLanguage);\n\n            // DATE DISPLAY FOR ANALOG CLOCK\n            const dateDisplay = {\n                bn: `${dayName}, ${localizedDayOfMonth} ${monthName}`,\n                mr: `${dayName}, ${localizedDayOfMonth} ${monthName}`,\n                ne: `${dayName}, ${localizedDayOfMonth} ${monthName}`,\n                zh: `${month + 1}月${dayOfMonth}日，${dayName}`,\n                zh_TW: `${month + 1}月${dayOfMonth}日，${dayName}`,\n                cs: `${dayName}, ${dayOfMonth}. ${monthName}`,\n                hi: `${dayName}, ${dayOfMonth} ${monthName}`,\n                it: `${dayName.substring(0, 3)} ${dayOfMonth} ${monthName.substring(0, 3)}`,\n                ja: `${monthName} ${dayOfMonth}日(${dayName.substring(0, 1)})`,\n                ko: `${monthName} ${dayOfMonth}일(${dayName.substring(0, 1)})`,\n                pl: `${dayName}, ${dayOfMonth}. ${monthName}`,\n                pt: `${dayName.substring(0, 3)}, ${dayOfMonth} ${monthName.substring(0, 3)}`,\n                ru: `${dayName}, ${dayOfMonth} ${monthName}`,\n                es: `${dayName.substring(0, 3)}, ${dayOfMonth} ${monthName.substring(0, 3)}`,\n                tr: `${dayName.substring(0, 3)}, ${dayOfMonth} ${monthName}`,\n                uz: `${dayName.substring(0, 3)}, ${dayOfMonth}-${monthName}`,\n                vi: `${dayName}, ngày ${dayOfMonth} ${monthName}`,\n                idn: `${dayName}, ${dayOfMonth} ${monthName}`,\n                fr: `${dayName.substring(0, 3)}, ${dayOfMonth} ${monthName.substring(0, 3)}`, // Jeudi, 5 avril\n                az: `${dayName.substring(0, 3)}, ${dayOfMonth} ${monthName.substring(0, 3)}`,\n                sl: `${dayName}, ${dayOfMonth}. ${monthName.substring(0, 3)}.`,\n                hu: `${monthName.substring(0, 3)} ${dayOfMonth}, ${dayName}`,\t// Dec 22, Kedd\n                ta: `${monthName} ${localizedDayOfMonth}, ${dayName}`,\t// e.g.,மார்கழி 31, ஞாயிறு\n                ur: `${dayName}، ${dayOfMonth} ${monthName}`,\n                de: `${dayName}, ${dayOfMonth}. ${monthName}`,\n                fa: `${dayName}، ${localizedDayOfMonth} ${monthName}`, // e.g., شنبه، ۲۵ اسفند\n                ar_SA: `${dayName}, ${localizedDayOfMonth} ${monthName}`,\t// e.g., الجمعة, 31 مايو\n                el: `${dayName.substring(0, 3)} ${dayOfMonth} ${monthName}`, // Κυρ 22 Δεκ\n                th: `วัน${dayName}ที่ ${dayOfMonth} ${monthName}`, // วันอาทิตย์ที่ 22 ธันวาคม\n                uk: `${dayName}, ${dayOfMonth} ${monthName.substring(0, 4)}`,\n                sv: `${dayName.substring(0, 3)} ${dayOfMonth} ${monthName.substring(0, 3)}`, // Sön 19 Apr\n                default: `${dayName.substring(0, 3)}, ${monthName.substring(0, 3)} ${dayOfMonth}`\t// Sun, Dec 22\n            };\n\n            const newDateString = dateDisplay[currentLanguage] || dateDisplay.default;\n            // Update date if date actually changed or if it's the first time\n            if (newDateString !== lastDateString) {\n                document.getElementById(\"date\").innerText = newDateString;\n                lastDateString = newDateString;\n            }\n        }\n    }\n\n    // Helper function to update hand rotation smoothly\n    function updateHandRotation(handId, newRotation, currentTotal, isResetCondition) {\n        let newTotal;\n\n        // Always calculate the shortest path for smooth transitions\n        const diff = newRotation - (currentTotal % 360);\n\n        if (isFirstLoad) {\n            // On first load, just set the initial position\n            newTotal = newRotation;\n        } else if (isResetCondition && Math.abs(diff + 360) < Math.abs(diff)) {\n            // When resetting (like 59s→0s), choose the forward path if it's shorter\n            newTotal = newRotation + (Math.floor(currentTotal / 360) + 1) * 360;\n        } else {\n            // Normal case - maintain current rotation count\n            newTotal = newRotation + Math.floor(currentTotal / 360) * 360;\n        }\n\n        // Apply the smooth transition\n        document.getElementById(handId).style.transition = \"transform 1s ease\";\n        document.getElementById(handId).style.transform = `rotate(${newTotal}deg)`;\n\n        return newTotal;\n    }\n\n    function updateanalogclock() {\n        var currentTime = new Date();\n        var currentSeconds = currentTime.getSeconds();\n        var currentMinutes = currentTime.getMinutes();\n        var currentHours = currentTime.getHours();\n\n        // Calculate the new rotation values\n        let newSecondRotation = currentSeconds * 6; // 6° per second\n        let newMinuteRotation = currentMinutes * 6 + (currentSeconds / 10); // 6° per minute + adjustment for seconds\n        let newHourRotation = (30 * (currentHours % 12) + currentMinutes / 2); // 30° per hour + adjustment for minutes, 12-hour cycle\n\n        // Define reset conditions\n        const secondReset = currentSeconds === 0;\n        const minuteReset = currentMinutes === 0 && currentSeconds === 0;\n        const hourReset = currentHours % 12 === 0 && currentMinutes === 0 && currentSeconds === 0;\n\n        // Update each hand using the helper function\n        cumulativeSecondRotation = updateHandRotation(\"second\", newSecondRotation, cumulativeSecondRotation, secondReset);\n        cumulativeMinuteRotation = updateHandRotation(\"minute\", newMinuteRotation, cumulativeMinuteRotation, minuteReset);\n        cumulativeHourRotation = updateHandRotation(\"hour\", newHourRotation, cumulativeHourRotation, hourReset);\n\n        // Mark that we're no longer on first load\n        isFirstLoad = false;\n\n        // Update date immediately\n        updateDate();\n    }\n\n    function getGreeting() {\n        const currentHour = new Date().getHours();\n        let greetingKey;\n\n        // Determine the greeting key based on the current hour\n        if (currentHour < 12) {\n            greetingKey = \"morning\";\n        } else if (currentHour < 17) {\n            greetingKey = \"afternoon\";\n        } else {\n            greetingKey = \"evening\";\n        }\n\n        // Get the user's language setting\n        const currentLanguage = getLanguageStatus(\"selectedLanguage\") || \"en\"; // Default to English\n\n        // Return the translated greeting is available\n        return translations[currentLanguage]?.greeting?.[greetingKey] ?? translations[\"en\"].greeting[greetingKey];\n    }\n\n    function updatedigiClock() {\n        const hourformatstored = localStorage.getItem(\"hourformat\");\n        let hourformat = hourformatstored === \"true\"; // Default to false if null\n        const greetingCheckbox = document.getElementById(\"greetingcheckbox\");\n        const isGreetingEnabled = localStorage.getItem(\"greetingEnabled\") === \"true\";\n        greetingCheckbox.checked = isGreetingEnabled;\n\n        const now = new Date();\n        const dayOfWeek = now.getDay(); // Get day of the week (0-6)\n        const dayOfMonth = now.getDate(); // Get current day of the month (1-31)\n\n        const currentLanguage = getLanguageStatus(\"selectedLanguage\") || \"en\";\n\n        // Get translated day name\n        let dayName = translations[currentLanguage]?.days?.[dayOfWeek] ?? translations[\"en\"].days[dayOfWeek];\n\n        // Localize the day of the month\n        const localizedDayOfMonth = localizeNumbers(dayOfMonth.toString(), currentLanguage);\n\n        // DATE DISPLAY FOR DIGITAL CLOCK\n        const dateFormats = {\n            az: `${dayName} ${dayOfMonth}`,\n            bn: `${dayName}, ${localizedDayOfMonth}`,\n            mr: `${dayName}, ${localizedDayOfMonth}`,\n            ne: `${dayName}, ${localizedDayOfMonth}`,\n            zh: `${dayOfMonth}日${dayName}`,\n            zh_TW: `${dayOfMonth}日${dayName}`,\n            cs: `${dayName}, ${dayOfMonth}.`,\n            hi: `${dayName}, ${dayOfMonth}`,\n            ja: `${dayOfMonth}日 (${dayName[0]})`,\n            ko: `${dayOfMonth}일 (${dayName[0]})`,\n            pl: `${dayName}, ${dayOfMonth}`,\n            pt: `${dayName}, ${dayOfMonth}`,\n            ru: `${dayOfMonth} ${dayName}`,\n            ta: `${localizedDayOfMonth} ${dayName.substring(0, 2)}`,\n            vi: `${dayOfMonth} ${dayName}`,\n            idn: `${dayOfMonth} ${dayName}`,\n            fr: `${dayName} ${dayOfMonth}`, // Mardi 11\n            hu: `${dayName} ${dayOfMonth}`, // Kedd 11\n            ur: `${dayName}، ${dayOfMonth}`,\n            de: `${dayOfMonth}. ${dayName}`,\n            fa: `${dayName} ${localizedDayOfMonth}`, // e.g. شنبه ۲۵\n            ar_SA: `${dayName}, ${localizedDayOfMonth}`,\t// e.g., الجمعة, 31\n            el: `${dayName.substring(0, 3)} ${dayOfMonth}`, // Κυρ 22\n            th: `${dayName}ที่ ${dayOfMonth}`,\n            uk: `${dayOfMonth} ${dayName}`,\n            default: `${dayOfMonth} ${dayName.substring(0, 3)}`,\t// 24 Thu\n        };\n\n        const newDigitalDateString = dateFormats[currentLanguage] || dateFormats.default;\n        // Update date if date actually changed or if it's the first time\n        if (newDigitalDateString !== lastDigitalDateString) {\n            document.getElementById(\"digidate\").textContent = newDigitalDateString;\n            lastDigitalDateString = newDigitalDateString;\n        }\n\n        // Handle time formatting based on the selected language\n        let timeString;\n        let period = \"\"; // For storing AM/PM equivalent\n\n        // Array of languages to use \"en-US\" format\n        const specialLanguages = [\"tr\", \"zh\", \"zh_TW\", \"ja\", \"ko\", \"hu\"]; // Languages with NaN in locale time format\n        const localizedLanguages = Object.keys(numberMappings);\n        // Force the \"en-US\" format for numeral-localized languages, otherwise, it will be localized twice, resulting in NaN\n\n        // Set time options and determine locale based on the current language\n        const timeOptions = { hour: \"2-digit\", minute: \"2-digit\", hour12: hourformat };\n        const locale = specialLanguages.includes(currentLanguage) || localizedLanguages.includes(currentLanguage) ? \"en-US\" : currentLanguage;\n        timeString = now.toLocaleTimeString(locale, timeOptions);\n\n        // Split the time and period (AM/PM) if in 12-hour format\n        if (hourformat) {\n            [timeString, period] = timeString.split(\" \"); // Split AM/PM if present\n        }\n\n        // Split the hours and minutes from the localized time string\n        let [hours, minutes] = timeString.split(\":\");\n\n        // Remove leading zero from hours in 12-hour format\n        if (hourformat) {\n            hours = parseInt(hours, 10).toString(); // Remove leading zero\n        }\n\n        // Localize hours and minutes for the selected language\n        const localizedHours = localizeNumbers(hours, currentLanguage);\n        const localizedMinutes = localizeNumbers(minutes, currentLanguage);\n\n        // Update the hour, colon, and minute text elements\n        document.getElementById(\"digihours\").textContent = localizedHours;\n        document.getElementById(\"digicolon\").textContent = \":\";\n        document.getElementById(\"digiminutes\").textContent = localizedMinutes;\n\n        if (isFirefoxAll)\n            document.getElementById(\"digicolon\").classList.add(\"no-blink\");\n\n        // Manually set the period for special languages if 12-hour format is enabled\n        if (hourformat && (specialLanguages.includes(currentLanguage) || localizedLanguages.includes(currentLanguage))) {\n            let realHours = new Date().getHours();\n\n            // LANGUAGE-SPECIFIC AM/PM\n            if (currentLanguage === \"fa\") {\n                period = realHours < 12 ? \"ق.ظ\" : \"ب.ظ\"; // قبل از ظهر / بعد از ظهر\n            } else if (currentLanguage === \"ar_SA\") {\n                period = realHours < 12 ? \"ص\" : \"م\"; // صباحاً / مساءً\n            } else if (currentLanguage === \"ta\") {\n                if (realHours < 2) {\n                    period = \"யாமம்\"\n                } else if (realHours < 6) {\n                    period = \"வைகறை\"\n                } else if (realHours < 10) {\n                    period = \"காலை\"\n                } else if (realHours < 14) {\n                    period = \"நண்பகல்\"\n                } else if (realHours < 18) {\n                    period = \"எற்பாடு\"\n                } else if (realHours < 22) {\n                    period = \"மாலை\"\n                } else {\n                    period = \"யாமம்\"\n                }\n            } else {\n                period = realHours < 12 ? \"AM\" : \"PM\";\n            }\n        }\n\n        // Display AM/PM if in 12-hour format\n        if (hourformat) {\n            document.getElementById(\"amPm\").textContent = period; // Show AM/PM based on calculated period\n        } else {\n            document.getElementById(\"amPm\").textContent = \"\"; // Clear AM/PM for 24-hour format\n        }\n\n        const clocktype1 = localStorage.getItem(\"clocktype\");\n        const dateElement = document.getElementById(\"date\");\n        if (clocktype1 === \"digital\" && isGreetingEnabled) {\n            const newGreeting = getGreeting();\n            if (newGreeting !== lastGreetingString) {\n                dateElement.style.display = \"block\";\n                dateElement.innerText = newGreeting;\n                lastGreetingString = newGreeting;\n            }\n        } else if (clocktype1 === \"digital\") {\n            dateElement.style.display = \"none\";  // Hide the greeting\n        }\n    }\n\n    // Function to start the analog clock\n    function startAnalogClock() {\n        if (!analogIntervalId) { // Only set interval if not already set\n            analogIntervalId = setInterval(updateanalogclock, 500);\n        }\n    }\n\n    // Function to stop the analog clock\n    function stopAnalogClock() {\n        if (analogIntervalId) {\n            clearInterval(analogIntervalId);\n            analogIntervalId = null; // Reset intervalId\n        }\n    }\n\n    // Function to start the digital clock\n    function startDigitalClock() {\n        if (!digitalIntervalId) {\n            digitalIntervalId = setInterval(updatedigiClock, 1000);\n        }\n    }\n\n    // Function to stop the digital clock\n    function stopDigitalClock() {\n        if (digitalIntervalId) {\n            clearInterval(digitalIntervalId);\n            digitalIntervalId = null;\n        }\n    }\n\n    // Initial clock display\n    displayClock();\n    updateanalogclock();\n\n    // Start appropriate clock based on type\n    if (clocktype === \"digital\") {\n        updatedigiClock();\n        startDigitalClock();\n        stopAnalogClock();\n    } else if (clocktype === \"analog\") {\n        if (document.visibilityState === \"visible\") {\n            startAnalogClock();\n            updateDate(); // Immediately update date when clock is analog\n        }\n        stopDigitalClock();\n    }\n\n    // Event listener for visibility change\n    document.addEventListener(\"visibilitychange\", function () {\n        if (document.visibilityState === \"visible\") {\n            if (clocktype === \"analog\") {\n                startAnalogClock(); // Start the analog clock if the tab is focused\n                updateDate(); // Update date when the tab becomes visible\n            } else if (clocktype === \"digital\") {\n                startDigitalClock(); // Start the digital clock if the tab is focused\n            }\n        } else {\n            stopAnalogClock(); // Stop the analog clock if the tab is not focused\n            stopDigitalClock(); // Stop the digital clock if the tab is not focused\n        }\n    });\n\n    function displayClock() {\n        const analogClock = document.getElementById(\"analogClock\");\n        const digitalClock = document.getElementById(\"digitalClock\");\n\n        if (clocktype === \"analog\") {\n            analogClock.style.display = \"block\";  // Show the analog clock\n            digitalClock.style.display = \"none\";  // Hide the digital clock\n        } else if (clocktype === \"digital\") {\n            digitalClock.style.display = \"block\";  // Show the digital clock\n            analogClock.style.display = \"none\";    // Hide the analog clock\n        }\n    }\n\n    // ----------------------- End of clock display -------------------------\n    function resetDateDisplay() {\n        const dateElement = document.getElementById(\"date\");\n        dateElement.style.display = \"block\";\n        dateElement.innerText = \"\";\n        lastGreetingString = null;\n        lastDateString = null;\n        updateDate();\n    }\n\n    // Save and load toggle state\n    document.addEventListener(\"DOMContentLoaded\", function () {\n        const timeformatField = document.getElementById(\"timeformatField\");\n        const hourcheckbox = document.getElementById(\"12hourcheckbox\");\n        const digitalCheckbox = document.getElementById(\"digitalCheckbox\");\n        const greetingCheckbox = document.getElementById(\"greetingcheckbox\");\n        const greetingField = document.getElementById(\"greetingField\");\n\n        if (localStorage.getItem(\"greetingEnabled\") === null) {\n            localStorage.setItem(\"greetingEnabled\", \"true\");\n        }\n\n        greetingCheckbox.checked = localStorage.getItem(\"greetingEnabled\") === \"true\";\n        greetingCheckbox.disabled = localStorage.getItem(\"clocktype\") !== \"digital\";\n\n        digitalCheckbox.addEventListener(\"change\", function () {\n            saveCheckboxState(\"digitalCheckboxState\", digitalCheckbox);\n            if (digitalCheckbox.checked) {\n                timeformatField.classList.remove(\"inactive\");\n                greetingField.classList.remove(\"inactive\");\n                greetingCheckbox.disabled = false; // Enable greeting toggle\n                localStorage.setItem(\"clocktype\", \"digital\");\n                clocktype = localStorage.getItem(\"clocktype\");\n                displayClock();\n                stopAnalogClock();\n                startDigitalClock();\n                updatedigiClock();\n                saveActiveStatus(\"timeformatField\", \"active\");\n                saveActiveStatus(\"greetingField\", \"active\");\n            } else {\n                timeformatField.classList.add(\"inactive\");\n                greetingField.classList.add(\"inactive\");\n                greetingCheckbox.disabled = true; // Disable greeting toggle\n                localStorage.setItem(\"clocktype\", \"analog\");\n                clocktype = localStorage.getItem(\"clocktype\");\n                stopDigitalClock();\n                startAnalogClock();\n                updateanalogclock();\n                displayClock();\n                resetDateDisplay();\n                saveActiveStatus(\"timeformatField\", \"inactive\");\n                saveActiveStatus(\"greetingField\", \"inactive\");\n            }\n        });\n\n        hourcheckbox.addEventListener(\"change\", function () {\n            saveCheckboxState(\"hourcheckboxState\", hourcheckbox);\n            if (hourcheckbox.checked) {\n                localStorage.setItem(\"hourformat\", \"true\");\n            } else {\n                localStorage.setItem(\"hourformat\", \"false\");\n            }\n        });\n\n        greetingCheckbox.addEventListener(\"change\", () => {\n            localStorage.setItem(\"greetingEnabled\", greetingCheckbox.checked);\n            updatedigiClock();\n        });\n\n        loadCheckboxState(\"digitalCheckboxState\", digitalCheckbox);\n        loadCheckboxState(\"hourcheckboxState\", hourcheckbox);\n        loadActiveStatus(\"timeformatField\", timeformatField);\n        loadActiveStatus(\"greetingField\", greetingField);\n    });\n}\n"
  },
  {
    "path": "scripts/custom-text.js",
    "content": "/*\n * Material You NewTab\n * Copyright (c) 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program.\n * If not, see <https://www.gnu.org/licenses/>.\n */\n\n// Custom text\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n    const userTextDiv = document.getElementById(\"userText\");\n    const userTextCheckbox = document.getElementById(\"userTextCheckbox\");\n\n    // Load and apply the checkbox state\n    const isUserTextVisible = localStorage.getItem(\"userTextVisible\") !== \"false\";\n    userTextCheckbox.checked = isUserTextVisible;\n    userTextDiv.style.display = isUserTextVisible ? \"block\" : \"none\";\n\n    // Toggle userText display based on checkbox state\n    userTextCheckbox.addEventListener(\"change\", () => {\n        const isVisible = userTextCheckbox.checked;\n        userTextDiv.style.display = isVisible ? \"block\" : \"none\";\n        localStorage.setItem(\"userTextVisible\", isVisible);\n    });\n\n    // Set the default language to English if no language is saved\n    const savedLang = localStorage.getItem(\"selectedLanguage\") || \"en\";\n    applyLanguage(savedLang);\n\n    // Load the stored text if it exists\n    const storedValue = localStorage.getItem(\"userText\");\n    if (storedValue) {\n        userTextDiv.textContent = storedValue;\n    } else {\n        // Fallback to the placeholder based on the selected language\n        const placeholder = userTextDiv.dataset.placeholder || translations[\"en\"].userText; // Fallback to English\n        userTextDiv.textContent = placeholder;\n    }\n\n    // Handle input event\n    userTextDiv.addEventListener(\"input\", function () {\n        localStorage.setItem(\"userText\", userTextDiv.textContent);\n    });\n\n    // Remove placeholder text when the user starts editing\n    userTextDiv.addEventListener(\"click\", function () {\n        if (userTextDiv.textContent === userTextDiv.dataset.placeholder) {\n            userTextDiv.textContent = \"\";  // Clear the placeholder when focused\n        }\n    });\n\n    // Restore placeholder if the user leaves the div empty after editing\n    userTextDiv.addEventListener(\"blur\", function () {\n        if (userTextDiv.textContent === \"\") {\n            userTextDiv.textContent = userTextDiv.dataset.placeholder;  // Show the placeholder again if empty\n        }\n    });\n});"
  },
  {
    "path": "scripts/google-apps.js",
    "content": "/*\n * Material You NewTab\n * Copyright (c) 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program.\n * If not, see <https://www.gnu.org/licenses/>.\n */\n\n// ------------------------Google App Menu-----------------------------------\nconst iconContainer = document.getElementById(\"iconContainer\");\nconst googleAppsCont = document.getElementById(\"googleAppsCont\");\n\n// Toggle menu and tooltip visibility\ngoogleAppsCont.addEventListener(\"click\", function (event) {\n    const isMenuVisible = iconContainer.style.display === \"grid\";\n\n    // Toggle menu visibility\n    iconContainer.style.display = isMenuVisible ? \"none\" : \"grid\";\n\n    // Add or remove the class to hide the tooltip\n    if (!isMenuVisible) {\n        iconContainer.style.animation = \"panelScaleIn 200ms cubic-bezier(0.4, 0, 0.2, 1) forwards\";\n        googleAppsCont.classList.add(\"menu-open\"); // Hide tooltip\n    } else {\n        googleAppsCont.classList.remove(\"menu-open\"); // Restore tooltip\n    }\n\n    event.stopPropagation();\n});\n\n// Close menu when clicking outside\ndocument.addEventListener(\"click\", function (event) {\n    const isClickInside =\n        iconContainer.contains(event.target) || googleAppsCont.contains(event.target);\n\n    if (!isClickInside && iconContainer.style.display === \"grid\") {\n        iconContainer.style.display = \"none\"; // Hide menu\n        googleAppsCont.classList.remove(\"menu-open\"); // Restore tooltip\n    }\n});\n// ------------------------End of Google App Menu Setup-----------------------------------\n\n// Save and load toggle state\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n    const googleAppsCont = document.getElementById(\"googleAppsCont\");\n    const googleAppsCheckbox = document.getElementById(\"googleAppsCheckbox\");\n\n    googleAppsCheckbox.addEventListener(\"change\", function () {\n        saveCheckboxState(\"googleAppsCheckboxState\", googleAppsCheckbox);\n        if (googleAppsCheckbox.checked) {\n            googleAppsCont.style.display = \"flex\";\n            saveDisplayStatus(\"googleAppsDisplayStatus\", \"flex\");\n        } else {\n            googleAppsCont.style.display = \"none\";\n            saveDisplayStatus(\"googleAppsDisplayStatus\", \"none\");\n        }\n    });\n    loadCheckboxState(\"googleAppsCheckboxState\", googleAppsCheckbox);\n    loadDisplayStatus(\"googleAppsDisplayStatus\", googleAppsCont);\n});"
  },
  {
    "path": "scripts/languages.js",
    "content": "/*\n * Material You New Tab\n * Copyright (c) 2024-2026 Prem, 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program.\n * If not, see <https://www.gnu.org/licenses/>.\n */\n\n// Translation data\nconst translations = {\n    en: en, // English\n    pt: pt, // Portuguese-BR (Brazil)\n    zh: zh, // Chinese (Simplified)\n    zh_TW: zh_TW, // Chinese (Traditional)\n    hi: hi, // Hindi\n    hu: hu, // Hungarian\n    cs: cs, // Czech\n    it: it, // Italian\n    tr: tr, // Turkish\n    bn: bn, // Bengali\n    vi: vi, // Vietnamese\n    ru: ru, // Russian\n    uz: uz, // Uzbek\n    es: es, // Spanish\n    ja: ja, // Japanese\n    ko: ko, // Korean\n    idn: idn, // Indonesian\n    mr: mr, // Marathi\n    fr: fr, // French\n    az: az, // Azerbaijani\n    sl: sl, // Slovenian\n    ne: ne, // Nepali\n    ur: ur, // Urdu\n    de: de, // German\n    fa: fa, // Farsi (Persian)\n    ar_SA: ar_SA, // Arabic (Saudi Arabia)\n    el: el, // Greek\n    ta: ta, // தமிழ்\n    th: th, // Thai\n    pl: pl, // Polish\n    uk: uk, // Ukrainian\n    sv: sv, // Swedish\n};\n\n// Define the width of the menu container for each language\nconst menuWidths = {\n    en: \"443px\",\n    ta: \"522px\",\n    pt: \"512px\",\n    sv: \"472px\",\n    bn: \"458px\",\n    uz: \"497px\",\n    vi: \"487px\",\n    cs: \"494px\",\n    es: \"488px\",\n    hi: \"450px\",\n    mr: \"460px\",\n    hu: \"487px\",\n    ja: \"486px\",\n    ru: \"442px\",\n    it: \"479px\",\n    idn: \"477px\",\n    tr: \"472px\",\n    fr: \"517px\",\n    az: \"460px\",\n    sl: \"512px\",\n    ne: \"472px\",\n    de: \"502px\",\n    fa: \"502px\",\n    ar_SA: \"482px\",\n    el: \"497px\",\n    th: \"497px\",\n    pl: \"497px\",\n    uk: \"497px\",\n    // Add more languages and widths as needed\n};\n\nconst numberMappings = {\n    \"bn\": { \"0\": \"০\", \"1\": \"১\", \"2\": \"২\", \"3\": \"৩\", \"4\": \"৪\", \"5\": \"৫\", \"6\": \"৬\", \"7\": \"৭\", \"8\": \"৮\", \"9\": \"৯\" },\n    \"ta\": { \"0\": \"௦\", \"1\": \"௧\", \"2\": \"௨\", \"3\": \"௩\", \"4\": \"௪\", \"5\": \"௫\", \"6\": \"௬\", \"7\": \"௭\", \"8\": \"௮\", \"9\": \"௯\" },\n    \"mr\": { \"0\": \"०\", \"1\": \"१\", \"2\": \"२\", \"3\": \"३\", \"4\": \"४\", \"5\": \"५\", \"6\": \"६\", \"7\": \"७\", \"8\": \"८\", \"9\": \"९\" },\n    \"ne\": { \"0\": \"०\", \"1\": \"१\", \"2\": \"२\", \"3\": \"३\", \"4\": \"४\", \"5\": \"५\", \"6\": \"६\", \"7\": \"७\", \"8\": \"८\", \"9\": \"९\" },\n    \"fa\": { 0: \"۰\", 1: \"۱\", 2: \"۲\", 3: \"۳\", 4: \"۴\", 5: \"۵\", 6: \"۶\", 7: \"۷\", 8: \"۸\", 9: \"۹\" },\n    \"ar_SA\": { 0: \"۰\", 1: \"۱\", 2: \"۲\", 3: \"۳\", 4: \"٤\", 5: \"٥\", 6: \"٦\", 7: \"۷\", 8: \"۸\", 9: \"۹\" }\n    // Add more languages as needed, Ensure it is supported in the fonts\n};\n\nconst LRM = \"\\u200E\"; // Left-to-Right Mark\n\nfunction localizeNumbers(text, language) {\n    const map = numberMappings[language]; // Get the numeral map for the current language\n\n    // Define languages that use a comma as the decimal separator instead of a dot\n    const specialDecimalLanguages = [\"cs\", \"it\", \"pt\", \"ru\", \"tr\", \"vi\", \"uz\", \"es\", \"ko\", \"idn\", \"fr\", \"az\", \"sl\", \"hu\", \"de\", \"fa\", \"el\", \"uk\", \"sv\"]; // Add more languages here as needed\n\n    if (specialDecimalLanguages.includes(language)) {\n        // Replace decimal point with a comma for specific languages\n        text = text.replace(\".\", \",\");\n    }\n    // Apply digit localization if the numeral map exists\n    if (map) {\n        text = text.replace(/\\d/g, (digit) => map[digit] || digit);\n    }\n\n    // LRM marks, for RTL languages to ensure correct display\n    const rtlFlipLanguages = [\"ar_SA\"];\n    if (rtlFlipLanguages.includes(language)) {\n        text = `${LRM}${text}${LRM}`;\n    }\n\n    return text; // Return the localized text\n}\n\n// Right-to-left languages\nconst rtlLanguages = [\"ur\", \"fa\", \"ar_SA\"];\n\n// Function to apply the language to the page\nfunction applyLanguage(lang) {\n    document.title = translations[lang]?.newTabTitle || translations[\"en\"].newTabTitle;\n\n    // Mapping of text elements and their translation keys\n    const translationMap = [\n        \"feedback\",\n        \"resetsettings\",\n        \"shortcutsText\",\n        \"enableShortcutsText\",\n        \"editShortcutsText\",\n        \"shortcutsInfoText\",\n        \"editShortcutsList\",\n        \"editShortcutsListInfo\",\n        \"adaptiveIconText\",\n        \"adaptiveIconInfoText\",\n        \"ai_tools_button\",\n        \"enable_ai_tools\",\n        \"aiToolsSettingsText\",\n        \"aiToolsSettingsInfo\",\n        \"googleAppsMenuText\",\n        \"googleAppsMenuInfo\",\n        \"todoListText\",\n        \"todoListInfo\",\n        \"fahrenheitCelsiusCheckbox\",\n        \"fahrenheitCelsiusText\",\n        \"minMaxTempText\",\n        \"minMaxTempSubText\",\n        \"hideWeatherTitle\",\n        \"hideWeatherInfo\",\n        \"hideWeatherBox\",\n        \"hideWeatherBoxInfo\",\n        \"micIconTitle\",\n        \"micIconInfo\",\n        \"hideSearchWith\",\n        \"hideSearchWithInfo\",\n        \"motivationalQuotesText\",\n        \"motivationalQuotesInfo\",\n        \"newQuoteOnRefreshText\",\n        \"newQuoteOnRefreshInfo\",\n        \"search_suggestions_button\",\n        \"search_suggestions_text\",\n        \"hideClockBox\",\n        \"hideClockBoxInfo\",\n        \"digitalclocktitle\",\n        \"digitalclockinfo\",\n        \"timeformattitle\",\n        \"timeformatinfo\",\n        \"greetingtitle\",\n        \"greetinginfo\",\n        \"userTextTitle\",\n        \"userTextInfo\",\n        \"useproxytitletext\",\n        \"useproxyText\",\n        \"ProxyText\",\n        \"ProxySubtext\",\n        \"HostproxyButton\",\n        \"UserLocText\",\n        \"UserLocSubtext\",\n        \"useGPS\",\n        \"useGPSInfo\",\n        \"PrivacyPolicy\",\n        \"WeatherApiText\",\n        \"WeatherApiSubtext\",\n        \"LearnMoreButton\",\n        \"saveAPI\",\n        \"enterBtn\",\n        \"ai_tools\",\n        \"defaultEngine\",\n        \"googleEngine\",\n        \"duckEngine\",\n        \"bingEngine\",\n        \"braveEngine\",\n        \"youtubeEngine\",\n        \"gImagesEngine\",\n        \"redditEngine\",\n        \"wikipediaEngine\",\n        \"quoraEngine\",\n        \"chatGPT\",\n        \"gemini\",\n        \"copilot\",\n        \"claude\",\n        \"grok\",\n        \"qwen\",\n        \"perplexity\",\n        \"deepseek\",\n        \"metaAI\",\n        'firefly',\n        \"github\",\n        \"googleAppsHover\",\n        \"todoListHover\",\n        \"uploadWallpaperText\",\n        \"backupText\",\n        \"restoreText\",\n        \"rangColor\",\n        \"bookmarksText\",\n        \"bookmarksInfo\",\n        \"bookmarksHeading\",\n        \"bookmarkSortBy\",\n        \"sortAlphabetical\",\n        \"sortTimeAdded\",\n        \"bookmarkViewAs\",\n        \"bookmarkViewGrid\",\n        \"bookmarkViewList\",\n        \"editBookmarkHeading\",\n        \"lightThemed\",\n        \"darkThemed\",\n        \"systemThemed\",\n        \"switchSearchModes\",\n        \"switchSearchModesInfo\",\n        \"adjustZoom\",\n        \"changeBrowserTheme\",\n        \"updateFirefoxHomepage\",\n        \"dontShowTips\",\n        \"aiSettingsIntro\",\n        \"resetAISettingsBtn\",\n        \"opacityTitle\",\n        \"adjustOpacityDesc\",\n        \"footerToastTitle\",\n        \"footerToastMessage\",\n        \"personalizationSectionTitle\",\n        \"clockSectionTitle\",\n        \"searchSectionTitle\",\n        \"weatherSectionTitle\",\n        \"appearanceSectionTitle\",\n        \"settingsSectionTitle\",\n        \"iconFileTooLargeMessage\",\n        \"iconStorageQuotaMessage\"\n    ];\n\n    // Specific mapping for placeholders\n    const placeholderMap = [\n        { id: \"userLoc\", key: \"userLoc\" },\n        { id: \"userAPI\", key: \"userAPI\" },\n        { id: \"searchQ\", key: \"searchPlaceholder\" },\n        { id: \"todoInput\", key: \"todoPlaceholder\" },\n        { id: \"bookmarkSearch\", key: \"bookmarkSearch\" },\n        { id: \"editBookmarkName\", key: \"editBookmarkName\" },\n        { id: \"editBookmarkURL\", key: \"editBookmarkURL\" }\n    ];\n\n    // Mapping of elements and their different translation keys\n    const elementsMap = [\n        { id: \"todoListHeading\", key: \"todoListText\" },\n        { id: \"defaultEngineDD\", key: \"defaultEngine\" },\n        { id: \"googleEngineDD\", key: \"googleEngine\" },\n        { id: \"duckEngineDD\", key: \"duckEngine\" },\n        { id: \"bingEngineDD\", key: \"bingEngine\" },\n        { id: \"braveEngineDD\", key: \"braveEngine\" },\n        { id: \"youtubeEngineDD\", key: \"youtubeEngine\" },\n        { id: \"gImagesEngineDD\", key: \"gImagesEngine\" },\n        { id: \"redditEngineDD\", key: \"redditEngine\" },\n        { id: \"wikipediaEngineDD\", key: \"wikipediaEngine\" },\n        { id: \"quoraEngineDD\", key: \"quoraEngine\" },\n        { id: \"bookmarksHover\", key: \"bookmarksHeading\" },\n        { id: \"saveproxy\", key: \"saveAPI\" },\n        { id: \"saveLoc\", key: \"saveAPI\" },\n        { id: \"saveBookmarkChanges\", key: \"saveAPI\" },\n        { id: \"cancelBookmarkEdit\", key: \"cancelText\" },\n        { id: \"aiSettingsHeader\", key: \"aiToolsSettingsText\" },\n        { id: \"saveAISettingsBtn\", key: \"saveAPI\" },\n        { id: \"editBookmarkNameLabel\", key: \"editBookmarkName\" },\n        { id: \"editBookmarkURLLabel\", key: \"editBookmarkURL\" },\n        { id: \"shortcutsSectionTitle\", key: \"shortcutsText\" },\n    ];\n\n    // Function to apply translations\n    function applyTranslations(items, isPlaceholder) {\n        items.forEach(item => {\n            // Get the element by its ID\n            const element = document.getElementById(item.id || item);\n            if (element) {\n                // Use \"key\" if defined, otherwise use \"id\" as the translation key\n                const key = item.key || item;\n                // Get the translation, fallback to English if not found in the current language\n                const translation = translations[lang]?.[key] || translations[\"en\"]?.[key];\n\n                // Apply the translation to either placeholder or innerText\n                if (isPlaceholder) {\n                    element.placeholder = translation;\n                } else {\n                    element.innerText = translation;\n                }\n            }\n        });\n    }\n\n    // Apply the translations\n    applyTranslations(placeholderMap, true);   // For placeholders\n    applyTranslations(elementsMap, false);     // For innerTexts with different IDs and keys\n    applyTranslations(translationMap, false);  // For innerTexts with same ID and keys\n\n    // For userText\n    const userTextDiv = document.getElementById(\"userText\");\n    if (translations[lang]) {\n        const placeholder = translations[lang]?.userText || translations[\"en\"].userText;\n        userTextDiv.dataset.placeholder = placeholder; // Update the placeholder in data attribute\n        // Only set the text content if there's nothing in localStorage\n        if (!localStorage.getItem(\"userText\")) {\n            userTextDiv.innerText = placeholder;\n        }\n    }\n\n    // Update placeholders on already-rendered shortcut inputs\n    document.querySelectorAll(\".shortcutSettingsEntry .shortcutName\")\n        .forEach(el => el.placeholder = translations[lang]?.shortcutInputName  || translations[\"en\"].shortcutInputName);\n    document.querySelectorAll(\".shortcutSettingsEntry .URL\")\n        .forEach(el => el.placeholder = translations[lang]?.shortcutInputUrl   || translations[\"en\"].shortcutInputUrl);\n    document.querySelectorAll(\".shortcutSettingsEntry .iconURL\")\n        .forEach(el => el.placeholder = translations[lang]?.shortcutInputIcon  || translations[\"en\"].shortcutInputIcon);\n\n    // Update hover text for #menuCloseButton\n    const menuCloseButton = document.getElementById(\"menuCloseButton\");\n    if (menuCloseButton) {\n        const hoverText = translations[lang]?.menuCloseText || translations[\"en\"].menuCloseText;\n        menuCloseButton.setAttribute(\"data-lang\", hoverText);\n    }\n\n    // Update the width of the menu container based on the language\n    const menuCont = document.querySelector(\".menuBar .menuCont\");\n    if (menuCont) {\n        menuCont.style.width = menuWidths[lang] || menuWidths[\"en\"];\n        let widthh = window.innerWidth / parseInt(menuWidths[lang] || menuWidths[\"en\"]);\n        if (window.innerWidth < 522) {\n            let menuStyle = document.getElementById(\"menuStyle\") || document.createElement(\"style\");\n            menuStyle.id = \"menuStyle\";\n            menuStyle.innerHTML = `\n                .menuCont {\n                    scale: ${widthh} !important;\n                    height: ${(100 / widthh).toString()}dvh !important;\n                    transform-origin: top right !important;\n                }\n            `;\n            document.head.append(menuStyle);\n        }\n    }\n\n    // Function to dynamically load Google Fonts\n    function loadFont(fontUrl) {\n        if (!document.querySelector(`link[href=\"${fontUrl}\"]`)) {\n            const link = document.createElement(\"link\");\n            link.rel = \"stylesheet\";\n            link.href = fontUrl;\n            document.head.appendChild(link);\n        }\n    }\n\n    // Dynamically update the font family based on the language\n    const root = document.documentElement;\n    const commonFontStack = \"'poppins', 'Poppins', sans-serif\";\n    if (lang === \"vi\") {\n        loadFont(\"https://fonts.googleapis.com/css2?family=Be+Vietnam+Pro&display=swap\");\n        root.style.setProperty(\"--main-font-family\", `\"Be Vietnam Pro\", ${commonFontStack}`);\n    } else if (lang === \"ur\") {\n        loadFont(\"https://fonts.googleapis.com/css2?family=Noto+Sans+Arabic&display=swap\");\n        root.style.setProperty(\"--main-font-family\", `\"Noto Sans Arabic\", ${commonFontStack}`);\n    } else if (lang === \"fa\") {\n        loadFont(\"https://fonts.googleapis.com/css2?family=Vazirmatn&display=swap\"); // Using Vazirmatn for Farsi\n        root.style.setProperty(\"--main-font-family\", `\"Vazirmatn\", ${commonFontStack}`);\n    } else {\n        root.style.setProperty(\"--main-font-family\", commonFontStack);\n    }\n\n    // Apply the direction attribute to specific selectors for RTL languages\n    const isRTL = rtlLanguages.includes(lang);\n    const rtlSelectors = [\".topDiv\", \".searchbar\", \".searchWithCont\", \".resultBox\", \".quotesCont\",\n        \".leftDiv\", \".shortcutsContainer\", \".page\", \"#prompt-modal-box\", \".todo-container\",\n        \".bookmark-search-container\", \".bookmark-controls-container\", \"#editBookmarkModal\", \".liquidGlass-toast\"];\n\n    rtlSelectors.forEach(selector => {\n        document.querySelectorAll(selector).forEach(el => {\n            el.setAttribute(\"dir\", isRTL ? \"rtl\" : \"ltr\");\n        });\n    });\n\n    // Update feelsLike element styles for RTL languages\n    const feelsLikeElement = document.getElementById(\"feelsLike\");\n    feelsLikeElement.style.left = isRTL ? \"12px\" : \"\";\n    feelsLikeElement.style.paddingRight = isRTL ? \"43px\" : \"\";\n    feelsLikeElement.style.width = isRTL ? \"calc(100% - 12px)\" : \"\";\n    feelsLikeElement.style.textAlign = isRTL ? \"right\" : \"left\";\n\n    const quotesText = document.querySelector(\".quotesContainer\");\n    // quotesText.style.textAlign = isRTL ? \"right\" : \"left\";\n    quotesText.style.fontFamily = commonFontStack;\n\n    // Save the selected language in localStorage\n    document.documentElement.lang = currentLanguage;\n    saveLanguageStatus(\"selectedLanguage\", lang);\n}\n\n// Detect language from navigator.language\ndocument.getElementById(\"languageSelector\").addEventListener(\"change\", (event) => {\n    applyLanguage(event.target.value);\n    location.reload();\n});\n\n// Function to apply the language when the page loads\nwindow.onload = function () {\n    const savedLanguage = getLanguageStatus(\"selectedLanguage\") || \"en\"; // Default language is English\n    document.getElementById(\"languageSelector\").value = savedLanguage;\n    applyLanguage(savedLanguage);\n};\n\n// Function to save the language status in localStorage\nfunction saveLanguageStatus(key, languageStatus) {\n    localStorage.setItem(key, languageStatus);\n}\n\n// Function to get the language status from localStorage\nfunction getLanguageStatus(key) {\n    return localStorage.getItem(key);\n}\n"
  },
  {
    "path": "scripts/menu-shortcut-page.js",
    "content": "/*\n * Material You NewTab\n * Copyright (c) 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program.\n * If not, see <https://www.gnu.org/licenses/>.\n */\n\n\n// Get the current language from localStorage\nconst currentLanguage = localStorage.getItem(\"selectedLanguage\") || \"en\";\nconst isRTL = rtlLanguages.includes(currentLanguage);\n\n// ------------Showing & Hiding Menu-bar ---------------\nconst menuButton = document.getElementById(\"menuButton\");\nconst menuBar = document.getElementById(\"menuBar\");\nconst menuCont = document.getElementById(\"menuCont\");\nconst optCont = document.getElementById(\"optCont\");\nconst overviewPage = document.getElementById(\"overviewPage\");\nconst shortcutEditPage = document.getElementById(\"shortcutEditPage\");\nconst shortcutEditButton = document.getElementById(\"shortcutEditButton\");\nconst backButton = document.getElementById(\"backButton\");\n\nfunction pageReset() {\n    optCont.scrollTop = 0;\n    overviewPage.style.transform = \"translateX(0)\";\n    overviewPage.style.opacity = \"1\";\n    overviewPage.style.display = \"block\";\n    shortcutEditPage.style.transform = \"translateX(120%)\";\n    shortcutEditPage.style.opacity = \"0\";\n    shortcutEditPage.style.display = \"none\";\n}\n\nconst closeMenuBar = () => {\n    requestAnimationFrame(() => {\n        optCont.style.opacity = \"0\"\n        optCont.style.transform = \"translateX(100%)\"\n    });\n    setTimeout(() => {\n        requestAnimationFrame(() => {\n            menuBar.style.opacity = \"0\"\n            menuCont.style.transform = \"translateX(100%)\"\n        });\n    }, 14);\n    setTimeout(() => {\n        // Disable smooth scroll temporarily\n        menuCont.style.scrollBehavior = \"auto\";\n        menuCont.scrollTop = 0;\n\n        // Restore smooth scroll\n        requestAnimationFrame(() => {\n            menuCont.style.scrollBehavior = \"smooth\";\n        });\n\n        menuBar.style.display = \"none\";\n    }, 555);\n}\n\nconst openMenuBar = () => {\n    setTimeout(() => {\n        menuBar.style.display = \"block\";\n        pageReset();\n    });\n    setTimeout(() => {\n        requestAnimationFrame(() => {\n            menuBar.style.opacity = \"1\"\n            menuCont.style.transform = \"translateX(0px)\"\n        });\n    }, 7);\n    setTimeout(() => {\n        requestAnimationFrame(() => {\n            optCont.style.opacity = \"1\"\n            optCont.style.transform = \"translateX(0px)\"\n        });\n    }, 11);\n}\n\nmenuButton.addEventListener(\"click\", () => {\n    if (menuBar.style.display === \"none\" || menuBar.style.display === \"\") {\n        openMenuBar();\n    } else {\n        closeMenuBar();\n    }\n});\n\n//   ----------Hiding Menu Bar--------\nmenuBar.addEventListener(\"click\", (event) => {\n    if (event.target === menuBar) {\n        closeMenuBar()\n    }\n});\n\n// Hiding Menu Bar when user click on close button\ndocument.getElementById(\"menuCloseButton\").onclick = () => {\n    closeMenuBar()\n}\n\n\n// Toggle expand/collapse sections\ndocument.querySelectorAll(\".sectionHeader\").forEach(header => {\n    header.addEventListener(\"click\", () => {\n        header.closest(\".section\").classList.toggle(\"expanded\");\n    });\n});\n\n\n/* ------ Shortcut Page Transitions & Animations ------ */\n\n// When clicked, open new page by sliding it in from the right.\nshortcutEditButton.onclick = () => {\n    setTimeout(() => {\n        shortcutEditPage.style.display = \"block\"\n    });\n    requestAnimationFrame(() => {\n        overviewPage.style.transform = \"translateX(-120%)\"\n        overviewPage.style.opacity = \"0\"\n    });\n    setTimeout(() => {\n        requestAnimationFrame(() => {\n            shortcutEditPage.style.transform = \"translateX(0)\"\n            shortcutEditPage.style.opacity = \"1\"\n        });\n    }, 50);\n    setTimeout(() => {\n        overviewPage.style.display = \"none\";\n    }, 650);\n}\n\n// Close page by sliding it away to the right.\nbackButton.onclick = () => {\n    setTimeout(() => {\n        overviewPage.style.display = \"block\"\n    });\n    requestAnimationFrame(() => {\n        shortcutEditPage.style.transform = \"translateX(120%)\";\n        shortcutEditPage.style.opacity = \"0\";\n    });\n    setTimeout(() => {\n        requestAnimationFrame(() => {\n            overviewPage.style.transform = \"translateX(0)\";\n            overviewPage.style.opacity = \"1\";\n        });\n    }, 50);\n    setTimeout(() => {\n        shortcutEditPage.style.display = \"none\";\n    }, 650);\n}"
  },
  {
    "path": "scripts/preload.js",
    "content": "/*\n * Material You NewTab\n * Copyright (c) 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program.\n * If not, see <https://www.gnu.org/licenses/>.\n */\n\n// Set Loading Screen Color before Everything Loads\ndocument.documentElement.style.setProperty('--Loading-Screen-Color', localStorage.getItem('LoadingScreenColor') || \"#bbd6fd\");\n"
  },
  {
    "path": "scripts/quotes.js",
    "content": "/*\n * Material You New Tab\n * Copyright (c) 2024-2026 Prem, 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program.\n * If not, see <https://www.gnu.org/licenses/>.\n */\n\n// Multilingual quotes API\nconst metadataUrl = \"https://prem-k-r.github.io/multilingual-quotes-api/minified/metadata.json\";\nconst baseQuoteUrl = \"https://prem-k-r.github.io/multilingual-quotes-api/minified/\";\n\nconst quotesContainer = document.querySelector(\".quotesContainer\");\nconst authorName = document.querySelector(\".authorName span\");\nconst authorContainer = document.querySelector(\".authorName\");\n\nconst MAX_QUOTE_LENGTH = 140;\nconst MIN_QUOTES_FOR_LANG = 100;\nconst ONE_DAY = 24 * 60 * 60 * 1000;\n\n// Fallback quote for when everything fails\nconst FALLBACK_QUOTE = {\n    quote: \"Don't watch the clock; do what it does. Keep going.\",\n    author: \"Sam Levenson\"\n};\n\nlet lastKnownLanguage = null;\n\n// Animate .authorName container width to hug its text content\nfunction fitAuthorWidth() {\n    requestAnimationFrame(() => {\n        const padding = 16;\n        authorContainer.style.width = (authorName.scrollWidth + padding * 2) + \"px\";\n    });\n}\n\n// Clear all quotes-related data from localStorage\nfunction clearQuotesStorage() {\n    const keys = Object.keys(localStorage);\n    keys.forEach(key => {\n        if (key.startsWith(\"quotes_\")) {\n            localStorage.removeItem(key);\n        }\n    });\n\n    quotesContainer.textContent = \"\";\n    authorName.textContent = \"\";\n}\n\n// Clear quotes for all languages except the specified one\nfunction clearOtherLanguageQuotes(exceptLang) {\n    const keys = Object.keys(localStorage);\n    keys.forEach(key => {\n        if (\n            key.startsWith(\"quotes_\") &&\n            key !== `quotes_${exceptLang}` &&\n            !key.startsWith(`quotes_${exceptLang}_`) &&\n            key !== \"quotes_metadata_timestamp\"\n        ) {\n            localStorage.removeItem(key);\n        }\n    });\n}\n\n// Check if we need to fetch data for a language\nfunction needsDataFetch(lang) {\n    // Skip fetch if offline\n    if (!navigator.onLine) return false;\n\n    // Check if language changed\n    if (lastKnownLanguage !== null && lastKnownLanguage !== currentLanguage) {\n        return true;\n    }\n\n    // Check if any required data is missing\n    const requiredKeys = [\n        `quotes_${lang}`,\n        `quotes_${lang}_timestamp`,\n        `quotes_${lang}_count`\n    ];\n\n    if (requiredKeys.some(key => !localStorage.getItem(key))) {\n        return true;\n    }\n\n    // Check if data is stale based on quote count\n    const storedCount = parseInt(localStorage.getItem(`quotes_${lang}_count`)) || 0;\n    const storedTimestamp = localStorage.getItem(`quotes_${lang}_timestamp`);\n    const timeDiff = Date.now() - new Date(storedTimestamp).getTime();\n\n    // If count is 0, it means no data available for this language\n    // Only refresh after 1 day to check if quotes were added\n    if (storedCount === 0) {\n        return timeDiff > ONE_DAY;\n    }\n\n    // Time-based validation for languages with actual quotes\n    const maxAge = storedCount < MIN_QUOTES_FOR_LANG ? ONE_DAY : 7 * ONE_DAY;\n    return timeDiff > maxAge;\n}\n\n// Determine target language based on availability\nfunction getTargetLanguage(currentLang, metadata) {\n    // If current language is English, use it\n    if (currentLang === \"en\") {\n        return \"en\";\n    }\n\n    // Check if current language has enough quotes\n    const langFile = metadata?.files?.[`${currentLang}.json`];\n    if (langFile && langFile.count >= MIN_QUOTES_FOR_LANG) {\n        return currentLang;\n    }\n\n    // Fallback to English\n    return \"en\";\n}\n\n// Fetch metadata from the API\nasync function fetchMetadata() {\n    try {\n        const response = await fetch(metadataUrl);\n        return await response.json();\n    } catch (error) {\n        console.error(\"Error fetching metadata:\", error);\n        throw error;\n    }\n}\n\n// Fetch quotes for a specific language\nasync function fetchQuotes(lang) {\n    try {\n        const url = `${baseQuoteUrl}${lang}.json`;\n        const response = await fetch(url);\n        return await response.json();\n    } catch (error) {\n        console.error(`Error fetching quotes for ${lang}:`, error);\n        throw error;\n    }\n}\n\n// Store quotes and metadata in localStorage\nfunction storeQuotesData(lang, quotes, metadata) {\n    const timestamp = new Date().toISOString();\n\n    localStorage.setItem(`quotes_${lang}`, JSON.stringify(quotes));\n    localStorage.setItem(`quotes_${lang}_timestamp`, timestamp);\n\n    if (metadata) {\n        localStorage.setItem(\"quotes_metadata_timestamp\", metadata.lastUpdated);\n        const quoteCount = metadata.files?.[`${lang}.json`]?.count || quotes.length;\n        localStorage.setItem(`quotes_${lang}_count`, quoteCount.toString());\n    }\n}\n\n// Store \"no data available\" information for languages without quotes\nfunction storeNoDataInfo(lang, metadata) {\n    const timestamp = new Date().toISOString();\n\n    localStorage.setItem(`quotes_${lang}`, JSON.stringify([])); // Empty array\n    localStorage.setItem(`quotes_${lang}_timestamp`, timestamp);\n    localStorage.setItem(`quotes_${lang}_count`, \"0\"); // 0 indicates no data available\n\n    if (metadata) {\n        localStorage.setItem(\"quotes_metadata_timestamp\", metadata.lastUpdated);\n    }\n}\n\n// Get stored quotes for a language\nfunction getStoredQuotes(lang) {\n    const storedQuotes = localStorage.getItem(`quotes_${lang}`);\n    return storedQuotes ? JSON.parse(storedQuotes) : null;\n}\n\n// Get today's date in YYYY-MM-DD format\nfunction getTodayDate() {\n    const today = new Date();\n    const year = today.getFullYear();\n    const month = String(today.getMonth() + 1).padStart(2, '0');\n    const day = String(today.getDate()).padStart(2, '0');\n    return `${year}-${month}-${day}`;\n}\n\n// Get the storage key for today's daily quote\nfunction getDailyQuoteKey(lang) {\n    return `daily_quote_${lang}_${getTodayDate()}`;\n}\n\n// Store the daily quote for today\nfunction storeDailyQuote(lang, quote) {\n    const key = getDailyQuoteKey(lang);\n    localStorage.setItem(key, JSON.stringify(quote));\n}\n\n// Get the daily quote for today (if it exists)\nfunction getDailyQuote(lang) {\n    const key = getDailyQuoteKey(lang);\n    const stored = localStorage.getItem(key);\n    return stored ? JSON.parse(stored) : null;\n}\n\n// Clear old daily quotes\nfunction clearOldDailyQuotes() {\n    const keys = Object.keys(localStorage);\n    const today = getTodayDate();\n    keys.forEach(key => {\n        if (key.startsWith(\"daily_quote_\") && !key.includes(today)) {\n            localStorage.removeItem(key);\n        }\n    });\n}\n\n\n// Display fallback quote\nfunction displayFallbackQuote() {\n    quotesContainer.textContent = FALLBACK_QUOTE.quote;\n    authorName.textContent = FALLBACK_QUOTE.author;\n    fitAuthorWidth();\n}\n\n// Get quotes for the current language\nasync function getQuotesForLanguage(forceRefresh = false) {\n    try {\n        // Update last known language\n        lastKnownLanguage = currentLanguage;\n\n        // Check if we need to fetch new data\n        const shouldFetch = forceRefresh || needsDataFetch(currentLanguage);\n\n        if (shouldFetch) {\n            // Fetch metadata first to determine availability\n            const metadata = await fetchMetadata();\n            const targetLang = getTargetLanguage(currentLanguage, metadata);\n\n            // Store info about current language availability\n            const currentLangFile = metadata.files?.[`${currentLanguage}.json`];\n            const currentLangCount = currentLangFile?.count || 0;\n\n            // If current language has no quotes, store that info\n            if (currentLangCount === 0 && currentLanguage !== \"en\") {\n                storeNoDataInfo(currentLanguage, metadata);\n            }\n\n            // Fetch quotes for target language\n            const quotes = await fetchQuotes(targetLang);\n            storeQuotesData(targetLang, quotes, metadata);\n            clearOtherLanguageQuotes(currentLanguage || targetLang);\n            return quotes;\n\n        } else {\n            // Use stored data\n            const storedCount = parseInt(localStorage.getItem(`quotes_${currentLanguage}_count`)) || 0;\n\n            // If current language has no quotes (count is 0), use English fallback\n            if (storedCount === 0 && currentLanguage !== \"en\") {\n                let englishQuotes = getStoredQuotes(\"en\");\n\n                // If no English quotes stored, we need to fetch them\n                if (!englishQuotes || englishQuotes.length === 0) {\n                    const metadata = await fetchMetadata();\n                    englishQuotes = await fetchQuotes(\"en\");\n                    storeQuotesData(\"en\", englishQuotes, metadata);\n                }\n\n                return englishQuotes;\n            }\n\n            // Return stored quotes for current language\n            return getStoredQuotes(currentLanguage);\n        }\n    } catch (error) {\n        console.error(\"Error getting quotes:\", error);\n\n        // Try to use any stored data as fallback\n        let quotes = getStoredQuotes(currentLanguage) || getStoredQuotes(\"en\");\n\n        if (!quotes || quotes.length === 0) {\n            // Return hardcoded fallback quote if everything fails\n            return [FALLBACK_QUOTE];\n        }\n\n        return quotes;\n    }\n}\n\n// Display a random quote that meets the length requirements\nfunction displayRandomQuote(quotes) {\n    if (!quotes || quotes.length === 0) {\n        displayFallbackQuote();\n        return;\n    }\n\n    // Check if \"Daily Quote\" is enabled (show one quote per day)\n    const newQuoteOnRefresh = localStorage.getItem(\"dailyQuoteEnabled\") !== \"false\";\n\n    // If new quote on refresh is disabled, try to use the daily quote\n    if (!newQuoteOnRefresh) {\n        const dailyQuote = getDailyQuote(currentLanguage);\n        if (dailyQuote) {\n            // Display the stored daily quote\n            quotesContainer.textContent = dailyQuote.quote;\n            authorName.textContent = dailyQuote.author;\n            fitAuthorWidth();\n            return;\n        }\n    }\n\n    let selectedQuote;\n    const maxAttempts = 15; // Prevent infinite loop\n\n    // Try to find a quote that fits within the character limit\n    for (let attempts = 0; attempts < maxAttempts; attempts++) {\n        const randomIndex = Math.floor(Math.random() * quotes.length);\n        selectedQuote = quotes[randomIndex];\n\n        const totalLength = selectedQuote.quote.length + selectedQuote.author.length;\n        if (totalLength <= MAX_QUOTE_LENGTH) {\n            break;\n        }\n    }\n\n    // Store as daily quote if new quote on refresh is disabled\n    if (!newQuoteOnRefresh) {\n        storeDailyQuote(currentLanguage, selectedQuote);\n    }\n\n    // Display the selected quote\n    quotesContainer.textContent = selectedQuote.quote;\n    authorName.textContent = selectedQuote.author;\n    fitAuthorWidth();\n}\n\n// Main function to load and display a quote\nasync function loadAndDisplayQuote(forceRefresh = false) {\n    try {\n        const quotes = await getQuotesForLanguage(forceRefresh);\n        displayRandomQuote(quotes);\n    } catch (error) {\n        console.error(\"Error loading quote:\", error);\n        displayFallbackQuote();\n    }\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n    const hideSearchWith = document.getElementById(\"shortcut_switchcheckbox\");\n    const quotesToggle = document.getElementById(\"quotesToggle\");\n    const motivationalQuotesCont = document.getElementById(\"motivationalQuotesCont\");\n    const motivationalQuotesCheckbox = document.getElementById(\"motivationalQuotesCheckbox\");\n    const searchWithContainer = document.getElementById(\"search-with-container\");\n    const newQuoteOnRefreshCheckbox = document.getElementById(\"newQuoteOnRefreshCheckbox\");\n    const quotesOptions = document.querySelector(\".quotesOptions\");\n\n    // Load states from localStorage\n    hideSearchWith.checked = localStorage.getItem(\"showShortcutSwitch\") === \"true\";\n    motivationalQuotesCheckbox.checked = localStorage.getItem(\"motivationalQuotesVisible\") !== \"false\";\n    newQuoteOnRefreshCheckbox.checked = localStorage.getItem(\"dailyQuoteEnabled\") === \"false\";\n\n    // Initialize language tracking\n    lastKnownLanguage = currentLanguage;\n\n    // Clean up old daily quotes on page load\n    if (newQuoteOnRefreshCheckbox.checked) clearOldDailyQuotes();\n\n    // Function to update quotes visibility and handle state changes\n    const updateMotivationalQuotesState = () => {\n        const isHideSearchWithEnabled = hideSearchWith.checked;\n        const isMotivationalQuotesEnabled = motivationalQuotesCheckbox.checked;\n\n        // Save state to localStorage\n        localStorage.setItem(\"motivationalQuotesVisible\", isMotivationalQuotesEnabled);\n\n        // Handle visibility based on settings\n        if (!isHideSearchWithEnabled) {\n            quotesToggle.classList.add(\"inactive\");\n            quotesOptions.classList.add(\"not-applicable\");\n            motivationalQuotesCont.style.display = \"none\";\n            clearQuotesStorage();\n            return;\n        }\n\n        // Update UI visibility\n        quotesToggle.classList.remove(\"inactive\");\n        searchWithContainer.style.display = isMotivationalQuotesEnabled ? \"none\" : \"flex\";\n        motivationalQuotesCont.style.display = isMotivationalQuotesEnabled ? \"flex\" : \"none\";\n\n        // Show/hide Daily Quote option based on whether quotes are enabled\n        quotesOptions.classList.toggle(\"not-applicable\", !isMotivationalQuotesEnabled);\n\n        // Load quotes if motivational quotes are enabled\n        if (isMotivationalQuotesEnabled) {\n            loadAndDisplayQuote(false);\n        } else {\n            clearQuotesStorage();\n        }\n    };\n\n    // Handle daily quote toggle changes\n    newQuoteOnRefreshCheckbox.addEventListener(\"change\", () => {\n        const isDailyQuote = newQuoteOnRefreshCheckbox.checked;\n        // Store as \"newQuoteOnRefresh = false\" when daily quote is ON (inverted)\n        localStorage.setItem(\"dailyQuoteEnabled\", !isDailyQuote);\n\n        if (isDailyQuote) {\n            // When switching to daily quote, store the current quote as the daily quote\n            const currentQuote = quotesContainer.textContent;\n            const currentAuthor = authorName.textContent;\n            if (currentQuote && currentAuthor) {\n                storeDailyQuote(currentLanguage, {\n                    quote: currentQuote,\n                    author: currentAuthor\n                });\n            }\n        } else {\n            clearOldDailyQuotes();\n            localStorage.removeItem(getDailyQuoteKey(currentLanguage));\n            // When switching off daily quote, load a new quote\n            loadAndDisplayQuote(false);\n        }\n    });\n\n    // Apply initial state\n    updateMotivationalQuotesState();\n\n    // Event Listeners\n    hideSearchWith.addEventListener(\"change\", () => {\n        searchWithContainer.style.display = \"flex\";\n        updateMotivationalQuotesState();\n    });\n\n    motivationalQuotesCheckbox.addEventListener(\"change\", updateMotivationalQuotesState);\n});\n\n"
  },
  {
    "path": "scripts/save-load-states.js",
    "content": "/*\n * Material You NewTab\n * Copyright (c) 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program.\n * If not, see <https://www.gnu.org/licenses/>.\n */\n\n/* ------ Helper functions for saving and loading states ------ */\n\n// Function to save checkbox state to localStorage\nfunction saveCheckboxState(key, checkbox) {\n    localStorage.setItem(key, checkbox.checked ? \"checked\" : \"unchecked\");\n}\n\nconst bookmarkGridCheckbox = document.getElementById(\"bookmarkGridCheckbox\");\n// Function to load and apply checkbox state from localStorage\nfunction loadCheckboxState(key, checkbox) {\n    const savedState = localStorage.getItem(key);\n    checkbox.checked = savedState === \"checked\";\n    if (key === \"bookmarkGridCheckboxState\") {\n        if (!savedState) {\n            bookmarkGridCheckbox.click();\n        } else {\n            bookmarkGridCheckbox.click();\n            bookmarkGridCheckbox.click();\n        }\n    }\n}\n\n// Function to save display status to localStorage\nfunction saveDisplayStatus(key, displayStatus) {\n    localStorage.setItem(key, displayStatus);\n}\n\n// Function to load and apply display status from localStorage\nfunction loadDisplayStatus(key, element) {\n    const savedStatus = localStorage.getItem(key);\n    if (savedStatus === \"flex\") {\n        element.style.display = \"flex\";\n    } else {\n        element.style.display = \"none\";\n    }\n}\n\n// Function to save activeness status to localStorage\nfunction saveActiveStatus(key, activeStatus) {\n    localStorage.setItem(key, activeStatus);\n}\n\n// Function to load and apply activeness status from localStorage\nfunction loadActiveStatus(key, element) {\n    const savedStatus = localStorage.getItem(key);\n    if (savedStatus === \"active\") {\n        element.classList.remove(\"inactive\");\n    } else {\n        element.classList.add(\"inactive\");\n    }\n}\n"
  },
  {
    "path": "scripts/script.js",
    "content": "/*\n * Material You New Tab\n * Copyright (c) 2024-2026 Prem, 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program.\n * If not, see <https://www.gnu.org/licenses/>.\n */\n\n// ------------------------------------ Tips ------------------------------------\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n    // Hide tips that are not relevant to mobile\n    if (!isDesktop) {\n        document.querySelectorAll('.hideOnMobile').forEach(el => el.style.display = 'none');\n    }\n\n    // Determine the correct key for adjustZoomInfo based on OS\n    const adjustZoomInfo = document.getElementById(\"adjustZoomInfo\");\n    let adjustZoomInfoText = translations[currentLanguage]?.adjustZoomInfo || translations[\"en\"].adjustZoomInfo;\n    if (isMac) {\n        adjustZoomInfoText = adjustZoomInfoText.replace(/Ctrl/g, \"⌘\");\n    }\n    adjustZoomInfo.textContent = adjustZoomInfoText;\n\n    // Change browser theme info based on the user's browser\n    const changeBrowserThemeInfo = document.getElementById(\"changeBrowserThemeInfo\");\n    if (isFirefoxAll) {\n        changeBrowserThemeInfo.innerHTML = translations[currentLanguage]?.firefoxThemeInfo || translations[\"en\"].firefoxThemeInfo;\n    } else if (isEdge) {\n        changeBrowserThemeInfo.innerHTML = translations[currentLanguage]?.edgeThemeInfo || translations[\"en\"].edgeThemeInfo;\n    } else if (isBrave) {\n        changeBrowserThemeInfo.innerHTML = translations[currentLanguage]?.braveThemeInfo || translations[\"en\"].braveThemeInfo;\n    } else {\n        changeBrowserThemeInfo.innerHTML = translations[currentLanguage]?.chromeThemeInfo || translations[\"en\"].chromeThemeInfo;\n    }\n\n    const firefoxHomepage = document.getElementById(\"firefoxHomepage\");\n    const updateFirefoxHomepageInfo = document.getElementById(\"updateFirefoxHomepageInfo\");\n    if (isFirefox) {\n        firefoxHomepage.style.display = \"block\";\n        updateFirefoxHomepageInfo.innerHTML = translations[currentLanguage]?.updateFirefoxHomepageInfo || translations[\"en\"].updateFirefoxHomepageInfo;\n    }\n\n    // Hide tips\n    const tips = document.getElementById(\"tips\");\n    const dontShowButton = document.getElementById(\"dontShowTips\");\n\n    // Check if the user has previously disabled tips\n    if (localStorage.getItem(\"hideTips\") === \"true\") {\n        tips.style.display = \"none\";\n    }\n\n    // Hide tips and save preference when button is clicked\n    dontShowButton.addEventListener(\"click\", function () {\n        tips.style.display = \"none\";\n        localStorage.setItem(\"hideTips\", \"true\"); // Save preference\n    });\n});\n\n\n// ------------------------------- Footer Toast -------------------------------\n(function () {\n    if (isFirefoxAll || !isDesktop) return; // Don't show on Firefox or mobile\n\n    const TOAST_DURATION = 30 * 1000; // 30 seconds\n    const STORAGE_KEY = 'chrome-footer-toast-shown';\n\n    const toast = document.getElementById('chromeFooterToast');\n    const progressBar = document.getElementById('toastProgressBar');\n    const closeBtn = document.getElementById('toastClose');\n\n    let progressInterval;\n    let elapsedTime = 0;\n    let lastTick = 0;\n    let isPaused = false;\n\n    function showToast() {\n        // Check if toast has been shown before\n        const hasShown = localStorage.getItem(STORAGE_KEY);\n        if (hasShown) return;\n\n        // Mark as shown\n        localStorage.setItem(STORAGE_KEY, 'true');\n\n        // Show toast after brief delay\n        setTimeout(() => {\n            toast.classList.add('show');\n            startProgress();\n        }, 1500);\n    }\n\n    function hideToast() {\n        toast.classList.remove('show');\n        clearInterval(progressInterval);\n    }\n\n    function startProgress() {\n        lastTick = Date.now();\n\n        progressInterval = setInterval(() => {\n            if (isPaused) return;\n\n            const now = Date.now();\n            elapsedTime += now - lastTick;\n            lastTick = now;\n\n            const remaining = Math.max(0, 100 - (elapsedTime / TOAST_DURATION) * 100);\n\n            progressBar.style.width = remaining + '%';\n\n            if (elapsedTime >= TOAST_DURATION) {\n                hideToast();\n            }\n        }, 50);\n    }\n\n    // Hover pause\n    toast.addEventListener('mouseenter', () => {\n        isPaused = true;\n    });\n\n    toast.addEventListener('mouseleave', () => {\n        isPaused = false;\n        lastTick = Date.now();\n    });\n\n    closeBtn.addEventListener('click', hideToast);\n\n    showToast();\n})();\n"
  },
  {
    "path": "scripts/search-suggestions.js",
    "content": "/*\n * Material You NewTab\n * Copyright (c) 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program.\n * If not, see <https://www.gnu.org/licenses/>.\n */\n\n// --------------------------------- Proxy ---------------------------------\nlet proxyurl;\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n    const userProxyInput = document.getElementById(\"userproxy\");\n    const saveProxyButton = document.getElementById(\"saveproxy\");\n    const savedProxy = localStorage.getItem(\"proxy\");\n\n    const defaultProxyURL = \"https://mynt-proxy.rhythmcorehq.com/proxy?url=\"; //Default proxy url\n\n    if (savedProxy && savedProxy !== defaultProxyURL) {\n        userProxyInput.value = savedProxy;\n    }\n\n    // Allow pressing Enter to save the proxy\n    userProxyInput.addEventListener(\"keydown\", (event) => {\n        if (event.key === \"Enter\") {\n            saveProxyButton.click();\n        }\n    });\n\n    // Save the proxy to localStorage\n    saveProxyButton.addEventListener(\"click\", () => {\n        proxyurl = userProxyInput.value.trim();\n\n        // If the input is empty, use the default proxy.\n        if (proxyurl === \"\") {\n            proxyurl = defaultProxyURL;\n        } else {\n            // Validate if input starts with \"http://\" or \"https://\"\n            if (!(proxyurl.startsWith(\"http://\") || proxyurl.startsWith(\"https://\"))) {\n                proxyurl = \"https://\" + proxyurl;\n            }\n        }\n        // Set the proxy in localStorage, clear the input, and reload the page\n        localStorage.setItem(\"proxy\", proxyurl);\n        userProxyInput.value = \"\";\n        location.reload();\n    });\n\n    // Determine which proxy URL to use\n    proxyurl = savedProxy || defaultProxyURL;\n});\n\n// ---------------------------- Search Suggestions ----------------------------\n\nlet lastInteractionBy = null;\nlet originalSearchText = \"\"; // Store the original search text\nconst resultBox = document.getElementById(\"resultBox\");\n\n// Show the result box\nfunction showResultBox() {\n    resultBox.classList.add(\"show\");\n    resultBox.style.display = \"block\";\n}\n\n// Hide the result box\nfunction hideResultBox() {\n    resultBox.classList.remove(\"show\");\n    //resultBox.style.display = \"none\";\n}\n\nshowResultBox();\nhideResultBox();\n\nsearchInput.addEventListener(\"input\", async function () {\n    const searchsuggestionscheckbox = document.getElementById(\"searchsuggestionscheckbox\");\n    if (searchsuggestionscheckbox.checked) {\n        const query = this.value;\n\n        // Store original text when user starts typing\n        originalSearchText = query;\n\n        if (query.length > 0) {\n            try {\n                // Fetch autocomplete suggestions\n                const suggestions = await getAutocompleteSuggestions(query);\n\n                if (suggestions === \"\") {\n                    hideResultBox();\n                } else {\n                    // Clear the result box\n                    resultBox.innerHTML = \"\";\n\n                    // Add suggestions to the result box\n                    suggestions.forEach((suggestion, index) => {\n                        const resultItem = document.createElement(\"div\");\n                        resultItem.classList.add(\"resultItem\");\n                        resultItem.textContent = suggestion;\n                        resultItem.setAttribute(\"data-index\", index);\n\n                        resultItem.onclick = () => {\n                            performSearch(suggestion);\n                        };\n\n                        resultItem.addEventListener(\"mouseenter\", () => {\n                            // Remove existing highlight\n                            const currentlyActive = resultBox.querySelector(\".active\");\n                            if (currentlyActive) currentlyActive.classList.remove(\"active\");\n\n                            // Mark this as active\n                            resultItem.classList.add(\"active\");\n                            lastInteractionBy = \"mouse\";\n                        });\n\n                        resultBox.appendChild(resultItem);\n                    });\n\n                    // Check if the dropdown of search shortcut is open\n                    const dropdown = document.querySelector(\".dropdown-content\");\n\n                    if (dropdown.style.display === \"block\") {\n                        dropdown.style.display = \"none\";\n                    }\n                    showResultBox();\n                }\n            } catch (error) {\n                // Handle the error (if needed)\n            }\n        } else {\n            hideResultBox();\n        }\n    }\n});\n\nsearchInput.addEventListener(\"keydown\", function (e) {\n    const activeItem = resultBox.querySelector(\".active\");\n    let currentIndex = activeItem ? parseInt(activeItem.getAttribute(\"data-index\")) : -1;\n\n    if (resultBox.children.length > 0 && resultBox.classList.contains(\"show\")) {\n        if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n            e.preventDefault();\n            lastInteractionBy = \"keyboard\";\n\n            if (activeItem) {\n                activeItem.classList.remove(\"active\");\n            }\n\n            // Calculate new index based on direction\n            if (e.key === \"ArrowDown\") {\n                currentIndex = (currentIndex + 1) % resultBox.children.length;\n            } else { // ArrowUp\n                currentIndex = (currentIndex - 1 + resultBox.children.length) % resultBox.children.length;\n            }\n\n            resultBox.children[currentIndex].classList.add(\"active\");\n\n            // Ensure the active item is visible within the result box\n            const activeElement = resultBox.children[currentIndex];\n            activeElement.scrollIntoView({ behavior: \"smooth\", block: \"nearest\" });\n\n            // Auto-complete the search input with selected suggestion\n            const suggestionText = activeElement.textContent;\n            this.value = suggestionText;\n\n        } else if ((e.key === \"ArrowRight\" || e.key === \"Tab\") && activeItem && lastInteractionBy === \"mouse\") {\n            // Check if cursor is at end\n            const cursorAtEnd = this.selectionStart === this.value.length;\n\n            if (cursorAtEnd) {\n                e.preventDefault();\n                const suggestionText = activeItem.textContent;\n                this.value = suggestionText;\n            }\n\n        } else if (e.key === \"Enter\") {\n            e.preventDefault();\n            if (activeItem) {\n                // Selected suggestion + Enter = search\n                activeItem.click();\n\n            } else {\n                // No selection, search with current input value\n                performSearch(this.value);\n            }\n\n        } else if (e.key === \"Escape\") {\n            e.preventDefault();\n            // Restore original search text\n            this.value = originalSearchText;\n            // Remove any active highlights\n            if (activeItem) {\n                activeItem.classList.remove(\"active\");\n            }\n        }\n    } else if (e.key === \"Enter\") {\n        // No suggestions available, search with current input\n        e.preventDefault();\n        performSearch(this.value);\n    }\n});\n\n// Check for different browsers and return the corresponding client parameter\nfunction getClientParam() {\n    if (isFirefox) return \"firefox\";\n    if (isOpera) return \"opera\";\n    if (isChromiumBased) return \"chrome\";\n    if (isSafari) return \"safari\";\n    return \"firefox\"; // Default to Firefox if the browser is not recognized\n}\n\nlet lastRedditRequestTime = 0;\n\nasync function getAutocompleteSuggestions(query) {\n    const clientParam = getClientParam(); // Get the browser client parameter dynamically\n    var selectedOption = document.querySelector('input[name=\"search-engine\"]:checked').value;\n\n    // 🔒 Throttle Reddit API calls\n    const now = Date.now();\n    if (selectedOption === \"engine7\") {\n        if (now - lastRedditRequestTime < 1000) {\n            return []; // skip call if within 1 second\n        }\n        lastRedditRequestTime = now;\n    }\n\n    const searchSuggestionsAPI = {\n        engine0: `https://duckduckgo.com/ac/?q=${encodeURIComponent(query)}&type=list`,\n        engine1: `https://www.google.com/complete/search?client=${clientParam}&q=${encodeURIComponent(query)}`,\n        engine2: `https://duckduckgo.com/ac/?q=${encodeURIComponent(query)}&type=list`,\n        engine4: `https://search.brave.com/api/suggest?q=${encodeURIComponent(query)}&rich=true&source=web`,\n        engine5: `https://www.google.com/complete/search?client=${clientParam}&ds=yt&q=${encodeURIComponent(query)}`,\n        engine7: `https://www.reddit.com/search.json?q=${encodeURIComponent(query)}&sort=relevance&limit=15`,\n        engine8: `https://${languageCode}.wikipedia.org/w/api.php?action=opensearch&search=${encodeURIComponent(query)}&format=json`\n    };\n\n    const useproxyCheckbox = document.getElementById(\"useproxyCheckbox\");\n    let apiUrl = searchSuggestionsAPI[selectedOption] || searchSuggestionsAPI[\"engine1\"];\n    if (useproxyCheckbox.checked && selectedOption !== \"engine7\") {\n        apiUrl = proxyurl + encodeURIComponent(apiUrl);\n    }\n\n    try {\n        const response = await fetch(apiUrl);\n        const data = await response.json();\n\n        if (selectedOption === \"engine4\") {\n            const suggestions = data[1].map(item => {\n                if (item.is_entity) {\n                    return `${item.q} - ${item.name} (${item.category ? item.category : \"No category\"})`;\n                } else {\n                    return item.q;\n                }\n            });\n            return suggestions;\n\n        } else if (selectedOption === \"engine7\") {\n            const suggestions = [];\n            if (data && data.data && data.data.children) {\n                data.data.children.forEach(post => {\n                    if (post.data && post.data.title) {\n                        const subreddit = post.data.subreddit_name_prefixed;\n                        suggestions.push(`${post.data.title} (${subreddit})`);\n                    }\n                });\n            }\n            return suggestions;\n\n        } else {\n            return data[1];\n        }\n    } catch (error) {\n        console.error(\"Error fetching autocomplete suggestions:\", error);\n        return [];\n    }\n}\n\n// Hide results when clicking outside\ndocument.addEventListener(\"click\", function (event) {\n    if (!searchbar.contains(event.target)) {\n        hideResultBox();\n    }\n});\n\n// ------------------------- Toggles --------------------------\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n    const searchsuggestionscheckbox = document.getElementById(\"searchsuggestionscheckbox\");\n    const proxybypassField = document.getElementById(\"proxybypassField\");\n    const proxyinputField = document.getElementById(\"proxyField\");\n    const useproxyCheckbox = document.getElementById(\"useproxyCheckbox\");\n    const searchSuggestionsHeader = document.getElementById(\"searchSuggestionsHeader\");\n    const proxyOptions = document.querySelector(\".proxyOptions\");\n\n    // This function shows the proxy disclaimer.\n    async function showProxyDisclaimer() {\n        const message = translations[currentLanguage]?.ProxyDisclaimer || translations[\"en\"].ProxyDisclaimer;\n        return await confirmPrompt(message, agreeText, cancelText);\n    }\n\n    // Requests optional host permissions for suggestion APIs\n    async function requestHostPermissions() {\n        if (!chrome?.permissions?.request)\n            return false;\n\n        return new Promise((resolve) => {\n            chrome.permissions.request({\n                origins: [\n                    \"https://www.google.com/complete/search?client=*\",\n                    \"https://duckduckgo.com/ac/?q=*\",\n                    \"https://search.brave.com/api/suggest?q=*\",\n                    \"https://*.wikipedia.org/w/api.php?action=opensearch&search=*\"\n                ]\n            }, (granted) => {\n                resolve(granted);\n            });\n        });\n    }\n\n    function applySearchSuggestionsState(enabled) {\n        proxyOptions.classList.toggle(\"not-applicable\", !enabled);\n        proxybypassField.classList.toggle(\"inactive\", !enabled);\n\n        if (!enabled) {\n            useproxyCheckbox.checked = false;\n            saveCheckboxState(\"useproxyCheckboxState\", useproxyCheckbox);\n            proxyinputField.classList.add(\"inactive\");\n            saveActiveStatus(\"proxyinputField\", \"inactive\");\n            setTimeout(() => searchSuggestionsHeader.style.borderBottom = \"none\", 80);\n        } else\n            searchSuggestionsHeader.style.borderBottom = \"\";\n    }\n\n    // Add change event listeners for the checkboxes\n    searchsuggestionscheckbox.addEventListener(\"change\", async function () {\n        saveCheckboxState(\"searchsuggestionscheckboxState\", searchsuggestionscheckbox);\n\n        const enabled = searchsuggestionscheckbox.checked;\n        applySearchSuggestionsState(enabled);\n\n        if (enabled && !isFirefoxAll) {\n            await requestHostPermissions();\n        }\n    });\n\n    useproxyCheckbox.addEventListener(\"change\", async function () {\n        if (useproxyCheckbox.checked) {\n            // Show the disclaimer and check the user's choice\n            const userConfirmed = await showProxyDisclaimer();\n            if (userConfirmed) {\n                // Only enable the proxy if the user confirmed\n                saveCheckboxState(\"useproxyCheckboxState\", useproxyCheckbox);\n                proxyinputField.classList.remove(\"inactive\");\n                saveActiveStatus(\"proxyinputField\", \"active\");\n            } else {\n                // Revert the checkbox state if the user did not confirm\n                useproxyCheckbox.checked = false;\n            }\n        } else {\n            // If the checkbox is unchecked, disable the proxy\n            saveCheckboxState(\"useproxyCheckboxState\", useproxyCheckbox);\n            proxyinputField.classList.add(\"inactive\");\n            saveActiveStatus(\"proxyinputField\", \"inactive\");\n        }\n    });\n\n    // Load and apply the saved checkbox states and display statuses\n    loadCheckboxState(\"searchsuggestionscheckboxState\", searchsuggestionscheckbox);\n    loadCheckboxState(\"useproxyCheckboxState\", useproxyCheckbox);\n    loadActiveStatus(\"proxyinputField\", proxyinputField);\n    loadActiveStatus(\"proxybypassField\", proxybypassField);\n    applySearchSuggestionsState(searchsuggestionscheckbox.checked);\n});\n"
  },
  {
    "path": "scripts/search.js",
    "content": "/*\n * Material You New Tab\n * Copyright (c) 2024-2026 Prem, 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program.\n * If not, see <https://www.gnu.org/licenses/>.\n */\n\nconst searchbar = document.getElementById(\"searchbar\");\nconst searchInput = document.getElementById(\"searchQ\");\n\nconst languageCode = (localStorage.getItem(\"selectedLanguage\") || \"en\").slice(0, 2);\nconst searchQueryURLs = {\n    engine1: \"https://www.google.com/search?q=\",\n    engine2: \"https://duckduckgo.com/?q=\",\n    engine3: \"https://bing.com/?q=\",\n    engine4: \"https://search.brave.com/search?q=\",\n    engine5: \"https://www.youtube.com/results?search_query=\",\n    engine6: \"https://www.google.com/search?tbm=isch&q=\",\n    engine7: \"https://www.reddit.com/search/?q=\",\n    engine8: `https://${languageCode}.wikipedia.org/wiki/Special:Search?search=`,\n    engine9: \"https://www.quora.com/search?q=\"\n};\n\n// Showing border or outline when you click on the searchbar\nsearchbar.addEventListener(\"click\", function (event) {\n    event.stopPropagation();\n    searchbar.classList.add(\"active\");\n\n    if (!event.target.closest(\".dropdown-btn\")) {\n        searchInput.focus();\n    }\n});\n\ndocument.addEventListener(\"click\", function (event) {\n    // Check if the clicked element is not the searchbar\n    if (!searchbar.contains(event.target)) {\n        searchbar.classList.remove(\"active\");\n    }\n});\n\n// Search mode function\nconst searchWith = document.getElementById(\"searchWithHint\");\nconst searchEngines = document.querySelectorAll(\".searchEnginesContainer .search-engine\");\nconst searchEnginesContainer = document.querySelector(\".searchEnginesContainer\");\nlet activeSearchMode = localStorage.getItem(\"activeSearchMode\") || \"search-with\";\n\nsearchWith.addEventListener(\"click\", function (event) {\n    activeSearchMode = (activeSearchMode === \"search-with\") ? \"search-on\" : \"search-with\";\n    searchEnginesContainer.classList.toggle(\"show\");\n    toggleSearchEngines(activeSearchMode);\n\n    event.stopPropagation();\n    searchInput.focus();\n    searchbar.classList.add(\"active\");\n\n    setTimeout(() => {\n        searchEnginesContainer.classList.remove(\"show\");\n    }, 300);\n});\n\nfunction toggleSearchEngines(category) {\n    const defaultItems = {\n        \"search-with\": \"engine0\",\n        \"search-on\": \"engine5\",\n    };\n    const checkeditem = localStorage.getItem(`selectedSearchEngine-${category}`) || defaultItems[category];\n    const searchModeName = category === \"search-with\" ? \"searchWithHint\" : \"searchOnHint\";\n    searchWith.innerText = translations[currentLanguage]?.[searchModeName] || translations[\"en\"][searchModeName];\n\n    searchEngines.forEach(engine => {\n        if (engine.getAttribute(\"data-category\") === category) {\n            engine.style.display = \"flex\";\n        } else {\n            engine.style.display = \"none\";\n        }\n\n        if (engine.lastElementChild.value === checkeditem) {\n            const radioBtn = engine.querySelector('input[type=\"radio\"]');\n            radioBtn.checked = true;\n            radioBtn.dispatchEvent(new Event(\"change\"));\n        }\n    });\n}\n\n// Search function\nconst dropdown = document.querySelector(\".dropdown-content\");\n\ndropdown.addEventListener(\"click\", (event) => {\n    if (dropdown.classList.contains(\"show\")) {\n        event.stopPropagation();\n        dropdown.classList.remove(\"show\");\n        searchInput.focus();\n    }\n});\n\ndocument.addEventListener(\"click\", (event) => {\n    if (dropdown.classList.contains(\"show\")) {\n        event.stopPropagation();\n        dropdown.classList.remove(\"show\");\n    }\n});\n\n\ndocument.querySelector(\".dropdown-btn\").addEventListener(\"click\", function () {\n    const resultBox = document.getElementById(\"resultBox\");\n    if (resultBox.classList.toString().includes(\"show\")) return;\n\n    // Clear selected state and reset index when dropdown opens\n    dropdownItems.forEach(item => item.classList.remove(\"selected\"));\n    selectedIndex = -1;\n\n    dropdown.classList.toggle(\"show\");\n\n});\n\nconst enterBTN = document.getElementById(\"enterBtn\");\nconst searchEngineRadio = document.getElementsByName(\"search-engine\");\nconst searchDropdowns = document.querySelectorAll('[id$=\"-dropdown\"]:not(*[data-default])');\nconst defaultEngine = document.querySelector('#default-dropdown-item div[id$=\"-dropdown\"]');\n\nconst sortDropdown = () => {\n    // Change the elements to the array\n    const elements = Array.from(searchDropdowns);\n\n    // Sort the dropdown\n    const sortedDropdowns = elements.sort((a, b) => {\n        const engineA = parseInt(a.getAttribute(\"data-engine\"), 10);\n        const engineB = parseInt(b.getAttribute(\"data-engine\"), 10);\n\n        return engineA - engineB;\n    })\n\n    // get the parent\n    const parent = sortedDropdowns[0]?.parentNode;\n\n    // Append the items if parent exists.\n    if (parent) {\n        sortedDropdowns.forEach(item => parent.appendChild(item));\n    }\n}\n\n// This will add event listener for click in the search bar\nsearchDropdowns.forEach(element => {\n    element.addEventListener(\"click\", () => {\n        const engine = element.getAttribute(\"data-engine\");\n        const radioButton = document.querySelector(`input[type=\"radio\"][value=\"engine${engine}\"]`);\n        const selector = `*[data-engine-name=${element.getAttribute(\"data-engine-name\")}]`;\n\n        radioButton.checked = true;\n\n        // Swap the dropdown and sort them\n        swapDropdown(selector);\n        sortDropdown()\n\n        localStorage.setItem(`selectedSearchEngine-${radioButton.parentElement.dataset.category}`, radioButton.value);\n        localStorage.setItem(`activeSearchMode`, radioButton.parentElement.dataset.category);\n    });\n});\n\n// Make entire search-engine div clickable\ndocument.querySelectorAll(\".search-engine\").forEach((engineDiv) => {\n    engineDiv.addEventListener(\"click\", (event) => {\n        event.stopPropagation();\n        const radioButton = engineDiv.querySelector('input[type=\"radio\"]');\n\n        radioButton.checked = true;\n\n        const radioButtonValue = radioButton.value.charAt(radioButton.value.length - 1);\n\n        const selector = `[data-engine=\"${radioButtonValue}\"]`;\n\n        // Swap the dropdown\n        swapDropdown(selector);\n        sortDropdown();\n\n        localStorage.setItem(`selectedSearchEngine-${radioButton.parentElement.dataset.category}`, radioButton.value);\n        localStorage.setItem(`activeSearchMode`, radioButton.parentElement.dataset.category);\n\n        searchInput.focus();\n        searchbar.classList.add(\"active\");\n    });\n});\n\n/**\n * Swap attributes and contents between the default engine and a selected element.\n * @param {HTMLElement} defaultEngine - The current default engine element.\n * @param {HTMLElement} selectedElement - The clicked or selected element.\n */\nfunction swapDropdown(selectedElement) {\n    // Swap innerHTML\n    const element = document.querySelector(selectedElement);\n    const tempHTML = defaultEngine.innerHTML;\n    defaultEngine.innerHTML = element.innerHTML;\n    element.innerHTML = tempHTML;\n\n    // Swap attributes\n    [\"data-engine\", \"data-engine-name\", \"id\"].forEach(attr => {\n        const tempAttr = defaultEngine.getAttribute(attr);\n        defaultEngine.setAttribute(attr, element.getAttribute(attr));\n        element.setAttribute(attr, tempAttr);\n    });\n}\n\n// Function to perform search\nfunction performSearch(query) {\n    const selectedOption = document.querySelector('input[name=\"search-engine\"]:checked').value;\n    const searchTerm = query || searchInput.value;\n\n    if (searchTerm !== \"\") {\n        if (selectedOption === \"engine0\") {\n            try {\n                if (isFirefox) {\n                    browser.search.query({ text: searchTerm });\n                } else {\n                    chrome.search.query({ text: searchTerm });\n                }\n            } catch (error) {\n                // Fallback to Google if an error occurs\n                var fallbackUrl = searchQueryURLs.engine1 + encodeURIComponent(searchTerm);\n                window.location.href = fallbackUrl;\n            }\n        } else {\n            var searchUrl = searchQueryURLs[selectedOption] + encodeURIComponent(searchTerm);\n            window.location.href = searchUrl;\n        }\n    }\n}\n\n// Event listeners\nenterBTN.addEventListener(\"click\", () => performSearch());\n// Enter key handling is managed in the search suggestions keydown listener\n\n// Set selected search engine from local storage\nconst storedSearchEngine = localStorage.getItem(`selectedSearchEngine-${activeSearchMode}`);\n\ntoggleSearchEngines(activeSearchMode);\n\nif (storedSearchEngine) {\n    // Find Serial Number - SN with the help of charAt.\n    const storedSearchEngineSN = storedSearchEngine.charAt(storedSearchEngine.length - 1);\n    const defaultDropdownSN = document.querySelector(\"*[data-default]\").getAttribute(\"data-engine\");\n\n    // check if the default selected search engine is same as the stored one.\n    if (storedSearchEngineSN !== defaultDropdownSN) {\n        // The following line will find out the appropriate dropdown for the selected search engine.\n        const selector = `*[data-engine=\"${storedSearchEngineSN}\"]`;\n\n        swapDropdown(selector);\n        sortDropdown();\n    }\n\n    const selectedRadioButton = document.querySelector(`input[name=\"search-engine\"][value=\"${storedSearchEngine}\"]`);\n    if (selectedRadioButton) {\n        selectedRadioButton.checked = true;\n    }\n}\n\nconst dropdownItems = document.querySelectorAll(\".dropdown-item:not(*[data-default])\");\nlet selectedIndex = -1;\n\n// Function to update the selected item\nfunction updateSelection() {\n    // let hasSelected = [];\n    dropdownItems.forEach((item, index) => {\n\n        item.addEventListener(\"mouseenter\", () => {\n            item.classList.add(\"selected\");\n        })\n        item.addEventListener(\"mouseleave\", () => {\n            item.classList.remove(\"selected\");\n        })\n\n        if (index === selectedIndex) {\n            item.focus()\n            item.classList.add(\"selected\");\n        } else {\n            item.focus()\n            item.classList.remove(\"selected\");\n        }\n    });\n}\n\n// Event listener for keydown events to navigate up/down\ndocument.querySelector(\".dropdown\").addEventListener(\"keydown\", function (event) {\n    if (dropdown.classList.contains(\"show\")) {\n        if (event.key === \"ArrowDown\") {\n            event.preventDefault();  // Prevent the page from scrolling\n            selectedIndex = (selectedIndex + 1) % dropdownItems.length; // Move down, loop around\n\n            // Scroll the newly selected item into view\n            const activeElement = dropdownItems[selectedIndex];\n            activeElement.scrollIntoView({ behavior: \"smooth\", block: \"nearest\" });\n        } else if (event.key === \"ArrowUp\") {\n            event.preventDefault();  // Prevent the page from scrolling\n            selectedIndex = (selectedIndex - 1 + dropdownItems.length) % dropdownItems.length; // Move up, loop around\n\n            // Scroll the newly selected item into view\n            const activeElement = dropdownItems[selectedIndex];\n            activeElement.scrollIntoView({ behavior: \"smooth\", block: \"nearest\" });\n        } else if (event.key === \"Enter\") {\n            const selectedItem = document.querySelector(\".dropdown-content .selected\");\n            if (!selectedItem) return;\n\n            const engine = selectedItem.getAttribute(\"data-engine\");\n            const radioButton = document.querySelector(`input[type=\"radio\"][value=\"engine${engine}\"]`);\n            radioButton.checked = true;\n\n            // Swap the dropdown and sort them\n            swapDropdown(`*[data-engine=\"${engine}\"]`);\n            sortDropdown();\n\n            localStorage.setItem(\"selectedSearchEngine\", radioButton.value);\n\n            // Close the dropdown after selection\n            dropdown.classList.remove(\"show\");\n            searchInput.focus();\n        }\n        updateSelection();\n    }\n});\n\n// Initial setup for highlighting\nupdateSelection();\n\n// Event listener for search engine radio buttons\nsearchEngineRadio.forEach((radio) => {\n    radio.addEventListener(\"change\", () => {\n        const selectedOption = document.querySelector('input[name=\"search-engine\"]:checked');\n        localStorage.setItem(`selectedSearchEngine-${selectedOption.parentElement.dataset.category}`, selectedOption.value);\n        localStorage.setItem(`activeSearchMode`, selectedOption.parentElement.dataset.category);\n    });\n});\n\n/* ------ Event Listeners for Searchbar dropdown ------ */\nconst searchIconContainer = document.querySelectorAll(\".searchIcon\");\n\nconst showEngineContainer = () => {\n    searchIconContainer[1].style.display = \"none\";\n    searchIconContainer[0].style.display = \"block\";\n    document.getElementById(\"search-with-container\").style.visibility = \"visible\";\n}\n\nconst hideEngineContainer = () => {\n    searchIconContainer[0].style.display = \"none\";\n    searchIconContainer[1].style.display = \"block\";\n    document.getElementById(\"search-with-container\").style.visibility = \"hidden\";\n}\n\nconst initShortCutSwitch = (element) => {\n    if (element.checked) {\n        hideEngineContainer();\n        localStorage.setItem(\"showShortcutSwitch\", true)\n    } else {\n        showEngineContainer();\n        localStorage.setItem(\"showShortcutSwitch\", false)\n    }\n}\n\n// Hiding Search Icon And Search With Options for Search switch shortcut\nconst hideSearchWith = document.getElementById(\"shortcut_switchcheckbox\");\nhideSearchWith.addEventListener(\"change\", (e) => {\n    initShortCutSwitch(e.target);\n\n    // Fetch active search mode from storage\n    let activeSearchMode = localStorage.getItem(\"activeSearchMode\") || \"search-with\";\n    toggleSearchEngines(activeSearchMode);\n\n    // Get the selected search engine from localStorage\n    const storedSearchEngine = localStorage.getItem(`selectedSearchEngine-${activeSearchMode}`);\n\n    // Find the corresponding radio button\n    const selectedRadioButton = document.querySelector(`input[name=\"search-engine\"][value=\"${storedSearchEngine}\"]`);\n    selectedRadioButton.checked = true;\n\n    // Ensure UI is updated properly\n    const storedSearchEngineSN = storedSearchEngine.charAt(storedSearchEngine.length - 1);\n    const selector = `*[data-engine=\"${storedSearchEngineSN}\"]`;\n\n    swapDropdown(selector);\n    sortDropdown();\n});\n\n// Intialize shortcut switch\nif (localStorage.getItem(\"showShortcutSwitch\")) {\n    const isShortCutSwitchEnabled = localStorage.getItem(\"showShortcutSwitch\").toString() === \"true\";\n    document.getElementById(\"shortcut_switchcheckbox\").checked = isShortCutSwitchEnabled;\n\n    if (isShortCutSwitchEnabled) {\n        hideEngineContainer();\n    } else if (!isShortCutSwitchEnabled) {\n        showEngineContainer()\n    }\n} else {\n    localStorage.setItem(\"showShortcutSwitch\", false);\n}\n\ninitShortCutSwitch(hideSearchWith);\n\n// Swipe/Scroll to change search engines\nlet engineSwipeStartY = 0;\nlet engineSwipeEndY = 0;\nlet isEngineSwiping = false;\nlet isEngineSwitching = false;\nlet engineSwitchTimeout = null;\nlet currentSearchEngineIndex = 0;\nconst dropdownBtn = document.querySelector('.dropdown-btn');\n\n// Get all search engines from both modes combined\nfunction getAllEngines() {\n    return Array.from(searchEngines);\n}\n\n// Get current selected engine index from all engines\nfunction getCurrentSearchEngineIndex() {\n    const allEngines = getAllEngines();\n    const selectedOption = document.querySelector('input[name=\"search-engine\"]:checked');\n    return allEngines.findIndex(engine =>\n        engine.querySelector('input[type=\"radio\"]').value === selectedOption.value\n    );\n}\n\n// Switch to next or previous engine\nfunction switchEngine(direction) {\n    if (isEngineSwitching) return;\n\n    const allEngines = getAllEngines();\n    if (allEngines.length <= 1) return;\n\n    currentSearchEngineIndex = getCurrentSearchEngineIndex();\n    let newIndex;\n\n    if (direction === 'next') {\n        newIndex = (currentSearchEngineIndex + 1) % allEngines.length;\n    } else {\n        newIndex = (currentSearchEngineIndex - 1 + allEngines.length) % allEngines.length;\n    }\n\n    const newEngine = allEngines[newIndex];\n    const radioButton = newEngine.querySelector('input[type=\"radio\"]');\n\n    // Store direction for CSS animation\n    searchbar.setAttribute('data-switch-direction', direction);\n\n    // Add transition class to searchbar\n    searchbar.classList.add('engine-switching');\n\n    // Delay the actual swap until fade-out completes (45% of 400ms = 180ms)\n    setTimeout(() => {\n        radioButton.checked = true;\n\n        const radioButtonValue = radioButton.value.charAt(radioButton.value.length - 1);\n        const selector = `[data-engine=\"${radioButtonValue}\"]`;\n\n        swapDropdown(selector);\n        sortDropdown();\n\n        localStorage.setItem(`selectedSearchEngine-${radioButton.parentElement.dataset.category}`, radioButton.value);\n        localStorage.setItem(`activeSearchMode`, radioButton.parentElement.dataset.category);\n\n        // Update the search mode hint text\n        const newCategory = radioButton.parentElement.dataset.category;\n        toggleSearchEngines(newCategory);\n    }, 180);\n\n    // Remove transition class after animation\n    setTimeout(() => {\n        searchbar.classList.remove('engine-switching');\n        searchbar.removeAttribute('data-switch-direction');\n    }, 400);\n\n    // Prevent rapid scrolling\n    isEngineSwitching = true;\n    clearTimeout(engineSwitchTimeout);\n    engineSwitchTimeout = setTimeout(() => {\n        isEngineSwitching = false;\n    }, 400);\n}\n\n// Touch event handlers for swipe\ndropdownBtn?.addEventListener('touchstart', (e) => {\n    if (!hideSearchWith.checked || dropdown.classList.contains(\"show\")) return;\n    e.stopPropagation();\n    engineSwipeStartY = e.changedTouches[0].screenY;\n    isEngineSwiping = false;\n}, { passive: true });\n\ndropdownBtn?.addEventListener('touchmove', (e) => {\n    if (!hideSearchWith.checked || dropdown.classList.contains(\"show\")) return;\n    e.preventDefault();\n    isEngineSwiping = true;\n}, { passive: false });\n\ndropdownBtn?.addEventListener('touchend', (e) => {\n    if (!hideSearchWith.checked || dropdown.classList.contains(\"show\")) return;\n    e.stopPropagation();\n    engineSwipeEndY = e.changedTouches[0].screenY;\n\n    const swipeDistance = engineSwipeStartY - engineSwipeEndY;\n    const swipeThreshold = 50; // Minimum distance for swipe\n    if (isEngineSwiping && Math.abs(swipeDistance) >= swipeThreshold) {\n        switchEngine(swipeDistance > 0 ? 'next' : 'prev');\n    }\n}, { passive: true });\n\n// Mouse wheel event handler for scroll\ndropdownBtn?.addEventListener('wheel', (e) => {\n    if (!hideSearchWith.checked || dropdown.classList.contains(\"show\")) return;\n    e.preventDefault();\n    e.stopPropagation();\n    switchEngine(e.deltaY > 0 ? 'next' : 'prev'); // Scroll down = next, Scroll up = previous\n}, { passive: false });\n\ndocument.addEventListener(\"keydown\", function (event) {\n    // Prevent shortcut if modal, menu, or bookmarks sidebar is open\n    const modalContainer = document.getElementById(\"prompt-modal-container\");\n    if (\n        modalContainer?.style.display === \"flex\" ||\n        menuBar.style.display !== \"none\" ||\n        bookmarkSidebar.classList.contains(\"open\")\n    ) {\n        return;\n    }\n\n    if (event.key === \"/\" && event.target.tagName !== \"INPUT\" && event.target.tagName !== \"TEXTAREA\" && event.target.isContentEditable !== true) {\n        event.preventDefault();\n        searchInput.focus();\n        searchbar.classList.add(\"active\");\n    }\n});\n"
  },
  {
    "path": "scripts/shortcuts.js",
    "content": "/*\n * Material You New Tab\n * Copyright (c) 2024-2026 Prem, 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n */\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n    // Constants\n    const MAX_SHORTCUTS = 50;\n    const PLACEHOLDER = {\n        get name()      { return translations[currentLanguage]?.shortcutDefaultName || translations[\"en\"].shortcutDefaultName; },\n        url: \"https://github.com/prem-k-r/MaterialYouNewTab\",\n        get inputName() { return translations[currentLanguage]?.shortcutInputName   || translations[\"en\"].shortcutInputName; },\n        get inputUrl()  { return translations[currentLanguage]?.shortcutInputUrl    || translations[\"en\"].shortcutInputUrl; },\n        get inputIcon() { return translations[currentLanguage]?.shortcutInputIcon   || translations[\"en\"].shortcutInputIcon; },\n    };\n\n    // DOM Elements\n    const dom = {\n        shortcuts: document.getElementById(\"shortcuts-section\"),\n        shortcutsCheckbox: document.getElementById(\"shortcutsCheckbox\"),\n        shortcutEditField: document.getElementById(\"shortcutEditField\"),\n        adaptiveIconField: document.getElementById(\"adaptiveIconField\"),\n        adaptiveIconToggle: document.getElementById(\"adaptiveIconToggle\"),\n        shortcutSettingsContainer: document.getElementById(\"shortcutList\"),\n        shortcutsContainer: document.getElementById(\"shortcutsContainer\"),\n        newShortcutButton: document.getElementById(\"newShortcutButton\"),\n        resetShortcutsButton: document.getElementById(\"resetButton\"),\n    };\n\n    // Preset Data\n    const presets = [\n        {\n            name: \"YouTube\",\n            url: \"youtube.com\",\n            domains: [\"youtube.com\", \"m.youtube.com\", \"youtu.be\"],\n            svg: `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"12\" class=\"accentColor shortcutDarkColor\"/><g style=\"transform: scale(0.6); transform-origin: center;\"><path class=\"bgLightTint\" id=\"darkLightTint\" fill-rule=\"evenodd\"\n                    d=\"M23.498 6.186a3.02 3.02 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.02 3.02 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.02 3.02 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.02 3.02 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814M9.545 15.568V8.432L15.818 12z\"/></g></svg>`\n        },\n        {\n            name: \"Gmail\",\n            url: \"mail.google.com\",\n            domains: [\"gmail.com\", \"mail.google.com\"],\n            svg: `<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"12\" cy=\"12\" r=\"12\" class=\"accentColor shortcutDarkColor\"/><g style=\"transform: scale(0.58); transform-origin: center;\"><path class=\"bgLightTint\" id=\"darkLightTint\" \n                    d=\"m8.606 13.6 3.396 2.323 3.274-2.259 7.338 7.24q-.29.095-.614.096H2c-.264 0-.516-.052-.747-.144zM24 7.652V19a2 2 0 0 1-.18.83l-7.193-7.097zM0 7.715l7.25 4.958-7.123 7.03A2.04 2.04 0 0 1 0 19ZM22 3a2 2 0 0 1 2 2v.704l-12.002 8.274L0 5.772V5a2 2 0 0 1 2-2Z\"/></g></svg>`\n        },\n        {\n            name: \"Telegram\",\n            url: \"web.telegram.org\",\n            domains: [\"telegram.org\", \"t.me\", \"web.telegram.org\"],\n            svg: `<svg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"accentColor shortcutDarkColor\"\n                    d=\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0Zm4.64 6.8c-.15 1.58-.8 5.42-1.13 7.19-.14.75-.42 1-.68 1.03-.58.05-1.02-.38-1.58-.75-.88-.58-1.38-.94-2.23-1.5-.99-.65-.35-1.01.22-1.59.15-.15 2.71-2.48 2.76-2.69a.2.2 0 0 0-.05-.18c-.06-.05-.14-.03-.21-.02-.09.02-1.49.95-4.22 2.79-.4.27-.76.41-1.08.4-.36-.01-1.04-.2-1.55-.37-.63-.2-1.12-.31-1.08-.66.02-.18.27-.36.74-.55 2.92-1.27 4.86-2.11 5.83-2.51 2.78-1.16 3.35-1.36 3.73-1.36.08 0 .27.02.39.12.1.08.13.19.14.27-.01.06.01.24 0 .38Z\"/></svg>`\n        },\n        {\n            name: \"WhatsApp\",\n            url: \"web.whatsapp.com\",\n            domains: [\"whatsapp.com\", \"web.whatsapp.com\", \"api.whatsapp.com\"],\n            svg: `<svg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"accentColor shortcutDarkColor\"\n                    d=\"M10 0c5.523 0 10 4.477 10 10s-4.477 10-10 10a9.953 9.953 0 0 1-5.03-1.355L.004 20l1.352-4.968A9.953 9.953 0 0 1 0 10C0 4.477 4.477 0 10 0ZM6.592 5.3l-.2.008a.961.961 0 0 0-.372.1 1.293 1.293 0 0 0-.294.228c-.12.113-.188.211-.261.306a2.73 2.73 0 0 0-.566 1.678c.002.49.13.967.33 1.413.409.902 1.082 1.857 1.97 2.742.214.213.424.427.65.626a9.448 9.448 0 0 0 3.84 2.046l.568.087c.185.01.37-.004.556-.013a1.99 1.99 0 0 0 .833-.231c.131-.067.259-.14.383-.22 0 0 .043-.028.125-.09.135-.1.218-.171.33-.288.083-.086.155-.187.21-.302.078-.163.156-.474.188-.733.024-.198.017-.306.014-.373-.004-.107-.093-.218-.19-.265l-.582-.261s-.87-.379-1.402-.621a.497.497 0 0 0-.176-.041.482.482 0 0 0-.378.127c-.005-.002-.072.055-.795.931a.35.35 0 0 1-.368.13 1.432 1.432 0 0 1-.191-.066c-.124-.052-.167-.072-.252-.108a6.028 6.028 0 0 1-1.575-1.003c-.126-.11-.243-.23-.363-.346a6.298 6.298 0 0 1-1.02-1.268l-.059-.095a.923.923 0 0 1-.102-.205c-.038-.147.061-.265.061-.265s.243-.266.356-.41c.11-.14.203-.276.263-.373.118-.19.155-.385.093-.536-.28-.684-.57-1.365-.868-2.041-.059-.134-.234-.23-.393-.249a4.439 4.439 0 0 0-.162-.016 3.385 3.385 0 0 0-.403.004l.201-.008.001.001Z\"/></svg>`\n        },\n        {\n            name: \"Twitter\",\n            url: \"x.com\",\n            domains: [\"twitter.com\", \"x.com\"],\n            svg: `<svg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path class=\"accentColor shortcutDarkColor\"\n                    d=\"M10 0c5.529 0 10 4.471 10 10s-4.471 10-10 10S0 15.529 0 10 4.471 0 10 0ZM8.171 15.271c4.429 0 6.858-3.671 6.858-6.857V8.1a4.783 4.783 0 0 0 1.2-1.257c-.429.186-.9.314-1.386.386.5-.3.886-.772 1.057-1.329a5.215 5.215 0 0 1-1.529.586 2.405 2.405 0 0 0-1.757-.757A2.42 2.42 0 0 0 10.2 8.143c0 .186.014.371.071.543-2-.1-3.785-1.057-4.971-2.515-.2.358-.329.772-.329 1.215 0 .828.429 1.571 1.072 2-.4 0-.772-.115-1.086-.3v.028c0 1.172.829 2.143 1.929 2.372a2.3 2.3 0 0 1-.629.085c-.157 0-.3-.014-.457-.042.3.957 1.2 1.657 2.243 1.671a4.883 4.883 0 0 1-3 1.029c-.2 0-.386 0-.572-.029a6.765 6.765 0 0 0 3.686 1.086\"/></svg>`\n        },\n        {\n            name: \"Discord\",\n            url: \"discord.com/app\",\n            domains: [\"discord.com\", \"discord.gg\", \"discordapp.com\"],\n            svg: `<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"12\" cy=\"12\" r=\"12\" class=\"accentColor shortcutDarkColor\"/><g style=\"transform: scale(0.75); transform-origin: center;\"><path class=\"bgLightTint\" id=\"darkLightTint\"\n                    d=\"M19.303 5.337A17.3 17.3 0 0 0 14.963 4c-.191.329-.403.775-.552 1.125a16.6 16.6 0 0 0-4.808 0C9.454 4.775 9.23 4.329 9.05 4a17 17 0 0 0-4.342 1.337C1.961 9.391 1.218 13.35 1.59 17.255a17.7 17.7 0 0 0 5.318 2.664 13 13 0 0 0 1.136-1.836c-.627-.234-1.22-.52-1.794-.86.149-.106.297-.223.435-.34 3.46 1.582 7.207 1.582 10.624 0 .149.117.287.234.435.34-.573.34-1.167.626-1.793.86a13 13 0 0 0 1.135 1.836 17.6 17.6 0 0 0 5.318-2.664c.457-4.52-.722-8.448-3.1-11.918M8.52 14.846c-1.04 0-1.889-.945-1.889-2.101s.828-2.102 1.89-2.102c1.05 0 1.91.945 1.888 2.102 0 1.156-.838 2.1-1.889 2.1m6.974 0c-1.04 0-1.89-.945-1.89-2.101s.828-2.102 1.89-2.102c1.05 0 1.91.945 1.889 2.102 0 1.156-.828 2.1-1.89 2.1\"/></g></svg>`\n        }\n    ];\n\n    // Cache for shortcuts data\n    let shortcutsCache = [];\n\n    // Initialization\n    loadSettings();\n    setupEventListeners();\n    loadShortcuts();\n\n    // Loads all settings from localStorage and applies them\n    function loadSettings() {\n        loadCheckboxState(\"shortcutsCheckboxState\", dom.shortcutsCheckbox);\n        loadCheckboxState(\"adaptiveIconToggle\", dom.adaptiveIconToggle);\n        loadActiveStatus(\"shortcutEditField\", dom.shortcutEditField);\n        loadActiveStatus(\"adaptiveIconField\", dom.adaptiveIconField);\n        loadDisplayStatus(\"shortcutsDisplayStatus\", dom.shortcuts);\n\n        // Apply adaptive icon style if enabled\n        if (dom.adaptiveIconToggle.checked) {\n            dom.shortcutsContainer.classList.add(\"adaptive-icons\");\n        } else {\n            dom.shortcutsContainer.classList.remove(\"adaptive-icons\");\n        }\n    }\n\n    // Sets up all event listeners\n    function setupEventListeners() {\n        // Checkbox events\n        dom.shortcutsCheckbox.addEventListener(\"change\", handleShortcutsToggle);\n        dom.adaptiveIconToggle.addEventListener(\"change\", handleAdaptiveIconToggle);\n\n        // Button events\n        dom.newShortcutButton.addEventListener(\"click\", handleNewShortcutClick);\n        dom.resetShortcutsButton.addEventListener(\"click\", resetShortcuts);\n    }\n\n    // Handles the new shortcut button click with animation and focus\n    let focusTimeoutId;\n    function handleNewShortcutClick() {\n        if (this.classList.contains(\"inactive\")) return;\n\n        const currentAmount = parseInt(localStorage.getItem(\"shortcutAmount\")) || shortcutsCache.length;\n        if (currentAmount >= MAX_SHORTCUTS) return;\n\n        addNewShortcut();\n\n        // Scroll to the new shortcut and focus on the URL input\n        const allEntries = document.querySelectorAll(\".shortcutSettingsEntry\");\n        const lastEntry = allEntries[allEntries.length - 1];\n        const urlInput = lastEntry.querySelector(\"input.URL\");\n\n        urlInput.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n\n        clearTimeout(focusTimeoutId);\n        const modalContainer = document.getElementById(\"prompt-modal-container\");\n        focusTimeoutId = setTimeout(() => {\n            if (modalContainer?.style.display !== \"flex\")\n                urlInput.focus();\n        }, 800);\n    }\n\n    // Loads shortcuts from localStorage or uses presets if none exist\n    function loadShortcuts() {\n        const amount = localStorage.getItem(\"shortcutAmount\") || presets.length;\n        const deleteInactive = amount <= 1;\n\n        shortcutsCache = [];\n\n        for (let i = 0; i < amount; i++) {\n            const name = localStorage.getItem(`shortcutName${i}`) || (presets[i] ? presets[i].name : PLACEHOLDER.name);\n            const url = localStorage.getItem(`shortcutURL${i}`) || (presets[i] ? presets[i].url : PLACEHOLDER.url);\n            const icon = localStorage.getItem(`shortcutIcon${i}`) || \"\";\n\n            shortcutsCache.push({ name, url, icon });\n\n            const entry = createShortcutEntry(name, url, icon, deleteInactive, i);\n            dom.shortcutSettingsContainer.appendChild(entry);\n            renderShortcut(name, url, icon, i);\n        }\n\n        // Disable new shortcut button if max reached\n        if (amount >= MAX_SHORTCUTS) {\n            dom.newShortcutButton.classList.add(\"inactive\");\n        }\n\n        setupDragAndDrop();\n    }\n\n    // Creates a shortcut entry element for the settings panel\n    function createShortcutEntry(name, url, iconUrl, deleteInactive, index) {\n        const entry = document.createElement(\"div\");\n        entry.className = \"shortcutSettingsEntry\";\n        entry.draggable = true;\n        entry._index = index;\n\n        entry.innerHTML = `\n            <div class=\"grip-container\" draggable=\"true\">\n                <svg stroke=\"currentColor\" width=\"18\" height=\"18\" viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\">\n                    <circle cy=\"2\" cx=\"5.5\" r=\".75\"/>\n                    <circle cy=\"8\" cx=\"5.5\" r=\".75\"/>\n                    <circle cy=\"14\" cx=\"5.5\" r=\".75\"/>\n                    <circle cy=\"2\" cx=\"10.5\" r=\".75\"/>\n                    <circle cy=\"8\" cx=\"10.5\" r=\".75\"/>\n                    <circle cy=\"14\" cx=\"10.5\" r=\".75\"/>\n                </svg>\n            </div>\n            <div class=\"shortcutInputGroup\">\n                <input class=\"shortcutName\" placeholder=\"${PLACEHOLDER.inputName}\" value=\"${escapeHtml(name)}\">\n                <div class=\"shortcutInputRow\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39\"/></svg>\n                    <input class=\"URL\" placeholder=\"${PLACEHOLDER.inputUrl}\" value=\"${escapeHtml(url)}\">\n                </div>\n                <div class=\"shortcutInputRow\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2M8.5 13.5l2.5 3.01L14.5 12l4.5 6H5z\"/></svg>\n                    <input class=\"iconURL\" placeholder=\"${PLACEHOLDER.inputIcon}\" value=\"${escapeHtml(iconUrl || \"\")}\">\n                </div>\n            </div>\n            <div class=\"shortcutActions\">\n                <button type=\"button\" class=\"uploadCustomIconButton\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n                        <path d=\"M12 3.5a.89.89 0 0 0-.641.27l-3.57 3.571a.895.895 0 0 0 1.265 1.265l2.051-2.051v8.577a.895.895 0 1 0 1.79 0V6.555l2.051 2.051a.895.895 0 0 0 1.266-1.265l-3.57-3.57A.91.91 0 0 0 12 3.5m-6.263 9.842c-.494 0-.895.4-.895.895v3.579A2.7 2.7 0 0 0 7.526 20.5h8.948a2.7 2.7 0 0 0 2.684-2.684v-3.58a.895.895 0 1 0-1.79 0v3.58c0 .505-.39.895-.894.895H7.526a.88.88 0 0 1-.894-.895v-3.58c0-.493-.401-.894-.895-.894\"/>\n                    </svg>\n                </button>\n                <input type=\"file\" class=\"iconFileInput\" accept=\"image/*\" hidden>\n                <div class=\"shortcutDelete\">\n                    <button class=\"${deleteInactive ? 'inactive' : ''}\">\n                        <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\">\n                            <path d=\"M7.8 20.4q-.742 0-1.271-.529Q6 19.343 6 18.6v-12h-.3q-.383 0-.641-.257-.259-.258-.259-.638t.259-.643Q5.317 4.8 5.7 4.8h3.9v-.3q0-.383.259-.641.258-.259.641-.259h3q.383 0 .641.259.259.258.259.641v.3h3.9q.383 0 .641.257.259.257.259.638 0 .38-.259.643-.258.262-.641.262H18v11.99q0 .76-.529 1.285-.529.525-1.271.525Zm8.4-13.8H7.8v12h8.4zm-5.705 10.2q.38 0 .643-.259.262-.259.262-.641V9.3q0-.383-.257-.641-.258-.259-.638-.259t-.643.259Q9.6 8.917 9.6 9.3v6.6q0 .383.257.641.258.259.638.259Zm3 0q.38 0 .643-.259.262-.259.262-.641V9.3q0-.383-.257-.641-.258-.259-.638-.259t-.643.259q-.262.258-.262.641v6.6q0 .383.257.641.258.259.638.259ZM7.8 6.6v12z\"/>\n                        </svg>\n                    </button>\n                </div>\n            </div>\n        `;\n\n        const inputs = entry.querySelectorAll(\"input.shortcutName, input.URL, input.iconURL\");\n        const uploadButton = entry.querySelector(\".uploadCustomIconButton\");\n        const fileInput = entry.querySelector(\".iconFileInput\");\n        const iconInput = entry.querySelector(\".iconURL\");\n        const deleteBtn = entry.querySelector(\".shortcutDelete button\");\n\n        attachInputListeners(inputs, entry);\n\n        uploadButton.addEventListener(\"click\", () => fileInput.click());\n        fileInput.addEventListener(\"change\", async e => {\n            const selectedFile = e.target.files?.[0];\n            if (!selectedFile) return;\n            if (!selectedFile.type.startsWith(\"image/\")) {\n                const invalidFileTypeMessage = translations[currentLanguage]?.invalidFileTypeMessage || translations[\"en\"]?.invalidFileTypeMessage;\n                alertPrompt(invalidFileTypeMessage);\n                fileInput.value = \"\";\n                return;\n            }\n\n            const maxIconBytes = 100 * 1024;\n            if (selectedFile.size > maxIconBytes) {\n                const iconFileTooLargeMessage = translations[currentLanguage]?.iconFileTooLargeMessage || translations[\"en\"].iconFileTooLargeMessage;\n                const fileSizeKB = localizeNumbers((selectedFile.size / 1024).toFixed(1), currentLanguage);\n                const maxSizeKB = localizeNumbers((maxIconBytes / 1024).toFixed(0), currentLanguage);\n\n                const message = iconFileTooLargeMessage\n                    .replace(\"{size}\", fileSizeKB)\n                    .replace(\"{max}\", maxSizeKB);\n                alertPrompt(message);\n                fileInput.value = \"\";\n                return;\n            }\n\n            function applyIcon(iconValue) {\n                iconInput.value = iconValue;\n                try {\n                    saveShortcut(entry);\n                    renderShortcut(\n                        entry.querySelector(\".shortcutName\").value,\n                        entry.querySelector(\".URL\").value,\n                        iconInput.value,\n                        entry._index\n                    );\n                } catch (err) {\n                    console.error(\"Failed to save icon:\", err);\n                    iconInput.value = \"\";\n                } finally {\n                    fileInput.value = \"\";\n                }\n            }\n\n            const isSvgFile = selectedFile.type === \"image/svg+xml\";\n\n            if (isSvgFile) {\n                const textReader = new FileReader();\n                textReader.onload = () => {\n                    const sanitized = sanitizeSvg(textReader.result);\n                    if (!sanitized) {\n                        alertPrompt(translations[currentLanguage]?.invalidSvgMessage || translations[\"en\"]?.invalidSvgMessage);\n                        fileInput.value = \"\";\n                        return;\n                    }\n                    applyIcon(sanitized);\n                };\n                textReader.onerror = () => {\n                    console.error(\"Failed to read SVG file:\", textReader.error);\n                    fileInput.value = \"\";\n                };\n                textReader.readAsText(selectedFile);\n            } else {\n                const reader = new FileReader();\n                reader.onload = () => applyIcon(reader.result);\n                reader.onerror = () => {\n                    console.error(\"Failed to read selected file:\", reader.error);\n                    fileInput.value = \"\";\n                };\n                reader.readAsDataURL(selectedFile);\n            }\n        });\n\n        deleteBtn.addEventListener(\"click\", () => deleteShortcut(entry));\n\n        return entry;\n    }\n\n    function createShortcutElement(name, url, icon, index) {\n        const normalizedUrl = normalizeUrl(url);\n\n        const shortcut = document.createElement(\"div\");\n        shortcut.className = \"shortcuts\";\n        shortcut._index = index;\n\n        const link = document.createElement(\"a\");\n        link.href = normalizedUrl;\n\n        const logoContainer = document.createElement(\"div\");\n        logoContainer.className = \"shortcutLogoContainer\";\n\n        const logo = getLogoHtml(name, normalizedUrl, icon);\n        if (logo) logoContainer.appendChild(logo);\n\n        const span = document.createElement(\"span\");\n        span.className = \"shortcut-name\";\n        span.textContent = name;\n\n        link.appendChild(logoContainer);\n        link.appendChild(span);\n        shortcut.appendChild(link);\n\n        return shortcut;\n    }\n\n    // Renders a shortcut in the main view\n    function renderShortcut(name, url, icon, index) {\n        const shortcut = createShortcutElement(name, url, icon, index);\n\n        if (index < dom.shortcutsContainer.children.length) {\n            dom.shortcutsContainer.replaceChild(shortcut, dom.shortcutsContainer.children[index]);\n        } else {\n            dom.shortcutsContainer.appendChild(shortcut);\n        }\n    }\n\n    // Escapes HTML to prevent XSS\n    function escapeHtml(unsafe) {\n        return unsafe.replace(/[&<>\"']/g, match => ({\n            \"&\": \"&amp;\",\n            \"<\": \"&lt;\",\n            \">\": \"&gt;\",\n            '\"': \"&quot;\",\n            \"'\": \"&#39;\",\n        }[match]));\n    }\n\n    // Validates custom icon URL\n    function isValidCustomIconUrl(url) {\n        if (typeof url !== \"string\") return false;\n        const trimmedUrl = url.trim();\n        if (trimmedUrl.includes(\" \")) return false;\n        const lowercaseUrl = trimmedUrl.toLowerCase();\n        return (\n            lowercaseUrl.startsWith(\"data:image/\") ||\n            lowercaseUrl.startsWith(\"https://\") ||\n            lowercaseUrl.startsWith(\"http://\")\n        );\n    }\n\n    // Sanitizes raw SVG code, returns data URL or null if unsafe\n    function sanitizeSvg(raw) {\n        const trimmed = raw.trim();\n        const normalized = trimmed\n            .replace(/^<\\?xml[\\s\\S]*?\\?>\\s*/i, \"\")\n            .replace(/^<!doctype[\\s\\S]*?>\\s*/i, \"\")\n            .replace(/^<!--[\\s\\S]*?-->\\s*/i, \"\");\n        if (!normalized.toLowerCase().startsWith(\"<svg\")) return null;\n\n        const forbidden = [\n            /<script[\\s>]/i,                // <script> tags\n            /\\bon\\w+\\s*=/i,                 // event handlers: onload=, onclick=, onerror=, …\n            /<iframe[\\s>]/i,                // iframes\n            /<foreignObject[\\s>]/i,         // foreignObject (can embed HTML)\n            /javascript\\s*:/i,              // javascript: URIs\n            /data:(?!image\\/[a-z]+;base64,)[^\"'\\s]*/i, // non-image data URIs\n        ];\n\n        for (const pattern of forbidden) {\n            if (pattern.test(normalized)) return null;\n        }\n\n        return \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(normalized);\n    }\n\n    // Normalizes icon input: converts raw SVG code → data URL, passes URLs through\n    function processIconInput(raw) {\n        const trimmed = raw.trim();\n        if (!trimmed) return { value: \"\", error: null };\n\n        if (/<svg[\\s>]/i.test(trimmed)) {\n            const dataUrl = sanitizeSvg(trimmed);\n            return { value: dataUrl ?? \"\", error: null };\n        }\n\n        return { value: trimmed, error: null };\n    }\n\n    // Normalizes URLs to ensure they're valid\n    function normalizeUrl(url) {\n        url = url.trim();\n        return encodeURI(\n            url.startsWith(\"https://\") || url.startsWith(\"http://\") ? url : `https://${url}`\n        );\n    }\n\n    // Gets the appropriate logo HTML for a given URL\n    function getLogoHtml(name, url, customIcon = \"\") {\n        let hostname;\n\n        function setIconType(element, type) {\n            element.setAttribute(\"data-icon-type\", type);\n            return element;\n        }\n\n        function createLetterFallback() {\n            let letter = \"?\";\n\n            if (name.trim()) {\n                letter = name.trim().charAt(0).toUpperCase();\n            } else {\n                try {\n                    hostname = new URL(normalizeUrl(url)).hostname.replace(/^www\\./, \"\");\n                    letter = hostname.charAt(0).toUpperCase() || \"?\";\n                } catch {\n                    letter = (url.trim()?.charAt(0) || \"?\").toUpperCase();\n                }\n            }\n\n            // TODO: MutationObserver to update colors when theme changes\n            const selectedTheme = localStorage.getItem(\"selectedTheme\");\n            const color = selectedTheme === \"dark\"\n                ? \"#bfbfbf\"\n                : localStorage.getItem(\"accentLightTintColor\") || \"#ffffff\";\n            const svg = `\n                <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\">\n                    <text x=\"50%\" y=\"58%\" text-anchor=\"middle\" dominant-baseline=\"middle\"\n                        font-size=\"30\" font-family=\"Inter, Segoe UI, Arial, sans-serif\" font-weight=\"700\"\n                        fill=\"${color}\">\n                        ${letter}\n                    </text>\n                </svg>\n            `;\n\n            const img = document.createElement(\"img\");\n            img.src = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(svg);\n            img.alt = \"\";\n            return img;\n        }\n\n        if (customIcon && isValidCustomIconUrl(customIcon)) {\n            const customIconImg = document.createElement(\"img\");\n            customIconImg.src = customIcon.trim();\n            customIconImg.alt = \"\";\n            customIconImg.referrerPolicy = \"no-referrer\";\n            setIconType(customIconImg, \"custom\");\n            customIconImg.addEventListener(\"error\", () => {\n                customIconImg.src = createLetterFallback().src;\n                setIconType(customIconImg, \"letter\");\n            }, { once: true });\n\n            return customIconImg;\n        }\n\n        try {\n            hostname = new URL(normalizeUrl(url)).hostname.replace(/^www\\./, \"\");\n        } catch (error) {\n            return createLetterFallback();\n        }\n\n        // GitHub shortcut\n        if (hostname === \"github.com\") {\n            const img = document.createElement(\"img\");\n            img.src = \"./svgs/github-shortcut.svg\";\n            img.alt = \"\";\n            setIconType(img, \"default\");\n            return img;\n        }\n\n        // Check presets for matching domain\n        const preset = presets.find(p => p.domains.includes(hostname));\n        if (preset) {\n            const wrapper = document.createElement(\"div\");\n            wrapper.innerHTML = preset.svg;\n            const svgElement = wrapper.firstElementChild;\n            setIconType(svgElement, \"default\");\n            return svgElement;\n        }\n\n        // Fetch favicon from Google\n        const img = document.createElement(\"img\");\n\n        img.src = `https://s2.googleusercontent.com/s2/favicons?domain_url=https://${hostname}&sz=256`;\n        img.alt = \"\";\n        img.referrerPolicy = \"no-referrer\";\n        setIconType(img, \"default\");\n        img.addEventListener(\"error\", () => {\n            img.src = createLetterFallback().src;\n            setIconType(img, \"letter\");\n        }, { once: true });\n\n        return img;\n    }\n\n    // Validates the icon input field on blur\n    function validateIconInput(input) {\n        const raw = input.value.trim();\n        if (!raw) return;\n\n        if (/<svg[\\s>]/i.test(raw)) {\n            const { value } = processIconInput(raw);\n            if (!value) {\n                alertPrompt(translations[currentLanguage]?.invalidSvgMessage || translations[\"en\"]?.invalidSvgMessage);\n                input.value = \"\";\n            } else {\n                input.value = value;\n            }\n        } else {\n            if (!isValidCustomIconUrl(raw)) {\n                alertPrompt(translations[currentLanguage]?.invalidIconUrlMessage || translations[\"en\"]?.invalidIconUrlMessage);\n                input.value = \"\";\n            }\n        }\n    }\n\n    // Attaches event listeners to shortcut input fields\n    function attachInputListeners(inputs, entry) {\n        inputs.forEach(input => {\n            input.addEventListener(\"blur\", () => {\n                if (input.classList.contains(\"iconURL\")) {\n                    validateIconInput(input);\n                }\n\n                saveShortcut(entry);\n                renderShortcut(\n                    entry.querySelector(\".shortcutName\").value,\n                    entry.querySelector(\".URL\").value,\n                    entry.querySelector(\".iconURL\").value,\n                    entry._index\n                );\n            });\n            input.addEventListener(\"focus\", e => e.target.select());\n        });\n\n        inputs[0].addEventListener(\"keydown\", e => e.key === \"Enter\" && inputs[1].focus());\n        inputs[1].addEventListener(\"keydown\", e => e.key === \"Enter\" && inputs[2].focus());\n        inputs[2].addEventListener(\"keydown\", e => {\n            if (e.key !== \"Enter\") return;\n            e.preventDefault();\n            e.stopPropagation();\n            e.target.blur();\n        });\n    }\n\n    // Drag and drop functionality for reordering shortcuts\n    function setupDragAndDrop() {\n        let draggedElement = null;\n        let autoScrollInterval = null;\n        let dragOffset = { x: 0, y: 0 };\n        let isReordering = false;\n        let pendingReorder = false;\n        let isDragging = false;\n\n        // Cache element positions for smooth gliding animation\n        function cachePositions() {\n            const map = new Map();\n            const entries = dom.shortcutSettingsContainer.querySelectorAll(\".shortcutSettingsEntry\");\n            for (const el of entries) {\n                map.set(el, el.getBoundingClientRect().top);\n            }\n            return map;\n        }\n\n        // Animate smooth gliding effect for sibling elements\n        function animateGlide(oldPositions) {\n            const entries = [...dom.shortcutSettingsContainer.children];\n            const newPositions = new Map();\n\n            // Batch read\n            entries.forEach(el => {\n                if (el !== draggedElement) {\n                    newPositions.set(el, el.getBoundingClientRect().top);\n                }\n            });\n\n            // Batch write\n            entries.forEach(el => {\n                if (el === draggedElement) return;\n                const oldTop = oldPositions.get(el);\n                const newTop = newPositions.get(el);\n                if (oldTop !== undefined && newTop !== undefined) {\n                    const delta = oldTop - newTop;\n                    if (delta !== 0) {\n                        el.style.transition = \"none\";\n                        el.style.transform = `translateY(${delta}px)`;\n                        requestAnimationFrame(() => {\n                            el.style.transition = \"transform 300ms cubic-bezier(0.4, 0, 0.2, 1)\";\n                            el.style.transform = \"none\";\n                        });\n                    }\n                }\n            });\n        }\n\n        // Auto-scroll functionality\n        function handleAutoScroll(clientY) {\n            const container = dom.shortcutSettingsContainer;\n            const containerRect = container.getBoundingClientRect();\n            const scrollThreshold = 50; // pixels from edge to trigger scroll\n            const scrollSpeed = 5; // pixels per frame\n\n            // Clear existing interval\n            if (autoScrollInterval) {\n                clearInterval(autoScrollInterval);\n                autoScrollInterval = null;\n            }\n\n            // Check if we need to scroll up\n            if (clientY - containerRect.top < scrollThreshold && container.scrollTop > 0) {\n                autoScrollInterval = setInterval(() => {\n                    container.scrollTop = Math.max(0, container.scrollTop - scrollSpeed);\n                }, 16); // ~60fps\n            }\n            // Check if we need to scroll down\n            else if (containerRect.bottom - clientY < scrollThreshold &&\n                container.scrollTop < container.scrollHeight - container.clientHeight) {\n                autoScrollInterval = setInterval(() => {\n                    const maxScroll = container.scrollHeight - container.clientHeight;\n                    container.scrollTop = Math.min(maxScroll, container.scrollTop + scrollSpeed);\n                }, 16); // ~60fps\n            }\n        }\n\n        // Stop auto-scroll\n        function stopAutoScroll() {\n            if (autoScrollInterval) {\n                clearInterval(autoScrollInterval);\n                autoScrollInterval = null;\n            }\n        }\n\n        // Helper function for drag and drop with cached rect\n        let dragElementsCache = [];\n        let cacheTimestamp = 0;\n\n        function getSortedElements() {\n            const now = Date.now();\n            // Cache for 16ms (one frame) to avoid repeated getBoundingClientRect calls\n            if (now - cacheTimestamp < 16) {\n                return dragElementsCache;\n            }\n\n            dragElementsCache = [...dom.shortcutSettingsContainer.querySelectorAll(\".shortcutSettingsEntry:not(.dragging)\")]\n                .map(el => ({\n                    element: el,\n                    rect: el.getBoundingClientRect()\n                }));\n            cacheTimestamp = now;\n            return dragElementsCache;\n        }\n\n        function getDragAfterElement(y) {\n            const elements = getSortedElements();\n            let low = 0, high = elements.length - 1;\n\n            while (low <= high) {\n                const mid = (low + high) >>> 1;\n                const middleY = elements[mid].rect.top + elements[mid].rect.height / 2;\n                y < middleY ? (high = mid - 1) : (low = mid + 1);\n            }\n\n            return elements[low]?.element || null;\n        }\n\n        // Insert element with smooth animation\n        function insertElementWithAnimation(element, targetElement, insertBefore = true) {\n            const oldPositions = cachePositions();\n            const container = dom.shortcutSettingsContainer;\n\n            // Perform DOM insertion\n            if (targetElement) {\n                if (insertBefore) {\n                    // Insert before target element\n                    container.insertBefore(element, targetElement);\n                } else {\n                    // Insert after target element\n                    container.insertBefore(element, targetElement.nextSibling);\n                }\n            } else {\n                // Append to end if no target element\n                container.appendChild(element);\n            }\n\n            animateGlide(oldPositions);\n            pendingReorder = true;\n        }\n\n        // Common drag logic for both mouse and touch\n        function handleDragMove(clientX, clientY) {\n            if (!isReordering || !draggedElement) return;\n\n            // Handle auto-scroll\n            handleAutoScroll(clientY);\n\n            const afterElement = getDragAfterElement(clientY);\n\n            // Add null/undefined check\n            if (afterElement === null || afterElement === undefined) {\n                // Move to end\n                insertElementWithAnimation(draggedElement, null, false);\n                return;\n            }\n\n            // Check if we need to reorder\n            if (afterElement && afterElement !== draggedElement) {\n                // Only move if it's actually a different position\n                if (afterElement.previousSibling !== draggedElement) {\n                    insertElementWithAnimation(draggedElement, afterElement, true);\n                }\n            } else if (!afterElement) {\n                // Move to end if no after element\n                const lastElement = dom.shortcutSettingsContainer.lastElementChild;\n                if (lastElement && lastElement !== draggedElement) {\n                    insertElementWithAnimation(draggedElement, null, false);\n                }\n            }\n        }\n\n        // Common cleanup logic\n        function cleanup() {\n            stopAutoScroll();\n\n            // Remove CSS classes\n            if (draggedElement) {\n                draggedElement.classList.remove(\"dragging\");\n            }\n\n            // Only update if we actually made changes\n            if (pendingReorder) {\n                updateShortcutIndices();\n                saveShortcutOrder();\n                pendingReorder = false;\n            }\n\n            // Reset state\n            dom.shortcutSettingsContainer.classList.remove(\"dragging-ongoing\");\n            isReordering = false;\n            isDragging = false;\n            draggedElement = null;\n        }\n\n        // ==== MOUSE EVENTS ====\n        dom.shortcutSettingsContainer.addEventListener(\"dragstart\", e => {\n            const item = e.target.closest(\".shortcutSettingsEntry\");\n            if (item) {\n                isReordering = true;\n                draggedElement = item;\n\n                // Calculate drag offset\n                const rect = item.getBoundingClientRect();\n                dragOffset.x = e.clientX - rect.left;\n                dragOffset.y = e.clientY - rect.top;\n\n                dom.shortcutSettingsContainer.classList.add(\"dragging-ongoing\");\n\n                // Add CSS classes for styling\n                setTimeout(() => {\n                    item.classList.add(\"dragging\");\n                }, 0);\n\n                e.dataTransfer.effectAllowed = \"move\";\n            }\n        });\n\n        dom.shortcutSettingsContainer.addEventListener(\"dragover\", e => {\n            e.preventDefault();\n            handleDragMove(e.clientX, e.clientY);\n        });\n\n        dom.shortcutSettingsContainer.addEventListener(\"dragend\", e => {\n            if (!isReordering || !draggedElement) return;\n            cleanup();\n        });\n\n        // Global event listeners for cleanup\n        document.addEventListener(\"dragend\", () => {\n            if (isReordering) {\n                cleanup();\n            }\n        });\n\n        // Handle window blur for cleanup\n        window.addEventListener(\"blur\", () => {\n            if (isReordering || isDragging) {\n                cleanup();\n            }\n        });\n    }\n\n    // Updates indices of all shortcut entries after reordering\n    function updateShortcutIndices() {\n        document.querySelectorAll(\".shortcutSettingsEntry\").forEach((entry, index) => {\n            entry._index = index;\n        });\n    }\n\n    // Saves the new shortcut order to localStorage\n    function saveShortcutOrder() {\n        const entries = dom.shortcutSettingsContainer.querySelectorAll(\".shortcutSettingsEntry\");\n        const newOrder = Array.from(entries).map(entry => ({\n            name: entry.querySelector(\".shortcutName\").value,\n            url: entry.querySelector(\".URL\").value,\n            icon: entry.querySelector(\".iconURL\").value\n        }));\n\n        // Only save if order has changed\n        if (hasOrderChanged(newOrder)) {\n            localStorage.setItem(\"shortcutAmount\", newOrder.length.toString());\n            newOrder.forEach((item, index) => {\n                localStorage.setItem(`shortcutName${index}`, item.name);\n                localStorage.setItem(`shortcutURL${index}`, item.url);\n\n                // Try to save icon, skip/clear if quota exceeded\n                try {\n                    localStorage.setItem(`shortcutIcon${index}`, item.icon || \"\");\n                } catch (iconError) {\n                        if (iconError.name === \"QuotaExceededError\" || iconError.code === 22) {\n                            // Remove icon due to quota\n                            localStorage.removeItem(`shortcutIcon${index}`);\n                            const entry = entries[index];\n                            if (entry) entry.querySelector(\".iconURL\").value = \"\";\n                            item.icon = \"\";\n                        } else {\n                            throw iconError;\n                        }\n                    }\n                });\n\n            shortcutsCache = newOrder;\n            renderAllShortcuts(newOrder);\n        }\n    }\n\n    // Checks if the shortcut order has changed\n    function hasOrderChanged(newOrder) {\n        if (newOrder.length !== shortcutsCache.length) return true;\n\n        return newOrder.some((item, index) => {\n            const cached = shortcutsCache[index];\n            return item.name !== cached.name || item.url !== cached.url || (item.icon || \"\") !== (cached.icon || \"\");\n        });\n    }\n\n    // Renders all shortcuts in the main view\n    function renderAllShortcuts(order) {\n        const fragment = document.createDocumentFragment();\n\n        order.forEach((item, index) => {\n            fragment.appendChild(createShortcutElement(item.name, item.url, item.icon, index));\n        });\n\n        dom.shortcutsContainer.innerHTML = \"\";\n        dom.shortcutsContainer.appendChild(fragment);\n    }\n\n    // Handles the shortcuts toggle checkbox change\n    function handleShortcutsToggle() {\n        const isChecked = this.checked;\n        saveCheckboxState(\"shortcutsCheckboxState\", this);\n\n        dom.shortcuts.style.display = isChecked ? \"flex\" : \"none\";\n        saveDisplayStatus(\"shortcutsDisplayStatus\", isChecked ? \"flex\" : \"none\");\n\n        dom.shortcutEditField.classList.toggle(\"inactive\", !isChecked);\n        saveActiveStatus(\"shortcutEditField\", isChecked ? \"active\" : \"inactive\");\n\n        dom.adaptiveIconField.classList.toggle(\"inactive\", !isChecked);\n        saveActiveStatus(\"adaptiveIconField\", isChecked ? \"active\" : \"inactive\");\n    }\n\n    // Handles the adaptive icon toggle checkbox change\n    function handleAdaptiveIconToggle() {\n        saveCheckboxState(\"adaptiveIconToggle\", this);\n        if (this.checked) {\n            dom.shortcutsContainer.classList.add(\"adaptive-icons\");\n        } else {\n            dom.shortcutsContainer.classList.remove(\"adaptive-icons\");\n        }\n    }\n\n    // Adds a new shortcut\n    function addNewShortcut() {\n        const currentAmount = parseInt(localStorage.getItem(\"shortcutAmount\")) || shortcutsCache.length;\n        if (currentAmount >= MAX_SHORTCUTS) return;\n\n        const newAmount = currentAmount + 1;\n        localStorage.setItem(\"shortcutAmount\", newAmount.toString());\n\n        if (currentAmount >= 1) {\n            document.querySelectorAll(\".shortcutDelete button.inactive\").forEach(b => {\n                b.classList.remove(\"inactive\");\n            });\n        }\n\n        if (newAmount === MAX_SHORTCUTS) {\n            dom.newShortcutButton.classList.add(\"inactive\");\n        }\n\n        const entry = createShortcutEntry(PLACEHOLDER.name, PLACEHOLDER.url, \"\", false, currentAmount);\n        dom.shortcutSettingsContainer.appendChild(entry);\n\n        saveShortcut(entry);\n        renderShortcut(PLACEHOLDER.name, PLACEHOLDER.url, \"\", currentAmount);\n    }\n\n    // Deletes a shortcut\n    function deleteShortcut(entry) {\n        const currentAmount = parseInt(localStorage.getItem(\"shortcutAmount\")) || shortcutsCache.length;\n        if (currentAmount <= 1) return;\n\n        const index = entry._index;\n        entry.remove();\n        dom.shortcutsContainer.removeChild(dom.shortcutsContainer.children[index]);\n\n        // Update localStorage\n        localStorage.setItem(\"shortcutAmount\", (currentAmount - 1).toString());\n        for (let i = index; i < currentAmount - 1; i++) {\n            const nextEntry = dom.shortcutSettingsContainer.children[i];\n            nextEntry._index = i;\n            saveShortcut(nextEntry);\n        }\n        localStorage.removeItem(`shortcutName${currentAmount - 1}`);\n        localStorage.removeItem(`shortcutURL${currentAmount - 1}`);\n        localStorage.removeItem(`shortcutIcon${currentAmount - 1}`);\n\n        if (currentAmount - 1 === 1) {\n            document.querySelectorAll(\".shortcutDelete button\").forEach(b => {\n                b.classList.add(\"inactive\");\n            });\n        }\n\n        dom.newShortcutButton.classList.remove(\"inactive\");\n    }\n\n    // Resets all shortcuts to default\n    async function resetShortcuts() {\n        if (!(await confirmPrompt(translations[currentLanguage]?.resetShortcutsPrompt || translations[\"en\"].resetShortcutsPrompt)))\n            return;\n\n        // Animation for shortcut elements\n        const shortcutEntries = [...dom.shortcutSettingsContainer.querySelectorAll(\".shortcutSettingsEntry\")];\n        shortcutEntries.forEach(el => el.classList.add(\"reset-shift-animation\"));\n\n        // Animation for reset button\n        const svg = dom.resetShortcutsButton.querySelector(\"svg\");\n        svg.classList.add(\"rotate-animation\");\n\n        // Clear storage\n        for (let i = 0; i < (localStorage.getItem(\"shortcutAmount\") || 0); i++) {\n            localStorage.removeItem(`shortcutName${i}`);\n            localStorage.removeItem(`shortcutURL${i}`);\n            localStorage.removeItem(`shortcutIcon${i}`);\n        }\n        localStorage.removeItem(\"shortcutAmount\");\n\n        // Wait for animations of shortcut elements to complete\n        await new Promise(resolve => setTimeout(resolve, 300));\n\n        // Reset UI\n        dom.shortcutSettingsContainer.innerHTML = \"\";\n        dom.shortcutsContainer.innerHTML = \"\";\n        dom.newShortcutButton.classList.remove(\"inactive\");\n        setTimeout(() => svg.classList.remove(\"rotate-animation\"), 500);\n\n        // Reload\n        loadShortcuts();\n    }\n\n    // Saves a single shortcut to localStorage\n    function saveShortcut(entry) {\n        const index = entry._index;\n        const name = entry.querySelector(\".shortcutName\").value;\n        const url = entry.querySelector(\".URL\").value;\n        const iconInput = entry.querySelector(\".iconURL\");\n        const icon = iconInput.value || \"\";\n\n        localStorage.setItem(`shortcutName${index}`, name);\n        localStorage.setItem(`shortcutURL${index}`, url);\n\n        // Try to save icon separately to handle quota errors gracefully\n        try {\n            localStorage.setItem(`shortcutIcon${index}`, icon);\n        } catch (iconError) {\n            if (iconError.name === \"QuotaExceededError\" || iconError.code === 22) {\n                // Icon is too large, clear it from input and localStorage\n                iconInput.value = \"\";\n                localStorage.removeItem(`shortcutIcon${index}`);\n\n                const iconStorageQuotaMessage = translations[currentLanguage]?.iconStorageQuotaMessage || translations[\"en\"].iconStorageQuotaMessage;\n                alertPrompt(iconStorageQuotaMessage);\n            } else {\n                throw iconError;\n            }\n        }\n    }\n});\n"
  },
  {
    "path": "scripts/theme.js",
    "content": "/*\n * Material You NewTab\n * Copyright (c) 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n */\n\nconst themeStorageKey = \"selectedTheme\";\nconst customThemeStorageKey = \"customThemeColor\";\nconst darkModeCheckboxKey = \"enableDarkModeCheckboxState\";\nconst storedTheme = localStorage.getItem(themeStorageKey);\nconst storedCustomColor = localStorage.getItem(customThemeStorageKey);\nconst radioButtons = document.querySelectorAll(\".colorPlate\");\nconst colorPicker = document.getElementById(\"colorPicker\");\nconst colorPickerLabel = document.getElementById(\"rangColor\");\n\n// MediaQuery for system theme detection\nconst systemTheme = window.matchMedia('(prefers-color-scheme: dark)');\n\nconst syncThemeChange = (MediaQuery) => {\n    document.body.setAttribute(\"sysTheme\", MediaQuery.matches ? \"systemDark\" : \"systemLight\");\n}\n\n// Initialize system theme attribute immediately\nsyncThemeChange(systemTheme);\n\n// ===== Segmented Control for Dark Mode =====\n(function () {\n    const preferredThemeKey = \"preferredTheme\";\n    const segment = document.getElementById(\"themeSegment\");\n    const indicator = segment.querySelector(\".themeIndicator\");\n    const buttons = segment.querySelectorAll(\".themeSegBtn\");\n\n    // Move indicator to correct position\n    function moveIndicator(theme) {\n        const ltrIndex = theme === \"light\" ? 0 : theme === \"dark\" ? 1 : 2;\n        // If RTL, reverse the index\n        const index = isRTL ? 2 - ltrIndex : ltrIndex;\n        indicator.style.transform = `translateX(${index * 100}%)`;\n    }\n\n    // Apply theme mode (light/dark/system)\n    function applyThemeMode(theme) {\n        localStorage.setItem(preferredThemeKey, theme);\n        segment.dataset.active = theme;\n        moveIndicator(theme);\n\n        // Update sysTheme attribute when system mode is selected\n        if (theme === \"system\") {\n            syncThemeChange(systemTheme);\n        }\n    }\n\n    // Button click handlers\n    buttons.forEach(btn => {\n        btn.addEventListener(\"click\", () => {\n            applyThemeMode(btn.dataset.theme);\n        });\n    });\n\n    // System theme change listener\n    systemTheme.addEventListener('change', syncThemeChange);\n\n    function initializeThemeMode() {\n        const darkModeCheckboxState = localStorage.getItem(darkModeCheckboxKey);\n        const savedPreferredTheme = localStorage.getItem(preferredThemeKey);\n\n        let initialTheme;\n\n        if (darkModeCheckboxState === \"checked\") {\n            // Migrate old checkbox users to \"dark\" mode\n            initialTheme = \"dark\";\n            localStorage.removeItem(darkModeCheckboxKey);\n            localStorage.setItem(preferredThemeKey, \"dark\");\n        } else if (savedPreferredTheme) {\n            initialTheme = savedPreferredTheme; // Use saved preference\n        } else {\n            initialTheme = \"light\"; // First time user\n        }\n\n        applyThemeMode(initialTheme);\n    }\n\n    // Initialize\n    initializeThemeMode();\n})();\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n    // Check for custom color\n    const storedCustomColor = localStorage.getItem(customThemeStorageKey);\n    if (storedCustomColor) {\n        applyCustomTheme(storedCustomColor);\n        // Uncheck all radio buttons\n        radioButtons.forEach(radio => {\n            radio.checked = false;\n        });\n    }\n    // Check for regular theme\n    else {\n        const storedTheme = localStorage.getItem(themeStorageKey);\n        if (storedTheme) {\n            applySelectedTheme(storedTheme);\n            const selectedRadioButton = document.querySelector(`.colorPlate[value=\"${storedTheme}\"]`);\n            if (selectedRadioButton) {\n                selectedRadioButton.checked = true;\n            }\n        }\n    }\n\n    // Remove Loading Screen when the DOM and the theme has loaded\n    document.getElementById(\"LoadingScreen\").style.display = \"none\";\n\n    // Stop blinking of some elements when the page is reloaded\n    setTimeout(() => {\n        document.documentElement.classList.add(\"theme-transition\");\n    }, 25);\n});\n\n// Function to load background color \nfunction ApplyLoadingColor() {\n    let LoadingScreenColor = getComputedStyle(document.body).getPropertyValue(\"background-color\");\n    localStorage.setItem(\"LoadingScreenColor\", LoadingScreenColor);\n}\n\nconst resetDarkTheme = () => {\n    // Remove the dark theme class\n    document.documentElement.classList.remove(\"black-theme\");\n};\n\n// Function to apply the selected theme\nconst applySelectedTheme = (colorValue) => {\n    const isDarkMode = colorValue === \"dark\";\n\n    // Reset dark theme if not in dark mode\n    if (!isDarkMode) resetDarkTheme();\n\n    // Reset color picker label border when switching to predefined theme\n    colorPickerLabel.style.borderColor = \"\";\n\n    // Set CSS variables based on the selected color theme\n    if (colorValue === \"blue\") {\n        document.documentElement.style.setProperty(\"--bg-color-blue\", \"#BBD6FD\");\n        document.documentElement.style.setProperty(\"--accentLightTint-blue\", \"#E2EEFF\");\n        document.documentElement.style.setProperty(\"--darkerColor-blue\", \"#3569B2\");\n        document.documentElement.style.setProperty(\"--darkColor-blue\", \"#4382EC\");\n        document.documentElement.style.setProperty(\"--textColorDark-blue\", \"#1B3041\");\n        document.documentElement.style.setProperty(\"--whitishColor-blue\", \"#ffffff\");\n    } else {\n        const prefix = isDarkMode ? \"dark\" : colorValue;\n        document.documentElement.style.setProperty(\"--bg-color-blue\", `var(--bg-color-${prefix})`);\n        document.documentElement.style.setProperty(\"--accentLightTint-blue\", `var(--accentLightTint-${prefix})`);\n        document.documentElement.style.setProperty(\"--darkerColor-blue\", `var(--darkerColor-${prefix})`);\n        document.documentElement.style.setProperty(\"--darkColor-blue\", `var(--darkColor-${prefix})`);\n        document.documentElement.style.setProperty(\"--textColorDark-blue\", `var(--textColorDark-${prefix})`);\n\n        if (!isDarkMode) {\n            document.documentElement.style.setProperty(\"--whitishColor-blue\", `var(--whitishColor-${colorValue})`);\n        }\n    }\n\n    // Handle dark mode specific changes\n    if (isDarkMode) {\n        document.documentElement.classList.add(\"black-theme\");\n    }\n\n    changeFaviconColor();\n    ApplyLoadingColor();\n};\n\nfunction changeFaviconColor() {\n    // Fetch colors from CSS variables\n    const rootStyles = getComputedStyle(document.documentElement);\n    const darkColor = rootStyles.getPropertyValue(\"--darkColor-blue\");\n    //const bgColor = rootStyles.getPropertyValue(\"--bg-color-blue\");\n    let accentLightTintColor = rootStyles.getPropertyValue(\"--accentLightTint-blue\");\n    localStorage.setItem(\"accentLightTintColor\", accentLightTintColor);\n\n    const svg = `\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n        <path fill=\"${darkColor}\" style=\"transform: scale(1.2); transform-origin: center;\"\n            d=\"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1\" />\n    </svg>\n    `;\n    const encodedSvg = 'data:image/svg+xml,' + encodeURIComponent(svg);\n    const favicon = document.getElementById(\"favicon\");\n    favicon.href = encodedSvg;\n    favicon.setAttribute('type', 'image/svg+xml');\n}\nchangeFaviconColor();\n\n// --------------------- Color Picker ---------------------\nfunction adjustHexColor(hex, factor, isLighten = true) {\n    hex = hex.replace(\"#\", \"\");\n    if (hex.length === 3) {\n        hex = hex.split(\"\").map(c => c + c).join(\"\");\n    }\n    let r = parseInt(hex.substring(0, 2), 16);\n    let g = parseInt(hex.substring(2, 4), 16);\n    let b = parseInt(hex.substring(4, 6), 16);\n    if (isLighten) {\n        r = Math.floor(r + (255 - r) * factor);\n        g = Math.floor(g + (255 - g) * factor);\n        b = Math.floor(b + (255 - b) * factor);\n    } else {\n        r = Math.floor(r * (1 - factor));\n        g = Math.floor(g * (1 - factor));\n        b = Math.floor(b * (1 - factor));\n    }\n    return `#${((1 << 24) | (r << 16) | (g << 8) | b).toString(16).slice(1).toUpperCase()}`;\n}\n\nfunction isNearWhite(hex, threshold = 240) {\n    hex = hex.replace(\"#\", \"\");\n    const r = parseInt(hex.substring(0, 2), 16);\n    const g = parseInt(hex.substring(2, 4), 16);\n    const b = parseInt(hex.substring(4, 6), 16);\n    return r > threshold && g > threshold && b > threshold;\n}\n\nconst applyCustomTheme = (color) => {\n    let adjustedColor = isNearWhite(color) ? \"#696969\" : color;\n\n    const lighterColorHex = adjustHexColor(adjustedColor, 0.7);\n    const lightTin = adjustHexColor(adjustedColor, 0.9);\n    const darkerColorHex = adjustHexColor(adjustedColor, 0.3, false);\n    const darkTextColor = adjustHexColor(adjustedColor, 0.8, false);\n\n    document.documentElement.style.setProperty(\"--bg-color-blue\", lighterColorHex);\n    document.documentElement.style.setProperty(\"--accentLightTint-blue\", lightTin);\n    document.documentElement.style.setProperty(\"--darkerColor-blue\", darkerColorHex);\n    document.documentElement.style.setProperty(\"--darkColor-blue\", adjustedColor);\n    document.documentElement.style.setProperty(\"--textColorDark-blue\", darkTextColor);\n    document.documentElement.style.setProperty(\"--whitishColor-blue\", \"#ffffff\");\n    colorPickerLabel.style.borderColor = color;\n    document.getElementById(\"dfChecked\").checked = false;\n\n    changeFaviconColor();\n    ApplyLoadingColor();\n};\n\n// Handle radio button changes\nconst handleThemeChange = function () {\n    if (this.checked) {\n        const colorValue = this.value;\n        localStorage.setItem(themeStorageKey, colorValue);\n        localStorage.removeItem(customThemeStorageKey); // Clear custom theme\n        applySelectedTheme(colorValue);\n    }\n};\n\n// Remove any previously attached listeners and add only one\nradioButtons.forEach(radioButton => {\n    radioButton.removeEventListener(\"change\", handleThemeChange); // Remove if already attached\n    radioButton.addEventListener(\"change\", handleThemeChange);    // Add fresh listener\n});\n\n// Handle color picker changes\nconst handleColorPickerChange = function (event) {\n    const selectedColor = event.target.value;\n    resetDarkTheme(); // Clear dark theme if active\n    localStorage.setItem(customThemeStorageKey, selectedColor); // Save custom color\n    localStorage.removeItem(themeStorageKey); // Clear predefined theme\n    applyCustomTheme(selectedColor);\n\n    // Uncheck all radio buttons\n    radioButtons.forEach(radio => {\n        radio.checked = false;\n    });\n};\n\n// Throttle for performance optimization\nconst throttle = (func, limit) => {\n    let lastFunc;\n    let lastRan;\n    return (...args) => {\n        if (!lastRan) {\n            func(...args);\n            lastRan = Date.now();\n        } else {\n            clearTimeout(lastFunc);\n            lastFunc = setTimeout(() => {\n                if (Date.now() - lastRan >= limit) {\n                    func(...args);\n                    lastRan = Date.now();\n                }\n            }, limit - (Date.now() - lastRan));\n        }\n    };\n};\n\n// Add listeners for color picker\ncolorPicker.removeEventListener(\"input\", handleColorPickerChange); // Ensure no duplicate listeners\ncolorPicker.addEventListener(\"input\", throttle(handleColorPickerChange, 10));"
  },
  {
    "path": "scripts/todo-list.js",
    "content": "/*\r\n * Material You NewTab\r\n * Copyright (c) 2023-2025 XengShi\r\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\r\n * You should have received a copy of the GNU General Public License along with this program.\r\n * If not, see <https://www.gnu.org/licenses/>.\r\n */\r\n\r\n// ----------------------------------- To Do List ----------------------------------------\r\n// DOM Variables\r\nconst todoContainer = document.getElementById(\"todoContainer\");\r\nconst todoListCont = document.getElementById(\"todoListCont\");\r\nconst todoulList = document.getElementById(\"todoullist\");\r\nconst todoAdd = document.getElementById(\"todoAdd\");\r\nconst todoInput = document.getElementById(\"todoInput\");\r\nlet todoList = {}; // Initialize todoList JSON\r\nlet suppressNextClick = false;\r\nlet suppressTimeout = null;\r\n\r\n// Add event listeners for Add button click or Enter key press\r\ntodoAdd.addEventListener(\"click\", addtodoItem);\r\ntodoInput.addEventListener(\"keypress\", (event) => {\r\n    if (event.key === \"Enter\") {\r\n        addtodoItem();\r\n    }\r\n});\r\n\r\n// Utility function to sanitize input\r\nfunction sanitizeInput(input) {\r\n    const div = document.createElement(\"div\");\r\n    div.textContent = input;\r\n    return div.innerHTML;\r\n}\r\n\r\n// Function to add items to the TODO list\r\nfunction addtodoItem() {\r\n    const inputText = todoInput.value.trim();\r\n    if (inputText === \"\") return;\r\n\r\n    const t = \"t\" + Date.now(); // Generate a Unique ID\r\n    const rawText = inputText;\r\n\r\n    todoList[t] = { title: rawText, status: \"pending\", pinned: false }; // Add data to the JSON variable\r\n    const li = createTodoItemDOM(t, rawText, \"pending\", false); // Create List item\r\n    todoulList.appendChild(li); // Append the new item to the DOM immediately\r\n    todoInput.value = \"\"; // Clear Input\r\n    SaveToDoData(); // Save changes\r\n}\r\n\r\nfunction createTodoItemDOM(id, title, status, pinned) {\r\n    let li = document.createElement(\"li\");\r\n    li.innerHTML = sanitizeInput(title); // Sanitize before rendering in DOM\r\n\r\n    // Create and append edit button\r\n    const editbtn = document.createElement(\"span\");\r\n    editbtn.setAttribute(\"class\", \"todoeditbtn\");\r\n    li.appendChild(editbtn);\r\n\r\n    // Create and append remove button\r\n    const removebtn = document.createElement(\"span\");\r\n    removebtn.setAttribute(\"class\", \"todoremovebtn\");\r\n    removebtn.textContent = \"\\u00d7\";\r\n    li.appendChild(removebtn);\r\n\r\n    // Set base class and status\r\n    li.setAttribute(\"class\", \"todolistitem\");\r\n    if (status === \"completed\") {\r\n        li.classList.add(\"checked\");\r\n    }\r\n\r\n    // Create and append pin button\r\n    const pinbtn = document.createElement(\"span\");\r\n    pinbtn.setAttribute(\"class\", \"todopinbtn\");\r\n    li.appendChild(pinbtn);\r\n\r\n    if (pinned) {\r\n        li.classList.add(\"pinned\");\r\n    }\r\n\r\n    li.setAttribute(\"data-todoitem\", id); // Set a data attribute to the li so that we can uniquely identify which li has been modified or deleted\r\n    return li; // Return the created `li` element\r\n}\r\n\r\n// Event delegation for task check and remove\r\ntodoulList.addEventListener(\"click\", (event) => {\r\n    if (event.target.tagName === \"LI\") {\r\n        if (suppressNextClick) return;  // Prevent misclick on LI\r\n        event.target.classList.toggle(\"checked\"); // Check the clicked LI tag\r\n        let id = event.target.dataset.todoitem;\r\n        todoList[id].status = ((todoList[id].status === \"completed\") ? \"pending\" : \"completed\"); // Update status\r\n        SaveToDoData(); // Save Changes\r\n    }\r\n    else if (event.target.classList.contains(\"todoremovebtn\")) {\r\n        let id = event.target.parentElement.dataset.todoitem;\r\n        event.target.parentElement.remove(); // Remove the clicked LI tag\r\n        delete todoList[id]; // Remove the deleted List item data\r\n        SaveToDoData(); // Save Changes\r\n    }\r\n    else if (event.target.classList.contains(\"todopinbtn\")) {\r\n        event.target.parentElement.classList.toggle(\"pinned\"); // Check the clicked LI tag\r\n        let id = event.target.parentElement.dataset.todoitem;\r\n        todoList[id].pinned = (todoList[id].pinned !== true); // Update status\r\n        SaveToDoData(); // Save Changes\r\n    }\r\n    else if (event.target.classList.contains(\"todoeditbtn\")) {\r\n        if (suppressNextClick) return;\r\n\r\n        const li = event.target.parentElement;\r\n        const id = li.dataset.todoitem;\r\n        const todo = todoList[id];\r\n        const previousTitle = todo.title;\r\n\r\n        li.classList.toggle(\"edit\");\r\n        if (li.classList.contains(\"edit\")) {\r\n            suppressNextClick = true; // prevent mis-clicks on next action\r\n\r\n            // Find the text node in the LI (the title)\r\n            const titleNode = Array.from(li.childNodes).find(node => node.nodeType === Node.TEXT_NODE && node.textContent.trim() !== \"\");\r\n\r\n            //Safe check\r\n            if (!titleNode) {\r\n                console.warn(\"Title text node not found.\");\r\n                return;\r\n            }\r\n\r\n            const input = document.createElement(\"input\");\r\n            input.type = \"text\";\r\n            input.className = \"edit-input\";\r\n            input.value = previousTitle;\r\n            li.insertBefore(input, titleNode);\r\n            li.removeChild(titleNode);\r\n            input.focus();\r\n\r\n            // Save on blur or Enter\r\n            function saveEdit() {\r\n                const newTitle = input.value.trim();\r\n                todo.title = (newTitle !== \"\") ? sanitizeInput(newTitle) : previousTitle;  //Check for empty title \r\n                const textNode = document.createTextNode(todo.title);\r\n                li.insertBefore(textNode, input);\r\n                li.removeChild(input);\r\n                li.classList.remove(\"edit\");\r\n                SaveToDoData(); // Save changes\r\n\r\n                // Delay resetting to allow click suppression\r\n                clearTimeout(suppressTimeout);\r\n                suppressTimeout = setTimeout(() => {\r\n                    suppressNextClick = false;\r\n                }, 500);\r\n            }\r\n\r\n            // Cancel function for escape key\r\n            function cancelEdit() {\r\n                // Remove the blur event to prevent saveEdit from running\r\n                input.removeEventListener(\"blur\", saveEdit);\r\n\r\n                // Safe Check: Only remove input if it's still in the DOM\r\n                if (li.contains(input)) {\r\n                    const textNode = document.createTextNode(previousTitle);\r\n                    li.insertBefore(textNode, input);\r\n                    li.removeChild(input);\r\n                    li.classList.remove(\"edit\");\r\n\r\n                    clearTimeout(suppressTimeout);\r\n                    suppressTimeout = setTimeout(() => {\r\n                        suppressNextClick = false;\r\n                    }, 200);\r\n                }\r\n            }\r\n\r\n            input.addEventListener(\"blur\", saveEdit);\r\n            input.addEventListener(\"keydown\", function (e) {\r\n                if (e.key === \"Enter\") {\r\n                    input.blur(); // triggers saveEdit\r\n                } else if (e.key === \"Escape\") {\r\n                    cancelEdit();\r\n                }\r\n            });\r\n        }\r\n    }\r\n});\r\n\r\n// Save JSON to local Storage\r\nfunction SaveToDoData() {\r\n    localStorage.setItem(\"todoList\", JSON.stringify(todoList));\r\n}\r\n\r\n// Fetch saved JSON and create list items using it\r\nfunction ShowToDoList() {\r\n    try {\r\n        todoList = JSON.parse(localStorage.getItem(\"todoList\")) || {}; // Parse stored data or initialize empty\r\n        const fragment = document.createDocumentFragment(); // Create a DocumentFragment\r\n\r\n        for (let id in todoList) {\r\n            const todo = todoList[id];\r\n            const li = createTodoItemDOM(id, todo.title, todo.status, todo.pinned); // Create `li` elements\r\n            fragment.appendChild(li); // Add `li` to the fragment\r\n        }\r\n\r\n        todoulList.appendChild(fragment); // Append all `li` to the `ul` at once\r\n    } catch (error) {\r\n        console.error(\"Error loading from localStorage:\", error);\r\n        localStorage.setItem(\"todoList\", \"{}\"); // Reset corrupted data\r\n    }\r\n}\r\n\r\n// Code to reset the List on the Next Day\r\nlet todoLastUpdateDate = localStorage.getItem(\"todoLastUpdateDate\"); // Get the date of last update\r\nlet todoCurrentDate = new Date().toLocaleDateString(); // Get current date\r\n\r\nif (todoLastUpdateDate === todoCurrentDate) {\r\n    ShowToDoList();\r\n} else {\r\n    // Modify the list when last update date and the current date does not match\r\n    localStorage.setItem(\"todoLastUpdateDate\", todoCurrentDate);\r\n    todoList = JSON.parse(localStorage.getItem(\"todoList\")) || {};\r\n\r\n    for (let id in todoList) {\r\n        if (todoList[id].pinned === false) {\r\n            if (todoList[id].status === \"completed\") {\r\n                delete todoList[id]; // Remove the Unpinned and Completed list item data\r\n            }\r\n        } else {\r\n            todoList[id].status = \"pending\"; // Reset status of pinned items\r\n        }\r\n    }\r\n\r\n    SaveToDoData();\r\n    ShowToDoList();\r\n}\r\n\r\n// Toggle menu and tooltip visibility\r\ntodoListCont.addEventListener(\"click\", function (event) {\r\n    const isMenuVisible = todoContainer.style.display === \"grid\";\r\n\r\n    // Toggle menu visibility\r\n    todoContainer.style.display = isMenuVisible ? \"none\" : \"grid\";\r\n\r\n    // Add or remove the class to hide the tooltip\r\n    if (!isMenuVisible) {\r\n        todoContainer.style.animation = \"panelScaleIn 200ms cubic-bezier(0.4, 0, 0.2, 1) forwards\";\r\n        todoListCont.classList.add(\"menu-open\"); // Hide tooltip\r\n        todoInput.focus(); // Auto focus on input box\r\n    } else {\r\n        //todoContainer.style.animation = \"panelScaleOut 150ms cubic-bezier(0.4, 0, 1, 1) forwards\";\r\n        todoListCont.classList.remove(\"menu-open\"); // Restore tooltip\r\n    }\r\n});\r\n\r\n// Close menu when clicking outside\r\ndocument.addEventListener(\"click\", function (event) {\r\n    const isClickInside =\r\n        todoContainer.contains(event.target) || todoListCont.contains(event.target) || event.target.classList.contains(\"todoremovebtn\");\r\n\r\n    if (!isClickInside && todoContainer.style.display === \"grid\") {\r\n        todoContainer.style.display = \"none\"; // Hide menu\r\n        todoListCont.classList.remove(\"menu-open\"); // Restore tooltip\r\n    }\r\n\r\n    event.stopPropagation();\r\n});\r\n\r\n// ----------------------- To Do List Toggle -----------------------------\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n    const todoListCheckbox = document.getElementById(\"todoListCheckbox\");\r\n\r\n    todoListCheckbox.addEventListener(\"change\", function () {\r\n        saveCheckboxState(\"todoListCheckboxState\", todoListCheckbox);\r\n        if (todoListCheckbox.checked) {\r\n            todoListCont.style.display = \"flex\";\r\n            saveDisplayStatus(\"todoListDisplayStatus\", \"flex\");\r\n        } else {\r\n            todoListCont.style.display = \"none\";\r\n            saveDisplayStatus(\"todoListDisplayStatus\", \"none\");\r\n        }\r\n    });\r\n\r\n    loadCheckboxState(\"todoListCheckboxState\", todoListCheckbox);\r\n    loadDisplayStatus(\"todoListDisplayStatus\", todoListCont);\r\n});\r\n"
  },
  {
    "path": "scripts/voice-search.js",
    "content": "/*\n * Material You NewTab\n * Copyright (c) 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program.\n * If not, see <https://www.gnu.org/licenses/>.\n */\n\n//  -----------Voice Search------------\nfunction isSupportedBrowser() {\n    return (isChrome || isEdge) && isDesktop && !isBrave;\n}\n\n// Set the initial state of the mic icon and checkbox based on saved state or supported browser\nconst micIcon = document.getElementById(\"micIcon\");\nconst micIconCheckbox = document.getElementById(\"micIconCheckbox\");\n\n// Check if there's a saved state in localStorage\nconst savedState = localStorage.getItem(\"micIconVisible\");\nlet isMicIconVisible;\n\n// If saved state exists, use it; otherwise, fallback to initial state based on browser support\nif (savedState !== null) {\n    isMicIconVisible = savedState === \"true\";\n} else {\n    // Default state: Hide mic icon if browser is not supported\n    isMicIconVisible = isSupportedBrowser();\n    // Save the initial state based on the user agent\n    localStorage.setItem(\"micIconVisible\", isMicIconVisible);\n}\n\n// Set the checkbox state based on the saved or default state\nmicIconCheckbox.checked = !isMicIconVisible; // Checked hides the mic icon\nif (isMicIconVisible) {\n    micIcon.style.display = \"block\";  // Mic icon is displayed\n} else {\n    micIcon.style.display = \"none\";   // Hide the mic icon\n}\n\n// Function to toggle mic icon visibility\nfunction toggleMicIconVisibility(isVisible) {\n    micIcon.style.display = isVisible ? \"block\" : \"none\";\n    localStorage.setItem(\"micIconVisible\", isVisible); // Save to localStorage\n}\n\n// Toggle mic icon display based on checkbox state\nmicIconCheckbox.addEventListener(\"change\", () => {\n    const isChecked = micIconCheckbox.checked;\n    toggleMicIconVisibility(!isChecked); // Checked hides the mic icon\n\n    // Only initialize Web Speech API if the mic icon is visible\n    if (!isChecked) {\n        initializeSpeechRecognition();\n    }\n});\n\n// Function to initialize Web Speech API if supported\nfunction initializeSpeechRecognition() {\n    const searchInput = document.getElementById(\"searchQ\");\n    const resultBox = document.getElementById(\"resultBox\");\n    const currentLanguage = getLanguageStatus(\"selectedLanguage\") || \"en\";\n\n    // Check if the browser supports SpeechRecognition API\n    const isSpeechRecognitionAvailable = \"webkitSpeechRecognition\" in window || \"SpeechRecognition\" in window;\n\n    if (isSpeechRecognitionAvailable) {\n        // Initialize SpeechRecognition (cross-browser compatibility)\n        const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();\n        recognition.continuous = false;  // Stop recognition after first result\n        recognition.interimResults = true; // Enable interim results for live transcription\n        recognition.lang = currentLanguage; // Set the language dynamically based on selected language\n\n        let isRecognizing = false; // Flag to check if recognition is active\n\n        // When speech recognition starts\n        recognition.onstart = () => {\n            isRecognizing = true; // Set the flag to indicate recognition is active\n            const selectedRadio = document.querySelector(\".colorPlate:checked\");\n            if (selectedRadio.value !== \"dark\") {\n                micIcon.style.color = \"var(--darkerColor-blue)\";\n                // micIcon.style.transform = \"scale(1.05)\";\n            }\n            searchInput.placeholder = `${translations[currentLanguage]?.listenPlaceholder || translations[\"en\"].listenPlaceholder}`;\n            micIcon.classList.add(\"micActive\");\n        };\n\n        // When speech recognition results are available (including interim results)\n        recognition.onresult = (event) => {\n            let transcript = \"\";\n            // Loop through results to build the transcript text\n            for (let i = 0; i < event.results.length; i++) {\n                transcript += event.results[i][0].transcript; // Append each piece of the transcript\n            }\n            // Display the interim result in the search input\n            searchInput.value = transcript;\n            // Trigger the input event manually to update suggestions\n            searchInput.dispatchEvent(new Event(\"input\"));\n            // If the result is final, hide the result box\n            if (event.results[event.results.length - 1].isFinal) {\n                resultBox.style.display = \"none\"; // Hide result box after final input\n            }\n        };\n\n        // When an error occurs during speech recognition\n        recognition.onerror = (event) => {\n            console.error(\"Speech recognition error: \", event.error);\n            isRecognizing = false; // Reset flag on error\n        };\n\n        // When speech recognition ends (either by user or automatically)\n        recognition.onend = () => {\n            isRecognizing = false; // Reset the flag to indicate recognition has stopped\n            micIcon.style.color = \"var(--darkColor-blue)\"; // Reset mic color\n            // micIcon.style.transform = \"scale(1)\"; // Reset scaling\n            micIcon.classList.remove(\"micActive\");\n            searchInput.placeholder = `${translations[currentLanguage]?.searchPlaceholder || translations[\"en\"].searchPlaceholder}`;\n        };\n\n        // Start speech recognition when mic icon is clicked\n        micIcon.addEventListener(\"click\", () => {\n            if (isRecognizing) {\n                recognition.stop(); // Stop recognition if it's already listening\n            } else {\n                recognition.start(); // Start recognition if it's not already listening\n            }\n        });\n    } else {\n        console.info(\"Speech Recognition API not supported in this browser.\");\n    }\n}\n\n// Initialize SpeechRecognition only if the mic icon is visible\nif (!micIconCheckbox.checked) {\n    initializeSpeechRecognition();\n}\n//  -----------End of Voice Search------------"
  },
  {
    "path": "scripts/wallpaper.js",
    "content": "/*\n * Material You NewTab\n * Copyright (c) 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program.\n * If not, see <https://www.gnu.org/licenses/>.\n */\n\n\n// -------------------------- Wallpaper -----------------------------\nconst dbName = \"ImageDB\";\nconst storeName = \"backgroundImages\";\nconst timestampKey = \"lastUpdateTime\"; // Key to store last update time\nconst imageTypeKey = \"imageType\"; // Key to store the type of image (\"random\" or \"upload\")\n\n// Open IndexedDB database\nfunction openDatabase() {\n    return new Promise((resolve, reject) => {\n        const request = indexedDB.open(dbName, 1);\n        request.onupgradeneeded = function (event) {\n            const db = event.target.result;\n            db.createObjectStore(storeName);\n        };\n        request.onsuccess = (event) => resolve(event.target.result);\n        request.onerror = (event) => reject(\"Database error: \" + event.target.errorCode);\n    });\n}\n\n// Save image Blob, timestamp, and type to IndexedDB\nasync function saveImageToIndexedDB(imageBlob, isRandom) {\n    const db = await openDatabase();\n    return new Promise((resolve, reject) => {\n        const transaction = db.transaction(storeName, \"readwrite\");\n        const store = transaction.objectStore(storeName);\n\n        store.put(imageBlob, \"backgroundImage\"); // Save Blob\n        store.put(new Date().toISOString(), timestampKey);\n        store.put(isRandom ? \"random\" : \"upload\", imageTypeKey);\n\n        transaction.oncomplete = () => resolve();\n        transaction.onerror = (event) => reject(\"Transaction error: \" + event.target.errorCode);\n    });\n}\n\n// Load image Blob, timestamp, and type from IndexedDB\nasync function loadImageAndDetails() {\n    const db = await openDatabase();\n    return Promise.all([\n        getFromStore(db, \"backgroundImage\"),\n        getFromStore(db, timestampKey),\n        getFromStore(db, imageTypeKey)\n    ]);\n}\n\nfunction getFromStore(db, key) {\n    return new Promise((resolve, reject) => {\n        const transaction = db.transaction(storeName, \"readonly\");\n        const store = transaction.objectStore(storeName);\n        const request = store.get(key);\n\n        request.onsuccess = () => resolve(request.result);\n        request.onerror = (event) => reject(\"Request error: \" + event.target.errorCode);\n    });\n}\n\n// Clear image data from IndexedDB\nasync function clearImageFromIndexedDB() {\n    const db = await openDatabase();\n    return new Promise((resolve, reject) => {\n        const transaction = db.transaction(storeName, \"readwrite\");\n        const store = transaction.objectStore(storeName);\n        store.delete(\"backgroundImage\");\n        store.delete(timestampKey);\n        store.delete(imageTypeKey);\n\n        transaction.oncomplete = () => resolve();\n        transaction.onerror = (event) => reject(\"Delete error: \" + event.target.errorCode);\n    });\n}\n\n// Handle file input and save image as upload\ndocument.getElementById(\"imageUpload\").addEventListener(\"change\", function (event) {\n    const file = event.target.files[0];\n    if (file) {\n        const imageUrl = URL.createObjectURL(file); // Create temporary Blob URL\n        const image = new Image();\n\n        image.onload = function () {\n            document.body.style.setProperty(\"--bg-image\", `url(${imageUrl})`);\n            saveImageToIndexedDB(file, false)\n                .then(() => {\n                    toggleBackgroundType(true);\n                    URL.revokeObjectURL(imageUrl); // Clean up memory\n                })\n                .catch(error => console.error(error));\n        };\n\n        image.src = imageUrl;\n    }\n});\n\n// Fetch and apply random image as background\nconst RANDOM_IMAGE_URL = \"https://picsum.photos/1920/1080\";\n\nasync function applyRandomImage(showConfirmation = true) {\n    if (showConfirmation && !(await confirmPrompt(\n        translations[currentLanguage]?.confirmWallpaper || translations[\"en\"].confirmWallpaper\n    ))) {\n        return;\n    }\n    try {\n        const response = await fetch(RANDOM_IMAGE_URL);\n        const blob = await response.blob(); // Get Blob from response\n        const imageUrl = URL.createObjectURL(blob);\n\n        document.body.style.setProperty(\"--bg-image\", `url(${imageUrl})`);\n        await saveImageToIndexedDB(blob, true);\n        toggleBackgroundType(true);\n        setTimeout(() => URL.revokeObjectURL(imageUrl), 2000); // Delay URL revocation\n    } catch (error) {\n        console.error(\"Error fetching random image:\", error);\n    }\n}\n\n// Function to update the background type attribute\nfunction toggleBackgroundType(hasWallpaper) {\n    document.body.setAttribute(\"data-bg\", hasWallpaper ? \"wallpaper\" : \"color\");\n}\n\n// Check and update image on page load\nfunction checkAndUpdateImage() {\n    loadImageAndDetails()\n        .then(([blob, savedTimestamp, imageType]) => {\n            const now = new Date();\n            const lastUpdate = new Date(savedTimestamp);\n\n            // No image or invalid data\n            if (!blob || !savedTimestamp || isNaN(lastUpdate)) {\n                toggleBackgroundType(false);\n                return;\n            }\n\n            // Create a new Blob URL dynamically\n            const imageUrl = URL.createObjectURL(blob);\n\n            if (imageType === \"upload\") {\n                document.body.style.setProperty(\"--bg-image\", `url(${imageUrl})`);\n                toggleBackgroundType(true);\n                return;\n            }\n\n            if (lastUpdate.toDateString() !== now.toDateString()) {\n                // Refresh random image if a new day\n                applyRandomImage(false);\n            } else {\n                // Reapply the saved random image\n                document.body.style.setProperty(\"--bg-image\", `url(${imageUrl})`);\n                toggleBackgroundType(true);\n            }\n\n            // Clean up the Blob URL after setting the background\n            setTimeout(() => URL.revokeObjectURL(imageUrl), 1500);\n        })\n        .catch((error) => {\n            console.error(\"Error loading image details:\", error);\n            toggleBackgroundType(false);\n        });\n}\n\n// Event listeners for buttons\ndocument.getElementById(\"uploadTrigger\").addEventListener(\"click\", () =>\n    document.getElementById(\"imageUpload\").click()\n);\n\ndocument.getElementById(\"clearImage\").addEventListener(\"click\", async function () {\n    try {\n        const [blob] = await loadImageAndDetails();\n        if (!blob) {\n            await alertPrompt(translations[currentLanguage]?.Nobackgroundset || translations[\"en\"].Nobackgroundset);\n            return;\n        }\n\n        const confirmationMessage = translations[currentLanguage]?.clearbackgroundimage || translations[\"en\"].clearbackgroundimage;\n        if (await confirmPrompt(confirmationMessage)) {\n            try {\n                await clearImageFromIndexedDB();\n                document.body.style.removeProperty(\"--bg-image\");\n                toggleBackgroundType(false);\n            } catch (error) {\n                console.error(error);\n            }\n        }\n    } catch (error) {\n        console.error(error);\n    }\n});\ndocument.getElementById(\"randomImageTrigger\").addEventListener(\"click\", applyRandomImage);\n\n// Start image check on page load\ncheckAndUpdateImage();\n// ------------------------ End of BG Image --------------------------"
  },
  {
    "path": "scripts/weather.js",
    "content": "/*\n * Material You NewTab\n * Copyright (c) 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program.\n * If not, see <https://www.gnu.org/licenses/>.\n */\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n    const hideWeather = document.getElementById(\"hideWeather\");\n    const hideWeatherCheckbox = document.getElementById(\"hideWeatherCheckbox\");\n    const weatherHeader = document.getElementById(\"weatherHeader\");\n    const weatherOptions = document.querySelector(\".weatherOptions\");\n\n    // Retrieve saved state\n    const isHidden = localStorage.getItem(\"hideWeatherVisible\") === \"true\";\n    hideWeatherCheckbox.checked = isHidden;\n\n    function applyWeatherState(hidden) {\n        weatherOptions.classList.toggle(\"not-applicable\", hidden);\n        weatherOptions.classList.toggle(\"inactive\", hidden);\n        if (hidden)\n            setTimeout(() => weatherHeader.style.borderBottom = \"none\", 150);\n        else\n            weatherHeader.style.borderBottom = \"\";\n\n        // Hide weather widgets\n        hideWeather.classList.toggle(\"weather-hidden\", hidden);\n    }\n\n    // Apply initial state\n    applyWeatherState(isHidden);\n\n    // Show weather widgets only if toggle is unchecked\n    if (!isHidden) {\n        getWeatherData();\n    }\n\n    hideWeatherCheckbox.addEventListener(\"change\", () => {\n        const hidden = hideWeatherCheckbox.checked;\n        localStorage.setItem(\"hideWeatherVisible\", hidden);\n\n        applyWeatherState(hidden);\n\n        if (!hidden) {\n            getWeatherData();\n        }\n    });\n});\n\nasync function getWeatherData() {\n    // Display texts \n    document.getElementById(\"conditionText\").textContent = translations[currentLanguage]?.conditionText || translations[\"en\"].conditionText;\n    document.getElementById(\"humidityLevel\").textContent = translations[currentLanguage]?.humidityLevel || translations[\"en\"].humidityLevel;\n    document.getElementById(\"location\").textContent = translations[currentLanguage]?.location || translations[\"en\"].location;\n\n    // Cache DOM elements\n    const userAPIInput = document.getElementById(\"userAPI\");\n    const userLocInput = document.getElementById(\"userLoc\");\n    const saveAPIButton = document.getElementById(\"saveAPI\");\n    const saveLocButton = document.getElementById(\"saveLoc\");\n    const gpsToggle = document.getElementById(\"useGPScheckbox\");\n    const locationCont = document.getElementById(\"locationCont\");\n    const locationSuggestions = document.getElementById(\"locationSuggestions\");\n\n    // Load saved data from localStorage\n    const savedApiKey = localStorage.getItem(\"weatherApiKey\");\n    const savedLocation = localStorage.getItem(\"weatherLocation\");\n\n    // Pre-fill input fields with saved data\n    if (savedLocation) userLocInput.value = savedLocation;\n    if (savedApiKey) userAPIInput.value = savedApiKey;\n\n    const minMaxTempCheckbox = document.getElementById(\"minMaxTempCheckbox\");\n    const isMinMaxEnabled = localStorage.getItem(\"minMaxTempEnabled\") === \"true\";\n    minMaxTempCheckbox.checked = isMinMaxEnabled;\n\n    document.getElementById(\"feelsLike\").textContent = isMinMaxEnabled\n        ? translations[currentLanguage]?.minMaxTemp || translations[\"en\"].minMaxTemp\n        : translations[currentLanguage]?.feelsLike || translations[\"en\"].feelsLike;\n\n    // Function to simulate button click on Enter key press\n    function handleEnterPress(event, buttonId) {\n        if (event.key === \"Enter\") {\n            document.getElementById(buttonId).click();\n        }\n    }\n\n    // Add event listeners for handling Enter key presses\n    userAPIInput.addEventListener(\"keydown\", (event) => handleEnterPress(event, \"saveAPI\"));\n    userLocInput.addEventListener(\"keydown\", (event) => handleEnterPress(event, \"saveLoc\"));\n\n    // Save API key to localStorage\n    saveAPIButton.addEventListener(\"click\", () => {\n        const apiKey = userAPIInput.value.trim();\n        localStorage.setItem(\"weatherApiKey\", apiKey);\n        userAPIInput.value = \"\";\n        location.reload();\n    });\n\n    // Handle GPS toggle change\n    gpsToggle.addEventListener(\"change\", async () => {\n        if (gpsToggle.checked) {\n            const message = translations[currentLanguage]?.GPSDisclaimer || translations[\"en\"].GPSDisclaimer;\n            const confirmGPS = await confirmPrompt(message, agreeText, cancelText);\n\n            if (!confirmGPS) {\n                gpsToggle.checked = false; // Revert toggle if user cancels\n                return;\n            }\n            localStorage.setItem(\"useGPS\", true);\n            locationCont.classList.add(\"inactive\");\n        } else {\n            localStorage.setItem(\"useGPS\", false);\n            locationCont.classList.remove(\"inactive\");\n        }\n        location.reload();\n    });\n\n    // Handle manual location input\n    saveLocButton.addEventListener(\"click\", () => {\n        const userLocation = userLocInput.value.trim();\n        localStorage.setItem(\"weatherLocation\", userLocation);\n        localStorage.setItem(\"useGPS\", false);\n        userLocInput.value = \"\";\n        fetchWeather();\n        location.reload();\n    });\n\n    // Default Weather API key\n    const weatherApiKeys = [\n        \"d36ce712613d4f21a6083436240910\",\n        \"db0392b338114f208ee135134240312\",\n        \"de5f7396db034fa2bf3140033240312\",\n        \"c64591e716064800992140217240312\",\n        \"9b3204c5201b4b4d8a2140330240312\",\n        \"eb8a315c15214422b60140503240312\",\n        \"cd148ebb1b784212b74140622240312\",\n        \"7ae67e219af54df2840140801240312\",\n        \"0a6bc8a404224c8d89953341241912\",\n        \"f59e58d7735d4739ae953115241912\",\n        \"17859d22a346495c988115334252703\",\n        \"97cc2ef3bc4f45b3b0d120816252703\",\n        \"51348f046e3f47ee99d120933252703\",\n        \"ddbba7cc66044f96b43121046252703\",\n        \"ab1b595515084775be2121201252703\"\n    ];\n    const defaultApiKey = weatherApiKeys[Math.floor(Math.random() * weatherApiKeys.length)];\n\n    // Determine which API key to use\n    const apiKey = savedApiKey || defaultApiKey;\n\n    let activeIndex = -1; // Track keyboard navigation index\n    let suggestions = []; // Store fetched location suggestions\n\n    // Hide/show browser autocomplete based on suggestion state\n    function toggleAutocomplete() {\n        if (suggestions.length > 0) {\n            userLocInput.setAttribute(\"autocomplete\", \"off\");\n        } else {\n            userLocInput.removeAttribute(\"autocomplete\");\n        }\n    }\n\n    // Fetch location suggestions from weatherAPI\n    async function fetchLocationSuggestions(query) {\n        if (!savedApiKey || query.length < 3) {\n            suggestions = [];\n            locationSuggestions.style.display = \"none\";\n            toggleAutocomplete();\n            return;\n        }\n\n        try {\n            const response = await fetch(`https://api.weatherapi.com/v1/search.json?key=${savedApiKey}&q=${query}`);\n            suggestions = await response.json();\n\n            if (suggestions.length > 0) {\n                displaySuggestions(suggestions);\n                toggleAutocomplete();\n            } else {\n                locationSuggestions.style.display = \"none\";\n                toggleAutocomplete();\n            }\n        } catch (error) {\n            console.error(\"Error fetching location suggestions:\", error);\n            suggestions = [];\n            toggleAutocomplete();\n        }\n    }\n\n    // Display location suggestions in the dropdown\n    function displaySuggestions(locations) {\n        locationSuggestions.innerHTML = \"\";\n\n        locations.forEach((location, index) => {\n            const div = document.createElement(\"div\");\n            div.classList.add(\"location-suggestion-item\");\n\n            // Format text without extra comma if region is empty\n            const locationText = location.region\n                ? `${location.name}, ${location.region}, ${location.country}`\n                : `${location.name}, ${location.country}`;\n            div.textContent = locationText;\n\n            div.dataset.index = index;\n\n            // Mouse click selects location and saves\n            div.addEventListener(\"click\", () => {\n                selectLocation(index);\n                locationSuggestions.style.display = \"none\";\n                suggestions = [];\n                toggleAutocomplete();\n            });\n\n            // Mouse hover highlights\n            div.addEventListener(\"mouseenter\", () => {\n                activeIndex = index;\n                updateActiveSuggestion();\n            });\n\n            locationSuggestions.appendChild(div);\n        });\n\n        locationSuggestions.style.display = \"block\";\n        activeIndex = -1; // Reset selection\n    }\n\n    // Update active suggestion highlight\n    function updateActiveSuggestion() {\n        const items = locationSuggestions.querySelectorAll(\".location-suggestion-item\");\n\n        items.forEach((item, i) => {\n            item.classList.toggle(\"active\", i === activeIndex);\n            if (i === activeIndex) {\n                item.scrollIntoView({ block: \"nearest\", behavior: \"smooth\" });\n            }\n        });\n    }\n\n    // Select location from suggestions\n    function selectLocation(index) {\n        const selectedLocation = suggestions[index];\n\n        const locationText = selectedLocation.region\n            ? `${selectedLocation.name}, ${selectedLocation.region}, ${selectedLocation.country}`\n            : `${selectedLocation.name}, ${selectedLocation.country}`;\n        userLocInput.value = locationText;\n\n        locationSuggestions.style.display = \"none\";\n        localStorage.setItem(\"weatherLocation\", JSON.stringify(selectedLocation));\n        saveLocButton.click();\n        suggestions = [];\n        toggleAutocomplete();\n    }\n\n    // Handle user input (fetch locations on change)\n    userLocInput.addEventListener(\"input\", () => {\n        fetchLocationSuggestions(userLocInput.value)\n    });\n\n    // Display suggestions when input is focused\n    userLocInput.addEventListener(\"focus\", () => {\n        if (userLocInput.value.length >= 3) {\n            fetchLocationSuggestions(userLocInput.value);\n        }\n    });\n\n    // Handle keyboard navigation for suggestions\n    userLocInput.addEventListener(\"keydown\", (e) => {\n        const items = locationSuggestions.querySelectorAll(\".location-suggestion-item\");\n\n        if (items.length === 0) return;\n\n        if (e.key === \"ArrowDown\") {\n            e.preventDefault();\n            activeIndex = (activeIndex + 1) % items.length;\n        } else if (e.key === \"ArrowUp\") {\n            e.preventDefault();\n            activeIndex = (activeIndex - 1 + items.length) % items.length;\n        } else if (e.key === \"Enter\" && activeIndex >= 0) {\n            e.preventDefault();\n            selectLocation(activeIndex);\n            locationSuggestions.style.display = \"none\";\n            return;\n        }\n\n        updateActiveSuggestion();\n    });\n\n    // Hide suggestions when clicking outside\n    document.addEventListener(\"click\", (e) => {\n        if (!locationSuggestions.contains(e.target) && !userLocInput.contains(e.target)) {\n            locationSuggestions.style.display = \"none\";\n            suggestions = [];\n            toggleAutocomplete();\n        }\n    });\n\n    // Determine the location to use\n    let currentUserLocation = savedLocation;\n\n    // Load the saved GPS state from localStorage\n    const useGPS = JSON.parse(localStorage.getItem(\"useGPS\")) || false;\n    gpsToggle.checked = useGPS;\n    if (useGPS) locationCont.classList.add(\"inactive\");\n\n\n    // Function to fetch GPS-based location\n    async function fetchGPSLocation() {\n        const getLocationFromGPS = () => {\n            return new Promise((resolve, reject) => {\n                navigator.geolocation.getCurrentPosition(\n                    (position) => {\n                        resolve({\n                            latitude: position.coords.latitude,\n                            longitude: position.coords.longitude,\n                        });\n                    },\n                    (error) => reject(error),\n                    { timeout: 6000 }\n                );\n            });\n        };\n\n        try {\n            const { latitude, longitude } = await getLocationFromGPS();\n            return `${latitude},${longitude}`;\n        } catch (error) {\n            console.error(\"Failed to retrieve GPS Location:\", error);\n        }\n    }\n\n    // Fetch location based on user preference\n    await (async function initializeLocation() {\n        try {\n            if (useGPS) currentUserLocation = await fetchGPSLocation();\n\n            if (!currentUserLocation) {\n                // Fallback to IP-based location if no manual input\n                const ipInfo = \"https://ipinfo.io/json/\";\n                const locationData = await fetch(ipInfo);\n                const ipLocation = await locationData.json();\n                currentUserLocation = ipLocation.loc;\n            }\n\n            // Fetch weather data\n            fetchWeather();\n        } catch (error) {\n            console.error(\"Failed to retrieve IP-based location:\", error);\n            currentUserLocation = \"auto:ip\";\n            fetchWeather();\n        }\n    })();\n\n    // Fetch weather data based on a location\n    async function fetchWeather() {\n        try {\n            let parsedData = JSON.parse(localStorage.getItem(\"weatherParsedData\"));\n            const weatherParsedTime = parseInt(localStorage.getItem(\"weatherParsedTime\"));\n            const weatherParsedLocation = localStorage.getItem(\"weatherParsedLocation\");\n            const weatherParsedLang = localStorage.getItem(\"weatherParsedLang\");\n\n            const retentionTime = savedApiKey ? 435000 : 960000; // 7.25 min for user-entered API key, 16 min otherwise\n\n            if (!parsedData ||\n                ((Date.now() - weatherParsedTime) > retentionTime) ||\n                (weatherParsedLocation !== currentUserLocation) ||\n                (weatherParsedLang !== currentLanguage)) {\n\n                // Language code for Weather API\n                let lang = currentLanguage === \"zh_TW\" ? currentLanguage : currentLanguage.split(\"_\")[0];\n\n                // Fetch weather data using Weather API\n                let weatherApi = `https://api.weatherapi.com/v1/forecast.json?key=${apiKey}&q=${currentUserLocation}&days=1&aqi=no&alerts=no&lang=${lang}`;\n\n                let data = await fetch(weatherApi);\n                parsedData = await data.json();\n                if (!parsedData.error) {\n                    // Extract only the necessary fields before saving\n                    const filteredData = {\n                        location: {\n                            name: parsedData.location.name,\n                        },\n                        current: {\n                            condition: {\n                                text: parsedData.current.condition.text,\n                                icon: parsedData.current.condition.icon,\n                            },\n                            temp_c: parsedData.current.temp_c,\n                            temp_f: parsedData.current.temp_f,\n                            humidity: parsedData.current.humidity,\n                            feelslike_c: parsedData.current.feelslike_c,\n                            feelslike_f: parsedData.current.feelslike_f,\n                        },\n                        forecast: {\n                            forecastday: [\n                                {\n                                    day: {\n                                        mintemp_c: parsedData.forecast.forecastday[0].day.mintemp_c,\n                                        maxtemp_c: parsedData.forecast.forecastday[0].day.maxtemp_c,\n                                        mintemp_f: parsedData.forecast.forecastday[0].day.mintemp_f,\n                                        maxtemp_f: parsedData.forecast.forecastday[0].day.maxtemp_f\n                                    }\n                                }\n                            ]\n                        }\n                    };\n\n                    // Save filtered weather data to localStorage\n                    localStorage.setItem(\"weatherParsedData\", JSON.stringify(filteredData));\n                    localStorage.setItem(\"weatherParsedTime\", Date.now()); // Save time of last fetching\n                    localStorage.setItem(\"weatherParsedLocation\", currentUserLocation); // Save user location\n                    localStorage.setItem(\"weatherParsedLang\", currentLanguage); // Save language preference\n                }\n            }\n\n            // Update weather data\n            UpdateWeather();\n\n            function UpdateWeather() {\n                // Weather data\n                const conditionText = parsedData.current.condition.text;\n                const tempCelsius = Math.round(parsedData.current.temp_c);\n                const tempFahrenheit = Math.round(parsedData.current.temp_f);\n                const humidity = parsedData.current.humidity;\n                const feelsLikeCelsius = parsedData.current.feelslike_c;\n                const feelsLikeFahrenheit = parsedData.current.feelslike_f;\n\n                // Update DOM elements with the weather data\n                document.getElementById(\"conditionText\").textContent = conditionText;\n\n                // Localize and display temperature and humidity\n                const localizedHumidity = localizeNumbers(humidity.toString(), currentLanguage);\n                const localizedTempCelsius = localizeNumbers(tempCelsius.toString(), currentLanguage);\n                const localizedFeelsLikeCelsius = localizeNumbers(feelsLikeCelsius.toString(), currentLanguage);\n                const localizedTempFahrenheit = localizeNumbers(tempFahrenheit.toString(), currentLanguage);\n                const localizedFeelsLikeFahrenheit = localizeNumbers(feelsLikeFahrenheit.toString(), currentLanguage);\n\n                const minTempC = parsedData.forecast.forecastday[0].day.mintemp_c;\n                const maxTempC = parsedData.forecast.forecastday[0].day.maxtemp_c;\n                const minTempF = parsedData.forecast.forecastday[0].day.mintemp_f;\n                const maxTempF = parsedData.forecast.forecastday[0].day.maxtemp_f;\n                const localizedMinTempC = localizeNumbers(minTempC.toString(), currentLanguage);\n                const localizedMaxTempC = localizeNumbers(maxTempC.toString(), currentLanguage);\n                const localizedMinTempF = localizeNumbers(minTempF.toString(), currentLanguage);\n                const localizedMaxTempF = localizeNumbers(maxTempF.toString(), currentLanguage);\n\n                // Set humidity level\n                const humidityLabel = translations[currentLanguage]?.humidityLevel || translations[\"en\"].humidityLevel;\n                document.getElementById(\"humidityLevel\").textContent = isRTL\n                    ? `${humidityLabel} %${localizedHumidity}` // RTL: \"76% ytidimuH\"\n                    : `${humidityLabel} ${localizedHumidity}%`;\n\n                // Event Listener for the Fahrenheit toggle\n                const fahrenheitCheckbox = document.getElementById(\"fahrenheitCheckbox\");\n                const updateTemperatureDisplay = () => {\n                    const tempElement = document.getElementById(\"temp\");\n                    const feelsLikeElement = document.getElementById(\"feelsLike\");\n                    const feelsLikeLabel = translations[currentLanguage]?.feelsLike || translations[\"en\"].feelsLike;\n\n                    // List of languages where a space before °F or °C is required\n                    const langWithSpaceBeforeDegree = [\"cs\"];\n\n                    // Range separator for min-max temperature\n                    const rangeSeparator = {\n                        cs: \"až\",\n                        // Add more languages as needed\n                        default: \"~\"\n                    };\n                    const separator = rangeSeparator[currentLanguage] || rangeSeparator.default;\n\n                    if (fahrenheitCheckbox.checked) {\n                        // Update temperature\n                        tempElement.textContent = localizedTempFahrenheit;\n                        const tempUnitF = document.createElement(\"span\");\n                        tempUnitF.className = \"tempUnit\";\n                        tempUnitF.textContent = \"°F\";\n                        tempElement.appendChild(tempUnitF);\n\n                        // Update feels like or Min-Max temp\n                        const feelsLikeFUnit = langWithSpaceBeforeDegree.includes(currentLanguage) ? \" °F\" : \"°F\";\n                        if (isMinMaxEnabled) {\n                            feelsLikeElement.textContent = `${localizedMinTempF} ${separator} ${localizedMaxTempF}${feelsLikeFUnit}`;\n                        }\n                        else {\n                            feelsLikeElement.textContent = isRTL\n                                ? `${localizedFeelsLikeFahrenheit}${feelsLikeFUnit} ${feelsLikeLabel}`\n                                : `${feelsLikeLabel} ${localizedFeelsLikeFahrenheit}${feelsLikeFUnit}`;\n                        }\n                    } else {\n                        // Update temperature\n                        tempElement.textContent = localizedTempCelsius;\n                        const tempUnitC = document.createElement(\"span\");\n                        tempUnitC.className = \"tempUnit\";\n                        tempUnitC.textContent = \"°C\";\n                        tempElement.appendChild(tempUnitC);\n\n                        // Update feels like or Min-Max temp\n                        const feelsLikeCUnit = langWithSpaceBeforeDegree.includes(currentLanguage) ? \" °C\" : \"°C\";\n                        if (isMinMaxEnabled) {\n                            feelsLikeElement.textContent = `${localizedMinTempC} ${separator} ${localizedMaxTempC}${feelsLikeCUnit}`;\n                        }\n                        else {\n                            feelsLikeElement.textContent = isRTL\n                                ? `${localizedFeelsLikeCelsius}${feelsLikeCUnit} ${feelsLikeLabel}`\n                                : `${feelsLikeLabel} ${localizedFeelsLikeCelsius}${feelsLikeCUnit}`;\n                        }\n                    }\n                };\n                updateTemperatureDisplay();\n\n                // Setting weather Icon\n                const newWIcon = parsedData.current.condition.icon;\n                const weatherIcon = newWIcon.replace(\"//cdn.weatherapi.com/weather/64x64/\", \"https://cdn.weatherapi.com/weather/128x128/\");\n                const wIcon = document.getElementById(\"wIcon\");\n                wIcon.onerror = () => {\n                    wIcon.src = './svgs/defaultWeather.svg';\n                };\n                wIcon.src = weatherIcon;\n\n                // Define minimum width for the slider based on the language\n                const humidityMinWidth = {\n                    idn: \"47%\",\n                    hu: \"48%\",\n                    de: \"51%\",\n                    ta: \"46%\",\n                    sv: \"45%\",\n                    en: \"42%\" // Default for English and others\n                };\n                const slider = document.getElementById(\"slider\");\n                slider.style.minWidth = humidityMinWidth[currentLanguage] || humidityMinWidth[\"en\"];\n\n                // Set slider width based on humidity\n                if (humidity > 40) {\n                    slider.style.width = `calc(${humidity}% - 60px)`;\n                }\n\n                // Update location\n                let city = parsedData.location.name;\n                let maxLength = 10;\n                let isLocationHidden = localStorage.getItem(\"locationHidden\") === \"true\";\n\n                const locationTile = document.querySelector(\".tiles.location\");\n                const locationIcon = locationTile.querySelector(\".location-icon\");\n                const locationText = document.getElementById(\"location\");\n\n                // Apply initial content\n                function updateLocationText() {\n                    if (isLocationHidden) {\n                        locationText.textContent = translations[currentLanguage]?.location || translations.en.location;\n                    } else {\n                        const limitedText = city.length > maxLength ? city.slice(0, maxLength) + \"...\" : city;\n                        locationText.textContent = limitedText;\n                    }\n                }\n\n                // Initialize content on load\n                updateLocationText();\n\n                // Return the toggle icon based on the state\n                function getToggleIcon() {\n                    return isLocationHidden ? \"./svgs/location-show.svg\" : \"./svgs/location-hide.svg\";\n                }\n\n                // Switch icon on hover\n                let hoverTimeout;\n\n                locationTile.addEventListener(\"mouseenter\", () => {\n                    hoverTimeout = setTimeout(() => {\n                        locationIcon.src = getToggleIcon();\n                    }, 120);\n                });\n\n                locationTile.addEventListener(\"mouseleave\", () => {\n                    clearTimeout(hoverTimeout);\n                    locationIcon.src = \"./svgs/location.svg\";\n                });\n\n                // Toggle on click\n                locationIcon.addEventListener(\"click\", (e) => {\n                    e.stopPropagation();\n                    isLocationHidden = !isLocationHidden;\n                    localStorage.setItem(\"locationHidden\", isLocationHidden);\n                    updateLocationText();\n\n                    // Update icon immediately\n                    if (locationTile.matches(\":hover\")) {\n                        locationIcon.src = getToggleIcon();\n                    }\n                });\n            }\n        } catch (error) {\n            console.error(\"Error fetching weather data:\", error);\n        }\n    }\n}\n\n// Save and load toggle state\nconst hideWeatherCard = document.getElementById(\"hideWeatherCard\");\nconst fahrenheitCheckbox = document.getElementById(\"fahrenheitCheckbox\");\n\nhideWeatherCard.addEventListener(\"change\", function () {\n    saveCheckboxState(\"hideWeatherCardState\", hideWeatherCard);\n});\n\nfahrenheitCheckbox.addEventListener(\"change\", function () {\n    saveCheckboxState(\"fahrenheitCheckboxState\", fahrenheitCheckbox);\n});\n\nloadCheckboxState(\"hideWeatherCardState\", hideWeatherCard);\nloadCheckboxState(\"fahrenheitCheckboxState\", fahrenheitCheckbox);\n\n// Handle min-max temp checkbox state change\nminMaxTempCheckbox.addEventListener(\"change\", () => {\n    const isChecked = minMaxTempCheckbox.checked;\n    localStorage.setItem(\"minMaxTempEnabled\", isChecked);\n    location.reload();\n});\n"
  },
  {
    "path": "scripts/widgets-transparency.js",
    "content": "/*\n * Material You NewTab\n * Copyright (c) 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program.\n * If not, see <https://www.gnu.org/licenses/>.\n */\n\n// Select DOM elements\nconst opacityBar = document.querySelector(\".opacityBar\");\nconst slider = document.getElementById(\"opacitySlider\");\nconst opacityLevel = document.getElementById(\"opacityLevel\");\nconst opacityBarControl = document.getElementById(\"opacityBarControl\");\n\n// Set slider position and update CSS variable for transparency\nfunction setSliderPosition(percentage) {\n    const posPercent = Math.min(100, Math.max(20, percentage));\n    slider.style.width = `${posPercent}%`;\n    opacityLevel.textContent = `${localizeNumbers(Math.round(posPercent).toString(), currentLanguage)}%`;\n    document.documentElement.style.setProperty(\"--transparency\", `${Math.round(posPercent)}%`);\n    localStorage.setItem(\"bgOpacity\", posPercent);\n}\n\n// Handle drag or click interaction on opacity bar\nfunction handleDrag(e) {\n    const clientX = e.type.startsWith(\"touch\") ? e.touches[0].clientX : e.clientX;\n    const rect = opacityBar.getBoundingClientRect();\n    let newPos = isRTL\n        ? rect.right - clientX  // distance from right edge\n        : clientX - rect.left;  // distance from left edge\n    newPos = Math.max(0, Math.min(rect.width, newPos));\n    const percentage = +((newPos / rect.width) * 100).toFixed(2);\n    setSliderPosition(percentage);\n}\n\n// Start listening for drag events\nfunction startDrag() {\n    const onMove = e => handleDrag(e);\n    const onEnd = () => {\n        [\"mousemove\", \"touchmove\"].forEach(evt => document.removeEventListener(evt, onMove));\n        [\"mouseup\", \"touchend\"].forEach(evt => document.removeEventListener(evt, onEnd));\n    };\n\n    [\"mousemove\", \"touchmove\"].forEach(evt => document.addEventListener(evt, onMove));\n    [\"mouseup\", \"touchend\"].forEach(evt => document.addEventListener(evt, onEnd));\n}\n\n// Click or touch on bar: move slider and enable drag\n[\"mousedown\", \"touchstart\"].forEach(evt => {\n    opacityBar.addEventListener(evt, e => {\n        e.preventDefault();\n        handleDrag(e);\n        startDrag();\n    }, { passive: false });\n});\n\n// Initialize with saved opacity value or default to 90%\nconst savedOpacity = localStorage.getItem(\"bgOpacity\") || 90;\nsetSliderPosition(Number(savedOpacity));\n"
  },
  {
    "path": "style.css",
    "content": "/* \n * Material You New Tab\n * Copyright (c) 2024-2026 Prem, 2023-2025 XengShi\n * Licensed under the GNU General Public License v3.0 (GPL-3.0)\n * You should have received a copy of the GNU General Public License along with this program. \n * If not, see <https://www.gnu.org/licenses/>.\n */\n\n@import url(\"https://fonts.googleapis.com/css2?family=Poppins&display=swap\");\n\n@font-face {\n\tfont-family: \"poppins\";\n\tsrc: url(\"./fonts/Poppins-Regular.ttf\") format(\"truetype\");\n}\n\n* {\n\tmargin: 0;\n\tpadding: 0;\n\tbox-sizing: border-box;\n\tfont-family: var(--main-font-family);\n\tuser-select: none;\n}\n\n:root {\n\t/* Default font */\n\t--main-font-family: \"poppins\", \"Poppins\", sans-serif;\n\n\t/* 🔵🔵🔵 */\n\t/* ⚠️ Please don't change the color value or names for Blue (if ? modifying code would be difficult */\n\t--bg-color-blue: #bbd6fd;\n\t--accentLightTint-blue: #e2eeff;\n\t--darkerColor-blue: #3569b2;\n\t--darkColor-blue: #4382ec;\n\t--textColorDark-blue: #1b3041;\n\t--whitishColor-blue: #ffffff;\n\n\t/* 🔴🔴🔴 */\n\t--bg-color-red: #fdbdbd;\n\t--accentLightTint-red: #ffe7e7;\n\t--darkerColor-red: #b23535;\n\t--darkColor-red: #ec4343;\n\t--textColorDark-red: #411b1b;\n\t--whitishColor-red: #ffffff;\n\n\t/* 🟡🟡🟡 */\n\t--bg-color-yellow: #ffed80;\n\t--accentLightTint-yellow: #fff6c3;\n\t--darkerColor-yellow: #ae9502;\n\t--darkColor-yellow: #d1a93d;\n\t--textColorDark-yellow: #2f2707;\n\t--whitishColor-yellow: #ffffff;\n\n\t/* 🟢🟢🟢 */\n\t--bg-color-green: #c7e4c7;\n\t--accentLightTint-green: #e1f1e1;\n\t--darkerColor-green: #458245;\n\t--darkColor-green: #5cba5c;\n\t--textColorDark-green: #1b411b;\n\t--whitishColor-green: #ffffff;\n\n\t/* 🌊 Cyan */\n\t--bg-color-cyan: #9cefef;\n\t--accentLightTint-cyan: #d5ffff;\n\t--darkerColor-cyan: #07787f;\n\t--darkColor-cyan: #09b2b4;\n\t--textColorDark-cyan: #08354b;\n\t--whitishColor-cyan: #ffffff;\n\n\t/* 🩷💗🩷 */\n\t--bg-color-pink: #f9c8d6;\n\t--accentLightTint-pink: #ffebf2;\n\t--darkerColor-pink: #b24b64;\n\t--darkColor-pink: #ec5e78;\n\t--textColorDark-pink: #411b28;\n\t--whitishColor-pink: #ffffff;\n\n\t/* 🟠🟠🟠 */\n\t--bg-color-orange: #ffd8b2;\n\t--accentLightTint-orange: #ffedd5;\n\t--darkerColor-orange: #b26d3e;\n\t--darkColor-orange: #ec844d;\n\t--textColorDark-orange: #412b1e;\n\t--whitishColor-orange: #ffffff;\n\n\t/* 🟣🟣🟣 */\n\t--bg-color-purple: #dac2e8;\n\t--accentLightTint-purple: #e9e2f3;\n\t--darkerColor-purple: #724b8f;\n\t--darkColor-purple: #9563b5;\n\t--textColorDark-purple: #2d1b3e;\n\t--whitishColor-purple: #ffffff;\n\n\t/* ⚪ Silver */\n\t--bg-color-silver: #c6c6c6;\n\t--accentLightTint-silver: #e5e5e5;\n\t--darkerColor-silver: #6f6f6f;\n\t--darkColor-silver: #9e9e9e;\n\t--textColorDark-silver: #333333;\n\t--whitishColor-silver: #ffffff;\n\n\t/* 🟤🟤🟤 */\n\t--bg-color-brown: #dfc28d;\n\t--accentLightTint-brown: #eae3c9;\n\t--darkerColor-brown: #4e3930;\n\t--darkColor-brown: #705347;\n\t--textColorDark-brown: #16100d;\n\t--whitishColor-brown: #ffffff;\n\n\t/* 🫶🏻 Peach */\n\t--bg-color-peach: #ffccbf;\n\t--accentLightTint-peach: #fdf1ef;\n\t--darkerColor-peach: #f67455;\n\t--darkColor-peach: #9c29ba;\n\t--textColorDark-peach: #441730;\n\t--whitishColor-peach: #ffffff;\n\n\t/* ⚫⚫⚫ */\n\t--bg-color-dark: #171615;\n\t--accentLightTint-dark: #3c3c3c;\n\t--darkerColor-dark: #eeeeee;\n\t--darkColor-dark: #212121;\n\t--textColorDark-dark: #d6d6d6;\n\t--whitishColor-dark: #cccccc;\n\n\t/* ----------------- */\n\n\t/* Global variables */\n\t--gap: 30px;\n\t--round: 30px;\n\t--transparency: 90%;\n\n\t/* Shortcut bar */\n\t--max-shortcut-bar-width: 60vw;\n\t--shortcut-bar-gap-and-padding: 10px;\n\t--shortcut-size: 50px;\n\t--always-show-dock-background: 0;\n\n\t/* standard: Smooth start and end */\n\t--md-motion-ease: cubic-bezier(0.4, 0, 0.2, 1);\n\t/* entering: Fast start, slow end (Snappy opening, glides to stop) */\n\t--md-motion-decelerate: cubic-bezier(0, 0, 0.2, 1);\n\t/* exiting: Slow start, fast end (Pushes out quickly at the end) */\n\t--md-motion-accelerate: cubic-bezier(0.4, 0, 1, 1);\n}\n\n/* Theme */\n/* ⚫🟣🔵🔴🟡🟢🟠⚪ */\n\n.accentColor {\n\tfill: var(--darkColor-blue);\n}\n\n.bgLightTint {\n\tfill: var(--accentLightTint-blue);\n\tbackground-color: var(--accentLightTint-blue);\n}\n\n.lessDark {\n\tbackground-color: var(--bg-color-blue);\n\tfill: var(--bg-color-blue);\n}\n\nbody[data-bg=\"wallpaper\"] .menuBar .accentColor,\nbody[data-bg=\"wallpaper\"] #shortcuts-section .accentColor {\n\tfill: var(--darkColor-blue);\n}\n\nbody[data-bg=\"wallpaper\"] .bgLightTint:not(.notTargeted) {\n\tfill: color-mix(\n\t\tin srgb,\n\t\tvar(--accentLightTint-blue) var(--transparency),\n\t\ttransparent\n\t);\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--accentLightTint-blue) var(--transparency),\n\t\ttransparent\n\t);\n}\n\n.shortcutLogoContainer .bgLightTint {\n\tfill: var(--accentLightTint-blue) !important;\n}\n\nbody[data-bg=\"wallpaper\"] .lessDark.targeted {\n\tfill: color-mix(\n\t\tin srgb,\n\t\tvar(--bg-color-blue) calc(var(--transparency) * 1.5),\n\t\ttransparent\n\t);\n}\n\n/* ⚫🟣🟡🔵🔴🟠⚪🟢 */\n\nhtml {\n\theight: 100%;\n\twidth: 100%;\n\tmargin: 0;\n\tscrollbar-width: none; /* For Firefox */\n}\n\n.html::-webkit-scrollbar {\n\tdisplay: none;\n}\n\nbody {\n\tbackground-color: var(--bg-color-blue);\n\tcolor: var(--textColorDark-blue);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 100%;\n\tmin-height: 100vh;\n\toverflow: auto;\n\tbackground-image: var(--bg-image, none);\n\tbackground-size: cover;\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n\tbackground-attachment: fixed;\n\theight: 100%; /* Ensure the image fits the viewport height */\n\tmargin: 0;\n}\n\n/* Apply dark mode when: Dark Mode is selected manually, OR System Theme is selected */\nhtml:has(body[data-bg=\"color\"] .menuBar .themeSegment[data-active=\"dark\"]):not(\n\t\t:has(#darkTheme:checked)\n\t),\nhtml:has(\n\t\tbody[data-bg=\"color\"][sysTheme=\"systemDark\"]\n\t\t\t.menuBar\n\t\t\t.themeSegment[data-active=\"system\"]\n\t):not(:has(#darkTheme:checked)) {\n\tfilter: invert(1) hue-rotate(180deg);\n\t-webkit-filter: invert(1) hue-rotate(180deg);\n\n\t& #darkTheme,\n\t& .favicon,\n\t& #wIcon,\n\t&:not(:has(#adaptiveIconToggle:checked)) .shortcutLogoContainer img[data-icon-type=\"default\"] {\n\t\tfilter: invert(1) hue-rotate(180deg);\n\t\t-webkit-filter: invert(1) hue-rotate(180deg);\n\t}\n\n\t& .menuBar,\n\t& #bookmarksContainer {\n\t\tbackground-color: #0000000f;\n\t}\n\n\t& #prompt-modal-blur,\n\t& .ai-modal-overlay {\n\t\tbackground-color: #ffffff5f;\n\t}\n\n\t--whitishColor-blue: #f2f2f2;\n}\n\nbody[data-bg=\"wallpaper\"]:has(.menuBar .themeSegment[data-active=\"dark\"]):not(\n\t\t:has(#darkTheme:checked)\n\t)\n\t> *:not(.menuBar, #bookmarksContainer),\nbody[data-bg=\"wallpaper\"]:has(.menuBar .themeSegment[data-active=\"dark\"]):not(\n\t\t:has(#darkTheme:checked)\n\t)\n\t:is(.menuCont, .bookmark-sidebar),\nbody[data-bg=\"wallpaper\"][sysTheme=\"systemDark\"]:has(\n\t\t.menuBar .themeSegment[data-active=\"system\"]\n\t):not(:has(#darkTheme:checked))\n\t> *:not(.menuBar, #bookmarksContainer),\nbody[data-bg=\"wallpaper\"][sysTheme=\"systemDark\"]:has(\n\t\t.menuBar .themeSegment[data-active=\"system\"]\n\t):not(:has(#darkTheme:checked))\n\t:is(.menuCont, .bookmark-sidebar) {\n\tfilter: invert(1) hue-rotate(180deg);\n\t-webkit-filter: invert(1) hue-rotate(180deg);\n\n\t& #darkTheme,\n\t& .favicon,\n\t& #wIcon,\n\t&:not(:has(#adaptiveIconToggle:checked)) .shortcutLogoContainer img[data-icon-type=\"default\"] {\n\t\tfilter: invert(1) hue-rotate(180deg);\n\t\t-webkit-filter: invert(1) hue-rotate(180deg);\n\t}\n\n\t--whitishColor-blue: #f2f2f2;\n}\n\n/* -------------------------------------- */\n\n/* Search suggestions box */\n.resultBox {\n\tmax-height: 222px;\n\toverflow-y: auto;\n\tposition: absolute;\n\tinset-inline-start: 0;\n\twidth: 100%;\n\tborder-radius: 25px;\n\tmargin-top: 10px;\n\tpadding: 5px 10px;\n\tscrollbar-width: none;\n\t/* Initially hidden */\n\topacity: 0;\n\tz-index: -100;\n\ttransform: translateY(-70px);\n\ttransition:\n\t\topacity 0.5s ease,\n\t\ttransform 0.5s ease,\n\t\tz-index 0.5s ease;\n\tpointer-events: none;\n\tbackdrop-filter: blur(4px);\n}\n\n.searchbar:has(:placeholder-shown) ~ .resultBox.show {\n\topacity: 0;\n\tz-index: -1000;\n\ttransform: translateY(-70px);\n\tvisibility: hidden;\n\tpointer-events: none;\n}\n\n.centerDiv:has(.resultBox.show) ~ #shortcuts-section,\n.centerDiv:has(.dropdown-content[style=\"display: block;\"])\n\t~ #shortcuts-section {\n\tz-index: -1;\n}\n\n@media screen and (max-height: 700px) {\n\t.resultBox {\n\t\tmax-height: 180px;\n\t}\n}\n\n.resultBox::-webkit-scrollbar {\n\tdisplay: none;\n\t/* For Chrome, Safari, and Edge */\n}\n\n/* Visible state: when you want the result box to appear */\n.resultBox.show:has(:first-child) {\n\topacity: 1;\n\tvisibility: visible;\n\ttransform: translateY(0);\n\tz-index: 100;\n\tpointer-events: all;\n}\n\n.resultItem {\n\tpadding: 8px;\n\tcursor: pointer;\n\tfont-size: 1.1rem;\n\tcolor: var(--textColorDark-blue);\n}\n\n.resultItem.active,\n.resultItem:hover {\n\tbackground-color: var(--darkColor-blue);\n\tborder-radius: 15px;\n\tcolor: var(--whitishColor-blue);\n}\n\n/* ----------------- Google App Menu CSS Setup ----------------- */\n/* Dot Icon Container Styling */\n.googleAppsCont {\n\tposition: fixed;\n\tdisplay: inline-block;\n\tmargin: 10px;\n\ttop: var(--gap);\n\tinset-inline-end: var(--gap);\n\tfont-size: 25px;\n\t/* Set the size of the dots */\n\tbackground: transparent;\n\tborder: none;\n\tcursor: pointer;\n\tz-index: 2;\n\t/* Set z-index */\n}\n\n/* Styling for the SVG icon */\n.dot-icon {\n\tfill: var(--darkColor-blue);\n\t/* Icon color */\n\tbackground-color: var(--accentLightTint-blue);\n\tborder-radius: 25%;\n\tpadding: 1px;\n\tcursor: pointer;\n}\n\nbody[data-bg=\"wallpaper\"] .dot-icon {\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--accentLightTint-blue) calc(var(--transparency) * 2),\n\t\ttransparent\n\t);\n\tbackdrop-filter: blur(4px);\n}\n\n.theme-transition .dot-icon {\n\ttransition: fill 0.3s ease;\n}\n\n/* Click effect for the icon */\n.dot-icon:active {\n\tfill: var(--darkerColor-blue);\n}\n\n/* Tooltip Text Styling */\n.tooltip-text {\n\tvisibility: hidden;\n\tbackground-color: var(--darkColor-blue);\n\tcolor: rgba(255, 255, 255, 0.9);\n\ttext-align: center;\n\tpadding: 5px;\n\tborder-radius: 8px;\n\tposition: absolute;\n\ttop: 120%;\n\t/* Position below the icon */\n\tinset-inline-start: 50%;\n\ttransform: translateX(-50%);\n\tfont-size: 0.75rem;\n\topacity: 0;\n\ttransition: opacity 0.3s ease;\n\tmax-width: 115px;\n\tmin-width: 50px;\n\twidth: max-content;\n\twhite-space: normal;\n\tz-index: 3;\n}\n\nbody[data-bg=\"wallpaper\"] .tooltip-text {\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--darkColor-blue) calc(var(--transparency) * 2),\n\t\ttransparent\n\t);\n}\n\n/* Show tooltip on hover */\n.googleAppsCont:hover .tooltip-text {\n\tvisibility: visible;\n\topacity: 1;\n}\n\n/* Ensure tooltip remains hidden when menu is visible */\n.menu-open .tooltip-text {\n\tvisibility: hidden !important;\n\topacity: 0 !important;\n}\n\n/* Separator Styling */\n.separator {\n\twidth: 100%;\n\theight: 1px;\n\tbackground-color: var(--darkColor-blue);\n\t/* Adjust color as needed */\n\tmargin: 10px 0;\n\t/* Adjust spacing as needed */\n}\n\n/* Add Separator in Icon Container */\n.icon-container .separator {\n\tgrid-column: span 3;\n\t/* Ensure separator spans across all columns */\n}\n\n/* Icon Container Styling (Placed Below Dot Icon) */\n.icon-container {\n\tdisplay: grid;\n\tgap: 10px;\n\tpadding: 20px 10px;\n\tbackground-color: var(--accentLightTint-blue);\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--accentLightTint-blue) 80%,\n\t\ttransparent\n\t);\n\tbackdrop-filter: blur(10px);\n\tborder-radius: 30px;\n\tbox-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\n\tborder: 8px solid var(--bg-color-blue);\n\tgrid-template-columns: repeat(3, 1fr);\n\t/* 3 icons per row */\n\tjustify-items: center;\n\t/* Center icons within each grid cell */\n\tposition: fixed;\n\ttop: 85px;\n\tinset-inline-end: 15px;\n\tmax-height: calc(40px * 3 + 10px * 2 + 290px);\n\twidth: fit-content;\n\t/* Limit to 12 icons (3 rows * icon size + gaps) */\n\toverflow-x: hidden;\n\toverflow-y: scroll;\n\tscroll-behavior: smooth;\n\tbox-sizing: border-box;\n\tz-index: 3; /* This should be higher that z-index of [.googleAppsCont] */\n\ttransform-origin: top right;\n}\n\n/* Individual Icon Item Styling */\n.icon-item {\n\tgap: 0.5rem; /* Item Gap*/\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\ttext-align: center;\n\tpadding: 10px;\n\tborder-radius: 15px;\n\ttransition:\n\t\ttransform 0.3s ease,\n\t\tbackground-color 0.3s ease;\n\ttext-decoration: none;\n\tcursor: pointer;\n\tposition: relative;\n\tmin-width: 100px;\n}\n\n/* Icon Styling */\n.menuicon {\n\tcolor: var(--darkColor-blue);\n\twidth: 40px;\n\theight: 40px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n/* Label Styling */\n.label {\n\tfont-size: 14px;\n\tcolor: var(--textColorDark-blue);\n}\n\n/* Short Label (Default) */\n.label.short {\n\tdisplay: block;\n}\n\n/* Full Label (Hidden by Default) */\n.label.full {\n\tdisplay: none;\n\twhite-space: pre-line;\n\t/* Ensure text retains line breaks */\n\ttext-align: center;\n\t/* Center align text */\n\tposition: absolute;\n\tfont-size: 0.8rem;\n\tbottom: 0;\n}\n\n/* Hover Effect for Icon Item */\n.icon-item:hover {\n\tbackground-color: var(--bg-color-blue);\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--bg-color-blue) var(--transparency),\n\t\ttransparent\n\t);\n\ttransform: translateY(-4px);\n}\n\n/* Show Full Label on Hover for Multi-word Labels */\n.icon-item:hover .label.full {\n\tdisplay: block;\n}\n\n.icon-item:hover .label.short {\n\tdisplay: block;\n\t/* Ensure single-word labels remain visible */\n}\n\n.icon-item:hover .label.short.one {\n\tdisplay: none;\n\t/* Ensure single-word labels remain visible */\n}\n\n/* Customize scrollbar to appear on the border */\n/* For Chrome, Edge, Safari */\n.icon-container::-webkit-scrollbar {\n\twidth: 5px;\n}\n\n.icon-container::-webkit-scrollbar-track {\n\tbackground-color: transparent;\n\tmargin: 11px 0;\n}\n\n.icon-container::-webkit-scrollbar-thumb {\n\tbackground-color: var(--darkColor-blue);\n\tborder-radius: 3px;\n}\n\n.icon-container::-webkit-scrollbar-thumb:hover {\n\tbackground-color: var(--darkerColor-blue);\n\tborder-radius: 3px;\n}\n\n/* For Firefox */\n@-moz-document url-prefix() {\n\t.icon-container {\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--darkColor-blue) transparent;\n\t}\n}\n/* ----------------- End of Google App Menu ----------------- */\n\n/* ----------------- Start of Bookmark System ----------------- */\n#bookmarksContainer {\n\tbackground-color: #0000004f;\n\tbackdrop-filter: blur(15px) saturate(160%);\n\tposition: fixed;\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tinset-inline-end: 0;\n\topacity: 0;\n\ttransition: all 0.5s;\n\tpointer-events: none;\n\tz-index: 4;\n}\n\n#bookmarksContainer:has(.bookmark-sidebar.open) {\n\topacity: 1;\n\tpointer-events: auto;\n}\n\n.bookmark-button {\n\tposition: fixed;\n\tdisplay: inline-block;\n\tmargin: 10px;\n\ttop: var(--gap);\n\tinset-inline-end: var(--gap);\n\tfont-size: 25px;\n\tbackground-color: var(--accentLightTint-blue);\n\tborder: none;\n\tcursor: pointer;\n\tz-index: 2;\n\tpadding: 6px;\n\tborder-radius: 25%;\n\ttransition: right 0.3s ease;\n}\n\nbody[data-bg=\"wallpaper\"] .bookmark-button {\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--accentLightTint-blue) calc(var(--transparency) * 2),\n\t\ttransparent\n\t);\n}\n\n.bookmark-button:has(~ .googleAppsCont[style=\"display: flex;\"]) {\n\tinset-inline-end: calc(2 * var(--gap) + 36px);\n}\n\n/* Show tooltip on hover */\n.bookmark-button:hover .tooltip-text {\n\tvisibility: visible;\n\topacity: 1;\n}\n\n.bookmark-button svg {\n\tfill: var(--darkColor-blue);\n}\n\n.bookmark-sidebar {\n\twidth: min(420px, 100vw);\n\tposition: fixed;\n\tinset-inline-end: max(-420px, -100vw);\n\ttop: 0;\n\theight: 100%;\n\tbackground-color: var(--accentLightTint-blue);\n\tcolor: white;\n\ttransition: inset-inline-end 0.3s var(--md-motion-ease);\n\tz-index: 5;\n\tdisplay: block;\n\tborder-end-start-radius: var(--round);\n\tbox-sizing: border-box;\n}\n\n.bookmark-sidebar .topOutRoundCorner {\n\tposition: absolute;\n\twidth: 30px;\n\theight: 30px;\n\tinset-inline-start: -30px;\n}\n\n.bookmark-sidebar-header {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 30px 20px 50px 20px;\n\tbackground-color: var(--bg-color-blue);\n}\n\n.bookmark-sidebar.open {\n\tinset-inline-end: 0;\n}\n\nbody #bookmarkButton.bookmark-button.rotate {\n\tcolor: var(--accentLightTint-blue);\n\tinset-inline-end: 450px;\n\tz-index: 5;\n}\n\n.bookmark-sidebar-header h2 {\n\tcolor: var(--textColorDark-blue);\n\ttext-align: center;\n\tfont-size: 1.5rem;\n\tflex-grow: 1;\n}\n\n.bookmark-search-container {\n\tposition: relative;\n\twidth: 100%;\n\tpadding: 10px;\n\tpadding-top: 25px;\n\tborder-radius: var(--round);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tbackground-color: var(--accentLightTint-blue);\n\tmargin-top: -30px;\n}\n\n.bookmark-search-container::after {\n\tcontent: \"\";\n\tbackground: url(\"./svgs/bookmarksSearch.svg\") no-repeat center / contain;\n\twidth: 18px;\n\tfilter: invert(1);\n\theight: 18px;\n\topacity: 0.5;\n\tinset-inline-start: 9%;\n\ttop: calc(50% + 8px);\n\ttransform: translateY(-50%);\n\tposition: absolute;\n}\n\n#bookmarkSearch {\n\twidth: 95%;\n\tpadding-block: 10px;\n\tpadding-inline-start: 43px;\n\tpadding-inline-end: 36px;\n\tborder-radius: var(--round);\n\tfont-size: 16px;\n\tbackground-color: var(--whitishColor-blue);\n\tcolor: var(--textColorDark-blue);\n\toutline: none !important;\n\tborder: none !important;\n}\n\n#bookmarkSearch::placeholder {\n\tcolor: var(--textColorDark-blue);\n\topacity: 0.7;\n}\n\n#bookmarkSidebar input:focus {\n\tbox-shadow: 0 0 2px var(--darkColor-blue);\n}\n\n#clearSearchButton {\n\tposition: absolute;\n\tinset-inline-end: 9%;\n\ttop: calc(50% + 7px);\n\ttransform: translateY(-50%);\n\tbackground: none;\n\tborder: none;\n\tcolor: var(--textColorDark-blue);\n\tcursor: pointer;\n\tdisplay: none; /* Hidden by default */\n}\n\n#bookmarkList {\n\tlist-style-type: none;\n\tpadding: 0;\n\tmargin: 0;\n\ttext-align: start;\n\theight: calc(100% - 242px);\n\toverflow-y: auto; /* Add vertical scrollbar */\n\tscroll-behavior: smooth;\n\toverflow-x: hidden;\n}\n\n#bookmarkList::-webkit-scrollbar {\n\twidth: 6px;\n}\n\n#bookmarkList::-webkit-scrollbar-track {\n\tbackground-color: transparent;\n}\n\n#bookmarkList::-webkit-scrollbar-thumb {\n\tbackground-color: var(--darkColor-blue);\n\tborder-radius: 3px;\n}\n\n#bookmarkList::-webkit-scrollbar-thumb:hover {\n\tbackground-color: var(--darkerColor-blue);\n\tborder-radius: 3px;\n}\n\n/* For Firefox */\n@-moz-document url-prefix() {\n\t#bookmarkList {\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--darkColor-blue) transparent;\n\t}\n}\n\n.bookmark-controls-container {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\tgap: 40px; /* Space between Sort by and View as sections */\n\tpadding: 6px 32px;\n}\n\n.bookmark-control-group {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n}\n\n.bookmark-control-group h3 {\n\tfont-size: 0.96rem;\n\tcolor: var(--darkerColor-blue);\n\tmargin: 0;\n\twhite-space: nowrap;\n\ttext-align: center;\n}\n\n.button-group {\n\tdisplay: inline-flex;\n\tborder: 2px solid var(--bg-color-blue);\n\tborder-radius: 100px;\n\tbackground-color: rgba(255, 255, 255, 0.8);\n\tpadding: 2px;\n}\n\n.bookmark-sort-button,\n.bookmark-view-as-button {\n\tbackground: transparent;\n\tborder: none;\n\tborder-radius: 100px;\n\tfont-size: 0.75rem;\n\tcursor: pointer;\n\twidth: 64px;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tpadding: 4px 8px;\n\tcolor: var(--darkColor-blue);\n\ttransition:\n\t\tbackground-color 0.2s,\n\t\tcolor 0.2s;\n}\n\n#sortAlphabetical {\n\twidth: 45px;\n}\n\n#sortTimeAdded {\n\twidth: 90px;\n}\n\n.bookmark-sort-button:hover,\n.bookmark-view-as-button:hover {\n\twhite-space: normal;\n}\n\n/* Active states */\n.bookmark-sort-button.active,\n#bookmarkGridCheckbox:checked ~ #bookmarkViewGrid,\n#bookmarkGridCheckbox:not(:checked) ~ #bookmarkViewList {\n\tbackground-color: var(--darkColor-blue);\n\tcolor: white;\n}\n\n#bookmarkList ul {\n\tpadding: 7px 0;\n\tpadding-inline-start: 10px;\n\tlist-style-type: none;\n\tfont-weight: normal;\n}\n\n#bookmarkList li {\n\tpadding: 2px;\n\tborder: none;\n\tposition: relative;\n}\n\n#bookmarkList li:not(.folder) {\n\tdisplay: flex;\n\twidth: calc(100% - 10px);\n}\n\n#bookmarkList:is(.grid-view) ul:not(.hidden),\n#bookmarkList:is(.grid-view) .folder.open > ul {\n\tdisplay: grid;\n\tgrid-template-columns: 25% 25% 25% 25%;\n\n\t.folder {\n\t\tgrid-column: span 4;\n\t}\n}\n\n#bookmarkList:is(.grid-view) li:not(.folder) {\n\twidth: 100%;\n\tpadding-bottom: 6px;\n}\n\n#bookmarkList:is(.grid-view) li a {\n\tpadding: 2px;\n\tflex-direction: column;\n}\n\n#bookmarkList:is(.grid-view) li a .favicon {\n\tmargin: 20px auto 24px auto;\n}\n\n#bookmarkList:is(.grid-view) li a:has(.favicon)::after,\n#bookmarkList:is(.grid-view) li a:has(.favicon)::before {\n\tcontent: \"\";\n\tbackground: var(--bg-color-blue);\n\tposition: absolute;\n\twidth: 48px;\n\theight: 48px;\n\tz-index: -1;\n\tleft: 50%;\n\ttransform: translateX(-50%);\n\topacity: 0.35;\n\ttop: 12px;\n\tbox-sizing: border-box;\n\tborder-radius: 32px;\n}\n\n#bookmarkList:is(.grid-view) li a:has(.favicon)::before {\n\tbackground: var(--bg-color-blue);\n\twidth: 36px;\n\theight: 36px;\n\topacity: 1;\n\ttop: 18px;\n}\n\n#bookmarkList li a {\n\tcolor: var(--textColorDark-blue);\n\ttext-decoration: none;\n\t/* word-break: break-word; */\n\tpadding: 8px;\n\tpadding-inline-end: 24px;\n\tborder-radius: 8px;\n\twidth: 100%;\n\tdisplay: flex;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n\n#bookmarkList li a span {\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n\n#bookmarkList:is(.grid-view) li a span {\n\ttext-align: center;\n}\n\n.favicon {\n\twidth: 18px;\n\theight: 18px;\n\tmargin-inline-end: 5px;\n\tvertical-align: middle;\n\tfilter: drop-shadow(0 0 2px rgba(0, 0, 0, 0.3));\n}\n\n#bookmarkList:is(.grid-view) .favicon {\n\twidth: 24px;\n\theight: 24px;\n}\n\n.folder {\n\tcursor: pointer;\n\tfont-weight: bolder;\n\tcolor: var(--textColorDark-blue);\n\tposition: relative;\n}\n\n.hidden {\n\tdisplay: none;\n}\n\n.ui {\n\tdisplay: block;\n\tpointer-events: none; /* Make ui class button unclickable */\n}\n\n.folder svg {\n\tmargin-inline-end: 5px; /* Adjust this value for more or less space */\n\tvertical-align: middle; /* Aligns the icon with the text */\n}\n\n.folder.open > ul {\n\tdisplay: block;\n}\n\n.folder::before {\n\tcontent: \"\";\n\tdisplay: inline-block;\n\twidth: 0;\n\theight: 0;\n\tmargin-right: 8px;\n\tvertical-align: middle;\n\tborder-left: 5px solid transparent;\n\tborder-right: 5px solid transparent;\n\tborder-top: 5px solid currentColor;\n\ttransition: transform 0.2s ease;\n}\n\n.folder:not(.open)::before {\n\ttransform: rotate(-90deg);\n}\n\n#bookmarkList:is(.grid-view) .bookmark-delete-button {\n\ttop: 12px;\n\tinset-inline-end: 6px;\n}\n\n.bookmark-delete-button {\n\tbackground: none;\n\tborder: none;\n\tcolor: var(--darkColor-blue);\n\tcursor: pointer;\n\tposition: absolute;\n\tinset-inline-end: 10px; /* Position it to the right */\n\ttop: 50%;\n\ttransform: translateY(-50%);\n\topacity: 0;\n\tpointer-events: none;\n}\n\n:hover > .bookmark-delete-button {\n\topacity: 1;\n\tpointer-events: auto;\n}\n\n/* Modal Styling */\n#editBookmarkModal {\n\tdisplay: none;\n\tposition: fixed;\n\tz-index: 5;\n\tleft: 50%;\n\ttop: 50%;\n\ttransform: translate(-50%, -50%);\n\twidth: 400px;\n\tbackground: var(--bg-color-blue);\n\tcolor: var(--textColorDark-blue);\n\tborder-radius: var(--round);\n\tbox-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);\n\tpadding: 20px;\n}\n\n#editBookmarkModal .modal-content {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 20px;\n}\n\n#editBookmarkModal h2 {\n\ttext-align: center;\n\tfont-size: 1.5rem;\n\tcolor: var(--textColorDark-blue);\n\tmargin-top: 5px;\n}\n\n#editBookmarkFavicon {\n\tdisplay: block;\n\tmargin: 0 auto 5px;\n\twidth: 32px;\n\theight: 32px;\n\tborder-radius: 2px;\n}\n\n.floating-label-field {\n\tposition: relative;\n\tmargin-top: 12px;\n}\n\n.floating-label-field input {\n\twidth: 100%;\n\tpadding: 12px 16px;\n\tfont-size: 0.9rem;\n\tborder: 1px solid var(--bg-color-blue);\n\tborder-radius: 14px;\n\toutline: none;\n\tbackground-color: var(--accentLightTint-blue);\n\ttransition: border-color 0.2s;\n}\n\n.floating-label-field input:focus {\n\tborder-color: var(--darkColor-blue);\n}\n\n.floating-label-field input::placeholder {\n\tcolor: transparent;\n}\n\n.floating-label-field label {\n\tposition: absolute;\n\tinset-inline-start: 14px;\n\ttop: 13.4px;\n\tpadding: 0 5px;\n\tcolor: color-mix(in srgb, var(--darkColor-blue) 75%, white);\n\tfont-size: 0.9rem;\n\tborder-radius: 5px;\n\ttransition: 0.2s ease all;\n\tpointer-events: none;\n}\n\n/* Float label when focused or has content */\n.floating-label-field input:focus + label,\n.floating-label-field input:not(:placeholder-shown) + label {\n\ttop: -19px;\n\tinset-inline-start: 12px;\n\tfont-size: 0.8rem;\n\tcolor: var(--darkColor-blue);\n\tbackground-color: var(--bg-color-blue);\n}\n\n#editBookmarkModal .modal-buttons {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\tmargin-top: 4px;\n\tgap: 20px;\n}\n\n#editBookmarkModal button {\n\t/* min-width: 120px; */\n\tflex: 1;\n\tpadding: 10px 16px;\n\tfont-size: 0.96rem;\n\tborder: none;\n\tcursor: pointer;\n\ttransition: 0.2s;\n\tborder-radius: var(--round);\n\tbackground: var(--darkColor-blue);\n\tcolor: white;\n}\n\n#saveBookmarkChanges:disabled {\n\topacity: 0.5;\n\tpointer-events: none;\n}\n\n#editBookmarkModal button:hover {\n\tbackground: var(--darkerColor-blue);\n}\n/* ----------------- End of Bookmark System ----------------- */\n\n/* ------------------ To Do List Section -------------------- */\n.todoListCont {\n\tposition: fixed;\n\tdisplay: inline-block;\n\tmargin: 10px;\n\ttop: var(--gap);\n\tinset-inline-start: var(--gap);\n\tfont-size: 25px;\n\tbackground: transparent;\n\tborder: none;\n\tcursor: pointer;\n\tz-index: 2;\n}\n\n/* Show tooltip on hover */\n.todoListCont:hover .tooltip-text {\n\tvisibility: visible;\n\topacity: 1;\n}\n\n.todo-container {\n\tdisplay: grid;\n\tgap: 10px;\n\tpadding: 12px 6px 6px 6px;\n\tbackground-color: var(--accentLightTint-blue);\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--accentLightTint-blue) 80%,\n\t\ttransparent\n\t);\n\tbackdrop-filter: blur(2px);\n\tborder-radius: 30px;\n\tbox-shadow: 0 4px 8px rgba(0, 0, 0, 0.25);\n\tborder: 8px solid var(--bg-color-blue);\n\tgrid-template-columns: 330px;\n\tjustify-items: center;\n\tposition: fixed;\n\ttop: 85px;\n\tleft: 15px;\n\tmax-height: calc(40px * 3 + 10px * 2 + 290px);\n\toverflow-y: auto;\n\tscroll-behavior: smooth;\n\tbox-sizing: border-box;\n\tz-index: 3;\n\ttransform-origin: top left;\n}\n\n.todo-container::-webkit-scrollbar {\n\twidth: 5px;\n}\n\n.todo-container::-webkit-scrollbar-track {\n\tbackground-color: transparent;\n\tmargin-top: 108px;\n\tmargin-bottom: 11px;\n}\n\n.todo-container::-webkit-scrollbar-thumb {\n\tbackground-color: var(--darkColor-blue);\n\tborder-radius: 3px;\n}\n\n.todo-container::-webkit-scrollbar-thumb:hover {\n\tbackground-color: var(--darkerColor-blue);\n\tborder-radius: 3px;\n}\n\n/* For Firefox */\n@-moz-document url-prefix() {\n\t.todo-container {\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--darkColor-blue) transparent;\n\t}\n}\n\n@keyframes panelScaleIn {\n\tfrom {\n\t\ttransform: scale(0.8);\n\t\topacity: 0;\n\t}\n\tto {\n\t\ttransform: scale(1);\n\t\topacity: 1;\n\t}\n}\n\n/* @keyframes panelScaleOut {\n\tfrom {\n\t\ttransform: scale(1);\n\t}\n\tto {\n\t\ttransform: scale(0);\n\t}\n} */\n\n#todoListHeading {\n\tfont-size: 1.4rem;\n\ttext-align: center;\n}\n\n.todo-container .addTaskCont {\n\tbackground: white;\n\tbackground-color: color-mix(in srgb, var(--accentLightTint-blue) 10%, white);\n\tpadding: 0;\n\tmargin-bottom: 4px;\n\tborder-radius: 20px;\n\theight: 42px;\n\twidth: 100%;\n\tdisplay: flex;\n\talign-items: center;\n\toutline: none;\n}\n\n.addTaskCont:focus-within {\n\toutline: 1px solid var(--darkColor-blue);\n}\n\n.black-theme .addTaskCont {\n\tbackground-color: #5f5f5f;\n}\n\n.black-theme .addTaskCont:focus-within {\n\toutline: 1px solid var(--accentLightTint-dark);\n}\n\n#todoAdd {\n\theight: 100%;\n\tborder-radius: 20px;\n\tpadding: 0 12px;\n\tborder: none;\n\tfont-size: 1.8rem;\n\tbackground-color: var(--darkColor-blue);\n\tcolor: white;\n\tscale: 0.78;\n}\n\n#todoAdd:hover {\n\tbackground-color: var(--darkerColor-blue);\n\tcolor: var(--whitishColor-blue);\n\tcursor: pointer;\n}\n\n#todoAdd:active {\n\ttransform: scale(0.9);\n}\n\n.theme-transition #todoAdd {\n\ttransition: all 0.3s;\n}\n\n#todoInput {\n\twidth: 100%;\n\theight: 80%;\n\tmargin-inline-start: 15px;\n\toutline: none;\n\tborder: none;\n\tbackground-color: #00000000;\n\tpadding: 0 2px;\n\tfont-size: 1rem;\n}\n\n.black-theme #todoInput {\n\tcolor: var(--whitishColor-blue);\n}\n\n/* Default placeholder color */\n#todoInput::placeholder {\n\tcolor: #757575;\n}\n\n.todolist {\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n\tjustify-content: center;\n\talign-items: flex-start;\n}\n\n.todolistitem {\n\twidth: 100%;\n\tdisplay: flex;\n\tbackground-color: var(--darkColor-blue);\n\tbackground-color: color-mix(in srgb, var(--darkColor-blue) 95%, transparent);\n\tcolor: var(--whitishColor-blue);\n\tborder-radius: 8px;\n\tlist-style-type: none;\n\tfont-size: 1rem;\n\tpadding-block: 12px;\n\tpadding-inline-start: 36px;\n\tpadding-inline-end: 88px;\n\tuser-select: none;\n\tcursor: pointer;\n\tposition: relative;\n\tword-break: break-word;\n}\n\n.todolistitem::before {\n\tcontent: \"\";\n\tposition: absolute;\n\theight: 18px;\n\twidth: 18px;\n\tborder-radius: 50%;\n\tbackground: url(\"./svgs/todo-check-stroke.svg\") no-repeat center center /\n\t\tcontain;\n\ttop: 50%;\n\ttransform: translateY(-50%);\n\tinset-inline-start: 8px;\n\ttransition: all 0.3s ease;\n\tuser-select: none;\n}\n\n.todolistitem.checked::before {\n\tbackground-image: url(\"./svgs/todo-check-fill.svg\");\n}\n\n.todolistitem.checked {\n\tcolor: #ccc;\n\ttext-decoration: line-through;\n}\n\n.todolistitem.edit {\n\tcolor: white;\n\ttext-decoration: none !important;\n}\n\n.todolistitem.edit .todoeditbtn {\n\tbackground-image: url(\"./svgs/todo-edit-done.svg\");\n}\n\n.todolist .edit-input {\n\tcolor: inherit;\n\toutline: none;\n\tborder: 1px solid #ccc;\n\theight: 24px;\n\twidth: inherit;\n\tfont-size: inherit;\n\tborder-radius: 6px;\n\tbackground-color: transparent;\n\tpadding: 0 3px;\n\tmargin-inline-start: -4px;\n}\n\n.todolistitem .todoremovebtn,\n.todolistitem .todopinbtn,\n.todoeditbtn {\n\tposition: absolute;\n\tinset-inline-end: 6px;\n\ttop: 50%;\n\ttransform: translateY(-50%);\n\twidth: 24px;\n\theight: 24px;\n\tfont-size: 22px;\n\tline-height: 1.2;\n\tcolor: var(--bg-color-blue);\n\ttext-align: center;\n\ttransition: all 0.3s ease;\n\tuser-select: none;\n}\n\n.todolistitem .todoremovebtn {\n\tscale: 1.05;\n}\n\n.todolistitem .todoremovebtn:hover {\n\tcolor: var(--whitishColor-blue);\n}\n\n.todolistitem .todopinbtn {\n\tinset-inline-end: 28px;\n\tbackground: url(\"./svgs/todo-pin-stroke.svg\") no-repeat center center /\n\t\tcontain;\n}\n\n.todolistitem .todoeditbtn {\n\tbackground: url(\"./svgs/todo-edit-do.svg\") no-repeat center center / contain;\n}\n\n.todoeditbtn {\n\tinset-inline-end: 56px;\n\topacity: 0.8;\n}\n\n.todoeditbtn:hover {\n\topacity: 1;\n}\n\n.todolistitem.pinned .todopinbtn {\n\tbackground-image: url(\"./svgs/todo-pin-fill.svg\");\n}\n\n.todolistitem:first-child {\n\tborder-top-left-radius: 18px;\n\tborder-top-right-radius: 18px;\n}\n\n.todolistitem:last-child {\n\tborder-bottom-left-radius: 18px;\n\tborder-bottom-right-radius: 18px;\n}\n\n/* ---------------------------------------------------------- */\n\n.centerDiv {\n\tdisplay: grid;\n\tgrid-template-columns: auto auto;\n\twidth: fit-content;\n\theight: fit-content;\n\t/* background-color: #17a638; */\n\t/* always leave enough space for the shortcuts bar at the bottom */\n\tpadding-bottom: calc(var(--shortcut-size) + var(--gap) * 2);\n}\n\n/* ____________Clock_____________________---- */\n#digitalClock {\n\twidth: 300px;\n\theight: 300px;\n\tborder-radius: 100%;\n\tposition: relative;\n}\n\n#analogClock {\n\twidth: 300px;\n\theight: 300px;\n\tborder-radius: 100%;\n\tposition: relative;\n}\n\n#clock svg {\n\tposition: absolute;\n\tanimation: clockAnm 1s;\n}\n\n@keyframes clockAnm {\n\tfrom {\n\t\ttransform: rotate(40deg);\n\t}\n\n\tto {\n\t\ttransform: rotate(0deg);\n\t}\n}\n\n.clock .centerPoint {\n\twidth: 20px;\n\theight: 20px;\n\tposition: absolute;\n\tinset: 0;\n\tmargin: auto;\n}\n\n.clock .centerPoint .sui {\n\tposition: absolute;\n\twidth: 20px;\n\theight: 100px;\n\tbackground-color: var(--darkColor-blue);\n\ttop: -90px;\n\ttransform-origin: bottom;\n\tborder-radius: 10px;\n}\n\n#hour {\n\theight: 80px;\n\ttop: -70px;\n\tbackground-color: var(--darkerColor-blue);\n\ttransform: rotate(90deg);\n\ttransition: transform 1.5s;\n}\n\n#hour::after {\n\tcontent: \"\";\n\tposition: absolute;\n\twidth: 20px;\n\theight: 30px;\n\tbackground-color: var(--darkerColor-blue);\n\tbottom: -10px;\n\tborder-radius: 100px;\n}\n\n#minute {\n\tz-index: 9 !important;\n\ttransition: transform 1.5s;\n}\n\n#minute::after {\n\tcontent: \"\";\n\tposition: absolute;\n\twidth: 20px;\n\theight: 30px;\n\tbackground-color: var(--darkColor-blue);\n\tbottom: -10px;\n\tborder-radius: 100px;\n}\n\n#second {\n\tbackground-color: #00000000;\n\ttransition: transform 1s;\n}\n\n#second::after {\n\tcontent: \"\";\n\tposition: absolute;\n\twidth: 20px;\n\theight: 20px;\n\tbackground-color: var(--darkColor-blue);\n\ttop: -28px;\n\tborder-radius: 100%;\n}\n\n/* ---------------------- */\n.ttteexxtt {\n\tposition: relative;\n\ttop: 1.6rem;\n}\n\n#digitalClock[style=\"display: block;\"] + .ttteexxtt {\n\ttop: 1rem;\n}\n\n#userText {\n\tfont-family: var(--main-font-family);\n\tfont-size: 1.36rem;\n\tdisplay: block;\n\tword-wrap: break-word;\n\tmax-width: 18.75rem;\n\tmax-height: 4.3rem;\n\tmin-height: 2.5rem;\n\tmin-width: 2.5rem;\n\toverflow-x: clip;\n\toverflow-y: scroll;\n\ttext-overflow: ellipsis;\n\tscrollbar-width: none;\n\tmargin-bottom: 10px;\n\tbackground-color: var(--bg-color-blue);\n\tpadding: 3px 10px;\n\twidth: fit-content;\n\tborder-radius: 10px;\n}\n\n/* When wallpaper is active */\nbody[data-bg=\"wallpaper\"] #userText {\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--accentLightTint-blue) var(--transparency),\n\t\ttransparent\n\t);\n}\n\n#userText::-webkit-scrollbar {\n\tdisplay: none;\n}\n\n#date {\n\tfont-size: 1.36rem;\n\tbackground-color: var(--bg-color-blue);\n\tpadding: 3px 10px;\n\twidth: fit-content;\n\tborder-radius: 10px;\n}\n\n/* When wallpaper is active */\nbody[data-bg=\"wallpaper\"] #date {\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--accentLightTint-blue) var(--transparency),\n\t\ttransparent\n\t);\n}\n\n.digidate {\n\tfill: var(--textColorDark-blue);\n}\n\n.amPm {\n\tfill: var(--textColorDark-blue);\n}\n\n.digiclock {\n\ttext-anchor: middle;\n\tfill: var(--darkColor-blue);\n\tfont-size: 8rem;\n\tfont-weight: lighter;\n\tmargin: auto;\n\twidth: fit-content;\n\tdirection: ltr;\n\tunicode-bidi: isolate;\n}\n\n#digihours {\n\tfill: var(--darkerColor-blue);\n}\n\n#digicolon {\n\tanimation: blink 1s infinite;\n}\n\n@keyframes blink {\n\t50% {\n\t\topacity: 0;\n\t}\n}\n\n.no-blink {\n\tanimation: none !important;\n\topacity: 1 !important;\n}\n\nhtml[lang=\"ta\"] .digiclock {\n\tfont-size: 6.4rem;\n}\n\n.clockOptions,\n.proxyOptions,\n.weatherOptions,\n.quotesOptions {\n\toverflow: hidden;\n\tmax-height: 800px;\n\topacity: 1;\n\ttransition:\n\t\tmax-height 0.4s var(--md-motion-ease),\n\t\topacity 0.3s ease;\n}\n\n.not-applicable {\n\tmax-height: 0;\n\topacity: 0;\n\tpointer-events: none;\n}\n\n.quotesOptions:not(:last-child) .ttcont:last-child {\n\tborder-bottom: 1px solid rgba(0, 0, 0, 0.06);\n}\n\n\n.clock-hidden-left {\n\tdisplay: none;\n}\n\n/* __________end of clock___________________ */\n.leftDiv {\n\t/* padding-inline-end: 100px; */\n\ttransform: translateX(-100px);\n\t/* background-color: rgba(102, 51, 153, 0.404); */\n\t/* height: fit-content; */\n}\n\n:dir(rtl) .leftDiv {\n\ttransform: translateX(100px);\n}\n\n.rightDiv {\n\tposition: relative;\n\twidth: 640px;\n\ttransform: translateX(100px);\n}\n\n.rightDiv .topDiv {\n\theight: 196px;\n\tdisplay: flex;\n\tjustify-content: flex-end;\n}\n\n/* lrectangle______________________ */\n.rightDiv .topDiv .lrectangle {\n\theight: 100%;\n\twidth: 100%;\n\tborder-radius: var(--round);\n\tpadding: 20px;\n\tposition: relative;\n}\n\n#conditionText {\n\tfont-size: 1.2rem;\n\tcolor: var(--textColorDark-blue);\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tmax-width: 372px;\n}\n\n.cconnt {\n\twidth: calc(100% - 40px);\n\tbottom: 20px;\n\theight: fit-content;\n\tposition: absolute;\n\tfont-size: 1rem;\n}\n\n.tilesContainer {\n\theight: 50px;\n\twidth: 100%;\n\tdisplay: grid;\n\tgrid-template-columns: 1fr 1fr;\n\tgap: 20px;\n}\n\n.tilesContainer .tiles {\n\tbackground-color: var(--whitishColor-blue);\n\tborder-radius: 22px;\n\tposition: relative;\n\theight: 50px;\n}\n\n.tilesContainer .location {\n\tbackground-color: var(--darkColor-blue);\n}\n\n.tilesContainer .location .location_spn {\n\tcolor: var(--whitishColor-blue);\n}\n\n.tilesContainer .tiles .icon {\n\theight: 100%;\n\taspect-ratio: 1/1;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.tilesContainer .tiles span {\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tmargin: auto;\n\tcolor: var(--textColorDark-blue);\n\theight: fit-content;\n}\n\n.tilesContainer #location {\n\tinset-inline-start: 46px;\n}\n\n#feelsLike {\n\tleft: 46px;\n\tpadding-right: 12px;\n\twidth: calc(100% - 46px);\n\tdirection: ltr;\n\tunicode-bidi: isolate;\n}\n\n.opacityBarControl {\n\topacity: 0;\n\ttransform: translateY(20px);\n\tpointer-events: none;\n\tposition: relative;\n\theight: auto;\n\tmax-height: 0;\n\toverflow: hidden;\n\ttransition:\n\t\topacity 0.3s ease,\n\t\ttransform 0.5s ease,\n\t\tmax-height 0.4s ease;\n}\n\nbody[data-bg=\"wallpaper\"] .opacityBarControl {\n\topacity: 1;\n\ttransform: translateY(0);\n\tpointer-events: auto;\n\tmax-height: 150px;\n\toverflow: hidden;\n\tmargin-top: 20px;\n\tborder-top: 1px solid rgba(0, 0, 0, 0.06);\n}\n\n.humidityBar,\n.opacityBar {\n\tborder-radius: 20px;\n\theight: 40px;\n\twidth: 100%;\n\tmargin-bottom: 20px;\n\tposition: relative;\n}\n\n.opacityBar {\n\tmargin: 8px 0 0;\n\tcursor: grab;\n}\n\n.humidityBar::after {\n\tposition: absolute;\n\tcontent: \"\";\n\theight: 100%;\n\twidth: 40px;\n\tbackground-color: var(--darkColor-blue);\n\tbackground-image: url(\"./svgs/humidity.svg\");\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n\tbackground-size: 66%;\n\tinset-inline-end: 0;\n\tborder-radius: 100%;\n}\n\n.humidityBar .thinLine,\n.opacityBar .thinLine {\n\tposition: absolute;\n\twidth: calc(100% - 60px);\n\tbackground-color: var(--whitishColor-blue);\n\theight: 6px;\n\tborder-radius: 10px;\n\ttop: 0;\n\tbottom: 0;\n\tmargin: auto;\n}\n\n.humidityBar .thinLine {\n\twidth: calc(100% - 60px);\n}\n\n.opacityBar .thinLine {\n\twidth: 100%;\n}\n\n.humidityBar .slider,\n.opacityBar .opacitySlider {\n\theight: 100%;\n\twidth: calc(10% - 60px);\n\t/*100-60px because humidityIconContainer is 40px Width and 20px is margin which is = to 60*/\n\tmin-width: 42%;\n\tbackground-color: var(--darkColor-blue);\n\tborder-radius: 100px;\n\tposition: absolute;\n}\n\n.humidityBar .slider {\n\twidth: calc(10% - 60px);\n\t/*100-60px because humidityIconContainer is 40px Width and 20px is margin which is = to 60*/\n\tmin-width: 42%;\n\ttransition: width 1s;\n}\n\nbody[data-bg=\"wallpaper\"] .humidityBar .thinLine {\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--whitishColor-blue) calc(var(--transparency) * 2),\n\t\ttransparent\n\t);\n}\n\n.opacityBar .opacitySlider {\n\tmin-width: 20%;\n}\n\n#humidityLevel,\n#opacityLevel {\n\tcolor: var(--whitishColor-blue);\n\twidth: fit-content;\n\tposition: absolute;\n\tbottom: 0;\n\ttop: 0;\n\tmargin: auto;\n\tinset-inline-start: 20px;\n\theight: fit-content;\n\tfont-size: 1rem;\n}\n\n#opacityTextContainer {\n\tborder-bottom: 0;\n\tpadding: 8px 4px 6px;\n}\n/* End of _____________________- */\n\n/* ------------Weather Pill------------- */\n.rightDiv .topDiv .rAndakar {\n\tposition: relative;\n\theight: 100%;\n\taspect-ratio: 1/1;\n\tmargin-inline-start: var(--gap);\n\tanimation: rAndAnm 1s;\n\t/* transition: rotate 1s; */\n}\n\n@keyframes rAndAnm {\n\tfrom {\n\t\ttransform: rotate(-45deg);\n\t}\n\n\tto {\n\t\ttransform: rotate(0deg);\n\t}\n}\n\n.rightDiv .topDiv .rAndakar .wInfo {\n\tposition: absolute;\n\tinset: 0;\n\tmargin: auto;\n\ttransform: translateX(14px);\n\twidth: 100px;\n\theight: 80%;\n}\n\n#temp {\n\tfont-size: 3.5rem;\n\tfont-weight: bold;\n\tcolor: var(--darkerColor-blue);\n\tmargin: auto;\n\twidth: fit-content;\n}\n\n.tempUnit {\n\tfont-size: 0.4em;\n\tposition: relative;\n\ttop: -1.1em;\n\tinset-inline-start: 3px;\n\tcolor: var(--darkColor-blue);\n}\n\n#wIcon {\n\twidth: 80px;\n\theight: 80px;\n\tmargin-top: -11px;\n\tmargin-inline-start: -30px;\n}\n\n:dir(rtl) #wIcon {\n\tmargin-inline-start: 50px;\n}\n\nhtml[lang=\"ur\"] .rightDiv .topDiv .rAndakar .wInfo {\n\theight: 95%;\n}\n\nhtml[lang=\"ur\"] #temp {\n\tfont-size: 3.3rem;\n}\n\nhtml[lang=\"ur\"] #wIcon {\n\twidth: 70px;\n\theight: 70px;\n}\n\nhtml[lang=\"ta\"] #temp {\n\tposition: relative;\n\tfont-size: 3rem;\n\tleft: -14px;\n\tpadding-bottom: 12px;\n}\n\n/* ------------End of Weather Pill------------- */\n\n/* ________________________________________________________ */\n\n/* _____________Searchbar___________________ */\n.searchbar {\n\tmargin-top: var(--gap);\n\twidth: 100%;\n\theight: 60px;\n\tborder-radius: var(--round);\n\tbackground-color: var(--accentLightTint-blue);\n\tposition: relative;\n\toutline: 2px solid #00000000;\n\ttransition: outline 0.3s;\n}\n\nbody[data-bg=\"wallpaper\"] .searchbar {\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--accentLightTint-blue) calc(var(--transparency) + 10%),\n\t\ttransparent\n\t);\n}\n\n.searchbar.active {\n\toutline: 2px solid var(--darkColor-blue);\n}\n\n.searchbar .searchIcon {\n\twidth: 30px;\n\theight: 30px;\n\tposition: absolute;\n\tmargin-top: 16px;\n\tmargin-inline-start: 16px;\n\tfill: var(--darkColor-blue);\n}\n\n.searchbar-content {\n\tdisplay: flex;\n\talign-items: center;\n\theight: 100%;\n\tpadding-inline-end: 10px;\n}\n\n#searchQ {\n\tflex-grow: 1;\n\theight: 80%;\n\ttop: 0;\n\tbottom: 0;\n\tmargin-block: auto;\n\tmargin-inline: 20px auto;\n\toutline: none;\n\tborder: none;\n\tcolor: #000;\n\tbackground-color: #00000000;\n\tpadding: 0 2px;\n\tmargin-inline-start: 58px;\n\tfont-size: 1rem;\n}\n\n/* Default placeholder color */\n#searchQ::placeholder {\n\tcolor: #757575;\n}\n\nbody[data-bg=\"wallpaper\"] #searchQ::placeholder {\n\tcolor: color-mix(in srgb, #757575 calc(var(--transparency) + 10%), #000);\n}\n\n.searchControls {\n\tmargin-inline-start: 10px;\n\tinset-inline-end: 10px;\n\tdisplay: flex;\n\talign-items: center;\n\theight: 100%;\n}\n\n/* --------- .micIcon------------- */\n\n.micIcon {\n\twidth: 40px;\n\theight: 40px;\n\tmargin-inline-end: 10px;\n\tdisplay: flex;\n\talign-items: center;\n\tposition: relative;\n\tjustify-content: center;\n\tcolor: var(--darkColor-blue);\n\tcursor: pointer;\n\tborder-radius: 50%;\n\tpadding: 3px;\n\tbox-sizing: border-box;\n\tbackground-color: var(--whitishColor-blue);\n\tborder: 2px solid transparent;\n}\n\nbody[data-bg=\"wallpaper\"] .micIcon {\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--whitishColor-blue) calc(var(--transparency) * 2),\n\t\ttransparent\n\t);\n}\n\n.theme-transition .micIcon {\n\ttransition: all 0.5s;\n}\n\n.micIcon::after {\n\tcontent: \"\";\n\tposition: absolute;\n\tinset: -3px;\n\tborder-radius: 50%;\n\tborder: 2px solid transparent;\n}\n\n.micActive::after,\n.micIcon:hover::after {\n\tborder-inline-start: 2px dotted var(--darkColor-blue);\n\tborder-inline-end: 2px solid var(--darkColor-blue);\n\tborder-top: 2px dashed var(--darkerColor-blue);\n\tborder-bottom: 2px dashed var(--darkerColor-blue);\n\tanimation: micAnimation 1s ease-in-out infinite;\n\ttransition: all 0.5s ease-in-out;\n}\n\n@keyframes micAnimation {\n\t0% {\n\t\ttransform: rotate(0deg);\n\t}\n\n\t37% {\n\t\ttransform: rotate(-20deg);\n\t}\n\n\t69% {\n\t\ttransform: rotate(20deg);\n\t}\n\n\t100% {\n\t\ttransform: rotate(0deg);\n\t}\n}\n\n/* ---------End of .micIcon------------- */\n\n#enterBtn {\n\theight: 40px;\n\tborder-radius: 100px;\n\tpadding: 0 23px;\n\tborder: none;\n\tfont-size: 1.1rem;\n\tbackground-color: var(--darkColor-blue);\n\tcolor: white;\n\t/* transition: all 0.3s; */\n}\n\n#enterBtn:hover {\n\tbackground-color: var(--darkerColor-blue);\n\tcursor: pointer;\n}\n\n#enterBtn:active {\n\ttransform: scale(0.9);\n}\n\n.theme-transition #enterBtn {\n\ttransition: all 0.3s;\n}\n\n/* ________________End of Searchbar______________________ */\n\n.searchWithCont {\n\tmargin-top: var(--gap);\n\tborder-radius: 20px;\n\tposition: relative;\n\tdisplay: flex;\n\tfont-size: 1rem;\n\tz-index: 2; /* Ensures it's above the engines container */\n\toverflow: hidden; /* Prevents child elements from overflowing outside */\n\tmax-width: 100%;\n}\n\n.searchWithCont .hint {\n\tmin-width: 120px;\n\tmax-width: 150px;\n\theight: 100px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\ttext-align: center;\n\tpadding: 12px;\n\tposition: relative;\n\tmargin-inline-end: 5px;\n\tborder-radius: var(--round);\n\tcursor: pointer;\n\ttransition:\n\t\tborder-radius 0.4s,\n\t\tmargin-inline-start 0.4s;\n}\n\n:dir(rtl) .searchWithCont .hint {\n\tz-index: 2;\n}\n\n.searchWithCont .hint:hover {\n\tbackground-color: var(--darkColor-blue);\n\tcolor: #fff;\n}\n\nbody[data-bg=\"wallpaper\"] .searchWithCont .hint:hover {\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--darkColor-blue) var(--transparency),\n\t\ttransparent\n\t);\n}\n\n.searchWithCont .hint:active {\n\tborder-radius: 20px;\n\tmargin-inline-start: 5px;\n}\n\n.searchEnginesContainer {\n\tposition: relative;\n\tz-index: 1;\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: 20px;\n\tpadding-inline-start: 20px;\n\topacity: 1;\n\ttransform: translateX(0);\n}\n\n.searchEnginesContainer.show {\n\tanimation: slideIn 0.3s var(--md-motion-ease) forwards;\n}\n\n@keyframes slideIn {\n\tfrom {\n\t\ttransform: translateX(20px);\n\t\topacity: 0.2;\n\t}\n\tto {\n\t\ttransform: translateX(0);\n\t\topacity: 1;\n\t}\n}\n\n.searchEnginesContainer .search-engine {\n\tborder-radius: 20px;\n\theight: 40px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tposition: relative;\n\tcursor: pointer;\n\topacity: 1;\n\ttransition: opacity 0.3s ease-in-out;\n}\n\n.searchEnginesContainer .search-engine svg {\n\twidth: 30px;\n\theight: 30px;\n\tbackground-color: var(--darkColor-blue);\n\tfill: #fffffff0;\n\tborder-radius: 100%;\n\tmargin-inline-start: 5px;\n\tpadding: 3px;\n}\n\n.searchEnginesContainer .search-engine label {\n\tmargin-block: 0;\n\tmargin-inline: 10px 13px;\n\tcursor: pointer;\n}\n\n/* -----------Radio Button Customizing------------ */\n.search-engine input[type=\"radio\"] {\n\tappearance: none;\n\t-webkit-appearance: none;\n\t-moz-appearance: none;\n\tbackground-color: var(--whitishColor-blue);\n\twidth: 18px;\n\theight: 18px;\n\tborder-radius: 50%;\n\tborder: 2px solid var(--whitishColor-blue);\n\toutline: none;\n\tmargin-inline-end: 8px;\n\tcursor: pointer;\n\t/* transition: 0.2s; */\n}\n\n.search-engine input[type=\"radio\"]:checked {\n\tbackground-color: var(--darkColor-blue);\n}\n\n.theme-transition .search-engine input[type=\"radio\"] {\n\ttransition:\n\t\tbackground-color 0.2s ease,\n\t\tborder 0.2s ease;\n}\n\n/* ----------- Quotes ------------ */\n.quotesCont {\n\tmargin-top: var(--gap);\n\tposition: relative;\n\tdisplay: flex;\n\tfont-size: 1rem;\n\tdirection: ltr; /* Remove when multilingual quote is supported */\n\tunicode-bidi: isolate;\n}\n\n.quotesContainer {\n\tposition: relative;\n\tbackground-color: var(--accentLightTint-blue);\n\theight: 100px;\n\twidth: 100%;\n\tborder-radius: 20px;\n\tpadding: 20px;\n\tline-height: 28px;\n}\n\n.authorWrapper {\n\tposition: absolute;\n\tbottom: 0;\n\tinset-inline-end: 0;\n\tdisplay: flex;\n\talign-items: flex-end;\n}\n\n.authorName {\n\tbackground: var(--bg-color-blue);\n\tposition: relative;\n\tpadding: 6px 16px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\theight: 40px;\n\twidth: 40px;\n\tborder-start-start-radius: 20px;\n\tborder-end-end-radius: 20px;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttransition: width 0.4s var(--md-motion-ease);\n\tbox-sizing: border-box;\n}\n\n.authorName span {\n\tdisplay: inline-block;\n\tpadding: 0;\n}\n\n.qtRounder {\n\tposition: absolute;\n\twidth: 20px;\n\theight: 20px;\n\tinset-inline-start: -20px;\n\ttransform: rotate(90deg);\n}\n\n.qtRounder2 {\n\tposition: absolute;\n\twidth: 20px;\n\theight: 20px;\n\tinset-inline-end: 0;\n\ttop: -20px;\n\ttransform: rotate(90deg);\n}\n\nbody[data-bg=\"wallpaper\"] .quotesContainer {\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--accentLightTint-blue) var(--transparency),\n\t\ttransparent\n\t);\n\ttext-shadow: 0 0 5px rgba(255, 255, 255, 0.7);\n}\n\n.black-theme body[data-bg=\"wallpaper\"] .quotesContainer {\n\ttext-shadow: 0 0 5px rgba(0, 0, 0, 0.7);\n}\n\nbody[data-bg=\"wallpaper\"] .authorName {\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--bg-color-blue) calc(var(--transparency) * 1.5),\n\t\ttransparent\n\t);\n}\n\nhtml[lang=\"ur\"] .qtRounder {\n\tleft: -18.5px;\n}\n\nhtml[lang=\"ur\"] .qtRounder2 {\n\tright: -1.5px;\n}\n\n/* ----------Shortcuts----------------- */\n\n#shortcuts-section {\n\tpointer-events: none;\n\tdisplay: flex;\n\tjustify-content: center;\n\twidth: 100%;\n\theight: calc(var(--shortcut-size) + var(--gap) * 2);\n\tposition: fixed;\n\t/* background: gold; */\n\tinset-inline-start: 0;\n\tinset-inline-end: 0;\n\tbottom: 0;\n\toverflow: scroll;\n\tscrollbar-width: none;\n\tmargin: auto;\n}\n\n#shortcuts-section::-webkit-scrollbar {\n\tdisplay: none;\n}\n\n#shortcuts-section .wrapper {\n\tposition: relative;\n\theight: fit-content;\n\tdisplay: inline-flex;\n\t/* make sure elements are next to each other */\n\talign-items: stretch;\n\t/* make sure both elements grow to the same height */\n\twidth: fit-content;\n}\n\n/* Invisible element tracking height changes */\n#shortcuts-section #flexMonitor {\n\tposition: absolute;\n\theight: 100%;\n\t/* This will match the height of .shortcutsContainer, which it is supposed to monitor */\n\tvisibility: hidden;\n}\n\n/* Invisible element to get standard height */\n#shortcuts-section #defaultMonitor {\n\tposition: absolute;\n\t/* This is the standard height of one row */\n\theight: calc(\n\t\tvar(--shortcut-size) + var(--gap) + var(--shortcut-bar-gap-and-padding)\n\t);\n\tvisibility: hidden;\n}\n\n.shortcutsContainer {\n\tpointer-events: auto;\n\ttransition: transform 0.5s;\n\tmargin-top: calc(var(--gap) - var(--shortcut-bar-gap-and-padding));\n\tmax-width: calc(\n\t\tvar(--max-shortcut-bar-width) -\n\t\t\tmod(\n\t\t\t\tvar(--max-shortcut-bar-width) - var(--shortcut-bar-gap-and-padding),\n\t\t\t\tvar(--shortcut-size) + var(--shortcut-bar-gap-and-padding)\n\t\t\t)\n\t);\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tpadding: var(--shortcut-bar-gap-and-padding);\n\tjustify-content: center;\n\twidth: fit-content;\n\t/* gap: var(--gap) var(--shortcut-bar-gap-and-padding); */\n\tgap: 2rem;\n}\n\n.shortcutsContainer::before {\n\tborder-radius: 34px;\n\tcontent: \"\";\n\tposition: absolute;\n\ttop: 0;\n\tinset-inline-start: 0;\n\tinset-inline-end: 0;\n\tbottom: 0;\n\tbackground-color: var(--accentLightTint-blue);\n\tz-index: -1;\n\topacity: var(--always-show-dock-background);\n\ttransition: opacity 0.5s;\n\tpointer-events: none;\n}\n\n.shortcutsContainer.showBackground::before {\n\topacity: 1;\n}\n\n.shortcutsContainer .shortcuts {\n\tposition: relative;\n\ttransition: all 0.3s;\n\tisolation: isolate;\n}\n\n.shortcutsContainer .shortcuts:hover {\n\ttransform: translateY(-10px) scale(1.03);\n\t/* box-shadow: 0 5px 10px var(--accentLightTint-blue); */\n\tborder-radius: 100px;\n}\n\n.shortcuts .shortcut-name {\n\tvisibility: hidden;\n\tposition: absolute;\n\tbottom: -30px;\n\tinset-inline-end: 0;\n\tinset-inline-start: 50%;\n\ttransform: translateX(-50%);\n\t/* Center horizontally */\n\tmargin: auto;\n\tmin-width: 30px;\n\twidth: fit-content;\n\ttext-align: center;\n\tcolor: var(--textColorDark-blue);\n\tbackground-color: transparent;\n\tpadding: 0;\n\tborder-radius: 0;\n\topacity: 0;\n\ttransition: all 0.3s;\n\tfont-size: 1rem;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tmax-width: 120px;\n}\n\nbody[data-bg=\"wallpaper\"] .shortcuts .shortcut-name {\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--accentLightTint-blue) var(--transparency),\n\t\ttransparent\n\t);\n\tpadding: 0 6px;\n\tborder-radius: 5px;\n}\n\n:dir(rtl) .shortcuts .shortcut-name {\n\ttransform: translateX(50%);\n}\n\n.shortcuts:hover .shortcut-name {\n\tvisibility: visible;\n\topacity: 1;\n}\n\n.shortcutsContainer .shortcuts a {\n\tborder-radius: 100px;\n\tdisplay: block;\n\theight: var(--shortcut-size);\n\twidth: var(--shortcut-size);\n}\n\n.shortcutsContainer .shortcuts a:has(svg) {\n\tbackground: radial-gradient(var(--accentLightTint-blue) 66%, transparent 66%);\n}\n\n.shortcutsContainer .shortcuts a:has(img) {\n\tbackground-color: var(--darkColor-blue);\n}\n\n.shortcutsContainer .shortcuts a svg {\n\theight: 100%;\n\twidth: 100%;\n}\n\n.shortcutsContainer .shortcuts .shortcutLogoContainer {\n\tborder-radius: 50%;\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\theight: 100%;\n\twidth: 100%;\n}\n\n.shortcutsContainer .shortcuts .shortcutLogoContainer img {\n\theight: 100%;\n\twidth: 100%;\n\tborder-radius: 50%;\n\tobject-fit: contain;\n\tfilter: none;\n\tmix-blend-mode: normal;\n}\n\n/* Adaptive Icons styling */\n.adaptive-icons .shortcuts .shortcutLogoContainer img[data-icon-type=\"default\"] {\n\theight: calc(100% * 0.7071) !important;\n\twidth: calc(100% * 0.7071) !important;\n\tfilter: grayscale(1);\n\tmix-blend-mode: screen;\n}\n\nhtml:has(.themeSegment[data-active=\"dark\"]):not(:has(#darkTheme:checked))\n\t.adaptive-icons\n\t.shortcuts\n\t.shortcutLogoContainer\n\timg[data-icon-type=\"default\"],\nhtml:has(body[sysTheme=\"systemDark\"] .themeSegment[data-active=\"system\"]):not(:has(#darkTheme:checked))\n\t.adaptive-icons\n\t.shortcuts\n\t.shortcutLogoContainer\n\timg[data-icon-type=\"default\"],\nbody[data-bg=\"wallpaper\"]:has(.themeSegment[data-active=\"dark\"]):not(:has(#darkTheme:checked))\n\t.adaptive-icons\n\t.shortcutLogoContainer\n\timg[data-icon-type=\"default\"],\nbody[data-bg=\"wallpaper\"][sysTheme=\"systemDark\"]:has(\n\t\t.themeSegment[data-active=\"system\"]\n\t):not(:has(#darkTheme:checked))\n\t.adaptive-icons\n\t.shortcutLogoContainer\n\timg[data-icon-type=\"default\"] {\n\tfilter: grayscale(1) invert(1) !important;\n}\n\n.shortcutLogoContainer img[data-icon-type=\"custom\"] {\n    filter: none !important;\n    mix-blend-mode: normal !important;\n\tborder-radius: 10% !important;\n}\n\nhtml:has(.themeSegment[data-active=\"dark\"]):not(:has(#darkTheme:checked))\n    .shortcuts .shortcutLogoContainer img[data-icon-type=\"custom\"],\nhtml:has(body[sysTheme=\"systemDark\"] .themeSegment[data-active=\"system\"]):not(:has(#darkTheme:checked))\n    .shortcuts .shortcutLogoContainer img[data-icon-type=\"custom\"],\nbody[data-bg=\"wallpaper\"]:has(.themeSegment[data-active=\"dark\"]):not(:has(#darkTheme:checked))\n    .shortcuts .shortcutLogoContainer img[data-icon-type=\"custom\"],\nbody[data-bg=\"wallpaper\"][sysTheme=\"systemDark\"]:has(.themeSegment[data-active=\"system\"]):not(:has(#darkTheme:checked))\n    .shortcuts .shortcutLogoContainer img[data-icon-type=\"custom\"] {\n    filter: invert(1) hue-rotate(180deg) !important;\n    mix-blend-mode: normal !important;\n}\n\n.adaptive-icons .shortcuts .shortcutLogoContainer img[data-icon-type=\"custom\"] {\n    height: calc(100% * 0.7071) !important;\n    width: calc(100% * 0.7071) !important;\n}\n\n.adaptive-icons .shortcuts .shortcutLogoContainer img[data-icon-type=\"letter\"] {\n\theight: 100% !important;\n\twidth: 100% !important;\n\tfilter: none !important;\n    mix-blend-mode: normal !important;\n} \n\n/* ----------end of Shortcuts----------------- */\n\n/* -----------Ai-Tools----------------- */\n.aiToolsCont {\n\theight: 50px;\n\twidth: fit-content;\n\tborder-radius: 100px;\n\tposition: fixed;\n\tinset-inline-start: var(--gap);\n\tbottom: var(--gap);\n\tmargin: auto;\n\tdisplay: flex;\n\tmax-width: calc(100% - 140px);\n\toverflow-x: scroll;\n\toverflow-y: hidden;\n\tscrollbar-width: none; /* Firefox */\n\t-ms-overflow-style: none; /* IE and Edge */\n}\n\n.aiToolsCont::-webkit-scrollbar {\n\tdisplay: none; /* Chrome, Safari, Edge, Opera */\n}\n\n.aiToolsCont .hangno {\n\tbackground-color: var(--accentLightTint-blue);\n\theight: 100%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tpadding: 0 16px;\n\tborder-radius: 100px;\n\tz-index: 2;\n\tcursor: pointer;\n}\n\nbody[data-bg=\"wallpaper\"] .aiToolsCont .hangno {\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--accentLightTint-blue) calc(var(--transparency) * 1.75),\n\t\ttransparent\n\t);\n}\n\n.aiToolsCont .hangno .icon {\n\twidth: 26px;\n\theight: 26px;\n\tmargin-inline-end: 12px;\n}\n\n.aiToolsCont .hangno .label {\n\tfont-size: 1rem;\n\tcolor: var(--textColorDark-blue);\n\tcursor: pointer;\n\twidth: fit-content;\n\ttext-wrap-mode: nowrap;\n}\n\n.aiToolsCont .toolsCont {\n\tdisplay: none;\n\tposition: relative;\n\tmargin-inline-start: 30px;\n\ttransition: all 500ms;\n\tgap: 0;\n\ttransform-origin: left;\n\ttransform: scale(0.5) translateX(-70px);\n\topacity: 0.2;\n}\n\n.aiToolsCont .toolsCont::before {\n\tcontent: \"\";\n\tposition: absolute;\n\theight: 100%;\n\twidth: 6px;\n\tbackground-color: var(--accentLightTint-blue);\n\tborder-radius: 6px;\n\tinset-inline-start: -18px;\n}\n\nbody[data-bg=\"wallpaper\"] .aiToolsCont .toolsCont::before {\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--accentLightTint-blue) calc(var(--transparency) * 1.5),\n\t\ttransparent\n\t);\n}\n\n.aiToolsCont .toolsCont a {\n\tbackground-color: var(--accentLightTint-blue);\n\theight: 100%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tpadding-block: 0;\n\tpadding-inline: 12px 17px;\n\tborder-radius: 100px;\n\ttext-decoration: none;\n\tcolor: var(--textColorDark-blue);\n\tfont-size: 1rem;\n\ttransition: all 0.3s ease;\n\t& div {\n\t\ttext-wrap-mode: nowrap;\n\t}\n}\n\n.aiToolsCont .toolsCont a:hover {\n\tbox-shadow: inset 0 0 0 1px var(--darkColor-blue);\n}\n\nbody[data-bg=\"wallpaper\"] .aiToolsCont .toolsCont a {\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--accentLightTint-blue) var(--transparency),\n\t\ttransparent\n\t);\n}\n\n.aiToolsCont .toolsCont .tIcon {\n\twidth: 30px;\n\theight: 30px;\n\tmargin-inline-end: 10px;\n}\n\n/* Settings Modal Styles */\n.ai-settings-modal {\n\tposition: fixed;\n\ttop: 50%;\n\tleft: 50%;\n\ttransform: translate(-50%, -50%);\n\tbackground-color: var(--bg-color-blue);\n\tcolor: var(--textColorDark-blue);\n\tborder-radius: var(--round);\n\tpadding: 30px 35px;\n\tbox-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n\tz-index: 1001;\n\twidth: 380px;\n}\n\n.ai-settings-modal .ai-modal-header {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tfont-size: 1.1rem;\n\topacity: 0.96;\n}\n\n.ai-settings-modal .ai-close-button {\n\tcursor: pointer;\n\tmargin: 5px 0;\n\tcolor: var(--darkerColor-blue);\n}\n\n.ai-settings-modal #aiSettingsIntro {\n\tfont-size: 0.9rem;\n\tmargin-bottom: 20px;\n}\n\n.ai-settings-modal .ai-tools-list {\n\tmax-height: 260px;\n\toverflow-y: auto;\n\tscroll-behavior: smooth;\n}\n\n.ai-settings-modal .ai-tools-list::-webkit-scrollbar {\n\twidth: 5px;\n}\n\n.ai-settings-modal .ai-tools-list::-webkit-scrollbar-track {\n\tbackground-color: transparent;\n}\n\n.ai-settings-modal .ai-tools-list::-webkit-scrollbar-thumb {\n\tbackground-color: var(--darkColor-blue);\n\tborder-radius: 3px;\n}\n\n.ai-settings-modal .ai-tools-list::-webkit-scrollbar-thumb:hover {\n\tbackground-color: var(--darkerColor-blue);\n\tborder-radius: 3px;\n}\n\n@-moz-document url-prefix() {\n\t.ai-settings-modal .ai-tools-list {\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--darkColor-blue) transparent;\n\t}\n}\n\n.ai-settings-modal .ai-tools-list #aiToolsForm .ai-tool-option {\n\tmargin-block: 0 10px; /* top and bottom */\n\tmargin-inline: 0 4px; /* start and end */\n\tpadding: 10px 16px;\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tbackground-color: var(--accentLightTint-blue);\n\tborder: none;\n\tborder-radius: 10px;\n\tfont-size: 0.95rem;\n\twill-change: transform;\n}\n\n.ai-settings-modal .ai-tools-list #aiToolsForm .ai-tool-option:last-child {\n\tmargin-bottom: 0;\n}\n\n#aiToolsForm .ai-tool-option input[type=\"checkbox\"] {\n\tvertical-align: middle;\n\tmargin-inline-end: 8px;\n\taccent-color: var(--darkColor-blue);\n\theight: 15px;\n\twidth: 15px;\n}\n\n.ai-settings-modal .ai-modal-footer {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\tmargin-top: 22px;\n}\n\n.ai-settings-modal .ai-reset-button,\n.ai-settings-modal .ai-save-button {\n\twidth: 140px;\n\tpadding: 10px 15px;\n\tfont-size: 0.9rem;\n\tborder-radius: 20px;\n\tbackground: var(--darkColor-blue);\n\tcolor: var(--whitishColor-blue);\n\tborder: none;\n\tcursor: pointer;\n}\n\n.ai-settings-modal .ai-reset-button:hover,\n.ai-settings-modal .ai-save-button:hover {\n\tbackground: var(--darkerColor-blue);\n}\n\n#aiToolsForm .ai-tool-reorder {\n\tdisplay: flex;\n\tflex-direction: row;\n\tgap: 6px;\n}\n\n#aiToolsForm .ai-tool-reorder button {\n\tbackground: color-mix(in srgb, var(--whitishColor-blue) 60%, transparent);\n\tcolor: var(--darkColor-blue);\n\tborder: 1px solid var(--darkColor-blue);\n\tborder-radius: 6px;\n\twidth: 26px;\n\theight: 22px;\n\tfont-size: 0.8rem;\n\tline-height: 1;\n\tcursor: pointer;\n\tpadding: 0;\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n}\n\n#aiToolsForm .ai-tool-reorder button:hover {\n\tcolor: var(--darkerColor-blue);\n\tborder-color: var(--darkerColor-blue);\n}\n\n#aiToolsForm .ai-tool-reorder button:active {\n\ttransform: scale(0.95);\n}\n\n#aiToolsForm .ai-tool-reorder button:disabled {\n\tcursor: not-allowed;\n\topacity: 0.4;\n}\n\n#aiToolsForm .ai-tool-reorder button:disabled:hover {\n\ttransform: none;\n}\n\n/* Animation classes for reordering */\n.reorder-animate-up {\n\tposition: relative;\n\tz-index: 10;\n\ttransform: translateY(calc(-1 * var(--move-distance)));\n\ttransition: transform 0.3s var(--md-motion-ease);\n}\n\n.reorder-animate-down {\n\tposition: relative;\n\tz-index: 5;\n\ttransform: translateY(var(--move-distance));\n\ttransition: transform 0.3s var(--md-motion-ease);\n}\n\n/* Disabled reset button styling */\n.ai-settings-modal .ai-reset-button:disabled {\n\topacity: 0.5;\n\tpointer-events: none;\n}\n\n/* Reset Animation Styles */\n@keyframes resetShake {\n\t0%,\n\t100% {\n\t\tmargin-left: 0;\n\t}\n\t25% {\n\t\tmargin-left: -1px;\n\t}\n\t75% {\n\t\tmargin-left: 1px;\n\t}\n}\n\n@keyframes resetFlash {\n\t0%,\n\t100% {\n\t\tbackground-color: var(--accentLightTint-blue);\n\t\ttransform: scale(1);\n\t}\n\t50% {\n\t\tbackground-color: color-mix(\n\t\t\tin srgb,\n\t\t\tvar(--darkColor-blue) 20%,\n\t\t\tvar(--accentLightTint-blue)\n\t\t);\n\t\ttransform: scale(1.02);\n\t}\n}\n/* -----------End of Ai-Tools---------- */\n\n/* ---------------Menu-bar-css---------------- */\n.menuBar {\n\tbackground-color: #0000004f;\n\tbackdrop-filter: blur(15px) saturate(160%);\n\tposition: fixed;\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tinset-inline-end: 0;\n\tz-index: 999;\n\topacity: 0;\n\t/*we are increasing opacity in js file*/\n\ttransition: all 0.5s;\n\toverflow: hidden;\n}\n\n.menuBar .menuCont {\n\tposition: fixed;\n\ttop: 0;\n\tinset-inline-end: 0;\n\theight: 100%;\n\twidth: 400px;\n\t/* change on some languages for fix the buttons */\n\ttransition: all 0.5s;\n\ttransform: translateX(100%);\n\tbackground-color: var(--accentLightTint-blue);\n\tborder-end-start-radius: var(--round);\n}\n\n.menuBar .menuCont .topRounder {\n\twidth: var(--round);\n\theight: var(--round);\n\tposition: absolute;\n\tinset-inline-start: -30px;\n}\n\n.menuCont .topDiv {\n\twidth: 100%;\n\theight: 140px;\n\t/*🚦🛺 🚜*/\n\tbackground-color: var(--bg-color-blue);\n\tposition: relative;\n}\n\n.menuCont .topDiv::after {\n\tposition: absolute;\n\tcontent: \"\";\n\twidth: 100%;\n\theight: var(--gap);\n\tbackground-color: var(--accentLightTint-blue);\n\tborder-top-left-radius: var(--round);\n\tborder-top-right-radius: var(--round);\n\tbottom: 0;\n}\n\n.menuCont .topDiv h1 {\n\tfont-size: 1.6rem;\n\t/* background-color: yellow; */\n\twidth: fit-content;\n\theight: fit-content;\n\tcolor: var(--textColorDark-blue);\n\tposition: absolute;\n\tinset: 0;\n\tmargin: auto;\n\ttransform: translateY(-50%);\n}\n\n.menuCont .optCont {\n\twidth: 100%;\n\theight: calc(100% - 140px);\n\t/*for this 👁️ look above at🚦🛺 🚜*/\n\t/* background-color: oldlace; */\n\ttransition: all 0.6s;\n\ttransform: translateX(100%);\n\topacity: 0;\n\toverflow-y: scroll;\n\toverflow-x: hidden;\n}\n\n.menuCont .optCont .page {\n\twidth: 100%;\n\tpadding: 0 var(--gap) var(--gap) var(--gap);\n\tposition: absolute;\n\tscroll-behavior: smooth;\n\ttransition: all 0.6s;\n}\n\n/* -----------Scrollbar for menu---------------- */\n/* For WebKit browsers (Chrome, Safari) */\n.menuCont .optCont::-webkit-scrollbar {\n\twidth: 6px;\n\t/* Width of the scrollbar */\n}\n\n/* Track */\n.menuCont .optCont::-webkit-scrollbar-track {\n\tbackground: transparent;\n\t/* Background of the track */\n}\n\n/* Handle */\n.menuCont .optCont::-webkit-scrollbar-thumb {\n\tbackground: var(--darkColor-blue);\n\t/* Color of the scrollbar handle */\n\tborder-radius: 3px;\n\t/* Rounded corners for the scrollbar handle */\n}\n\n.menuCont .optCont::-webkit-scrollbar-thumb:hover {\n\tbackground: var(--darkerColor-blue);\n\tborder-radius: 3px;\n}\n\n/* For Firefox */\n@-moz-document url-prefix() {\n\t.menuCont .optCont {\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--darkColor-blue) transparent;\n\t\t/* Handle color and track color */\n\t}\n}\n\n/* -------------End of Scrollbar for menu-------------- */\n\n.menuBar .optCont .tilesCont {\n\twidth: 100%;\n\theight: 50px;\n\t/* background-color: #17a638; */\n\tdisplay: grid;\n\tgrid-template-columns: 1fr 1fr;\n\tgap: var(--gap);\n\tmargin-bottom: var(--gap);\n}\n\n.tilesCont .tiles {\n\tbackground-color: var(--darkColor-blue);\n\tborder-radius: 20px;\n\tfont-size: 1rem;\n\tcolor: var(--accentLightTint-blue);\n\tdisplay: flex;\n\talign-items: center;\n\ttext-decoration: none;\n\ttransition: background-color 0.3s ease;\n}\n\n.tilesCont .tiles:hover {\n\tbackground-color: var(--darkerColor-blue);\n}\n\n.tilesCont .tiles .icon {\n\twidth: 24px;\n\theight: 24px;\n\tmargin-inline-start: 13px;\n\tmargin-inline-end: 13px;\n}\n\n.divider {\n\theight: 6px;\n\twidth: 33%;\n\tbackground-color: #ffffffcc;\n\tborder-radius: 3px;\n\tmargin: 20px auto;\n}\n\n#shortcutEditButton,\n#aiToolsEditButton {\n\tfill: var(--darkerColor-blue);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tborder: none;\n\tborder-radius: 34px;\n\tcursor: pointer;\n\ttransition: 0.3s all;\n\tmargin: 0 auto;\n\tbackground: none;\n\theight: 100%;\n\twidth: 100%;\n}\n\n.toggleTextsCont .ttcont.inactive {\n\topacity: 0.5;\n\tpointer-events: none;\n}\n\n/* --- 🔴⚪🟡style for toggle buttons---- */\n.switch {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmin-width: 60px;\n\theight: 34px;\n\tmargin-inline-start: 8px;\n}\n\n/* Hide the default checkbox input */\n.switch input {\n\tdisplay: none;\n}\n\n/* Styling for the slider */\n.toggle {\n\tposition: absolute;\n\tcursor: pointer;\n\tinset: 0;\n\tbackground-color: var(--bg-color-blue);\n\t/* Background color when off */\n\ttransition: 0.4s;\n\tborder-radius: 34px;\n\tdirection: ltr;\n\tunicode-bidi: isolate;\n}\n\n/* Styling for the slider when it's in the \"on\" position */\n.toggle:before {\n\tposition: absolute;\n\tcontent: \"\";\n\theight: 16px;\n\twidth: 16px;\n\tinset-inline-start: 9px;\n\tbottom: 9px;\n\tbackground-color: var(--accentLightTint-blue);\n\t/* Slider color when on */\n\ttransition: 0.175s;\n\tborder-radius: 50%;\n}\n\n/* Apply styles when the input is checked (on) */\ninput:checked + .toggle {\n\tbackground-color: var(--darkColor-blue);\n\t/* Background color when on */\n}\n\ninput:checked + .toggle:before {\n\theight: 24px;\n\twidth: 24px;\n\tinset-inline-start: 5px;\n\tbottom: 5px;\n\ttransform: translateX(26px);\n}\n\n/* --- END OF 🔴⚪🟡style for toggle buttons---- */\n\n.toggleTextsCont .ttcont {\n\tdisplay: flex;\n\tmin-height: 50px;\n\tjustify-content: space-between;\n\talign-items: center;\n\tmargin-bottom: 20px;\n}\n\n.unflex {\n\tdisplay: block !important;\n}\n\n.ttcont input {\n\twidth: 100%;\n\tcolor: var(--textColorDark-blue);\n\tbackground-color: var(--whitishColor-blue);\n\tmargin-top: 6px;\n\theight: 30px;\n\tborder-radius: 10px;\n\tborder: none;\n\toutline: none;\n\tpadding: 0 11px;\n}\n\n.ttcont input:focus {\n\tbox-shadow: 0 0 2px var(--darkColor-blue);\n}\n\n.ttcont .texts .bigText {\n\tfont-size: 1.2rem;\n\tcolor: var(--textColorDark-blue);\n}\n\n.ttcont .texts .infoText {\n\tfont-size: 0.9rem;\n\tcolor: var(--textColorDark-blue);\n\topacity: 0.86;\n\tmargin-top: -3px;\n}\n\n.bottom {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\tmargin-top: 12px;\n}\n\n.bottom a {\n\ttext-decoration: none;\n\tcolor: var(--darkColor-blue);\n\tfont-size: 1rem;\n\ttransition: color 0.3s ease;\n}\n\n.bottom a:hover {\n\tcolor: var(--darkerColor-blue);\n}\n\n.bottom button {\n\tborder: none;\n\tcolor: var(--whitishColor-blue);\n\tbackground-color: var(--darkColor-blue);\n\tpadding: 6px 20px;\n\tfont-size: 1rem;\n\tborder-radius: 100px;\n\tcursor: pointer;\n}\n\n.location-suggestion-box {\n\tposition: absolute;\n\tmargin-inline-end: var(--gap);\n\twidth: -webkit-fill-available;\n\twidth: -moz-available;\n\tbackground-color: var(--whitishColor-blue);\n\tcolor: var(--textColorDark-blue);\n\tborder-radius: 10px;\n\tmargin-top: 3px;\n\toverflow-y: auto;\n\tmax-height: 131px;\n\tdisplay: none;\n\tz-index: 1000;\n}\n\n.location-suggestion-box::-webkit-scrollbar {\n\twidth: 4px;\n}\n\n.location-suggestion-box::-webkit-scrollbar-track {\n\tbackground-color: transparent;\n\tmargin: 4px 0;\n}\n\n.location-suggestion-box::-webkit-scrollbar-thumb {\n\tbackground-color: var(--darkColor-blue);\n\tborder-radius: 2px;\n}\n\n.location-suggestion-box::-webkit-scrollbar-thumb:hover {\n\tbackground-color: var(--darkerColor-blue);\n\tborder-radius: 2px;\n}\n\n@-moz-document url-prefix() {\n\t.location-suggestion-box {\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--darkColor-blue) transparent;\n\t}\n}\n\n.location-suggestion-item {\n\tfont-size: 0.84rem;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tpadding: 6px 11px;\n\tcursor: pointer;\n\ttransition: background-color 0.2s ease-in-out;\n}\n\n.location-suggestion-item:hover,\n.location-suggestion-item.active {\n\tbackground-color: var(--darkColor-blue);\n\tcolor: var(--whitishColor-blue);\n}\n\n.location-suggestion-item:first-child {\n\tborder-radius: 10px 10px 0 0;\n}\n\n.location-suggestion-item:last-child {\n\tborder-radius: 0 0 10px 10px;\n}\n\n/* ===== Unified Section ===== */\n.section {\n\tmargin-bottom: 20px;\n}\n\n/* OUTER container */\n.sectionOuter {\n\tbackground-color: rgba(0, 0, 0, 0.07);\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--accentLightTint-blue) 60%,\n\t\tvar(--bg-color-blue)\n\t);\n\tborder-radius: 25px;\n\tpadding: 7px;\n\n\ttransition:\n\t\tborder-radius 0.25s var(--md-motion-ease),\n\t\tbackground-color 0.25s var(--md-motion-ease);\n}\n\n.sectionOuter:hover {\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--accentLightTint-blue) 40%,\n\t\tvar(--bg-color-blue)\n\t);\n}\n\n/* Header row */\n.sectionHeader {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 6px 19px;\n\tcursor: pointer;\n}\n\n/* Header title */\n.sectionTitle {\n\tfont-size: 0.9rem;\n\tfont-weight: 600;\n\tcolor: var(--textColorDark-blue);\n}\n\n/* Chevron */\n.sectionChevron {\n\twidth: 10px;\n\theight: 10px;\n\tborder-right: 3px solid var(--textColorDark-blue);\n\tborder-bottom: 3px solid var(--textColorDark-blue);\n\ttransform: rotate(45deg) translate(-3px, -2px);\n\ttransition: transform 0.25s var(--md-motion-ease);\n}\n\n/* Expanded state */\n.section.expanded .sectionChevron {\n\ttransform: rotate(-135deg) translateY(-3px);\n}\n\n/* INNER card */\n.sectionInner {\n\tbackground-color: rgba(255, 255, 255, 0.9);\n\tbackground-color: color-mix(in srgb, var(--accentLightTint-blue) 60%, white);\n\tborder-radius: 22px;\n\tpadding: 6px 14px;\n\tmargin-top: 10px;\n\n\toverflow: hidden;\n\tmax-height: 1000px; /* large enough */\n\topacity: 1;\n\ttransition:\n\t\tmax-height 0.4s var(--md-motion-ease),\n\t\topacity 0.2s var(--md-motion-ease),\n\t\tmargin-top 0.23s var(--md-motion-ease),\n\t\tpadding 0.23s var(--md-motion-ease);\n}\n\n/* Rows */\n.sectionInner .ttcont {\n\tmargin: 0;\n\tpadding: 16px 4px;\n}\n\n.sectionInner .ttcont:not(:last-child) {\n\tborder-bottom: 1px solid rgba(0, 0, 0, 0.06);\n}\n\n/* Collapse */\n.section:not(.expanded) .sectionOuter {\n\tborder-radius: 20px;\n}\n\n.section:not(.expanded) .sectionInner {\n\tmax-height: 0;\n\topacity: 0;\n\tmargin-top: 0;\n\tpadding-top: 0;\n\tpadding-bottom: 0;\n\n\ttransition:\n\t\tmax-height 0.3s cubic-bezier(0.2, 0, 0, 1),\n\t\topacity 0.2s var(--md-motion-ease),\n\t\tmargin-top 0.23s var(--md-motion-ease),\n\t\tpadding 0.23s var(--md-motion-ease);\n}\n\n.appearanceSection .sectionInner {\n\tbackground-color: transparent;\n\tborder-radius: 0;\n\tpadding: 0;\n}\n\n.appearanceSection .innerSurface {\n\tbackground-color: color-mix(in srgb, var(--accentLightTint-blue) 55%, white);\n\tborder-radius: 22px;\n\tpadding: 22px 14px;\n\tmargin-bottom: 7px;\n}\n\n.appearanceSection .innerSurface:last-child {\n\tpadding: 18px 14px;\n\tmargin-bottom: 0;\n}\n\n.black-theme .sectionOuter,\n.black-theme .appearanceSection .sectionInner {\n\tbackground-color: #222222;\n}\n\n.black-theme .sectionOuter:hover,\n.black-theme .appearanceSection .sectionInner:hover {\n\tbackground-color: #1e1e1e;\n}\n\n.black-theme .sectionInner,\n.black-theme .appearanceSection .innerSurface {\n\tbackground-color: #333333;\n}\n\n.black-theme .sectionInner .ttcont:not(:last-child) {\n\tborder-bottom: 1px solid #ffffff1a;\n}\n\n.black-theme .sectionInner .quotesOptions:not(:last-child) .ttcont:last-child {\n\tborder-bottom: 1px solid #ffffff1a;\n}\n\n.black-theme body[data-bg=\"wallpaper\"] .opacityBarControl {\n\tborder-top: 1px solid #ffffff1a;\n}\n/* ----------- End of section ------------ */\n\n.resetbtn {\n\twidth: 100%;\n\tborder: none;\n\tcolor: var(--whitishColor-blue);\n\tbackground-color: var(--darkColor-blue);\n\tpadding: 6px 20px;\n\tmargin: 23px auto 15px;\n\tfont-size: 1rem;\n\tborder-radius: 100px;\n\tcursor: pointer;\n\ttransition: background-color 0.3s ease;\n}\n\n.resetbtn:hover {\n\tbackground-color: var(--darkerColor-blue);\n}\n\n.resetbtn:active {\n\tbackground-color: var(--bg-color-blue);\n\tcolor: var(--darkerColor-blue);\n}\n\n.topBar {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\theight: 50px;\n\tposition: sticky;\n\tinset: 0;\n\tz-index: 100;\n\tbackground-color: var(--accentLightTint-blue);\n}\n\n#backButton {\n\tfill: var(--textColorDark-blue);\n\tborder: none;\n\tbackground: none;\n\tcursor: pointer;\n}\n\n.rightButtons {\n\tdisplay: flex;\n\tgap: 8px;\n}\n\n#resetButton,\n#newShortcutButton {\n\tfill: var(--textColorDark-blue);\n\tborder: none;\n\tbackground: color-mix(in srgb, var(--bg-color-blue) 80%, transparent);\n\theight: 40px;\n\twidth: 40px;\n\tpadding: 8px;\n\tborder-radius: 7px;\n\tcursor: pointer;\n\ttransition: background-color 0.3s ease, fill 0.3s ease;\n}\n\n#resetButton:hover,\n#newShortcutButton:hover {\n\tfill: white;\n\tbackground-color: var(--darkColor-blue);\n}\n\n#newShortcutButton svg {\n\ttransition: transform 0.3s ease;\n}\n\n#newShortcutButton:not(.inactive):active svg {\n\ttransform: scale(1.2);\n}\n\n#newShortcutButton.inactive {\n\topacity: 0.5;\n\tcursor: not-allowed;\n}\n\n.reset-shift-animation {\n\tanimation: resetShift 0.3s ease;\n}\n\n@keyframes resetShift {\n\t0%,\n\t100% {\n\t\tmargin-left: 0;\n\t}\n\t50% {\n\t\tmargin-left: 3px;\n\t}\n}\n\n.rotate-animation {\n\tanimation: rotate-button 0.5s ease;\n}\n\n@keyframes rotate-button {\n\tfrom {\n\t\ttransform: rotate(0deg);\n\t}\n\tto {\n\t\ttransform: rotate(-360deg);\n\t}\n}\n\n.pageTitle {\n\tmargin-top: 6px;\n\twidth: 100%;\n\tfont-size: 1.5rem;\n\tcolor: var(--textColorDark-blue);\n}\n\n#editShortcutsListInfo {\n\tfont-size: 0.74rem;\n\tmargin-top: 5px;\n\tmargin-bottom: 24px;\n\ttext-align: justify;\n\tfont-style: italic;\n}\n\n/* \n#editShortcutsListInfo::before {\n\tcontent: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'><g fill='currentColor'><path d='M8 0a.75.75 0 0 1 .75.75v1a.75.75 0 0 1-1.5 0v-1A.75.75 0 0 1 8 0m5.28 2.22a.75.75 0 0 1 0 1.06l-.707.707a.75.75 0 1 1-1.06-1.06l.707-.707a.75.75 0 0 1 1.06 0M2.72 3.28a.75.75 0 0 1 1.06-1.06l.707.707a.75.75 0 0 1-1.06 1.06zM15.5 7.5a.75.75 0 0 1-.75.75h-1a.75.75 0 0 1 0-1.5h1a.75.75 0 0 1 .75.75m-13.25.75a.75.75 0 0 0 0-1.5h-1a.75.75 0 0 0 0 1.5zm4 7A.75.75 0 0 1 7 14.5h2A.75.75 0 0 1 9 16H7a.75.75 0 0 1-.75-.75'/><path fill-rule='evenodd' d='M8 3.5A4.5 4.5 0 0 0 3.5 8c0 1.53.926 2.465 1.718 3.264l.2.203c.05.05.081.124.081.208A1.826 1.826 0 0 0 7.325 13.5H8.69c1 0 1.811-.81 1.811-1.81 0-.083.033-.159.088-.213l.067-.066C11.492 10.592 12.5 9.605 12.5 8A4.5 4.5 0 0 0 8 3.5M5 8a3 3 0 0 1 6 0c0 .928-.54 1.502-1.462 2.406-.347.34-.538.803-.538 1.283a.31.31 0 0 1-.31.311H7.324A.326.326 0 0 1 7 11.674c0-.461-.175-.914-.507-1.255l-.115-.117C5.49 9.397 5 8.894 5 8' clip-rule='evenodd'/></g></svg>\");\n\tdisplay: inline-block;\n\twidth: 14px;\n\theight: 14px;\n\tmargin-right: 2px;\n\tvertical-align: -2px;\n\topacity: 0.7;\n} */\n\n.shortcutSettingsEntry {\n\twidth: 100%;\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tmargin-bottom: 14px;\n\tbackground-color: var(--bg-color-blue);\n\tborder-radius: 13px;\n\tpadding: 9px 10px 10px;\n\tpadding-inline-start: 6px;\n\tposition: relative;\n\ttransition: transform 0.3s var(--md-motion-ease) opacity 0.2s ease;\n\t/* Enable hardware acceleration */\n\twill-change: transform, opacity;\n}\n\n.shortcutInputGroup {\n\tflex: 1;\n\tmin-width: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: center;\n\tmargin: 0 4px 0 5px;\n}\n\n.shortcutSettingsEntry:last-child {\n\tmargin-bottom: 0;\n}\n\n.shortcutSettingsEntry input {\n\twidth: 100%;\n\tbackground: none;\n\tborder: none;\n\tcolor: var(--textColorDark-blue);\n\ttext-overflow: ellipsis;\n}\n\n.shortcutSettingsEntry input:hover {\n    animation: clipText 0s 150ms forwards;\n}\n\n@keyframes clipText {\n    to { text-overflow: clip; }\n}\n\n.shortcutSettingsEntry .shortcutName {\n\tfont-size: 1.1rem;\n}\n\n.shortcutSettingsEntry .URL {\n\tfont-size: 0.76rem;\n\topacity: 0.9;\n}\n\n.shortcutSettingsEntry .iconURL {\n\tfont-size: 0.7rem;\n\topacity: 0.9;\n}\n\n.shortcutInputRow {\n    display: flex;\n    align-items: center;\n    gap: 4px;\n}\n\n.shortcutInputRow:last-child {\n\tmargin-top: 1px;\n}\n\n.shortcutInputRow svg {\n    flex-shrink: 0;\n    opacity: 0.5;\n    color: var(--textColorDark-blue);\n    pointer-events: none;\n}\n\n.shortcutInputRow input {\n    flex: 1;\n    min-width: 0;\n}\n\n/* Drag and drop styles */\n.shortcutSettingsEntry.dragging {\n\topacity: 0.5;\n\ttransform: scale(1.02);\n\tpointer-events: none;\n\ttransition: none;\n\tz-index: 1000;\n\tbackface-visibility: hidden;\n}\n\n.grip-container {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tpadding: 27px 7px;\n\tcursor: grab;\n\tcolor: var(--textColor);\n\topacity: 0.5;\n\theight: 54px;\n}\n\n.grip-container:hover {\n\topacity: 1;\n}\n\n.grip-container svg {\n\ttransform: scale(1.1);\n\tpointer-events: none;\n\ttransition: transform 0.2s ease;\n}\n\n.grip-container:hover svg {\n\ttransform: scale(1.2);\n}\n\n.shortcutSettingsEntry.dragging .grip-container {\n\tpointer-events: none;\n}\n\n/* Disable hover effects during dragging */\n.dragging-ongoing .shortcutSettingsEntry .grip-container:hover {\n\topacity: 0.5;\n}\n\n.dragging-ongoing .shortcutSettingsEntry .grip-container:hover svg {\n\ttransform: none;\n}\n\n.shortcutActions {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tmargin-inline-start: 8px;\n}\n\n.shortcutDelete button,\n.uploadCustomIconButton {\n\tfill: var(--textColorDark-blue);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 42px;\n\theight: 42px;\n\tbackground: rgba(255, 255, 255, 0.4);\n\tborder: none;\n\tborder-radius: 7px;\n\tcursor: pointer;\n\ttransition: 0.3s all;\n}\n\n/* Shared hover state for action buttons */\n.uploadCustomIconButton:not(.inactive):hover,\n.shortcutDelete button:not(.inactive):hover {\n\tfill: white;\n\tbackground: var(--darkColor-blue);\n}\n\n/* Color-specific hover for upload button */\n.uploadCustomIconButton:not(.inactive):hover {\n\tcolor: white;\n}\n\n.uploadCustomIconButton svg {\n\tpointer-events: none;\n}\n\n/* Shared inactive state for action buttons */\n.uploadCustomIconButton.inactive,\n.shortcutDelete button.inactive {\n\topacity: 0.5;\n\tcursor: not-allowed;\n}\n\n.addShortcutContainer button {\n\tfill: white;\n\tbackground: var(--darkColor-blue);\n\tposition: absolute;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 60px;\n\theight: 34px;\n\tborder: none;\n\tborder-radius: 34px;\n\tcursor: pointer;\n\ttransition: 0.3s all;\n}\n\n/* ---------------Menu-bar-css---------------- */\n\n/* --------------Language & Dark Mode Selection-------------- */\n.languageSection {\n\twidth: 100%;\n\theight: 50px;\n\tdisplay: flex;\n\tjustify-content: space-between;\n\tmargin-top: 19px;\n\tgap: 20px;\n}\n\n.languageSelector {\n\tbackground-color: var(--whitishColor-blue);\n\talign-items: center;\n\tjustify-content: center;\n\theight: fit-content;\n\tmin-width: 240px;\n\twidth: 100%;\n\tborder: 2px solid transparent;\n\t/* adding transparent border on focus it will be turned to theme color*/\n\tdisplay: grid;\n\tpadding: 12px;\n\tcolor: var(--textColorDark-blue);\n\tborder-radius: 26px;\n\tappearance: none;\n\t-moz-appearance: none;\n\tcursor: pointer;\n\tpadding-inline-start: 20px;\n\tfont-size: 0.82rem;\n\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);\n\t@-moz-document url-prefix() {\n\t\t/* Scrollbar styles for Firefox */\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--darkColor-blue) transparent;\n\t}\n\ttransition: border 0.25s var(--md-motion-ease);\n}\n\nselect:open {\n\tbackground: var(--bg-color-blue);\n}\n\noption:checked {\n\tbackground: var(--accentLightTint-blue);\n}\n\n/* Scrollbar styles for Chrome, Edge, Safari */\n.languageSelector::-webkit-scrollbar {\n\twidth: 6px;\n}\n\n.languageSelector::-webkit-scrollbar-track {\n\tbackground-color: transparent;\n}\n\n.languageSelector::-webkit-scrollbar-thumb {\n\tbackground-color: var(--darkColor-blue);\n\tborder-radius: 3px;\n}\n\n.languageSelector:hover,\n.languageSelector:focus {\n\tborder: 2px solid var(--darkColor-blue);\n\t/* color matching border on focus */\n\toutline: none;\n\t/* Removes the default outline */\n}\n\n/* --------------Theming stuff------------------ */\n.themeSegment {\n\tposition: relative;\n\tdisplay: grid;\n\tgrid-template-columns: repeat(3, 1fr);\n\tpadding: 4px;\n\tborder-radius: 30px;\n\tbackground: color-mix(\n\t\tin srgb,\n\t\tvar(--accentLightTint-blue) 60%,\n\t\tvar(--bg-color-blue)\n\t);\n\ttransition: background 0.25s var(--md-motion-ease);\n}\n\n/* Sliding pill indicator */\n.themeIndicator {\n\tposition: absolute;\n\ttop: 4px;\n\tbottom: 4px;\n\tleft: 4px;\n\twidth: calc((100% - 8px) / 3);\n\tbackground: #ffffffe6;\n\tborder-radius: 30px;\n\ttransition: transform 0.32s var(--md-motion-decelerate);\n\tz-index: 0;\n}\n\n.black-theme .themeSegment {\n\tbackground: #2a2a2a;\n}\n\n.black-theme .themeIndicator {\n\tbackground: #1e1e1e;\n}\n\n/* Segment buttons */\n.themeSegBtn {\n\tposition: relative;\n\tz-index: 1;\n\tbackground: none;\n\tborder: none;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 100%;\n\theight: 34px;\n\tfont-size: 0.86rem;\n\tline-height: 1;\n\tcursor: pointer;\n\tcolor: inherit;\n\tpadding: 0;\n}\n\n/* Divider on Dark button */\n.themeSegBtn[data-theme=\"dark\"]::after {\n\tcontent: \"\";\n\tposition: absolute;\n\ttop: 6px;\n\tbottom: 6px;\n\twidth: 1px;\n\tbackground: #ffffffe6;\n\topacity: 0;\n\ttransition: opacity 0.2s var(--md-motion-ease);\n}\n\n/* Light selected → divider on RIGHT of Dark */\n.themeSegment[data-active=\"light\"] .themeSegBtn[data-theme=\"dark\"]::after {\n\tinset-inline-end: -2px;\n\topacity: 1;\n}\n\n/* System selected → divider on LEFT of Dark */\n.themeSegment[data-active=\"system\"] .themeSegBtn[data-theme=\"dark\"]::after {\n\tinset-inline-start: -2px;\n\topacity: 1;\n}\n\n/* Dark selected → no divider */\n.themeSegment[data-active=\"dark\"] .themeSegBtn[data-theme=\"dark\"]::after {\n\tcontent: none;\n}\n/* Segmented Control ended */\n\n.themingStuff {\n\tmargin: 22px auto 100px;\n\tposition: relative;\n\twidth: 100%;\n\theight: 50px;\n\tdisplay: flex;\n\tjustify-content: space-evenly;\n\tgap: 20px;\n}\n\n.colorsContainer {\n\tbackground-color: var(--whitishColor-blue);\n\talign-items: center;\n\tjustify-content: center;\n\theight: fit-content;\n\twidth: fit-content;\n\tdisplay: grid;\n\tgrid-template-columns: repeat(5, 1fr);\n\t/* 5 divs in the first row */\n\tgrid-auto-rows: auto;\n\tgrid-gap: 10px;\n\tpadding: 10px;\n\tborder-radius: 26px;\n}\n\n.colorsContainer input[type=\"radio\"] {\n\tappearance: none;\n\t-webkit-appearance: none;\n\t-moz-appearance: none;\n\tbackground-color: var(--whitishColor-blue);\n\theight: 36px;\n\twidth: 36px;\n\tborder-radius: 18px;\n\toutline: none;\n\tcursor: pointer;\n}\n\n.colorsContainer input[value=\"blue\"] {\n\tbackground-color: #4382ec;\n}\n\n.colorsContainer input[value=\"yellow\"] {\n\tbackground-color: #ffcc00;\n}\n\n.colorsContainer input[value=\"red\"] {\n\tbackground-color: #ec4343;\n}\n\n.colorsContainer input[value=\"green\"] {\n\tbackground-color: #5cba5c;\n}\n\n.colorsContainer input[value=\"cyan\"] {\n\tbackground-color: #00ced1;\n}\n\n.colorsContainer input[value=\"orange\"] {\n\tbackground-color: #ec844d;\n}\n\n.colorsContainer input[value=\"purple\"] {\n\tbackground-color: #9563b5;\n}\n\n.colorsContainer input[value=\"pink\"] {\n\tbackground-color: #ec5e78;\n}\n\n.colorsContainer input[value=\"brown\"] {\n\tbackground-color: #705347;\n}\n\n.colorsContainer input[value=\"silver\"] {\n\tbackground-color: #9e9e9e;\n}\n\n.colorsContainer input[value=\"peach\"] {\n\tbackground: linear-gradient(45deg, #bb4dee, #f8b880);\n}\n\n.colorsContainer input[value=\"dark\"] {\n\tbackground-color: #171717;\n}\n\n.colorsContainer input[type=\"radio\"]:checked::after {\n\tposition: absolute;\n\tcontent: \"\";\n\twidth: 36px;\n\theight: 36px;\n\tbackground: url(\"./svgs/tick.svg\") center center no-repeat;\n\tbackground-size: 74%;\n}\n\n.themingStuff .btn {\n\tbackground-color: var(--whitishColor-blue);\n\theight: 100%;\n\taspect-ratio: 1/1;\n\tinset-inline-end: 0;\n\tborder-radius: 100%;\n\tz-index: 2;\n}\n\n.languageIcon {\n\tbackground-color: var(--whitishColor-blue);\n\theight: 100%;\n\taspect-ratio: 1/1;\n\tinset-inline-end: 0;\n\tborder-radius: 100%;\n\tz-index: 2;\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n}\n\n.languageIcon svg {\n\tpadding: 2px;\n}\n\n/* --------- Styling for Upload/Random/Clear Buttons --------- */\n/* Upload/Clear Buttons */\n.uploadClearContainer {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\tgap: 10px;\n}\n\n.uploadButton {\n\tfont-size: 0.95rem;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: 9px; /* Space between SVG and text */\n\tbackground-color: var(--whitishColor-blue);\n\tcolor: var(--darkColor-blue);\n\twidth: -webkit-fill-available;\n\twidth: -moz-available;\n\tpadding: 10px 12px;\n\t/*white-space: nowrap; */\n\tborder: none;\n\tborder-radius: 23px;\n\tcursor: pointer;\n\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);\n\ttransition:\n\t\tbackground-color 0.3s,\n\t\tcolor 0.3s;\n}\n\n.randomButton {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tbackground-color: var(--whitishColor-blue);\n\tcolor: var(--darkColor-blue);\n\tborder: none;\n\tborder-radius: 26px;\n\tcursor: pointer;\n\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);\n\ttransition:\n\t\tbackground-color 0.3s,\n\t\tcolor 0.3s;\n\tpadding: 10px;\n}\n\n.clearButton {\n\tpadding: 10px;\n\tcolor: var(--whitishColor-blue);\n\tbackground-color: var(--darkColor-blue);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tborder: none;\n\tborder-radius: 26px;\n\tcursor: pointer;\n\ttransition:\n\t\tbackground-color 0.3s,\n\t\tcolor 0.3s;\n}\n\n/* Hover Effects */\n.uploadButton:hover,\n.randomButton:hover {\n\tbackground-color: var(--darkColor-blue);\n\tcolor: var(--whitishColor-blue);\n}\n\n.uploadButton:active,\n.randomButton:active {\n\tbackground-color: var(--darkerColor-blue);\n}\n\n.clearButton:hover {\n\tcolor: var(--darkColor-blue);\n\tbackground-color: var(--whitishColor-blue);\n}\n\n.clearButton:active {\n\tcolor: var(--darkerColor-blue);\n}\n\n/* File input remains hidden */\n#imageUpload {\n\tdisplay: none;\n}\n\n/* --------- Style for Backup and Restore buttons --------- */\n.backupRestoreContainer {\n\twidth: 100%;\n\theight: 38px;\n\tmargin-top: 20px;\n\tdisplay: grid;\n\tgrid-template-columns: 1fr 1fr;\n\tgap: 15px;\n}\n\n.backupRestoreBtn {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: 9px;\n\tfont-size: 0.9rem;\n\tcursor: pointer;\n\tborder: none;\n\tbackground-color: var(--bg-color-blue);\n\tcolor: var(--darkerColor-blue);\n\tborder-radius: 20px;\n\ttransition: background-color 0.3s ease;\n}\n\n.backupRestoreBtn:hover {\n\tbackground-color: var(--darkColor-blue);\n\tcolor: #fffffff5;\n}\n\n.backupRestoreBtn:active {\n\tbackground-color: var(--darkerColor-blue);\n\tcolor: #fffffff5;\n}\n\n/* <!-- ----Color Picker || ColorPicker---- --> */\n#colorPicker {\n\tdisplay: none;\n}\n\n.colorPickerLabel {\n\tgrid-column: span 3;\n\twidth: 100%;\n\tbackground: var(--accentLightTint-blue);\n\theight: 100%;\n\tborder-radius: 100px;\n\tdisplay: flex;\n\ttext-align: center;\n\tjustify-content: center;\n\tfont-size: 0.8rem;\n\tline-height: 35px;\n\tcursor: pointer;\n\tborder: 2px solid transparent;\n\ttransition: background-color 0.3s ease;\n}\n\n.colorPickerLabel:hover {\n\tbackground: var(--bg-color-blue);\n}\n/* <!-- ----End of Color Picker || ColorPicker---- --> */\n\n/* -----------End of theming stuff---------------- */\n\n#menuButton {\n\tposition: fixed;\n\tinset-inline-end: var(--gap);\n\tbottom: var(--gap);\n\twidth: 50px;\n\theight: 50px;\n\tbackground-color: var(--accentLightTint-blue);\n\tborder-radius: 50%;\n\tborder: 6px solid var(--accentLightTint-blue);\n\tbox-shadow:\n\t\tinset 0 0 0 4px var(--darkColor-blue),\n\t\tinset 0 0 0 9.7px var(--accentLightTint-blue),\n\t\tinset 0 0 0 40px var(--darkColor-blue);\n\tcursor: pointer;\n}\n\n/* ---------------------- */\n#menuCloseButton {\n\tposition: relative;\n\twidth: 42px;\n\theight: 42px;\n\tmin-width: 42px;\n\tmax-width: fit-content;\n\t/* Set max-width to fit-content initially */\n\tbackground-color: var(--bg-color-blue);\n\tcolor: var(--textColorDark-blue);\n\tfont-size: 1rem;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-start;\n\tpadding-block: 6px;\n\tpadding-inline-start: 42px;\n\tpadding-inline-end: 0;\n\tborder-radius: 100px;\n\toverflow: hidden;\n\t/* Hide the overflow when content expands */\n\ttransition: all 0.4s ease;\n\tcursor: pointer;\n\tmargin-top: var(--gap);\n}\n\n#menuCloseButton:hover {\n\twidth: 100%;\n\tbackground-color: var(--whitishColor-blue);\n}\n\n#menuCloseButton::after {\n\tcontent: attr(data-lang);\n\twhite-space: nowrap;\n\topacity: 0;\n\ttransform: translateX(-20px);\n\twidth: 0;\n\tmax-width: fit-content;\n\tpadding-inline-end: 0;\n\tz-index: 1;\n\ttransition: all 0.4s ease;\n\toverflow: hidden;\n}\n\n:dir(rtl) #menuCloseButton::after {\n\ttransform: translateX(20px);\n}\n\n#menuCloseButton:hover::after {\n\twidth: 100%;\n\topacity: 1;\n\tpadding-inline-end: 11px;\n\ttransform: translateX(0px);\n}\n\n#menuCloseButton .icon {\n\tposition: absolute;\n\tinset-inline-start: 6px;\n\tbackground: radial-gradient(#fff 66%, transparent 66%);\n\twidth: 30px;\n\theight: 30px;\n\tborder-radius: 100px;\n\tz-index: 2;\n\ttransition: all 0.4s ease;\n}\n\n#menuCloseButton:hover .icon {\n\ttransform: translateX(0) rotate(90deg);\n}\n\n/* --------- Search engines Dropdown css --------- */\n.dropdown-item {\n\tdisplay: flex;\n\tgap: 8px;\n\talign-items: center;\n}\n\n.dropdown-btn {\n\tbackground: none;\n\tborder: none;\n}\n\n.dropdown {\n\tposition: relative;\n\tdisplay: inline-block;\n}\n\n.dropdown-content {\n\tbackground: var(--accentLightTint-blue);\n\tborder-radius: 16px;\n\tposition: absolute;\n\tmin-width: 160px;\n\tbox-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2);\n\tz-index: 1;\n\ttop: 50px;\n\tinset-inline-start: -15px;\n\toverflow-y: auto;\n\tmax-height: 0;\n\topacity: 0;\n\ttransition:\n\t\tmax-height 0.21s var(--md-motion-accelerate),\n\t\topacity 0.2s var(--md-motion-accelerate);\n}\n\n.dropdown-content.show {\n\tmax-height: 192px;\n\topacity: 1;\n\ttransition:\n\t\tmax-height 0.32s var(--md-motion-decelerate),\n\t\topacity 0.12s var(--md-motion-decelerate);\n}\n\n.dropdown-content::-webkit-scrollbar {\n\twidth: 4px;\n}\n\n.dropdown-content::-webkit-scrollbar-track {\n\tbackground-color: transparent;\n\tmargin: 7px 0;\n}\n\n.dropdown-content::-webkit-scrollbar-thumb {\n\tbackground-color: var(--darkColor-blue);\n\tborder-radius: 2px;\n}\n\n.dropdown-content::-webkit-scrollbar-thumb:hover {\n\tbackground-color: var(--darkerColor-blue);\n\tborder-radius: 2px;\n}\n\n/* For Firefox */\n@-moz-document url-prefix() {\n\t.dropdown-content {\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--darkColor-blue) transparent;\n\t}\n}\n\nbody[data-bg=\"wallpaper\"] .dropdown-content {\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--accentLightTint-blue) var(--transparency),\n\t\ttransparent\n\t);\n\tbackdrop-filter: blur(2px);\n}\n\n.dropdown-content .dropdown-item {\n\tpadding: 8px 16px;\n\tcursor: pointer;\n}\n\n#default-dropdown-item .engine-name {\n\tdisplay: none;\n}\n\n.dropdown-content .engine-name {\n\tfont-size: 1rem;\n}\n\n.dropdown-item {\n\tposition: relative;\n}\n\n.dropdown-item.selected:not(*[data-default]):before {\n\t/* border-radius: 16px; */\n\tcontent: \"\";\n\tposition: absolute;\n\tinset: 0;\n\tbackground-color: var(--bg-color-blue);\n\topacity: 0.8;\n\tz-index: -1;\n}\n\n#default-dropdown-item {\n\toutline: none !important;\n}\n\n*[id$=\"-dropdown\"]:not(.dropdown-content .dropdown-item:nth-child(1)) {\n\tbottom: 3px;\n}\n\n.search-dropdown .dropdown-item svg {\n\twidth: 33px;\n\theight: 33px;\n\tmargin-inline-start: 0;\n\tpadding: 4px;\n\tbackground-color: var(--darkColor-blue);\n\tfill: white;\n\tborder-radius: 100%;\n}\n\n/* Vertical carousel for search engine switching */\n/* Main transition wrapper for the icon/content */\n.dropdown-btn > * {\n\ttransition: all 0.4s var(--md-motion-ease);\n}\n\n/* Switching state - vertical slide with fade */\n.searchbar.engine-switching .dropdown-btn > * {\n\tanimation-duration: 0.4s;\n\tanimation-timing-function: var(--md-motion-ease);\n\tanimation-fill-mode: both;\n}\n\n/* Next direction - slide up and fade */\n.searchbar.engine-switching[data-switch-direction=\"next\"] .dropdown-btn > * {\n\tanimation-name: slideUpFade;\n}\n\n/* Previous direction - slide down and fade */\n.searchbar.engine-switching[data-switch-direction=\"prev\"] .dropdown-btn > * {\n\tanimation-name: slideDownFade;\n}\n\n/* Slide up with fade (for next) */\n@keyframes slideUpFade {\n\t0%,\n\t100% {\n\t\ttransform: translateY(0);\n\t\topacity: 1;\n\t}\n\t45% {\n\t\ttransform: translateY(-15px);\n\t\topacity: 0;\n\t}\n\t55% {\n\t\ttransform: translateY(15px);\n\t\topacity: 0;\n\t}\n}\n\n/* Slide down with fade (for previous) */\n@keyframes slideDownFade {\n\t0%,\n\t100% {\n\t\ttransform: translateY(0);\n\t\topacity: 1;\n\t}\n\t45% {\n\t\ttransform: translateY(15px);\n\t\topacity: 0;\n\t}\n\t55% {\n\t\ttransform: translateY(-15px);\n\t\topacity: 0;\n\t}\n}\n\n/* --------- Save button --------- */\n.savebtn {\n\ttransition:\n\t\tbackground-color 0.3s var(--md-motion-ease),\n\t\ttransform 0.2s var(--md-motion-ease);\n}\n\n.savebtn:hover {\n\ttransform: scale(1.04);\n\tbackground-color: var(--darkerColor-blue);\n}\n\n.savebtn:active {\n\ttransform: scale(0.96);\n}\n\n/* ---------------------- Loading Screen --------------------------- */\n#LoadingScreen {\n\tbackground: var(--Loading-Screen-Color);\n\tdisplay: flex;\n\tposition: fixed;\n\theight: 100%;\n\twidth: 100%;\n\tinset: 0;\n\tz-index: 99999;\n}\n\n.toggleTextsCont .ttcont:has(#hideWeatherBox) {\n\tdisplay: none;\n}\n\n/* -------media query ------------------- */\n\n@media screen and (max-width: 1400px) {\n\t.leftDiv {\n\t\ttransform: translateX(-50px);\n\t}\n\n\t.rightDiv {\n\t\ttransform: translateX(50px);\n\t}\n}\n\n@media screen and (max-width: 1200px) {\n\tbody {\n\t\tdisplay: block;\n\t}\n\n\t.centerDiv {\n\t\t/* display: grid; */\n\t\tgrid-template-columns: auto;\n\t\tpadding-bottom: 100px;\n\t\tposition: relative;\n\t\tinset-inline-start: 0;\n\t\tinset-inline-end: 0;\n\t\tmargin: 0 auto;\n\t\tpadding-top: 60px;\n\t}\n\n\t.leftDiv {\n\t\ttransform: translateX(0px);\n\t\t/* background-color: green; */\n\t\tmargin: var(--gap) 0;\n\t}\n\n\t.clock-padding-adjusted {\n\t\tpadding-top: 100px;\n\t}\n\n\t.rightDiv {\n\t\t/* position: relative;\n        width: 640px; */\n\t\ttransform: translateX(0px);\n\t\t/* background-color: rgba(0, 0, 255, 0.159); */\n\t}\n\n\t.ttteexxtt {\n\t\tposition: absolute;\n\t\t/* background-color: yellow; */\n\t\theight: fit-content;\n\t\twidth: fit-content;\n\t\tbottom: 0;\n\t\ttop: 0;\n\t\tinset-inline-start: 300px;\n\t\t/*Because Clock width is 300px*/\n\t\tmargin-block: auto;\n\t\tmargin-inline-start: var(--gap);\n\t\tmargin-inline-end: auto;\n\t}\n\t.shortcutsContainer {\n\t\trow-gap: 2rem;\n\t}\n\t#shortcuts-section {\n\t\tpadding-inline-start: 30px;\n\t\tmargin: 0 auto;\n\t\toverflow-x: scroll;\n\t\tscrollbar-width: none;\n\t\tposition: fixed;\n\t\tmax-width: 40rem;\n\t\tinset-inline-start: 0;\n\t\tbottom: 0;\n\t}\n}\n\n@media screen and (min-width: 1201px), screen and (max-width: 500px) {\n\t.weather-hidden {\n\t\tvisibility: hidden !important;\n\t\tdisplay: flex !important;\n\t}\n}\n\n@media screen and (min-width: 501px) and (max-width: 1200px) {\n\t.weather-hidden {\n\t\tdisplay: none !important;\n\t\tvisibility: visible;\n\t}\n}\n\n@media screen and (max-width: 1200px) and (min-width: 501px) {\n\t.centerDiv:has(~ .menuBar #shortcut_switchcheckbox:checked) .searchWithCont {\n\t\tdisplay: none;\n\t}\n}\n\n@media screen and (min-width: 1201px) {\n\t.clock-shifted-right {\n\t\ttransform: translateX(30px);\n\t}\n\t.clock-shifted-right-wide {\n\t\ttransform: translateX(100px);\n\t}\n}\n\n@media screen and (max-width: 720px) {\n\t:root {\n\t\t--gap: 1rem;\n\t}\n\t#shortcuts-section {\n\t\tposition: fixed;\n\t\tbottom: 62px;\n\t\twidth: 100%;\n\t\tmax-width: none;\n\t\toverflow-x: scroll;\n\t\toverflow-y: clip;\n\t}\n\t.shortcutsContainer {\n\t\tmax-width: none;\n\t\tflex-wrap: nowrap;\n\t}\n\t#shortcuts-section .wrapper {\n\t\twidth: 100%;\n\t}\n\t#shortcuts-section:has(~ .menuBar #shortcut_switchcheckbox:checked)\n\t\t.shortcutsContainer {\n\t\tmargin-top: 0;\n\t\tflex-wrap: nowrap;\n\t}\n\t.menuBar {\n\t\t--gap: 30px;\n\t}\n\t.centerDiv {\n\t\twidth: calc(100% - 4rem);\n\t\tmargin-bottom: 10rem;\n\t\talign-self: center;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t}\n\t.leftDiv {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tposition: relative;\n\t\ttop: 30px;\n\t}\n\t.clock-hidden-left {\n\t\tdisplay: none;\n\t}\n\t.rightDiv {\n\t\tscale: 0.75;\n\t}\n\t.ttteexxtt {\n\t\tdisplay: none;\n\t}\n}\n\n@media screen and (max-width: 500px) {\n\tbody {\n\t\tdisplay: flex;\n\t\tmin-height: fit-content;\n\t\tflex-direction: column;\n\t\tjustify-content: start;\n\t\tpadding-top: 60px;\n\t}\n\t.menuBar {\n\t\ttop: 0;\n\t}\n\t.searchbar {\n\t\twidth: 94vw;\n\t\ttransform-origin: top left;\n\t\tscale: 2;\n\t\tmargin-top: -1rem;\n\t\tmargin-left: calc(320px - 94vw);\n\t\tmargin-bottom: 3rem;\n\n\t\t& #searchQ {\n\t\t\tmin-width: 0;\n\t\t}\n\t}\n\t#enterBtn {\n\t\tdisplay: none;\n\t}\n\t#shortcuts-section {\n\t\theight: auto;\n\t\tposition: relative;\n\t\tscale: 0.85;\n\t\twidth: calc(100vw / 0.85);\n\t\tmargin-left: calc(50vw - 50vw / 0.85);\n\t\tmargin-top: 0;\n\t\tmax-width: unset;\n\t\tbottom: 0;\n\t}\n\t.todoListCont {\n\t\ttransform-origin: top left;\n\t\tscale: 0.8;\n\t}\n\t.todo-container {\n\t\ttransform-origin: top left;\n\t\tscale: 0.85;\n\t\tposition: fixed;\n\t}\n\t.googleAppsCont {\n\t\ttransform-origin: top right;\n\t\tscale: 0.8;\n\t}\n\t.bookmark-button {\n\t\ttransform-origin: top right;\n\t\tscale: 0.8;\n\t}\n\t.icon-container {\n\t\ttransform-origin: top right;\n\t\tscale: 0.85;\n\t\tposition: fixed;\n\t}\n\t#menuButton {\n\t\ttransform-origin: bottom right;\n\t\tscale: 0.8;\n\t}\n\t.aiToolsCont {\n\t\ttransform-origin: bottom left;\n\t\tscale: 0.8;\n\t\tmax-width: calc(100% - 30px);\n\t}\n\t.leftDiv {\n\t\tdisplay: flex;\n\t\twidth: calc(100vw / 0.5);\n\t\ttop: 0;\n\t\tscale: 0.5;\n\t\ttransform-origin: left bottom;\n\t\t/* margin-top: -84%; */\n\t\theight: 50vw;\n\t\tmargin-left: calc(100vw);\n\t\talign-items: end;\n\t\tjustify-content: flex-start;\n\t}\n\t.clock .centerPoint {\n\t\twidth: calc(20% / 3);\n\t\theight: calc(20% / 3);\n\t}\n\t.clock .centerPoint .sui {\n\t\theight: 500%;\n\t\twidth: 100%;\n\t\ttop: -450%;\n\t\tborder-radius: 60px;\n\t}\n\t#hour {\n\t\theight: 400%;\n\t\ttop: -350%;\n\t}\n\t#second::after {\n\t\twidth: 100%;\n\t\taspect-ratio: 1;\n\t\theight: auto;\n\t\ttop: calc(-160% / 7);\n\t}\n\t#minute::after,\n\t#hour::after {\n\t\twidth: 100%;\n\t\taspect-ratio: 0.5;\n\t\theight: auto;\n\t}\n\t#analogClock,\n\t#digitalClock {\n\t\twidth: 45%;\n\t\tmargin-inline-start: 5%;\n\t\taspect-ratio: 1;\n\t\theight: auto;\n\t}\n\t.rightDiv {\n\t\tscale: 0.5;\n\t\tmargin-top: -64px;\n\t\tmargin-bottom: -32px;\n\t\tdisplay: flex;\n\t\tflex-direction: column-reverse;\n\n\t\t& .topDiv {\n\t\t\ttop: 80px;\n\t\t\tposition: relative;\n\t\t\tscale: 1.5;\n\t\t\twidth: calc(94vw / 0.75);\n\t\t\tmargin-left: calc(320px - 94vw / 1.5);\n\n\t\t\t& .rAndakar {\n\t\t\t\tanimation: none;\n\t\t\t\tposition: absolute;\n\t\t\t\t/* display: none; */\n\t\t\t\twidth: 45%;\n\t\t\t\taspect-ratio: 1;\n\t\t\t\theight: auto;\n\t\t\t\tbottom: 20rem;\n\t\t\t\t/* scale: 1.2; */\n\t\t\t\ttransform-origin: center;\n\t\t\t}\n\t\t}\n\t\t#temp {\n\t\t\tfont-size: 16vw;\n\t\t}\n\t\t#wIcon {\n\t\t\twidth: 25vw;\n\t\t\theight: 25vw;\n\t\t\tmargin-top: -5vw;\n\t\t\tmargin-left: -13vw;\n\t\t}\n\t}\n\t.toggleTextsCont .ttcont:has(#hideWeatherBox) {\n\t\tdisplay: flex;\n\t}\n\t.toggleTextsCont .ttcont:has(#hideClock) {\n\t\tdisplay: none;\n\t}\n\t.toggleTextsCont .ttcont:has(#shortcut_switchcheckbox) {\n\t\tdisplay: none;\n\t}\n\t.toggleTextsCont .ttcont:has(#motivationalQuotesCheckbox) {\n\t\tdisplay: none;\n\t}\n\t.quotesOptions,\n\t.toggleTextsCont .ttcont:has(#newQuoteOnRefreshCheckbox) {\n\t\tdisplay: none;\n\t}\n\t.quotesContainer,\n\t.authorWrapper {\n\t\tdisplay: none;\n\t}\n\t.searchbar .searchIcon:nth-of-type(1) {\n\t\tdisplay: none !important;\n\t}\n\t.searchbar .searchIcon:nth-of-type(2) {\n\t\tdisplay: block !important;\n\t}\n\t.centerDiv:has(~ .menuBar #digitalCheckbox:checked) {\n\t\t& .leftDiv {\n\t\t\tmargin-top: -6vw;\n\t\t}\n\t\t& .rAndakar {\n\t\t\tscale: 0.8;\n\t\t}\n\t}\n\t.centerDiv:has(~ .menuBar #hideWeatherCard:checked) .topDiv .lrectangle {\n\t\tdisplay: none;\n\t}\n\t.centerDiv {\n\t\tposition: relative;\n\t\tmargin-bottom: 6rem;\n\t\tpadding-top: 0;\n\t}\n\t.resultBox {\n\t\tscale: 1.5;\n\t\twidth: calc(94vw / 0.75);\n\t\tmargin-left: calc(320px - 94vw);\n\t\ttransform-origin: top left;\n\t\t&:dir(rtl) {\n\t\t\tmargin-right: calc(320px - 31vw);\n\t\t}\n\t}\n\t.resultBox {\n\t\ttop: 120px;\n\t\tbottom: unset;\n\t}\n\t.resultBox.show {\n\t\ttransform: translateY(36px);\n\t}\n\t.searchWithCont {\n\t\tdisplay: none !important;\n\t}\n\t.searchEnginesContainer {\n\t\tdisplay: none;\n\t}\n\t.shortcutsContainer[style=\"display: none;\"] {\n\t\tdisplay: flex !important;\n\t}\n\t.hangno:has(\n\t\t+ :is(\n\t\t\t.toolsCont[style=\"display: flex; opacity: 1; transform: translateX(0px); gap: 12px;\"],\n\t\t\t.toolsCont[style=\"display: flex; opacity: 0; transform: translateX(-100%); gap: 0;\"]\n\t\t)\n\t) {\n\t\t& .icon {\n\t\t\tmargin: 0;\n\t\t}\n\t\t& .label {\n\t\t\twidth: 0;\n\t\t\topacity: 0;\n\t\t\tpointer-events: none;\n\t\t}\n\t}\n\t.shortcutsContainer {\n\t\tmargin: 0;\n\t\twidth: fit-content;\n\t\tgap: 1.8rem;\n\t\tflex-wrap: nowrap;\n\t\tmax-width: unset;\n\t\tpadding: 20px 0;\n\t}\n\t#shortcuts-section {\n\t\tpadding-left: 30px;\n\t\toverflow-x: scroll;\n\t\tscrollbar-width: none;\n\t\tposition: fixed;\n\t\tbottom: 62px;\n\t\tmax-width: unset;\n\t\tleft: 0;\n\t}\n\t#shortcuts-section .wrapper {\n\t\twidth: 100%;\n\t}\n\t#prompt-modal-container {\n\t\twidth: 86% !important;\n\t}\n}\n\n@media screen and (max-width: 425px) and (max-height: 700px) {\n\t.resultBox {\n\t\tbottom: -32px;\n\t}\n}\n\n/* ------------------- Dark(Black) theme ------------------- */\n.black-theme .search-engine input[type=\"radio\"]:checked {\n\tbackground-color: #2a2a2a;\n\tborder: 2px solid #919191;\n}\n\n.black-theme .search-engine input[type=\"radio\"] {\n\tbackground-color: #9d9d9d;\n\tborder: 0 solid #000000;\n}\n\n.black-theme .colorsContainer {\n\tbackground-color: var(--darkColor-dark);\n}\n\n.black-theme #themeButton {\n\tbackground-color: var(--darkColor-dark);\n}\n\n.black-theme #themeIconSvg,\n.black-theme #languageSelectorIconSvg {\n\tfill: #cdcdcd !important;\n}\n\n.black-theme .languageIcon,\n.black-theme .languageSelector {\n\tbackground-color: var(--darkColor-dark);\n\tscrollbar-color: var(--darkerColor-blue) transparent;\n}\n\n.black-theme .languageSelector::-webkit-scrollbar-thumb,\n.black-theme .languageSelector::-webkit-scrollbar-thumb:hover {\n\tbackground-color: var(--darkerColor-blue);\n}\n\n.black-theme .bottom a {\n\tcolor: #a1a1a1;\n}\n\n.black-theme .ttcont input {\n\tbackground-color: var(--darkColor-dark) !important;\n}\n\n.black-theme input:checked + .toggle {\n\tbackground-color: #aaaaaa;\n}\n\n.black-theme .tilesCont .tiles {\n\tcolor: #e8e8e8;\n}\n\n.black-theme .resetbtn:hover {\n\tbackground-color: var(--bg-color-dark);\n}\n\n.black-theme .resetbtn:active {\n\tbackground-color: #4e4e4e;\n}\n\n.black-theme .savebtn:hover {\n\tbackground-color: var(--bg-color-dark);\n}\n\n.black-theme .tiles:hover {\n\tbackground-color: var(--bg-color-dark);\n}\n\n.black-theme .bottom a:hover {\n\tcolor: var(--darkerColor-blue);\n}\n\n.black-theme #searchQ {\n\tcolor: #fff;\n}\n\n.black-theme #enterBtn:hover {\n\tbackground-color: #0e0e0e !important;\n}\n\n.black-theme .searchbar.active {\n\toutline: 2px solid #696969;\n}\n\n.black-theme #searchIconDark {\n\tfill: #bbb;\n}\n\n.black-theme .dropdown-item.selected:not(*[data-default]):before {\n\tbackground-color: #707070;\n}\n\n.black-theme #micIconPath {\n\tfill: var(--darkColor-dark);\n}\n\n.black-theme .tilesContainer .tiles {\n\tbackground-color: var(--darkColor-dark) !important;\n}\n\n.black-theme #darkFeelsLikeIcon {\n\tfill: #fff;\n}\n\n.black-theme .humidityBar .slider {\n\tbackground-color: var(--darkColor-dark) !important;\n}\n\n.black-theme .humidityBar .thinLine,\n.black-theme .opacityBar .thinLine {\n\tbackground-color: #aaaaaa;\n}\n\n.black-theme .search-engine .search-engine-icon,\n.black-theme .aiDarkIcons {\n\tfill: #bbbbbb !important;\n}\n\n.black-theme .divider {\n\tbackground-color: #cdcdcd;\n}\n\n.black-theme .shortcutDarkColor {\n\tfill: var(--accentLightTint-dark) !important;\n}\n\n.black-theme #darkLightTint {\n\tfill: #bfbfbf !important;\n}\n\n.black-theme .shortcutsContainer .shortcuts .shortcutLogoContainer {\n\tbackground: radial-gradient(circle, #bfbfbf 66%, transparent 66%);\n\t&:not(:has(svg)) {\n\t\tbackground: var(--accentLightTint-blue);\n\t}\n}\n\n.black-theme .digiclock {\n\tfill: #909090;\n}\n\n.black-theme .uploadButton,\n.black-theme .randomButton {\n\tbackground-color: var(--darkColor-blue);\n\tcolor: var(--whitishColor-dark);\n}\n\n.black-theme .clearButton {\n\tcolor: var(--textColorDark-dark);\n}\n\n.black-theme .clearButton:hover {\n\tbackground-color: var(--whitishColor-dark);\n\tcolor: var(--darkColor-dark);\n}\n\n.black-theme .clearButton:active {\n\tcolor: #000000;\n}\n\n.black-theme .backupRestoreBtn {\n\tbackground-color: var(--darkColor-dark);\n}\n\n.black-theme .backupRestoreBtn:hover,\n.black-theme .uploadButton:hover,\n.black-theme .randomButton:hover,\n.black-theme #todoAdd:hover {\n\tbackground-color: var(--bg-color-dark);\n}\n\n.black-theme .uploadButton:active,\n.black-theme .randomButton:active,\n.black-theme .backupRestoreBtn:active,\n.black-theme .resetbtn:active {\n\tbackground-color: #0e0e0e;\n}\n\n.black-theme .todolistitem .todoremovebtn {\n\tcolor: #616161;\n}\n\n.black-theme .todolistitem .todoremovebtn:hover {\n\tcolor: #888888;\n}\n\n.black-theme .todolistitem .todoeditbtn {\n\tcolor: #616161;\n}\n\n.black-theme .todolistitem .todoeditbtn:hover {\n\tcolor: #888888;\n}\n\n.black-theme .bookmark-view-as-button,\n.black-theme .bookmark-sort-button {\n\tcolor: var(--darkerColor-dark);\n\tborder-color: var(--darkColor-blue);\n}\n\n.black-theme #bookmarkViewGrid.active,\n.black-theme #bookmarkViewList.active,\n.black-theme .bookmark-sort-button.active {\n\tbackground: var(--darkColor-blue);\n\tcolor: white !important;\n}\n\n.black-theme #bookmarkSearch {\n\tbackground-color: var(--darkColor-dark) !important;\n}\n\n.black-theme .bookmark-search-container::after {\n\tfilter: none;\n}\n\n.black-theme .bookmark-button svg {\n\tfill: var(--textColorDark-blue);\n}\n\n.black-theme .button-group {\n\tbackground-color: #333333;\n}\n\n.black-theme #bookmarkList:is(.grid-view) li a:has(.favicon)::after,\n.black-theme #bookmarkList:is(.grid-view) li a:has(.favicon)::before {\n\tbackground: var(--darkColor-dark);\n}\n\n.black-theme .ai-settings-modal .ai-reset-button:hover,\n.black-theme .ai-settings-modal .ai-save-button:hover {\n\tbackground: #353535;\n}\n\n.black-theme .aiToolsCont .toolsCont a:hover {\n\tbox-shadow: inset 0 0 0 1px var(--darkerColor-dark);\n}\n\n.black-theme .favicon {\n\tfilter: drop-shadow(0 0 2px rgba(255, 255, 255, 0.3));\n}\n\n.black-theme .micIcon,\n.black-theme .floating-label-field input {\n\tbackground-color: var(--whitishColor-dark);\n}\n\n.black-theme body[data-bg=\"wallpaper\"] .micIcon {\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--whitishColor-dark) calc(var(--transparency) * 2),\n\t\ttransparent\n\t);\n}\n\n.black-theme #searchQ::placeholder {\n\tcolor: #909090 !important;\n}\n\n.black-theme .floating-label-field input:focus + label,\n.black-theme .floating-label-field input:not(:placeholder-shown) + label {\n\tcolor: var(--textColorDark-dark);\n}\n\n.black-theme #editBookmarkModal button {\n\tbackground-color: var(--accentLightTint-dark);\n}\n\n.black-theme #editBookmarkModal button:hover {\n\tbackground-color: #353535;\n}\n\n.black-theme #minute,\n.black-theme #minute::after,\n.black-theme #second::after {\n\tbackground-color: #909090;\n}\n\n.black-theme .dot-icon {\n\tfill: #bfbfbf;\n}\n\n.black-theme .menuicon {\n\tcolor: #c2c2c2;\n}\n\n.black-theme #menuButton {\n\tborder: 6px solid var(--accentLightTint-blue);\n\tbox-shadow:\n\t\tinset 0 0 0 4px #858585,\n\t\tinset 0 0 0 9.7px var(--accentLightTint-blue),\n\t\tinset 0 0 0 40px #bfbfbf;\n}\n\n.black-theme #menuCloseButton,\n.black-theme #menuCloseButton:hover {\n\tbackground-color: var(--darkColor-dark);\n}\n\n.black-theme #menuCloseButton .icon {\n\tbackground: radial-gradient(#cdcdcd 66%, transparent 66%);\n}\n\n.black-theme #closeBtnX {\n\tborder: 2px solid #bdbdbd;\n\tborder-radius: 100px;\n}\n\n.black-theme #menuCloseBtnIcon {\n\tfill: var(--darkColor-dark);\n}\n\n.black-theme body {\n\tbackground-color: #000000;\n}\n\n.black-theme #aiIcon {\n\tfill: #c2c2c2 !important;\n}\n\n.black-theme .tempUnit {\n\tcolor: #dadada;\n}\n\n.black-theme #githab,\n.black-theme #sujhaw {\n\tfill: #b1b1b1;\n}\n\n.black-theme .resultItem.active {\n\tbackground-color: var(--darkColor-dark);\n}\n\n.black-theme .location-suggestion-box {\n\tbackground-color: #272727;\n}\n\n.black-theme .location-suggestion-item.active {\n\tbackground-color: var(--bg-color-dark);\n}\n\n.black-theme .shortcutSettingsEntry {\n\tbackground-color: var(--bg-color-dark);\n}\n\n.black-theme #resetButton,\n.black-theme #newShortcutButton,\n.black-theme .shortcutDelete button,\n.black-theme .uploadCustomIconButton {\n\tbackground: #232221;\n}\n\n.black-theme #resetButton:hover,\n.black-theme #newShortcutButton:hover{\n\tfill: #e4e4e4;\n\tbackground: #282828;\n}\n\n.black-theme .uploadCustomIconButton:hover,\n.black-theme .shortcutDelete button:hover {\n\tbackground: #404040;\n}\n\n.black-theme .prompt-modal-ok {\n\tbackground: var(--bg-color-dark);\n\tcolor: var(--textColorDark-dark);\n}\n\n.black-theme .prompt-modal-cancel {\n\tbackground: var(--darkColor-dark);\n\tcolor: var(--textColorDark-dark);\n}\n\n.black-theme .prompt-modal-ok:hover {\n\tbackground: black;\n}\n\n.black-theme .prompt-modal-cancel:hover {\n\tbackground: var(--bg-color-dark);\n}\n\n.black-theme .prompt-modal-button:focus {\n\toutline: 2px solid black;\n}\n\n.black-theme .tips {\n\tbackground-color: var(--darkColor-dark);\n}\n\n.black-theme #dontShowTips {\n\tbackground-color: var(--bg-color-dark);\n}\n\n.black-theme #dontShowTips:hover {\n\tbackground-color: var(--accentLightTint-dark);\n}\n/* ---------------- End of Dark(Black) theme ---------------- */\n\n/* Alert & Confirm Modal */\n#prompt-modal-container {\n\tdisplay: none;\n\tposition: fixed;\n\tz-index: 1001;\n\tleft: 50%;\n\ttop: 50%;\n\ttransform: translate(-50%, -50%);\n\twidth: 400px;\n\tbackground: var(--accentLightTint-blue);\n\tcolor: var(--textColorDark-blue);\n\tborder-radius: var(--round);\n\tfilter: drop-shadow(0 0 10px rgba(0, 0, 0, 0.3));\n\tpadding: 30px 35px;\n}\n\n/* Background blur overlay */\n#prompt-modal-blur,\n.ai-modal-overlay {\n\tposition: fixed;\n\tinset: 0;\n\twidth: 100%;\n\theight: 100%;\n\tbackground: rgba(0, 0, 0, 0.3);\n\tz-index: 1000;\n}\n\n#prompt-modal-blur {\n\tdisplay: none;\n}\n\n/* Modal Content */\n#prompt-modal-box {\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 13px;\n\talign-items: center;\n}\n\n/* Modal Message */\n#prompt-modal-message {\n\t/* text-align: center; */\n\tfont-size: 0.94rem;\n\tcolor: var(--textColorDark-blue);\n\tmargin-bottom: 15px;\n}\n\n/* Modal Buttons */\n#prompt-modal-buttons {\n\tdisplay: flex;\n\tjustify-content: center;\n\twidth: 100%;\n\tgap: 20px;\n}\n\n/* Button Styling */\n.prompt-modal-button {\n\tmin-width: 80px;\n\tpadding: 8px 18px;\n\tfont-size: 0.9rem;\n\tborder: none;\n\toutline: none;\n\tcursor: pointer;\n\ttransition: 0.3s ease-in-out;\n\tborder-radius: var(--round);\n\ttext-align: center;\n}\n\n/* OK/Yes Button */\n.prompt-modal-ok {\n\tbackground: var(--darkColor-blue);\n\tcolor: white;\n}\n\n.prompt-modal-ok:hover {\n\tbackground: var(--darkerColor-blue);\n}\n\n/* Cancel/No Button */\n.prompt-modal-cancel {\n\tbackground: var(--bg-color-blue);\n\tcolor: var(--textColorDark-blue);\n}\n\n.prompt-modal-cancel:hover {\n\tbackground: var(--darkColor-blue);\n\tcolor: white;\n}\n\n.prompt-modal-button:focus {\n\toutline: 2px solid var(--darkerColor-blue);\n\toutline-offset: 3px;\n}\n/* ---------------- End of Alert & Confirm Modal ---------------- */\n\n.tips {\n\tmargin-top: 30px;\n\tdisplay: grid;\n\tgap: 12px;\n\tbackground-color: var(--bg-color-blue);\n\tbackground-color: color-mix(\n\t\tin srgb,\n\t\tvar(--accentLightTint-blue) 40%,\n\t\tvar(--bg-color-blue)\n\t);\n\tpadding: 18px 20px;\n\tborder-radius: 20px;\n}\n\n#dontShowTips {\n\tborder: none;\n\tdisplay: block;\n\tpadding: 6px 10px;\n\tbackground-color: var(--darkColor-blue);\n\tcolor: white;\n\tborder-radius: 16px;\n\tmargin-top: 5px;\n}\n\n#dontShowTips:hover {\n\tbackground-color: var(--darkerColor-blue);\n}\n.tips .ttcont .texts .bigText {\n\tfont-size: 1rem;\n}\n\n.tips .ttcont .texts .infoText {\n\tfont-size: 0.8rem;\n}\n\n/* ----------------- Toast ----------------- */\n#chromeFooterToast {\n\tposition: fixed;\n\tbottom: 30px;\n\tleft: 30px;\n\twidth: 400px;\n\tborder-radius: 22px;\n\toverflow: hidden;\n\ttransform: translateY(100px);\n\topacity: 0;\n\ttransition: all 0.5s var(--md-motion-ease);\n\tz-index: 9999;\n\tpointer-events: none;\n}\n\n#chromeFooterToast.show {\n\ttransform: translateY(0);\n\topacity: 1;\n\tpointer-events: auto;\n}\n\n/* === TOP TIMER BAR === */\n.toast-timer {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\theight: 4px;\n\twidth: 100%;\n\tbackground: transparent;\n\tz-index: 20;\n}\n\n.toast-timer-bar {\n\theight: 100%;\n\twidth: 100%;\n\tbackground: var(--darkerColor-blue);\n\ttransition: width 0.1s linear;\n}\n\n.black-theme .toast-timer-bar {\n\tbackground: var(--darkColor-dark);\n}\n\n/* === Liquid Glass Base === */\n.liquidGlass-wrapper {\n\tposition: relative;\n\tpadding: 24px;\n\tpadding-inline-end: 40px;\n\tborder-radius: 22px;\n\toverflow: hidden;\n\tdisplay: flex;\n\talign-items: flex-start;\n\tbox-shadow:\n\t\t0 6px 6px rgba(0, 0, 0, 0.25),\n\t\t0 0 22px rgba(0, 0, 0, 0.16);\n}\n\n/* Blur distortion */\n.liquidGlass-effect {\n\tposition: absolute;\n\tinset: 0;\n\tbackdrop-filter: blur(5px);\n\tfilter: url(#glass-distortion);\n\tz-index: 1;\n}\n\n/* Tint layer */\n.liquidGlass-tint {\n\tposition: absolute;\n\tinset: 0;\n\tbackground: rgba(255, 255, 255, 0.55);\n\tz-index: 2;\n}\n\n/* Shine */\n.liquidGlass-shine {\n\tposition: absolute;\n\tinset: 0;\n\tbox-shadow:\n\t\tinset 2px 2px 1px rgba(255, 255, 255, 0.55),\n\t\tinset -1px -1px 1px rgba(255, 255, 255, 0.45);\n\tz-index: 4;\n}\n\n/* === Content === */\n.toast-content {\n\tposition: relative;\n\tz-index: 20;\n\tdisplay: flex;\n\tgap: 14px;\n\talign-items: flex-start;\n\twidth: 100%;\n\tpadding-inline-start: 34px;\n\tpadding-block: 10px;\n}\n\n/* Vertical bar */\n.toast-bar-vertical {\n\tposition: absolute;\n\tinset-inline-start: 0;\n\ttop: 50%;\n\ttransform: translateY(-50%);\n\twidth: 9px;\n\theight: calc(100% - 12px);\n\tborder-radius: 10px;\n\tbackground: var(--darkColor-blue);\n\tz-index: 10;\n}\n\n.toast-body {\n\tflex: 1;\n}\n\n.toast-title {\n\tfont-size: 1.15rem;\n\tfont-weight: 700;\n\tcolor: var(--darkColor-blue);\n\tmargin-bottom: 8px;\n\ttext-shadow: 0 1px 3px rgba(255, 255, 255, 0.85);\n}\n\n.toast-message {\n\tfont-size: 0.96rem;\n\tcolor: black;\n\tline-height: 1.5;\n\ttext-shadow: 0 1px 2px rgba(255, 255, 255, 0.85);\n}\n\n/* Close button */\n.toast-close {\n\tposition: absolute;\n\ttop: 12px;\n\tinset-inline-end: 12px;\n\twidth: 24px;\n\theight: 24px;\n\tborder: none;\n\tbackground: transparent;\n\tcursor: pointer;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tborder-radius: 6px;\n\tz-index: 30;\n}\n\n.toast-close:hover {\n\tbackground: rgba(0, 0, 0, 0.1);\n}\n\n.toast-close svg {\n\twidth: 100%;\n\theight: 100%;\n\tpadding: 4px;\n\tcolor: var(--textColorDark-blue);\n\topacity: 0.85;\n}\n\n.black-theme .toast-close svg {\n\tcolor: var(--darkColor-dark);\n}\n/* ------------ End of Toast---------- */\n"
  },
  {
    "path": "svgs/0 Don't DELETE any of them",
    "content": ""
  },
  {
    "path": "tools/languagesAnalysis.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\n    <link rel=\"shortcut icon\" href=\"../favicon/icon48.png\" type=\"image/png\">\n    <title>MYNT Language Key Analysis</title>\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n    <link href=\"https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\n    <link rel=\"stylesheet\" href=\"../style.css\">\n    <style>\n        .mynt-lka {\n            --mynt-round: 20px;\n            --mynt-gap: 16px;\n            --mynt-shadow: 0 4px 12px rgba(27, 48, 65, 0.08);\n            --mynt-shadow-hover: 0 6px 20px rgba(27, 48, 65, 0.12);\n            font-family: var(--main-font-family);\n            margin: 0;\n            padding: 0;\n            min-height: 100vh;\n            background: var(--bg-color-blue);\n            color: var(--textColorDark-blue);\n            display: flex;\n            flex-direction: column;\n            align-items: stretch;\n            justify-content: flex-start;\n            scroll-behavior: smooth;\n            transition: background 0.3s ease, color 0.3s ease;\n        }\n\n        .mynt-lka.dark-mode {\n            background: #0f1a28;\n            color: var(--whitishColor-blue);\n            --mynt-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n            --mynt-shadow-hover: 0 2px 8px rgba(0, 0, 0, 0.2);\n        }\n\n        /* ── Header ── */\n        .mynt-lka .tool-header {\n            background: linear-gradient(135deg, var(--darkColor-blue) 0%, var(--darkerColor-blue) 100%);\n            color: var(--whitishColor-blue);\n            padding: 0.8rem 2rem;\n            box-shadow: var(--mynt-shadow);\n            position: sticky;\n            top: 0;\n            z-index: 10;\n            animation: mynt-headerSlide 0.5s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n        }\n\n        @keyframes mynt-headerSlide {\n            from {\n                opacity: 0;\n                transform: translateY(-12px);\n            }\n\n            to {\n                opacity: 1;\n                transform: translateY(0);\n            }\n        }\n\n        .mynt-lka .tool-header-inner {\n            width: 100%;\n            margin: 0 auto;\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            gap: var(--mynt-gap);\n        }\n\n        .mynt-lka .tool-brand {\n            display: flex;\n            align-items: center;\n            gap: 0.75rem;\n        }\n\n        .mynt-lka .tool-brand-icon {\n            width: 40px;\n            height: 40px;\n            background: rgba(255, 255, 255, 0.2);\n            border-radius: 12px;\n            object-fit: contain;\n            padding: 4px;\n            box-sizing: border-box;\n        }\n\n        .mynt-lka .tool-brand h1 {\n            margin: 0;\n            font-size: 1.25rem;\n            font-weight: 700;\n            letter-spacing: 0.02em;\n        }\n\n        .mynt-lka .tool-brand span {\n            font-size: 0.75rem;\n            opacity: 0.9;\n            font-weight: 400;\n        }\n\n        /* ── Theme toggle ── */\n        .mynt-lka .theme-selector {\n            display: flex;\n            background: rgba(255, 255, 255, 0.2);\n            border-radius: 10px;\n            padding: 3px;\n            gap: 2px;\n        }\n\n        .mynt-lka .theme-btn {\n            padding: 0.4rem 0.9rem;\n            border: none;\n            border-radius: 8px;\n            cursor: pointer;\n            font-size: 0.85rem;\n            font-weight: 500;\n            font-family: inherit;\n            color: rgba(255, 255, 255, 0.8);\n            background: transparent;\n            transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n        }\n\n        .mynt-lka .theme-btn:hover {\n            color: var(--whitishColor-blue);\n            background: rgba(255, 255, 255, 0.15);\n        }\n\n        .mynt-lka .theme-btn.active {\n            background: var(--whitishColor-blue);\n            color: var(--darkerColor-blue);\n        }\n\n        .mynt-lka .theme-btn.active:hover {\n            background: rgba(255, 255, 255, 0.95);\n        }\n\n        /* ── Layout ── */\n        .mynt-lka main {\n            flex: 1;\n            padding: 1.5rem;\n            max-width: 900px;\n            margin: 0 auto;\n            width: 100%;\n        }\n\n        /* ── Cards ── */\n        .mynt-lka .card {\n            background: var(--accentLightTint-blue);\n            border-radius: var(--mynt-round);\n            padding: 1.25rem 1.5rem;\n            margin-bottom: 1.25rem;\n            box-shadow: var(--mynt-shadow);\n            border: 1px solid rgba(67, 130, 236, 0.15);\n            transition: box-shadow 0.2s ease, border-color 0.2s ease, transform 0.2s ease;\n            animation: mynt-cardFade 0.5s cubic-bezier(0.4, 0, 0.2, 1) backwards;\n        }\n\n        .mynt-lka .card:nth-child(1) {\n            animation-delay: 0.1s;\n        }\n\n        .mynt-lka .card:nth-child(2) {\n            animation-delay: 0.2s;\n        }\n\n        @keyframes mynt-cardFade {\n            from {\n                opacity: 0;\n                transform: translateY(16px);\n            }\n\n            to {\n                opacity: 1;\n                transform: translateY(0);\n            }\n        }\n\n        .mynt-lka.dark-mode .card {\n            background: rgba(54, 105, 178, 0.22);\n            border-color: rgba(67, 130, 236, 0.25);\n            box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n        }\n\n        .mynt-lka .card:hover {\n            box-shadow: var(--mynt-shadow-hover);\n            transform: translateY(-2px);\n        }\n\n        .mynt-lka.dark-mode .card:hover {\n            box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);\n        }\n\n        .mynt-lka .card-title {\n            font-size: 1.1rem;\n            font-weight: 600;\n            color: var(--textColorDark-blue);\n            margin: 0 0 0.75rem 0;\n            display: flex;\n            align-items: center;\n            gap: 0.5rem;\n        }\n\n        .mynt-lka.dark-mode .card-title {\n            color: var(--whitishColor-blue);\n        }\n\n        .mynt-lka .card-title::before {\n            content: \"\";\n            width: 4px;\n            height: 1.1rem;\n            background: var(--darkColor-blue);\n            border-radius: 2px;\n        }\n\n        /* ── Intro text ── */\n        .mynt-lka .intro-text {\n            color: var(--textColorDark-blue);\n            opacity: 0.9;\n            font-size: 0.95rem;\n            line-height: 1.6;\n            margin: 0 0 1.5rem 0;\n        }\n\n        .mynt-lka.dark-mode .intro-text {\n            color: rgba(255, 255, 255, 0.9);\n        }\n\n        /* ── Lists ── */\n        .mynt-lka ul {\n            list-style: none;\n            padding: 0;\n            margin: 0;\n        }\n\n        .mynt-lka .key-item {\n            display: flex;\n            align-items: center;\n            gap: 0.75rem;\n            padding: 0.75rem 1rem;\n            margin-bottom: 0.5rem;\n            border-radius: 12px;\n            transition: background 0.2s ease, opacity 0.2s ease;\n            font-size: 0.9rem;\n        }\n\n        .mynt-lka .key-item.missing {\n            background: var(--bg-color-red);\n            border-left: 4px solid var(--darkerColor-red);\n            color: var(--textColorDark-red);\n        }\n\n        .mynt-lka .key-item.missing label {\n            display: flex;\n            align-items: center;\n            gap: 0.6rem;\n        }\n\n        .mynt-lka .key-item.extra {\n            background: color-mix(in srgb, var(--accentLightTint-blue) 80%, var(--bg-color-blue));\n            border-left: 4px solid var(--darkerColor-blue);\n        }\n\n        .mynt-lka.dark-mode .key-item.extra {\n            background: rgba(54, 105, 178, 0.4);\n        }\n\n        .mynt-lka .key-item.complete {\n            background: var(--bg-color-green);\n            border-left: 4px solid var(--darkerColor-green);\n            color: var(--textColorDark-green);\n            fill: var(--darkerColor-green);\n        }\n\n        .mynt-lka .key-item.checked {\n            opacity: 0.5;\n        }\n\n        .mynt-lka .key-item.checked code {\n            text-decoration: line-through;\n        }\n\n        .mynt-lka .key-item code {\n            background-color: rgba(0, 0, 0, 0.06);\n            padding: 0.25rem 0.5rem;\n            border-radius: 6px;\n            font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n        }\n\n        /* ── Checkbox ── */\n        .mynt-lka input[type=\"checkbox\"] {\n            appearance: none;\n            -webkit-appearance: none;\n            width: 20px;\n            height: 20px;\n            border: 2px solid var(--darkerColor-red);\n            border-radius: 6px;\n            cursor: pointer;\n            flex-shrink: 0;\n            transition: transform 0.15s ease, background-color 0.2s ease, border-color 0.2s ease;\n        }\n\n        .mynt-lka input[type=\"checkbox\"]:hover {\n            transform: scale(1.08);\n        }\n\n        .mynt-lka input[type=\"checkbox\"]:active {\n            transform: scale(0.95);\n        }\n\n        .mynt-lka input[type=\"checkbox\"]:checked {\n            background: var(--darkerColor-red);\n            border-color: var(--darkerColor-red);\n            background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"%23fff\"><path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/></svg>');\n            background-size: 14px 14px;\n            background-position: center;\n            background-repeat: no-repeat;\n        }\n\n        /* ── Language groups ── */\n        .mynt-lka .language-group:not(:last-child) {\n            margin-bottom: 1rem;\n        }\n\n        .mynt-lka .language-group-header {\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            width: 100%;\n            padding: 0.875rem 1rem;\n            background: var(--bg-color-blue);\n            border: none;\n            border-radius: 12px;\n            cursor: pointer;\n            user-select: none;\n            font-family: inherit;\n            text-align: left;\n            transition: background 0.2s ease, transform 0.2s ease;\n        }\n\n        .mynt-lka .language-group-header:hover {\n            transform: translateX(4px);\n            background: color-mix(in srgb, var(--bg-color-blue) 90%, var(--darkColor-blue));\n        }\n\n        .mynt-lka .language-group-header:active {\n            transform: translateX(2px);\n        }\n\n        .mynt-lka .language-group-header:focus-visible {\n            outline: 2px solid var(--darkColor-blue);\n            outline-offset: 2px;\n        }\n\n        .mynt-lka.dark-mode .language-group-header {\n            background: rgba(54, 105, 178, 0.35);\n        }\n\n        .mynt-lka.dark-mode .language-group-header:hover {\n            background: rgba(54, 105, 178, 0.5);\n        }\n\n        .mynt-lka .language-group-header::before {\n            content: \"▼\";\n            font-size: 0.7rem;\n            margin-right: 0.5rem;\n            transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n            color: var(--darkColor-blue);\n            display: inline-block;\n            flex-shrink: 0;\n        }\n\n        .mynt-lka .language-group.collapsed .language-group-header::before {\n            transform: rotate(-90deg);\n        }\n\n        .mynt-lka .language-group-header-text {\n            font-size: 0.95rem;\n            font-weight: 600;\n            color: var(--textColorDark-blue);\n        }\n\n        .mynt-lka.dark-mode .language-group-header-text {\n            color: var(--whitishColor-blue);\n        }\n\n        /* ── Group expand animation ── */\n        .mynt-lka .language-group ul {\n            overflow: hidden;\n            padding: 0.5rem 0 0 1rem;\n        }\n\n        .mynt-lka .language-group.collapsed ul {\n            display: none;\n        }\n\n        .mynt-lka .language-group:not(.collapsed) ul {\n            animation: mynt-groupExpand 0.3s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n        }\n\n        @keyframes mynt-groupExpand {\n            from {\n                opacity: 0;\n            }\n\n            to {\n                opacity: 1;\n            }\n        }\n\n        /* Staggered item animation via --i CSS custom property set in JS */\n        .mynt-lka .language-group:not(.collapsed) .key-item {\n            animation: mynt-itemSlide 0.25s cubic-bezier(0.4, 0, 0.2, 1) backwards;\n            animation-delay: calc(var(--i, 0) * 30ms);\n        }\n\n        @keyframes mynt-itemSlide {\n            from {\n                opacity: 0;\n                transform: translateX(-8px);\n            }\n\n            to {\n                opacity: 1;\n                transform: translateX(0);\n            }\n        }\n\n        /* ── Key counts badges ── */\n        .mynt-lka .key-counts {\n            display: flex;\n            gap: 1rem;\n            font-size: 0.8rem;\n            font-weight: 500;\n        }\n\n        .mynt-lka .key-counts .missing-count {\n            color: var(--darkerColor-red);\n            padding: 0.16rem 0.6rem;\n            border-radius: 20px;\n            outline: 1px solid var(--darkerColor-red);\n        }\n\n        .mynt-lka .key-counts .extra-count {\n            color: var(--darkerColor-blue);\n            padding: 0.16rem 0.6rem;\n            border-radius: 20px;\n            outline: 1px solid var(--darkerColor-blue);\n        }\n\n        .mynt-lka.dark-mode .key-counts .missing-count {\n            color: #ff9999;\n            outline-color: rgba(255, 153, 153, 0.9);\n        }\n\n        .mynt-lka.dark-mode .key-counts .extra-count {\n            color: var(--bg-color-blue);\n            outline-color: var(--bg-color-blue);\n        }\n\n        /* ── Alert boxes ── */\n        .mynt-lka .alert-box {\n            padding: 1rem 1.25rem;\n            border-radius: 12px;\n            margin-bottom: 1rem;\n            font-size: 0.9rem;\n            display: none;\n        }\n\n        .mynt-lka .alert-box.show {\n            display: block;\n            animation: mynt-alertSlide 0.4s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n        }\n\n        @keyframes mynt-alertSlide {\n            from {\n                opacity: 0;\n                transform: translateY(-8px);\n            }\n\n            to {\n                opacity: 1;\n                transform: translateY(0);\n            }\n        }\n\n        .mynt-lka #incomplete-message {\n            background: var(--accentLightTint-red);\n            color: var(--textColorDark-red);\n            border-left: 4px solid var(--darkerColor-red);\n        }\n\n        .mynt-lka #extra-keys-message {\n            background: color-mix(in srgb, var(--accentLightTint-blue) 70%, var(--bg-color-blue));\n            color: var(--textColorDark-blue);\n            border-left: 4px solid var(--darkerColor-blue);\n        }\n\n        .mynt-lka.dark-mode #extra-keys-message {\n            background: rgba(54, 105, 178, 0.35);\n            color: rgba(255, 255, 255, 0.95);\n            border-left-color: var(--darkColor-blue);\n        }\n\n        .mynt-lka.dark-mode #incomplete-message {\n            background: rgba(178, 53, 53, 0.25);\n            color: #ffb3b3;\n            border-left-color: var(--darkerColor-red);\n        }\n\n        /* ── Results heading ── */\n        .mynt-lka .results-section h2 {\n            font-size: 1.25rem;\n            font-weight: 600;\n            text-align: center;\n            margin: 0 0 1rem 0;\n            color: var(--textColorDark-blue);\n        }\n\n        .mynt-lka.dark-mode .results-section h2 {\n            color: var(--whitishColor-blue);\n        }\n\n        /* ── Scrollbar ── */\n        .mynt-lka ::-webkit-scrollbar {\n            width: 8px;\n            height: 8px;\n        }\n\n        .mynt-lka ::-webkit-scrollbar-track {\n            background: transparent;\n        }\n\n        .mynt-lka ::-webkit-scrollbar-thumb {\n            background: var(--darkColor-blue);\n            border-radius: 4px;\n        }\n\n        .mynt-lka ::-webkit-scrollbar-thumb:hover {\n            background: var(--darkerColor-blue);\n        }\n    </style>\n    <script src=\"../locales/pt.js\"></script>\n    <script src=\"../locales/en.js\"></script>\n    <script src=\"../locales/es.js\"></script>\n    <script src=\"../locales/hi.js\"></script>\n    <script src=\"../locales/hu.js\"></script>\n    <script src=\"../locales/zh.js\"></script>\n    <script src=\"../locales/cs.js\"></script>\n    <script src=\"../locales/it.js\"></script>\n    <script src=\"../locales/tr.js\"></script>\n    <script src=\"../locales/bn.js\"></script>\n    <script src=\"../locales/vi.js\"></script>\n    <script src=\"../locales/ru.js\"></script>\n    <script src=\"../locales/uz.js\"></script>\n    <script src=\"../locales/ja.js\"></script>\n    <script src=\"../locales/ko.js\"></script>\n    <script src=\"../locales/idn.js\"></script>\n    <script src=\"../locales/mr.js\"></script>\n    <script src=\"../locales/fr.js\"></script>\n    <script src=\"../locales/az.js\"></script>\n    <script src=\"../locales/sl.js\"></script>\n    <script src=\"../locales/ne.js\"></script>\n    <script src=\"../locales/zh_TW.js\"></script>\n    <script src=\"../locales/ur.js\"></script>\n    <script src=\"../locales/de.js\"></script>\n    <script src=\"../locales/fa.js\"></script>\n    <script src=\"../locales/ar_SA.js\"></script>\n    <script src=\"../locales/el.js\"></script>\n    <script src=\"../locales/ta.js\"></script>\n    <script src=\"../locales/th.js\"></script>\n    <script src=\"../locales/pl.js\"></script>\n    <script src=\"../locales/uk.js\"></script>\n    <script src=\"../locales/sv.js\"></script>\n</head>\n\n<body id=\"mynt-lka\" class=\"mynt-lka\">\n    <header class=\"tool-header\">\n        <div class=\"tool-header-inner\">\n            <div class=\"tool-brand\">\n                <img class=\"tool-brand-icon\" src=\"../favicon/icon128.png\" alt=\"MYNT\" width=\"40\" height=\"40\">\n                <div>\n                    <h1>MYNT Language Key Analysis Tool</h1>\n                    <span>Compare translation keys against English</span>\n                </div>\n            </div>\n            <div class=\"theme-selector\">\n                <button type=\"button\" class=\"theme-btn active\" id=\"theme-light\" data-theme=\"light\"> Light </button>\n                <button type=\"button\" class=\"theme-btn\" id=\"theme-dark\" data-theme=\"dark\"> Dark </button>\n            </div>\n        </div>\n    </header>\n    <main>\n        <div id=\"complete\" class=\"card\"></div>\n        <section class=\"card results-section\">\n            <h2>Language Key Analysis Results</h2>\n            <p class=\"intro-text\"> This tool analyzes language keys across the MYNT project. Any language that has\n                missing keys or contains keys not present in English is listed below. </p>\n            <div id=\"incomplete-message\" class=\"alert-box\"> The following languages have keys that are missing compared\n                to English. </div>\n            <div id=\"extra-keys-message\" class=\"alert-box\"> Some languages contain extra keys not present in English.\n                Consider removing them for consistency. </div>\n            <div id=\"results\"></div>\n        </section>\n    </main>\n    <script>\n        // ─── Locale map ───────────────────────────────────────────────────────────\n        const languages = { ar_SA, az, bn, cs, de, el, en, es, fa, fr, hi, hu, idn, it, ja, ko, mr, ne, pl, pt, ru, sl, sv, ta, th, tr, uk, ur, uz, vi, zh, zh_TW };\n\n        // ─── DOM refs ─────────────────────────────────────────────────────────────\n        const bodyEl = document.getElementById(\"mynt-lka\");\n        const resultsDiv = document.getElementById(\"results\");\n        const completeDiv = document.getElementById(\"complete\");\n        const incompleteMsg = document.getElementById(\"incomplete-message\");\n        const extraKeysMsg = document.getElementById(\"extra-keys-message\");\n\n        // ─── SVG icon ─────────────────────────────────────────────────────────────\n        const completeIcon = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" width=\"18\" height=\"18\">\n            <path d=\"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z\"/>\n        </svg>`;\n\n        // ─── Helpers ──────────────────────────────────────────────────────────────\n\n        function createElmnt(tag, options = {}) {\n            const node = document.createElement(tag);\n            if (options.className) node.className = options.className;\n            if (options.textContent) node.textContent = options.textContent;\n            if (options.innerHTML) node.innerHTML = options.innerHTML;\n            if (options.attrs) {\n                for (const [k, v] of Object.entries(options.attrs)) node.setAttribute(k, v);\n            }\n            return node;\n        }\n\n        // ─── Analysis ─────────────────────────────────────────────────────────────\n\n        /**\n         * Compares every language against the reference.\n         * Returns an object keyed by language code with { missing, extra, isComplete }.\n         */\n        function analyseLanguageKeys(reference, allLanguages) {\n            const refKeys = Object.keys(reference);\n            const refSet = new Set(refKeys);\n            const results = {};\n\n            for (const [lang, translations] of Object.entries(allLanguages)) {\n                const langKeys = Object.keys(translations);\n                const langSet = new Set(langKeys);\n                const missing = refKeys.filter(k => !langSet.has(k));\n                const extra = langKeys.filter(k => !refSet.has(k));\n\n                results[lang] = {\n                    missing,\n                    extra,\n                    isComplete: missing.length === 0 && extra.length === 0,\n                };\n            }\n\n            return results;\n        }\n\n        // Remove English itself from the comparison map\n        const { en: _ref, ...otherLanguages } = languages;\n        const analysis = analyseLanguageKeys(en, otherLanguages);\n\n        // Derive flags cleanly from analysis data\n        const hasMissingKeys = Object.values(analysis).some(r => r.missing.length > 0);\n        const hasExtraKeys = Object.values(analysis).some(r => r.extra.length > 0);\n\n        // ─── Rendering ────────────────────────────────────────────────────────────\n\n        /** Renders the \"Completed Languages\" card. */\n        function renderCompleteCard() {\n            const title = createElmnt(\"h2\", { className: \"card-title\", textContent: \"Completed Languages\" });\n            const list = createElmnt(\"ul\");\n\n            const completedLangs = Object.entries(analysis).filter(([, r]) => r.isComplete);\n\n            if (completedLangs.length === 0) {\n                list.appendChild(createElmnt(\"li\", {\n                    className: \"key-item\",\n                    textContent: \"No languages are fully in sync with English yet.\",\n                }));\n            } else {\n                for (const [lang] of completedLangs) {\n                    list.appendChild(createElmnt(\"li\", {\n                        className: \"key-item complete\",\n                        innerHTML: `${completeIcon}<span><strong>${lang}</strong>​​ ​ fully aligned with English (no missing or extra keys)</span>`,\n                    }));\n                }\n            }\n\n            completeDiv.appendChild(title);\n            completeDiv.appendChild(list);\n        }\n\n        /** Renders one collapsible language group (missing + extra keys). */\n        function renderLanguageGroup(lang, missing, extra) {\n            const group = createElmnt(\"div\", { className: \"language-group collapsed\" });\n\n            // Button header (keyboard-accessible)\n            const btn = createElmnt(\"button\", {\n                className: \"language-group-header\",\n                innerHTML: `\n                    <span class=\"language-group-header-text\">${lang}</span>\n                    <span class=\"key-counts\">\n                        <span class=\"missing-count\">−${missing.length} missing</span>\n                        <span class=\"extra-count\">+${extra.length} extra</span>\n                    </span>\n                `,\n            });\n            btn.type = \"button\";\n\n            btn.addEventListener(\"click\", () => {\n                group.classList.toggle(\"collapsed\");\n            });\n\n            btn.addEventListener(\"keydown\", (e) => {\n                if (e.key === \"Enter\" || e.key === \" \") {\n                    e.preventDefault();\n                    btn.click();\n                }\n            });\n\n            group.appendChild(btn);\n\n            // Key list\n            const list = createElmnt(\"ul\", { attrs: { id: `group-list-${lang}` } });\n\n            missing.forEach((key, i) => {\n                const li = createElmnt(\"li\", {\n                    className: \"key-item missing\",\n                    innerHTML: `\n                    <label>\n                        <input type=\"checkbox\" data-lang=\"${lang}\" data-key=\"${key}\">\n                        Missing: <code>${key}</code>\n                    </label>\n                    `,\n                });\n\n                li.style.setProperty(\"--i\", i);\n                list.appendChild(li);\n            });\n\n            extra.forEach((key, i) => {\n                const li = createElmnt(\"li\", {\n                    className: \"key-item extra\",\n                    innerHTML: `<span>Extra: <code>${key}</code></span>`,\n                });\n                li.style.setProperty(\"--i\", missing.length + i);\n                list.appendChild(li);\n            });\n\n            group.appendChild(list);\n            return group;\n        }\n\n        /** Renders the full results section (incomplete languages). */\n        function renderResultsList() {\n            const container = createElmnt(\"div\");\n\n            for (const [lang, { missing, extra }] of Object.entries(analysis)) {\n                if (missing.length === 0 && extra.length === 0) continue;\n                container.appendChild(renderLanguageGroup(lang, missing, extra));\n            }\n\n            resultsDiv.appendChild(container);\n        }\n\n        // ─── Init ─────────────────────────────────────────────────────────────────\n\n        renderCompleteCard();\n\n        if (hasMissingKeys) incompleteMsg.classList.add(\"show\");\n        if (hasExtraKeys) extraKeysMsg.classList.add(\"show\");\n        if (hasMissingKeys || hasExtraKeys) renderResultsList();\n\n        // Checkbox → strikethrough\n        resultsDiv.addEventListener(\"change\", (e) => {\n            if (e.target.type === \"checkbox\") {\n                e.target.closest(\"li\").classList.toggle(\"checked\", e.target.checked);\n            }\n        });\n\n        // ─── Theme ────────────────────────────────────────────────────────────────\n\n        const themeLight = document.getElementById(\"theme-light\");\n        const themeDark = document.getElementById(\"theme-dark\");\n        const mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n\n        function setTheme(theme, save = true) {\n            const isDark = theme === \"dark\";\n\n            bodyEl.classList.toggle(\"dark-mode\", isDark);\n            themeLight.classList.toggle(\"active\", !isDark);\n            themeDark.classList.toggle(\"active\", isDark);\n\n            if (save) {\n                localStorage.setItem(\"mynt-theme\", theme);\n            }\n        }\n\n        const savedTheme = localStorage.getItem(\"mynt-theme\");\n\n        if (savedTheme) {\n            setTheme(savedTheme, false);\n        } else {\n            setTheme(mediaQuery.matches ? \"dark\" : \"light\", false);\n        }\n\n        mediaQuery.addEventListener(\"change\", (e) => {\n            if (!localStorage.getItem(\"mynt-theme\")) {\n                setTheme(e.matches ? \"dark\" : \"light\", false);\n            }\n        });\n\n        themeLight.addEventListener(\"click\", () => setTheme(\"light\"));\n        themeDark.addEventListener(\"click\", () => setTheme(\"dark\"));\n    </script>\n</body>\n\n</html>\n"
  }
]