[
  {
    "path": ".claude/settings.local.json",
    "content": "{\n  \"permissions\": {\n    \"allow\": [\n      \"Bash(gh issue:*)\"\n    ]\n  }\n}\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/1-bug_report.yaml",
    "content": "name: Bug report / 故障报告\ndescription: Please report any vulnerabilities you discover during use to us / 请向我们汇报您在使用过程中发现的漏洞\ntitle: \"[Bug]\"\nbody:\n  - type: markdown\n    id: introduction\n    attributes:\n      value: |\n        请使用此模板来报告 bug，并尽可能多地提供信息。\n        Please use this template while reporting a bug and provide as much info as possible.\n  - type: checkboxes\n    id: prerequisites\n    attributes:\n      label: 先决条件 (Prerequisites)\n      options:\n        - label: |\n            我已确认这个问题没有在[其他 issues](https://github.com/tjy-gitnub/win12/issues)中提出过。\n            I am sure that this problem has NEVER been discussed in [other issues](https://github.com/tjy-gitnub/win12/issues).\n          required: true\n        - label: |\n            我确认我正在使用官方地址 (tjy-gitnub.github.io/win12)。\n            I confirm that I am using the official url (tjy-gitnub.github.io/win12).\n          required: true\n        - label: |\n            我确保我遵守行为准则\n            I have followed the code of conduct\n          required: true\n        - label: |\n            我已查看了常见问题解答(#735)\n            I have reviewed the Frequently Asked Questions (#735)\n          required: true           \n  - type: textarea\n    id: what_happened\n    attributes:\n      label: 发生了什么（What happened）\n    validations:\n      required: true\n  - type: textarea\n    id: expected_behavior\n    attributes:\n      label: 期望的现象（What you expected to happen）\n    validations:\n      required: true\n  - type: textarea\n    id: how_to_reproduce\n    attributes:\n      label: 如何重现此问题（How to reproduce it）\n    validations:\n      required: true\n  - type: input\n    id: os_version\n    attributes:\n      label: 操作系统（OS Version）\n  - type: input\n    id: browser\n    attributes:\n      label: 浏览器（Browser version）\n  - type: textarea\n    id: other_env\n    attributes:\n      label: 其他环境（Other environments）\n  - type: textarea\n    id: others\n    attributes:\n      label: 其他需要说明的事项（Anything else we need to know）\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/2-new-proposal.yaml",
    "content": "name: New Proposal / 提出建议\ndescription: Please provide us with your valuable suggestions / 请向我们提出宝贵的建议\ntitle: \"[建议] \"\nbody:\n  - type: markdown\n    id: introduction\n    attributes:\n      value: |\n        欢迎向 Windows12 网页版 提出建议。您的建议将帮助本项目变得更好。\n        Welcome to submit suggestions to Windows12 Online. Your suggestions will help this project become better.\n  - type: checkboxes\n    id: prerequisites\n    attributes:\n      label: 先决条件 (Prerequisites)\n      options:\n        - label: |\n            我已确认这个问题没有在[其他 issues](https://github.com/tjy-gitnub/win12/issues)中提出过。\n            I am sure that this problem has NEVER been discussed in [other issues](https://github.com/tjy-gitnub/win12/issues).\n          required: true\n        - label: |\n            我确认我正在使用官方地址 (tjy-gitnub.github.io/win12)。\n            I confirm that I am using the official url (tjy-gitnub.github.io/win12).\n          required: true\n        - label: |\n            我确保我遵守行为准则\n            I have followed the code of conduct\n          required: true\n  - type: textarea\n    id: name\n    attributes:\n      label: 描述\n      description: 请简述您的建议 Please briefly describe your proposal\n    validations:\n      required: true\n  - type: textarea\n    id: upstream\n    attributes:\n      label: 方案\n      description: 请简述您建议的实现方案 Please briefly describe your proposed implementation\n    validations:\n      required: true\n  - type: textarea\n    id: more_info\n    attributes:\n      label: 备注 (Note)\n      description: 其他补充信息 Additional information\n    validations:\n      required: false\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/3-others.md",
    "content": "---\nname: Others / 其他事项\nabout: For other issues, use this template / 不能归类为上述事项，请用此模版\n---"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false"
  },
  {
    "path": ".github/workflows/notify-preview-deploy.yml",
    "content": "# 监听 PR 事件，通知下游仓库触发预览部署\nname: PR 预览部署\n\non:\n  pull_request_target:\n    types: [opened, synchronize, reopened]\n\n\npermissions: {}\n\njobs:\n  notify:\n    name: 发送部署通知\n    runs-on: ubuntu-latest\n    # 跳过草稿 PR\n    if: github.event.pull_request.draft == false\n    steps:\n      - name: 检查 Secret 是否存在\n        env:\n          TOKEN: ${{ secrets.DOWNSTREAM_PAT }}\n        run: |\n          if [ -z \"$TOKEN\" ]; then\n            echo \"::error::DOWNSTREAM_PAT secret 未配置，请在仓库 Settings → Secrets 中添加\"\n            exit 1\n          fi\n\n      - name: 构造事件类型\n        id: event-type\n        run: |\n          # 将 PR 动作映射为下游仓库的 repository_dispatch 事件类型\n          echo \"type=upstream-pr-${{ github.event.action }}\" >> \"$GITHUB_OUTPUT\"\n\n      - name: 触发下游仓库预览部署\n        env:\n          TOKEN: ${{ secrets.DOWNSTREAM_PAT }}\n        run: |\n          # 向下游仓库发送 repository_dispatch 请求\n          curl -fS -X POST \\\n            -H \"Accept: application/vnd.github+json\" \\\n            -H \"Authorization: Bearer $TOKEN\" \\\n            -H \"X-GitHub-Api-Version: 2022-11-28\" \\\n            https://api.github.com/repos/tangyuan0821/win12-pr-preview/dispatches \\\n            -d '{\n              \"event_type\": \"${{ steps.event-type.outputs.type }}\",\n              \"client_payload\": {\n                \"pr_number\": ${{ github.event.pull_request.number }},\n                \"sha\": \"${{ github.event.pull_request.head.sha }}\"\n              }\n            }'\n"
  },
  {
    "path": ".gitignore",
    "content": "web.config\n.vscode\n.idea\n\n.DS_Store\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# 行为准则\n\n>[!NOTE]\n>简而言之：用户均应当秉持“与人为善、文明和谐”的原则。\n\nWin12 网页版项目社区讲求文明，用户均应当秉持与人为善、开放包容、求同存异、文明和谐、共同进步的原则。\n\n在社区讨论中，请对其他用户展现开放、尊重、善意的态度，并以达成共识为首要目标。当出现激烈的争论时，请保持冷静，不要扰乱社区环境，不要实施人身攻击。\n\n任何来到本项目进行贡献的用户，都应遵守文明规则。在本项目中，“文明”的内涵是广泛的，包括但不仅限于讨论文明以及沟通文明等范畴。\n\n## 文明行为\n我们鼓励的行为包括：\n\n* 对其他用户展现开放、包容、善意的态度；尊重不同人的不同主张、意见和感受； \n* 在讨论中以文明的方式提出自己的主张或建设性意见； \n* 勇于纠正项目中非正确的事项，消除有关非正确事项的影响。\n\n## 不文明行为\n不文明行为，包括但不限于：\n\n* **粗鲁无礼**：无礼、轻蔑、侮辱、谩骂中伤、人身攻击或其他贬损性表述；\n* **恶意推定**：轻率鲁莽地指控他人行为不当，或在无充分证据前提下预设对方是恶意的；\n* **不当语气**：讥讽他人或诱使他人作出不文明行为；\n* **骚扰他人**：跟踪、欺凌、人身威胁、性骚扰、泄露他人隐私等；\n* **欺诈他人**；\n* **诽谤他人**：援引他人留言并断章取义，或虚构他人言论、行为，以图降低他人社会评价。\n\n## 解决不文明行为的方式\n当想要做有违文明的事情时，请务必冷静，三思而后行。\n\n如果您遇到他人的不文明行为，我们希望您做到冷静行动（即使这或许很困难）。保持冷静有利于防止负面影响扩大化，也是使他人收手、事态能够很好收场的最好态度。您可以选择拉黑该用户，并不对这种行为做任何答复，原谅并忘掉他们，也可以选择探究诱使其做出不文明行为的原因，并加以解决。\n\n在遇到争议时，您可以尝试解决争议。通过[电子邮件](https://www.qiuwenbaike.cn/wiki/%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6)或[即时通讯软件](https://www.qiuwenbaike.cn/wiki/%E5%8D%B3%E6%97%B6%E9%80%9A%E4%BF%A1#%E5%8D%B3%E6%99%82%E9%80%9A%E8%A8%8A%E8%BD%AF%E4%BB%B6)私下沟通是最常见的争议解决方式。如需其他用户的更广泛参与，则可以在项目的“Discussions“（讨论）页提出。\n\n## 我们对不文明行为的处理\n拥有Collaborator权限的用户有处理用户不文明行为的权力。此类用户对用户不文明行为的处理方法包括但不限于：\n\n* 若冲突发生于Issue页面，可以对页面实施锁定，给冲突双方一定的冷静期；\n* 若可以，限制或禁止存在不文明行为的用户与其他用户讨论；\n* 若可以，限制或禁止存在冲突的两名或多名用户与其他用户讨论；\n* 向Github 社区举报该用户的行为。\n\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# 贡献指南\n我们鼓励每个人为Windows 12网页版贡献内容。\n\n若您想贡献本仓库，那您必须仔细阅读本指南的所有内容。您还应当注意本指南中**加粗的文字**和[开发规范](#开发规范)章节的内容。\n\n本仓库仍有很多问题待解决，Issue列表长期处于积压状态。您可以先试着解决[Issue列表](https://github.com/tjy-gitnub/win12/issues)中的已知问题和功能请求。\n\n## 基本流程\n\n下面是贡献 pull request（下文中简称“PR”）所需的基本步骤。\n\n1. 您可以寻找可改善的任何东西，代码逻辑、格式规范或是页面内容等进行改进。\n\n2. 然后Fork本仓库,将其Clone到本地。\n\n3. 在本地进行修改，完成后Commit。（请尽量一次Commit提交全部内容。可以追加Commits，但尽量不要超过5个Commits。）\n\n4. 将修改推送到您的仓库\n\n5. 再[创建一个Pull Request](https://github.com/tjy-gitnub/win12/pulls)。\n\n6. 然后`坐和放宽`，等待其他人对你的代码进行审查。\n>[!TIP]\n>在此过程中请尽量使用Git命令行、Github Desktop、[https://github.dev](https://github.dev/tjy-gitnub/win12)等方式进行提交。\n\n## 重要提醒\n* 若您的修改具有一定重要性或量级时，请按照以下格式阐述更新内容：\n\n      ```\n      v11.4.5 - 更新了xxx\n\n      (更新来自 @Somebody)\n      - 更新了...\n      - 优化了...\n      - 修复了...\n      ...\n      ```\n\n>[!TIP]\n>  1. 标题要带有版本号、主要更新内容。\n>  2. 内容第一行注明更新来源。\n>  3. 内容要用列表的方式阐述更新内容。\n\n>[!NOTE]\n>  1. **请不要**任意选取版本号。若您不清楚，可以通过[我们的交流群](https://teams.live.com/l/invite/FEA0yrNkE_bAn-ddwI)与我们取得联系并分配到版本号。\n>  2. 在更新时，**记住**要在“关于 Windows 12 网页版”应用的更新记录中，添加关于该更新的相关内容。\n\n* **请善用`Update branch`按钮**。点击`Update branch`按钮可将`main`分支的最新更改合并到当前PR中。但无充分理由请勿操作——会误通知关注者“有新变更”，且会消耗[预览机器人](https://github.com/Bedevere-win12-bot)的 GitHub Action 资源。\n\n* 根据中华人民共和国有关法律的规定您**不可以**通过本项目传播违法和违规内容，否则我们将会采取锁定+视情况封禁的处理（温馨提示：时事新闻也不行），同时我们保留在任何时间以一切方式采取法律行动、追究法律责任的权利。\n\n* 若您贡献此项目，则代表您知情并同意：为使得您贡献的内容得到更好的分享及推广，就您在本项目所贡献的内容，您授权我们一项全球范围内的、免费的、非独家的、可再许可的权利；该等内容包括但不限于文字作品、美术作品、图形作品、视听作品、计算机程序源代码等各种著作权法意义上构成“作品”的内容；该等权利包括但不限于复制、翻译、整理、汇编、注释、改编、信息网络传播、发行等各项著作权及其相关权利，且该等权利应至少涵盖对于“Windows12 网页版”项目或以其他方式开发相关内容的一部分或全部的权利及许可。\n\n### 开发规范\n\n1. 对于HTML文件的规定\n\n   详见 `desktop.html` 开头的代码规范，务必认真阅读。\n\n2. 对JS文件的规定\n\n   1. 请按照以下代码风格进行开发：\n\n   ```js\n      var sum = 0;\n      for (var i = 0; i < 10; i++) {\n         sum += i;\n      }\n      console.log(sum);\n   ```\n\n   2. 对于函数名及变量命名，请使用驼峰式命名法，如：\n\n      - isLoaded\n\n      - storagedItems\n\n   3. 对于类名，请使用帕斯卡命名法（大驼峰式命名法），如：\n\n      - WindowManager\n\n      - Widgets\n\n   4. 对于代码规范的规定：\n\n      对于那些不需要展开的代码，尽量压成一行\n"
  },
  {
    "path": "LICENSE",
    "content": "Eclipse Public License - v 2.0\n\n    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE\n    PUBLIC LICENSE (\"AGREEMENT\"). ANY USE, REPRODUCTION OR DISTRIBUTION\n    OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.\n\n1. DEFINITIONS\n\n\"Contribution\" means:\n\n  a) in the case of the initial Contributor, the initial content\n     Distributed under this Agreement, and\n\n  b) in the case of each subsequent Contributor:\n     i) changes to the Program, and\n     ii) additions to the Program;\n  where such changes and/or additions to the Program originate from\n  and are Distributed by that particular Contributor. A Contribution\n  \"originates\" from a Contributor if it was added to the Program by\n  such Contributor itself or anyone acting on such Contributor's behalf.\n  Contributions do not include changes or additions to the Program that\n  are not Modified Works.\n\n\"Contributor\" means any person or entity that Distributes the Program.\n\n\"Licensed Patents\" mean patent claims licensable by a Contributor which\nare necessarily infringed by the use or sale of its Contribution alone\nor when combined with the Program.\n\n\"Program\" means the Contributions Distributed in accordance with this\nAgreement.\n\n\"Recipient\" means anyone who receives the Program under this Agreement\nor any Secondary License (as applicable), including Contributors.\n\n\"Derivative Works\" shall mean any work, whether in Source Code or other\nform, that is based on (or derived from) the Program and for which the\neditorial revisions, annotations, elaborations, or other modifications\nrepresent, as a whole, an original work of authorship.\n\n\"Modified Works\" shall mean any work in Source Code or other form that\nresults from an addition to, deletion from, or modification of the\ncontents of the Program, including, for purposes of clarity any new file\nin Source Code form that contains any contents of the Program. Modified\nWorks shall not include works that contain only declarations,\ninterfaces, types, classes, structures, or files of the Program solely\nin each case in order to link to, bind by name, or subclass the Program\nor Modified Works thereof.\n\n\"Distribute\" means the acts of a) distributing or b) making available\nin any manner that enables the transfer of a copy.\n\n\"Source Code\" means the form of a Program preferred for making\nmodifications, including but not limited to software source code,\ndocumentation source, and configuration files.\n\n\"Secondary License\" means either the GNU General Public License,\nVersion 2.0, or any later versions of that license, including any\nexceptions or additional permissions as identified by the initial\nContributor.\n\n2. GRANT OF RIGHTS\n\n  a) Subject to the terms of this Agreement, each Contributor hereby\n  grants Recipient a non-exclusive, worldwide, royalty-free copyright\n  license to reproduce, prepare Derivative Works of, publicly display,\n  publicly perform, Distribute and sublicense the Contribution of such\n  Contributor, if any, and such Derivative Works.\n\n  b) Subject to the terms of this Agreement, each Contributor hereby\n  grants Recipient a non-exclusive, worldwide, royalty-free patent\n  license under Licensed Patents to make, use, sell, offer to sell,\n  import and otherwise transfer the Contribution of such Contributor,\n  if any, in Source Code or other form. This patent license shall\n  apply to the combination of the Contribution and the Program if, at\n  the time the Contribution is added by the Contributor, such addition\n  of the Contribution causes such combination to be covered by the\n  Licensed Patents. The patent license shall not apply to any other\n  combinations which include the Contribution. No hardware per se is\n  licensed hereunder.\n\n  c) Recipient understands that although each Contributor grants the\n  licenses to its Contributions set forth herein, no assurances are\n  provided by any Contributor that the Program does not infringe the\n  patent or other intellectual property rights of any other entity.\n  Each Contributor disclaims any liability to Recipient for claims\n  brought by any other entity based on infringement of intellectual\n  property rights or otherwise. As a condition to exercising the\n  rights and licenses granted hereunder, each Recipient hereby\n  assumes sole responsibility to secure any other intellectual\n  property rights needed, if any. For example, if a third party\n  patent license is required to allow Recipient to Distribute the\n  Program, it is Recipient's responsibility to acquire that license\n  before distributing the Program.\n\n  d) Each Contributor represents that to its knowledge it has\n  sufficient copyright rights in its Contribution, if any, to grant\n  the copyright license set forth in this Agreement.\n\n  e) Notwithstanding the terms of any Secondary License, no\n  Contributor makes additional grants to any Recipient (other than\n  those set forth in this Agreement) as a result of such Recipient's\n  receipt of the Program under the terms of a Secondary License\n  (if permitted under the terms of Section 3).\n\n3. REQUIREMENTS\n\n3.1 If a Contributor Distributes the Program in any form, then:\n\n  a) the Program must also be made available as Source Code, in\n  accordance with section 3.2, and the Contributor must accompany\n  the Program with a statement that the Source Code for the Program\n  is available under this Agreement, and informs Recipients how to\n  obtain it in a reasonable manner on or through a medium customarily\n  used for software exchange; and\n\n  b) the Contributor may Distribute the Program under a license\n  different than this Agreement, provided that such license:\n     i) effectively disclaims on behalf of all other Contributors all\n     warranties and conditions, express and implied, including\n     warranties or conditions of title and non-infringement, and\n     implied warranties or conditions of merchantability and fitness\n     for a particular purpose;\n\n     ii) effectively excludes on behalf of all other Contributors all\n     liability for damages, including direct, indirect, special,\n     incidental and consequential damages, such as lost profits;\n\n     iii) does not attempt to limit or alter the recipients' rights\n     in the Source Code under section 3.2; and\n\n     iv) requires any subsequent distribution of the Program by any\n     party to be under a license that satisfies the requirements\n     of this section 3.\n\n3.2 When the Program is Distributed as Source Code:\n\n  a) it must be made available under this Agreement, or if the\n  Program (i) is combined with other material in a separate file or\n  files made available under a Secondary License, and (ii) the initial\n  Contributor attached to the Source Code the notice described in\n  Exhibit A of this Agreement, then the Program may be made available\n  under the terms of such Secondary Licenses, and\n\n  b) a copy of this Agreement must be included with each copy of\n  the Program.\n\n3.3 Contributors may not remove or alter any copyright, patent,\ntrademark, attribution notices, disclaimers of warranty, or limitations\nof liability (\"notices\") contained within the Program from any copy of\nthe Program which they Distribute, provided that Contributors may add\ntheir own appropriate notices.\n\n4. COMMERCIAL DISTRIBUTION\n\nCommercial distributors of software may accept certain responsibilities\nwith respect to end users, business partners and the like. While this\nlicense is intended to facilitate the commercial use of the Program,\nthe Contributor who includes the Program in a commercial product\noffering should do so in a manner which does not create potential\nliability for other Contributors. Therefore, if a Contributor includes\nthe Program in a commercial product offering, such Contributor\n(\"Commercial Contributor\") hereby agrees to defend and indemnify every\nother Contributor (\"Indemnified Contributor\") against any losses,\ndamages and costs (collectively \"Losses\") arising from claims, lawsuits\nand other legal actions brought by a third party against the Indemnified\nContributor to the extent caused by the acts or omissions of such\nCommercial Contributor in connection with its distribution of the Program\nin a commercial product offering. The obligations in this section do not\napply to any claims or Losses relating to any actual or alleged\nintellectual property infringement. In order to qualify, an Indemnified\nContributor must: a) promptly notify the Commercial Contributor in\nwriting of such claim, and b) allow the Commercial Contributor to control,\nand cooperate with the Commercial Contributor in, the defense and any\nrelated settlement negotiations. The Indemnified Contributor may\nparticipate in any such claim at its own expense.\n\nFor example, a Contributor might include the Program in a commercial\nproduct offering, Product X. That Contributor is then a Commercial\nContributor. If that Commercial Contributor then makes performance\nclaims, or offers warranties related to Product X, those performance\nclaims and warranties are such Commercial Contributor's responsibility\nalone. Under this section, the Commercial Contributor would have to\ndefend claims against the other Contributors related to those performance\nclaims and warranties, and if a court requires any other Contributor to\npay any damages as a result, the Commercial Contributor must pay\nthose damages.\n\n5. NO WARRANTY\n\nEXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT\nPERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN \"AS IS\"\nBASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR\nIMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF\nTITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR\nPURPOSE. Each Recipient is solely responsible for determining the\nappropriateness of using and distributing the Program and assumes all\nrisks associated with its exercise of rights under this Agreement,\nincluding but not limited to the risks and costs of program errors,\ncompliance with applicable laws, damage to or loss of data, programs\nor equipment, and unavailability or interruption of operations.\n\n6. DISCLAIMER OF LIABILITY\n\nEXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT\nPERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS\nSHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST\nPROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE\nEXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n7. GENERAL\n\nIf any provision of this Agreement is invalid or unenforceable under\napplicable law, it shall not affect the validity or enforceability of\nthe remainder of the terms of this Agreement, and without further\naction by the parties hereto, such provision shall be reformed to the\nminimum extent necessary to make such provision valid and enforceable.\n\nIf Recipient institutes patent litigation against any entity\n(including a cross-claim or counterclaim in a lawsuit) alleging that the\nProgram itself (excluding combinations of the Program with other software\nor hardware) infringes such Recipient's patent(s), then such Recipient's\nrights granted under Section 2(b) shall terminate as of the date such\nlitigation is filed.\n\nAll Recipient's rights under this Agreement shall terminate if it\nfails to comply with any of the material terms or conditions of this\nAgreement and does not cure such failure in a reasonable period of\ntime after becoming aware of such noncompliance. If all Recipient's\nrights under this Agreement terminate, Recipient agrees to cease use\nand distribution of the Program as soon as reasonably practicable.\nHowever, Recipient's obligations under this Agreement and any licenses\ngranted by Recipient relating to the Program shall continue and survive.\n\nEveryone is permitted to copy and distribute copies of this Agreement,\nbut in order to avoid inconsistency the Agreement is copyrighted and\nmay only be modified in the following manner. The Agreement Steward\nreserves the right to publish new versions (including revisions) of\nthis Agreement from time to time. No one other than the Agreement\nSteward has the right to modify this Agreement. The Eclipse Foundation\nis the initial Agreement Steward. The Eclipse Foundation may assign the\nresponsibility to serve as the Agreement Steward to a suitable separate\nentity. Each new version of the Agreement will be given a distinguishing\nversion number. The Program (including Contributions) may always be\nDistributed subject to the version of the Agreement under which it was\nreceived. In addition, after a new version of the Agreement is published,\nContributor may elect to Distribute the Program (including its\nContributions) under the new version.\n\nExcept as expressly stated in Sections 2(a) and 2(b) above, Recipient\nreceives no rights or licenses to the intellectual property of any\nContributor under this Agreement, whether expressly, by implication,\nestoppel or otherwise. All rights in the Program not expressly granted\nunder this Agreement are reserved. Nothing in this Agreement is intended\nto be enforceable by any entity that is not a Contributor or Recipient.\nNo third-party beneficiary rights are created under this Agreement.\n\nExhibit A - Form of Secondary Licenses Notice\n\n\"This Source Code may also be made available under the following\nSecondary Licenses when the conditions for such availability set forth\nin the Eclipse Public License, v. 2.0 are satisfied: {name license(s),\nversion(s), and exceptions or additional permissions here}.\"\n\n  Simply including a copy of this Agreement, including this Exhibit A\n  is not sufficient to license the Source Code under Secondary Licenses.\n\n  If it is not possible or desirable to put the notice in a particular\n  file, then You may include the notice in a location (such as a LICENSE\n  file in a relevant directory) where a recipient would be likely to\n  look for such a notice.\n\n  You may add additional accurate notices of copyright ownership.\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\">\n    <img src=\"./icon/windows12.svg\" width=\"100\" height=\"100\">\n</p>\n<h1 align=\"center\">Windows 12 网页版</h1>\n<p align=\"center\" class=\"shields\">\n  <span href=\"https://github.com/tjy-gitnub/win12/issues\" style=\"text-decoration:none\">\n    <img src=\"https://img.shields.io/github/issues/tjy-gitnub/win12.svg\" alt=\"GitHub issues\"/>\n  </span>\n  <span href=\"https://github.com/tjy-gitnub/win12/stargazers\" style=\"text-decoration:none\">\n    <img src=\"https://img.shields.io/github/stars/tjy-gitnub/win12.svg\" alt=\"GitHub stars\"/>\n  </span>\n  <span href=\"https://github.com/tjy-gitnub/win12/network\" style=\"text-decoration:none\">\n    <img src=\"https://img.shields.io/github/forks/tjy-gitnub/win12.svg\" alt=\"GitHub forks\"/>\n  </span>\n  <!-- <span href=\"https://tjy-gitnub.github.io/win12/desktop.html\" style=\"text-decoration:none\">\n    <img src=\"https://status.tangyuan0821.com/api/badge/5/status\" alt=\"Status\"/>\n  </span> -->\n  <a href=\"https://trendshift.io/repositories/115\" target=\"_blank\"><img src=\"https://trendshift.io/api/badge/repositories/115\" alt=\"tjy-gitnub%2Fwin12 | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/></a>\n</p>\n<p align=\"center\" class=\"language\" title=\"Language selection 语言选择\">\n  <a href=\"readme/README_en_us.md\">English</a> | \n  <b>简体中文</b> | \n  <a href=\"readme/README_fr_fr.md\">Français</a>|\n  <a href=\"readme/README_zh_tw.md\">繁體中文</a>\n</p>\n<details align=\"center\">\n  <summary>Star History</summary>\n  <a href=\"https://star-history.com/#tjy-gitnub/win12&Date\" style=\"text-decoration:none\">\n    <img src=\"https://api.star-history.com/svg?repos=tjy-gitnub/win12&type=Date\" alt=\"Star History Chart\">\n  </a>\n</details>\n\n## 目录\n\n- [Windows 12 网页版](#windows-12-网页版)\n  - [前言](#前言)\n  - [在线体验](#在线体验)\n  - [效果展示](#效果展示)\n  - [前景规划](#前景规划)\n  - [开源声明](#开源声明)\n  - [贡献须知](#贡献须知)\n  - [贡献者](#贡献者)\n  - [资助我们](#资助我们)\n\n## 前言\n\n很久以前 @tjy-gitnub 看到 Windows 12 概念版（Powered by PowerPoint）后深受启发，决定做一个 Windows 12 网页版，就像 [Windows 11 网页版](https://win11.blueedge.me/) 一样。 它拥有精美的 ui 设计，流畅丰富的动画，各种高级的功能。\n\n于是就有了这个项目（是的）\n\n> [!NOTE]\n> 目前移动端适配不太完善，开桌面版网站凑合着用吧 `>v-)o`\n\n## 在线体验\n\n点击[此处](tjy-gitnub.github.io/win12/desktop.html)即可体验。\n\n## 效果展示\n\n> 新的版本有很多变化，仅供参考，请以实物为准（你点一下 [这里](https://tjy-gitnub.github.io/win12/desktop.html) 就知道了啊，不麻烦`-_-)o` ）\n\n![image](https://tjy-gitnub.github.io/win12/img/start-menu.png)\n\n_开始菜单_\n\n![image](https://tjy-gitnub.github.io/win12/img/colorful-apps.png)\n\n_丰富的应用_\n\n![image](https://tjy-gitnub.github.io/win12/img/dark-mode.png)\n\n_深色模式_\n\n![image](https://tjy-gitnub.github.io/win12/img/ai-copilot.png)\n_AI Copilot([相关信息](./scripts/AI%20Copilot%20service/README.md))_\n\n## 前景规划\n\n关于该项目的路径规划:\n\n- [x] 基本功能与应用\n- [x] 外观整体优化\n- [x] 加入特效\n- [x] 窗口功能\n- [x] 应用完善\n- [x] 添加更多个性化方面的设置\n- [x] 添加 Edge 应用\n- [ ] 为更多应用添加标签页\n- [x] 完善小组件，添加到桌面等功能\n- [ ] 动态壁纸\n- [ ] 更多任务栏的自定义\n- [ ] 丰富应用生态，添加 Microsoft Store\n- [ ] 完善设置及 Windows 更新\n\n下面是一些...呃......畅..想 `~o~)/`：\n\n- [x] 建立文件系统\n- [ ] 建立自己的可执行文件机制\n- [ ] 将 .exe 文件转化并执行\n- [ ] 提供更多 api 供应用调用\n- [x] 内置浏览器内核，成为应用\n- [ ] 将项目更名为 \"Windows 12\"\n- [ ] 封装到 Windows 系统中\n- [ ] 将启动程序设为此应用\n- [ ] 去除多余系统功能，封装成独立的操作系统\n- [ ] 将项目更名为 \"Doswin 1.0\"\n- [ ] 适配量子计算机\n- [x] 接入 AI\n- [ ] 将项目更名为 \"550W\"\n\n## 开源声明\n\nWindows12 网页版的内容均采用较为宽松的著作权许可协议授权社会公众使用。\n\n### 计算机程序源代码\n\nWndows12 网页版是自由软件，采用Eclipse基金会发行的Eclipse Public License 2.0许可证（网址:<https://www.eclipse.org/legal/epl-2.0/>）进行许可。在遵守该许可证的前提下，您可以自由使用本项目的源代码。\n\n### 媒体文件\n\nWindows12 网页版的媒体文件内容（图形作品、美术作品、视听作品）依照依照知识共享 署名-相同方式共享 4.0 协议国际版（CC BY-SA 4.0）公开发表（另有声明的部分除外）；在遵守该许可协议的前提下，您可以自由使用本项目内的媒体文件。\n\n相关文件属于合理使用的范畴，应注意使用相关的媒体文件存在法律风险，请在使用前查阅著作权法律法规之规定。\n\n### 附加条款\n\n> [!CAUTION]<br> 以下条款适用于中华人民共和国（不含香港特别行政区、澳门特别行政区、台湾地区）以及“Windows12 网页版”项目服务器所在地的相关法律、法规、政府规章和其他具有强制性的规定。\n\n1. 任何使用、分享或分发本项目者，必须在项目介绍、文档或相关材料中明确附上原作者信息（谭景元，tjy-gitnub）及原项目链接（<https://github.com/tjy-gitnub/win12>）。**您不得故意隐瞒、移除或修改原项目中的署名信息、作者信息或项目链接等；不得限制他人查看这些信息**。\n2. 将本项目用于商业用途者，必须标明原作者及项目链接，并以 EPL-2.0 协议开源全部相关源代码。\n3. 未经修改的源代码不得用于商业用途。\n4. 任何使用或分享本项目者，不得移除、隐藏或限制查看本开源声明。\n5. 您在发现他人违反前四款所列各项要求时，请及时[向我们报告](https://github.com/tjy-gitnub/win12/issues)，并尽可能及时制止相关内容的发布与传输。\n6. 若您实施侵权行为，我们将根据法律规定保留记录，且保留在任何时间以一切方式采取法律行动、追究法律责任的权利（包括但不限于依法向执法机关提交报告、向司法机关提出控告、配合执法机关和司法机关调查等）。\n\n## 贡献须知\n\n详情请见 [贡献指南](./CONTRIBUTING.md)。\n\n本项目使用 i18n 库实现多语言，翻译工作依据[翻译贡献指南](lang/readme.md)进行。\n\n## 贡献者\n\n核心开发者: tjy-gitnub([Bilibili](https://space.bilibili.com/2010692096/))，NB-group([Bilibili](https://space.bilibili.com/1570243738/))，782([Bilibili](https://space.bilibili.com/1046361194/))（三人当年均为初中生）\n\n项目贡献者:详见[此处](https://github.com/tjy-gitnub/win12/graphs/contributors)（感谢我们出色的贡献者！）\n\n## 资助我们\n\n可以向我们的[爱发电账户](https://afdian.com/a/qstudio)捐款\n\n特别感谢以下赞助者:\n\n- CursoR\\_光标（<https://afdian.com/a/cursor>）\n- Baymax（<https://afdian.com/u/a131cd504dea11eeb6be5254001e7c00>）\n"
  },
  {
    "path": "apps/LICENSE",
    "content": "Attribution-ShareAlike 4.0 International\n\n=======================================================================\n\nCreative Commons Corporation (\"Creative Commons\") is not a law firm and\ndoes not provide legal services or legal advice. Distribution of\nCreative Commons public licenses does not create a lawyer-client or\nother relationship. Creative Commons makes its licenses and related\ninformation available on an \"as-is\" basis. Creative Commons gives no\nwarranties regarding its licenses, any material licensed under their\nterms and conditions, or any related information. Creative Commons\ndisclaims all liability for damages resulting from their use to the\nfullest extent possible.\n\nUsing Creative Commons Public Licenses\n\nCreative Commons public licenses provide a standard set of terms and\nconditions that creators and other rights holders may use to share\noriginal works of authorship and other material subject to copyright\nand certain other rights specified in the public license below. The\nfollowing considerations are for informational purposes only, are not\nexhaustive, and do not form part of our licenses.\n\n     Considerations for licensors: Our public licenses are\n     intended for use by those authorized to give the public\n     permission to use material in ways otherwise restricted by\n     copyright and certain other rights. Our licenses are\n     irrevocable. Licensors should read and understand the terms\n     and conditions of the license they choose before applying it.\n     Licensors should also secure all rights necessary before\n     applying our licenses so that the public can reuse the\n     material as expected. Licensors should clearly mark any\n     material not subject to the license. This includes other CC-\n     licensed material, or material used under an exception or\n     limitation to copyright. More considerations for licensors:\n     wiki.creativecommons.org/Considerations_for_licensors\n\n     Considerations for the public: By using one of our public\n     licenses, a licensor grants the public permission to use the\n     licensed material under specified terms and conditions. If\n     the licensor's permission is not necessary for any reason--for\n     example, because of any applicable exception or limitation to\n     copyright--then that use is not regulated by the license. Our\n     licenses grant only permissions under copyright and certain\n     other rights that a licensor has authority to grant. Use of\n     the licensed material may still be restricted for other\n     reasons, including because others have copyright or other\n     rights in the material. A licensor may make special requests,\n     such as asking that all changes be marked or described.\n     Although not required by our licenses, you are encouraged to\n     respect those requests where reasonable. More considerations\n     for the public:\n     wiki.creativecommons.org/Considerations_for_licensees\n\n=======================================================================\n\nCreative Commons Attribution-ShareAlike 4.0 International Public\nLicense\n\nBy exercising the Licensed Rights (defined below), You accept and agree\nto be bound by the terms and conditions of this Creative Commons\nAttribution-ShareAlike 4.0 International Public License (\"Public\nLicense\"). To the extent this Public License may be interpreted as a\ncontract, You are granted the Licensed Rights in consideration of Your\nacceptance of these terms and conditions, and the Licensor grants You\nsuch rights in consideration of benefits the Licensor receives from\nmaking the Licensed Material available under these terms and\nconditions.\n\n\nSection 1 -- Definitions.\n\n  a. Adapted Material means material subject to Copyright and Similar\n     Rights that is derived from or based upon the Licensed Material\n     and in which the Licensed Material is translated, altered,\n     arranged, transformed, or otherwise modified in a manner requiring\n     permission under the Copyright and Similar Rights held by the\n     Licensor. For purposes of this Public License, where the Licensed\n     Material is a musical work, performance, or sound recording,\n     Adapted Material is always produced where the Licensed Material is\n     synched in timed relation with a moving image.\n\n  b. Adapter's License means the license You apply to Your Copyright\n     and Similar Rights in Your contributions to Adapted Material in\n     accordance with the terms and conditions of this Public License.\n\n  c. BY-SA Compatible License means a license listed at\n     creativecommons.org/compatiblelicenses, approved by Creative\n     Commons as essentially the equivalent of this Public License.\n\n  d. Copyright and Similar Rights means copyright and/or similar rights\n     closely related to copyright including, without limitation,\n     performance, broadcast, sound recording, and Sui Generis Database\n     Rights, without regard to how the rights are labeled or\n     categorized. For purposes of this Public License, the rights\n     specified in Section 2(b)(1)-(2) are not Copyright and Similar\n     Rights.\n\n  e. Effective Technological Measures means those measures that, in the\n     absence of proper authority, may not be circumvented under laws\n     fulfilling obligations under Article 11 of the WIPO Copyright\n     Treaty adopted on December 20, 1996, and/or similar international\n     agreements.\n\n  f. Exceptions and Limitations means fair use, fair dealing, and/or\n     any other exception or limitation to Copyright and Similar Rights\n     that applies to Your use of the Licensed Material.\n\n  g. License Elements means the license attributes listed in the name\n     of a Creative Commons Public License. The License Elements of this\n     Public License are Attribution and ShareAlike.\n\n  h. Licensed Material means the artistic or literary work, database,\n     or other material to which the Licensor applied this Public\n     License.\n\n  i. Licensed Rights means the rights granted to You subject to the\n     terms and conditions of this Public License, which are limited to\n     all Copyright and Similar Rights that apply to Your use of the\n     Licensed Material and that the Licensor has authority to license.\n\n  j. Licensor means the individual(s) or entity(ies) granting rights\n     under this Public License.\n\n  k. Share means to provide material to the public by any means or\n     process that requires permission under the Licensed Rights, such\n     as reproduction, public display, public performance, distribution,\n     dissemination, communication, or importation, and to make material\n     available to the public including in ways that members of the\n     public may access the material from a place and at a time\n     individually chosen by them.\n\n  l. Sui Generis Database Rights means rights other than copyright\n     resulting from Directive 96/9/EC of the European Parliament and of\n     the Council of 11 March 1996 on the legal protection of databases,\n     as amended and/or succeeded, as well as other essentially\n     equivalent rights anywhere in the world.\n\n  m. You means the individual or entity exercising the Licensed Rights\n     under this Public License. Your has a corresponding meaning.\n\n\nSection 2 -- Scope.\n\n  a. License grant.\n\n       1. Subject to the terms and conditions of this Public License,\n          the Licensor hereby grants You a worldwide, royalty-free,\n          non-sublicensable, non-exclusive, irrevocable license to\n          exercise the Licensed Rights in the Licensed Material to:\n\n            a. reproduce and Share the Licensed Material, in whole or\n               in part; and\n\n            b. produce, reproduce, and Share Adapted Material.\n\n       2. Exceptions and Limitations. For the avoidance of doubt, where\n          Exceptions and Limitations apply to Your use, this Public\n          License does not apply, and You do not need to comply with\n          its terms and conditions.\n\n       3. Term. The term of this Public License is specified in Section\n          6(a).\n\n       4. Media and formats; technical modifications allowed. The\n          Licensor authorizes You to exercise the Licensed Rights in\n          all media and formats whether now known or hereafter created,\n          and to make technical modifications necessary to do so. The\n          Licensor waives and/or agrees not to assert any right or\n          authority to forbid You from making technical modifications\n          necessary to exercise the Licensed Rights, including\n          technical modifications necessary to circumvent Effective\n          Technological Measures. For purposes of this Public License,\n          simply making modifications authorized by this Section 2(a)\n          (4) never produces Adapted Material.\n\n       5. Downstream recipients.\n\n            a. Offer from the Licensor -- Licensed Material. Every\n               recipient of the Licensed Material automatically\n               receives an offer from the Licensor to exercise the\n               Licensed Rights under the terms and conditions of this\n               Public License.\n\n            b. Additional offer from the Licensor -- Adapted Material.\n               Every recipient of Adapted Material from You\n               automatically receives an offer from the Licensor to\n               exercise the Licensed Rights in the Adapted Material\n               under the conditions of the Adapter's License You apply.\n\n            c. No downstream restrictions. You may not offer or impose\n               any additional or different terms or conditions on, or\n               apply any Effective Technological Measures to, the\n               Licensed Material if doing so restricts exercise of the\n               Licensed Rights by any recipient of the Licensed\n               Material.\n\n       6. No endorsement. Nothing in this Public License constitutes or\n          may be construed as permission to assert or imply that You\n          are, or that Your use of the Licensed Material is, connected\n          with, or sponsored, endorsed, or granted official status by,\n          the Licensor or others designated to receive attribution as\n          provided in Section 3(a)(1)(A)(i).\n\n  b. Other rights.\n\n       1. Moral rights, such as the right of integrity, are not\n          licensed under this Public License, nor are publicity,\n          privacy, and/or other similar personality rights; however, to\n          the extent possible, the Licensor waives and/or agrees not to\n          assert any such rights held by the Licensor to the limited\n          extent necessary to allow You to exercise the Licensed\n          Rights, but not otherwise.\n\n       2. Patent and trademark rights are not licensed under this\n          Public License.\n\n       3. To the extent possible, the Licensor waives any right to\n          collect royalties from You for the exercise of the Licensed\n          Rights, whether directly or through a collecting society\n          under any voluntary or waivable statutory or compulsory\n          licensing scheme. In all other cases the Licensor expressly\n          reserves any right to collect such royalties.\n\n\nSection 3 -- License Conditions.\n\nYour exercise of the Licensed Rights is expressly made subject to the\nfollowing conditions.\n\n  a. Attribution.\n\n       1. If You Share the Licensed Material (including in modified\n          form), You must:\n\n            a. retain the following if it is supplied by the Licensor\n               with the Licensed Material:\n\n                 i. identification of the creator(s) of the Licensed\n                    Material and any others designated to receive\n                    attribution, in any reasonable manner requested by\n                    the Licensor (including by pseudonym if\n                    designated);\n\n                ii. a copyright notice;\n\n               iii. a notice that refers to this Public License;\n\n                iv. a notice that refers to the disclaimer of\n                    warranties;\n\n                 v. a URI or hyperlink to the Licensed Material to the\n                    extent reasonably practicable;\n\n            b. indicate if You modified the Licensed Material and\n               retain an indication of any previous modifications; and\n\n            c. indicate the Licensed Material is licensed under this\n               Public License, and include the text of, or the URI or\n               hyperlink to, this Public License.\n\n       2. You may satisfy the conditions in Section 3(a)(1) in any\n          reasonable manner based on the medium, means, and context in\n          which You Share the Licensed Material. For example, it may be\n          reasonable to satisfy the conditions by providing a URI or\n          hyperlink to a resource that includes the required\n          information.\n\n       3. If requested by the Licensor, You must remove any of the\n          information required by Section 3(a)(1)(A) to the extent\n          reasonably practicable.\n\n  b. ShareAlike.\n\n     In addition to the conditions in Section 3(a), if You Share\n     Adapted Material You produce, the following conditions also apply.\n\n       1. The Adapter's License You apply must be a Creative Commons\n          license with the same License Elements, this version or\n          later, or a BY-SA Compatible License.\n\n       2. You must include the text of, or the URI or hyperlink to, the\n          Adapter's License You apply. You may satisfy this condition\n          in any reasonable manner based on the medium, means, and\n          context in which You Share Adapted Material.\n\n       3. You may not offer or impose any additional or different terms\n          or conditions on, or apply any Effective Technological\n          Measures to, Adapted Material that restrict exercise of the\n          rights granted under the Adapter's License You apply.\n\n\nSection 4 -- Sui Generis Database Rights.\n\nWhere the Licensed Rights include Sui Generis Database Rights that\napply to Your use of the Licensed Material:\n\n  a. for the avoidance of doubt, Section 2(a)(1) grants You the right\n     to extract, reuse, reproduce, and Share all or a substantial\n     portion of the contents of the database;\n\n  b. if You include all or a substantial portion of the database\n     contents in a database in which You have Sui Generis Database\n     Rights, then the database in which You have Sui Generis Database\n     Rights (but not its individual contents) is Adapted Material,\n     including for purposes of Section 3(b); and\n\n  c. You must comply with the conditions in Section 3(a) if You Share\n     all or a substantial portion of the contents of the database.\n\nFor the avoidance of doubt, this Section 4 supplements and does not\nreplace Your obligations under this Public License where the Licensed\nRights include other Copyright and Similar Rights.\n\n\nSection 5 -- Disclaimer of Warranties and Limitation of Liability.\n\n  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE\n     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS\n     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF\n     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,\n     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,\n     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR\n     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,\n     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT\n     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT\n     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.\n\n  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE\n     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,\n     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,\n     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,\n     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR\n     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN\n     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR\n     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR\n     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.\n\n  c. The disclaimer of warranties and limitation of liability provided\n     above shall be interpreted in a manner that, to the extent\n     possible, most closely approximates an absolute disclaimer and\n     waiver of all liability.\n\n\nSection 6 -- Term and Termination.\n\n  a. This Public License applies for the term of the Copyright and\n     Similar Rights licensed here. However, if You fail to comply with\n     this Public License, then Your rights under this Public License\n     terminate automatically.\n\n  b. Where Your right to use the Licensed Material has terminated under\n     Section 6(a), it reinstates:\n\n       1. automatically as of the date the violation is cured, provided\n          it is cured within 30 days of Your discovery of the\n          violation; or\n\n       2. upon express reinstatement by the Licensor.\n\n     For the avoidance of doubt, this Section 6(b) does not affect any\n     right the Licensor may have to seek remedies for Your violations\n     of this Public License.\n\n  c. For the avoidance of doubt, the Licensor may also offer the\n     Licensed Material under separate terms or conditions or stop\n     distributing the Licensed Material at any time; however, doing so\n     will not terminate this Public License.\n\n  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public\n     License.\n\n\nSection 7 -- Other Terms and Conditions.\n\n  a. The Licensor shall not be bound by any additional or different\n     terms or conditions communicated by You unless expressly agreed.\n\n  b. Any arrangements, understandings, or agreements regarding the\n     Licensed Material not stated herein are separate from and\n     independent of the terms and conditions of this Public License.\n\n\nSection 8 -- Interpretation.\n\n  a. For the avoidance of doubt, this Public License does not, and\n     shall not be interpreted to, reduce, limit, restrict, or impose\n     conditions on any use of the Licensed Material that could lawfully\n     be made without permission under this Public License.\n\n  b. To the extent possible, if any provision of this Public License is\n     deemed unenforceable, it shall be automatically reformed to the\n     minimum extent necessary to make it enforceable. If the provision\n     cannot be reformed, it shall be severed from this Public License\n     without affecting the enforceability of the remaining terms and\n     conditions.\n\n  c. No term or condition of this Public License will be waived and no\n     failure to comply consented to unless expressly agreed to by the\n     Licensor.\n\n  d. Nothing in this Public License constitutes or may be interpreted\n     as a limitation upon, or waiver of, any privileges and immunities\n     that apply to the Licensor or You, including from the legal\n     processes of any jurisdiction or authority.\n\n\n=======================================================================\n\nCreative Commons is not a party to its public licenses.\nNotwithstanding, Creative Commons may elect to apply one of its public\nlicenses to material it publishes and in those instances will be\nconsidered the “Licensor.” The text of the Creative Commons public\nlicenses is dedicated to the public domain under the CC0 Public Domain\nDedication. Except for the limited purpose of indicating that material\nis shared under a Creative Commons public license or as otherwise\npermitted by the Creative Commons policies published at\ncreativecommons.org/policies, Creative Commons does not authorize the\nuse of the trademark \"Creative Commons\" or any other trademark or logo\nof Creative Commons without its prior written consent including,\nwithout limitation, in connection with any unauthorized modifications\nto any of its public licenses or any other arrangements,\nunderstandings, or agreements concerning use of licensed material. For\nthe avoidance of doubt, this paragraph does not form part of the public\nlicenses.\n\nCreative Commons may be contacted at creativecommons.org.\n"
  },
  {
    "path": "apps/NOTICE.md",
    "content": "# 非“自由版权”文件列表\n>[!CAUTION]\n>本列表内所列文件受著作权保护！相关文件属合理使用范畴。<br>本列表内所列文件可能含有受商标法或其他类似法律、法规保护的内容。\n\n| 文件名称 | 备注| \n| --- | --- |\n|disk.png|无| \n|diskwin.png |无|\n|folder.png|无|\n|od.png|是微软公司的商标|\n|rb.png|无|\n|thispc.png|无|\n|tool-copy|无|\n|tool-cut.png|无|\n|tool-new.png|无|\n|tool-paste.png|无|\n|tool-rename.png|无|\n|tool-sort.png|无|\n|tool-view.png|无|\n|apps.png|无|\n|blueteeth.png|无|\n|game.png|无|\n|help.png|无|\n|home.png|无|\n|ms.png|是微软公司的商标|\n|ms365.png|是微软公司的商标|\n|network.png|无|\n|personal.png|无|\n|safe.png|无|\n|system.png|无|\n|time.png|无|\n|update.png|无|\n|user.png|无|\n"
  },
  {
    "path": "apps/style/about.css",
    "content": "#win-about {\n    display: flex;\n}\n\n#win-setting>.menu>list>a  {\n    padding: 5px 10px 5px 20px;\n    font-size: 15px;\n    display: flex;\n    margin-bottom: 4px;\n    border-radius: 6px;\n}\n\n#win-about>.menu>list>a>img {\n    height: 20px;\n    width: 20px;\n    margin: 1px 10px 0 0;\n    font-size: 15px;\n}\n\n#win-about>.menu>list>a.check {\n    background-color: var(--hover) !important;\n}\n\n#win-about>.menu {\n    width: 25% !important;\n    overflow: hidden;\n    min-width: 180px;\n    max-width: 300px;\n    padding: 3px 5px 5px 15px;\n}\n\n\n#win-about>.menu>list {\n    padding-bottom: 50px !important;\n    margin-left: 5px;\n    height: calc(100% - 138px);\n    overflow-y: auto;\n    padding-right: 10px;\n    border-radius: 6px;\n}\n\n#win-about>.menu>list>*>img {\n    margin: 2px 7px 0 0;\n}\n\n#win-about>.cnt {\n    overflow: auto;\n    transform: translate(0, 50%);\n    opacity: 0;\n    width: 0;\n    transition: transform 300ms cubic-bezier(0, 0, 0, 1), opacity 300ms 50ms;\n    padding: 0 5px 60px 0;\n    /* display: none; */\n}\n\n#win-about>.cnt.show {\n    flex-grow: 1;\n    transform: none;\n    opacity: 1;\n    display: block;\n}\n\n#win-about>.cnt .tit {\n    margin: 8px 0 3px 0;\n    display: flex;\n}\n\n#win-about>.cnt .tit>span {\n    background: linear-gradient(180deg, var(--theme-1), var(--theme-2));\n    border-radius: 10px;\n    width: 6px;\n    margin: 5px 8px 5px 5px;\n    transition: 200ms;\n    transform: scaleY(0);\n    transform-origin: top;\n}\n\n#win-about>.cnt .tit:hover>span {\n    transform: none;\n}\n\n#win-about>.update>div>details {\n    background-color: var(--card);\n    padding: 10px 10px 0 15px;\n    border-radius: 8px;\n    box-shadow: 0 1px 2px 1px var(--s3d);\n    margin: 12px 10px 0 0;\n    transition: 100ms, height 0ms, padding-bottom 100ms ease-out;\n    overflow: hidden;\n    height: 45px;\n}\n\n:root.corner_squ #win-about>.update>div>details {\n    corner-shape: squircle;\n    border-radius: 20px;\n}\n\n#win-about>.update>div>details[open] {\n    padding-bottom: 10px;\n    height: 100%;\n}\n\n#win-about>.update>div>details:not([open]):hover {\n    filter: brightness(1.2);\n}\n\n#win-about>.update>div>details:active {\n    opacity: 0.6;\n}\n\n#win-about>.update>div>details>summary {\n    font-size: 17px;\n    transition: 200ms;\n}\n\n#win-about>.update>div>details>summary>span {\n    font-weight: 900;\n}\n\n#win-about>.update>div>details>p {\n    margin-left: 10px;\n}\n\n#contri {\n    display: flex;\n    flex-wrap: wrap;\n}\n\n#contri>.a {\n    margin: 3px;\n    background: var(--card);\n    box-shadow: 0 1px 2px var(--shadow);\n    border-radius: 10px;\n    width: 110px;\n    height: 70px;\n    text-align: center;\n    padding-top: 10px;\n    font-size: 13px;\n    transition: 50ms;\n}\n\n#contri>.a:hover {\n    background: var(--hover);\n}\n\n#contri>.a:active {\n    opacity: 0.6;\n}\n\n#contri>.a>.name {\n    font-size: 17px;\n    margin: 0px 6px;\n    /* border: 6px; */\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n}\n\n#contri>.a>.cbs>.num {\n    font-size: 15px;\n    font-weight: 550;\n}\n\n#contri>.button {\n    height: max-content;\n    margin: 10px 0 0 10px;\n}\n\n.window.winver{\n    width: 600px;\n    height: 550px;\n}\n\n#win-winver>.logo{\n    display: flex;\n    justify-content: center;\n    align-items: center;\n}\n\n#win-winver>.logo>.img{\n    background: url(../../icon/logo.svg) center;\n    background-size: cover;\n    height: 70px;\n    width: 70px;\n    margin:10px;\n}\n\n#win-winver>.logo>p{\n    background-image: linear-gradient(100deg, #b660d9,#2983cc);\n    -webkit-background-clip: text;\n    background-clip: text;\n    -webkit-text-fill-color: transparent;\n    font-size: 45px;\n    /* font-weight: 450; */\n    font-family:\n    'Microsoft Yahei UI';\n    margin: 15px;\n}\n\n#win-winver>hr{\n    width: calc(100% - 20px);\n    margin: 10px;\n}\n\n#win-winver p{\n    margin: 0 50px;\n}\n\n#win-winver>.mesg:hover{\n    text-decoration: underline!important;\n}\n\n#win-winver>.mesg:active{\n    opacity: 0.5;\n    transition: 30ms;\n}\n\n#win-winver>.bottom{\n    position: absolute;\n    bottom: 80px;\n}\n"
  },
  {
    "path": "apps/style/bios.css",
    "content": "@font-face {\n    font-family: 'dos';\n    src: url(../../fonts/dos.ttf);\n}\n\nbody {\n    background-color: #aaaaaa;\n}\n\nhtml,\nbody {\n    width: 100%;\n    height: 100%;\n}\n\n\n* {\n    font-family: 'dos', monospace;\n    padding: 0px;\n    margin: 0px;\n    border: 0px;\n    cursor: none;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -o-user-select: none;\n    user-select: none;\n    scrollbar-width: none;\n    -ms-overflow-style: none;\n    box-sizing: border-box;\n}\n\n::-webkit-scrollbar {\n    display: none;\n}\n\n.tit {\n    font-size: 1.2rem;\n    text-align: center;\n    background-color: #4ba7a8;\n    list-style-type: none;\n    margin: 0px;\n    padding: 5px;\n}\n\nbody {\n    display: flex;\n    flex-direction: column;\n}\n\n.pages {\n    background-color: #0100a2;\n    padding: 5px;\n}\n\na {\n    text-decoration: none;\n}\n\n.tab {\n    font-size: 110%;\n    color: #aaaaaa;\n    background-color: #0100a2;\n    margin: 5px;\n    padding: 5px;\n}\n\n.tab.foc {\n    color: #ffffff !important;\n}\n\n.tab.show {\n    color: #0100a2;\n    background-color: #aaaaaa;\n}\n\n.option {\n    color: #0100a2;\n    background-color: #aaaaaa;\n    padding: 0 10px;\n}\n\n.page {\n    margin: 20px;\n    padding: 20px;\n    border: 3.5px solid #000;\n    height: 100%;\n    display: none;\n    overflow-y: auto;\n}\n\n.page.show {\n    display: block !important;\n}\n\n.exit {\n    color: #0100a2;\n    padding: 5px;\n}\n\n.confirm-button {\n    background-color: #ffffff;\n    color: #000000;\n}\n\n#mainPage>.table,\n#advancedPage>.table,\n#bootPage>.table,\n#securityPage>.table {\n    display: grid;\n    grid-template-columns: auto auto;\n    gap: 10px;\n    width: fit-content;\n}\n\n#confirmContainer {\n    width: 100%;\n    height: 100%;\n    position: fixed;\n    top: 0px;\n    left: 0px;\n    display: none;\n    justify-content: center;\n    align-items: center;\n}\n\n#exit_confirm {\n    width: calc(30% + 50px);\n    height: calc(15% + 70px);\n    background-color: #ffffff;\n    padding: 20px 10px;\n    box-shadow: rgb(0, 0, 0) 8px 16px 0px 0px;\n}\n\n#confirm {\n    border: 3.5px solid #000;\n    height: 100%;\n    padding: 20px 10px;\n    text-align: center;\n    display: grid;\n    grid-template-rows: auto auto;\n}\n\n#confirm>*:first-child {\n    align-self: flex-start;\n}\n\n#confirm>*:last-child {\n    align-self: flex-end;\n}\n\n.submenu {\n    padding-left: 20px;\n    display: grid;\n    grid-template-columns: auto auto;\n    gap: 5px;\n    margin-bottom: 15px;\n}\n"
  },
  {
    "path": "apps/style/calc.css",
    "content": "@keyframes shine {\n    0% {\n        border-color: #111;\n    }\n    49% {\n        border-color: #111;\n    }\n    51% {\n        border-color: transparent;\n    }\n    98% {\n        border-color: transparent;\n    }\n    100% {\n        border-color: #111;\n    }\n}\n\n#win-calc {\n    display: flex;\n    flex-direction: column;\n    padding: 5px;\n}\n\n#calc-input {\n    /* height: 90px; */\n    border: none;\n    border-right: 2px solid transparent;\n    outline: none;\n    background-color: #00000000;\n    font-size: 35px;\n    text-align: end;\n    color: var(--text);\n    width: 100%;\n}\n\n#win-calc>.container {\n    height: 90px;\n    display: flex;\n    align-items: center;\n}\n\n#calc-input:focus {\n    border-color: #111;\n    animation-name: shine;\n    animation-duration: 1s;\n    animation-iteration-count: infinite;\n}\n\n#win-calc>.keyb {\n    flex-grow: 1;\n    display: grid;\n    grid-template-columns: repeat(4, 1fr);\n    grid-template-rows: repeat(5, 50px);\n    gap: 4px;\n}\n\n#win-calc>.keyb>.b {\n    /* width: 60px; */\n    height: 50px;\n    font-size: 25px;\n    text-align: center;\n    transition: 40ms;\n    border-radius: 7px;\n    /* border: 1.5px solid #63636330; */\n    box-shadow: 0px 1px 1px 1px var(--s3d);\n    background: var(--card);\n    padding-top: 5px;\n    /* border: 1.5px solid var(--bd);\n    border-top: 2px solid var(--bd);\n    border-bottom: 1px solid var(--bd); */\n    /* border-color: var(--bd); */\n    transform-origin: bottom;\n}\n\n#win-calc>.keyb>.checked {\n    background-color: var(--mm) !important;\n}\n\n#win-calc>.keyb>.b.u {\n    padding-top: 5px;\n}\n\n#win-calc>.keyb>.b.ans {\n    background-image: linear-gradient(120deg, var(--theme-1), var(--theme-2));\n    border: none;\n    color: #ddd;\n}\n\n#win-calc>.keyb>.b.ans:hover {\n    backdrop-filter: brightness(0.8);\n}\n\n#win-calc>.keyb>span {\n    width: 71px;\n    margin: 5px 5px;\n    height: 71px;\n}\n\n#win-calc>.keyb>.b:hover {\n    background-color: var(--hover);\n}\n\n#win-calc>.keyb>.b:active {\n    opacity: 0.8;\n    transform: scale(0.96);\n    box-shadow: 0px 1px 1px var(--bd);\n}"
  },
  {
    "path": "apps/style/camera.css",
    "content": ".camera-notice {\n    width: 300px !important;\n    height: 400px !important;\n}\n\n#win-camera {\n    position: relative;\n}\n\n#win-camera>.video {\n    width: 100%;\n    height: 100%;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n}\n\n#win-camera>.control>div {\n    width: 45px;\n    height: 45px;\n}\n\n#win-camera>.control>div>.startbutton {\n    width: 45px;\n    height: 45px;\n    border-radius: 50%;\n    background-color: #ffffffee;\n    backdrop-filter: blur(10px) saturate(1.3);\n    box-shadow: 0 0 0 4px #44444470, 0 0 0 7px #ffffffa0, 1px 1px 15px 7px #00000090;\n    transition: 200ms;\n}\n\n#win-camera>.control>div>.startbutton:hover {\n    background-color: #ffffffc0;\n}\n\n#win-camera>.control {\n    position: absolute;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    background: #00000010;\n}\n\n#win-camera.h>.control {\n    height: 100%;\n    width: 80px;\n    right: 0px;\n    top: 0px;\n}\n\n#win-camera.v>.control {\n    height: 80px;\n    width: 100%;\n    bottom: 0px;\n    left: 0px;\n}\n\n#win-camera.h video {\n    height: 100%;\n}\n\n#win-camera.v video {\n    width: 100%;\n}"
  },
  {
    "path": "apps/style/code-editor.css",
    "content": "#win-code-editor {\n    display: flex;\n    flex-direction: column;\n    min-height: 0;\n    user-select: all;\n}\n\n#win-code-editor *::-webkit-scrollbar {\n    background-color: #FFFFFF10;\n}\n\n#win-code-editor * {\n    scroll-behavior: initial !important;\n}\n\n#code-ace-editor {\n    font-size: 15px;\n    line-height: 1.4;\n    width: 100% !important;\n    height: 100% !important;\n    font-weight: 200;\n}\n"
  },
  {
    "path": "apps/style/copilot.css",
    "content": "#copilot{\n    position: fixed;\n    right: -410px;\n    background-color: var(--bg70);\n    /* box-shadow: 1px 2px 25px var(--shadow); */\n    border: 2px solid #6f6f6f30;\n    width: 400px;\n    height: calc(100% - 70px);\n    top: 10px;\n    border-radius: 14px;\n    overflow: hidden;\n    transition: 300ms cubic-bezier(0.9, 0, 0.1, 1);\n    z-index: 92;\n    display: flex;\n    flex-direction: column;\n    padding-top: 5px;\n}\n\n#copilot.show{\n    right: 10px;\n    box-shadow: 1px 2px 25px var(--shadow);\n    backdrop-filter: blur(60px) saturate(3) contrast(0.6);\n    /* backdrop-filter: blur(80px) saturate(1.3); */\n    -webkit-backdrop-filter: blur(60px) saturate(3) contrast(0.6);\n}\n\n#copilot>.titbar{\n    height: 40px;\n    display: flex;\n    align-items: center;\n    padding: 0 10px;\n    min-height: 40px;\n}\n\n#copilot>.titbar>.text{\n    font-size: 20px;\n}\n\n#copilot>.titbar>.alr{\n    flex-grow: 1;\n    display: flex;\n    justify-content: flex-end;\n}\n\n#copilot>.titbar>.alr>.btn{\n    width: 35px;\n    height: 35px;\n    text-align: center;\n    padding: 6px 0;\n    display: block;\n}\n\n#copilot>.chat{\n    flex-grow: 1;\n    padding: 10px 15px;\n    overflow-y: auto;\n    overflow-x:hidden !important;\n    scroll-behavior: smooth;\n}\n\n#copilot>.chat>.line{\n    width: 100%;\n    display: flex;\n    margin-top: 15px;\n}\n#copilot>.chat>.line.user{\n    width: 100%;\n    flex-direction: row-reverse;\n}\n@keyframes msg{\n    0%{\n        opacity: 0;\n        transform: translateY(20px);\n    }\n    100%{\n        opacity: 1;\n        transform: none;\n    }\n}\n\n#copilot>.chat>.line>.text{\n    width: max-content;\n    padding: 10px 15px;\n    border-radius: 10px;\n    box-shadow: 0 1px 6px var(--shadow);\n    max-width: calc(100% - 40px);\n    word-break:break-word;\n    animation: msg 400ms cubic-bezier(0,0,0,1);\n    user-select:text;\n}\n#copilot>.chat>.line.ai>.text{\n    background-color: var(--msg);\n}\n#copilot>.chat>.line.user>.text{\n    background: linear-gradient(100deg,#3397e9c0,#024bb1d6);\n    color: #fff;\n}\n#copilot>.chat>.line.system>.text{\n    background: linear-gradient(100deg,#ca3ee0b0,#6f0bbcbe);\n    color: #fff;\n}\n#copilot>.chat>.line.ai>.text>.action{\n    background-color: var(--hover-b);\n    padding: 10px 15px;\n    border-radius: 9px;\n    box-shadow: 0 1px 2px var(--s3d);\n    margin: 10px 5px;\n}\n#copilot>.chat>.line.ai>.text>.action>.tit{\n    font-size: 20px;\n}\n\n#copilot>.inputbox{\n    height: 60px;\n    display: flex;\n    align-items: center;\n    min-height: 60px;\n}\n\n#copilot>.inputbox.disable{\n    pointer-events:none;\n    filter: saturate(0.8) brightness(0.9);\n}\n\n#copilot>.inputbox>.input{\n    margin: 0 10px;\n    flex-grow: 1;\n    height: 40px;\n}\n\n#copilot>.inputbox>.send{\n    width: 80px;\n    color: #fff;\n    text-align: center;\n    margin-right: 10px;\n    background: linear-gradient(120deg,var(--theme-1),var(--theme-2));\n}"
  },
  {
    "path": "apps/style/defender.css",
    "content": "#win-defender icon {\n    font-family: SettingsIcons;\n    font-size: 20px;\n    margin: 0px 20px 0 5px;\n    background-image: linear-gradient(100deg, var(--theme-1), var(--theme-2));\n    -webkit-background-clip: text;\n    background-clip: text;\n    -webkit-text-fill-color: transparent;\n    filter: saturate(130%) brightness(1.1);\n}\n\n.window.defender {\n    --app-bg-dark: #01081f;\n    --app-bg-before: linear-gradient(180deg, rgba(1, 8, 31, 0) 0%, rgba(1, 8, 31, 1) 100%);\n    --app-bg-before-2: linear-gradient(0deg, rgba(1, 8, 31, 0) 0%, rgba(1, 8, 31, 1) 100%);\n    --app-bg-light: #151c32;\n    --app-logo: #3d7eff;\n    --nav-link: #5e6a81;\n    --nav-link-active: #fff;\n    --list-item-hover: #0c1635;\n    --main-color: #fff;\n    --secondary-color: #5e6a81;\n    --color-light: rgba(52, 129, 210, .2);\n    --warning-bg: #ffe5e5;\n    --warning-icon: #ff8181;\n    --applicant-bg: #e3fff1;\n    --applicant-icon: #61e1a1;\n    --close-bg: #fff8e5;\n    --close-icon: #fdbc64;\n    --draft-bg: #fed8b3;\n    --draft-icon: #e9780e;\n}\n\n#win-defender {\n    width: 100%;\n    height: 100%;\n    display: flex;\n    position: relative;\n    max-width: 1680px;\n}\n\n#win-defender .app-left {\n    flex-basis: 240px;\n    background-color: var(--app-bg-dark);\n    height: 100%;\n    overflow-y: auto;\n    overflow-x: hidden;\n    padding: 24px 0;\n    transition: all 0.4s ease-in;\n}\n\n#win-defender .app-left.show {\n    right: 0;\n    opacity: 1;\n}\n\n#win-defender .app-main {\n    flex: 1;\n    height: 100%;\n    overflow-y: auto;\n    overflow-x: hidden;\n    background-color: var(--app-bg-light);\n    padding: 24px;\n    background: radial-gradient(circle, #051340 1%, #040f32 100%);\n}\n\n#win-defender .app-right {\n    flex-basis: 320px;\n    width: 320px;\n    background-color: var(--app-bg-dark);\n    height: 100%;\n    padding: 64px 0 0 0;\n    display: flex;\n    flex-direction: column;\n    position: relative;\n    transition: all 0.4s ease-in;\n}\n\n#win-defender .app-right:before {\n    content: \"\";\n    position: absolute;\n    bottom: 0;\n    height: 48px;\n    width: 100%;\n    background-image: var(--app-bg-before);\n    z-index: 1;\n}\n\n#win-defender .app-right.show {\n    right: 0;\n    opacity: 1;\n}\n\n#win-defender .app-right .close-right {\n    display: none;\n}\n\n#win-defender .app-right-content {\n    flex: 1;\n    height: 100%;\n    overflow-y: auto;\n    overflow-x: hidden;\n}\n\n#win-defender .app-logo {\n    display: flex;\n    align-items: center;\n    color: var(--app-logo);\n    margin-right: 16px;\n    padding: 0 24px;\n}\n\n#win-defender .app-logo span {\n    color: #fff;\n    display: inline-block;\n    line-height: 24px;\n    font-size: 16px;\n    margin-left: 16px;\n}\n\n#win-defender ul {\n    list-style-type: none;\n    padding: 0;\n}\n\n#win-defender a {\n    text-decoration: none;\n    cursor: pointer;\n}\n\n#win-defender button {\n    cursor: pointer;\n}\n\n#win-defender .nav-list {\n    margin-top: 40px;\n}\n\n#win-defender .nav-list-item {\n    margin-bottom: 12px;\n}\n\n#win-defender .nav-list-item:not(.active):hover {\n    background-color: var(--list-item-hover);\n}\n\n#win-defender .nav-list-item.active .nav-list-link {\n    color: var(--nav-link-active);\n}\n\n#win-defender .nav-list-item.active .nav-list-link:after {\n    height: 100%;\n    opacity: 1;\n}\n\n#win-defender .nav-list-item.active svg {\n    stroke: var(--app-logo);\n}\n\n#win-defender .nav-list-link {\n    font-weight: 300;\n    font-size: 14px;\n    line-height: 24px;\n    padding: 8px 24px;\n    color: var(--nav-link);\n    display: flex;\n    align-items: center;\n    position: relative;\n}\n\n#win-defender .nav-list-link svg {\n    margin-right: 12px;\n}\n\n#win-defender .nav-list-link:after {\n    content: \"\";\n    height: 100%;\n    width: 2px;\n    background-color: var(--app-logo);\n    right: 0;\n    top: 0;\n    position: absolute;\n    border-radius: 2px;\n    opacity: 0;\n    height: 0;\n}\n\n#win-defender .open-right-area {\n    display: none;\n    justify-content: center;\n    align-items: center;\n    border: none;\n    background-color: var(--app-bg-dark);\n    border-radius: 4px;\n    height: 40px;\n    width: 40px;\n    padding: 0;\n}\n\n#win-defender .main-header-line {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    margin-bottom: 16px;\n}\n\n#win-defender .main-header-line h1 {\n    color: var(--main-color);\n    margin: 0;\n    font-size: 24px;\n    line-height: 32px;\n}\n\n#win-defender .main-header-line input {\n    border-radius: 4px;\n    background-color: var(--color-light);\n    border: none;\n    border: 1px solid var(--color-light);\n    color: var(--main-color);\n    height: 32px;\n    padding: 0 8px 0 32px;\n    font-size: 14px;\n    background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%233481d2' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-search'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'/%3E%3C/svg%3E\");\n    background-position: center left 10px;\n    background-repeat: no-repeat;\n    background-size: 16px;\n    outline: none;\n    transition: 0.2s;\n    width: 100%;\n    max-width: 400px;\n    margin-left: 16px;\n}\n\n#win-defender .main-header-line input:placeholder {\n    font-size: 14px;\n    color: rgba(255, 255, 255, 0.6);\n}\n\n#win-defender .main-header-line input:hover,\n#win-defender .main-header-line input:focus {\n    border: 1px solid #3481d2;\n    box-shadow: 0 0 0 3px var(--color-light);\n}\n\n#win-defender .chart-row {\n    display: flex;\n    justify-content: space-between;\n    margin: 0 -8px;\n}\n\n#win-defender .chart-row.three .chart-container-wrapper {\n    width: 33.3%;\n}\n\n#win-defender .chart-row.three .chart-container-wrapper .chart-container {\n    justify-content: space-between;\n}\n\n#win-defender .chart-row.two .big {\n    flex: 1;\n    max-width: 77.7%;\n}\n\n#win-defender .chart-row.two .big .chart-container {\n    flex-direction: column;\n}\n\n#win-defender .chart-row.two .small {\n    width: 33.3%;\n}\n\n#win-defender .chart-row.two .small .chart-container {\n    flex-direction: column;\n}\n\n#win-defender .chart-row.two .small .chart-container+.chart-container {\n    margin-top: 16px;\n}\n\n#win-defender .line-chart {\n    width: 100%;\n    margin-top: 24px;\n}\n\n#win-defender .chart-container {\n    width: 100%;\n    border-radius: 10px;\n    background-color: var(--app-bg-dark);\n    padding: 16px;\n    display: flex;\n    align-items: center;\n}\n\n#win-defender .chart-container.applicants {\n    max-height: 336px;\n    overflow-y: auto;\n}\n\n#win-defender .chart-container-wrapper {\n    padding: 21px;\n}\n\n#win-defender .chart-info-wrapper {\n    flex-shrink: 0;\n    flex-basis: 120px;\n}\n\n#win-defender .chart-info-wrapper h2 {\n    color: var(--secondary-color);\n    font-size: 12px;\n    line-height: 16px;\n    font-weight: 600;\n    text-transform: uppercase;\n    margin: 0 0 8px 0;\n}\n\n#win-defender .chart-info-wrapper span {\n    color: var(--main-color);\n    font-size: 24px;\n    line-height: 32px;\n    font-weight: 500;\n}\n\n#win-defender .chart-svg {\n    position: relative;\n    max-width: 90px;\n    min-width: 40px;\n    flex: 1;\n}\n\n#win-defender .circle-bg {\n    fill: none;\n    stroke: #eee;\n    stroke-width: 1.2;\n}\n\n#win-defender .circle {\n    fill: none;\n    stroke-width: 1.6;\n    stroke-linecap: round;\n    -webkit-animation: progress 1s ease-out forwards;\n    animation: progress 1s ease-out forwards;\n}\n\n#win-defender .circular-chart.orange .circle {\n    stroke: #ff9f00;\n}\n\n#win-defender .circular-chart.orange .circle-bg {\n    stroke: #776547;\n}\n\n#win-defender .circular-chart.blue .circle {\n    stroke: #00cfde;\n}\n\n#win-defender .circular-chart.blue .circle-bg {\n    stroke: #557b88;\n}\n\n#win-defender .circular-chart.pink .circle {\n    stroke: #ff7dcb;\n}\n\n#win-defender .circular-chart.pink .circle-bg {\n    stroke: #6f5684;\n}\n\n#win-defender .percentage {\n    fill: #fff;\n    font-size: 0.5em;\n    text-anchor: middle;\n    font-weight: 400;\n}\n\n@-webkit-keyframes progress {\n    0% {\n        stroke-dasharray: 0 100;\n    }\n}\n\n@keyframes progress {\n    0% {\n        stroke-dasharray: 0 100;\n    }\n}\n\n#win-defender .chart-container-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    width: 100%;\n    margin-bottom: 12px;\n}\n\n#win-defender .chart-container-header h2 {\n    margin: 0;\n    color: var(--main-color);\n    font-size: 12px;\n    line-height: 16px;\n    opacity: 0.8;\n}\n\n#win-defender .chart-container-header span {\n    color: var(--app-logo);\n    font-size: 12px;\n    line-height: 16px;\n}\n\n#win-defender .acquisitions-bar {\n    width: 100%;\n    height: 4px;\n    border-radius: 4px;\n    margin-top: 16px;\n    margin-bottom: 8px;\n    display: flex;\n}\n\n#win-defender .bar-progress {\n    height: 4px;\n    display: inline-block;\n}\n\n#win-defender .bar-progress.applications {\n    background-color: #ff7dcb;\n}\n\n#win-defender .bar-progress.shortlisted {\n    background-color: #00cfde;\n}\n\n#win-defender .bar-progress.on-hold {\n    background-color: #fdac42;\n}\n\n#win-defender .bar-progress.rejected {\n    background-color: #ff5c5c;\n}\n\n#win-defender .progress-bar-info {\n    display: flex;\n    align-items: center;\n    margin-top: 8px;\n    width: 100%;\n}\n\n#win-defender .progress-color {\n    width: 10px;\n    height: 10px;\n    border-radius: 50%;\n    margin-right: 8px;\n}\n\n#win-defender .progress-color.applications {\n    background-color: #ff7dcb;\n}\n\n#win-defender .progress-color.shortlisted {\n    background-color: #00cfde;\n}\n\n#win-defender .progress-color.on-hold {\n    background-color: #fdac42;\n}\n\n#win-defender .progress-color.rejected {\n    background-color: #ff5c5c;\n}\n\n#win-defender .progress-type {\n    color: var(--secondary-color);\n    font-size: 12px;\n    line-height: 16px;\n}\n\n#win-defender .progress-amount {\n    color: var(--secondary-color);\n    font-size: 12px;\n    line-height: 16px;\n    margin-left: auto;\n}\n\n#win-defender .applicant-line {\n    display: flex;\n    align-items: center;\n    width: 100%;\n    margin-top: 12px;\n}\n\n#win-defender .applicant-line img {\n    width: 32px;\n    height: 32px;\n    border-radius: 50%;\n    -o-object-fit: cover;\n    object-fit: cover;\n    margin-right: 10px;\n    flex-shrink: 0;\n}\n\n#win-defender .applicant-info span {\n    color: var(--main-color);\n    font-size: 14px;\n    line-height: 16px;\n}\n\n#win-defender .applicant-info p {\n    margin: 4px 0;\n    font-size: 12px;\n    line-height: 16px;\n    color: var(--secondary-color);\n}\n\n#win-defender .profile-box {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    position: relative;\n}\n\n#win-defender .profile-box:before {\n    content: \"\";\n    position: absolute;\n    top: 100%;\n    height: 48px;\n    width: 100%;\n    background-image: var(--app-bg-before-2);\n    z-index: 1;\n}\n\n#win-defender .profile-photo-wrapper {\n    width: 80px;\n    height: 80px;\n    overflow: hidden;\n    border-radius: 50%;\n    margin-bottom: 16px;\n}\n\n#win-defender .profile-photo-wrapper img {\n    width: 100%;\n    height: 100%;\n    -o-object-fit: cover;\n    object-fit: cover;\n}\n\n#win-defender .profile-text,\n#win-defender .profile-subtext {\n    font-size: 12px;\n    line-height: 16px;\n    color: var(--secondary-color);\n    margin: 0 0 8px 0;\n}\n\n#win-defender .profile-text {\n    font-weight: 600;\n}\n\n#win-defender .app-right-section-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding: 0 16px;\n    margin-top: 16px;\n}\n\n#win-defender .app-right-section-header h2 {\n    font-size: 14px;\n    line-height: 24px;\n    color: var(--secondary-color);\n}\n\n#win-defender .app-right-section-header span {\n    display: inline-block;\n    color: var(--secondary-color);\n    position: relative;\n}\n\n#win-defender .app-right-section-header span.notification-active:before {\n    content: \"\";\n    position: absolute;\n    width: 6px;\n    height: 6px;\n    border-radius: 50%;\n    background-color: var(--app-logo);\n    top: -1px;\n    right: -1px;\n    box-shadow: 0 0 0 2px var(--app-bg-dark);\n}\n\n#win-defender .message-line {\n    display: flex;\n    align-items: center;\n    padding: 8px 16px;\n    margin-bottom: 8px;\n}\n\n#win-defender .message-line:hover {\n    background-color: var(--list-item-hover);\n}\n\n#win-defender .message-line img {\n    width: 32px;\n    height: 32px;\n    border-radius: 50%;\n    -o-object-fit: cover;\n    object-fit: cover;\n    margin-right: 8px;\n}\n\n#win-defender .message-text-wrapper {\n    max-width: calc(100% - 48px);\n}\n\n#win-defender .message-text {\n    font-size: 14px;\n    line-height: 16px;\n    color: var(--main-color);\n    margin: 0;\n    opacity: 0.8;\n    width: 100%;\n}\n\n#win-defender .message-subtext {\n    font-size: 12px;\n    line-height: 16px;\n    color: var(--secondary-color);\n    margin: 4px 0 0 0;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    width: 100%;\n}\n\n#win-defender .activity-line {\n    padding: 8px 16px;\n    display: flex;\n    align-items: flex-start;\n    margin-bottom: 8px;\n}\n\n#win-defender .activity-link {\n    font-size: 12px;\n    line-height: 16px;\n    color: var(--app-logo);\n    text-decoration: underline;\n}\n\n#win-defender .activity-text {\n    font-size: 12px;\n    line-height: 16px;\n    color: var(--secondary-color);\n    width: 100%;\n    margin: 0;\n}\n\n#win-defender .activity-text strong {\n    color: #fff;\n    opacity: 0.4;\n    font-weight: 500;\n}\n\n#win-defender .activity-icon {\n    border-radius: 8px;\n    width: 32px;\n    height: 32px;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    flex-shrink: 0;\n    margin-right: 8px;\n}\n\n#win-defender .activity-icon.warning {\n    background-color: var(--warning-bg);\n    color: var(--warning-icon);\n}\n\n#win-defender .activity-icon.applicant {\n    background-color: var(--applicant-bg);\n    color: var(--applicant-icon);\n}\n\n#win-defender .activity-icon.close {\n    background-color: var(--close-bg);\n    color: var(--close-icon);\n}\n\n#win-defender .activity-icon.draft {\n    background-color: var(--draft-bg);\n    color: var(--draft-icon);\n}\n\n#win-defender .action-buttons {\n    display: flex;\n    align-items: center;\n}\n\n#win-defender .menu-button {\n    width: 40px;\n    height: 40px;\n    margin-left: 8px;\n    display: none;\n    justify-content: center;\n    align-items: center;\n    padding: 0;\n    background-color: var(--app-bg-dark);\n    border: none;\n    color: var(--main-color);\n    border-radius: 4px;\n}\n\n#win-defender .close-menu {\n    position: absolute;\n    top: 16px;\n    right: 16px;\n    display: none;\n    align-items: center;\n    justify-content: center;\n    border: none;\n    background-color: transparent;\n    padding: 0;\n    color: var(--main-color);\n    cursor: pointer;\n}\n\n@media screen and (max-width: 1350px) {\n    #win-defender .app-right {\n        flex-basis: 240px;\n        width: 240px;\n    }\n\n    #win-defender .app-left {\n        flex-basis: 200px;\n    }\n}\n\n@media screen and (max-width: 1200px) {\n    #win-defender .app-right {\n        position: absolute;\n        opacity: 0;\n        top: 0;\n        z-index: 2;\n        height: 100%;\n        width: 320px;\n        right: -100%;\n        box-shadow: 0 0 10px 5px rgba(1, 8, 31, 0.4);\n    }\n\n    #win-defender .app-right .close-right {\n        position: absolute;\n        top: 16px;\n        right: 16px;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        border: none;\n        background-color: transparent;\n        padding: 0;\n        color: var(--main-color);\n        cursor: pointer;\n    }\n\n    #win-defender .app-main .open-right-area {\n        display: flex;\n        color: var(--main-color);\n    }\n}\n\n@media screen and (max-width: 1180px) {\n    #win-defender .chart-row.two {\n        flex-direction: column;\n    }\n\n    #win-defender .chart-row.two .big {\n        max-width: 100%;\n    }\n\n    #win-defender .chart-row.two .small {\n        display: flex;\n        justify-content: space-between;\n        width: 100%;\n    }\n\n    #win-defender .chart-row.two .small .chart-container {\n        width: calc(50% - 8px);\n    }\n\n    #win-defender .chart-row.two .small .chart-container.applicants {\n        margin-top: 0;\n    }\n}\n\n@media screen and (max-width: 920px) {\n    #win-defender .menu-button {\n        display: flex;\n    }\n\n    #win-defender .app-left {\n        position: absolute;\n        opacity: 0;\n        top: 0;\n        z-index: 2;\n        height: 100%;\n        width: 320px;\n        right: -100%;\n        box-shadow: 0 0 10px 5px rgba(1, 8, 31, 0.4);\n    }\n\n    #win-defender .close-menu {\n        display: flex;\n    }\n}\n\n@media screen and (max-width: 650px) {\n    #win-defender .chart-row.three {\n        flex-direction: column;\n    }\n\n    #win-defender .chart-row.three .chart-container-wrapper {\n        width: 100%;\n    }\n\n    #win-defender .chart-svg {\n        min-height: 60px;\n        min-width: 40px;\n    }\n}\n\n@media screen and (max-width: 520px) {\n    #win-defender .chart-row.two .small {\n        flex-direction: column;\n    }\n\n    #win-defender .chart-row.two .small .chart-container {\n        width: 100%;\n    }\n\n    #win-defender .chart-row.two .small .chart-container.applicants {\n        margin-top: 16px;\n    }\n\n    #win-defender .main-header-line h1 {\n        font-size: 14px;\n    }\n}"
  },
  {
    "path": "apps/style/edge.css",
    "content": ".window.edge.max>#win-edge {\n    padding-bottom: 55px;\n}\n\n#win-edge {\n    display: flex;\n    flex-direction: column;\n    transition: 50ms;\n}\n\n#win-edge>.tool {\n    display: flex;\n    padding: 6px 7px 2px 7px;\n}\n\n#win-edge>.tool>.a {\n    font-size: 18px;\n    border-radius: 6px;\n    width: 35px;\n    height: 30px;\n    text-align: center;\n    transition: 50ms;\n    margin: 0 1.5px;\n    --top:2px;\n}\n\n#win-edge>.tool>.a.disabled {\n    filter: opacity(0.5);\n    pointer-events: none;\n}\n\n#win-edge>.tool>.a>.bi::before {\n    position: relative;\n    top: var(--top);\n}\n\n#win-edge>.tool>.a:hover {\n    background-color: var(--hover-half);\n}\n\n#win-edge>.tool>input {\n    background-color: var(--hover-half);\n    border-radius: 50px;\n    border: 1.5px solid transparent;\n    padding: 3px 14px 4px 10px;\n    outline: medium;\n    color: var(--text);\n    transition: 100ms, border 0s;\n    height: 30px;\n    margin: 0 2px;\n}\n\n#win-edge>.tool>input.url {\n    flex-grow: 1;\n}\n\n#win-edge>.tool>input.rename:not(.show) {\n    width: 0;\n    padding: 0;\n    border: none;\n}\n\n#win-edge>.tool>input.rename.show {\n    width: 200px;\n}\n\n#win-edge>.tool>input:hover {\n    border-color: #7f7f7f7f;\n}\n\n#win-edge>.tool>input:focus {\n    border-color: var(--href);\n}\n\n#win-edge>iframe {\n    width: calc(100% - 4px);\n    flex-grow: 1;\n    margin: 2px;\n    border-radius: 10px;\n    --bg: var(--bg);\n    --text: var(--text);\n    display: none;\n}\n\n#win-edge>iframe.show {\n    display: block;\n}\n\n.reloading>svg {\n    width: 27px !important;\n}\n\n.reloading {\n    margin-right: -5px;\n    margin-bottom: -4px;\n    animation: reload 100ms;\n}\n\n@keyframes reload {\n    0% {\n        margin-right: -27px;\n    }\n\n    100% {\n        margin-right: -5px;\n    }\n}\n\n.reloading>svg>circle:first-child {\n    stroke: #7f7f7f50;\n    fill: none;\n    stroke-width: 2px;\n}\n\n.reloading>svg>circle:last-child {\n    stroke: #2983cc;\n    stroke-width: 2px;\n}\n\n#voiceBall {\n    aspect-ratio: 1;\n}\n"
  },
  {
    "path": "apps/style/explorer.css",
    "content": ".window.explorer>.titbar>.tabs>.tab>p>img {\n    width: 25px;\n    height: 25px;\n    margin-right: 5px;\n}\n\n.window.explorer>.titbar>.tabs>.tab>p {\n    display: flex !important;\n    align-items: center;\n}\n\n#win-explorer {\n    display: flex;\n    flex-direction: column;\n}\n\n#win-explorer>.page {\n    display: flex;\n    flex-grow: 1;\n    overflow: hidden;\n}\n\n#win-explorer>.page>.menu {\n    min-width: 250px;\n    height: 100%;\n    overflow-y: auto;\n    margin-right: 6px;\n    padding-right: 2px;\n}\n\n#win-explorer>.page>.menu>.card {\n    margin: 10px 0 10px 15px;\n    border-radius: 8px;\n    background-color: var(--card);\n    padding: 4px;\n    box-shadow: 0 1px 2px 1px var(--s3d);\n}\n\n#win-explorer>.page>.menu>.card>.title {\n    padding: 6px 10px;\n    font-weight: 550;\n}\n\n#win-explorer>.page>.menu>.card>list>a {\n    padding: 4px 5px 4px 20px;\n    font-size: 15px;\n    border-radius: 7px;\n    transition: 100ms;\n    display: flex;\n    height: 30px;\n    align-items: center;\n}\n\n#win-explorer>.page>.menu>.card>list>a.check {\n    background-color: var(--hover) !important;\n}\n\n#win-explorer>.page>.menu>.pinned>list>a>img {\n    width: 18px;\n    height: 18px;\n    /* margin-top: 2px; */\n    margin-right: 5px;\n}\n\n#win-explorer>.page>.menu>.tags>list>a>span:first-child {\n    width: 13px;\n    height: 13px;\n    margin-left: 4px;\n    /* margin-top: 4px; */\n    margin-right: 7px;\n    border-radius: 50%;\n    box-shadow: 0 0 5px var(--shadow);\n}\n\n#win-explorer>.page>.main {\n    flex-grow: 1;\n    height: 100%;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n    padding-left: 2px;\n}\n\n#win-explorer>.page>.main>.tool {\n    width: 100%;\n    height: 42px;\n    display: flex;\n    padding: 0 10px 5px 10px;\n    margin-top: 3px;\n    align-items: center;\n}\n\n#win-explorer>.page>.main>.tool>.b {\n    height: 33px;\n    padding: 6px 8px;\n    border-radius: 7px;\n    transition: 100ms;\n    margin: 0 1px;\n}\n\n#win-explorer>.page>.main>.tool>.b.t {\n    display: flex;\n    align-items: center;\n    font-size: 15px;\n}\n\n#win-explorer>.page>.main>.tool>.b.t>img {\n    display: flex;\n    margin-right: 5px;\n}\n\n#win-explorer>.page>.main>.tool>.b:hover {\n    background-color: var(--hover);\n}\n\n#win-explorer>.page>.main>.tool>.b>img {\n    width: 20px;\n    height: 20px;\n}\n\n#win-explorer>.page>.main>.tool>.hr {\n    width: 2px;\n    height: 25px;\n    background-color: #7f7f7f7f;\n    border-radius: 10px;\n    margin: 5px 3px;\n}\n\n#win-explorer>.page>.main>.content {\n    width: calc(100% - 15px);\n    flex-grow: 1;\n    background-color: var(--card);\n    border-radius: 8px;\n    margin: 0 15px 10px 0;\n    padding: 13px 10px 40px 10px;\n    overflow-y: auto;\n    /* border: 1.5px solid #6f6f6f30; */\n    box-shadow: 0 1px 2px 1px var(--s3d);\n}\n\n#win-explorer>.path {\n    height: 35px;\n    width: 100%;\n    display: flex;\n    padding: 4px 10px 0 10px;\n    align-items: center;\n    /* margin-bottom: 10px; */\n}\n\n\n#win-explorer>.path>.front.disabled,\n#win-explorer>.path>.back.disabled {\n    filter: opacity(0.5);\n    pointer-events: none;\n}\n\n#win-explorer>.path>.btn {\n    transition: 100ms;\n    font-size: 17px;\n    text-align: center;\n    padding-top: 4px;\n    min-width: 33px;\n}\n\n#win-explorer>.path>.tit {\n    overflow: hidden;\n    display: flex;\n    /* background-color: var(--bg70); */\n    flex-grow: 1;\n    margin: 0px 10px 0px 5px;\n    border-radius: 7px;\n    height: 32px;\n    /* align-items: center; */\n}\n\n#win-explorer>.path>.tit>img {\n    width: 22px;\n    height: 22px;\n    margin-top: 2px;\n}\n\n#win-explorer>.path>.tit>.path {\n    display: flex;\n    align-items: center;\n    overflow-y: hidden;\n    /* flex-grow: 1; */\n    width: calc(100% - 35px);\n}\n\n#win-explorer>.path>.tit>.path::-webkit-scrollbar {\n    height: 2px;\n}\n\n#win-explorer>.path>.tit>.path::-webkit-scrollbar-thumb {\n    background: #7f7f7f70;\n    background-clip: padding-box;\n    border: 0px solid transparent;\n    border-radius: 10px;\n}\n\n\n#win-explorer>.path>.tit>.path>* {\n    display: block;\n    height: 100%;\n    white-space: nowrap;\n}\n\n#win-explorer>.path>.tit>.path>.arrow {\n    opacity: 0.4;\n    font-size: 14px;\n    line-height: 1;\n    height: 14px;\n    margin: 0 4px;\n}\n\n#win-explorer>.path>.tit>.path>.text {\n    padding: 2px 5px;\n    height: min-content;\n    border-radius: 5px;\n    font-size: 15px;\n    transition: 50ms;\n}\n\n#win-explorer>.path>.tit>.path>.text:hover {\n    background-color: var(--hover);\n}\n\n#win-explorer>.path>.tit>.path>.text:active {\n    opacity: 0.8;\n}\n\n#win-explorer>.path>.tit>.icon {\n    width: 25.6px;\n    margin-top: -1px;\n    margin-left: 3px;\n    margin-right: 5px;\n    background-size: contain;\n    background-position: 50% 50%;\n    background-repeat: no-repeat;\n}\n\n#win-explorer>.path>.search {\n    min-width: 170px;\n    width: 26%;\n    max-width: 400px;\n}\n\n#win-explorer>.path>.search>* {\n    float: right;\n}\n\n#win-explorer>.path>.search>.input {\n    white-space: nowrap;\n    text-overflow: ellipsis;\n}\n\n#win-explorer>.path>.search>input-before {\n    margin-top: 4px;\n    margin-right: -23px;\n}\n\n#win-explorer>.page>.main>.content>.view {\n    width: 100%;\n    height: max-content;\n    display: flex;\n    flex-direction: column;\n}\n\n#win-explorer>.page>.main>.content>.view>.info {\n    color: #888;\n    text-align: center;\n}\n\n#win-explorer>.page>.main>.content>.view>.item {\n    width: 100%;\n    padding: 2px 5px;\n    border-radius: 5px;\n    display: flex;\n    border: 1.5px solid transparent;\n    font-size: 14px;\n    align-items: center;\n    height: 30px;\n    transition: 50ms;\n}\n\n:root.corner_squ #win-explorer>.page>.main>.content>.view>.item {\n    corner-shape: squircle;\n    border-radius: 14px;\n}\n\n#win-explorer>.page>.main>.content>.view>.item:active {\n    /* transform: scale(0.99); */\n    /* transform-origin: bottom; */\n    opacity: 0.7;\n}\n\n#win-explorer>.page>.main>.content>.view>.item>img {\n    width: 25px;\n    height: 25px;\n    margin-right: 5px;\n}\n\n#win-explorer>.page>.main>.content>.view>.item.file>img {\n    width: 22px;\n    height: 22px;\n    margin-left: 2px;\n    margin-right: 7px;\n}\n\n#win-explorer>.page>.main>.content>.view>.item:hover {\n    background-color: var(--hover);\n    /* border: 1.5px solid #6f6f6f30; */\n    box-shadow: 0 1px 2px var(--s3d);\n}\n\n#win-explorer>.page>.main>.content>.view>.item>.input {\n    border-radius: 5px;\n    /* background: none; */\n    font-size: 14px;\n    border-width: 2px;\n}\n\n\n:root.corner_squ {\n    #win-explorer>.page>.menu>.card,\n    #win-explorer>.page>.main>.content {\n        corner-shape: squircle;\n        border-radius: 18px;\n    }\n\n    #win-explorer>.page>.main>.content>.view>.group>.item{\n        corner-shape: squircle;\n        border-radius: 25px;\n    }\n}"
  },
  {
    "path": "apps/style/imgviewer.css",
    "content": "#win-imgviewer {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    background: #1e1e1e;\n    overflow: hidden;\n    height: 100%;\n}\n#win-imgviewer>.preview-img {\n    max-width: 100%;\n    max-height: 100%;\n    object-fit: contain;\n}\n"
  },
  {
    "path": "apps/style/login.css",
    "content": "#loginback {\n    width: 100%;\n    height: 100%;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    flex-direction: column;\n    background-image: url('../../img/login.jpg'); \n    background-size: cover;\n    background-repeat: no-repeat;\n    background-position: 50% 50%;\n    transition: filter 500ms, background-color 500ms, opacity 1500ms ease-in-out;\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    opacity: 0;\n    display: none;\n    z-index: 101;\n}\n\n#login {\n    background-color: #eeeeee40;\n    width: 100px;\n    padding: 5.5px 8px;\n    color: #fff;\n    border-radius: 6px;\n    font-size: 15.8px;\n    text-align: center;\n    border: 3px solid #00000000;\n    transition: 50ms;\n    margin-bottom: -40px;\n    z-index: 1;\n}\n\n#login:hover {\n    border-color: #ffffff50;\n    transition: 50ms;\n}\n\n#login:active {\n    filter: brightness(2);\n    scale: 0.97;\n    border-color: #00000000;\n    background-color: #eeeeee70;\n    transition: 80ms;\n}\n\n#login-welc{\n    height: 100px;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n}\n\n#loginback>div.user {\n    width: 150px;\n    height: 150px;\n    border-radius: 100%;\n    background-image: url(\"../../icon/user.svg\");\n    background-size: 65% 65%;\n    background-position: 50% 50%;\n    background-repeat: no-repeat;\n    margin-bottom: 10px;\n    background-color: #ddd;\n    transition: filter 500ms;\n    margin-top: -35px;\n}\n\n#loginback>div.name {\n    color: #fefefe;\n    font-size: 30px;\n    font-family: Arial, Helvetica, sans-serif;\n    margin-bottom: 15px;\n    transition: color 500ms;\n}\n\n#loginback.close,\n#loginback.close>div.user {\n    filter: brightness(0);\n    /* backdrop-filter: brightness(0); */\n}\n\n#loginback.close>div.name,\n#loginback.close #login-after {\n    color: #000 !important;\n}\n\n#loginback.close {\n    background-color: black;\n}\n\n#loginback .power {\n    display: flex;\n    position: absolute;\n    bottom: 20px;\n    right: 20px;\n    /* width: 165px; */\n    /* justify-content: space-evenly; */\n    color: #fff;\n    align-items: center;\n}\n\n#loginback .power>* {\n    cursor: pointer;\n    transition: 100ms;\n    font-size: 30px;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    padding: 7px;\n    border-radius: 7px;\n}\n\n#loginback .power>*:hover {\n    background-color: #ffffff30;\n}\n\n#loginback .power>*:active {\n    opacity: 0.7;\n}\n\n#loginback>.langselect{\n    position: absolute;\n    bottom: 80px;\n    right: 10px;\n}\n\n#loginback>.langselect>*{\n    padding: 4px 18px;\n}\n#loginback>.langselect>.selected{\n    pointer-events: none;\n    font-weight: bold;\n}\n"
  },
  {
    "path": "apps/style/mediaplayer.css",
    "content": "#win-mediaplayer {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    background: #0e0e0e;\n    height: 100%;\n    overflow: hidden;\n}\n\n#win-mediaplayer>video {\n    max-width: 100%;\n    max-height: 100%;\n    outline: none;\n}\n\n#win-mediaplayer>audio {\n    width: 80%;\n}\n\n#win-pdfviewer {\n    height: 100%;\n    overflow: hidden;\n}\n"
  },
  {
    "path": "apps/style/msstore.css",
    "content": "@font-face {\n    font-family: StoreIcons;\n    src: url(\"../icons/msstore/icons.ttf\");\n}\n/* I love CSS! */\n#win-msstore {\n    display: grid;\n    grid-template-columns: 80px auto;\n\n    & icon {\n        font-family: StoreIcons;\n    }\n\n    &>.menu {\n        & .m-icon {\n            color: transparent;\n            -webkit-text-stroke: 2px #000;\n        }\n\n        &>list {\n            margin-left: 5px;\n            overflow-y: auto;\n            padding-right: 10px;\n            border-radius: 6px;\n            height: 100%;\n\n            & icon {\n                font-size: 1.8em;\n                margin-bottom: 0px;\n                line-height: 1.1;\n                transition: all 500ms;\n            }\n\n            & .t2 {\n                font-size: 0.7em !important;\n                color: var(--text2);\n                transition: all 500ms;\n                overflow: hidden;\n                opacity: 1.0;\n            }\n\n            &>a {\n                padding: 5px 10px;\n                height: 59px !important;\n                display: flex;\n                flex-direction: column;\n                justify-content: center;\n                align-items: center;\n                margin-bottom: 4px;\n                border-radius: 6px;\n                transition: all 500ms;\n                overflow: hidden;\n                position: relative;\n\n                &.check {\n                    background-color: var(--hover) !important;\n\n                    & icon {\n                        font-size: 2.3em;\n                        background-image: linear-gradient(to right bottom, var(--theme-1), var(--theme-2));\n                        -webkit-background-clip: text;\n                        background-clip: text;\n                        color: #00000022;\n                    }\n\n                    & .t2 {\n                        opacity: 0.0;\n                        margin-bottom: -20px;\n                    }\n                }\n            }\n\n            &>span.focs {\n                height: 26px;\n                margin-top: -47px;\n            }\n        }\n    }\n\n    &>.page {\n        background-color: var(--bg50);\n        border-radius: 10px 0px 0px 0px;\n\n        &>.cnt {\n            transition: transform 300ms cubic-bezier(0, 0, 0, 1), opacity 300ms 50ms, height 0ms, padding 0ms;\n            transform: translate(0, 50%);\n            opacity: 0;\n            height: 0px;\n            padding: 0px;\n            overflow: hidden;\n\n            &.show {\n                height: 100%;\n                transform: none !important;\n                opacity: 1;\n                overflow-y: auto;\n                min-height: 0px;\n            }\n\n            &.home {\n                &>.container {\n                    height: 100%;\n                    display: grid;\n                    grid-template-rows: auto min-content;\n                    padding: 0px 15px 30px 15px;\n\n                    &>.apps {\n                        &>.tit {\n                            margin-left: 30px;\n                            font-size: 1.6em;\n                            line-height: 1.5;\n                        }\n\n                        &>.app-cards {\n                            display: grid;\n                            grid-template-columns: auto auto auto;\n                            grid-template-rows: auto auto auto;\n\n                            &>* {\n                                background-color: var(--hover);\n                                margin: 10px;\n                                border-radius: 10px;\n                                padding: 14px;\n                                display: flex; \n\n                                &>.left {\n                                    width: 70px;\n                                    height: 70px;\n                                    background: initial;\n                                }\n\n                                &>.right {\n                                    width: 100%;\n\n                                    &>.tit {\n                                        width: 100%;\n\n                                        &>.up {\n                                            width: 100%;\n                                            display: flex;\n                                            align-items: center;\n                                            justify-content: space-between;\n\n                                            &>.type {\n                                                font-size: 0.85em;\n                                                padding: 4px 8px;\n                                                border-radius: 5px;\n                                                background-color: var(--fill);\n                                                color: var(--text2);\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\n.m-icon {\n    font-family: StoreIcons;\n}"
  },
  {
    "path": "apps/style/notepad.css",
    "content": "#win-notepad{\n    overflow: hidden;\n}\n\n#win-notepad>.tool{\n    width: 100%;\n    height: 35px;\n    padding-top: 5px;\n    margin-bottom: 2px;\n}\n\n#win-notepad>.text-box{\n    border-radius: 10px 10px 0px 0px;\n    /* width: 100%; */\n    border: none;\n    background-color: var(--card);\n    opacity: 0.8;\n    transform: translate(0,8px);\n    outline: none;\n    box-shadow: 0 -3px 5px var(--s3d);\n    padding: 10px;\n    resize: none;\n    font-size: 15px;\n    line-height: 1.25;\n    color: var(--text);\n    height: calc(100% - 35px);\n    transition: 200ms;\n    margin: 0 10px;\n}\n\n#win-notepad>.text-box *:not(div):not(br){\n    border-radius: 8px;\n    outline: 2px solid transparent;\n    transition: 100ms;\n    display: block;\n}\n\n#win-notepad>.text-box *:not(div):not(br):focus{\n    background: red;\n}\n\n#win-notepad>.text-box *:not(div):not(br):hover{\n    outline-color: #2983cc;\n}\n\n#win-notepad>.text-box:focus{\n    transform: none;\n    opacity: 1;\n    box-shadow: 0 -5px 7px var(--s3d);\n}\n\n#win-notepad>.text-box::selection{\n    background: #2983cc;\n    color: #ddd;\n}\n\n#win-notepad>.text-box.down{\n    transform: translate(0,100%);\n}\n\n#win-notepad>.tool>a{\n    border-radius: 10px;\n    margin: -5px 0 0 5px;\n    text-align: center;\n    padding: 3px 5px;\n    display: inline-block;\n    transition: 100ms;\n}\n\n#win-notepad>.tool>a:hover{\n    background-color: var(--hover);\n}\n\n#win-notepad>.tool>.notepad-md-toggle.active{\n    background-color: var(--hover-b);\n}\n\n#win-notepad>.md-preview{\n    border-radius: 10px 10px 0px 0px;\n    border: none;\n    background-color: var(--card);\n    opacity: 0.8;\n    outline: none;\n    box-shadow: 0 -3px 5px var(--s3d);\n    padding: 20px 25px;\n    font-size: 15px;\n    line-height: 1.6;\n    color: var(--text);\n    height: calc(100% - 35px);\n    margin: 0 10px;\n    overflow-y: auto;\n    transform: translate(0,8px);\n}\n\n#win-notepad>.md-preview h1{font-size: 2em;font-weight: 700;margin: 0.67em 0;border-bottom: 1px solid var(--hover-b);padding-bottom: 0.3em;}\n#win-notepad>.md-preview h2{font-size: 1.5em;font-weight: 600;margin: 0.83em 0;border-bottom: 1px solid var(--hover-b);padding-bottom: 0.3em;}\n#win-notepad>.md-preview h3{font-size: 1.17em;font-weight: 600;margin: 1em 0;}\n#win-notepad>.md-preview h4{font-size: 1em;font-weight: 600;margin: 1.33em 0;}\n#win-notepad>.md-preview p{margin: 0.5em 0;}\n#win-notepad>.md-preview code{background: var(--hover-b);padding: 2px 6px;border-radius: 4px;font-family: Consolas, monospace;font-size: 0.9em;}\n#win-notepad>.md-preview pre{background: var(--hover-b);padding: 12px 16px;border-radius: 8px;overflow-x: auto;margin: 0.8em 0;}\n#win-notepad>.md-preview pre code{background: none;padding: 0;}\n#win-notepad>.md-preview blockquote{border-left: 4px solid var(--theme-1);padding: 4px 16px;margin: 0.8em 0;opacity: 0.85;}\n#win-notepad>.md-preview ul,#win-notepad>.md-preview ol{padding-left: 2em;margin: 0.5em 0;}\n#win-notepad>.md-preview li{margin: 0.25em 0;}\n#win-notepad>.md-preview a{color: var(--theme-1);text-decoration: underline;}\n#win-notepad>.md-preview table{border-collapse: collapse;margin: 0.8em 0;}\n#win-notepad>.md-preview th,#win-notepad>.md-preview td{border: 1px solid var(--hover-b);padding: 6px 12px;}\n#win-notepad>.md-preview th{background: var(--hover-b);font-weight: 600;}\n#win-notepad>.md-preview img{max-width: 100%;border-radius: 6px;}\n#win-notepad>.md-preview hr{border: none;border-top: 1px solid var(--hover-b);margin: 1em 0;}\n\n#win-notepad-font>.row {\n    display: flex;\n    justify-content: space-around;\n    height: 266px;\n}\n\n.select-input {\n    display: inline-block;\n    height: 200px;\n}\n\n.select-input#win-notepad-font-type {\n    width: 200px;\n}\n\n.select-input#win-notepad-font-size {\n    width: 80px;\n}\n\n.select-input#win-notepad-font-style {\n    width: 90px;\n}\n\n.select-input#win-notepad-font-style>.value-box{\n    padding: 5px;\n}\n\n/* #win-notepad-font-size {\n    vertical-align: top;\n} */\n\n\n.select-input>input[type=text] {\n    outline: none;\n    width: 100%;\n    background-color: rgba(255, 255, 255, 0.3);\n    border-radius: 10px 10px 0px 0px;\n    border: 2px solid #7f7f7f40;\n    background: var(--card);\n    border-bottom: none;\n    color: var(--text);\n    padding: 3px 6px;\n    /* box-shadow: 2px 2px 5px var(--shadow); */\n}\n\n.select-input>.description {\n    margin-left: 3px;\n}\n\n.select-input>.value-box {\n    width: 100%;\n    height: 100%;\n    border: 2px solid #7f7f7f40;\n    background: var(--card);\n    border-radius: 0px 0px 10px 10px;\n    border-style: solid;\n    overflow-y: auto;\n    overflow-x: hidden;\n    /* background-color: rgba(255, 255, 255, 0.3); */\n    /* box-shadow: inset 0px 4px 2.5px var(--shadow); */\n    display: block;\n    padding: 5px 0 5px 5px;\n    /* box-shadow: 2px 2px 5px var(--shadow); */\n\n}\n\n.select-input>.value-box>.option {\n    padding: 3px 7px;\n}\n\n/* .select-input>.value-box>.option {\n    padding: 3px;\n    width: 100%;\n} */\n\n#win-notepad-font .preview {\n    display: inline-block;\n    width: 150px;\n    height: 150px;\n    margin: 5px 10px;;\n}\n\n#win-notepad-font .preview>.preview-box {\n    display: flex;\n    width: 150px;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n    word-break: keep-all;\n    height: 150px;\n    text-align: center;\n    border: 2px solid #7f7f7f40;\n    background: var(--card);\n    border-width: 2px;\n    overflow: hidden;\n    border-radius: 10px;\n    line-height: 1.25;\n}"
  },
  {
    "path": "apps/style/pythonEditor.css",
    "content": "#win-pythonEditor *::-webkit-scrollbar {\n    background-color: #FFFFFF10;\n}\n\n::-webkit-scrollbar:hover {\n    background-color: #ffffff10;\n}\n\n#win-pythonEditor *{\n    scroll-behavior:initial !important;\n}\n\n#win-pythonEditor {\n    display: grid;\n    grid-template-rows: 60% 40%;\n    min-height: 0px;\n    user-select: all;\n}\n\n.window.pythonEditor .titbar .run {\n    font-size: 17px;\n    padding-top: 4px;\n}\n\n#win-python-ace-editor {\n    font-size: 16px;\n    line-height: 1.25;\n    height: 100% !important;\n    font-weight: 200;\n}\n\n#win-pythonEditor .output {\n    background-color: #0f0f0f;\n    color: #f8f8f2;\n    border: 25px solid #1a1a1a !important;\n    border: none;\n    /* border-radius: 5px; */\n    padding: 10px;\n    width: 100%;\n    height: 100%;\n    font: 14px / normal 'Consolas', 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'Source Code Pro', 'source-code-pro', monospace;\n    overflow-y: scroll;\n    white-space: pre-wrap;\n    word-wrap: break-word;\n    user-select: auto;\n}\n\n#win-pythonEditor .output::selection {\n    background: #ddd;\n    background-clip: content-box;\n    color: #333;\n}\n/* 编辑器 */\n.ace_editor.ace_autocomplete.ace_dark.ace-vibrant-ink{\n    border-radius: 8px;\n    box-shadow: 1px 1px 10px #000;\n}\n\n.ace_autocomplete .ace_layer.ace_marker-layer>.ace_active-line{\n    border-radius: 5px;\n    background-color: #ffffff30 !important;\n}\n.ace_autocomplete .ace_layer.ace_marker-layer>.ace_line-hover{\n    border-radius: 5px;\n    background: #ffffff20;\n    border-color: var(--href);\n    transition: 100ms;\n}\n.ace_autocomplete .ace_layer.ace_text-layer>.ace_line{\n    padding: 0px 6px;\n}\n\n.ace_autocomplete .ace_layer.ace_text-layer>.ace_line>.ace_completion-highlight{\n    color: var(--theme-1);\n}\n\n.ace_tooltip{\n    border-radius: 8px;\n    box-shadow: 1px 1px 10px #000;\n    background-color: #26282c !important;\n    border: 1px #484747 solid;\n    padding: 5px 8px;\n}"
  },
  {
    "path": "apps/style/recognition.css",
    "content": ".rainbow-container-main {\n    font-size: 11vmin;\n    display: flex;\n  }\n  .draggable {\n    width: 100px;\n    height: 30px;\n    position: absolute;\n    cursor: move;\n    z-index: 98;\n}\n.no-drag {\n  cursor: default;\n}\n  .rainbow-container {\n    z-index: 1;\n    transform: rotate(0deg) translateZ(0);\n    transform-origin: center center;\n    width: 1em;\n    height: 1em;\n    border: 1px solid rgba(255, 255, 255, 0.4);\n    -webkit-animation: rainbow 3s infinite linear;\n    border-radius: 0.5em;\n    box-shadow: 0 0 0.3em 0.05em #2c116e, inset 0.03em 0 0.1em 0.02em #de66e4;\n    transform-style: preserve-3d;\n    perspective: 1em;\n  }\n  \n  @keyframes rainbow {\n    0% {\n      transform: rotate(0deg) translateZ(0);\n      box-shadow: 0 0 0.3em 0.05em #2c116e, inset 0.03em 0 0.1em 0.02em #de66e4;\n    }\n    25% {\n      transform: rotate(90deg) translateZ(0);\n      box-shadow: 0 0 0.3em 0.05em #28126a, inset 0.03em 0 0.1em 0.02em #34ceaa;\n    }\n    50% {\n      transform: rotate(180deg) translateZ(0);\n      box-shadow: 0 0 0.3em 0.05em #28126a, inset 0.03em 0 0.1em 0.02em #19b3f5;\n    }\n    75% {\n      transform: rotate(270deg) translateZ(0);\n      box-shadow: 0 0 0.3em 0.05em #28126a, inset 0.03em 0 0.1em 0.02em #3d52ac;\n    }\n    100% {\n      transform: rotate(360deg) translateZ(0);\n      box-shadow: 0 0 0.3em 0.05em #28126a, inset 0.03em 0 0.1em 0.02em #de66e4;\n    }\n  }\n  .rainbow-container {\n    position: relative;\n  }\n  .rainbow-container > div {\n    position: absolute;\n    top: 0.1em;\n    left: 0.1em;\n    width: 0.8em;\n    height: 0.8em;\n    border-radius: 50%;\n  }\n  \n  .rainbow-container .green {\n    background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0) 60%, rgba(115, 213, 186, 0.8) 100%);\n    transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 0);\n    animation: curve-rotate-green 6s infinite linear;\n  }\n  \n  .rainbow-container .pink {\n    background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0) 50%, rgba(215, 115, 229, 0.8) 100%);\n    transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 0);\n    animation: curve-rotate-pink 3s infinite linear;\n  }\n  \n  @-webkit-keyframes curve-rotate-green {\n    0% {\n      transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 0deg);\n    }\n    50% {\n      transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 180deg);\n    }\n    100% {\n      transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 360deg);\n    }\n  }\n  @-moz-keyframes curve-rotate-green {\n    0% {\n      transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 0deg);\n    }\n    50% {\n      transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 180deg);\n    }\n    100% {\n      transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 360deg);\n    }\n  }\n  @-o-keyframes curve-rotate-green {\n    0% {\n      transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 0deg);\n    }\n    50% {\n      transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 180deg);\n    }\n    100% {\n      transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 360deg);\n    }\n  }\n  @keyframes curve-rotate-green {\n    0% {\n      transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 0deg);\n    }\n    50% {\n      transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 180deg);\n    }\n    100% {\n      transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 360deg);\n    }\n  }\n  @-webkit-keyframes curve-rotate-pink {\n    0% {\n      transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 0deg);\n    }\n    50% {\n      transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 180deg);\n    }\n    100% {\n      transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 360deg);\n    }\n  }\n  @-moz-keyframes curve-rotate-pink {\n    0% {\n      transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 0deg);\n    }\n    50% {\n      transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 180deg);\n    }\n    100% {\n      transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 360deg);\n    }\n  }\n  @-o-keyframes curve-rotate-pink {\n    0% {\n      transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 0deg);\n    }\n    50% {\n      transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 180deg);\n    }\n    100% {\n      transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 360deg);\n    }\n  }\n  @keyframes curve-rotate-pink {\n    0% {\n      transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 0deg);\n    }\n    50% {\n      transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 180deg);\n    }\n    100% {\n      transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 360deg);\n    }\n  }\n  .footer {\n    position: fixed;\n    bottom: 1em;\n    right: 1em;\n    font-size: 12px;\n    font-style: italic;\n    color: white;\n  }\n  .footer a {\n    color: white;\n  }\n  "
  },
  {
    "path": "apps/style/run.css",
    "content": "#win-run {\n    display: flex !important;\n    flex-direction: column;\n}\n\n#win-run>.top {\n    display: flex;\n    padding: 10px;\n}\n\n#win-run>.top>.icon {\n    min-width: 70px;\n    background-image: url('../../icon/run.svg');\n    background-position: 50% 50%;\n    background-repeat: no-repeat;\n    background-size: contain;\n    margin-right: 10px;\n}\n\n#win-run>.top>.text {\n    font-size: 15px;\n    line-height: 1.2;\n}\n\n#win-run>.open {\n    display: flex;\n    gap: 15px;\n    padding: 10px 20px 10px 20px;\n}\n\n#win-run>.open>input {\n    flex-grow: 1;\n    width: auto !important;\n}\n\n#win-run>.open>.prompt {\n    margin-top: 3px;\n}"
  },
  {
    "path": "apps/style/setting.css",
    "content": "@font-face {\n    font-family: SettingsIcons;\n    src: url(../icons/setting/icons.woff2) format(\"woff2\")\n}\n\n#win-setting>.page>.cnt>.title {\n    font-size: 29px;\n    padding: 10px 5px 10px 5px;\n    display: block;\n    margin: 0;\n}\n\n.s-icon {\n    font-family: SettingsIcons;\n}\n\n#win-setting {\n    display: flex;\n}\n\n#win-setting>* {\n    height: 100%\n}\n\n#win-setting>.page {\n    flex-grow: 1\n}\n\n\n#win-setting>.menu {\n    width: 30% !important;\n    overflow: hidden;\n    min-width: 280px;\n    /* max-width: 30%; */\n    padding: 3px 5px 5px 15px;\n}\n\n#win-setting>.menu>.user {\n    display: flex;\n    padding: 10px 10px;\n    border-radius: 10px;\n    margin-bottom: 10px;\n    /* transition: 200ms; */\n    align-items: center;\n}\n\n:root.corner_squ #win-setting>.menu>.user {\n    corner-shape: squircle;\n    border-radius: 25px;\n}\n\n#win-setting>.menu>.user:hover {\n    background-color: var(--hover);\n}\n\n#win-setting>.menu>.user>div>p:first-child {\n    font-size: 19px;\n    margin-bottom: -7px;\n}\n\n#win-setting>.menu>.user>div>p:last-child {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    font-size: 15px;\n}\n\n#win-setting>.menu>.user>div {\n    padding: 0px 0 0 10px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n\n#win-setting>.menu>.user>svg {\n    background-color: var(--hover-b);\n    /* box-shadow: 0 0 10px var(--shadow); */\n    width: 60px;\n    min-width: 60px;\n    height: 60px;\n    border-radius: 50%;\n    padding: 11px;\n}\n\n#win-setting>.menu>list {\n    padding-bottom: 50px !important;\n    margin-left: 5px;\n    margin-top: 50px;\n    height: calc(100% - 138px);\n    overflow-y: auto;\n    padding-right: 10px;\n    border-radius: 6px;\n}\n\n#win-setting>.menu>list>a {\n    padding: 5px 10px 5px 20px;\n    font-size: 15px;\n    display: flex;\n    margin-bottom: 4px;\n    border-radius: 6px;\n}\n\n#win-setting>.menu>list>a:not(.enable) {\n    /* transform: none !important; */\n    filter: contrast(0.6) opacity(0.3);\n    pointer-events: none;\n}\n\n#win-setting>.menu>list>a.enable:not(.avlb) {\n    filter: opacity(0.5) !important;\n}\n\n#win-setting>.menu>list>a>p {\n    margin: 5px 7px;\n}\n\n#win-setting>.menu>list>a>img {\n    height: 20px;\n    width: 20px;\n    margin: 1px 10px 0 0;\n}\n\n#win-setting>.menu>list>a.check {\n    background-color: var(--hover) !important;\n}\n\n#win-setting>.page {\n    overflow: hidden;\n    padding-left: 15px;\n    padding-right: 5px;\n    margin: 2px 0 0 0;\n}\n\n#win-setting>.page>.cnt {\n    overflow-y: scroll;\n    opacity: 0;\n    height: 0;\n    transition: transform 300ms cubic-bezier(0, 0, 0, 1), opacity 300ms 50ms, height 0ms;\n    transform: translate(0, 50%);\n}\n\n#win-setting>.page>.cnt.show {\n    height: 100%;\n    transform: none;\n    opacity: 1;\n    display: block;\n}\n\n\n.setting-card {\n    background: var(--card);\n    border-radius: 10px;\n    margin-bottom: 10px;\n}\n\n:root.corner_squ .setting-card {\n    corner-shape: squircle;\n    border-radius: 25px;\n}\n\n.setting-card>.setting-list {\n    padding-bottom: 5px;\n    padding: 20px;\n}\n\n.setting-list {\n    display: flex;\n    flex-direction: column;\n    padding: 0 5px 60px 5px;\n    margin-bottom: 0;\n    border-radius: 10px;\n    width: 100%;\n}\n\n.setting-list>* {\n    width: 100%;\n    color: var(--text);\n    background: var(--card);\n    margin-bottom: 7px;\n    border-radius: 8px;\n    /* border: 1.5px solid #6f6f6f30; */\n    box-shadow: 0 1px 2px 0px var(--s3d);\n    text-decoration: none;\n    display: flex;\n    padding: 10px 15px;\n    justify-content: center;\n    /* box-shadow: 0 1px 2px 1.5px var(--s3d); */\n    transition: 100ms;\n    justify-content: space-around;\n    border: 2px solid #00000000;\n    background-clip: padding-box;\n    align-items: center; \n}\n\n:root.corner_squ .setting-list>* {\n    corner-shape: squircle;\n    border-radius: 20px;\n}\n\n.setting-list>a:hover {\n    text-decoration: none;\n    background-color: var(--hover);\n    border-color: var(--hover);\n}\n\n.setting-list>a:active {\n    filter: opacity(0.75);\n}\n\n.setting-list>a.dp {\n    margin-bottom: 1px;\n    z-index: 1;\n}\n\n.setting-list>a.dp.show {\n    /* border-bottom: none; */\n    border-bottom-left-radius: 0 !important;\n    border-bottom-right-radius: 0 !important;\n    margin-bottom: 1px;\n    box-shadow: 0 0.5px 1px 1px var(--s3d);\n}\n\n.setting-list>a.dp>.bi::before {\n    transition: 150ms;\n}\n\n.setting-list>a.dp:active>.bi::before {\n    transform: scale(0.7);\n}\n\n.setting-list>a.dp.show:active>.bi::before {\n    transform: scale(0.7) rotate(-180deg);\n}\n\n.setting-list>a.dp.show>.bi::before {\n    transform: rotate(-180deg);\n}\n\n.setting-list>div.dp {\n    border-top: none;\n    border-top-left-radius: 0 !important;\n    border-top-right-radius: 0 !important;\n    max-height: 0;\n    transition: max-height 300ms, padding 300ms 100ms, opacity 200ms;\n    overflow: hidden;\n    display: block;\n    padding: 0 15px;\n    opacity: 0;\n    margin:0 0 6px 0;\n    box-shadow: none;\n}\n\n.setting-list>div.dp.show {\n    padding: 10px 15px;\n    transition: max-height 300ms, padding 200ms 50ms, opacity 200ms 100ms;\n    max-height: 1000px;\n    opacity: 1;\n    box-shadow: 0 1px 2px 1px var(--s3d);\n}\n\n.checkbox {\n    width: 40px;\n    height: 20px;\n    border-radius: 10px;\n    background: linear-gradient(90deg, var(--hover-b), var(--hover-b));\n    transition: 200ms;\n}\n\n.checkbox::before {\n    content: '';\n    display: block;\n    height: 16px;\n    width: 16px;\n    border-radius: 8px;\n    background: #fff;\n    position: relative;\n    top: 2px;\n    left: 2px;\n    transition: 100ms;\n    transform: scale(0.8);\n}\n\n.checkbox.checked {\n    background: linear-gradient(90deg, var(--theme-1), var(--theme-2));\n}\n\n.checkbox.checked::before {\n    left: 22px;\n}\n\n.checkbox:hover::before {\n    transform: none;\n}\n\n.checkbox:active::before {\n    width: 20px;\n}\n\n.checkbox.checked:active::before {\n    left: 18px;\n}\n\ndiv.app-color .color {\n    width: 30px;\n    height: 30px;\n    border-radius: 8px;\n    margin: 3px 0 0 5px;\n    outline: none;\n    border: none;\n    padding: 0;\n    transition: 200ms;\n}\n\ndiv.app-color .act.color:active {\n    transform: scale(0.8);\n}\n\ndiv.app-color input[type=color] {\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border: none;\n    padding: 0;\n    outline: none;\n    margin: 0;\n}\n\n.setting-list>*>icon {\n    font-family: SettingsIcons;\n    font-size: 20px;\n    margin: 10px 20px 10px 5px;\n    background-image: linear-gradient(100deg, var(--theme-1), var(--theme-2));\n    -webkit-background-clip: text;\n    background-clip: text;\n    -webkit-text-fill-color: transparent;\n    filter: saturate(130%) brightness(1.1);\n}\n\n.setting-list>*>icon.b {\n    font-family: bootstrap-icons;\n}\n\n.setting-list>*>div>p:first-child {\n    font-size: 19px;\n    margin:  3px 0 0 0;\n}\n\n.setting-list>*>div>p:last-child {\n    font-size: 10px;\n    color: #7f7f7f;\n    margin-bottom: 0px;\n}\n\n.setting-list>*>.bi,\n.setting-list>*>.alr {\n    flex-grow: 1;\n    color: #7f7f7f;\n    font-size: 20px;\n}\n\n.setting-list>*>.alr>* {\n    float: right;\n    margin-right: 20px;\n}\n\n.setting-list>*>.bi::before {\n    position: relative;\n    float: right;\n    right: 5px;\n}\n\n#set-theme {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: left;\n}\n\n#set-theme>.a {\n    width: 100px;\n    height: 100px;\n    border-radius: 10px;\n}\n\n#set-theme>.a {\n    background-size: cover;\n    color: #fff;\n    text-shadow: 1px 1px 3px #000;\n    text-align: right;\n    padding: 3px 8px;\n    box-shadow: 1px 1px 5px var(--shadow);\n    margin: 7px 7px 0 0;\n}\n\n#set-theme>.a:hover {\n    filter: brightness(1.3) saturate(1.3);\n}\n\n#set-theme>.a:active {\n    opacity: 0.75;\n}\n\n#win-setting>.page>.cnt.update>.lo>#svg5{\n    width: 80px;\n    margin: 15px 20px 30px 20px;\n}\n\n#win-setting>.page>.cnt.update>.lo{\n    display: flex;\n    align-items: center;\n}\n\n#win-setting>.page>.cnt.update>.lo div{\n    flex-grow: 1;\n    font-size: 20px;\n    padding: 20px 5px;\n}\n#win-setting>.page>.cnt.update>.lo div>.detail{\n    flex-grow: 1;\n    font-size: 14px;\n    color: #7f7f7f;\n}\n\n#win-setting>.page>.cnt.update>.lo>.update-main {\n    display: flex;\n    justify-content: center;\n}\n\n#win-setting>.page>.cnt.update>.lo>.update-main>div {\n    display: flex;\n    align-items: center;\n}\n\n#win-setting>.page>.cnt.update>.lo>.update-main>div:first-child {\n    flex-direction: column;\n    align-items: flex-start;\n}\n\n#win-setting>.page>.cnt.update>.lo>.update-main>div:last-child {\n    justify-content: flex-end;\n}\n\n#win-setting>.page>.cnt.update .disabled {\n    opacity: 0.5;\n    pointer-events: none;\n}\n.blueteeth-tips-text{\n\tfont-size:8px;\n}\n.setting-user-svg{\n\t    width: 100px;\n\t    height: 100px;\n\t    background-color: var(--hover-b);\n\t    /* box-shadow: 0 0 10px var(--shadow); */\n\t    width: 60px;\n\t    min-width: 60px;\n\t    height: 60px;\n\t    border-radius: 50%;\n\t    padding: 11px;\n\t    margin-right: 15px;\n\t    margin-bottom: 15px;\n}\n/* 时间 必须样式 @Junchen Yi 2023-9-16 */\n.selectLanguageA{\n    min-height: 67px;\n    display: flex;\n    align-items: center;\n    justify-content: flex-start;\n\tfilter: opacity(1);\n}\n\n.languageSelect {\n    width: 130px;\n        height: 30px;\n        text-align: left;\n        border-radius: 12px;\n        background: var(--card);\n        color: var(--text);\n\t\tposition: absolute;\n\t\t    right: 40px;\n\t\t\tmargin-right: -20px;\n}\n.languageSelect option {\n    /* 添加样式，例如设置字体颜色和背景颜色 */\n\tcolor: var(--text);\n    background-color: #fff;\n    padding: 5px;\n}\n.settingTimeItem{\n    margin-left: 30px;\n    margin-bottom: 20px;\n    display: flex;\n    flex-direction: row;\n    flex-wrap: nowrap;\n    align-content: center;\n    justify-content: flex-start;\n    align-items: center;\n}\n.settingTime{\n\tfont-size: 28px;\n}\n/* 时间 必须样式 end @Junchen Yi 2023-9-16 */\n"
  },
  {
    "path": "apps/style/taskmgr.css",
    "content": "@font-face {\n    font-family: t-icon;\n    src: url('../icons/taskmgr/icons.ttf');\n}\n\n.t-icon {\n    font-family: t-icon;\n}\n\n#win-taskmgr {\n    display: grid;\n    grid-template-columns: 280px auto;\n    transition: grid-template-columns 200ms;\n\n    /* 左侧菜单 */\n    &>.menu {\n\n        /* 选项卡列表 */\n        &>list.focs {\n            margin: 0px 15px 0px 5px;\n            position: relative;\n            height: 100%;\n\n            &>a {\n                padding: 5px 20px;\n                font-size: 15px;\n                display: flex;\n                gap: 10px;\n                margin-bottom: 3px;\n                overflow: hidden;\n\n                &>p {\n                    overflow-x: auto;\n                    display: flex;\n                    align-items: center;\n                }\n\n                &.check {\n                    background-color: var(--hover);\n                }\n            }\n        }\n\n        /* 折叠按钮 */\n        &>.fold {\n            padding: 5px 20px;\n            margin-left: 5px;\n            display: block;\n            border-radius: 7px;\n            max-width: 58px;\n            margin-bottom: 3px;\n            transition: 80ms, transform 400ms cubic-bezier(0.14, 1.02, 0.17, 0.03) !important;\n\n            &:hover {\n                color: var(--text);\n                background-color: var(--hover-half);\n                text-decoration: none;\n                box-shadow: 0 1px 2px var(--s3d);\n            }\n\n            &:active {\n                transform: scale(0.93);\n                filter: opacity(0.75);\n            }\n        }\n    }\n\n    /* 右侧内容区 */\n    &>.main {\n        max-height: 100%;\n        min-height: 0px;\n        background-color: var(--bg70);\n        padding: 15px;\n        border-radius: 10px 0px 0px 0px;\n\n        /* 页面 */\n        &>.cnt {\n            transition: transform 300ms cubic-bezier(0, 0, 0, 1), opacity 300ms 50ms, height 0ms, padding 0ms;\n            transform: translate(0, 50%);\n            opacity: 0;\n            height: 0px;\n            padding: 0px;\n            overflow: hidden;\n\n            &>.tit {\n                font-size: 1.2em;\n            }\n\n            &.show {\n                height: 100%;\n                transform: none !important;\n                opacity: 1;\n                overflow-y: auto;\n                min-height: 0px;\n            }\n\n            /* 进程页面 */\n            &.processes {\n                &.show {\n                    display: flex;\n                    flex-direction: column;\n                }\n\n                /* 表格 */\n                &>table {\n                    width: 100%;\n                    border-spacing: 0px;\n                    table-layout: fixed;\n\n                    & th {\n                        font-weight: normal !important;\n                        font-size: 0.78em;\n                        vertical-align: bottom;\n                        /* border-left: 1px solid black; */\n                        border-right: 1px solid var(--hr);\n                        border-bottom: 1px solid var(--hr);\n                        color: var(--text2);\n                        padding: 0px 10px;\n                        position: relative;\n\n                        &>i {\n                            position: absolute;\n                            left: 6%;\n                            top: 10%;\n                        }\n\n                        &>.value {\n                            font-size: 1.45em !important;\n                            color: var(--text) !important;\n                        }\n\n                        &.align-right {\n                            text-align: right;\n                            width: 95px;\n                            transition: background-color 80ms;\n                        }\n\n                        &.power {\n                            width: 120px;\n                        }\n                    }\n\n                    & td {\n                        border-right: 1px solid var(--hr);\n                        padding: 4px 10px;\n                        height: 25px;\n                        /* line-height: 2; */\n\n                        &>* {\n                            display: inline-block;\n                        }\n\n                        & .icon {\n                            width: 21px;\n                            height: 21px;\n                            vertical-align: -5px;\n                            margin: 0px 8px;\n                            background-size: contain;\n                            background-position: 50% 50%;\n                            background-repeat: no-repeat;\n                            display: inline-block;\n                        }\n\n                        &>.text {\n                            text-overflow: ellipsis;\n                            overflow: hidden;\n                            line-clamp: 1;\n                            -webkit-line-clamp: 1;\n                            display: -webkit-inline-box;\n                            -webkit-box-orient: vertical;\n                            vertical-align: -5px;\n                            /* width: 100%; */\n                        }\n                    }\n\n                    & tr.select {\n                        background-color: var(--hover);\n                    }\n                }\n            }\n        }\n    }\n}\n\n#win-taskmgr>.main>.cnt.processes>table th.align-right:hover {\n    background-color: var(--hover);\n}\n\n#win-taskmgr>.main>.cnt.processes>table tr:not(.title):hover {\n    background-color: var(--hover);\n}\n\n#win-taskmgr>.main>.cnt.processes>table tr {\n    transition: background-color 200ms;\n}\n\n#win-taskmgr>.main>.cnt.processes>table tr.notrans {\n    transition: none !important;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content {\n    display: grid;\n    grid-template-columns: 320px auto;\n    height: 100%;\n    min-height: 0px;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.select-menu {\n    margin-right: 20px;\n    max-height: 100%;\n    overflow: auto;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.select-menu>* {\n    border-radius: 10px;\n    padding: 12px;\n    margin: 10px 0px;\n    transition: 80ms, transform 400ms cubic-bezier(0.14, 1.02, 0.17, 0.03) !important;\n    display: grid;\n    grid-template-columns: 120px auto;\n    gap: 10px;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.select-menu>*:hover {\n    background-color: var(--hover-half);\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.select-menu>*:active {\n    transform: scale(0.95);\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.select-menu>*>.right>.tit {\n    font-size: 1.4em;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.select-menu>*>.right>.data>* {\n    display: -webkit-inline-box;\n    box-orient: vertical;\n    -webkit-box-orient: vertical;\n    line-clamp: 1;\n    -webkit-line-clamp: 1;\n    text-overflow: ellipsis;\n    overflow: hidden;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.select-menu>*>.left {\n    height: 100%;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.select-menu>*>.left>* {\n    height: 100%;\n    width: 100%;\n    border: 1px solid;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.select-menu>*>.left>.graph-view-cpu {\n    border-color: #2983cc;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.select-menu>*>.left>.graph-view-memory {\n    border-color: #660099;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.select-menu>*>.left>.graph-view-disk {\n    border-color: #008000;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.select-menu>*>.left>.graph-view-wifi {\n    border-color: #8e5829;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.select-menu>*>.left>.graph-view-gpu {\n    border-color: #2983cc;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.select-menu>.check {\n    background-color: var(--hover);\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph {\n    max-height: 100%;\n    overflow: auto;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>* {\n    transition: transform 300ms cubic-bezier(0, 0, 0, 1), opacity 300ms 50ms, height 0ms;\n    transform: translate(0, 50%);\n    opacity: 0;\n    height: 0px;\n    overflow-y: hidden;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.show {\n    /* display: grid !important; */\n    /* grid-template-rows: max-content auto max-content; */\n    height: 100%;\n    transform: none !important;\n    opacity: 1;\n    overflow-y: visible;\n    display: flex;\n    flex-direction: column;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.tit {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.graph-msg {\n    display: flex;\n    justify-content: space-between;\n    color: var(--text2);\n    font-size: 0.8em;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.graph-msg.top {\n    margin-top: 10px;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.graph-msg.bottom {\n    margin-bottom: 10px;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.graph,\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.graph2 {\n    /* margin: 20px 0px; */\n    position: relative;\n    min-height: 120px;\n    height: 100%;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.minor {\n    height: 50px !important;\n    min-height: 50px !important;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.graph>*,\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.graph2>*,\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph .graph-gpu svg {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    top: 0px;\n    left: 0px;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.tit>.left-name {\n    font-size: 2em;\n    display: inline-block;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.tit>.right-message {\n    display: inline-block;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.information {\n    display: grid;\n    grid-template-columns: auto 300px;\n    gap: 20px;\n    font-size: 0.85em;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.information>.left {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 15px;\n    align-items: flex-start;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.information>.left>*>.top {\n    font-size: 0.8em;\n    color: var(--text2);\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.information>.left>*>.value {\n    font-size: 1.44em;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.information>.right>table>tbody>tr>td:first-child {\n    color: var(--text2);\n    padding-right: 20px;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-gpu>.graphs {\n    position: relative;\n    display: grid;\n    grid-template-columns: 50% 50%;\n    grid-template-rows: 50% 50%;\n    height: 100%;\n    min-height: 350px;\n    gap: 10px;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-gpu>.graphs>* {\n    display: flex;\n    flex-direction: column;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-gpu>.graphs>*>.title-gpu {\n    margin-bottom: 10px;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-gpu>.graphs>*>.chart {\n    position: relative;\n    width: 100%;\n    height: 100%;\n}\n\n#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-gpu>.graphs>* canvas {\n    position: absolute;\n    top: 0px;\n    left: 0px;\n    width: 100%;\n    height: 100%;\n}"
  },
  {
    "path": "apps/style/terminal.css",
    "content": ".window.terminal-apps {\n    --text: #ddd;\n    --bg: #000000;\n    --bg50: #00000060;\n    --bg70: radial-gradient(rgba(26, 31, 53, 0.96) 25%, rgba(32, 32, 32, 0.96) 100%);\n    --shadow: #000000a0;\n    --card: #72727240;\n    --hover: #aaaaaa40;\n    --hover-half: #ffffff20;\n    --hover-b: #eeeeee0f;\n    --bggrey: #444;\n    --fill:#54545470;\n    --mm: #ffffff50;\n    --contextmeu: #252525bb;\n    --bar: #7272722a;\n    --hr:#333;\n    --unfoc:#202020;\n    --msg:#303030d0;\n    --bd:#ffffff06;\n    --s3d:#11111160;\n    --mica: linear-gradient(140deg,#2d161c,#102d53);\n}\n\n.window.terminal-apps.max>.content {\n    padding-bottom: 55px !important;\n}\n\n.window.terminal-apps>.content {\n    overflow-y: auto !important;\n    overflow-x: hidden !important;\n    padding-bottom: 10px;\n}\n\n.window.terminal-apps>.content>pre {\n    color: #ddd;\n    margin: 0px 15px;\n    font-family: \"Consolas\", \"Monaco\", \"monospace\", system-ui;\n    user-select: text;\n    font-size: 16px;\n}\n\n.window.terminal-apps>.content * {\n    white-space: break-spaces;\n}\n\n.window.terminal-apps>.content *::selection {\n    background: #ddd;\n    background-clip: content-box;\n    color: #333;\n}\n\n.window.terminal-apps>.content>pre>input {\n    background: none;\n    border: none;\n    outline: none;\n    padding: 0;\n    color: #eee;\n    cursor: default;\n    width: 100%;\n}\n\n.window.terminal-apps>pre>input::selection {\n    background: #ddd;\n    background-clip: content-box;\n    color: #333;\n}\n"
  },
  {
    "path": "apps/style/whiteboard.css",
    "content": "#win-whiteboard>canvas {\n    background-color: #ffffff88;\n}\n\n:root.dark #win-whiteboard>canvas {\n    background-color: #aaaaaa88;\n}\n\n.window.whiteboard.max>#win-whiteboard>.toolbar {\n    bottom: 60px;\n}\n\n.window.whiteboard.max>#win-whiteboard>.toolbar>.tools {\n    border-radius: 10px !important;\n}\n\n#win-whiteboard>.toolbar {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    position: absolute;\n    bottom: 0px;\n    width: 100%;\n    transition: bottom 200ms;\n}\n\n#win-whiteboard>.toolbar>.tools {\n    display: flex;\n    border-radius: 10px 10px 0px 0px;\n    justify-content: space-evenly;\n    box-shadow: 0px 0px 10px 3px #00000066;\n    padding: 0px 15px 0px 15px;\n    overflow: hidden;\n    transition: border-radius 200ms;\n    background-color: #ffffff88;\n}\n\n:root.dark #win-whiteboard>.toolbar>.tools {\n    background-color: #aaaaaa88;\n}\n\n#win-whiteboard>.toolbar>.tools>* {\n    margin: 3px 3px 0px 3px;\n    transition: background-color 70ms, top 100ms;\n    border-radius: 10px 10px 0px 0px;\n    position: relative;\n    top: 13.5px;\n}\n\n#win-whiteboard>.toolbar>.tools>.active {\n    top: 6px;\n    background-color: #00000020;\n}\n\n#win-whiteboard>.toolbar>.tools>.eraser,\n#win-whiteboard>.toolbar>.tools>.delete {\n    width: 76px;\n    display: flex;\n    justify-content: center;\n    padding-top: 5px;\n}\n\n#win-whiteboard>.toolbar>.tools>*:not(.active):hover {\n    background-color: #00000015;\n}"
  },
  {
    "path": "apps/style/word.css",
    "content": "@font-face {\n    font-family: StoreIcons;\n    src: url(\"../icons/msstore/icons.ttf\");\n}\n\n#win-word {\n    display: flex;\n    height: 100%;\n}\n\n#win-word>.app-left{\n    max-width: 125px;\n    min-width: 125px;\n    height: 100%;\n    margin-right: 5px;\n    margin-left: 5px;\n}\n\n#win-word>.app-main {\n    width: 100%;\n    height: 100%;\n    background-color: var(--card);\n    border-radius: 8px 0 0 0;\n}\n\n#win-word>.app-main>* {\n    margin-left: 24px;\n}\n\n#win-word>.app-main>.input {\n    width: 512px !important;\n    margin-bottom: 12px;\n}\n\n#win-word>.app-left>.focs>.home {\n    height: 125px !important;\n    padding: 0px !important;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    flex-direction: column;\n    margin-bottom: 8px;\n}\n\n#win-word>.app-left>.focs>.back {\n    height: 75px !important;\n    padding: 0px !important;\n    display: none;\n    justify-content: last;\n    align-items: center;\n    gap: 16px;\n    margin-bottom: 8px;\n}\n\n#win-word>.app-left>.focs>.check {\n    background-color: var(--hover) !important;\n}\n\n#win-word>.app-left>.focs>.home>*{\n    display: block;\n    max-width: 125px;\n    min-width: 125px;\n    font-size:24px;\n    text-align: center;\n    margin: 0;\n}\n\n#win-word>.app-left>.focs>.back>*{\n    display: block;\n    font-size:24px;\n    margin-left: 12px;\n}\n\n#win-word>.app-left>.focs{\n    height: 100% !important;\n}\n\n#win-word>.app-main {\n    padding: 12px 12px 0 12px;\n}\n\n#win-word>.app-main>.card-list {\n    width: 100%;\n    display: flex;\n    gap: 8px;\n}\n\n#win-word>.app-main>.card-list>.card {\n    height: 250px !important;\n    padding: 0px !important;\n    width: 150px;\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: center;\n    color: var(--text);\n    transition: 80ms !important;\n    border-radius: 16px;\n}\n\n#win-word>.app-main>.card-list>.card:hover {\n    background-color: var(--hover) !important;\n}\n\n#win-word>.app-main>.card-list>.card>img {\n    height: 175px !important;\n    width: 125px !important;\n    border-radius: 8px;\n    margin: 12.5px;\n    background-color: var(--contextmeu);\n}\n\n.office-icon {\n    font-family: StoreIcons;\n}\n\n.window.word>.pages>.home {\n    height: 100%;\n    position: absolute;\n    left: 150%;\n    opacity: 0;\n    visibility: hidden;\n    width: 100%;\n    transition: all 0.25s cubic-bezier(0,1,0,1), visibility 0.25s cubic-bezier(0,1,0,1) ,  opacity 0.5s cubic-bezier(0,1,0,1);\n}\n\n.window.word>.pages>*.show {\n    height: 100%;\n    left: 0 !important;\n    right: 0 !important;\n    position: relative !important;\n    opacity: 1 !important;\n    visibility: visible !important;\n}\n\n.window.word>.pages>.edit {\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    left: 150%;\n    opacity: 0;\n    visibility: hidden;\n    transition: all 0.25s cubic-bezier(0,1,0,1), visibility 0.25s cubic-bezier(0,1,0,1) ,  opacity 0.5s cubic-bezier(0,1,0,1);\n}\n\n.window.word>.pages>.edit>.content {\n    overflow:auto;\n    width: 100%;\n    height: calc(100% - 225px);\n}\n\n.window.word>.pages>.edit>.content>.doc {\n    aspect-ratio: 1/1.414;\n    width: 60%;\n    background-color: var(--contextmeu);\n    color: var(--text);\n    margin: auto;\n    padding: 64px;\n    border:none;\n    outline:none;\n    margin-bottom: 24px;\n    overflow: hidden;\n}\n\n.window.word>.pages>.edit>.content>.doc>.table {\n    width: 100%;\n    min-height: 300px;\n    max-height: 900px;\n    height: auto;\n}\n\n.window.word>.pages>.edit>.content>.doc>.table>tr {\n    min-height: 300px;\n}\n\n.window.word>.pages>.edit>.content>.doc>.square {\n    height: 100px;\n    width: 100px;\n    background-color: #646464;\n}\n\n.window.word>.pages>.edit>.ribbon {\n    height: 150px;\n    width: 100%;\n}\n\n.window.word>.pages>.edit>.ribbon>.tab {\n    height: 28px;\n    margin-top: 8px;\n    margin-left: 8px;\n    margin-bottom: 8px;\n    width: 100%;\n    display: flex;\n    gap: 8px;\n}\n\n.window.word>.pages>.edit>.ribbon>.tab>.tab-selected {\n    background-color: #2c579b;\n    height: 2.5px;\n    width: 24px;\n    border-radius: 8px;\n    position:absolute;\n    left: 62px;\n    top: 32px;\n}\n\n.window.word>.pages>.edit>.ribbon>.tab>a {\n    border-radius: 8px;\n    transition: all 80ms;\n    padding: 4px;\n}\n\n.window.word>.pages>.edit>.ribbon>.tab>a:hover {\n    background-color: #88888836;\n}\n\n\n.window.word>.pages>.edit>.ribbon>.items {\n    box-shadow: 0px 2.5px 2.5px #88888836;\n    height: 100px;\n    width: calc(100% - 16px);\n    margin: auto;\n    border-radius: 8px;\n    background-color: var(--card);\n    display: flex;\n    gap: 4px;\n    align-items: center;\n}\n\n.window.word>.pages>.edit>.ribbon>.items>.item {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: center;\n    height: 100%;\n    width: 64px;\n    border-radius: 8px;\n    transition: all 0.1s;\n}\n\n.window.word>.pages>.edit>.ribbon>.items>.item:hover {\n    background-color: #88888836;\n}\n\n.window.word>.pages>.edit>.ribbon>.items>.item>p {\n    width: calc(100% - 12px);\n    text-align: center;\n    font-size:medium;\n}\n\n.window.word>.pages>.edit>.ribbon>.items>.item>i {\n    text-align: center;\n    font-size: xx-large !important;\n}\n\n.window.word>.pages>.edit>.ribbon>.tab>h3 {\n    margin-top: 0;\n    margin-bottom: 0;\n}\n\n.window.word>.pages {\n    height: 100%;\n}"
  },
  {
    "path": "base.css",
    "content": "body {\n    margin: 0;\n    font-family: system-ui, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, Liberation Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;\n    font-size: 1rem;\n    font-weight: 400;\n    line-height: 1.5;\n    color: #212529;\n    text-align: left;\n    background-color: #fff;\n}\n\n*, ::after, ::before {\n    box-sizing: border-box;\n}\n\nhtml {\n    touch-action: none;\n    font-family: sans-serif;\n    line-height: 1.15;\n    -webkit-text-size-adjust: 100%;\n    -webkit-tap-highlight-color: transparent;\n}\n\nhtml * {\n    touch-action: auto;\n}\n\npre {\n    font-family: monospace;\n}\n\n\nhr {\n    box-sizing: content-box;\n    height: 0;\n    overflow: visible;\n    unicode-bidi: isolate;\n    margin-block-start: 0.5em;\n    margin-block-end: 0.5em;\n    margin-inline-start: auto;\n    margin-inline-end: auto;\n    border: 0;\n    border-top: 1px solid rgba(0,0,0,.1);\n}\n\n[type=button], [type=reset], [type=submit], button {\n    -webkit-appearance: button;\n    appearance: button;\n}\nbutton, select {\n    text-transform: none;\n}\nbutton, input {\n    overflow: visible;\n}\nbutton, input, optgroup, select, textarea {\n    margin: 0;\n    font-family: inherit;\n    font-size: inherit;\n    line-height: inherit;\n}\n\nbutton {\n    appearance: auto;\n    writing-mode: horizontal-tb !important;\n    text-rendering: auto;\n    letter-spacing: normal;\n    word-spacing: normal;\n    line-height: normal;\n    text-transform: none;\n    text-indent: 0px;\n    text-shadow: none;\n    display: inline-block;\n    text-align: center;\n    align-items: flex-start;\n    cursor: default;\n    box-sizing: border-box;\n    background-color: -internal-light-dark(rgb(239, 239, 239), rgb(59, 59, 59));\n    margin: 0em;\n    padding: 1px 6px;\n    border-width: 2px;\n    border-style: outset;\n    border-color: buttonborder;\n    border-image: initial;\n}\n\na:-webkit-any-link {\n    cursor: pointer;\n    text-decoration: none;\n}"
  },
  {
    "path": "bios.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    <!-- 更改页面标题以提高搜索引擎可搜索性 -->\n    <title>Windows 12 BIOS Setup</title>\n    <!-- 使用相对路径引用外部CSS文件 -->\n    <link rel=\"stylesheet\" href=\"./apps/style/bios.css\">\n    <link rel=\"shortcut icon\" href=\"./pwa/logo.png\" type=\"image/x-icon\">\n</head>\n\n<body id=\"body\" ontouchstart=\"return;\">\n    <div id=\"confirmContainer\">\n        <div id=\"exit_confirm\">\n            <div id=\"confirm\" data-show=\"false\">\n                <p id=\"confirm-tit\"> Save configuration changes and exit now? </p>\n                <div class=\"btns\" style=\"display: flex;justify-content: space-around;\">\n                    <a class=\"confirm-button\" id=\"ok-btn\" style=\"background-color: #000;color: #fff;\" click=\"\" ontouchstart=\"\">[OK]</a>\n                    <a class=\"confirm-button\" style=\"color: #000;background-color: #fff;\" ontouchstart=\"$('#confirmContainer').css('display', 'none');$('#confirm').attr('data-show', 'false');\" click=\"$('#confirmContainer').css('display', 'none');$('#confirm').attr('data-show', 'false');\" id=\"cancel-btn\">[Cancel]</a>\n                </div>\n            </div>\n        </div>\n    </div>\n    \n    <div id=\"background\"></div>\n\n    <head>\n        <nav>\n            <p class=\"tit\">BIOS Setup Utility</p>\n        </nav>\n        <nav class=\"pages\" style=\"padding-left: 15px;\">\n            <a class=\"tab tab0\" id=\"main\" click=\"tab = 0; changePage(0)\" ontouchstart=\"changePage(0)\">Main</a>\n            <a class=\"tab tab1\" id=\"advanced\" click=\"tab = 1; changePage(1)\" ontouchstart=\"changePage(1)\">Advanced</a>\n            <a class=\"tab tab2\" id=\"boot\" click=\"tab = 2; changePage(2)\" ontouchstart=\"changePage(2)\">Boot</a>\n            <a class=\"tab tab3\" id=\"security\" click=\"tab = 3; changePage(3)\" ontouchstart=\"changePage(3)\">Security</a>\n            <a class=\"tab tab4\" id=\"exit\" click=\"tab = 4; changePage(4)\" ontouchstart=\"changePage(4)\">Exit</a>\n        </nav>\n    </head>\n    <div id=\"mainPage\" class=\"page page0\">\n        <div class=\"table\">\n            <div>System Time: </div>\n            <div id=\"time\">[11:45:14]</div>\n            <div>System Date: </div>\n            <div id=\"date\">[11/4/5141]</div>\n            <div>BIOS Version: </div>\n            <div>Win12 BIOS v1.0.0</div>\n            <div>Processor: </div>\n            <div>The Wandering Earth (R) NB (R) Quantum Chip 550W @ 8192</div>\n            <div>Memory Size: </div>\n            <div>100 GB</div>\n        </div>\n    </div>\n    <div id=\"advancedPage\" class=\"page page1\">\n        <div class=\"table\">\n            <div>CPU Configuration</div>\n            <div class=\"submenu\">\n                <div>Intel Hyper-Threading: </div>\n                <div class=\"option\">[Enabled]</div>\n                <div>Intel Turbo Boost: </div>\n                <div class=\"option\">[Enabled]</div>\n                <div>CPU Core Ratio: </div>\n                <div class=\"option\">[Auto]</div>\n            </div>\n            <div>Memory Configuration</div>\n            <div class=\"submenu\">\n                <div>Memory Frequency: </div>\n                <div class=\"option\">[Auto]</div>\n                <div>Memory Timing Mode: </div>\n                <div class=\"option\">[Auto]</div>\n                <div>XMP Profile: </div>\n                <div class=\"option\">[Disabled]</div>\n            </div>\n        </div>\n    </div>\n    <div id=\"bootPage\" class=\"page page2\">\n        <div class=\"table\">\n            <div>Boot Configuration</div>\n            <div class=\"submenu\">\n                <div>Fast Boot: </div>\n                <div class=\"option\">[Enabled]</div>\n                <div>Boot Mode: </div>\n                <div class=\"option\">[UEFI]</div>\n                <div>Boot Priority Order:</div>\n                <div class=\"submenu\">\n                    <div>1. Windows Boot Manager</div>\n                    <div>2. SATA HDD</div>\n                    <div>3. USB Device</div>\n                    <div>4. Network Boot</div>\n                </div>\n            </div>\n        </div>\n    </div>\n    <div id=\"securityPage\" class=\"page page3\">\n        <div class=\"table\">\n            <div>Security Configuration</div>\n            <div class=\"submenu\">\n                <div>Administrator Password: </div>\n                <div class=\"option\">[Not Set]</div>\n                <div>User Password: </div>\n                <div class=\"option\">[Not Set]</div>\n                <div>Secure Boot: </div>\n                <div class=\"option\">[Enabled]</div>\n                <div>TPM State: </div>\n                <div class=\"option\">[Enabled]</div>\n            </div>\n        </div>\n    </div>\n    <div id=\"exitPage\" class=\"page page4\">\n        <div class=\"container\">\n            <div click=\"BIOS_confirm(' Save configuration changes and exit now? ','toBoot()')\" ontouchstart=\"BIOS_confirm(' Save configuration changes and exit now? ','toBoot()')\" class=\"exit\" id=\"e1\">Exit Saving Changes</div>\n            <div click=\"BIOS_confirm(' Discard changes and exit setup? ','toBoot()');\" ontouchstart=\"BIOS_confirm(' Discard changes and exit setup? ','toBoot()');\" class=\"exit\" id=\"e2\">Exit Discarding Changes</div>\n            <div click=\"BIOS_confirm('  Restore default setup?  ','$(`#confirmContainer`).css(`display`, `none`);$(`#confirm`).attr(`data-show`, `false`);');\" ontouchstart=\"BIOS_confirm('  Restore default setup?  ','$(`#confirmContainer`).css(`display`, none); $(`#confirm`).attr(`data-show`, `false`);');\" class=\"exit\" id=\"e3\">Restore Defaults</div>\n        </div>\n    </div>\n    <script src=\"./scripts/jq.min.js\"></script>\n    <script src=\"scripts/bios_kernel.js\"></script>\n</body>\n\n</html>"
  },
  {
    "path": "bluescreen.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\" style=\"height: 100%;\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n    <meta name=\"format-detection\" content=\"telephone=no\">\n    \n    <!-- 添加有关网页的描述信息 -->\n    <meta name=\"description\" content=\"Windows 12 Web Version - 一个开放源项目，提供对 Windows 12 的网络预览。\">\n\n\t<!-- Windows 12 网页版 星源原创  -->\n\n\t<!-- Windows 12 网页版是一个开放源项目,\n\t希望让用户在网络上预先体验 Windows 12,\n\t内容可能与 Windows 12 正式版本不一致。\n\t使用标准网络技术,例如 HTML、CSS 和 Javascript\n\t此项目绝不附属于微软,且不应与微软操作系统或产品混淆,\n\t这也不是 Windows365 cloud PC\n\t本项目中微软、Windows和其他示范产品是微软公司的商标 -->\n\t<link rel=\"stylesheet\" href=\"./base.css\" />\n\t<base target=\"_blank\">\n\n\t<title>Windows 12 网页版</title>\n</head>\n<body>\n    <style>\n\t*{\n        user-select: none;\n\t}\n        body{\n            width: 100%;\n            height: 100%;\n            background-color: #005eaa;\n            /* cursor: default; */\n            /* 有链接呢，看不到鼠标怎么点 from stsc */\n        }\n        #box{\n            display: flex;\n            flex-direction: column;\n            justify-items: center;\n            width: 70%;\n            left: 15%;\n            position: absolute;\n            height: 100%;\n            justify-content: center;\n        }\n        #happy-face{\n            color: #fff;\n            font-size: 150px;\n            margin: 0;\n            line-height: 1;\n            /* margin-left: -40px; */\n            margin-top: -10px;\n            height: 150px;\n            height: 150px;\n            display: flex;\n        }\n        #happy-face>*{\n            position: relative;\n            line-height: 0px;\n        }\n        @keyframes eyea{\n            0%{\n                top: -140px;\n                left: -40px;\n            }\n            15%{\n                top: -150px;\n                left: -60px;\n            }\n            25%{\n                top: -140px;\n                left: -40px;\n            }\n            35%{\n                top: -150px;\n                left: -20px;\n            }\n            50%{\n                top: -140px;\n                left: -40px;\n            }\n            85%{\n                top: -140px;\n                left: -40px;\n            }\n            95%{\n                top: -50px;\n                left: -40px;\n            }\n            /* 63%{\n                top: 0px;\n                left: 0;\n            } */\n        }\n        #happy-face>.eye.a{\n            top: -50px;\n            left: -40px;\n            animation: eyea 2s;\n        }\n        @keyframes eyeb{\n            0%{\n                top: -140px;\n                left: 14px;\n            }\n            15%{\n                top: -150px;\n                left: -6px;\n            }\n            25%{\n                top: -140px;\n                left: 14px;\n            }\n            35%{\n                top: -150px;\n                left: 34px;\n            }\n            50%{\n                top: -140px;\n                left: 24px;\n            }\n            90%{\n                top: -140px;\n                left: 24px;\n            }\n        }\n        #happy-face>.eye.b{\n            left: -75px;\n            top: -120px;\n            animation: eyeb 2s;\n        }\n        @keyframes mou{\n            0%{\n                transform: rotate(90deg);\n                top: 10px;\n                left: -60px;\n            }\n            15%{\n                transform: rotate(120deg);\n                top: -10px;\n                left: -80px;\n            }\n            25%{\n                transform: rotate(90deg);\n                top: 10px;\n                left: -60px;\n            }\n            35%{\n                transform: rotate(60deg);\n                top: -10px;\n                left: -20px;\n            }\n            50%{\n                transform: rotate(270deg);\n                top: 10px;\n                left: -80px;\n            }\n            80%{\n                transform: rotate(270deg);\n                top: -10px;\n                left: -80px;\n            }\n            90%{\n                transform: rotate(180deg);\n                top: -25px;\n                left: -60px;\n            }\n            /* 50%{\n                transform: rotate(180deg);\n                top: 20px;\n                left: 50px;\n            } */\n        }\n        #happy-face>.mouse{\n            transform: rotate(180deg);\n            top: -25px;\n            left: -60px;\n            animation: mou 2s;\n        }\n        #tx1{\n            color: #fff;\n            font-size: 23px;\n            margin-bottom: 5px;\n            margin-top: 50px;\n        }\n        #prog{\n            color: #fff;\n            font-size: 23px;\n        }\n        #dtx{\n            color: #fff;\n            margin-left: 20px;\n            font-size: 17px;\n            margin-top: 0;\n        }\n        #qr{\n            min-width: 150px;\n            width: 150px;\n            height: 150px;\n            fill: #005eaa;\n            background-color: #fff;\n        }\n        #detail{\n            display: flex;\n        }\n        .link{\n            color: #efefef;\n            text-decoration: none;\n            transition: 100ms;\n            cursor: pointer;\n        }\n        .link:hover{\n            color: #aaa;\n        }\n    </style>\n    <div id=\"box\">\n        <div id=\"happy-face\">\n            <p class=\"eye a\">.</p>\n            <p class=\"eye b\">.</p>\n            <p class=\"mouse\">)</p>\n        </div>\n        <p id=\"tx1\">你的设备遇到问题，需要重启。<br>我们只假装收集某些错误信息，然后为你重新蓝屏。</p>\n        <p id=\"prog\"><span id=\"complete\">0</span>% 完成</p>\n        <div id=\"detail\">\n            <svg id=\"qr\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.2\" baseProfile=\"tiny\" shape-rendering=\"crispEdges\" viewBox=\"20 15 305 305\" style=\"background-color:rgba(255, 255, 255, 1);\"><rect x=\"42\" y=\"37\" width=\"9\" height=\"63\"/><rect x=\"42\" y=\"109\" width=\"9\" height=\"18\"/><rect x=\"42\" y=\"136\" width=\"9\" height=\"18\"/><rect x=\"42\" y=\"163\" width=\"18\" height=\"9\"/><rect x=\"42\" y=\"181\" width=\"9\" height=\"18\"/><rect x=\"42\" y=\"217\" width=\"36\" height=\"9\"/><rect x=\"42\" y=\"235\" width=\"9\" height=\"63\"/><rect x=\"51\" y=\"37\" width=\"54\" height=\"9\"/><rect x=\"51\" y=\"91\" width=\"54\" height=\"9\"/><rect x=\"51\" y=\"109\" width=\"9\" height=\"9\"/><rect x=\"51\" y=\"145\" width=\"9\" height=\"9\"/><rect x=\"51\" y=\"172\" width=\"9\" height=\"9\"/><rect x=\"51\" y=\"235\" width=\"54\" height=\"9\"/><rect x=\"51\" y=\"289\" width=\"54\" height=\"9\"/><rect x=\"60\" y=\"55\" width=\"27\" height=\"27\"/><rect x=\"60\" y=\"118\" width=\"18\" height=\"9\"/><rect x=\"60\" y=\"136\" width=\"9\" height=\"9\"/><rect x=\"60\" y=\"181\" width=\"9\" height=\"9\"/><rect x=\"60\" y=\"199\" width=\"9\" height=\"9\"/><rect x=\"60\" y=\"253\" width=\"27\" height=\"27\"/><rect x=\"69\" y=\"127\" width=\"72\" height=\"9\"/><rect x=\"69\" y=\"145\" width=\"9\" height=\"9\"/><rect x=\"69\" y=\"190\" width=\"9\" height=\"9\"/><rect x=\"69\" y=\"208\" width=\"9\" height=\"18\"/><rect x=\"78\" y=\"109\" width=\"27\" height=\"9\"/><rect x=\"78\" y=\"154\" width=\"9\" height=\"27\"/><rect x=\"78\" y=\"208\" width=\"9\" height=\"9\"/><rect x=\"87\" y=\"145\" width=\"18\" height=\"9\"/><rect x=\"87\" y=\"190\" width=\"9\" height=\"18\"/><rect x=\"96\" y=\"46\" width=\"9\" height=\"54\"/><rect x=\"96\" y=\"163\" width=\"9\" height=\"9\"/><rect x=\"96\" y=\"181\" width=\"45\" height=\"9\"/><rect x=\"96\" y=\"199\" width=\"9\" height=\"9\"/><rect x=\"96\" y=\"217\" width=\"18\" height=\"9\"/><rect x=\"96\" y=\"244\" width=\"9\" height=\"54\"/><rect x=\"105\" y=\"118\" width=\"9\" height=\"27\"/><rect x=\"105\" y=\"154\" width=\"18\" height=\"9\"/><rect x=\"105\" y=\"172\" width=\"9\" height=\"18\"/><rect x=\"105\" y=\"208\" width=\"9\" height=\"18\"/><rect x=\"114\" y=\"37\" width=\"9\" height=\"36\"/><rect x=\"114\" y=\"82\" width=\"9\" height=\"18\"/><rect x=\"114\" y=\"163\" width=\"18\" height=\"9\"/><rect x=\"114\" y=\"190\" width=\"9\" height=\"18\"/><rect x=\"114\" y=\"226\" width=\"27\" height=\"9\"/><rect x=\"114\" y=\"244\" width=\"9\" height=\"18\"/><rect x=\"114\" y=\"280\" width=\"9\" height=\"18\"/><rect x=\"123\" y=\"55\" width=\"9\" height=\"36\"/><rect x=\"123\" y=\"136\" width=\"9\" height=\"9\"/><rect x=\"123\" y=\"190\" width=\"9\" height=\"9\"/><rect x=\"123\" y=\"235\" width=\"27\" height=\"9\"/><rect x=\"123\" y=\"253\" width=\"18\" height=\"18\"/><rect x=\"123\" y=\"289\" width=\"9\" height=\"9\"/><rect x=\"132\" y=\"64\" width=\"9\" height=\"54\"/><rect x=\"132\" y=\"154\" width=\"9\" height=\"9\"/><rect x=\"132\" y=\"199\" width=\"9\" height=\"9\"/><rect x=\"132\" y=\"271\" width=\"9\" height=\"18\"/><rect x=\"141\" y=\"46\" width=\"27\" height=\"9\"/><rect x=\"141\" y=\"100\" width=\"9\" height=\"9\"/><rect x=\"141\" y=\"145\" width=\"9\" height=\"9\"/><rect x=\"141\" y=\"163\" width=\"9\" height=\"18\"/><rect x=\"141\" y=\"217\" width=\"36\" height=\"9\"/><rect x=\"141\" y=\"244\" width=\"9\" height=\"9\"/><rect x=\"141\" y=\"262\" width=\"9\" height=\"18\"/><rect x=\"150\" y=\"55\" width=\"18\" height=\"27\"/><rect x=\"150\" y=\"91\" width=\"9\" height=\"9\"/><rect x=\"150\" y=\"109\" width=\"18\" height=\"9\"/><rect x=\"150\" y=\"136\" width=\"9\" height=\"9\"/><rect x=\"150\" y=\"154\" width=\"18\" height=\"18\"/><rect x=\"150\" y=\"181\" width=\"27\" height=\"9\"/><rect x=\"150\" y=\"208\" width=\"27\" height=\"27\"/><rect x=\"150\" y=\"271\" width=\"45\" height=\"9\"/><rect x=\"150\" y=\"289\" width=\"27\" height=\"9\"/><rect x=\"159\" y=\"37\" width=\"9\" height=\"45\"/><rect x=\"159\" y=\"118\" width=\"9\" height=\"18\"/><rect x=\"159\" y=\"145\" width=\"9\" height=\"27\"/><rect x=\"159\" y=\"190\" width=\"9\" height=\"54\"/><rect x=\"159\" y=\"262\" width=\"9\" height=\"36\"/><rect x=\"168\" y=\"73\" width=\"9\" height=\"36\"/><rect x=\"168\" y=\"118\" width=\"27\" height=\"9\"/><rect x=\"168\" y=\"136\" width=\"9\" height=\"18\"/><rect x=\"168\" y=\"172\" width=\"9\" height=\"18\"/><rect x=\"168\" y=\"199\" width=\"9\" height=\"36\"/><rect x=\"168\" y=\"244\" width=\"9\" height=\"9\"/><rect x=\"177\" y=\"37\" width=\"18\" height=\"9\"/><rect x=\"177\" y=\"55\" width=\"9\" height=\"18\"/><rect x=\"177\" y=\"127\" width=\"9\" height=\"18\"/><rect x=\"177\" y=\"154\" width=\"9\" height=\"27\"/><rect x=\"177\" y=\"190\" width=\"18\" height=\"9\"/><rect x=\"177\" y=\"226\" width=\"18\" height=\"9\"/><rect x=\"186\" y=\"82\" width=\"9\" height=\"27\"/><rect x=\"186\" y=\"163\" width=\"9\" height=\"9\"/><rect x=\"186\" y=\"181\" width=\"9\" height=\"63\"/><rect x=\"186\" y=\"253\" width=\"9\" height=\"27\"/><rect x=\"195\" y=\"46\" width=\"9\" height=\"18\"/><rect x=\"195\" y=\"82\" width=\"9\" height=\"9\"/><rect x=\"195\" y=\"109\" width=\"9\" height=\"9\"/><rect x=\"195\" y=\"181\" width=\"9\" height=\"9\"/><rect x=\"195\" y=\"208\" width=\"9\" height=\"18\"/><rect x=\"195\" y=\"280\" width=\"9\" height=\"9\"/><rect x=\"204\" y=\"37\" width=\"9\" height=\"9\"/><rect x=\"204\" y=\"91\" width=\"9\" height=\"9\"/><rect x=\"204\" y=\"127\" width=\"18\" height=\"9\"/><rect x=\"204\" y=\"199\" width=\"9\" height=\"18\"/><rect x=\"204\" y=\"226\" width=\"9\" height=\"18\"/><rect x=\"204\" y=\"253\" width=\"9\" height=\"9\"/><rect x=\"204\" y=\"271\" width=\"18\" height=\"9\"/><rect x=\"213\" y=\"55\" width=\"9\" height=\"9\"/><rect x=\"213\" y=\"73\" width=\"18\" height=\"9\"/><rect x=\"213\" y=\"100\" width=\"9\" height=\"90\"/><rect x=\"213\" y=\"208\" width=\"27\" height=\"18\"/><rect x=\"213\" y=\"262\" width=\"9\" height=\"18\"/><rect x=\"222\" y=\"46\" width=\"9\" height=\"9\"/><rect x=\"222\" y=\"64\" width=\"9\" height=\"54\"/><rect x=\"222\" y=\"136\" width=\"18\" height=\"9\"/><rect x=\"222\" y=\"154\" width=\"9\" height=\"9\"/><rect x=\"222\" y=\"172\" width=\"9\" height=\"27\"/><rect x=\"222\" y=\"226\" width=\"9\" height=\"36\"/><rect x=\"231\" y=\"118\" width=\"9\" height=\"36\"/><rect x=\"231\" y=\"172\" width=\"9\" height=\"9\"/><rect x=\"231\" y=\"253\" width=\"45\" height=\"9\"/><rect x=\"240\" y=\"37\" width=\"9\" height=\"63\"/><rect x=\"240\" y=\"118\" width=\"9\" height=\"18\"/><rect x=\"240\" y=\"145\" width=\"9\" height=\"27\"/><rect x=\"240\" y=\"190\" width=\"9\" height=\"18\"/><rect x=\"240\" y=\"217\" width=\"27\" height=\"9\"/><rect x=\"240\" y=\"235\" width=\"9\" height=\"9\"/><rect x=\"240\" y=\"262\" width=\"9\" height=\"36\"/><rect x=\"249\" y=\"37\" width=\"54\" height=\"9\"/><rect x=\"249\" y=\"91\" width=\"54\" height=\"9\"/><rect x=\"249\" y=\"109\" width=\"9\" height=\"18\"/><rect x=\"249\" y=\"145\" width=\"9\" height=\"18\"/><rect x=\"249\" y=\"181\" width=\"9\" height=\"18\"/><rect x=\"249\" y=\"262\" width=\"9\" height=\"9\"/><rect x=\"249\" y=\"280\" width=\"36\" height=\"9\"/><rect x=\"258\" y=\"55\" width=\"27\" height=\"27\"/><rect x=\"258\" y=\"118\" width=\"9\" height=\"18\"/><rect x=\"258\" y=\"154\" width=\"9\" height=\"18\"/><rect x=\"258\" y=\"190\" width=\"9\" height=\"18\"/><rect x=\"258\" y=\"226\" width=\"9\" height=\"36\"/><rect x=\"258\" y=\"271\" width=\"9\" height=\"27\"/><rect x=\"267\" y=\"109\" width=\"36\" height=\"9\"/><rect x=\"267\" y=\"127\" width=\"9\" height=\"27\"/><rect x=\"267\" y=\"163\" width=\"27\" height=\"9\"/><rect x=\"267\" y=\"181\" width=\"27\" height=\"9\"/><rect x=\"267\" y=\"199\" width=\"27\" height=\"9\"/><rect x=\"267\" y=\"226\" width=\"18\" height=\"18\"/><rect x=\"267\" y=\"262\" width=\"27\" height=\"9\"/><rect x=\"276\" y=\"118\" width=\"9\" height=\"18\"/><rect x=\"276\" y=\"145\" width=\"9\" height=\"27\"/><rect x=\"276\" y=\"190\" width=\"18\" height=\"18\"/><rect x=\"276\" y=\"244\" width=\"18\" height=\"9\"/><rect x=\"276\" y=\"271\" width=\"9\" height=\"18\"/><rect x=\"285\" y=\"145\" width=\"9\" height=\"9\"/><rect x=\"285\" y=\"172\" width=\"9\" height=\"45\"/><rect x=\"285\" y=\"271\" width=\"18\" height=\"9\"/><rect x=\"285\" y=\"289\" width=\"9\" height=\"9\"/><rect x=\"294\" y=\"46\" width=\"9\" height=\"54\"/><rect x=\"294\" y=\"127\" width=\"9\" height=\"9\"/><rect x=\"294\" y=\"190\" width=\"9\" height=\"9\"/><rect x=\"294\" y=\"235\" width=\"9\" height=\"9\"/><rect x=\"294\" y=\"253\" width=\"9\" height=\"9\"/></svg>\n            <p id=\"dtx\">有关此问题的详细信息和可能的解决方案，请访问<br><a onclick=\"window.open('https:\\/\\/www.bilibili.com/video/BV1GJ411x7h7','_blank')\" class=\"link\">https://www.windows.com/stopcode</a><br><br>如果致电支持人员，请向他们提供以下信息：<br>终止代码: <span id=\"stopcode\" style=\"user-select:text;\">YOU_MAY_DID_NOT_STAR_THIS_PROJECT</span></p>\n        </div>\n    </div>\n    <script src=\"scripts/jq.min.js\"></script>\n    <script>\n        function sleep(millisecond, callback) {\n            // 延迟指定的毫秒数后执行回调函数\n            setTimeout(callback, millisecond);\n        }\n\n        function update_complete() {\n            // 更新complete元素的文本内容，将其值加1\n            complete.innerText = (parseInt(complete.innerText) + 1).toString();\n        }\n        function next_loop(element) {\n            // 将complete元素的文本内容解析为整数\n            var i = parseInt(complete.innerText, 10);\n            // 定义延迟时间数组\n            var delays = [300, 200, 100, 50];\n\n            if (i >= 100) {\n                 // 重新加载页面\n                $('html').css('filter','brightness(0)')\n                setTimeout(() => {\n                    reload();\n                }, 2000);\n                return;\n            }\n\n            var delay;\n            if (i < 20) {\n                // 对应i小于20时的延迟时间\n                delay = delays[0];\n            } else if (i < 60) {\n                // 对应i小于60时的延迟时间\n                delay = delays[1];\n            } else if (i < 80) {\n                 // 对应i小于80时的延迟时间\n                delay = delays[2];\n            } else {\n                // 对应i大于等于80时的延迟时间\n                delay = delays[3];\n            }\n\n            sleep(delay, function () {\n                 // 更新complete元素的值\n                update_complete();\n                 // 递归调用next_loop函数，形成循环\n                next_loop();\n            });\n        }\n\n        function reload() {\n            // 重新加载页面\n            window.location.reload();\n        }\n\n        let complete = document.getElementById(\"complete\");\n        next_loop();\n        // 从URL参数中获取名为\"code\"的值\n        var r = window.location.search.substr(1).match(/(^|&)code=([^&]*)(&|$)/);\n        if(r!=null){\n            document.getElementById('stopcode').innerHTML = r[2];\n        }\n    </script>\n</body>\n</html>\n"
  },
  {
    "path": "boot.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Windows 12 Web Version</title> <!-- 优化：更具描述性的页面标题 -->\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n    <!-- 优化：添加 viewport meta 标签，确保在移动设备上的适配性 -->\n    <style>\n        @font-face {\n            font-family: 'dos';\n            src: url(./fonts/dos.ttf);\n        }\n\n        html {\n            background-color: #000000;\n        }\n\n        * {\n            font-family: 'dos';\n            margin: 0; /* 优化：合并重复的 CSS 属性 */\n            padding: 0;\n            border: 0;\n            user-select: none;\n            scrollbar-width: none;\n            -webkit-user-select: none;\n            -moz-user-select: none;\n            -o-user-select: none;\n        }\n\n        ::-webkit-scrollbar {\n            display: none;\n        }\n\n        body {\n            background-color: black;\n            color: white;\n            cursor: none; /* 优化：使用 CSS 属性来隐藏鼠标指针 */\n        }\n\n        .loading {\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n\n        #info {\n            position: absolute;\n            bottom: 10px;\n            width: 100%;\n        }\n    </style>\n</head>\n\n<body id=\"body\" scroll=\"no\">\n    <div id=\"info\">\n        <div class=\"loading\">\n            <p>Starting</p>\n            <div id=\"load\" style=\"background-color: #acabac; width: 200px; height: 20px;\"></div>\n            <div id=\"back\" style=\"background-color: #565656; width: 200px; height: 20px;\"></div>\n            <br>\n        </div>\n        <p style=\"text-align: center;\">Press F2 or touch screen to enter SETUP</p>\n    </div>\n    <script src=\"./scripts/jq.min.js\"></script>\n    <script src=\"./scripts/boot_kernel.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "bootstrap-icons.css",
    "content": "@font-face{font-display:block;font-family:\"bootstrap-icons\";src:url(\"./fonts/bootstrap-icons.woff2?8d200481aa7f02a2d63a331fc782cfaf\") format(\"woff2\"),url(\"./fonts/bootstrap-icons.woff?8d200481aa7f02a2d63a331fc782cfaf\") format(\"woff\")}.bi::before,[class^=\"bi-\"]::before,[class*=\" bi-\"]::before{display:inline-block;font-family:bootstrap-icons !important;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;line-height:1;vertical-align:-.125em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.bi-123::before{content:\"\\f67f\"}.bi-alarm-fill::before{content:\"\\f101\"}.bi-alarm::before{content:\"\\f102\"}.bi-align-bottom::before{content:\"\\f103\"}.bi-align-center::before{content:\"\\f104\"}.bi-align-end::before{content:\"\\f105\"}.bi-align-middle::before{content:\"\\f106\"}.bi-align-start::before{content:\"\\f107\"}.bi-align-top::before{content:\"\\f108\"}.bi-alt::before{content:\"\\f109\"}.bi-app-indicator::before{content:\"\\f10a\"}.bi-app::before{content:\"\\f10b\"}.bi-archive-fill::before{content:\"\\f10c\"}.bi-archive::before{content:\"\\f10d\"}.bi-arrow-90deg-down::before{content:\"\\f10e\"}.bi-arrow-90deg-left::before{content:\"\\f10f\"}.bi-arrow-90deg-right::before{content:\"\\f110\"}.bi-arrow-90deg-up::before{content:\"\\f111\"}.bi-arrow-bar-down::before{content:\"\\f112\"}.bi-arrow-bar-left::before{content:\"\\f113\"}.bi-arrow-bar-right::before{content:\"\\f114\"}.bi-arrow-bar-up::before{content:\"\\f115\"}.bi-arrow-clockwise::before{content:\"\\f116\"}.bi-arrow-counterclockwise::before{content:\"\\f117\"}.bi-arrow-down-circle-fill::before{content:\"\\f118\"}.bi-arrow-down-circle::before{content:\"\\f119\"}.bi-arrow-down-left-circle-fill::before{content:\"\\f11a\"}.bi-arrow-down-left-circle::before{content:\"\\f11b\"}.bi-arrow-down-left-square-fill::before{content:\"\\f11c\"}.bi-arrow-down-left-square::before{content:\"\\f11d\"}.bi-arrow-down-left::before{content:\"\\f11e\"}.bi-arrow-down-right-circle-fill::before{content:\"\\f11f\"}.bi-arrow-down-right-circle::before{content:\"\\f120\"}.bi-arrow-down-right-square-fill::before{content:\"\\f121\"}.bi-arrow-down-right-square::before{content:\"\\f122\"}.bi-arrow-down-right::before{content:\"\\f123\"}.bi-arrow-down-short::before{content:\"\\f124\"}.bi-arrow-down-square-fill::before{content:\"\\f125\"}.bi-arrow-down-square::before{content:\"\\f126\"}.bi-arrow-down-up::before{content:\"\\f127\"}.bi-arrow-down::before{content:\"\\f128\"}.bi-arrow-left-circle-fill::before{content:\"\\f129\"}.bi-arrow-left-circle::before{content:\"\\f12a\"}.bi-arrow-left-right::before{content:\"\\f12b\"}.bi-arrow-left-short::before{content:\"\\f12c\"}.bi-arrow-left-square-fill::before{content:\"\\f12d\"}.bi-arrow-left-square::before{content:\"\\f12e\"}.bi-arrow-left::before{content:\"\\f12f\"}.bi-arrow-repeat::before{content:\"\\f130\"}.bi-arrow-return-left::before{content:\"\\f131\"}.bi-arrow-return-right::before{content:\"\\f132\"}.bi-arrow-right-circle-fill::before{content:\"\\f133\"}.bi-arrow-right-circle::before{content:\"\\f134\"}.bi-arrow-right-short::before{content:\"\\f135\"}.bi-arrow-right-square-fill::before{content:\"\\f136\"}.bi-arrow-right-square::before{content:\"\\f137\"}.bi-arrow-right::before{content:\"\\f138\"}.bi-arrow-up-circle-fill::before{content:\"\\f139\"}.bi-arrow-up-circle::before{content:\"\\f13a\"}.bi-arrow-up-left-circle-fill::before{content:\"\\f13b\"}.bi-arrow-up-left-circle::before{content:\"\\f13c\"}.bi-arrow-up-left-square-fill::before{content:\"\\f13d\"}.bi-arrow-up-left-square::before{content:\"\\f13e\"}.bi-arrow-up-left::before{content:\"\\f13f\"}.bi-arrow-up-right-circle-fill::before{content:\"\\f140\"}.bi-arrow-up-right-circle::before{content:\"\\f141\"}.bi-arrow-up-right-square-fill::before{content:\"\\f142\"}.bi-arrow-up-right-square::before{content:\"\\f143\"}.bi-arrow-up-right::before{content:\"\\f144\"}.bi-arrow-up-short::before{content:\"\\f145\"}.bi-arrow-up-square-fill::before{content:\"\\f146\"}.bi-arrow-up-square::before{content:\"\\f147\"}.bi-arrow-up::before{content:\"\\f148\"}.bi-arrows-angle-contract::before{content:\"\\f149\"}.bi-arrows-angle-expand::before{content:\"\\f14a\"}.bi-arrows-collapse::before{content:\"\\f14b\"}.bi-arrows-expand::before{content:\"\\f14c\"}.bi-arrows-fullscreen::before{content:\"\\f14d\"}.bi-arrows-move::before{content:\"\\f14e\"}.bi-aspect-ratio-fill::before{content:\"\\f14f\"}.bi-aspect-ratio::before{content:\"\\f150\"}.bi-asterisk::before{content:\"\\f151\"}.bi-at::before{content:\"\\f152\"}.bi-award-fill::before{content:\"\\f153\"}.bi-award::before{content:\"\\f154\"}.bi-back::before{content:\"\\f155\"}.bi-backspace-fill::before{content:\"\\f156\"}.bi-backspace-reverse-fill::before{content:\"\\f157\"}.bi-backspace-reverse::before{content:\"\\f158\"}.bi-backspace::before{content:\"\\f159\"}.bi-badge-3d-fill::before{content:\"\\f15a\"}.bi-badge-3d::before{content:\"\\f15b\"}.bi-badge-4k-fill::before{content:\"\\f15c\"}.bi-badge-4k::before{content:\"\\f15d\"}.bi-badge-8k-fill::before{content:\"\\f15e\"}.bi-badge-8k::before{content:\"\\f15f\"}.bi-badge-ad-fill::before{content:\"\\f160\"}.bi-badge-ad::before{content:\"\\f161\"}.bi-badge-ar-fill::before{content:\"\\f162\"}.bi-badge-ar::before{content:\"\\f163\"}.bi-badge-cc-fill::before{content:\"\\f164\"}.bi-badge-cc::before{content:\"\\f165\"}.bi-badge-hd-fill::before{content:\"\\f166\"}.bi-badge-hd::before{content:\"\\f167\"}.bi-badge-tm-fill::before{content:\"\\f168\"}.bi-badge-tm::before{content:\"\\f169\"}.bi-badge-vo-fill::before{content:\"\\f16a\"}.bi-badge-vo::before{content:\"\\f16b\"}.bi-badge-vr-fill::before{content:\"\\f16c\"}.bi-badge-vr::before{content:\"\\f16d\"}.bi-badge-wc-fill::before{content:\"\\f16e\"}.bi-badge-wc::before{content:\"\\f16f\"}.bi-bag-check-fill::before{content:\"\\f170\"}.bi-bag-check::before{content:\"\\f171\"}.bi-bag-dash-fill::before{content:\"\\f172\"}.bi-bag-dash::before{content:\"\\f173\"}.bi-bag-fill::before{content:\"\\f174\"}.bi-bag-plus-fill::before{content:\"\\f175\"}.bi-bag-plus::before{content:\"\\f176\"}.bi-bag-x-fill::before{content:\"\\f177\"}.bi-bag-x::before{content:\"\\f178\"}.bi-bag::before{content:\"\\f179\"}.bi-bar-chart-fill::before{content:\"\\f17a\"}.bi-bar-chart-line-fill::before{content:\"\\f17b\"}.bi-bar-chart-line::before{content:\"\\f17c\"}.bi-bar-chart-steps::before{content:\"\\f17d\"}.bi-bar-chart::before{content:\"\\f17e\"}.bi-basket-fill::before{content:\"\\f17f\"}.bi-basket::before{content:\"\\f180\"}.bi-basket2-fill::before{content:\"\\f181\"}.bi-basket2::before{content:\"\\f182\"}.bi-basket3-fill::before{content:\"\\f183\"}.bi-basket3::before{content:\"\\f184\"}.bi-battery-charging::before{content:\"\\f185\"}.bi-battery-full::before{content:\"\\f186\"}.bi-battery-half::before{content:\"\\f187\"}.bi-battery::before{content:\"\\f188\"}.bi-bell-fill::before{content:\"\\f189\"}.bi-bell::before{content:\"\\f18a\"}.bi-bezier::before{content:\"\\f18b\"}.bi-bezier2::before{content:\"\\f18c\"}.bi-bicycle::before{content:\"\\f18d\"}.bi-binoculars-fill::before{content:\"\\f18e\"}.bi-binoculars::before{content:\"\\f18f\"}.bi-blockquote-left::before{content:\"\\f190\"}.bi-blockquote-right::before{content:\"\\f191\"}.bi-book-fill::before{content:\"\\f192\"}.bi-book-half::before{content:\"\\f193\"}.bi-book::before{content:\"\\f194\"}.bi-bookmark-check-fill::before{content:\"\\f195\"}.bi-bookmark-check::before{content:\"\\f196\"}.bi-bookmark-dash-fill::before{content:\"\\f197\"}.bi-bookmark-dash::before{content:\"\\f198\"}.bi-bookmark-fill::before{content:\"\\f199\"}.bi-bookmark-heart-fill::before{content:\"\\f19a\"}.bi-bookmark-heart::before{content:\"\\f19b\"}.bi-bookmark-plus-fill::before{content:\"\\f19c\"}.bi-bookmark-plus::before{content:\"\\f19d\"}.bi-bookmark-star-fill::before{content:\"\\f19e\"}.bi-bookmark-star::before{content:\"\\f19f\"}.bi-bookmark-x-fill::before{content:\"\\f1a0\"}.bi-bookmark-x::before{content:\"\\f1a1\"}.bi-bookmark::before{content:\"\\f1a2\"}.bi-bookmarks-fill::before{content:\"\\f1a3\"}.bi-bookmarks::before{content:\"\\f1a4\"}.bi-bookshelf::before{content:\"\\f1a5\"}.bi-bootstrap-fill::before{content:\"\\f1a6\"}.bi-bootstrap-reboot::before{content:\"\\f1a7\"}.bi-bootstrap::before{content:\"\\f1a8\"}.bi-border-all::before{content:\"\\f1a9\"}.bi-border-bottom::before{content:\"\\f1aa\"}.bi-border-center::before{content:\"\\f1ab\"}.bi-border-inner::before{content:\"\\f1ac\"}.bi-border-left::before{content:\"\\f1ad\"}.bi-border-middle::before{content:\"\\f1ae\"}.bi-border-outer::before{content:\"\\f1af\"}.bi-border-right::before{content:\"\\f1b0\"}.bi-border-style::before{content:\"\\f1b1\"}.bi-border-top::before{content:\"\\f1b2\"}.bi-border-width::before{content:\"\\f1b3\"}.bi-border::before{content:\"\\f1b4\"}.bi-bounding-box-circles::before{content:\"\\f1b5\"}.bi-bounding-box::before{content:\"\\f1b6\"}.bi-box-arrow-down-left::before{content:\"\\f1b7\"}.bi-box-arrow-down-right::before{content:\"\\f1b8\"}.bi-box-arrow-down::before{content:\"\\f1b9\"}.bi-box-arrow-in-down-left::before{content:\"\\f1ba\"}.bi-box-arrow-in-down-right::before{content:\"\\f1bb\"}.bi-box-arrow-in-down::before{content:\"\\f1bc\"}.bi-box-arrow-in-left::before{content:\"\\f1bd\"}.bi-box-arrow-in-right::before{content:\"\\f1be\"}.bi-box-arrow-in-up-left::before{content:\"\\f1bf\"}.bi-box-arrow-in-up-right::before{content:\"\\f1c0\"}.bi-box-arrow-in-up::before{content:\"\\f1c1\"}.bi-box-arrow-left::before{content:\"\\f1c2\"}.bi-box-arrow-right::before{content:\"\\f1c3\"}.bi-box-arrow-up-left::before{content:\"\\f1c4\"}.bi-box-arrow-up-right::before{content:\"\\f1c5\"}.bi-box-arrow-up::before{content:\"\\f1c6\"}.bi-box-seam::before{content:\"\\f1c7\"}.bi-box::before{content:\"\\f1c8\"}.bi-braces::before{content:\"\\f1c9\"}.bi-bricks::before{content:\"\\f1ca\"}.bi-briefcase-fill::before{content:\"\\f1cb\"}.bi-briefcase::before{content:\"\\f1cc\"}.bi-brightness-alt-high-fill::before{content:\"\\f1cd\"}.bi-brightness-alt-high::before{content:\"\\f1ce\"}.bi-brightness-alt-low-fill::before{content:\"\\f1cf\"}.bi-brightness-alt-low::before{content:\"\\f1d0\"}.bi-brightness-high-fill::before{content:\"\\f1d1\"}.bi-brightness-high::before{content:\"\\f1d2\"}.bi-brightness-low-fill::before{content:\"\\f1d3\"}.bi-brightness-low::before{content:\"\\f1d4\"}.bi-broadcast-pin::before{content:\"\\f1d5\"}.bi-broadcast::before{content:\"\\f1d6\"}.bi-brush-fill::before{content:\"\\f1d7\"}.bi-brush::before{content:\"\\f1d8\"}.bi-bucket-fill::before{content:\"\\f1d9\"}.bi-bucket::before{content:\"\\f1da\"}.bi-bug-fill::before{content:\"\\f1db\"}.bi-bug::before{content:\"\\f1dc\"}.bi-building::before{content:\"\\f1dd\"}.bi-bullseye::before{content:\"\\f1de\"}.bi-calculator-fill::before{content:\"\\f1df\"}.bi-calculator::before{content:\"\\f1e0\"}.bi-calendar-check-fill::before{content:\"\\f1e1\"}.bi-calendar-check::before{content:\"\\f1e2\"}.bi-calendar-date-fill::before{content:\"\\f1e3\"}.bi-calendar-date::before{content:\"\\f1e4\"}.bi-calendar-day-fill::before{content:\"\\f1e5\"}.bi-calendar-day::before{content:\"\\f1e6\"}.bi-calendar-event-fill::before{content:\"\\f1e7\"}.bi-calendar-event::before{content:\"\\f1e8\"}.bi-calendar-fill::before{content:\"\\f1e9\"}.bi-calendar-minus-fill::before{content:\"\\f1ea\"}.bi-calendar-minus::before{content:\"\\f1eb\"}.bi-calendar-month-fill::before{content:\"\\f1ec\"}.bi-calendar-month::before{content:\"\\f1ed\"}.bi-calendar-plus-fill::before{content:\"\\f1ee\"}.bi-calendar-plus::before{content:\"\\f1ef\"}.bi-calendar-range-fill::before{content:\"\\f1f0\"}.bi-calendar-range::before{content:\"\\f1f1\"}.bi-calendar-week-fill::before{content:\"\\f1f2\"}.bi-calendar-week::before{content:\"\\f1f3\"}.bi-calendar-x-fill::before{content:\"\\f1f4\"}.bi-calendar-x::before{content:\"\\f1f5\"}.bi-calendar::before{content:\"\\f1f6\"}.bi-calendar2-check-fill::before{content:\"\\f1f7\"}.bi-calendar2-check::before{content:\"\\f1f8\"}.bi-calendar2-date-fill::before{content:\"\\f1f9\"}.bi-calendar2-date::before{content:\"\\f1fa\"}.bi-calendar2-day-fill::before{content:\"\\f1fb\"}.bi-calendar2-day::before{content:\"\\f1fc\"}.bi-calendar2-event-fill::before{content:\"\\f1fd\"}.bi-calendar2-event::before{content:\"\\f1fe\"}.bi-calendar2-fill::before{content:\"\\f1ff\"}.bi-calendar2-minus-fill::before{content:\"\\f200\"}.bi-calendar2-minus::before{content:\"\\f201\"}.bi-calendar2-month-fill::before{content:\"\\f202\"}.bi-calendar2-month::before{content:\"\\f203\"}.bi-calendar2-plus-fill::before{content:\"\\f204\"}.bi-calendar2-plus::before{content:\"\\f205\"}.bi-calendar2-range-fill::before{content:\"\\f206\"}.bi-calendar2-range::before{content:\"\\f207\"}.bi-calendar2-week-fill::before{content:\"\\f208\"}.bi-calendar2-week::before{content:\"\\f209\"}.bi-calendar2-x-fill::before{content:\"\\f20a\"}.bi-calendar2-x::before{content:\"\\f20b\"}.bi-calendar2::before{content:\"\\f20c\"}.bi-calendar3-event-fill::before{content:\"\\f20d\"}.bi-calendar3-event::before{content:\"\\f20e\"}.bi-calendar3-fill::before{content:\"\\f20f\"}.bi-calendar3-range-fill::before{content:\"\\f210\"}.bi-calendar3-range::before{content:\"\\f211\"}.bi-calendar3-week-fill::before{content:\"\\f212\"}.bi-calendar3-week::before{content:\"\\f213\"}.bi-calendar3::before{content:\"\\f214\"}.bi-calendar4-event::before{content:\"\\f215\"}.bi-calendar4-range::before{content:\"\\f216\"}.bi-calendar4-week::before{content:\"\\f217\"}.bi-calendar4::before{content:\"\\f218\"}.bi-camera-fill::before{content:\"\\f219\"}.bi-camera-reels-fill::before{content:\"\\f21a\"}.bi-camera-reels::before{content:\"\\f21b\"}.bi-camera-video-fill::before{content:\"\\f21c\"}.bi-camera-video-off-fill::before{content:\"\\f21d\"}.bi-camera-video-off::before{content:\"\\f21e\"}.bi-camera-video::before{content:\"\\f21f\"}.bi-camera::before{content:\"\\f220\"}.bi-camera2::before{content:\"\\f221\"}.bi-capslock-fill::before{content:\"\\f222\"}.bi-capslock::before{content:\"\\f223\"}.bi-card-checklist::before{content:\"\\f224\"}.bi-card-heading::before{content:\"\\f225\"}.bi-card-image::before{content:\"\\f226\"}.bi-card-list::before{content:\"\\f227\"}.bi-card-text::before{content:\"\\f228\"}.bi-caret-down-fill::before{content:\"\\f229\"}.bi-caret-down-square-fill::before{content:\"\\f22a\"}.bi-caret-down-square::before{content:\"\\f22b\"}.bi-caret-down::before{content:\"\\f22c\"}.bi-caret-left-fill::before{content:\"\\f22d\"}.bi-caret-left-square-fill::before{content:\"\\f22e\"}.bi-caret-left-square::before{content:\"\\f22f\"}.bi-caret-left::before{content:\"\\f230\"}.bi-caret-right-fill::before{content:\"\\f231\"}.bi-caret-right-square-fill::before{content:\"\\f232\"}.bi-caret-right-square::before{content:\"\\f233\"}.bi-caret-right::before{content:\"\\f234\"}.bi-caret-up-fill::before{content:\"\\f235\"}.bi-caret-up-square-fill::before{content:\"\\f236\"}.bi-caret-up-square::before{content:\"\\f237\"}.bi-caret-up::before{content:\"\\f238\"}.bi-cart-check-fill::before{content:\"\\f239\"}.bi-cart-check::before{content:\"\\f23a\"}.bi-cart-dash-fill::before{content:\"\\f23b\"}.bi-cart-dash::before{content:\"\\f23c\"}.bi-cart-fill::before{content:\"\\f23d\"}.bi-cart-plus-fill::before{content:\"\\f23e\"}.bi-cart-plus::before{content:\"\\f23f\"}.bi-cart-x-fill::before{content:\"\\f240\"}.bi-cart-x::before{content:\"\\f241\"}.bi-cart::before{content:\"\\f242\"}.bi-cart2::before{content:\"\\f243\"}.bi-cart3::before{content:\"\\f244\"}.bi-cart4::before{content:\"\\f245\"}.bi-cash-stack::before{content:\"\\f246\"}.bi-cash::before{content:\"\\f247\"}.bi-cast::before{content:\"\\f248\"}.bi-chat-dots-fill::before{content:\"\\f249\"}.bi-chat-dots::before{content:\"\\f24a\"}.bi-chat-fill::before{content:\"\\f24b\"}.bi-chat-left-dots-fill::before{content:\"\\f24c\"}.bi-chat-left-dots::before{content:\"\\f24d\"}.bi-chat-left-fill::before{content:\"\\f24e\"}.bi-chat-left-quote-fill::before{content:\"\\f24f\"}.bi-chat-left-quote::before{content:\"\\f250\"}.bi-chat-left-text-fill::before{content:\"\\f251\"}.bi-chat-left-text::before{content:\"\\f252\"}.bi-chat-left::before{content:\"\\f253\"}.bi-chat-quote-fill::before{content:\"\\f254\"}.bi-chat-quote::before{content:\"\\f255\"}.bi-chat-right-dots-fill::before{content:\"\\f256\"}.bi-chat-right-dots::before{content:\"\\f257\"}.bi-chat-right-fill::before{content:\"\\f258\"}.bi-chat-right-quote-fill::before{content:\"\\f259\"}.bi-chat-right-quote::before{content:\"\\f25a\"}.bi-chat-right-text-fill::before{content:\"\\f25b\"}.bi-chat-right-text::before{content:\"\\f25c\"}.bi-chat-right::before{content:\"\\f25d\"}.bi-chat-square-dots-fill::before{content:\"\\f25e\"}.bi-chat-square-dots::before{content:\"\\f25f\"}.bi-chat-square-fill::before{content:\"\\f260\"}.bi-chat-square-quote-fill::before{content:\"\\f261\"}.bi-chat-square-quote::before{content:\"\\f262\"}.bi-chat-square-text-fill::before{content:\"\\f263\"}.bi-chat-square-text::before{content:\"\\f264\"}.bi-chat-square::before{content:\"\\f265\"}.bi-chat-text-fill::before{content:\"\\f266\"}.bi-chat-text::before{content:\"\\f267\"}.bi-chat::before{content:\"\\f268\"}.bi-check-all::before{content:\"\\f269\"}.bi-check-circle-fill::before{content:\"\\f26a\"}.bi-check-circle::before{content:\"\\f26b\"}.bi-check-square-fill::before{content:\"\\f26c\"}.bi-check-square::before{content:\"\\f26d\"}.bi-check::before{content:\"\\f26e\"}.bi-check2-all::before{content:\"\\f26f\"}.bi-check2-circle::before{content:\"\\f270\"}.bi-check2-square::before{content:\"\\f271\"}.bi-check2::before{content:\"\\f272\"}.bi-chevron-bar-contract::before{content:\"\\f273\"}.bi-chevron-bar-down::before{content:\"\\f274\"}.bi-chevron-bar-expand::before{content:\"\\f275\"}.bi-chevron-bar-left::before{content:\"\\f276\"}.bi-chevron-bar-right::before{content:\"\\f277\"}.bi-chevron-bar-up::before{content:\"\\f278\"}.bi-chevron-compact-down::before{content:\"\\f279\"}.bi-chevron-compact-left::before{content:\"\\f27a\"}.bi-chevron-compact-right::before{content:\"\\f27b\"}.bi-chevron-compact-up::before{content:\"\\f27c\"}.bi-chevron-contract::before{content:\"\\f27d\"}.bi-chevron-double-down::before{content:\"\\f27e\"}.bi-chevron-double-left::before{content:\"\\f27f\"}.bi-chevron-double-right::before{content:\"\\f280\"}.bi-chevron-double-up::before{content:\"\\f281\"}.bi-chevron-down::before{content:\"\\f282\"}.bi-chevron-expand::before{content:\"\\f283\"}.bi-chevron-left::before{content:\"\\f284\"}.bi-chevron-right::before{content:\"\\f285\"}.bi-chevron-up::before{content:\"\\f286\"}.bi-circle-fill::before{content:\"\\f287\"}.bi-circle-half::before{content:\"\\f288\"}.bi-circle-square::before{content:\"\\f289\"}.bi-circle::before{content:\"\\f28a\"}.bi-clipboard-check::before{content:\"\\f28b\"}.bi-clipboard-data::before{content:\"\\f28c\"}.bi-clipboard-minus::before{content:\"\\f28d\"}.bi-clipboard-plus::before{content:\"\\f28e\"}.bi-clipboard-x::before{content:\"\\f28f\"}.bi-clipboard::before{content:\"\\f290\"}.bi-clock-fill::before{content:\"\\f291\"}.bi-clock-history::before{content:\"\\f292\"}.bi-clock::before{content:\"\\f293\"}.bi-cloud-arrow-down-fill::before{content:\"\\f294\"}.bi-cloud-arrow-down::before{content:\"\\f295\"}.bi-cloud-arrow-up-fill::before{content:\"\\f296\"}.bi-cloud-arrow-up::before{content:\"\\f297\"}.bi-cloud-check-fill::before{content:\"\\f298\"}.bi-cloud-check::before{content:\"\\f299\"}.bi-cloud-download-fill::before{content:\"\\f29a\"}.bi-cloud-download::before{content:\"\\f29b\"}.bi-cloud-drizzle-fill::before{content:\"\\f29c\"}.bi-cloud-drizzle::before{content:\"\\f29d\"}.bi-cloud-fill::before{content:\"\\f29e\"}.bi-cloud-fog-fill::before{content:\"\\f29f\"}.bi-cloud-fog::before{content:\"\\f2a0\"}.bi-cloud-fog2-fill::before{content:\"\\f2a1\"}.bi-cloud-fog2::before{content:\"\\f2a2\"}.bi-cloud-hail-fill::before{content:\"\\f2a3\"}.bi-cloud-hail::before{content:\"\\f2a4\"}.bi-cloud-haze-1::before{content:\"\\f2a5\"}.bi-cloud-haze-fill::before{content:\"\\f2a6\"}.bi-cloud-haze::before{content:\"\\f2a7\"}.bi-cloud-haze2-fill::before{content:\"\\f2a8\"}.bi-cloud-lightning-fill::before{content:\"\\f2a9\"}.bi-cloud-lightning-rain-fill::before{content:\"\\f2aa\"}.bi-cloud-lightning-rain::before{content:\"\\f2ab\"}.bi-cloud-lightning::before{content:\"\\f2ac\"}.bi-cloud-minus-fill::before{content:\"\\f2ad\"}.bi-cloud-minus::before{content:\"\\f2ae\"}.bi-cloud-moon-fill::before{content:\"\\f2af\"}.bi-cloud-moon::before{content:\"\\f2b0\"}.bi-cloud-plus-fill::before{content:\"\\f2b1\"}.bi-cloud-plus::before{content:\"\\f2b2\"}.bi-cloud-rain-fill::before{content:\"\\f2b3\"}.bi-cloud-rain-heavy-fill::before{content:\"\\f2b4\"}.bi-cloud-rain-heavy::before{content:\"\\f2b5\"}.bi-cloud-rain::before{content:\"\\f2b6\"}.bi-cloud-slash-fill::before{content:\"\\f2b7\"}.bi-cloud-slash::before{content:\"\\f2b8\"}.bi-cloud-sleet-fill::before{content:\"\\f2b9\"}.bi-cloud-sleet::before{content:\"\\f2ba\"}.bi-cloud-snow-fill::before{content:\"\\f2bb\"}.bi-cloud-snow::before{content:\"\\f2bc\"}.bi-cloud-sun-fill::before{content:\"\\f2bd\"}.bi-cloud-sun::before{content:\"\\f2be\"}.bi-cloud-upload-fill::before{content:\"\\f2bf\"}.bi-cloud-upload::before{content:\"\\f2c0\"}.bi-cloud::before{content:\"\\f2c1\"}.bi-clouds-fill::before{content:\"\\f2c2\"}.bi-clouds::before{content:\"\\f2c3\"}.bi-cloudy-fill::before{content:\"\\f2c4\"}.bi-cloudy::before{content:\"\\f2c5\"}.bi-code-slash::before{content:\"\\f2c6\"}.bi-code-square::before{content:\"\\f2c7\"}.bi-code::before{content:\"\\f2c8\"}.bi-collection-fill::before{content:\"\\f2c9\"}.bi-collection-play-fill::before{content:\"\\f2ca\"}.bi-collection-play::before{content:\"\\f2cb\"}.bi-collection::before{content:\"\\f2cc\"}.bi-columns-gap::before{content:\"\\f2cd\"}.bi-columns::before{content:\"\\f2ce\"}.bi-command::before{content:\"\\f2cf\"}.bi-compass-fill::before{content:\"\\f2d0\"}.bi-compass::before{content:\"\\f2d1\"}.bi-cone-striped::before{content:\"\\f2d2\"}.bi-cone::before{content:\"\\f2d3\"}.bi-controller::before{content:\"\\f2d4\"}.bi-cpu-fill::before{content:\"\\f2d5\"}.bi-cpu::before{content:\"\\f2d6\"}.bi-credit-card-2-back-fill::before{content:\"\\f2d7\"}.bi-credit-card-2-back::before{content:\"\\f2d8\"}.bi-credit-card-2-front-fill::before{content:\"\\f2d9\"}.bi-credit-card-2-front::before{content:\"\\f2da\"}.bi-credit-card-fill::before{content:\"\\f2db\"}.bi-credit-card::before{content:\"\\f2dc\"}.bi-crop::before{content:\"\\f2dd\"}.bi-cup-fill::before{content:\"\\f2de\"}.bi-cup-straw::before{content:\"\\f2df\"}.bi-cup::before{content:\"\\f2e0\"}.bi-cursor-fill::before{content:\"\\f2e1\"}.bi-cursor-text::before{content:\"\\f2e2\"}.bi-cursor::before{content:\"\\f2e3\"}.bi-dash-circle-dotted::before{content:\"\\f2e4\"}.bi-dash-circle-fill::before{content:\"\\f2e5\"}.bi-dash-circle::before{content:\"\\f2e6\"}.bi-dash-square-dotted::before{content:\"\\f2e7\"}.bi-dash-square-fill::before{content:\"\\f2e8\"}.bi-dash-square::before{content:\"\\f2e9\"}.bi-dash::before{content:\"\\f2ea\"}.bi-diagram-2-fill::before{content:\"\\f2eb\"}.bi-diagram-2::before{content:\"\\f2ec\"}.bi-diagram-3-fill::before{content:\"\\f2ed\"}.bi-diagram-3::before{content:\"\\f2ee\"}.bi-diamond-fill::before{content:\"\\f2ef\"}.bi-diamond-half::before{content:\"\\f2f0\"}.bi-diamond::before{content:\"\\f2f1\"}.bi-dice-1-fill::before{content:\"\\f2f2\"}.bi-dice-1::before{content:\"\\f2f3\"}.bi-dice-2-fill::before{content:\"\\f2f4\"}.bi-dice-2::before{content:\"\\f2f5\"}.bi-dice-3-fill::before{content:\"\\f2f6\"}.bi-dice-3::before{content:\"\\f2f7\"}.bi-dice-4-fill::before{content:\"\\f2f8\"}.bi-dice-4::before{content:\"\\f2f9\"}.bi-dice-5-fill::before{content:\"\\f2fa\"}.bi-dice-5::before{content:\"\\f2fb\"}.bi-dice-6-fill::before{content:\"\\f2fc\"}.bi-dice-6::before{content:\"\\f2fd\"}.bi-disc-fill::before{content:\"\\f2fe\"}.bi-disc::before{content:\"\\f2ff\"}.bi-discord::before{content:\"\\f300\"}.bi-display-fill::before{content:\"\\f301\"}.bi-display::before{content:\"\\f302\"}.bi-distribute-horizontal::before{content:\"\\f303\"}.bi-distribute-vertical::before{content:\"\\f304\"}.bi-door-closed-fill::before{content:\"\\f305\"}.bi-door-closed::before{content:\"\\f306\"}.bi-door-open-fill::before{content:\"\\f307\"}.bi-door-open::before{content:\"\\f308\"}.bi-dot::before{content:\"\\f309\"}.bi-download::before{content:\"\\f30a\"}.bi-droplet-fill::before{content:\"\\f30b\"}.bi-droplet-half::before{content:\"\\f30c\"}.bi-droplet::before{content:\"\\f30d\"}.bi-earbuds::before{content:\"\\f30e\"}.bi-easel-fill::before{content:\"\\f30f\"}.bi-easel::before{content:\"\\f310\"}.bi-egg-fill::before{content:\"\\f311\"}.bi-egg-fried::before{content:\"\\f312\"}.bi-egg::before{content:\"\\f313\"}.bi-eject-fill::before{content:\"\\f314\"}.bi-eject::before{content:\"\\f315\"}.bi-emoji-angry-fill::before{content:\"\\f316\"}.bi-emoji-angry::before{content:\"\\f317\"}.bi-emoji-dizzy-fill::before{content:\"\\f318\"}.bi-emoji-dizzy::before{content:\"\\f319\"}.bi-emoji-expressionless-fill::before{content:\"\\f31a\"}.bi-emoji-expressionless::before{content:\"\\f31b\"}.bi-emoji-frown-fill::before{content:\"\\f31c\"}.bi-emoji-frown::before{content:\"\\f31d\"}.bi-emoji-heart-eyes-fill::before{content:\"\\f31e\"}.bi-emoji-heart-eyes::before{content:\"\\f31f\"}.bi-emoji-laughing-fill::before{content:\"\\f320\"}.bi-emoji-laughing::before{content:\"\\f321\"}.bi-emoji-neutral-fill::before{content:\"\\f322\"}.bi-emoji-neutral::before{content:\"\\f323\"}.bi-emoji-smile-fill::before{content:\"\\f324\"}.bi-emoji-smile-upside-down-fill::before{content:\"\\f325\"}.bi-emoji-smile-upside-down::before{content:\"\\f326\"}.bi-emoji-smile::before{content:\"\\f327\"}.bi-emoji-sunglasses-fill::before{content:\"\\f328\"}.bi-emoji-sunglasses::before{content:\"\\f329\"}.bi-emoji-wink-fill::before{content:\"\\f32a\"}.bi-emoji-wink::before{content:\"\\f32b\"}.bi-envelope-fill::before{content:\"\\f32c\"}.bi-envelope-open-fill::before{content:\"\\f32d\"}.bi-envelope-open::before{content:\"\\f32e\"}.bi-envelope::before{content:\"\\f32f\"}.bi-eraser-fill::before{content:\"\\f330\"}.bi-eraser::before{content:\"\\f331\"}.bi-exclamation-circle-fill::before{content:\"\\f332\"}.bi-exclamation-circle::before{content:\"\\f333\"}.bi-exclamation-diamond-fill::before{content:\"\\f334\"}.bi-exclamation-diamond::before{content:\"\\f335\"}.bi-exclamation-octagon-fill::before{content:\"\\f336\"}.bi-exclamation-octagon::before{content:\"\\f337\"}.bi-exclamation-square-fill::before{content:\"\\f338\"}.bi-exclamation-square::before{content:\"\\f339\"}.bi-exclamation-triangle-fill::before{content:\"\\f33a\"}.bi-exclamation-triangle::before{content:\"\\f33b\"}.bi-exclamation::before{content:\"\\f33c\"}.bi-exclude::before{content:\"\\f33d\"}.bi-eye-fill::before{content:\"\\f33e\"}.bi-eye-slash-fill::before{content:\"\\f33f\"}.bi-eye-slash::before{content:\"\\f340\"}.bi-eye::before{content:\"\\f341\"}.bi-eyedropper::before{content:\"\\f342\"}.bi-eyeglasses::before{content:\"\\f343\"}.bi-facebook::before{content:\"\\f344\"}.bi-file-arrow-down-fill::before{content:\"\\f345\"}.bi-file-arrow-down::before{content:\"\\f346\"}.bi-file-arrow-up-fill::before{content:\"\\f347\"}.bi-file-arrow-up::before{content:\"\\f348\"}.bi-file-bar-graph-fill::before{content:\"\\f349\"}.bi-file-bar-graph::before{content:\"\\f34a\"}.bi-file-binary-fill::before{content:\"\\f34b\"}.bi-file-binary::before{content:\"\\f34c\"}.bi-file-break-fill::before{content:\"\\f34d\"}.bi-file-break::before{content:\"\\f34e\"}.bi-file-check-fill::before{content:\"\\f34f\"}.bi-file-check::before{content:\"\\f350\"}.bi-file-code-fill::before{content:\"\\f351\"}.bi-file-code::before{content:\"\\f352\"}.bi-file-diff-fill::before{content:\"\\f353\"}.bi-file-diff::before{content:\"\\f354\"}.bi-file-earmark-arrow-down-fill::before{content:\"\\f355\"}.bi-file-earmark-arrow-down::before{content:\"\\f356\"}.bi-file-earmark-arrow-up-fill::before{content:\"\\f357\"}.bi-file-earmark-arrow-up::before{content:\"\\f358\"}.bi-file-earmark-bar-graph-fill::before{content:\"\\f359\"}.bi-file-earmark-bar-graph::before{content:\"\\f35a\"}.bi-file-earmark-binary-fill::before{content:\"\\f35b\"}.bi-file-earmark-binary::before{content:\"\\f35c\"}.bi-file-earmark-break-fill::before{content:\"\\f35d\"}.bi-file-earmark-break::before{content:\"\\f35e\"}.bi-file-earmark-check-fill::before{content:\"\\f35f\"}.bi-file-earmark-check::before{content:\"\\f360\"}.bi-file-earmark-code-fill::before{content:\"\\f361\"}.bi-file-earmark-code::before{content:\"\\f362\"}.bi-file-earmark-diff-fill::before{content:\"\\f363\"}.bi-file-earmark-diff::before{content:\"\\f364\"}.bi-file-earmark-easel-fill::before{content:\"\\f365\"}.bi-file-earmark-easel::before{content:\"\\f366\"}.bi-file-earmark-excel-fill::before{content:\"\\f367\"}.bi-file-earmark-excel::before{content:\"\\f368\"}.bi-file-earmark-fill::before{content:\"\\f369\"}.bi-file-earmark-font-fill::before{content:\"\\f36a\"}.bi-file-earmark-font::before{content:\"\\f36b\"}.bi-file-earmark-image-fill::before{content:\"\\f36c\"}.bi-file-earmark-image::before{content:\"\\f36d\"}.bi-file-earmark-lock-fill::before{content:\"\\f36e\"}.bi-file-earmark-lock::before{content:\"\\f36f\"}.bi-file-earmark-lock2-fill::before{content:\"\\f370\"}.bi-file-earmark-lock2::before{content:\"\\f371\"}.bi-file-earmark-medical-fill::before{content:\"\\f372\"}.bi-file-earmark-medical::before{content:\"\\f373\"}.bi-file-earmark-minus-fill::before{content:\"\\f374\"}.bi-file-earmark-minus::before{content:\"\\f375\"}.bi-file-earmark-music-fill::before{content:\"\\f376\"}.bi-file-earmark-music::before{content:\"\\f377\"}.bi-file-earmark-person-fill::before{content:\"\\f378\"}.bi-file-earmark-person::before{content:\"\\f379\"}.bi-file-earmark-play-fill::before{content:\"\\f37a\"}.bi-file-earmark-play::before{content:\"\\f37b\"}.bi-file-earmark-plus-fill::before{content:\"\\f37c\"}.bi-file-earmark-plus::before{content:\"\\f37d\"}.bi-file-earmark-post-fill::before{content:\"\\f37e\"}.bi-file-earmark-post::before{content:\"\\f37f\"}.bi-file-earmark-ppt-fill::before{content:\"\\f380\"}.bi-file-earmark-ppt::before{content:\"\\f381\"}.bi-file-earmark-richtext-fill::before{content:\"\\f382\"}.bi-file-earmark-richtext::before{content:\"\\f383\"}.bi-file-earmark-ruled-fill::before{content:\"\\f384\"}.bi-file-earmark-ruled::before{content:\"\\f385\"}.bi-file-earmark-slides-fill::before{content:\"\\f386\"}.bi-file-earmark-slides::before{content:\"\\f387\"}.bi-file-earmark-spreadsheet-fill::before{content:\"\\f388\"}.bi-file-earmark-spreadsheet::before{content:\"\\f389\"}.bi-file-earmark-text-fill::before{content:\"\\f38a\"}.bi-file-earmark-text::before{content:\"\\f38b\"}.bi-file-earmark-word-fill::before{content:\"\\f38c\"}.bi-file-earmark-word::before{content:\"\\f38d\"}.bi-file-earmark-x-fill::before{content:\"\\f38e\"}.bi-file-earmark-x::before{content:\"\\f38f\"}.bi-file-earmark-zip-fill::before{content:\"\\f390\"}.bi-file-earmark-zip::before{content:\"\\f391\"}.bi-file-earmark::before{content:\"\\f392\"}.bi-file-easel-fill::before{content:\"\\f393\"}.bi-file-easel::before{content:\"\\f394\"}.bi-file-excel-fill::before{content:\"\\f395\"}.bi-file-excel::before{content:\"\\f396\"}.bi-file-fill::before{content:\"\\f397\"}.bi-file-font-fill::before{content:\"\\f398\"}.bi-file-font::before{content:\"\\f399\"}.bi-file-image-fill::before{content:\"\\f39a\"}.bi-file-image::before{content:\"\\f39b\"}.bi-file-lock-fill::before{content:\"\\f39c\"}.bi-file-lock::before{content:\"\\f39d\"}.bi-file-lock2-fill::before{content:\"\\f39e\"}.bi-file-lock2::before{content:\"\\f39f\"}.bi-file-medical-fill::before{content:\"\\f3a0\"}.bi-file-medical::before{content:\"\\f3a1\"}.bi-file-minus-fill::before{content:\"\\f3a2\"}.bi-file-minus::before{content:\"\\f3a3\"}.bi-file-music-fill::before{content:\"\\f3a4\"}.bi-file-music::before{content:\"\\f3a5\"}.bi-file-person-fill::before{content:\"\\f3a6\"}.bi-file-person::before{content:\"\\f3a7\"}.bi-file-play-fill::before{content:\"\\f3a8\"}.bi-file-play::before{content:\"\\f3a9\"}.bi-file-plus-fill::before{content:\"\\f3aa\"}.bi-file-plus::before{content:\"\\f3ab\"}.bi-file-post-fill::before{content:\"\\f3ac\"}.bi-file-post::before{content:\"\\f3ad\"}.bi-file-ppt-fill::before{content:\"\\f3ae\"}.bi-file-ppt::before{content:\"\\f3af\"}.bi-file-richtext-fill::before{content:\"\\f3b0\"}.bi-file-richtext::before{content:\"\\f3b1\"}.bi-file-ruled-fill::before{content:\"\\f3b2\"}.bi-file-ruled::before{content:\"\\f3b3\"}.bi-file-slides-fill::before{content:\"\\f3b4\"}.bi-file-slides::before{content:\"\\f3b5\"}.bi-file-spreadsheet-fill::before{content:\"\\f3b6\"}.bi-file-spreadsheet::before{content:\"\\f3b7\"}.bi-file-text-fill::before{content:\"\\f3b8\"}.bi-file-text::before{content:\"\\f3b9\"}.bi-file-word-fill::before{content:\"\\f3ba\"}.bi-file-word::before{content:\"\\f3bb\"}.bi-file-x-fill::before{content:\"\\f3bc\"}.bi-file-x::before{content:\"\\f3bd\"}.bi-file-zip-fill::before{content:\"\\f3be\"}.bi-file-zip::before{content:\"\\f3bf\"}.bi-file::before{content:\"\\f3c0\"}.bi-files-alt::before{content:\"\\f3c1\"}.bi-files::before{content:\"\\f3c2\"}.bi-film::before{content:\"\\f3c3\"}.bi-filter-circle-fill::before{content:\"\\f3c4\"}.bi-filter-circle::before{content:\"\\f3c5\"}.bi-filter-left::before{content:\"\\f3c6\"}.bi-filter-right::before{content:\"\\f3c7\"}.bi-filter-square-fill::before{content:\"\\f3c8\"}.bi-filter-square::before{content:\"\\f3c9\"}.bi-filter::before{content:\"\\f3ca\"}.bi-flag-fill::before{content:\"\\f3cb\"}.bi-flag::before{content:\"\\f3cc\"}.bi-flower1::before{content:\"\\f3cd\"}.bi-flower2::before{content:\"\\f3ce\"}.bi-flower3::before{content:\"\\f3cf\"}.bi-folder-check::before{content:\"\\f3d0\"}.bi-folder-fill::before{content:\"\\f3d1\"}.bi-folder-minus::before{content:\"\\f3d2\"}.bi-folder-plus::before{content:\"\\f3d3\"}.bi-folder-symlink-fill::before{content:\"\\f3d4\"}.bi-folder-symlink::before{content:\"\\f3d5\"}.bi-folder-x::before{content:\"\\f3d6\"}.bi-folder::before{content:\"\\f3d7\"}.bi-folder2-open::before{content:\"\\f3d8\"}.bi-folder2::before{content:\"\\f3d9\"}.bi-fonts::before{content:\"\\f3da\"}.bi-forward-fill::before{content:\"\\f3db\"}.bi-forward::before{content:\"\\f3dc\"}.bi-front::before{content:\"\\f3dd\"}.bi-fullscreen-exit::before{content:\"\\f3de\"}.bi-fullscreen::before{content:\"\\f3df\"}.bi-funnel-fill::before{content:\"\\f3e0\"}.bi-funnel::before{content:\"\\f3e1\"}.bi-gear-fill::before{content:\"\\f3e2\"}.bi-gear-wide-connected::before{content:\"\\f3e3\"}.bi-gear-wide::before{content:\"\\f3e4\"}.bi-gear::before{content:\"\\f3e5\"}.bi-gem::before{content:\"\\f3e6\"}.bi-geo-alt-fill::before{content:\"\\f3e7\"}.bi-geo-alt::before{content:\"\\f3e8\"}.bi-geo-fill::before{content:\"\\f3e9\"}.bi-geo::before{content:\"\\f3ea\"}.bi-gift-fill::before{content:\"\\f3eb\"}.bi-gift::before{content:\"\\f3ec\"}.bi-github::before{content:\"\\f3ed\"}.bi-globe::before{content:\"\\f3ee\"}.bi-globe2::before{content:\"\\f3ef\"}.bi-google::before{content:\"\\f3f0\"}.bi-graph-down::before{content:\"\\f3f1\"}.bi-graph-up::before{content:\"\\f3f2\"}.bi-grid-1x2-fill::before{content:\"\\f3f3\"}.bi-grid-1x2::before{content:\"\\f3f4\"}.bi-grid-3x2-gap-fill::before{content:\"\\f3f5\"}.bi-grid-3x2-gap::before{content:\"\\f3f6\"}.bi-grid-3x2::before{content:\"\\f3f7\"}.bi-grid-3x3-gap-fill::before{content:\"\\f3f8\"}.bi-grid-3x3-gap::before{content:\"\\f3f9\"}.bi-grid-3x3::before{content:\"\\f3fa\"}.bi-grid-fill::before{content:\"\\f3fb\"}.bi-grid::before{content:\"\\f3fc\"}.bi-grip-horizontal::before{content:\"\\f3fd\"}.bi-grip-vertical::before{content:\"\\f3fe\"}.bi-hammer::before{content:\"\\f3ff\"}.bi-hand-index-fill::before{content:\"\\f400\"}.bi-hand-index-thumb-fill::before{content:\"\\f401\"}.bi-hand-index-thumb::before{content:\"\\f402\"}.bi-hand-index::before{content:\"\\f403\"}.bi-hand-thumbs-down-fill::before{content:\"\\f404\"}.bi-hand-thumbs-down::before{content:\"\\f405\"}.bi-hand-thumbs-up-fill::before{content:\"\\f406\"}.bi-hand-thumbs-up::before{content:\"\\f407\"}.bi-handbag-fill::before{content:\"\\f408\"}.bi-handbag::before{content:\"\\f409\"}.bi-hash::before{content:\"\\f40a\"}.bi-hdd-fill::before{content:\"\\f40b\"}.bi-hdd-network-fill::before{content:\"\\f40c\"}.bi-hdd-network::before{content:\"\\f40d\"}.bi-hdd-rack-fill::before{content:\"\\f40e\"}.bi-hdd-rack::before{content:\"\\f40f\"}.bi-hdd-stack-fill::before{content:\"\\f410\"}.bi-hdd-stack::before{content:\"\\f411\"}.bi-hdd::before{content:\"\\f412\"}.bi-headphones::before{content:\"\\f413\"}.bi-headset::before{content:\"\\f414\"}.bi-heart-fill::before{content:\"\\f415\"}.bi-heart-half::before{content:\"\\f416\"}.bi-heart::before{content:\"\\f417\"}.bi-heptagon-fill::before{content:\"\\f418\"}.bi-heptagon-half::before{content:\"\\f419\"}.bi-heptagon::before{content:\"\\f41a\"}.bi-hexagon-fill::before{content:\"\\f41b\"}.bi-hexagon-half::before{content:\"\\f41c\"}.bi-hexagon::before{content:\"\\f41d\"}.bi-hourglass-bottom::before{content:\"\\f41e\"}.bi-hourglass-split::before{content:\"\\f41f\"}.bi-hourglass-top::before{content:\"\\f420\"}.bi-hourglass::before{content:\"\\f421\"}.bi-house-door-fill::before{content:\"\\f422\"}.bi-house-door::before{content:\"\\f423\"}.bi-house-fill::before{content:\"\\f424\"}.bi-house::before{content:\"\\f425\"}.bi-hr::before{content:\"\\f426\"}.bi-hurricane::before{content:\"\\f427\"}.bi-image-alt::before{content:\"\\f428\"}.bi-image-fill::before{content:\"\\f429\"}.bi-image::before{content:\"\\f42a\"}.bi-images::before{content:\"\\f42b\"}.bi-inbox-fill::before{content:\"\\f42c\"}.bi-inbox::before{content:\"\\f42d\"}.bi-inboxes-fill::before{content:\"\\f42e\"}.bi-inboxes::before{content:\"\\f42f\"}.bi-info-circle-fill::before{content:\"\\f430\"}.bi-info-circle::before{content:\"\\f431\"}.bi-info-square-fill::before{content:\"\\f432\"}.bi-info-square::before{content:\"\\f433\"}.bi-info::before{content:\"\\f434\"}.bi-input-cursor-text::before{content:\"\\f435\"}.bi-input-cursor::before{content:\"\\f436\"}.bi-instagram::before{content:\"\\f437\"}.bi-intersect::before{content:\"\\f438\"}.bi-journal-album::before{content:\"\\f439\"}.bi-journal-arrow-down::before{content:\"\\f43a\"}.bi-journal-arrow-up::before{content:\"\\f43b\"}.bi-journal-bookmark-fill::before{content:\"\\f43c\"}.bi-journal-bookmark::before{content:\"\\f43d\"}.bi-journal-check::before{content:\"\\f43e\"}.bi-journal-code::before{content:\"\\f43f\"}.bi-journal-medical::before{content:\"\\f440\"}.bi-journal-minus::before{content:\"\\f441\"}.bi-journal-plus::before{content:\"\\f442\"}.bi-journal-richtext::before{content:\"\\f443\"}.bi-journal-text::before{content:\"\\f444\"}.bi-journal-x::before{content:\"\\f445\"}.bi-journal::before{content:\"\\f446\"}.bi-journals::before{content:\"\\f447\"}.bi-joystick::before{content:\"\\f448\"}.bi-justify-left::before{content:\"\\f449\"}.bi-justify-right::before{content:\"\\f44a\"}.bi-justify::before{content:\"\\f44b\"}.bi-kanban-fill::before{content:\"\\f44c\"}.bi-kanban::before{content:\"\\f44d\"}.bi-key-fill::before{content:\"\\f44e\"}.bi-key::before{content:\"\\f44f\"}.bi-keyboard-fill::before{content:\"\\f450\"}.bi-keyboard::before{content:\"\\f451\"}.bi-ladder::before{content:\"\\f452\"}.bi-lamp-fill::before{content:\"\\f453\"}.bi-lamp::before{content:\"\\f454\"}.bi-laptop-fill::before{content:\"\\f455\"}.bi-laptop::before{content:\"\\f456\"}.bi-layer-backward::before{content:\"\\f457\"}.bi-layer-forward::before{content:\"\\f458\"}.bi-layers-fill::before{content:\"\\f459\"}.bi-layers-half::before{content:\"\\f45a\"}.bi-layers::before{content:\"\\f45b\"}.bi-layout-sidebar-inset-reverse::before{content:\"\\f45c\"}.bi-layout-sidebar-inset::before{content:\"\\f45d\"}.bi-layout-sidebar-reverse::before{content:\"\\f45e\"}.bi-layout-sidebar::before{content:\"\\f45f\"}.bi-layout-split::before{content:\"\\f460\"}.bi-layout-text-sidebar-reverse::before{content:\"\\f461\"}.bi-layout-text-sidebar::before{content:\"\\f462\"}.bi-layout-text-window-reverse::before{content:\"\\f463\"}.bi-layout-text-window::before{content:\"\\f464\"}.bi-layout-three-columns::before{content:\"\\f465\"}.bi-layout-wtf::before{content:\"\\f466\"}.bi-life-preserver::before{content:\"\\f467\"}.bi-lightbulb-fill::before{content:\"\\f468\"}.bi-lightbulb-off-fill::before{content:\"\\f469\"}.bi-lightbulb-off::before{content:\"\\f46a\"}.bi-lightbulb::before{content:\"\\f46b\"}.bi-lightning-charge-fill::before{content:\"\\f46c\"}.bi-lightning-charge::before{content:\"\\f46d\"}.bi-lightning-fill::before{content:\"\\f46e\"}.bi-lightning::before{content:\"\\f46f\"}.bi-link-45deg::before{content:\"\\f470\"}.bi-link::before{content:\"\\f471\"}.bi-linkedin::before{content:\"\\f472\"}.bi-list-check::before{content:\"\\f473\"}.bi-list-nested::before{content:\"\\f474\"}.bi-list-ol::before{content:\"\\f475\"}.bi-list-stars::before{content:\"\\f476\"}.bi-list-task::before{content:\"\\f477\"}.bi-list-ul::before{content:\"\\f478\"}.bi-list::before{content:\"\\f479\"}.bi-lock-fill::before{content:\"\\f47a\"}.bi-lock::before{content:\"\\f47b\"}.bi-mailbox::before{content:\"\\f47c\"}.bi-mailbox2::before{content:\"\\f47d\"}.bi-map-fill::before{content:\"\\f47e\"}.bi-map::before{content:\"\\f47f\"}.bi-markdown-fill::before{content:\"\\f480\"}.bi-markdown::before{content:\"\\f481\"}.bi-mask::before{content:\"\\f482\"}.bi-megaphone-fill::before{content:\"\\f483\"}.bi-megaphone::before{content:\"\\f484\"}.bi-menu-app-fill::before{content:\"\\f485\"}.bi-menu-app::before{content:\"\\f486\"}.bi-menu-button-fill::before{content:\"\\f487\"}.bi-menu-button-wide-fill::before{content:\"\\f488\"}.bi-menu-button-wide::before{content:\"\\f489\"}.bi-menu-button::before{content:\"\\f48a\"}.bi-menu-down::before{content:\"\\f48b\"}.bi-menu-up::before{content:\"\\f48c\"}.bi-mic-fill::before{content:\"\\f48d\"}.bi-mic-mute-fill::before{content:\"\\f48e\"}.bi-mic-mute::before{content:\"\\f48f\"}.bi-mic::before{content:\"\\f490\"}.bi-minecart-loaded::before{content:\"\\f491\"}.bi-minecart::before{content:\"\\f492\"}.bi-moisture::before{content:\"\\f493\"}.bi-moon-fill::before{content:\"\\f494\"}.bi-moon-stars-fill::before{content:\"\\f495\"}.bi-moon-stars::before{content:\"\\f496\"}.bi-moon::before{content:\"\\f497\"}.bi-mouse-fill::before{content:\"\\f498\"}.bi-mouse::before{content:\"\\f499\"}.bi-mouse2-fill::before{content:\"\\f49a\"}.bi-mouse2::before{content:\"\\f49b\"}.bi-mouse3-fill::before{content:\"\\f49c\"}.bi-mouse3::before{content:\"\\f49d\"}.bi-music-note-beamed::before{content:\"\\f49e\"}.bi-music-note-list::before{content:\"\\f49f\"}.bi-music-note::before{content:\"\\f4a0\"}.bi-music-player-fill::before{content:\"\\f4a1\"}.bi-music-player::before{content:\"\\f4a2\"}.bi-newspaper::before{content:\"\\f4a3\"}.bi-node-minus-fill::before{content:\"\\f4a4\"}.bi-node-minus::before{content:\"\\f4a5\"}.bi-node-plus-fill::before{content:\"\\f4a6\"}.bi-node-plus::before{content:\"\\f4a7\"}.bi-nut-fill::before{content:\"\\f4a8\"}.bi-nut::before{content:\"\\f4a9\"}.bi-octagon-fill::before{content:\"\\f4aa\"}.bi-octagon-half::before{content:\"\\f4ab\"}.bi-octagon::before{content:\"\\f4ac\"}.bi-option::before{content:\"\\f4ad\"}.bi-outlet::before{content:\"\\f4ae\"}.bi-paint-bucket::before{content:\"\\f4af\"}.bi-palette-fill::before{content:\"\\f4b0\"}.bi-palette::before{content:\"\\f4b1\"}.bi-palette2::before{content:\"\\f4b2\"}.bi-paperclip::before{content:\"\\f4b3\"}.bi-paragraph::before{content:\"\\f4b4\"}.bi-patch-check-fill::before{content:\"\\f4b5\"}.bi-patch-check::before{content:\"\\f4b6\"}.bi-patch-exclamation-fill::before{content:\"\\f4b7\"}.bi-patch-exclamation::before{content:\"\\f4b8\"}.bi-patch-minus-fill::before{content:\"\\f4b9\"}.bi-patch-minus::before{content:\"\\f4ba\"}.bi-patch-plus-fill::before{content:\"\\f4bb\"}.bi-patch-plus::before{content:\"\\f4bc\"}.bi-patch-question-fill::before{content:\"\\f4bd\"}.bi-patch-question::before{content:\"\\f4be\"}.bi-pause-btn-fill::before{content:\"\\f4bf\"}.bi-pause-btn::before{content:\"\\f4c0\"}.bi-pause-circle-fill::before{content:\"\\f4c1\"}.bi-pause-circle::before{content:\"\\f4c2\"}.bi-pause-fill::before{content:\"\\f4c3\"}.bi-pause::before{content:\"\\f4c4\"}.bi-peace-fill::before{content:\"\\f4c5\"}.bi-peace::before{content:\"\\f4c6\"}.bi-pen-fill::before{content:\"\\f4c7\"}.bi-pen::before{content:\"\\f4c8\"}.bi-pencil-fill::before{content:\"\\f4c9\"}.bi-pencil-square::before{content:\"\\f4ca\"}.bi-pencil::before{content:\"\\f4cb\"}.bi-pentagon-fill::before{content:\"\\f4cc\"}.bi-pentagon-half::before{content:\"\\f4cd\"}.bi-pentagon::before{content:\"\\f4ce\"}.bi-people-fill::before{content:\"\\f4cf\"}.bi-people::before{content:\"\\f4d0\"}.bi-percent::before{content:\"\\f4d1\"}.bi-person-badge-fill::before{content:\"\\f4d2\"}.bi-person-badge::before{content:\"\\f4d3\"}.bi-person-bounding-box::before{content:\"\\f4d4\"}.bi-person-check-fill::before{content:\"\\f4d5\"}.bi-person-check::before{content:\"\\f4d6\"}.bi-person-circle::before{content:\"\\f4d7\"}.bi-person-dash-fill::before{content:\"\\f4d8\"}.bi-person-dash::before{content:\"\\f4d9\"}.bi-person-fill::before{content:\"\\f4da\"}.bi-person-lines-fill::before{content:\"\\f4db\"}.bi-person-plus-fill::before{content:\"\\f4dc\"}.bi-person-plus::before{content:\"\\f4dd\"}.bi-person-square::before{content:\"\\f4de\"}.bi-person-x-fill::before{content:\"\\f4df\"}.bi-person-x::before{content:\"\\f4e0\"}.bi-person::before{content:\"\\f4e1\"}.bi-phone-fill::before{content:\"\\f4e2\"}.bi-phone-landscape-fill::before{content:\"\\f4e3\"}.bi-phone-landscape::before{content:\"\\f4e4\"}.bi-phone-vibrate-fill::before{content:\"\\f4e5\"}.bi-phone-vibrate::before{content:\"\\f4e6\"}.bi-phone::before{content:\"\\f4e7\"}.bi-pie-chart-fill::before{content:\"\\f4e8\"}.bi-pie-chart::before{content:\"\\f4e9\"}.bi-pin-angle-fill::before{content:\"\\f4ea\"}.bi-pin-angle::before{content:\"\\f4eb\"}.bi-pin-fill::before{content:\"\\f4ec\"}.bi-pin::before{content:\"\\f4ed\"}.bi-pip-fill::before{content:\"\\f4ee\"}.bi-pip::before{content:\"\\f4ef\"}.bi-play-btn-fill::before{content:\"\\f4f0\"}.bi-play-btn::before{content:\"\\f4f1\"}.bi-play-circle-fill::before{content:\"\\f4f2\"}.bi-play-circle::before{content:\"\\f4f3\"}.bi-play-fill::before{content:\"\\f4f4\"}.bi-play::before{content:\"\\f4f5\"}.bi-plug-fill::before{content:\"\\f4f6\"}.bi-plug::before{content:\"\\f4f7\"}.bi-plus-circle-dotted::before{content:\"\\f4f8\"}.bi-plus-circle-fill::before{content:\"\\f4f9\"}.bi-plus-circle::before{content:\"\\f4fa\"}.bi-plus-square-dotted::before{content:\"\\f4fb\"}.bi-plus-square-fill::before{content:\"\\f4fc\"}.bi-plus-square::before{content:\"\\f4fd\"}.bi-plus::before{content:\"\\f4fe\"}.bi-power::before{content:\"\\f4ff\"}.bi-printer-fill::before{content:\"\\f500\"}.bi-printer::before{content:\"\\f501\"}.bi-puzzle-fill::before{content:\"\\f502\"}.bi-puzzle::before{content:\"\\f503\"}.bi-question-circle-fill::before{content:\"\\f504\"}.bi-question-circle::before{content:\"\\f505\"}.bi-question-diamond-fill::before{content:\"\\f506\"}.bi-question-diamond::before{content:\"\\f507\"}.bi-question-octagon-fill::before{content:\"\\f508\"}.bi-question-octagon::before{content:\"\\f509\"}.bi-question-square-fill::before{content:\"\\f50a\"}.bi-question-square::before{content:\"\\f50b\"}.bi-question::before{content:\"\\f50c\"}.bi-rainbow::before{content:\"\\f50d\"}.bi-receipt-cutoff::before{content:\"\\f50e\"}.bi-receipt::before{content:\"\\f50f\"}.bi-reception-0::before{content:\"\\f510\"}.bi-reception-1::before{content:\"\\f511\"}.bi-reception-2::before{content:\"\\f512\"}.bi-reception-3::before{content:\"\\f513\"}.bi-reception-4::before{content:\"\\f514\"}.bi-record-btn-fill::before{content:\"\\f515\"}.bi-record-btn::before{content:\"\\f516\"}.bi-record-circle-fill::before{content:\"\\f517\"}.bi-record-circle::before{content:\"\\f518\"}.bi-record-fill::before{content:\"\\f519\"}.bi-record::before{content:\"\\f51a\"}.bi-record2-fill::before{content:\"\\f51b\"}.bi-record2::before{content:\"\\f51c\"}.bi-reply-all-fill::before{content:\"\\f51d\"}.bi-reply-all::before{content:\"\\f51e\"}.bi-reply-fill::before{content:\"\\f51f\"}.bi-reply::before{content:\"\\f520\"}.bi-rss-fill::before{content:\"\\f521\"}.bi-rss::before{content:\"\\f522\"}.bi-rulers::before{content:\"\\f523\"}.bi-save-fill::before{content:\"\\f524\"}.bi-save::before{content:\"\\f525\"}.bi-save2-fill::before{content:\"\\f526\"}.bi-save2::before{content:\"\\f527\"}.bi-scissors::before{content:\"\\f528\"}.bi-screwdriver::before{content:\"\\f529\"}.bi-search::before{content:\"\\f52a\"}.bi-segmented-nav::before{content:\"\\f52b\"}.bi-server::before{content:\"\\f52c\"}.bi-share-fill::before{content:\"\\f52d\"}.bi-share::before{content:\"\\f52e\"}.bi-shield-check::before{content:\"\\f52f\"}.bi-shield-exclamation::before{content:\"\\f530\"}.bi-shield-fill-check::before{content:\"\\f531\"}.bi-shield-fill-exclamation::before{content:\"\\f532\"}.bi-shield-fill-minus::before{content:\"\\f533\"}.bi-shield-fill-plus::before{content:\"\\f534\"}.bi-shield-fill-x::before{content:\"\\f535\"}.bi-shield-fill::before{content:\"\\f536\"}.bi-shield-lock-fill::before{content:\"\\f537\"}.bi-shield-lock::before{content:\"\\f538\"}.bi-shield-minus::before{content:\"\\f539\"}.bi-shield-plus::before{content:\"\\f53a\"}.bi-shield-shaded::before{content:\"\\f53b\"}.bi-shield-slash-fill::before{content:\"\\f53c\"}.bi-shield-slash::before{content:\"\\f53d\"}.bi-shield-x::before{content:\"\\f53e\"}.bi-shield::before{content:\"\\f53f\"}.bi-shift-fill::before{content:\"\\f540\"}.bi-shift::before{content:\"\\f541\"}.bi-shop-window::before{content:\"\\f542\"}.bi-shop::before{content:\"\\f543\"}.bi-shuffle::before{content:\"\\f544\"}.bi-signpost-2-fill::before{content:\"\\f545\"}.bi-signpost-2::before{content:\"\\f546\"}.bi-signpost-fill::before{content:\"\\f547\"}.bi-signpost-split-fill::before{content:\"\\f548\"}.bi-signpost-split::before{content:\"\\f549\"}.bi-signpost::before{content:\"\\f54a\"}.bi-sim-fill::before{content:\"\\f54b\"}.bi-sim::before{content:\"\\f54c\"}.bi-skip-backward-btn-fill::before{content:\"\\f54d\"}.bi-skip-backward-btn::before{content:\"\\f54e\"}.bi-skip-backward-circle-fill::before{content:\"\\f54f\"}.bi-skip-backward-circle::before{content:\"\\f550\"}.bi-skip-backward-fill::before{content:\"\\f551\"}.bi-skip-backward::before{content:\"\\f552\"}.bi-skip-end-btn-fill::before{content:\"\\f553\"}.bi-skip-end-btn::before{content:\"\\f554\"}.bi-skip-end-circle-fill::before{content:\"\\f555\"}.bi-skip-end-circle::before{content:\"\\f556\"}.bi-skip-end-fill::before{content:\"\\f557\"}.bi-skip-end::before{content:\"\\f558\"}.bi-skip-forward-btn-fill::before{content:\"\\f559\"}.bi-skip-forward-btn::before{content:\"\\f55a\"}.bi-skip-forward-circle-fill::before{content:\"\\f55b\"}.bi-skip-forward-circle::before{content:\"\\f55c\"}.bi-skip-forward-fill::before{content:\"\\f55d\"}.bi-skip-forward::before{content:\"\\f55e\"}.bi-skip-start-btn-fill::before{content:\"\\f55f\"}.bi-skip-start-btn::before{content:\"\\f560\"}.bi-skip-start-circle-fill::before{content:\"\\f561\"}.bi-skip-start-circle::before{content:\"\\f562\"}.bi-skip-start-fill::before{content:\"\\f563\"}.bi-skip-start::before{content:\"\\f564\"}.bi-slack::before{content:\"\\f565\"}.bi-slash-circle-fill::before{content:\"\\f566\"}.bi-slash-circle::before{content:\"\\f567\"}.bi-slash-square-fill::before{content:\"\\f568\"}.bi-slash-square::before{content:\"\\f569\"}.bi-slash::before{content:\"\\f56a\"}.bi-sliders::before{content:\"\\f56b\"}.bi-smartwatch::before{content:\"\\f56c\"}.bi-snow::before{content:\"\\f56d\"}.bi-snow2::before{content:\"\\f56e\"}.bi-snow3::before{content:\"\\f56f\"}.bi-sort-alpha-down-alt::before{content:\"\\f570\"}.bi-sort-alpha-down::before{content:\"\\f571\"}.bi-sort-alpha-up-alt::before{content:\"\\f572\"}.bi-sort-alpha-up::before{content:\"\\f573\"}.bi-sort-down-alt::before{content:\"\\f574\"}.bi-sort-down::before{content:\"\\f575\"}.bi-sort-numeric-down-alt::before{content:\"\\f576\"}.bi-sort-numeric-down::before{content:\"\\f577\"}.bi-sort-numeric-up-alt::before{content:\"\\f578\"}.bi-sort-numeric-up::before{content:\"\\f579\"}.bi-sort-up-alt::before{content:\"\\f57a\"}.bi-sort-up::before{content:\"\\f57b\"}.bi-soundwave::before{content:\"\\f57c\"}.bi-speaker-fill::before{content:\"\\f57d\"}.bi-speaker::before{content:\"\\f57e\"}.bi-speedometer::before{content:\"\\f57f\"}.bi-speedometer2::before{content:\"\\f580\"}.bi-spellcheck::before{content:\"\\f581\"}.bi-square-fill::before{content:\"\\f582\"}.bi-square-half::before{content:\"\\f583\"}.bi-square::before{content:\"\\f584\"}.bi-stack::before{content:\"\\f585\"}.bi-star-fill::before{content:\"\\f586\"}.bi-star-half::before{content:\"\\f587\"}.bi-star::before{content:\"\\f588\"}.bi-stars::before{content:\"\\f589\"}.bi-stickies-fill::before{content:\"\\f58a\"}.bi-stickies::before{content:\"\\f58b\"}.bi-sticky-fill::before{content:\"\\f58c\"}.bi-sticky::before{content:\"\\f58d\"}.bi-stop-btn-fill::before{content:\"\\f58e\"}.bi-stop-btn::before{content:\"\\f58f\"}.bi-stop-circle-fill::before{content:\"\\f590\"}.bi-stop-circle::before{content:\"\\f591\"}.bi-stop-fill::before{content:\"\\f592\"}.bi-stop::before{content:\"\\f593\"}.bi-stoplights-fill::before{content:\"\\f594\"}.bi-stoplights::before{content:\"\\f595\"}.bi-stopwatch-fill::before{content:\"\\f596\"}.bi-stopwatch::before{content:\"\\f597\"}.bi-subtract::before{content:\"\\f598\"}.bi-suit-club-fill::before{content:\"\\f599\"}.bi-suit-club::before{content:\"\\f59a\"}.bi-suit-diamond-fill::before{content:\"\\f59b\"}.bi-suit-diamond::before{content:\"\\f59c\"}.bi-suit-heart-fill::before{content:\"\\f59d\"}.bi-suit-heart::before{content:\"\\f59e\"}.bi-suit-spade-fill::before{content:\"\\f59f\"}.bi-suit-spade::before{content:\"\\f5a0\"}.bi-sun-fill::before{content:\"\\f5a1\"}.bi-sun::before{content:\"\\f5a2\"}.bi-sunglasses::before{content:\"\\f5a3\"}.bi-sunrise-fill::before{content:\"\\f5a4\"}.bi-sunrise::before{content:\"\\f5a5\"}.bi-sunset-fill::before{content:\"\\f5a6\"}.bi-sunset::before{content:\"\\f5a7\"}.bi-symmetry-horizontal::before{content:\"\\f5a8\"}.bi-symmetry-vertical::before{content:\"\\f5a9\"}.bi-table::before{content:\"\\f5aa\"}.bi-tablet-fill::before{content:\"\\f5ab\"}.bi-tablet-landscape-fill::before{content:\"\\f5ac\"}.bi-tablet-landscape::before{content:\"\\f5ad\"}.bi-tablet::before{content:\"\\f5ae\"}.bi-tag-fill::before{content:\"\\f5af\"}.bi-tag::before{content:\"\\f5b0\"}.bi-tags-fill::before{content:\"\\f5b1\"}.bi-tags::before{content:\"\\f5b2\"}.bi-telegram::before{content:\"\\f5b3\"}.bi-telephone-fill::before{content:\"\\f5b4\"}.bi-telephone-forward-fill::before{content:\"\\f5b5\"}.bi-telephone-forward::before{content:\"\\f5b6\"}.bi-telephone-inbound-fill::before{content:\"\\f5b7\"}.bi-telephone-inbound::before{content:\"\\f5b8\"}.bi-telephone-minus-fill::before{content:\"\\f5b9\"}.bi-telephone-minus::before{content:\"\\f5ba\"}.bi-telephone-outbound-fill::before{content:\"\\f5bb\"}.bi-telephone-outbound::before{content:\"\\f5bc\"}.bi-telephone-plus-fill::before{content:\"\\f5bd\"}.bi-telephone-plus::before{content:\"\\f5be\"}.bi-telephone-x-fill::before{content:\"\\f5bf\"}.bi-telephone-x::before{content:\"\\f5c0\"}.bi-telephone::before{content:\"\\f5c1\"}.bi-terminal-fill::before{content:\"\\f5c2\"}.bi-terminal::before{content:\"\\f5c3\"}.bi-text-center::before{content:\"\\f5c4\"}.bi-text-indent-left::before{content:\"\\f5c5\"}.bi-text-indent-right::before{content:\"\\f5c6\"}.bi-text-left::before{content:\"\\f5c7\"}.bi-text-paragraph::before{content:\"\\f5c8\"}.bi-text-right::before{content:\"\\f5c9\"}.bi-textarea-resize::before{content:\"\\f5ca\"}.bi-textarea-t::before{content:\"\\f5cb\"}.bi-textarea::before{content:\"\\f5cc\"}.bi-thermometer-half::before{content:\"\\f5cd\"}.bi-thermometer-high::before{content:\"\\f5ce\"}.bi-thermometer-low::before{content:\"\\f5cf\"}.bi-thermometer-snow::before{content:\"\\f5d0\"}.bi-thermometer-sun::before{content:\"\\f5d1\"}.bi-thermometer::before{content:\"\\f5d2\"}.bi-three-dots-vertical::before{content:\"\\f5d3\"}.bi-three-dots::before{content:\"\\f5d4\"}.bi-toggle-off::before{content:\"\\f5d5\"}.bi-toggle-on::before{content:\"\\f5d6\"}.bi-toggle2-off::before{content:\"\\f5d7\"}.bi-toggle2-on::before{content:\"\\f5d8\"}.bi-toggles::before{content:\"\\f5d9\"}.bi-toggles2::before{content:\"\\f5da\"}.bi-tools::before{content:\"\\f5db\"}.bi-tornado::before{content:\"\\f5dc\"}.bi-trash-fill::before{content:\"\\f5dd\"}.bi-trash::before{content:\"\\f5de\"}.bi-trash2-fill::before{content:\"\\f5df\"}.bi-trash2::before{content:\"\\f5e0\"}.bi-tree-fill::before{content:\"\\f5e1\"}.bi-tree::before{content:\"\\f5e2\"}.bi-triangle-fill::before{content:\"\\f5e3\"}.bi-triangle-half::before{content:\"\\f5e4\"}.bi-triangle::before{content:\"\\f5e5\"}.bi-trophy-fill::before{content:\"\\f5e6\"}.bi-trophy::before{content:\"\\f5e7\"}.bi-tropical-storm::before{content:\"\\f5e8\"}.bi-truck-flatbed::before{content:\"\\f5e9\"}.bi-truck::before{content:\"\\f5ea\"}.bi-tsunami::before{content:\"\\f5eb\"}.bi-tv-fill::before{content:\"\\f5ec\"}.bi-tv::before{content:\"\\f5ed\"}.bi-twitch::before{content:\"\\f5ee\"}.bi-twitter::before{content:\"\\f5ef\"}.bi-type-bold::before{content:\"\\f5f0\"}.bi-type-h1::before{content:\"\\f5f1\"}.bi-type-h2::before{content:\"\\f5f2\"}.bi-type-h3::before{content:\"\\f5f3\"}.bi-type-italic::before{content:\"\\f5f4\"}.bi-type-strikethrough::before{content:\"\\f5f5\"}.bi-type-underline::before{content:\"\\f5f6\"}.bi-type::before{content:\"\\f5f7\"}.bi-ui-checks-grid::before{content:\"\\f5f8\"}.bi-ui-checks::before{content:\"\\f5f9\"}.bi-ui-radios-grid::before{content:\"\\f5fa\"}.bi-ui-radios::before{content:\"\\f5fb\"}.bi-umbrella-fill::before{content:\"\\f5fc\"}.bi-umbrella::before{content:\"\\f5fd\"}.bi-union::before{content:\"\\f5fe\"}.bi-unlock-fill::before{content:\"\\f5ff\"}.bi-unlock::before{content:\"\\f600\"}.bi-upc-scan::before{content:\"\\f601\"}.bi-upc::before{content:\"\\f602\"}.bi-upload::before{content:\"\\f603\"}.bi-vector-pen::before{content:\"\\f604\"}.bi-view-list::before{content:\"\\f605\"}.bi-view-stacked::before{content:\"\\f606\"}.bi-vinyl-fill::before{content:\"\\f607\"}.bi-vinyl::before{content:\"\\f608\"}.bi-voicemail::before{content:\"\\f609\"}.bi-volume-down-fill::before{content:\"\\f60a\"}.bi-volume-down::before{content:\"\\f60b\"}.bi-volume-mute-fill::before{content:\"\\f60c\"}.bi-volume-mute::before{content:\"\\f60d\"}.bi-volume-off-fill::before{content:\"\\f60e\"}.bi-volume-off::before{content:\"\\f60f\"}.bi-volume-up-fill::before{content:\"\\f610\"}.bi-volume-up::before{content:\"\\f611\"}.bi-vr::before{content:\"\\f612\"}.bi-wallet-fill::before{content:\"\\f613\"}.bi-wallet::before{content:\"\\f614\"}.bi-wallet2::before{content:\"\\f615\"}.bi-watch::before{content:\"\\f616\"}.bi-water::before{content:\"\\f617\"}.bi-whatsapp::before{content:\"\\f618\"}.bi-wifi-1::before{content:\"\\f619\"}.bi-wifi-2::before{content:\"\\f61a\"}.bi-wifi-off::before{content:\"\\f61b\"}.bi-wifi::before{content:\"\\f61c\"}.bi-wind::before{content:\"\\f61d\"}.bi-window-dock::before{content:\"\\f61e\"}.bi-window-sidebar::before{content:\"\\f61f\"}.bi-window::before{content:\"\\f620\"}.bi-wrench::before{content:\"\\f621\"}.bi-x-circle-fill::before{content:\"\\f622\"}.bi-x-circle::before{content:\"\\f623\"}.bi-x-diamond-fill::before{content:\"\\f624\"}.bi-x-diamond::before{content:\"\\f625\"}.bi-x-octagon-fill::before{content:\"\\f626\"}.bi-x-octagon::before{content:\"\\f627\"}.bi-x-square-fill::before{content:\"\\f628\"}.bi-x-square::before{content:\"\\f629\"}.bi-x::before{content:\"\\f62a\"}.bi-youtube::before{content:\"\\f62b\"}.bi-zoom-in::before{content:\"\\f62c\"}.bi-zoom-out::before{content:\"\\f62d\"}.bi-bank::before{content:\"\\f62e\"}.bi-bank2::before{content:\"\\f62f\"}.bi-bell-slash-fill::before{content:\"\\f630\"}.bi-bell-slash::before{content:\"\\f631\"}.bi-cash-coin::before{content:\"\\f632\"}.bi-check-lg::before{content:\"\\f633\"}.bi-coin::before{content:\"\\f634\"}.bi-currency-bitcoin::before{content:\"\\f635\"}.bi-currency-dollar::before{content:\"\\f636\"}.bi-currency-euro::before{content:\"\\f637\"}.bi-currency-exchange::before{content:\"\\f638\"}.bi-currency-pound::before{content:\"\\f639\"}.bi-currency-yen::before{content:\"\\f63a\"}.bi-dash-lg::before{content:\"\\f63b\"}.bi-exclamation-lg::before{content:\"\\f63c\"}.bi-file-earmark-pdf-fill::before{content:\"\\f63d\"}.bi-file-earmark-pdf::before{content:\"\\f63e\"}.bi-file-pdf-fill::before{content:\"\\f63f\"}.bi-file-pdf::before{content:\"\\f640\"}.bi-gender-ambiguous::before{content:\"\\f641\"}.bi-gender-female::before{content:\"\\f642\"}.bi-gender-male::before{content:\"\\f643\"}.bi-gender-trans::before{content:\"\\f644\"}.bi-headset-vr::before{content:\"\\f645\"}.bi-info-lg::before{content:\"\\f646\"}.bi-mastodon::before{content:\"\\f647\"}.bi-messenger::before{content:\"\\f648\"}.bi-piggy-bank-fill::before{content:\"\\f649\"}.bi-piggy-bank::before{content:\"\\f64a\"}.bi-pin-map-fill::before{content:\"\\f64b\"}.bi-pin-map::before{content:\"\\f64c\"}.bi-plus-lg::before{content:\"\\f64d\"}.bi-question-lg::before{content:\"\\f64e\"}.bi-recycle::before{content:\"\\f64f\"}.bi-reddit::before{content:\"\\f650\"}.bi-safe-fill::before{content:\"\\f651\"}.bi-safe2-fill::before{content:\"\\f652\"}.bi-safe2::before{content:\"\\f653\"}.bi-sd-card-fill::before{content:\"\\f654\"}.bi-sd-card::before{content:\"\\f655\"}.bi-skype::before{content:\"\\f656\"}.bi-slash-lg::before{content:\"\\f657\"}.bi-translate::before{content:\"\\f658\"}.bi-x-lg::before{content:\"\\f659\"}.bi-safe::before{content:\"\\f65a\"}.bi-apple::before{content:\"\\f65b\"}.bi-microsoft::before{content:\"\\f65d\"}.bi-windows::before{content:\"\\f65e\"}.bi-behance::before{content:\"\\f65c\"}.bi-dribbble::before{content:\"\\f65f\"}.bi-line::before{content:\"\\f660\"}.bi-medium::before{content:\"\\f661\"}.bi-paypal::before{content:\"\\f662\"}.bi-pinterest::before{content:\"\\f663\"}.bi-signal::before{content:\"\\f664\"}.bi-snapchat::before{content:\"\\f665\"}.bi-spotify::before{content:\"\\f666\"}.bi-stack-overflow::before{content:\"\\f667\"}.bi-strava::before{content:\"\\f668\"}.bi-wordpress::before{content:\"\\f669\"}.bi-vimeo::before{content:\"\\f66a\"}.bi-activity::before{content:\"\\f66b\"}.bi-easel2-fill::before{content:\"\\f66c\"}.bi-easel2::before{content:\"\\f66d\"}.bi-easel3-fill::before{content:\"\\f66e\"}.bi-easel3::before{content:\"\\f66f\"}.bi-fan::before{content:\"\\f670\"}.bi-fingerprint::before{content:\"\\f671\"}.bi-graph-down-arrow::before{content:\"\\f672\"}.bi-graph-up-arrow::before{content:\"\\f673\"}.bi-hypnotize::before{content:\"\\f674\"}.bi-magic::before{content:\"\\f675\"}.bi-person-rolodex::before{content:\"\\f676\"}.bi-person-video::before{content:\"\\f677\"}.bi-person-video2::before{content:\"\\f678\"}.bi-person-video3::before{content:\"\\f679\"}.bi-person-workspace::before{content:\"\\f67a\"}.bi-radioactive::before{content:\"\\f67b\"}.bi-webcam-fill::before{content:\"\\f67c\"}.bi-webcam::before{content:\"\\f67d\"}.bi-yin-yang::before{content:\"\\f67e\"}.bi-bandaid-fill::before{content:\"\\f680\"}.bi-bandaid::before{content:\"\\f681\"}.bi-bluetooth::before{content:\"\\f682\"}.bi-body-text::before{content:\"\\f683\"}.bi-boombox::before{content:\"\\f684\"}.bi-boxes::before{content:\"\\f685\"}.bi-dpad-fill::before{content:\"\\f686\"}.bi-dpad::before{content:\"\\f687\"}.bi-ear-fill::before{content:\"\\f688\"}.bi-ear::before{content:\"\\f689\"}.bi-envelope-check-1::before{content:\"\\f68a\"}.bi-envelope-check-fill::before{content:\"\\f68b\"}.bi-envelope-check::before{content:\"\\f68c\"}.bi-envelope-dash-1::before{content:\"\\f68d\"}.bi-envelope-dash-fill::before{content:\"\\f68e\"}.bi-envelope-dash::before{content:\"\\f68f\"}.bi-envelope-exclamation-1::before{content:\"\\f690\"}.bi-envelope-exclamation-fill::before{content:\"\\f691\"}.bi-envelope-exclamation::before{content:\"\\f692\"}.bi-envelope-plus-fill::before{content:\"\\f693\"}.bi-envelope-plus::before{content:\"\\f694\"}.bi-envelope-slash-1::before{content:\"\\f695\"}.bi-envelope-slash-fill::before{content:\"\\f696\"}.bi-envelope-slash::before{content:\"\\f697\"}.bi-envelope-x-1::before{content:\"\\f698\"}.bi-envelope-x-fill::before{content:\"\\f699\"}.bi-envelope-x::before{content:\"\\f69a\"}.bi-explicit-fill::before{content:\"\\f69b\"}.bi-explicit::before{content:\"\\f69c\"}.bi-git::before{content:\"\\f69d\"}.bi-infinity::before{content:\"\\f69e\"}.bi-list-columns-reverse::before{content:\"\\f69f\"}.bi-list-columns::before{content:\"\\f6a0\"}.bi-meta::before{content:\"\\f6a1\"}.bi-mortorboard-fill::before{content:\"\\f6a2\"}.bi-mortorboard::before{content:\"\\f6a3\"}.bi-nintendo-switch::before{content:\"\\f6a4\"}.bi-pc-display-horizontal::before{content:\"\\f6a5\"}.bi-pc-display::before{content:\"\\f6a6\"}.bi-pc-horizontal::before{content:\"\\f6a7\"}.bi-pc::before{content:\"\\f6a8\"}.bi-playstation::before{content:\"\\f6a9\"}.bi-plus-slash-minus::before{content:\"\\f6aa\"}.bi-projector-fill::before{content:\"\\f6ab\"}.bi-projector::before{content:\"\\f6ac\"}.bi-qr-code-scan::before{content:\"\\f6ad\"}.bi-qr-code::before{content:\"\\f6ae\"}.bi-quora::before{content:\"\\f6af\"}.bi-quote::before{content:\"\\f6b0\"}.bi-robot::before{content:\"\\f6b1\"}.bi-send-check-fill::before{content:\"\\f6b2\"}.bi-send-check::before{content:\"\\f6b3\"}.bi-send-dash-fill::before{content:\"\\f6b4\"}.bi-send-dash::before{content:\"\\f6b5\"}.bi-send-exclamation-1::before{content:\"\\f6b6\"}.bi-send-exclamation-fill::before{content:\"\\f6b7\"}.bi-send-exclamation::before{content:\"\\f6b8\"}.bi-send-fill::before{content:\"\\f6b9\"}.bi-send-plus-fill::before{content:\"\\f6ba\"}.bi-send-plus::before{content:\"\\f6bb\"}.bi-send-slash-fill::before{content:\"\\f6bc\"}.bi-send-slash::before{content:\"\\f6bd\"}.bi-send-x-fill::before{content:\"\\f6be\"}.bi-send-x::before{content:\"\\f6bf\"}.bi-send::before{content:\"\\f6c0\"}.bi-steam::before{content:\"\\f6c1\"}.bi-terminal-dash-1::before{content:\"\\f6c2\"}.bi-terminal-dash::before{content:\"\\f6c3\"}.bi-terminal-plus::before{content:\"\\f6c4\"}.bi-terminal-split::before{content:\"\\f6c5\"}.bi-ticket-detailed-fill::before{content:\"\\f6c6\"}.bi-ticket-detailed::before{content:\"\\f6c7\"}.bi-ticket-fill::before{content:\"\\f6c8\"}.bi-ticket-perforated-fill::before{content:\"\\f6c9\"}.bi-ticket-perforated::before{content:\"\\f6ca\"}.bi-ticket::before{content:\"\\f6cb\"}.bi-tiktok::before{content:\"\\f6cc\"}.bi-window-dash::before{content:\"\\f6cd\"}.bi-window-desktop::before{content:\"\\f6ce\"}.bi-window-fullscreen::before{content:\"\\f6cf\"}.bi-window-plus::before{content:\"\\f6d0\"}.bi-window-split::before{content:\"\\f6d1\"}.bi-window-stack::before{content:\"\\f6d2\"}.bi-window-x::before{content:\"\\f6d3\"}.bi-xbox::before{content:\"\\f6d4\"}.bi-ethernet::before{content:\"\\f6d5\"}.bi-hdmi-fill::before{content:\"\\f6d6\"}.bi-hdmi::before{content:\"\\f6d7\"}.bi-usb-c-fill::before{content:\"\\f6d8\"}.bi-usb-c::before{content:\"\\f6d9\"}.bi-usb-fill::before{content:\"\\f6da\"}.bi-usb-plug-fill::before{content:\"\\f6db\"}.bi-usb-plug::before{content:\"\\f6dc\"}.bi-usb-symbol::before{content:\"\\f6dd\"}.bi-usb::before{content:\"\\f6de\"}.bi-boombox-fill::before{content:\"\\f6df\"}.bi-displayport-1::before{content:\"\\f6e0\"}.bi-displayport::before{content:\"\\f6e1\"}.bi-gpu-card::before{content:\"\\f6e2\"}.bi-memory::before{content:\"\\f6e3\"}.bi-modem-fill::before{content:\"\\f6e4\"}.bi-modem::before{content:\"\\f6e5\"}.bi-motherboard-fill::before{content:\"\\f6e6\"}.bi-motherboard::before{content:\"\\f6e7\"}.bi-optical-audio-fill::before{content:\"\\f6e8\"}.bi-optical-audio::before{content:\"\\f6e9\"}.bi-pci-card::before{content:\"\\f6ea\"}.bi-router-fill::before{content:\"\\f6eb\"}.bi-router::before{content:\"\\f6ec\"}.bi-ssd-fill::before{content:\"\\f6ed\"}.bi-ssd::before{content:\"\\f6ee\"}.bi-thunderbolt-fill::before{content:\"\\f6ef\"}.bi-thunderbolt::before{content:\"\\f6f0\"}.bi-usb-drive-fill::before{content:\"\\f6f1\"}.bi-usb-drive::before{content:\"\\f6f2\"}.bi-usb-micro-fill::before{content:\"\\f6f3\"}.bi-usb-micro::before{content:\"\\f6f4\"}.bi-usb-mini-fill::before{content:\"\\f6f5\"}.bi-usb-mini::before{content:\"\\f6f6\"}.bi-cloud-haze2::before{content:\"\\f6f7\"}.bi-device-hdd-fill::before{content:\"\\f6f8\"}.bi-device-hdd::before{content:\"\\f6f9\"}.bi-device-ssd-fill::before{content:\"\\f6fa\"}.bi-device-ssd::before{content:\"\\f6fb\"}.bi-displayport-fill::before{content:\"\\f6fc\"}.bi-mortarboard-fill::before{content:\"\\f6fd\"}.bi-mortarboard::before{content:\"\\f6fe\"}.bi-terminal-x::before{content:\"\\f6ff\"}.bi-arrow-through-heart-fill::before{content:\"\\f700\"}.bi-arrow-through-heart::before{content:\"\\f701\"}.bi-badge-sd-fill::before{content:\"\\f702\"}.bi-badge-sd::before{content:\"\\f703\"}.bi-bag-heart-fill::before{content:\"\\f704\"}.bi-bag-heart::before{content:\"\\f705\"}.bi-balloon-fill::before{content:\"\\f706\"}.bi-balloon-heart-fill::before{content:\"\\f707\"}.bi-balloon-heart::before{content:\"\\f708\"}.bi-balloon::before{content:\"\\f709\"}.bi-box2-fill::before{content:\"\\f70a\"}.bi-box2-heart-fill::before{content:\"\\f70b\"}.bi-box2-heart::before{content:\"\\f70c\"}.bi-box2::before{content:\"\\f70d\"}.bi-braces-asterisk::before{content:\"\\f70e\"}.bi-calendar-heart-fill::before{content:\"\\f70f\"}.bi-calendar-heart::before{content:\"\\f710\"}.bi-calendar2-heart-fill::before{content:\"\\f711\"}.bi-calendar2-heart::before{content:\"\\f712\"}.bi-chat-heart-fill::before{content:\"\\f713\"}.bi-chat-heart::before{content:\"\\f714\"}.bi-chat-left-heart-fill::before{content:\"\\f715\"}.bi-chat-left-heart::before{content:\"\\f716\"}.bi-chat-right-heart-fill::before{content:\"\\f717\"}.bi-chat-right-heart::before{content:\"\\f718\"}.bi-chat-square-heart-fill::before{content:\"\\f719\"}.bi-chat-square-heart::before{content:\"\\f71a\"}.bi-clipboard-check-fill::before{content:\"\\f71b\"}.bi-clipboard-data-fill::before{content:\"\\f71c\"}.bi-clipboard-fill::before{content:\"\\f71d\"}.bi-clipboard-heart-fill::before{content:\"\\f71e\"}.bi-clipboard-heart::before{content:\"\\f71f\"}.bi-clipboard-minus-fill::before{content:\"\\f720\"}.bi-clipboard-plus-fill::before{content:\"\\f721\"}.bi-clipboard-pulse::before{content:\"\\f722\"}.bi-clipboard-x-fill::before{content:\"\\f723\"}.bi-clipboard2-check-fill::before{content:\"\\f724\"}.bi-clipboard2-check::before{content:\"\\f725\"}.bi-clipboard2-data-fill::before{content:\"\\f726\"}.bi-clipboard2-data::before{content:\"\\f727\"}.bi-clipboard2-fill::before{content:\"\\f728\"}.bi-clipboard2-heart-fill::before{content:\"\\f729\"}.bi-clipboard2-heart::before{content:\"\\f72a\"}.bi-clipboard2-minus-fill::before{content:\"\\f72b\"}.bi-clipboard2-minus::before{content:\"\\f72c\"}.bi-clipboard2-plus-fill::before{content:\"\\f72d\"}.bi-clipboard2-plus::before{content:\"\\f72e\"}.bi-clipboard2-pulse-fill::before{content:\"\\f72f\"}.bi-clipboard2-pulse::before{content:\"\\f730\"}.bi-clipboard2-x-fill::before{content:\"\\f731\"}.bi-clipboard2-x::before{content:\"\\f732\"}.bi-clipboard2::before{content:\"\\f733\"}.bi-emoji-kiss-fill::before{content:\"\\f734\"}.bi-emoji-kiss::before{content:\"\\f735\"}.bi-envelope-heart-fill::before{content:\"\\f736\"}.bi-envelope-heart::before{content:\"\\f737\"}.bi-envelope-open-heart-fill::before{content:\"\\f738\"}.bi-envelope-open-heart::before{content:\"\\f739\"}.bi-envelope-paper-fill::before{content:\"\\f73a\"}.bi-envelope-paper-heart-fill::before{content:\"\\f73b\"}.bi-envelope-paper-heart::before{content:\"\\f73c\"}.bi-envelope-paper::before{content:\"\\f73d\"}.bi-filetype-aac::before{content:\"\\f73e\"}.bi-filetype-ai::before{content:\"\\f73f\"}.bi-filetype-bmp::before{content:\"\\f740\"}.bi-filetype-cs::before{content:\"\\f741\"}.bi-filetype-css::before{content:\"\\f742\"}.bi-filetype-csv::before{content:\"\\f743\"}.bi-filetype-doc::before{content:\"\\f744\"}.bi-filetype-docx::before{content:\"\\f745\"}.bi-filetype-exe::before{content:\"\\f746\"}.bi-filetype-gif::before{content:\"\\f747\"}.bi-filetype-heic::before{content:\"\\f748\"}.bi-filetype-html::before{content:\"\\f749\"}.bi-filetype-java::before{content:\"\\f74a\"}.bi-filetype-jpg::before{content:\"\\f74b\"}.bi-filetype-js::before{content:\"\\f74c\"}.bi-filetype-jsx::before{content:\"\\f74d\"}.bi-filetype-key::before{content:\"\\f74e\"}.bi-filetype-m4p::before{content:\"\\f74f\"}.bi-filetype-md::before{content:\"\\f750\"}.bi-filetype-mdx::before{content:\"\\f751\"}.bi-filetype-mov::before{content:\"\\f752\"}.bi-filetype-mp3::before{content:\"\\f753\"}.bi-filetype-mp4::before{content:\"\\f754\"}.bi-filetype-otf::before{content:\"\\f755\"}.bi-filetype-pdf::before{content:\"\\f756\"}.bi-filetype-php::before{content:\"\\f757\"}.bi-filetype-png::before{content:\"\\f758\"}.bi-filetype-ppt-1::before{content:\"\\f759\"}.bi-filetype-ppt::before{content:\"\\f75a\"}.bi-filetype-psd::before{content:\"\\f75b\"}.bi-filetype-py::before{content:\"\\f75c\"}.bi-filetype-raw::before{content:\"\\f75d\"}.bi-filetype-rb::before{content:\"\\f75e\"}.bi-filetype-sass::before{content:\"\\f75f\"}.bi-filetype-scss::before{content:\"\\f760\"}.bi-filetype-sh::before{content:\"\\f761\"}.bi-filetype-svg::before{content:\"\\f762\"}.bi-filetype-tiff::before{content:\"\\f763\"}.bi-filetype-tsx::before{content:\"\\f764\"}.bi-filetype-ttf::before{content:\"\\f765\"}.bi-filetype-txt::before{content:\"\\f766\"}.bi-filetype-wav::before{content:\"\\f767\"}.bi-filetype-woff::before{content:\"\\f768\"}.bi-filetype-xls-1::before{content:\"\\f769\"}.bi-filetype-xls::before{content:\"\\f76a\"}.bi-filetype-xml::before{content:\"\\f76b\"}.bi-filetype-yml::before{content:\"\\f76c\"}.bi-heart-arrow::before{content:\"\\f76d\"}.bi-heart-pulse-fill::before{content:\"\\f76e\"}.bi-heart-pulse::before{content:\"\\f76f\"}.bi-heartbreak-fill::before{content:\"\\f770\"}.bi-heartbreak::before{content:\"\\f771\"}.bi-hearts::before{content:\"\\f772\"}.bi-hospital-fill::before{content:\"\\f773\"}.bi-hospital::before{content:\"\\f774\"}.bi-house-heart-fill::before{content:\"\\f775\"}.bi-house-heart::before{content:\"\\f776\"}.bi-incognito::before{content:\"\\f777\"}.bi-magnet-fill::before{content:\"\\f778\"}.bi-magnet::before{content:\"\\f779\"}.bi-person-heart::before{content:\"\\f77a\"}.bi-person-hearts::before{content:\"\\f77b\"}.bi-phone-flip::before{content:\"\\f77c\"}.bi-plugin::before{content:\"\\f77d\"}.bi-postage-fill::before{content:\"\\f77e\"}.bi-postage-heart-fill::before{content:\"\\f77f\"}.bi-postage-heart::before{content:\"\\f780\"}.bi-postage::before{content:\"\\f781\"}.bi-postcard-fill::before{content:\"\\f782\"}.bi-postcard-heart-fill::before{content:\"\\f783\"}.bi-postcard-heart::before{content:\"\\f784\"}.bi-postcard::before{content:\"\\f785\"}.bi-search-heart-fill::before{content:\"\\f786\"}.bi-search-heart::before{content:\"\\f787\"}.bi-sliders2-vertical::before{content:\"\\f788\"}.bi-sliders2::before{content:\"\\f789\"}.bi-trash3-fill::before{content:\"\\f78a\"}.bi-trash3::before{content:\"\\f78b\"}.bi-valentine::before{content:\"\\f78c\"}.bi-valentine2::before{content:\"\\f78d\"}.bi-wrench-adjustable-circle-fill::before{content:\"\\f78e\"}.bi-wrench-adjustable-circle::before{content:\"\\f78f\"}.bi-wrench-adjustable::before{content:\"\\f790\"}.bi-filetype-json::before{content:\"\\f791\"}.bi-filetype-pptx::before{content:\"\\f792\"}.bi-filetype-xlsx::before{content:\"\\f793\"}.bi-1-circle-1::before{content:\"\\f794\"}.bi-1-circle-fill-1::before{content:\"\\f795\"}.bi-1-circle-fill::before{content:\"\\f796\"}.bi-1-circle::before{content:\"\\f797\"}.bi-1-square-fill::before{content:\"\\f798\"}.bi-1-square::before{content:\"\\f799\"}.bi-2-circle-1::before{content:\"\\f79a\"}.bi-2-circle-fill-1::before{content:\"\\f79b\"}.bi-2-circle-fill::before{content:\"\\f79c\"}.bi-2-circle::before{content:\"\\f79d\"}.bi-2-square-fill::before{content:\"\\f79e\"}.bi-2-square::before{content:\"\\f79f\"}.bi-3-circle-1::before{content:\"\\f7a0\"}.bi-3-circle-fill-1::before{content:\"\\f7a1\"}.bi-3-circle-fill::before{content:\"\\f7a2\"}.bi-3-circle::before{content:\"\\f7a3\"}.bi-3-square-fill::before{content:\"\\f7a4\"}.bi-3-square::before{content:\"\\f7a5\"}.bi-4-circle-1::before{content:\"\\f7a6\"}.bi-4-circle-fill-1::before{content:\"\\f7a7\"}.bi-4-circle-fill::before{content:\"\\f7a8\"}.bi-4-circle::before{content:\"\\f7a9\"}.bi-4-square-fill::before{content:\"\\f7aa\"}.bi-4-square::before{content:\"\\f7ab\"}.bi-5-circle-1::before{content:\"\\f7ac\"}.bi-5-circle-fill-1::before{content:\"\\f7ad\"}.bi-5-circle-fill::before{content:\"\\f7ae\"}.bi-5-circle::before{content:\"\\f7af\"}.bi-5-square-fill::before{content:\"\\f7b0\"}.bi-5-square::before{content:\"\\f7b1\"}.bi-6-circle-1::before{content:\"\\f7b2\"}.bi-6-circle-fill-1::before{content:\"\\f7b3\"}.bi-6-circle-fill::before{content:\"\\f7b4\"}.bi-6-circle::before{content:\"\\f7b5\"}.bi-6-square-fill::before{content:\"\\f7b6\"}.bi-6-square::before{content:\"\\f7b7\"}.bi-7-circle-1::before{content:\"\\f7b8\"}.bi-7-circle-fill-1::before{content:\"\\f7b9\"}.bi-7-circle-fill::before{content:\"\\f7ba\"}.bi-7-circle::before{content:\"\\f7bb\"}.bi-7-square-fill::before{content:\"\\f7bc\"}.bi-7-square::before{content:\"\\f7bd\"}.bi-8-circle-1::before{content:\"\\f7be\"}.bi-8-circle-fill-1::before{content:\"\\f7bf\"}.bi-8-circle-fill::before{content:\"\\f7c0\"}.bi-8-circle::before{content:\"\\f7c1\"}.bi-8-square-fill::before{content:\"\\f7c2\"}.bi-8-square::before{content:\"\\f7c3\"}.bi-9-circle-1::before{content:\"\\f7c4\"}.bi-9-circle-fill-1::before{content:\"\\f7c5\"}.bi-9-circle-fill::before{content:\"\\f7c6\"}.bi-9-circle::before{content:\"\\f7c7\"}.bi-9-square-fill::before{content:\"\\f7c8\"}.bi-9-square::before{content:\"\\f7c9\"}.bi-airplane-engines-fill::before{content:\"\\f7ca\"}.bi-airplane-engines::before{content:\"\\f7cb\"}.bi-airplane-fill::before{content:\"\\f7cc\"}.bi-airplane::before{content:\"\\f7cd\"}.bi-alexa::before{content:\"\\f7ce\"}.bi-alipay::before{content:\"\\f7cf\"}.bi-android::before{content:\"\\f7d0\"}.bi-android2::before{content:\"\\f7d1\"}.bi-box-fill::before{content:\"\\f7d2\"}.bi-box-seam-fill::before{content:\"\\f7d3\"}.bi-browser-chrome::before{content:\"\\f7d4\"}.bi-browser-edge::before{content:\"\\f7d5\"}.bi-browser-firefox::before{content:\"\\f7d6\"}.bi-browser-safari::before{content:\"\\f7d7\"}.bi-c-circle-1::before{content:\"\\f7d8\"}.bi-c-circle-fill-1::before{content:\"\\f7d9\"}.bi-c-circle-fill::before{content:\"\\f7da\"}.bi-c-circle::before{content:\"\\f7db\"}.bi-c-square-fill::before{content:\"\\f7dc\"}.bi-c-square::before{content:\"\\f7dd\"}.bi-capsule-pill::before{content:\"\\f7de\"}.bi-capsule::before{content:\"\\f7df\"}.bi-car-front-fill::before{content:\"\\f7e0\"}.bi-car-front::before{content:\"\\f7e1\"}.bi-cassette-fill::before{content:\"\\f7e2\"}.bi-cassette::before{content:\"\\f7e3\"}.bi-cc-circle-1::before{content:\"\\f7e4\"}.bi-cc-circle-fill-1::before{content:\"\\f7e5\"}.bi-cc-circle-fill::before{content:\"\\f7e6\"}.bi-cc-circle::before{content:\"\\f7e7\"}.bi-cc-square-fill::before{content:\"\\f7e8\"}.bi-cc-square::before{content:\"\\f7e9\"}.bi-cup-hot-fill::before{content:\"\\f7ea\"}.bi-cup-hot::before{content:\"\\f7eb\"}.bi-currency-rupee::before{content:\"\\f7ec\"}.bi-dropbox::before{content:\"\\f7ed\"}.bi-escape::before{content:\"\\f7ee\"}.bi-fast-forward-btn-fill::before{content:\"\\f7ef\"}.bi-fast-forward-btn::before{content:\"\\f7f0\"}.bi-fast-forward-circle-fill::before{content:\"\\f7f1\"}.bi-fast-forward-circle::before{content:\"\\f7f2\"}.bi-fast-forward-fill::before{content:\"\\f7f3\"}.bi-fast-forward::before{content:\"\\f7f4\"}.bi-filetype-sql::before{content:\"\\f7f5\"}.bi-fire::before{content:\"\\f7f6\"}.bi-google-play::before{content:\"\\f7f7\"}.bi-h-circle-1::before{content:\"\\f7f8\"}.bi-h-circle-fill-1::before{content:\"\\f7f9\"}.bi-h-circle-fill::before{content:\"\\f7fa\"}.bi-h-circle::before{content:\"\\f7fb\"}.bi-h-square-fill::before{content:\"\\f7fc\"}.bi-h-square::before{content:\"\\f7fd\"}.bi-indent::before{content:\"\\f7fe\"}.bi-lungs-fill::before{content:\"\\f7ff\"}.bi-lungs::before{content:\"\\f800\"}.bi-microsoft-teams::before{content:\"\\f801\"}.bi-p-circle-1::before{content:\"\\f802\"}.bi-p-circle-fill-1::before{content:\"\\f803\"}.bi-p-circle-fill::before{content:\"\\f804\"}.bi-p-circle::before{content:\"\\f805\"}.bi-p-square-fill::before{content:\"\\f806\"}.bi-p-square::before{content:\"\\f807\"}.bi-pass-fill::before{content:\"\\f808\"}.bi-pass::before{content:\"\\f809\"}.bi-prescription::before{content:\"\\f80a\"}.bi-prescription2::before{content:\"\\f80b\"}.bi-r-circle-1::before{content:\"\\f80c\"}.bi-r-circle-fill-1::before{content:\"\\f80d\"}.bi-r-circle-fill::before{content:\"\\f80e\"}.bi-r-circle::before{content:\"\\f80f\"}.bi-r-square-fill::before{content:\"\\f810\"}.bi-r-square::before{content:\"\\f811\"}.bi-repeat-1::before{content:\"\\f812\"}.bi-repeat::before{content:\"\\f813\"}.bi-rewind-btn-fill::before{content:\"\\f814\"}.bi-rewind-btn::before{content:\"\\f815\"}.bi-rewind-circle-fill::before{content:\"\\f816\"}.bi-rewind-circle::before{content:\"\\f817\"}.bi-rewind-fill::before{content:\"\\f818\"}.bi-rewind::before{content:\"\\f819\"}.bi-train-freight-front-fill::before{content:\"\\f81a\"}.bi-train-freight-front::before{content:\"\\f81b\"}.bi-train-front-fill::before{content:\"\\f81c\"}.bi-train-front::before{content:\"\\f81d\"}.bi-train-lightrail-front-fill::before{content:\"\\f81e\"}.bi-train-lightrail-front::before{content:\"\\f81f\"}.bi-truck-front-fill::before{content:\"\\f820\"}.bi-truck-front::before{content:\"\\f821\"}.bi-ubuntu::before{content:\"\\f822\"}.bi-unindent::before{content:\"\\f823\"}.bi-unity::before{content:\"\\f824\"}.bi-universal-access-circle::before{content:\"\\f825\"}.bi-universal-access::before{content:\"\\f826\"}.bi-virus::before{content:\"\\f827\"}.bi-virus2::before{content:\"\\f828\"}.bi-wechat::before{content:\"\\f829\"}.bi-yelp::before{content:\"\\f82a\"}.bi-sign-stop-fill::before{content:\"\\f82b\"}.bi-sign-stop-lights-fill::before{content:\"\\f82c\"}.bi-sign-stop-lights::before{content:\"\\f82d\"}.bi-sign-stop::before{content:\"\\f82e\"}.bi-sign-turn-left-fill::before{content:\"\\f82f\"}.bi-sign-turn-left::before{content:\"\\f830\"}.bi-sign-turn-right-fill::before{content:\"\\f831\"}.bi-sign-turn-right::before{content:\"\\f832\"}.bi-sign-turn-slight-left-fill::before{content:\"\\f833\"}.bi-sign-turn-slight-left::before{content:\"\\f834\"}.bi-sign-turn-slight-right-fill::before{content:\"\\f835\"}.bi-sign-turn-slight-right::before{content:\"\\f836\"}.bi-sign-yield-fill::before{content:\"\\f837\"}.bi-sign-yield::before{content:\"\\f838\"}.bi-ev-station-fill::before{content:\"\\f839\"}.bi-ev-station::before{content:\"\\f83a\"}.bi-fuel-pump-diesel-fill::before{content:\"\\f83b\"}.bi-fuel-pump-diesel::before{content:\"\\f83c\"}.bi-fuel-pump-fill::before{content:\"\\f83d\"}.bi-fuel-pump::before{content:\"\\f83e\"}"
  },
  {
    "path": "changelog.md",
    "content": "# 更新记录\n## v1.0.0~v7.4.2\n>[!NOTE]\n> *v7.4.2之后的更新记录请前往“关于 Windows 12 网页版”应用内查看*\n\n\n<details><summary><span>v7.4.2</span> AI Copilot 3.0！</summary><p>\n\t&emsp;&emsp;-(更新来自@NB-Group)<br>\n\t&emsp;&emsp;-笑死，昨天刚修好就又寄了，这次的船新版本绝对稳定，（理论上）再也不会寄</p>\n</p></details>\n<details><summary><span>v7.4.1</span> AI Copilot 2.0！</summary><p>\n\t&emsp;&emsp;-(更新来自@NB-Group)<br />\n\t&emsp;&emsp;-修复了ai无法使用的问题</p>\n</p></details>\n<details><summary><span>v7.4.0</span> AI Copilot！</summary><p>\n\t&emsp;&emsp;-(更新来自@NB-Group)<br>\n\t&emsp;&emsp;-去掉一些奇怪的东西<br />\n\t&emsp;&emsp;-经过我114年的开发，AI Copilot 2.0诞生了！<br />\n\t&emsp;&emsp;-开源了AI后端的代码<br />\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v7.3.7</span> 细节更改</summary><p>\n\t&emsp;&emsp;-加入一些奇怪的东西<br />\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v7.3.6</span> 语音识别球</summary><p>\n\t&emsp;&emsp;(更新来自@NB-Group)<br/>\n\t&emsp;&emsp;-增加语音识别球<br />\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v7.3.5</span> 整顿代码</summary><p>\n\t&emsp;&emsp;-整顿代码，贡献者必须按本文件开头以及CONTRIBUTING.md的规范编辑代码，否则不予合并，感谢理解<br/>\n\t&emsp;&emsp;-重绘新增的一些图标<br>\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v7.3.4</span> Edge更新</summary><p>\n\t&emsp;&emsp;(更新来自@lh11117)<br>\n\t&emsp;&emsp;-Edge 支持全屏<br/>\n\t&emsp;&emsp;-Edge 支持收藏夹</p>\n</p></details>\n<details><summary><span>v7.3.3</span> 细节优化</summary><p>\n\t&emsp;&emsp;细节优化</p>\n</p></details>\n<details><summary><span>v7.3.2</span> 细节更改</summary><p>\n\t&emsp;&emsp;(更新来自 @tjy-gitnub )<br />\n\t&emsp;&emsp;-新增了部分本地化语言功能<br />\n\t&emsp;&emsp;-更新壁纸<br />\n\t&emsp;&emsp;-优化样式<br />\n\t&emsp;&emsp;-优化shutdown命令<br />\n\t&emsp;&emsp;-其他更新与优化<br />\n\t&emsp;&emsp;-修复了点击标签页无法切换焦点的问题<br />\n\t&emsp;&emsp;-各位可以抽时间去看看README.md，一些特殊情况</p>\n</p></details>\n<details><summary><span>v7.3.1</span> Bug修复与细节优化</summary><p>\n\t&emsp;&emsp;-删除changelog.md中重复的字(更新来自 @ZigaoWang )<br />\n\t&emsp;&emsp;-修复BIOS无法正确访问的问题(更新来自 @ludonghengsb )</p>\n</p></details>\n<details><summary><span>v7.3.0</span> 桌面小组件、Dock自动隐藏、计算器完善和Windows 更新</summary><p>\n\t&emsp;&emsp;(更新来自 @User782Tec )<br />\n\t&emsp;&emsp;-新增了桌面小组件，可将小组件添加到桌面并调整位置<br />\n\t&emsp;&emsp;-新增了编辑模式，可快捷编辑小组件的位置，并提供了相关的快捷入口<br />\n\t&emsp;&emsp;-新增了窗口全屏且Dock不在使用时自动隐藏的功能<br />\n\t&emsp;&emsp;-为Microsoft Edge浏览器和文件资源管理器新增了后退/前进的功能<br />\n\t&emsp;&emsp;-又双叒叕优化计算器的精度问题与安全性问题<br />\n\t&emsp;&emsp;-重写更新机制，并完善 Windows 更新<br />\n\t&emsp;&emsp;-修复了文件资源管理器中右键文件失效的问题<br />\n\t&emsp;&emsp;-修复了文件资源管理器中无法正确显示文件夹中文件的问题<br />\n\t&emsp;&emsp;-更换了Python Editor的图标<br />\n\t&emsp;&emsp;-完善了开源说明<br />\n\t&emsp;&emsp;-其他细节与修复</p>\n</p></details>\n<details><summary><span>v7.2.1</span> README更新、“关于”应用显示实时Star数量、个性化设置支持保存</summary><p>\n\t&emsp;&emsp;(更新来自 @lh11117 )<br />\n\t&emsp;&emsp;-README更新<br />\n\t&emsp;&emsp;-“关于”应用显示实时Star数量<br />\n\t&emsp;&emsp;-个性化设置支持保存<br /></p>\n</p></details>\n<details><summary><span>v7.2.0</span> 优化运行、添加Windows12应用、添加WSA</summary><p>\n\t&emsp;&emsp;(更新来自 @lh11117 )<br />\n\t&emsp;&emsp;-优化运行<br />\n\t&emsp;&emsp;-添加Windows12应用<br />\n\t&emsp;&emsp;-添加WSA<br />\n\t&emsp;&emsp;-添加shutdown命令<br />\n\t&emsp;&emsp;-添加BIOS系统<br />\n\t&emsp;&emsp;-支持桌面图标删除<br />\n\t&emsp;&emsp;-更丰富的文件目录<br />\n\t&emsp;&emsp;-任务管理器支持置顶<br /></p>\n</p></details>\n<details><summary><span>v7.1.0</span> 计算器进一步修复、离线页面的深色模式</summary><p>\n\t&emsp;&emsp;(更新来自 @lh11117)<br />\n\t&emsp;&emsp;-进一步修复了计算器精度缺陷和接受输入非法内容的问题<br />\n\t&emsp;&emsp;-为Microsoft Edge浏览器的离线界面添加了深色模式版本<br />\n\t&emsp;&emsp;-其他一些细节修复<br /></p>\n</p></details>\n<details><summary><span>v7.0.2</span> 计算器修复</summary><p>\n\t&emsp;&emsp;(更新来自 @cong1223 和 @iewnfod)<br />\n\t&emsp;&emsp;-修复计算器计算加减乘除、平方、平方根等运算的精度问题(来自 @cong1223)<br />\n\t&emsp;&emsp;-只允许calc-input输入数字(来自 @iewnfod)<br /></p>\n</p></details>\n<details><summary><span>v7.0.1</span> 资源管理器标签页、离线界面与新闻</summary><p>\n\t&emsp;&emsp;-文件资源管理器的标签页(来自 @tjy-gitnub)<br />\n\t&emsp;&emsp;-新增了Microsoft Edge浏览器的离线界面(来自 @User782Tec)<br />\n\t&emsp;&emsp;-新增新闻(来自 @Nick-DL)<br />\n\t&emsp;&emsp;-优化部分UI<br />\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v7.0.0</span> AI助手,新增多个应用与功能</summary><p>\n\t&emsp;&emsp;-Windows 12 AI Copilot(@NB-Group提供api, @tjy-gitnub魔改)<br />\n\t&emsp;&emsp;-任务管理器(由 @User782Tec 提供)<br />\n\t&emsp;&emsp;-安全中心(由 @NB-Group 提供)<br />\n\t&emsp;&emsp;-适配文件系统(由 @NB-Group 提供)(别问我为啥现在才出，要问问@NB-Group)<br />\n\t&emsp;&emsp;-窗口云母(Mica)效果(由 @tjy-gitnub 提供，在设置中启用)<br />\n\t&emsp;&emsp;-文件资源管理器导航栏(由 @User782Tec 提供)<br />\n\t&emsp;&emsp;-任务管理器小组件(由 @User782Tec 提供)<br />\n\t&emsp;&emsp;-全新壁纸(由 @tjy-gitnub 提供)<br />\n\t&emsp;&emsp;-新增新闻(来自 @for-the-zero)<br />\n\t&emsp;&emsp;-修复了终端的灾难性bug<br />\n\t&emsp;&emsp;-优化部分UI<br />\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details>\n\t<summary><span>v6.0.0</span> 文件系统,窗口大小,天气小组件,任务栏小组件</summary><p>\n\t\n\t\t&emsp;&emsp;-新增文件系统(由 @NB-Group 之后提供)<br />\n\t\t&emsp;&emsp;-窗口大小调整功能(由 @User782Tec 提供)<br />\n\t\t&emsp;&emsp;-保存桌面布局(由 @User782Tec 提供)<br />\n\t\t&emsp;&emsp;-天气小组件(由 @tjy-gitnub 提供)<br />\n\t\t&emsp;&emsp;-小组件添加到任务栏(由 @tjy-gitnub 提供,目前仅支持天气小组件)<br />\n\t\t&emsp;&emsp;-引入全新提示框(由 @tjy-gitnub 提供)<br />\n\t\t&emsp;&emsp;-新的反馈通道<br />\n\t\t&emsp;&emsp;-修复了有时开机动画不能正确显示的问题<br />\n\t\t&emsp;&emsp;-修复了登录界面不显示的问题<br />\n\t\t&emsp;&emsp;-适配新的主题格式，加速预览图显示<br />\n\t\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details>\n\t<summary><span>v5.4.2</span> 灾难性程序错误修复</summary><p>\n\t\n\t\t&emsp;&emsp;-修复pwa将主题获取请求拦截的重大灾难性事故<br />\n\t\t&emsp;&emsp;-细节优化和修复\n\t</p>\n</p></details>\n<details>\n\t<summary><span>v5.4.1</span> bug修复</summary><p>\n\t\n\t\t&emsp;&emsp;<strong>(更新来自 @tjy-gitnub)</strong><br />\n\t\t&emsp;&emsp;-修复pwa将动态请求拦截的灾难性事故<br />\n\t\t&emsp;&emsp;-调整大家梦寐以求的开始菜单滚动条<br />\n\t\t&emsp;&emsp;-新增开始菜单固定项右键取消固定选项<br />\n\t\t&emsp;&emsp;-适配主题格式的一些更改<br />\n\t\t&emsp;&emsp;-细节优化和修复\n\t</p>\n</p></details>\n<details>\n\t<summary><span>v5.4.0</span> 新版logo与图标，UI优化，自定主题与winver</summary><p>\n\t\n\t\t&emsp;&emsp;<strong>(更新来自 @tjy-gitnub,其实我想发v6的)</strong><br />\n\t\t&emsp;&emsp;-新Logo:新版logo<br />\n\t\t&emsp;&emsp;-新图标:重绘替换了win11的图标<br />\n\t\t&emsp;&emsp;-自定主题:支持用户更改和上传自己的主题<br />\n\t\t&emsp;&emsp;-版本信息:新增winver<br />\n\t\t&emsp;&emsp;-新UI:加入win11的悬停立体高亮<br />\n\t\t&emsp;&emsp;-启动优化:加快速度，修复本地因获取电量失败无法启动的问题<br />\n\t\t&emsp;&emsp;-UI适配:稍稍更改了不适配的UI<br />\n\t\t&emsp;&emsp;-Bug修复:右键菜单无法关闭<br />\n\t\t&emsp;&emsp;-代码优化:对某些重复代码整理归纳，引入应用的初始化load配置<br />\n\t\t&emsp;&emsp;-细节优化和修复<br />\n\t</p>\n</p></details>\n<details>\n\t<summary><span>v5.3.1</span> 问题修复</summary><p>\n\t\n\t\t&emsp;&emsp;<strong>更新来自 @User782Tec</strong><br />\n\t\t&emsp;&emsp;-修复了样式不正常的问题<br />\n\t\t&emsp;&emsp;-修复了部分情况下Edge浏览器中加载动画圆圈位置不正确的问题<br />\n\t\t&emsp;&emsp;-修复了开始菜单无法滚动的问题<br />\n\t\t&emsp;&emsp;-修复了控制面板的样式问题<br />\n\t</p>\n</p></details>\n<details>\n\t<summary><span>v5.3.0</span> 触控设备适配、“运行”应用、“白板”应用、控制中心与细节修复</summary><p>\n\t\n\t\t&emsp;&emsp;<strong>更新来自 @NB-Group 和 @User782Tec</strong><br />\n\t\t&emsp;&emsp;-新增“运行”应用，可根据输入内容运行命令、打开文件夹或访问网站<br />\n\t\t&emsp;&emsp;-新增白板应用，可进行作画并保存<br />\n\t\t&emsp;&emsp;-新增控制中心，可调整显示器亮度<br />\n\t\t&emsp;&emsp;-新增了右键点击任务栏图标后可以关闭应用的功能<br />\n\t\t&emsp;&emsp;-新增了将应用固定到开始菜单的功能<br />\n\t\t&emsp;&emsp;-新增了在Edge浏览器中获取网页标题的功能(此项更新由@NB-Group提供后端，@User782Tec完善前端)<br />\n\t\t&emsp;&emsp;-适配触控设备在Edge浏览器中进行标签页拖动排序操作<br />\n\t\t&emsp;&emsp;-修复了Edge浏览器中标签页拖动排序功能中计算位置不正确等的问题<br />\n\t\t&emsp;&emsp;-修复了部分情况下Edge浏览器中加载动画圆圈位置不正确的问题<br />\n\t\t&emsp;&emsp;-修复了部分情况下终端不能正常运作的问题(详见由NebulaTechs提出的Issue#87)<br />\n\t\t&emsp;&emsp;-修复了部分情况下Edge浏览器中无法正确显示标签页的问题<br />\n\t\t&emsp;&emsp;-其他一些更改<br />\n\t\t&emsp;&emsp;-格式化部分文档<br />\n\t</p>\n</p></details>\n<details>\n\t<summary><span>v5.2.4</span> Python编辑器</summary><p>\n\t\n\t\t&emsp;&emsp;<strong>更新来自 @NB-Group</strong><br />\n\t\t&emsp;&emsp;-新增 Python 编辑器应用，编辑器自带自动补全，代码高亮和运行功能。<br />\n\t</p>\n</p></details>\n<details>\n\t<summary><span>v5.2.3</span> 登录界面优化和Python解释器</summary><p>\n\t\n\t\t&emsp;&emsp;<strong>更新来自 @NB-Group 和 @User782Tec</strong><br />\n\t\t&emsp;&emsp;-改进了登录界面，增加锁定壁纸及电源操作<br />\n\t\t&emsp;&emsp;-兼容开发环境，在本地开发时不启用缓存和PWA<br />\n\t\t&emsp;&emsp;-新增了Python解释器(此项更新由@NB-Group提供灵感与框架，@User782Tec完善)<br />\n\t\t&emsp;&emsp;-修复了终端选择不正常的问题<br />\n\t\t&emsp;&emsp;-改进了终端，可通过应用标识符来打开应用<br />\n\t\t&emsp;&emsp;-格式化部分文档<br />\n\t</p>\n</p></details>\n<details>\n\t<summary><span>v5.2.2</span> 细节优化</summary><p>\n\t\n\t\t&emsp;&emsp;-对相机外观和代码进行了优化<br />\n\t\t&emsp;&emsp;-添加登录背景，一些外观优化<br />\n\t\t&emsp;&emsp;-开源许可的完善<br />\n\t\t&emsp;&emsp;-一些优化和修复<br />\n\t\t&emsp;&emsp;-吊一下胃口:v6将使用全新图标(壁纸?)，支持自定义主题 >_-)o\n\t</p>\n</p></details>\n<details>\n\t<summary><span>v5.2.1</span> 登录界面，开机音效和细节优化</summary><p>\n\t\n\t\t&emsp;&emsp;<strong>更新来自 @User782Tec</strong><br />\n\t\t&emsp;&emsp;-为网站添加Favicon和标题<br />\n\t\t&emsp;&emsp;-Edge浏览器中，超出标签页范围的文字将会被隐藏以避免文字溢出的问题<br />\n\t\t&emsp;&emsp;-微调Edge浏览器中加载动画的位置<br />\n\t\t&emsp;&emsp;-新增了开机音效和登录界面<br />\n\t\t&emsp;&emsp;-格式化部分文档<br />\n\t</p>\n</p></details>\n<details>\n\t<summary><span>v5.2.0</span> 相机应用及细节修复</summary><p>\n\t\n\t\t&emsp;&emsp;<strong>更新来自 @User782Tec</strong><br />\n\t\t&emsp;&emsp;-新增“相机”应用，支持拍照功能<br />\n\t\t&emsp;&emsp;-优化焦点控制，关闭焦点窗口后，焦点会转移至下面一个窗口，更加符合原生体验<br />\n\t\t&emsp;&emsp;-计算器优化，优化符号及输入<br />\n\t\t&emsp;&emsp;-修复桌面批量选择框在左上角出现蓝点的问题<br />\n\t\t&emsp;&emsp;-修复部分情况下标题栏不显示的问题<br />\n\t\t&emsp;&emsp;-优化窗口布局<br />\n\t\t&emsp;&emsp;-修正部分非标准CSS特性<br />\n\t\t&emsp;&emsp;-格式化部分文档<br />\n\t</p>\n</p></details>\n<details>\n\t<summary><span>v5.1.2</span> 细节修复和更改</summary><p>\n\t\n\t\t&emsp;&emsp;-修复关于加载失效的问题<br />\n\t\t&emsp;&emsp;-设置加载圈圈为主题色<br />\n\t\t&emsp;&emsp;-添加刷新圈圈动画<br />\n\t\t&emsp;&emsp;-优化窗口拖拽代码<br />\n\t\t&emsp;&emsp;-其它一些更改<br />\n\t\t&emsp;&emsp;-提示:在github项目页的一些<a\n\t\t\tonclick=\"window.open('https://github.com/tjy-gitnub/win12','_blank');\"\n\t\t\twin12_title=\"https://github.com/tjy-gitnub/win12\" class=\"jump\">公告</a>\n\t\t</p>\n</p></details>\n<details>\n\t<summary><span>v5.1.1</span> 网页加载动画与新增应用</summary><p>\n\t\n\t\t&emsp;&emsp;更新来自 @User782Tec<br />\n\t\t&emsp;&emsp;-优化了桌面文件拖拽选择选择<br />\n\t\t&emsp;&emsp;-Edge浏览器中网页加载时的标签页动画<br />\n\t\t&emsp;&emsp;-增加了点击窗口图标后弹出菜单的功能（部分触控设备不能触发上下文菜单）<br />\n\t\t&emsp;&emsp;-增加应用 VSCode 与 哔哩哔哩<br />\n\t\t&emsp;&emsp;-其它: 格式化文档和修复\n\t</p>\n</p></details>\n<details>\n\t<summary><span>v5.1.0</span> 标签页拖动排序与云母效果</summary><p>\n\t\n\t\t&emsp;&emsp;-标签页:可拖动标签页排序(仅桌面端)<br />\n\t\t&emsp;&emsp;-云母效果(试验):在设置中启用并按\"用法\"操作<br />\n\t\t&emsp;&emsp;-其它:细节优化和修复\n\t</p>\n</p></details>\n<details>\n\t<summary><span>v5.0.2</span> 贡献与Edge标签页</summary><p>\n\t\n\t\t&emsp;&emsp;-贡献:关于应用新增贡献者数据<br />\n\t\t&emsp;&emsp;-新标签页:对深色模式的适配，较高安全限制浏览器的适配<br />\n\t\t&emsp;&emsp;-标签页:新增标签页关闭动画<br />\n\t\t&emsp;&emsp;-兼容性:系统控件的防误触<br />\n\t\t&emsp;&emsp;-其它:细节优化和修复\n\t</p>\n</p></details>\n<details>\n\t<summary><span>v5.0.1</span> 漏洞修复</summary><p>\n\t\n\t\t<strong>更新由 @User782Tec 提供</strong><br />\n\t\t&emsp;&emsp;-修复了 issues #67中的问题<br />\n\t\t&emsp;&emsp;-修复了关闭所有Edge浏览器中的标签页后仍保留Edge浏览器的问题<br />\n\t\t&emsp;&emsp;-完善Edge浏览器内输入内容的正则表达式匹配<br />\n\t\t&emsp;&emsp;-略微修改Edge浏览器中输入框<br />\n\t\t&emsp;&emsp;-新标签页<br />\n\t\t&emsp;&emsp;-细节优化和修复\n\t</p>\n</p></details>\n<details>\n\t<summary><span>v5.0.0</span> 新增Edge</summary><p>\n\t\n\t\t<strong>🎉🎉项目在Github上突破✨100✨stars✨啦！🎊🎈</strong><br />\n\t\t&emsp;&emsp;-新增:Microsoft Edge应用(可以在Edge应用中提出反馈与建议，谢谢)<br />\n\t\t&emsp;&emsp;-新增:桌面拖动选择框(没什么大用)<br />\n\t\t&emsp;&emsp;-返璞归真:取消列表悬停效果<br />\n\t\t&emsp;&emsp;-丰富:在文件资源管理器中添加了一些文件<br />\n\t\t&emsp;&emsp;-精简:减小动画数量和幅度<br />\n\t\t&emsp;&emsp;-修复:关于记事本的另存为问题<br />\n\t\t&emsp;&emsp;-彩蛋:你发现动态壁纸了吗？<br />\n\t\t&emsp;&emsp;-其它:细节优化和修复\n\t</p>\n</p></details>\n<details><summary><span>v4.3.0</span> 其实我想发布成5.0版的</summary><p>\n\t&emsp;&emsp;-搜索菜单重新设计<br />\n\t&emsp;&emsp;-列表悬停立体效果(全局,深色模式可能会明显一点,灵感源于win11,大家可以帮忙找一个浅色模式的边框颜色)<br />\n\t&emsp;&emsp;-新增鼠标悬停提示框(全局)<br />\n\t&emsp;&emsp;-记事本全新设计与功能(向Word努力)<br />\n\t&emsp;&emsp;-计算器新样式<br />\n\t&emsp;&emsp;-新增多开亚克力设置<br />\n\t&emsp;&emsp;-关于应用更新记录动画<br />\n\t&emsp;&emsp;-文件资源管理器的新动画<br />\n\t&emsp;&emsp;-桌面图标点击效果<br />\n\t&emsp;&emsp;-修复设置的小竖条位置问题<br />\n\t&emsp;&emsp;-新闻<br />\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v4.2.0</span> 外观整改</summary><p>\n\t&emsp;&emsp;-新的计算器外观<br />\n\t&emsp;&emsp;-卡片外观优化<br />\n\t&emsp;&emsp;-设置新增菜单前面的小竖线<br />\n\t&emsp;&emsp;-右键菜单阴影特效<br />\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v4.1.0</span> 新的设置项，新背景</summary><p>\n\t&emsp;&emsp;-在设置中添加开关特效的选项<br />\n\t&emsp;&emsp;-背景添加阴影效果<br />\n\t&emsp;&emsp;-设置的一些动画效果<br />\n\t&emsp;&emsp;-一些外观优化<br />\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v4.0.0</span> 记录用户偏好,动画更新,新壁纸,分屏</summary><p>\n\t&emsp;&emsp;-记录用户偏好设置(更新后不保留) @xqwcom<br />\n\t&emsp;&emsp;-没错又是动画更新<br />\n\t&emsp;&emsp;-开始/任务栏/右键菜单/列表/切换等全面动画升级<br />\n\t&emsp;&emsp;-新壁纸(好看吗?)<br />\n\t&emsp;&emsp;-拖动窗口至左右边缘分屏<br />\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v3.9.0</span> 新增主题色设置功能，布局优化</summary><p>\n\t&emsp;&emsp;<i>更新部分来源 @User782Tec 的pr</i><br />\n\t&emsp;&emsp;-新增系统主题色设置功能<br />\n\t&emsp;&emsp;-记事本字体选择布局优化<br />\n\t&emsp;&emsp;-\"关于\"应用的改进<br />\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v3.8.0</span> 记事本字体，窗口焦点逻辑改善</summary><p>\n\t&emsp;&emsp;<i>更新主要来源 @User782Tec 的pr</i><br />\n\t&emsp;&emsp;-详见<a href=\"https://github.com/tjy-gitnub/win12/pull/50\">pull</a>中的详细<br />\n\t&emsp;&emsp;-窗口焦点逻辑改善<br />\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v3.7.0</span> 窗口最大化完善,让颜色更\"喜庆\"一点</summary><p>\n\t&emsp;&emsp;<i>更新部分来源 @User782Tec 的pr</i><br />\n\t&emsp;&emsp;-增加最大化窗口下拖还原功能<br />\n\t&emsp;&emsp;-最大化窗口还原后保留之前的位置<br />\n\t&emsp;&emsp;-让系统的色调更\"喜庆\"一点<br />\n\t&emsp;&emsp;-增加 @iamkezo1 提供的新闻<br />\n\t&emsp;&emsp;-压缩背景图片加速<br />\n\t&emsp;&emsp;-禁用缩放<br />\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v3.6.1</span> Windows12新年特别版</summary><p>\n\t&emsp;&emsp;-增加主题色控制功能<br />\n\t&emsp;&emsp;-测试新的更新机制<br />\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v3.6.0</span> 更新机制改进，新增office和终端</summary><p>\n\t&emsp;&emsp;-使用新的更新机制，更新速度提升<br />\n\t&emsp;&emsp;-新增终端应用<br />\n\t&emsp;&emsp;-新增Office<br />\n\t&emsp;&emsp;-修改关机后黑屏而不是白屏<br />\n\t&emsp;&emsp;-更新记录仅显示最近的，优化速度<br />\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v3.5.0</span> 窗口层级和焦点控制</summary><p>\n\t&emsp;&emsp;-增加了窗口层级的控制<br>\n\t&emsp;&emsp;-非焦点窗口关闭模糊效果以提速<br>\n\t&emsp;&emsp;-新增 @Planet-xu 提供的新闻<br>\n\t&emsp;&emsp;-修复了下拉菜单停留的问题 @Samtjs<br>\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v3.4.1</span> 移动端适配</summary><p>\n\t&emsp;&emsp;-适配了移动端的双(改成单击)<br>\n\t&emsp;&emsp;-适配了移动端的拖动窗口<br>\n\t&emsp;&emsp;-优化任务栏按钮点击效果<br>\n\t&emsp;&emsp;-更改右键菜单样式<br>\n\t&emsp;&emsp;-下拉菜单悬停展开<br>\n\t&emsp;&emsp;-细节优化和修复</p>\n\t<i>感谢 @User782Tec</i>\n</p></details>\n<details><summary><span>v3.4.0</span> 动画优化</summary><p>\n\t&emsp;&emsp;-别问我为什么动画占一个新版<br>\n\t&emsp;&emsp;-基本上所有动画都进行了更新优化<br>\n\t&emsp;&emsp;-修复了上个版本没删完的标题栏问题<br>\n\t&emsp;&emsp;-修改了开始菜单的图标<br>\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v3.3.0</span> 增加计算器小组件</summary><p>\n\t&emsp;&emsp;-增加了计算器小组件<br>\n\t&emsp;&emsp;-修复了小组件新闻图片无法加载的问题<br>\n\t&emsp;&emsp;-移除了上一个版本的新窗口标题栏<br>\n\t&emsp;&emsp;-在一些图标按钮上悬停鼠标显示提示<br>\n\t&emsp;&emsp;-去除了所有链接的左下角链接提示<br>\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v3.2.0</span> 增加小组件菜单</summary><p>\n\t&emsp;&emsp;-增加了小组件(资讯和兴趣)菜单<br>\n\t&emsp;&emsp;-小组件菜单中的新闻内容<br>\n\t&emsp;&emsp;-小组件按钮动画效果<br>\n\t&emsp;&emsp;-应用窗口标题栏样式新增<br>\n\t&emsp;&emsp;-对计算器的计算代码的精简<br>\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v3.1.0</span> 增加文件浏览功能，一些新功能</summary><p>\n\t&emsp;&emsp;-文件资源管理器浏览功能<br>\n\t&emsp;&emsp;-对PWA更新的优化<br>\n\t&emsp;&emsp;-文件资源管理器右键菜单<br>\n\t&emsp;&emsp;-增加应用启动的加载动画<br>\n\t&emsp;&emsp;-增加应用启动初始化<br>\n\t&emsp;&emsp;-记事本新增\"编辑\"菜单<br>\n\t&emsp;&emsp;-下拉菜单整体优化<br>\n\t&emsp;&emsp;-右键菜单优化<br>\n\t&emsp;&emsp;-在输入框中允许浏览器的右键菜单<br>\n\t&emsp;&emsp;-双击窗口标题栏最大化<br>\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v3.0.0</span> 桌面图标、记事本、可安装到电脑</summary><p>\n\t&emsp;&emsp;-可以在Edge、Chrome等主流浏览器中将Win12安装为pwa应用¹<br>\n\t&emsp;&emsp;-新增桌面图标，并增加桌面右键菜单\"刷新\"功能<br>\n\t&emsp;&emsp;-可以将开始菜单应用右键添加到桌面<br>\n\t&emsp;&emsp;-新增\"记事本\"应用<br>\n\t&emsp;&emsp;-新的深色模式切换按钮<br>\n\t&emsp;&emsp;-改进了窗口的外观<br>\n\t&emsp;&emsp;-细节优化和修复<br>\n\t<i>1: 正常会有安装的提示，会在链接栏右上角，安装后可离线使用，有网会自动更新。感谢 @dzc120223 的建议</i>\n</p>\n</p></details>\n<details><summary><span>v2.3.1</span> bug修复、外观优化</summary><p>\n\t&emsp;&emsp;-修复了拖动窗口图标触发拖拽事件的错误<br>\n\t&emsp;&emsp;-修复了其它拖拽图片的错误<br>\n\t&emsp;&emsp;-右键菜单的外观优化<br>\n\t&emsp;&emsp;-深色模式的可读性优化<br>\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v2.3.0</span> 开始外观优化、日历菜单、任务栏图标动画</summary><p>\n\t&emsp;&emsp;-开始菜单外观优化、更加松散<br>\n\t&emsp;&emsp;-新增任务栏中的日历菜单<br>\n\t&emsp;&emsp;-任务栏图标添加动画效果<br>\n\t&emsp;&emsp;-窗口最小化动画优化<br>\n\t&emsp;&emsp;-右键菜单的完善<br>\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v2.2.0</span> 开始、搜索按钮动画，右键菜单优化，新列表点击效果</summary><p>\n\t&emsp;&emsp;-开始、搜索按钮新增点击动画<br>\n\t&emsp;&emsp;-优化右键菜单<br>\n\t&emsp;&emsp;-桌面右键菜单新增<br>\n\t&emsp;&emsp;-新的列表点击效果<br>\n\t&emsp;&emsp;-任务栏动画效果优化<br>\n\t&emsp;&emsp;-细节优化和修复</p>\n</p></details>\n<details><summary><span>v2.1.1</span> 更多右键菜单，win10主题列表悬停效果</summary><p>\n\t&emsp;&emsp;-在开始、任务栏、更新消息支持更多右键菜单<br>\n\t&emsp;&emsp;-右键菜单超出界面的优化<br>\n\t&emsp;&emsp;-列表win10悬停效果<br>\n\t&emsp;&emsp;-点击或右击消息可在窗口中查看详细<br>\n\t&emsp;&emsp;-修复了时间无法显示星期日的问题<br>\n\t&emsp;&emsp;-细节优化</p>\n</p></details>\n<details><summary><span>v2.1.0</span> 右键菜单，细节优化更改</summary><p>\n\t&emsp;&emsp;-在窗口标题、桌面、开始菜单支持右键菜单<br>\n\t&emsp;&emsp;-在其它元素上禁用右键菜单<br>\n\t&emsp;&emsp;-列表点击根据鼠标位置偏移<br>\n\t&emsp;&emsp;-新增更新消息图标<br>\n\t&emsp;&emsp;-修复了按钮点击缩小效果不正常显示的问题<br>\n\t&emsp;&emsp;-修复了更新消息在开机前显示的问题<br>\n\t&emsp;&emsp;-细节优化</p>\n</p></details>\n<details><summary><span>v2.0.0</span> 深色主题、更新提示、新点击效果、拖至顶部最大化</summary><p>\n\t&emsp;&emsp;-支持深色模式<br>\n\t&emsp;&emsp;-在每次更新后显示更新提示<br>\n\t&emsp;&emsp;-去除原 win10 主题点击、悬停动画<br>\n\t&emsp;&emsp;-新的列表项点击动画<br>\n\t&emsp;&emsp;-将窗口拖至顶部最大化<br>\n\t&emsp;&emsp;-优化开始菜单固定项点击效果</p>\n</p></details>\n<details><summary><span>v1.1.4</span> 动画优化、显示时间</summary><p>\n\t&emsp;&emsp;-优化窗口最大最小化动、开始、搜索等动画<br>\n\t&emsp;&emsp;-计算器外观优化<br>\n\t&emsp;&emsp;-\"准备\"深色主题😏<br>\n\t&emsp;&emsp;-在开始菜单中显示当前的时间<br>\n\t&emsp;&emsp;-一些细节优化</p>\n</p></details>\n<details><summary><span>v1.1.3</span> 列表 悬停、点击 效果</summary><p>\n\t&emsp;&emsp;-在开始菜单、设置、关于、文件资源管理器、计算器中使用新的列表悬停、点击效果<br>\n\t&emsp;&emsp;-在任务栏、关于中使用主题色(蓝紫渐变)<br>\n\t&emsp;&emsp;-任务栏应用圆角优化<br>\n\t&emsp;&emsp;-增加任务栏右下角托盘(未完全实现)<br>\n\t&emsp;&emsp;-使启动时不显示鼠标，更加逼真</p>\n</p></details>\n<details><summary><span>v1.1.2</span> 外观优化</summary><p>\n\t&emsp;&emsp;-透明效果改善<br>\n\t&emsp;&emsp;-在所有应用中使用主题色(蓝紫渐变)<br>\n\t&emsp;&emsp;-Dock(任务)栏圆角优化<br>\n\t&emsp;&emsp;-在设置中使用新的头像<br>\n\t&emsp;&emsp;-加速窗口动画，更加贴近原生</p>\n</p></details>\n<details><summary><span>v1.1.1</span> 外观优化，修复了一些 Bug</summary><p>\n\t&emsp;&emsp;-外观优化，阴影增加<br>\n\t&emsp;&emsp;-修复了开始、搜索菜单关闭时高度会闪一下的问题<br>\n\t&emsp;&emsp;-开始菜单用户头像美化<br>\n\t&emsp;&emsp;-修复了\"关于\"应用切换标签时文字改变导致动画流畅的问题<br>\n\t&emsp;&emsp;-使页面不能滚动，更加逼真</p>\n</p></details>\n<details><summary><span>v1.1.0</span> 增加最小化功能,图标美化</summary><p>\n\t&emsp;&emsp;-新增最小化窗口功能<br>\n\t&emsp;&emsp;-图标部分美化<br>\n\t&emsp;&emsp;-开始、搜索按钮点击动画美化<br>\n\t&emsp;&emsp;-修复计算器 \"𝑥²\" 键无效的问题<br>\n\t&emsp;&emsp;-修复窗口打开并最大化后最小化不正常的问题<br>\n\t&emsp;&emsp;-修复多次打开应用任务栏显示错误的问题<br>\n\t&emsp;&emsp;-简化js关于拖动窗口的代码</p>\n</p></details>\n<details><summary><span>v1.0.1</span> Bug和一些错别字</summary><p>\n\t&emsp;&emsp;上传了才发现有 Bug 😅</p>\n</p></details>\n<details><summary><span>v1.0.0</span> 计算器功能增加，优化体验与开始菜单，新增关于应用</summary><p>\n\t&emsp;&emsp;-使开始菜单和搜索窗口在高度不足的页面中更好地显示，页面高度过小也可能显示不全，还是建议使用电脑<br>\n\t&emsp;&emsp;-计算器增加平方与开方功能<br>\n\t&emsp;&emsp;-开始菜单中不可用应用用灰色显示，更加简洁方便<br>\n\t&emsp;&emsp;-新增 \"关于Win12网页版\" 应用，包含关于本项目的说明和历史更新记录<br>\n\t&emsp;&emsp;-优化开始菜单和搜索窗口的显示动画<br>\n\t&emsp;&emsp;-优化电脑端按钮的体验</p>\n</p></details>\n"
  },
  {
    "path": "data/disconnected.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Windows 12 网页版 - 网络连接问题解决方案</title> <!-- 优化：修改页面标题以包含关键词 -->\n    <meta name=\"description\" content=\"Windows 12 网页版网络连接问题解决方案。提供关于网络连接的帮助和建议。\"> <!-- 优化：添加描述性 meta 标签 -->\n    <style>\n        * {\n            padding: 0;\n            margin: 0;\n            font-family: Arial, Helvetica, sans-serif;\n        }\n        \n        html,body {\n            width: 100%;\n            height: 100%;\n        }\n\n        body {\n            display: flex;\n            justify-content: center;\n            align-items: center;\n        }\n\n        .container {\n            width: max(60%, 600px);\n            padding: 50px;\n        }\n\n        .container * {\n            margin: 20px 0;\n        }\n\n        .container .tit {\n            font-weight: 700;\n            font-size: 1.56em;\n            padding: 5px 0;\n        }\n\n        .container p.bold {\n            font-weight: 700;\n            font-size: 1.2em;\n        }\n\n        .container p.last {\n            font-size: 0.85em;\n            color: #888888;\n            margin-top: 30px;\n        }\n\n        .container ul {\n            list-style-position: inside;\n        }\n\n        .container>.pic {\n            width: 100px;\n            height: 100px;\n            background-image: url(\"apps/icons/edge/disconnected.svg\");\n            background-size: contain;\n            background-repeat: no-repeat;\n            background-position: center; \n            /* 优化：居中背景图像 */\n        }\n    </style>\n</head>\n<body>\n    <div class=\"container\">\n        <div class=\"pic\"></div>\n        <div class=\"tit\">你似乎未连接到网络</div> <!-- 优化：更具体的标题 -->\n        <div class=\"content\">\n            <p>Web 因你而不同。让我们帮你重新联机！</p>\n            <p class=\"bold\">请尝试以下方法：</p> <!-- 优化：更具体的建议 -->\n            <ul>\n                <li>检查网络电缆、调制解调器和路由器</li>\n                <li>重新连接到无线网络</li>\n            </ul>\n         <p class=\"last\">\n        错误代码：ERR_INTERNET_DISCONNECTED。<br>\n            错误说明：该错误表示您的设备已与互联网断开连接。请检查您的网络连接设备，如网线是否插好，Wi-Fi 是否连接正常，或移动网络是否开启，以确保您的设备能够正常访问互联网。\n    </p>\n        </div>\n</body>\n</html>"
  },
  {
    "path": "data/disconnected_dark.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Windows 12 网页版 - 网络连接问题解决方案</title> <!-- 优化：修改页面标题以包含关键词 -->\n    <meta name=\"description\" content=\"Windows 12 网页版网络连接问题解决方案。提供关于网络连接的帮助和建议。\"> <!-- 优化：添加描述性 meta 标签 -->\n    <style>\n        * {\n            padding: 0;\n            margin: 0;\n            font-family: Arial, Helvetica, sans-serif;\n        }\n        \n        html,body {\n            width: 100%;\n            height: 100%;\n        }\n\n        body {\n            display: flex;\n            justify-content: center;\n            align-items: center;\n        }\n\n        .container {\n            width: max(60%, 600px);\n            padding: 50px;\n        }\n\n        .container * {\n            margin: 20px 0;\n        }\n\n        .container .tit {\n            font-weight: 700;\n            font-size: 1.56em;\n            padding: 5px 0;\n            color: #e8e6e3;\n        }\n\n        .container .tit2 {\n            color: #e8e6e3;\n        }\n\n        .container p.bold {\n            font-weight: 700;\n            font-size: 1.2em;\n            color: #e8e6e3;\n        }\n\n        .container p.last {\n            font-size: 0.85em;\n            color: #aba499;\n            margin-top: 30px;\n        }\n\n        .container ul {\n            list-style-position: inside;\n        }\n\n        .container>.pic {\n            width: 100px;\n            height: 100px;\n            background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMzIiIGhlaWdodD0iMzIiPjxkZWZzPjxmaWx0ZXIgaWQ9ImRhcmtyZWFkZXItaW1hZ2UtZmlsdGVyIj48ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMC4yNDkgLTAuNjE0IC0wLjY3MiAwLjAwMCAxLjAzNSAtMC42NDYgMC4yODggLTAuNjY0IDAuMDAwIDEuMDIwIC0wLjYzNiAtMC42MDkgMC4yNTAgMC4wMDAgMC45OTQgMC4wMDAgMC4wMDAgMC4wMDAgMS4wMDAgMC4wMDAiIC8+PC9maWx0ZXI+PC9kZWZzPjxpbWFnZSB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIGZpbHRlcj0idXJsKCNkYXJrcmVhZGVyLWltYWdlLWZpbHRlcikiIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIWnBaWGRDYjNnOUlqQWdNQ0F5TURRNElESXdORGdpSUhkcFpIUm9QU0l6TWlJZ2FHVnBaMmgwUFNJek1pSWdabWxzYkQwaWJtOXVaU0krUEhCaGRHZ2daRDBpVFRFMk1EQWdNVEUxTW5FNU15QXdJREUzTkNBek5YUXhORE1nT1RZZ09UWWdNVFF5SURNMUlERTNOWEV3SURrekxUTTFJREUzTkhRdE9UWWdNVFF6TFRFME1pQTVOaTB4TnpVZ016VnhMVGt6SURBdE1UYzBMVE0xZEMweE5ETXRPVFl0T1RZdE1UUXlMVE0xTFRFM05YRXdMVGt6SURNMUxURTNOSFE1TmkweE5ETWdNVFF5TFRrMklERTNOUzB6TlhwdExUTXlNQ0EwTkRoeE1DQTJOaUF5TlNBeE1qUjBOamdnTVRBeUlERXdNaUEyT1NBeE1qVWdNalZ4TkRjZ01DQTVNaTB4TTNRNE5DMDBNR3d0TkRRekxUUTBNM0V0TWpZZ016a3RNemtnT0RSMExURTBJRGt5ZW0wMU9EY2dNVGMyY1RJMkxUTTVJRE01TFRnMGRERTBMVGt5Y1RBdE5qWXRNalV0TVRJMGRDMDJPUzB4TURFdE1UQXlMVFk1TFRFeU5DMHlObkV0TkRjZ01DMDVNaUF4TTNRdE9EUWdOREJzTkRReklEUTBNM3B0TFRjM05DQXhNalZ4TWpJZ016WWdORGdnTmpsME5UY2dOakp4TFRReklEZ3RPRFlnTVRKMExUZzRJRFJ4TFRFME1TQXdMVEkzTWkwek5uUXRNalEwTFRFd05DMHlNRGN0TVRZd0xURTJNUzB5TURjdE1UQXpMVEkwTlMwek55MHlOekp4TUMweE5ERWdNell0TWpjeWRERXdOQzB5TkRRZ01UWXdMVEl3TnlBeU1EY3RNVFl4VkRjMU1pQXpOM1F5TnpJdE16ZHhNVFF4SURBZ01qY3lJRE0yZERJME5DQXhNRFFnTWpBM0lERTJNQ0F4TmpFZ01qQTNJREV3TXlBeU5EVWdNemNnTWpjeWNUQWdORFF0TkNBNE4zUXRNVElnT0RkeExUVTBMVFU1TFRFeE9DMDVPR3cwTFRNNGNUSXRNVGtnTWkwek9DQXdMVEV6TUMwek9DMHlOVFpvTFRNMk1uRTRJRFl5SURFeElERXlNM1ExSURFeU5IRXRNek1nTXkwMk5TQXhNSFF0TmpRZ01UaDJMVE01Y1RBdE5qQXROQzB4TVRoMExURXlMVEV4T0VnMk5UZHhMVGtnTmpRdE1UTWdNVEkzZEMwMElERXlPWEV3SURZMUlEUWdNVEk0ZERFeklERXlPR2cwTkRaeExUTTNJRFU1TFRZd0lERXlPRWcyTnpseE9DQXpOeUF5TXlBNE9YUXpOeUF4TURrZ05URWdNVEV6SURZMElERXdNU0EzT0NBM01pQTVNaUF5T0hFeE9DQXdJRE0xTFRWME16UXRNVFI2YlRjek9TMHhNall4Y1Mwek9DMDRNUzA1TVMweE5USjBMVEV5TUMweE16RXRNVFF6TFRFd05DMHhOakl0TnpWeE16WWdORGtnTmpRZ01UQTFkRFV4SURFeE5TQTBNQ0F4TWpFZ01qa2dNVEl4YURNek1ucHRMVGd3T0MwMU1USnhMVFE1SURBdE9URWdNamQwTFRjNElEY3pMVFkxSURFd01TMDFNU0F4TVRNdE16Y2dNVEE1TFRJeklEZzVhRFk1TUhFdE9DMHpOeTB5TXkwNE9YUXRNemN0TVRBNUxUVXhMVEV4TXkwMk5DMHhNREV0TnpndE56SXRPVEl0TWpoNmJTMHlPVElnTlRCeExUZzFJREk1TFRFMk1pQTNORlEwTWpjZ016VTNJRE13T0NBME9EZDBMVGt5SURFMU0yZ3pNekp4TVRJdE5Ua2dNamd0TVRJd2RETTVMVEV5TVNBMU1pMHhNVFlnTmpVdE1UQTFlbTB0TmpBMElEZzBObkV3SURFek1DQXpPQ0F5TlRab016WXljUzA0TFRZMExURXlMVEV5TjNRdE5DMHhNamx4TUMwMk5TQTBMVEV5T0hReE1pMHhNamhJTVRZMmNTMHpPQ0F4TWpZdE16Z2dNalUyZW0wNE9DQXpPRFJ4TXpnZ09ERWdPVEVnTVRVeWRERXlNQ0F4TXpFZ01UUXpJREV3TkNBeE5qSWdOelZ4TFRNMkxUUTVMVFkxTFRFd05YUXROVEV0TVRFMUxUTTVMVEV5TVMweU9TMHhNakZJTWpFMmVpSWdabWxzYkQwaUl6RXdNVEF4TUNJdlBqd3ZjM1puUGc9PSIgLz48L3N2Zz4=\");\n            background-size: contain;\n            background-repeat: no-repeat;\n            background-position: 50% 50%;\n        }\n\n        .container .tips1, .tips2{\n            color:#e8e6e3;\n        }\n    </style>\n</head>\n<body>\n    <div class=\"container\">\n        <div class=\"pic\"></div>\n        <div class=\"tit\">你似乎未连接到网络</div> <!-- 优化：更具体的标题 -->\n        <div class=\"content\">\n            <p class=\"tit2\">Web 因你而不同。让我们帮你重新联机！</p> <!-- 优化：更具体的副标题 -->\n            <p class=\"bold\">请尝试以下方法：</p>\n            <ul>\n                <li class=\"tips1\">检查网络电缆、调制解调器和路由器</li> <!-- 优化：更具体的建议 -->\n                <li class=\"tips2\">重新连接到无线网络</li>\n               <!-- 优化：更具体的建议 -->\n            </ul>\n            <p class=\"last\">错误代码：ERR_INTERNET_DISCONNECTED。<br>\n            错误说明：该错误表示您的设备已与互联网断开连接。请检查您的网络连接设备，如网线是否插好，Wi-Fi 是否连接正常，或移动网络是否开启，以确保您的设备能够正常访问互联网。</p> <!-- 优化：提供错误代码 -->\n        </div>\n    </div>\n</body>\n</html>"
  },
  {
    "path": "data/tasks.js",
    "content": "let taskmgrTasks = [\n    {\n        name: '任务管理器',\n        icon: 'icon/taskmgr.png',\n        link: 'taskmgr'\n    },\n    {\n        name: 'Whiteboard',\n        icon: 'icon/whiteboard.png',\n        link: 'whiteboard'\n    },\n    {\n        name: '相机',\n        icon: 'icon/camera.svg',\n        link: 'camera'\n    },\n    {\n        name: '哔哩哔哩客户端',\n        icon: 'icon/bilibili.png',\n        link: 'bilibili'\n    },\n    {\n        name: 'Microsoft Edge',\n        icon: 'icon/edge.svg',\n        link: 'edge'\n    },\n    {\n        name: 'WebView2运行时组件'\n    },\n    {\n        name: '设置',\n        icon: 'icon/setting.svg',\n        link: 'setting'\n    },\n    {\n        name: 'Python Editor(Python程序编辑器)',\n        icon: 'icon/pythonEditor.svg',\n        link: 'pythonEditor'\n    },\n    {\n        name: '计算器',\n        icon: 'icon/calc.svg',\n        link: 'calc'\n    },\n    {\n        name: '文件资源管理器',\n        icon: 'icon/explorer.svg',\n        link: 'explorer'\n    },\n    {\n        name: '关于Windows12',\n        icon: 'icon/about.svg',\n        link: 'about'\n    },\n    {\n        name: '记事本',\n        icon: 'icon/notepad.svg',\n        link: 'notepad'\n    },\n    {\n        name: '终端',\n        icon: 'icon/terminal.svg',\n        link: 'terminal'\n    },\n    {\n        name: 'Microsoft Word Preview',\n        icon: 'icon/word.svg',\n        link: 'word'\n    },\n    {\n        name: 'Visual Studio Code',\n        icon: 'icon/vscode.png',\n        link: 'vscode'\n    },\n    {\n        name: 'System'\n    },\n    {\n        name: 'Windows内存处理系统进程'\n    },\n    {\n        name: '应用层网关服务'\n    },\n    {\n        name: 'DCOM DLL Host进程'\n    },\n    {\n        name: 'Windows内存处理系统进程'\n    },\n    {\n        name: '应用层网关服务'\n    },\n    {\n        name: 'Client/Server Runtime Server Subsystem'\n    },\n    {\n        name: 'DirectDraw Helper'\n    },\n    {\n        name: 'DCOM DLL Host进程'\n    },\n    {\n        name: 'IIS Admin Service Helper'\n    },\n    {\n        name: 'Input Locales'\n    },\n    {\n        name: 'Windows壳进程'\n    },\n    {\n        name: '本地安全权限服务'\n    },\n    {\n        name: 'Machine Debug Manager'\n    },\n    {\n        name: '多媒体支持进程'\n    },\n    {\n        name: 'Windows路由进程'\n    },\n    {\n        name: 'Windows信使服务'\n    },\n    {\n        name: 'Windows计划任务'\n    },\n    {\n        name: '远程注册表服务'\n    },\n    {\n        name: 'RPC Portmapper'\n    },\n    {\n        name: 'Windows Service Controller'\n    },\n    {\n        name: 'Session Manager Subsystem'\n    },\n    {\n        name: 'Microsoft SNMP Agent'\n    },\n    {\n        name: 'Printer Spooler'\n    },\n    {\n        name: 'Printer Spooler Service'\n    },\n    {\n        name: 'Still Image Service'\n    },\n    {\n        name: 'Service Host Process'\n    },\n    {\n        name: 'Windows System Process'\n    },\n    {\n        name: 'Windows Task Optimizer'\n    },\n    {\n        name: 'TCP/IP Services'\n    },\n    {\n        name: 'Windows Logon Process'\n    },\n    {\n        name: 'Windows Management Service'\n    }\n]"
  },
  {
    "path": "desktop.css",
    "content": "@import \"./bootstrap-icons.css\";\n@import \"./base.css\";\n\n/* 注：应用样式请在 /apps/style 中设置，并在 desktop.html 开头引用 */\n\n\n/* 通用颜色配置，分深浅主题 */\n:root {\n    --text: #000;\n    --text2: #444;\n    --bg: #ffffff;\n    --bg50: #ffffff90;\n    --bg70: #fefefeb7;\n    --shadow: #22222230;\n    --card: #efefef75;\n    --hover: #ffffff65;\n    --hover-half: #ffffff40;\n    --hover-b: #1111110f;\n    --bggrey: #eee;\n    --fill: #d3d3d370;\n    --bgul: url('bg.svg');\n    --mm: #ffffffc0;\n    --contextmeu: #f7f7f7bb;\n    --bar: #efefef37;\n    --hr: #ccc;\n    --unfoc: #eaeaea;\n    --msg: #ffffffe7;\n    --theme-1: #ad6eca;\n    --theme-2: #3b91d8;\n    --href: #2983cc;\n    --bd: #8f8f8f30;\n    --s3d: #99999947;\n    --mica: linear-gradient(215deg, #ffe7f6, #a9c3ff);\n}\n\n:root.dark {\n    --text: #eee;\n    --text2: #aaa;\n    --bg: #000000;\n    --bg50: #00000065;\n    --bg70: #111111c5;\n    --shadow: #000000a0;\n    --card: #72727240;\n    --hover: #aaaaaa30;\n    --hover-half: #ffffff20;\n    --hover-b: #eeeeee0f;\n    --bggrey: #444;\n    --fill: #99999970;\n    --bgul: url('bg-dark.svg');\n    --mm: #ffffff50;\n    --contextmeu: #292929bb;\n    --bar: #7272722a;\n    --hr: #333;\n    --unfoc: #202020;\n    --msg: #303030d0;\n    --bd: #ffffff06;\n    --s3d: #11111150;\n    --mica: linear-gradient(215deg, #2d161c, #102d53);\n}\n\n\n:root.notrans *,\n:root.notrans *::before,\n:root.notrans *::after {\n    transition: none !important;\n    animation: none !important;\n}\n\n:root.nosd {\n    --shadow: none;\n}\n\n:root.moreblur .window:not(.foc) {\n    background: var(--bg70);\n    background-color: none;\n    backdrop-filter: blur(30px);\n}\n\nbody,\np {\n    transition: 100ms;\n}\n\np {\n    margin: 0;\n}\n\nhtml {\n    position: fixed;\n    height: 100%;\n    width: 100%;\n}\n\nbody {\n    background: var(--bgul) center;\n    background-size: cover;\n    height: 100%;\n    font-size: 15.5px;\n    color: var(--text);\n    user-select: none;\n}\n\nhtml.night {\n    filter: brightness(0) !important;\n}\n\n.a {\n    color: var(--text);\n    text-decoration: none !important;\n    cursor: pointer;\n}\n\n.jump {\n    cursor: alias !important;\n    /* text-decoration: underline; */\n    color: var(--href);\n}\n\n.jump:hover {\n    color: #999;\n}\n\n.jump:active {\n    color: #666;\n}\n\nhr {\n    background-color: #afafaf50;\n}\n\n::-webkit-scrollbar {\n    border-radius: 7px;\n    height: 14px;\n    width: 14px;\n}\n\n::-webkit-scrollbar:hover {\n    background-color: var(--card);\n}\n\n::-webkit-scrollbar-thumb {\n    background: #7f7f7f70;\n    background-clip: padding-box;\n    border: 6px solid transparent;\n    border-radius: 10px;\n}\n\n::-webkit-scrollbar-thumb:hover {\n    border: 4px solid transparent;\n}\n\n::-webkit-scrollbar-corner {\n    display: none;\n}\n\n.act,\nlist:not(.new)>a,\n#cs>list>a,\n#datebox>.cont>.body>p,\n.wg>.titbar>.more,\n.wg.calc>.content>.b,\n.button {\n    transition: 80ms !important;\n}\n\n.act:active,\nlist:not(.new)>a:active,\n#cs>list>a:active,\n#datebox>.cont>.body>p:active,\n.wg>.titbar>.more:active,\n.wg.calc>.content>.b:active,\n.button:active {\n    /* transform: scale(0.93); */\n    /* filter: blur(0.5px); */\n    filter: opacity(0.7);\n    /* transition: transform 500ms cubic-bezier(0.24, 0.86, 0.36, 0.44) !important; */\n}\n\n\n/*** 以下通用控件 ***/\n\n.input {\n    background-color: var(--bg50);\n    border: none;\n    border-bottom: 2.5px solid;\n    border-bottom-color: #7f7f7f7f;\n    border-radius: 7px;\n    padding: 3px 5px 3px 8px;\n    outline: medium;\n    width: 100%;\n    color: var(--text);\n    transition: 100ms, border 0s;\n    box-shadow: 0 1px 2px var(--s3d);\n}\n\n:root.corner_squ .input {\n    corner-shape: squircle;\n    border-radius: 15px;\n}\n\n.input:hover {\n    background: var(--contextmeu);\n}\n\n.input:focus {\n    background-color: var(--bg);\n    background-clip: padding-box, border-box;\n    background-origin: padding-box, border-box;\n    background-image: linear-gradient(var(--bg), var(--bg)), linear-gradient(90deg, var(--theme-1), var(--theme-2));\n    border-bottom-color: transparent;\n    box-shadow: 0 1px 10px var(--s3d);\n    opacity: 1;\n}\n\ninput.foc {\n    display: block;\n    height: 0;\n    width: 0;\n    opacity: 0;\n    padding: 0;\n    margin: 0;\n    border: none;\n    outline: none;\n    background: none;\n}\n\n.btn {\n    border: 0px solid;\n    border-radius: 10px;\n    padding: 7px 10px;\n    transition: 100ms;\n    background-color: #00000000;\n}\n\n:root.corner_squ .btn {\n    corner-shape: squircle;\n    border-radius: 20px;\n}\n\n.btn-icon {\n    border: 0px solid;\n    border-radius: 10px;\n    padding: 1px 5px;\n    background-color: #00000000;\n    font-size: 23px;\n    height: 33px;\n    width: 33px;\n    overflow: hidden;\n    /* display: flex; */\n}\n\n.btn-icon.big {\n    padding: 3px 7px;\n    font-size: 19px;\n}\n\n.btn:hover {\n    background: var(--hover);\n}\n\n.btn:active {\n    /* transform: scale(0.9); */\n    opacity: 0.7;\n}\n\n.button {\n    background-color: #9f9f9f40;\n    border-radius: 7px;\n    padding: 6px 12px;\n    cursor: pointer;\n}\n\n:root.corner_squ .button {\n    corner-shape: squircle;\n    border-radius: 15px;\n}\n\n.button:hover {\n    filter: brightness(1.2);\n}\n\n.button:active {\n    filter: brightness(1.2) opacity(0.8);\n}\n\n\n.buttons {\n    display: inline-block;\n    position: absolute;\n    bottom: 20px;\n    right: 15px;\n}\n\n.buttons>* {\n    display: inline-block;\n    padding: 5px 10px;\n    border-radius: 8px;\n    margin: 0px 4px;\n    transition: transform 400ms cubic-bezier(0.14, 1.02, 0.17, 0.03) !important;\n    /* box-shadow: 2px 2px 4px var(--shadow); */\n    box-shadow: 0 1px 2px 1px var(--s3d);\n    min-width: 55px;\n    text-align: center;\n}\n\n.buttons>*:hover {\n    filter: brightness(1.2);\n}\n\n.buttons>*:active {\n    opacity: 0.7;\n    /* transform: scale(0.85); */\n}\n\n.buttons>.submit {\n    background-image: linear-gradient(120deg, var(--theme-1), var(--theme-2));\n    color: #fff;\n}\n\n.buttons>.cancel {\n    background-color: var(--bggrey);\n}\n\nlist {\n    display: block;\n    padding-left: 0;\n    margin-bottom: 0;\n    border-radius: 7px;\n}\n\nlist>* {\n    width: 100%;\n    color: var(--text);\n    text-align: inherit;\n    border-radius: 7px;\n    position: relative;\n    display: block;\n    padding: 3px 24px;\n}\n\n:root.corner_squ list>* {\n    corner-shape: squircle;\n    border-radius: 20px !important;\n}\n\nlist:not(.new)>a {\n    transition: 50ms, transform 400ms cubic-bezier(0.14, 1.02, 0.17, 0.03);\n}\n\nlist:not(.new)>a:active {\n    opacity: 0.7;\n    /* transform: scale(0.95); */\n}\n\nlist.new>a {\n    transition: 50ms, opacity 80ms;\n}\n\nlist.new>a:active {\n    opacity: 0.7;\n}\n\nlist>a:hover {\n    color: var(--text);\n    background-color: var(--hover-half);\n    text-decoration: none;\n    box-shadow: 0 1px 2px var(--s3d);\n}\n\nlist>hr {\n    width: calc(100% - 12px);\n    padding: 0 !important;\n    margin: 2px 6px;\n    background-color: #7f7f7f7f;\n    border-radius: 5px;\n    height: 0.75px;\n    cursor: inherit;\n}\n\nlist>hr:hover {\n    background-color: #7f7f7f7f;\n}\n\nlist>.text {\n    margin: 0;\n    cursor: inherit;\n    border: none;\n}\n\nlist>.text:hover {\n    background-color: unset;\n    border: none;\n}\n\nlist>span.focs {\n    display: block;\n    width: 4px;\n    height: 20px;\n    background: linear-gradient(0deg, var(--theme-1), var(--theme-2));\n    background-size: cover;\n    padding: 0;\n    border-radius: 2px;\n    position: relative;\n    margin: -30px 7px 0 7px;\n    z-index: 1;\n    transition: 500ms cubic-bezier(1, 0, 0, 1);\n    /* transform-origin: top; */\n}\n\nlist>span.focs.cl {\n    animation: fcl 200ms cubic-bezier(1, 0.8, 0, 0.2) 160ms;\n}\n\n@keyframes fcl {\n    0% {\n        transform: none;\n    }\n\n    50% {\n        transform: scaleY(0.5);\n    }\n\n    100% {\n        transform: none;\n    }\n}\n\n\n/*** 以下任务栏 ***/\n\n#dock-box {\n    position: fixed;\n    bottom: 10px;\n    height: 40px;\n    display: flex;\n    width: 100%;\n    z-index: 92;\n    padding: 0 5px;\n    justify-content: center;\n    transition: bottom 400ms;\n}\n\n#dock-box.hide {\n    bottom: -60px;\n}\n\n.dock {\n    border-radius: 10px;\n    height: 100%;\n    background-color: var(--contextmeu);\n    backdrop-filter: blur(20px) saturate(1.5);\n    -webkit-backdrop-filter: blur(20px) saturate(1.5);\n    box-shadow: 0 1px 2px #44444460, 0px 3px 25px 1px var(--shadow);\n    padding: 7px 6px;\n    margin: 0 3px;\n    display: flex;\n    transition: 200ms, transform 300ms cubic-bezier(0.14, 1.02, 0.17, 0.03), backdrop-filter, -webkit-backdrop-filter 0ms;\n    bottom: 0;\n    /* transform: scale(1); */\n    /* border: 1.5px solid #6f6f6f30; */\n}\n\n:root.corner_squ .dock {\n    corner-shape: squircle;\n    border-radius: 18px;\n}\n\n.dock>* {\n    padding-left: 3px;\n    padding-right: 3px;\n}\n\n/* .dock.about:hover, */\n.dock.theme:hover,\n.dock.date:hover {\n    backdrop-filter: blur(20px) saturate(1.5) brightness(1.2);\n    -webkit-backdrop-filter: blur(20px) saturate(1.5) brightness(1.2);\n}\n\n#toolbar {\n    display: flex;\n}\n\n#taskbar {\n    padding: 3px 2px;\n    transition: 80ms;\n    overflow: hidden;\n    width: 0;\n}\n\n#taskbar>a {\n    border-radius: 10px;\n    height: 34px;\n    width: 38px;\n    transition: 100ms;\n    padding: 4px 5px;\n    display: block;\n    margin: 0;\n    background-clip: padding-box;\n    border-left: 2px solid transparent;\n    border-right: 2px solid transparent;\n}\n\n#taskbar>a:hover {\n    background-color: var(--hover);\n}\n\n#taskbar>a:active>img {\n    transform: scale(0.8);\n}\n\n#taskbar>a>img {\n    width: 26px;\n    height: 26px;\n    transition: 100ms;\n    margin: -1px 0 0 -0.5px;\n}\n\n#taskbar>a:not(.min)>img {\n    animation: task-show 800ms;\n}\n\n@keyframes task-show {\n    0% {\n        margin-top: -1px;\n        margin-bottom: 0;\n    }\n\n    40% {\n        margin-top: -6px;\n        margin-bottom: 5px;\n        transform: scaleY(1.1);\n        transform-origin: bottom;\n    }\n\n    60% {\n        margin-top: 1px;\n        margin-bottom: -2px;\n        transform: scaleY(0.8);\n        transform-origin: bottom;\n    }\n\n    100% {\n        margin-top: -1px;\n        margin-bottom: 0;\n    }\n}\n\n#taskbar>a.min>img {\n    animation: task-hide 800ms;\n}\n\n@keyframes task-hide {\n    0% {\n        margin-top: -1px;\n        margin-bottom: 0;\n    }\n\n    40% {\n        /* margin-top: 3px;\n        margin-bottom: -4px; */\n        margin-top: 0px;\n        margin-bottom: -1px;\n        transform: scaleY(0.8);\n        transform-origin: bottom;\n    }\n\n    70% {\n        margin-top: -2px;\n        margin-bottom: 1px;\n        transform: scaleY(1.05);\n        transform-origin: bottom;\n    }\n\n    100% {\n        margin-top: -1px;\n        margin-bottom: 0;\n    }\n}\n\n#taskbar>a::after {\n    content: '';\n    display: block;\n    width: 18px;\n    background: linear-gradient(90deg, var(--theme-1), var(--theme-2));\n    height: 4px;\n    border-radius: 2px;\n    position: relative;\n    bottom: 4px;\n    left: 3.2px;\n    transition: 150ms;\n}\n\n#taskbar>a:not(.foc)::after {\n    background: linear-gradient(90deg, #7f7f7f, #7f7f7f);\n    width: 12px;\n    left: 6px;\n}\n\n#taskbar>a:not(.foc):hover:after {\n    width: 16px;\n    left: 4.2px;\n}\n\n#taskbar>a.foc:hover:after {\n    width: 22px;\n    left: 1.2px;\n}\n\n#taskbar>a.min:hover:after {\n    width: 18px;\n    left: 3.2px;\n}\n\n.dock.date {\n    width: 100px;\n    padding: 0px 5px;\n    display: block;\n    text-align: center;\n    overflow: hidden;\n}\n\n.dock.date:active {\n    transform: scale(0.9);\n    filter: opacity(0.6) !important;\n}\n\n.dock.control {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    gap: 5px;\n}\n\n.dock.control>icon {\n    font-size: 17px;\n}\n\n.dock.control>* {\n    margin: 0 -2px 0 -1px;\n}\n\n.dock.control:active {\n    transform: scale(0.9);\n    filter: opacity(0.6) !important;\n}\n\n.dock.date>.date {\n    margin-top: -8px;\n}\n\n.dock.date>p {\n    transition: 200ms cubic-bezier(0.9, 0, 0.1, 1);\n}\n\n.dock.date.show>p {\n    margin-top: -50px;\n}\n\n.dock.date>.bi {\n    position: absolute;\n    display: block;\n    text-align: center;\n    left: 0;\n    top: 37px;\n    width: 100%;\n    transition: 200ms cubic-bezier(0.9, 0, 0.1, 1);\n}\n\n.dock.date.show>.bi {\n    top: 7px;\n}\n\n.dock.theme {\n    width: 40px;\n    padding-left: 3.5px;\n    text-align: center;\n    overflow: hidden;\n    box-shadow: 0 0 6px 1px var(--shadow);\n}\n\n.dock.theme:active {\n    transform: scale(0.9);\n    filter: opacity(0.6) !important;\n}\n\n.dock.theme>.dark {\n    position: absolute;\n    height: 30px;\n    width: 30px;\n    top: 5px;\n    left: 40px;\n    transition: 200ms cubic-bezier(0.9, 0, 0.1, 1);\n    opacity: 0;\n}\n\n.dock.theme>.light {\n    height: 30px;\n    width: 30px;\n    position: absolute;\n    top: 5px;\n    left: 5px;\n    transition: 200ms cubic-bezier(0.9, 0, 0.1, 1);\n    opacity: 1;\n}\n\n.dock.theme.dk>.dark {\n    left: 5px;\n    opacity: 1;\n}\n\n.dock.theme.dk>.light {\n    left: -30px;\n    opacity: 0;\n}\n\n.dock-btn {\n    transition: 200ms;\n    width: 32px;\n    height: 26px;\n    overflow: hidden;\n}\n\n.dock-btn:hover,\n.dock-btn.show {\n    filter: brightness(1.2);\n}\n\n#start-btn>svg.menu {\n    position: relative;\n    top: 27px;\n    transition: 200ms;\n}\n\n#start-btn.show>svg.menu {\n    top: 0;\n    transition-delay: 200ms;\n}\n\n#start-btn>.ico {\n    position: relative;\n    top: -32px;\n    transition: transform 200ms, top 200ms 100ms, left 200ms;\n    left: 0;\n    /* transition-delay: 100ms; */\n}\n\n#start-btn.show>.ico {\n    transform: scale(0.5);\n    top: -26px;\n}\n\n#search-btn>svg.in {\n    position: relative;\n    display: block;\n    top: -29.6px;\n    left: 2.5px;\n    width: 16px;\n    height: 16px;\n    transition: 200ms;\n}\n\n#search-btn:active {\n    transform: scale(0.85);\n}\n\n#search-btn.show>svg.in {\n    transform: scale(1.1) rotate(360deg);\n    filter: saturate(2) brightness(1.1);\n}\n\n#widgets-btn>svg {\n    display: block;\n}\n\n#widgets-btn:active {\n    transform: scale(0.85);\n}\n\n#widgets-btn>.wid2 {\n    margin-top: -19px;\n    margin-left: 10.5px;\n    height: 20px;\n    transition: 150ms cubic-bezier(0.8, 0, 0.2, 1);\n    transition-delay: 0ms;\n}\n\n#widgets-btn>.wid3 {\n    margin-top: 13px;\n    margin-left: -2px;\n    height: 31px;\n    transition: 100ms cubic-bezier(0.8, 0, 0.2, 1);\n    transition-delay: 100ms;\n}\n\n#widgets-btn>.wid4 {\n    margin-top: 4px;\n    margin-left: 11.5px;\n    height: 12px;\n    transition: 200ms cubic-bezier(0.8, 0, 0.2, 1);\n    transition-delay: 180ms;\n}\n\n#widgets-btn.show>.wid2 {\n    margin-top: -28px;\n}\n\n#widgets-btn.show>.wid3 {\n    margin-top: -20.5px;\n}\n\n#widgets-btn.show>.wid4 {\n    margin-top: -14px;\n}\n\n#copilot-btn>img {\n    width: 24px;\n    transition: 200ms cubic-bezier(0, 0, 0, 1);\n}\n\n#copilot-btn:active {\n    transform: scale(0.85) rotate(-20deg);\n}\n\n#copilot-btn.show:active {\n    transform: scale(0.85) rotate(20deg);\n}\n\n#copilot-btn.show>img {\n    transform: rotate(420deg);\n}\n\n/*** 以下开始等菜单 ***/\n\n#start-menu {\n    display: none;\n    position: fixed;\n    bottom: -600px;\n    height: 594px;\n    max-height: calc(100% - 120px);\n    width: 900px;\n    left: calc(50% - 450px);\n    border-radius: 20px;\n    background: var(--bg70);\n    backdrop-filter: blur(60px) saturate(3) contrast(0.8);\n    /* backdrop-filter: blur(80px) saturate(1.3); */\n    -webkit-backdrop-filter: blur(60px) saturate(3) contrast(0.8);\n    opacity: 0.5;\n    transition: 200ms;\n    box-shadow: 3px 3px 25px 1px var(--shadow);\n    border: 1.5px solid #6f6f6f30;\n    z-index: 91;\n    padding: 2px 4px;\n    bottom: 60px;\n    transform: translateY(650px);\n}\n\n\n:root.corner_squ {\n\n    #start-menu,\n    #search-win,\n    #datebox,\n    #control,\n    #widgets {\n        corner-shape: squircle;\n        border-radius: 45px;\n    }\n}\n\n#start-menu.show-begin {\n    display: flex;\n}\n\n#start-menu.show {\n    display: flex;\n    opacity: 1;\n    transform: none !important;\n}\n\n#start-menu.max {\n    left: 0;\n    bottom: 0;\n    transform: translateY(100%);\n    width: 100%;\n    max-height: 100%;\n    height: 100%;\n    border-radius: 0;\n    transition: 200ms cubic-bezier(0.9, 0, 0.1, 1);\n}\n\n#start-menu.max>#startmenu-l>#startmenu-user {\n    margin-bottom: 60px;\n    top: 10px;\n}\n\n#start-menu.max>#startmenu-r>.tuijian>.apps>* {\n    width: 25%;\n}\n\n\n#startmenu-l {\n    min-width: 310px;\n    height: 100%;\n    padding: 0 5px 0 10px;\n    transition: 400ms;\n    display: flex;\n    flex-direction: column;\n}\n\n#start-menu.max>#startmenu-l {\n    min-width: 300px;\n    width: 22%;\n}\n\n#startmenu-l>.input {\n    padding-left: 30px;\n}\n\ninput-before {\n    display: block;\n    font-size: 15px;\n    height: 0;\n    margin-top: -29px;\n    margin-left: 8px;\n    margin-bottom: 10px;\n    color: var(--text);\n}\n\n#startmenu-l>list {\n    margin-left: 5px;\n    margin-top: 40px;\n    flex-grow: 1;\n    overflow: auto;\n    padding-bottom: 40px;\n}\n\n#startmenu-l>list>a {\n    padding: 3px 5px 3px 10px;\n    font-size: 15px;\n    display: flex;\n    align-items: center;\n}\n\n#startmenu-l>list>a>p {\n    margin: 5px 0 5px 10px;\n}\n\n#startmenu-l>list>a>img {\n    height: 28px;\n    width: 28px;\n}\n\n#startmenu-l>list>.text {\n    padding-left: 10px;\n    font-size: 16px;\n    height: 35px;\n}\n\n#startmenu-r {\n    flex-grow: 1;\n    overflow: hidden;\n    padding-bottom: 10px;\n    display: flex;\n    flex-direction: column;\n}\n\n#startmenu-r>* {\n    opacity: 0;\n    transition: transform 200ms cubic-bezier(0, 0, 0, 1), opacity 200ms 30ms;\n    transform: translate(0, 50px);\n}\n\n#start-menu.show>#startmenu-r>* {\n    transform: none;\n    opacity: 1;\n}\n\n#startmenu-r>.row1 {\n    display: flex;\n    transition-delay: 200ms;\n}\n\n#startmenu-r>.row1>.tool {\n    width: 200px;\n    padding: 5px 10px 0 0;\n    transition: 300ms;\n    display: flex;\n    flex-direction: column;\n    align-items: end;\n}\n\n/* #startmenu-r>.row1>.tool>* {\n    float: right;\n} */\n\n#startmenu-r>.row1>.tool>.pw {\n    display: flex;\n    justify-content: right;\n    align-items: center;\n}\n\n#startmenu-r>.row1>.tool>.pw>.btn-icon.power {\n    overflow: hidden;\n    display: flex;\n    width: 33px;\n    padding: 0;\n    /* padding-left: 0; */\n}\n\n/* #startmenu-r>.row1>.tool>.pw>.btn-icon.power:active {\n    opacity: 0.7;\n} */\n\n#startmenu-r>.row1>.tool>.pw>.power.show {\n    width: 100px;\n    background-color: var(--hover-b);\n    /* box-shadow: 3px 3px 6px var(--shadow); */\n}\n\n#startmenu-r>.row1>.tool>.pw>.power.show>span.bi-power {\n    opacity: 0.7;\n    transform: scale(0.7);\n}\n\n#startmenu-r>.row1>.tool>.pw>.btn-icon.show:hover {\n    background-color: var(--hover-b);\n}\n\n#startmenu-r>.row1>.tool>.pw>.btn-icon.power>.bi {\n    /* position: relative; */\n    height: 33px;\n    padding-left: 5px;\n    padding-right: 5px;\n    transition: 200ms;\n}\n\n#startmenu-r>.row1>.tool>.pw>.btn-icon.power>i.bi-power {\n    border-radius: 10px 0 0 10px;\n}\n\n#startmenu-r>.row1>.tool>.pw>.btn-icon.power>i.bi-arrow-counterclockwise {\n    border-radius: 0 10px 10px 0;\n}\n\n/* #startmenu-r>.row1>.tool>.pw>.btn-icon>.bi-arrow-counterclockwise::before {\n    position: relative;\n    top: 1.15px;\n} */\n\n/* #startmenu-r>.row1>.tool>.btn-icon>.bi-power::before {\n    position: relative;\n    top: -2px;\n} */\n\n\n#startmenu-r>.row1>.tool>.pw>.btn-icon.show>i {\n    background-color: var(--hover-h);\n}\n\n#startmenu-r>.row1>.tool>.pw>.btn-icon.show>i:hover {\n    background-color: var(--hover);\n}\n\n#start-menu.max>#startmenu-r>.row1>.tool {\n    margin-left: 100px;\n    margin-right: 50px;\n}\n\n#startmenu-r>.row1>.folder,\n#startmenu-r>.pinned,\n#startmenu-r>.tuijian {\n    background-color: var(--card);\n    box-shadow:  0px 1px 8px var(--s3d);\n    border-radius: 10px;\n    padding: 10px;\n}\n\n\n:root.corner_squ {\n    #startmenu-r>.row1>.folder,\n    #startmenu-r>.pinned,\n    #startmenu-r>.tuijian {\n        corner-shape: squircle;\n        border-radius: 20px;\n    }\n}\n\n#startmenu-r>.row1>.folder {\n    display: flex;\n    margin: 15px 15px;\n    flex-grow: 1;\n}\n\n#startmenu-r>.row1>.folder>.sm-app {\n    height: 72px;\n}\n\n#startmenu-r>.pinned {\n    margin-right: 10px;\n    margin-left: 15px;\n    transition-delay: 300ms;\n    height: 220px;\n    display: flex;\n    flex-direction: column;\n}\n\n#startmenu-r>.pinned>.apps {\n    display: flex;\n    flex-wrap: wrap;\n    padding-left: 10px;\n    overflow: auto;\n    flex-grow: 1;\n}\n\n\n#startmenu-r>.pinned>.title {\n    padding: 5px 0 5px 10px;\n    font-size: 18px;\n    font-weight: 530;\n    display: flex;\n}\n\n#startmenu-r>.pinned>.title>* {\n    width: 100%;\n}\n\n#startmenu-r>.tuijian {\n    margin: 15px 10px 0 15px;\n    transition-delay: 450ms;\n    flex-grow: 1;\n    display: flex;\n    overflow: hidden;\n    flex-direction: column;\n}\n\n#startmenu-r>.tuijian>.apps {\n    display: flex;\n    flex-wrap: wrap;\n    padding-left: 15px;\n    overflow: auto;\n}\n\n#startmenu-r>.tuijian>.apps>* {\n    transition: 80ms;\n}\n\n#startmenu-r>.tuijian>.title {\n    padding: 5px 0 5px 10px;\n    font-size: 18px;\n    font-weight: 530;\n    display: flex;\n}\n\n#startmenu-r>.tuijian>.title>* {\n    width: 100%;\n}\n\n#startmenu-user {\n    height: 100px;\n    width: 100px;\n    border-radius: 50%;\n    position: relative;\n    top: -50px;\n    left: calc(50% - 50px);\n    background-color: var(--bggrey);\n    font-size: 80px;\n    box-shadow: 3px 3px 6px var(--shadow);\n    transition: 200ms 100ms;\n}\n\n#startmenu-user>svg {\n    position: relative;\n    top: -8px;\n    left: 15px;\n    width: 70px;\n    height: 70px;\n}\n\n.more-btn {\n    background-image: linear-gradient(100deg, var(--theme-1), var(--theme-2));\n    color: #fff;\n    border-radius: 5px;\n    font-size: 12px;\n    float: right;\n    padding: 6px 10px;\n    transition: 100ms;\n    line-height: 1;\n    display: flex;\n    align-items: center;\n}\n\n.more-btn:hover {\n    filter: brightness(1.2);\n}\n\n.more-btn>.bi {\n    font-size: 10px;\n}\n\n.sm-app {\n    width: 85px;\n    height: 80px;\n    border-radius: 10px;\n    text-align: center;\n    transition: 80ms;\n    padding: 0 3px;\n    color: #888;\n    cursor: inherit;\n}\n\n:root.corner_squ .sm-app {\n    corner-shape: squircle;\n    border-radius: 20px;\n}\n\n.sm-app.enable {\n    color: var(--text);\n    cursor: pointer;\n}\n\n.sm-app.enable:hover {\n    background-color: var(--hover);\n}\n\n.sm-app.enable>*:first-child {\n    filter: brightness(1);\n}\n\n.sm-app>*:first-child {\n    height: 40px;\n    width: 40px;\n    margin-top: 8px;\n    transition: 80ms;\n    filter: contrast(0.3) brightness(0.7);\n    text-shadow: 3px 3px 5px var(--shadow);\n}\n\n.sm-app>*:last-child {\n    margin-top: -3px;\n    transition: 80ms;\n    font-size: 11px;\n    line-height: 13px;\n}\n\n.sm-app:hover {\n    background-color: unset;\n}\n\n.sm-app:active>*:first-child {\n    transform: scale(0.8);\n}\n\n.sm-app.enable:active>*:first-child {\n    filter: brightness(0.8) opacity(0.8);\n}\n\n.tj-obj {\n    width: 50%;\n    height: 55px;\n    border-radius: 10px;\n    transition: 80ms;\n    padding: 0 3px;\n    display: flex;\n    padding: 10px 3px 10px 10px;\n    overflow: hidden;\n}\n\n:root.corner_squ .tj-obj {\n    corner-shape: squircle;\n    border-radius: 20px;\n}\n\n.tj-obj>img {\n    height: 35px;\n    width: 35px;\n    transition: 200ms;\n}\n\n.tj-obj>div>*:first-child {\n    margin: 3px 0 2px 5px;\n    font-size: 15px;\n    line-height: 13px;\n    white-space: nowrap;\n}\n\n.tj-obj>div>*:last-child {\n    font-size: 10px;\n    line-height: 13px;\n    margin-left: 6px;\n    color: #7f7f7f;\n}\n\n.tj-obj:hover {\n    background-color: var(--hover);\n}\n\n#search-win {\n    display: none;\n    position: fixed;\n    bottom: -500px;\n    height: 500px;\n    max-height: calc(90% - 120px);\n    width: 600px;\n    left: calc(50% - 300px);\n    border-radius: 20px;\n    background: var(--bg70);\n    backdrop-filter: blur(60px) saturate(3) contrast(0.8);\n    /* backdrop-filter: blur(80px) saturate(1.3); */\n    -webkit-backdrop-filter: blur(60px) saturate(3) contrast(0.8);\n    opacity: 0.8;\n    transition: 200ms;\n    box-shadow: 3px 3px 15px 1px var(--shadow);\n    border: 1.5px solid #6f6f6f30;\n    z-index: 91;\n    padding: 15px;\n}\n\n\n#search-win.show-begin {\n    display: flex;\n    flex-direction: column;\n}\n\n#search-win.show {\n    max-height: calc(100% - 120px);\n    height: 594px;\n    display: flex;\n    flex-direction: column;\n    bottom: 60px;\n    opacity: 1;\n}\n\n#search-win>.input {\n    padding-left: 30px;\n}\n\n#search-win>.tab {\n    display: flex;\n    margin-top: 25px;\n    margin-bottom: 10px;\n}\n\n#search-win>.tab>a {\n    padding: 4px 7px 3px 7px;\n    margin: 0 1px;\n    text-align: center;\n    border-radius: 10px;\n    transition: 100ms;\n}\n\n#search-win>.tab>a:hover,\n#search-win>.tab>a.now {\n    background-color: var(--hover);\n}\n\n#search-win>.tab>a.now::after {\n    content: '';\n    display: block;\n    position: relative;\n    bottom: 0;\n    background-image: linear-gradient(90deg, var(--theme-1), var(--theme-2));\n    width: calc(100% - 6px);\n    left: 3px;\n    height: 3px;\n    border-radius: 10px;\n}\n\n#search-win>.ans {\n    display: flex;\n    flex-grow: 1;\n    overflow-y: auto;\n}\n\n#search-win>.ans>.list {\n    width: 250px;\n    height: 100%;\n    margin-right: 5px;\n    overflow: auto;\n}\n\n#search-win>.ans>.list>list>a {\n    padding: 5px 5px 0px 10px;\n    display: flex;\n}\n\n#search-win>.ans>.list>list>a:active {\n    transform: scale(0.97);\n}\n\n#search-win>.ans>.list>list>a>.bi {\n    display: block;\n    margin-right: 3px;\n    font-size: 24px;\n    margin-top: -5px;\n    background-image: linear-gradient(100deg, var(--theme-1), var(--theme-2));\n    -webkit-background-clip: text;\n    background-clip: text;\n    -webkit-text-fill-color: transparent;\n}\n\n#search-win>.ans>.list>list>a>img {\n    height: 25px;\n    width: 25px;\n    margin: 0px 5px 7px 0;\n}\n\n#search-win>.ans>.view {\n    flex-grow: 1;\n    border-radius: 10px;\n    background: var(--card);\n    padding: 3px;\n    /* box-shadow: 0 3px 10px var(--s3d); */\n    border: 1.5px solid #6f6f6f30;\n    display: none;\n    overflow: auto;\n    margin: 2px 5px 5px 0;\n}\n\n#search-win>.ans>.view.show {\n    display: block;\n}\n\n#search-win>.ans>.view>.fname>.bi {\n    font-size: 70px;\n    display: block;\n    margin: 30px 0 5px 0;\n    text-align: center;\n}\n\n#search-win>.ans>.view>.fname>.name {\n    font-size: 18px;\n    text-align: center;\n}\n\n#search-win>.ans>.view>.fname>.type {\n    font-size: 13px;\n    text-align: center;\n    opacity: 0.5;\n    margin-bottom: 5px;\n}\n\n#search-win>.ans>.view>.option>list {\n    margin: 10px;\n}\n\n#search-win>.ans>.view>.option>list>a {\n    border-radius: 6px;\n    transition: 70ms !important;\n    padding: 4px 12px;\n    font-size: 14px;\n}\n\n#search-win>.ans>.view>.option>list>a:active {\n    transform: scale(0.97);\n}\n\n#widgets {\n    display: none;\n    position: fixed;\n    bottom: -600px;\n    height: 600px;\n    max-height: calc(90% - 50px);\n    width: 1000px;\n    left: calc(50% - 500px);\n    border-radius: 20px;\n    background: var(--bg70);\n    backdrop-filter: blur(60px) saturate(3) contrast(0.8);\n    /* backdrop-filter: blur(80px) saturate(1.3); */\n    -webkit-backdrop-filter: blur(60px) saturate(3) contrast(0.8);\n    transition: 200ms;\n    box-shadow: 3px 3px 15px 1px var(--shadow);\n    border: 1.5px solid #6f6f6f30;\n    z-index: 91;\n    padding: 10px 0;\n}\n\n#widgets.show-begin {\n    display: flex;\n}\n\n#widgets.show {\n    bottom: 60px;\n}\n\n#widgets>div {\n    width: calc(50% - 0.5px);\n    padding: 0 10px;\n}\n\n#widgets>.hr {\n    width: 1px;\n    height: calc(100% - 20px);\n    margin-top: 10px;\n    background-color: var(--hover-b);\n}\n\n#widgets>div>.bar {\n    height: 32px;\n    display: flex;\n    background-color: var(--bar);\n    box-shadow: 0 1px 3px var(--shadow);\n    border-radius: 10px;\n    padding-left: 10px;\n    justify-content: space-between;\n    align-items: center;\n}\n\n#widgets>div>.bar>.tit {\n    width: 100px;\n    font-size: 18px;\n}\n\n#widgets>div>.content {\n    height: calc(100% - 35px);\n    margin-top: 8px;\n}\n\n#widgets>.widgets>.content {\n    overflow: auto;\n}\n\n#widgets>.widgets>.content>.grid {\n    display: grid;\n    justify-content: center;\n    gap: 10px;\n    grid-template-columns: repeat(auto-fill, 83px);\n    grid-template-rows: repeat(auto-fill, 83px);\n    height: 100%;\n    grid-auto-flow: row;\n}\n\n#widgets>.widgets>.content>.grid>.wg {\n    transition: 100ms;\n    background-color: var(--card) !important;\n}\n\n#widgets>.widgets>.content>.template {\n    display: none;\n}\n\n#widgets>.news {\n    overflow: hidden;\n}\n\n#widgets>.news>.full-tip {\n    /* position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    right: 0; */\n    width: 100%;\n    height: 100%;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n}\n\n#widgets>.news>.full-tip.hidden {\n    display: none;\n}\n\n#widgets>.news>.full-tip>* {\n    margin-bottom: 10px;\n}\n\n#widgets>.news>.full-tip>.tit {\n    font-weight: bold;\n    font-size: large;\n}\n\n#widgets>.news>.full-tip>.info {\n    font-size: small;\n}\n\n#widgets>.news>.content {\n    overflow: auto;\n}\n\n#widgets>.news>.content .line {\n    margin-top: 10px;\n    display: grid;\n    gap: 10px;\n    grid-template-columns: repeat(5, 83px);\n    /* grid-template-rows: repeat(1, 114px); */\n}\n\n#widgets>.news>.content .card {\n    border-radius: 10px;\n    transition: 10ms;\n    background-image: linear-gradient(#00000000, #111 90%);\n    background-size: cover;\n    grid-row: 1;\n    display: flex;\n    flex-direction: column;\n    justify-content: flex-end;\n    align-items: flex-start;\n    padding: 10px;\n    height: 175px;\n}\n\n#widgets>.news>.content .card-left {\n    grid-column: 1 / 4;\n}\n\n#widgets>.news>.content .card-right {\n    grid-column: 4 / 6;\n}\n\n#widgets>.news>.content .line:nth-child(even) .card-left {\n    grid-column: 1 / 3;\n}\n\n#widgets>.news>.content .line:nth-child(even) .card-right {\n    grid-column: 3 / 6;\n}\n\n#widgets>.news>.content .card:hover {\n    box-shadow: 1px 1px 7px var(--shadow);\n    filter: brightness(0.95);\n}\n\n#widgets>.news>.content .card>.tit {\n    color: white;\n    font-size: 18px;\n    line-height: 1.2;\n    margin-bottom: 10px;\n    transition: 100ms;\n    text-shadow: 0 0 8px #000;\n}\n\n#widgets>.news>.content .card>.a {\n    color: #9dd0fb;\n    font-size: 17px;\n    text-shadow: 0 0 3px #000;\n}\n\n#widgets>.news>.content .card>.a:hover {\n    border-bottom: 2px solid;\n}\n\n#widgets>.news>.content .card.top-news {\n    color: #fff;\n    background-color: var(--bgul);\n}\n\n#widgets>.news>.content .card.top-news>.tit {\n    font-size: 20px;\n}\n\n/*** 以下任务栏各面板 ***/\n\n#datebox,\n#control {\n    display: none;\n    position: fixed;\n    bottom: -450px;\n    height: 450px;\n    width: 350px;\n    border-radius: 20px;\n    background-color: var(--bg50);\n    backdrop-filter: blur(50px) saturate(3) contrast(0.8);\n    -webkit-backdrop-filter: blur(50px) saturate(3) contrast(0.8);\n    transition: 200ms;\n    box-shadow: 3px 3px 15px 1px var(--shadow);\n    border: 1.5px solid #6f6f6f30;\n    z-index: 91;\n    padding: 10px;\n}\n\n\n#control {\n    height: 250px;\n}\n\n.dock.control * {\n    fill: var(--text);\n    color: var(--text) !important;\n}\n\n#control>.cont>.top {\n    display: grid;\n    grid-template-rows: auto auto;\n    grid-template-columns: auto auto auto;\n    gap: 15px;\n    height: 160px;\n    margin-top: 10px;\n    padding: 0px 7.5px 0px 7.5px;\n}\n\n#control>.cont>.top>div {\n    width: 100%;\n    height: 100%;\n    display: grid;\n    grid-template-rows: 70% 30%;\n    gap: 5px;\n}\n\n#control>.cont>.top>div>.icon {\n    width: 100%;\n    height: 100%;\n    background-color: var(--hover-b);\n    border-radius: 10px;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    transition: 70ms, transform 400ms cubic-bezier(0.14, 1.02, 0.17, 0.03);\n}\n\n#control>.cont>.top>div>.icon.active {\n    background-image: linear-gradient(120deg, var(--theme-1), var(--theme-2));\n}\n\n#control>.cont>.top>div>.icon.active>icon {\n    color: #ffffff;\n}\n\n#control icon {\n    background-image: linear-gradient(120deg, var(--theme-1), var(--theme-2));\n    -webkit-background-clip: text;\n    background-clip: text;\n    color: transparent;\n    font-size: 18px;\n}\n\n#control>.cont>.top>div>.tit {\n    font-size: 85%;\n    text-align: center;\n}\n\n#control>.cont>.top>div>.icon:hover {\n    filter: brightness(1.1);\n}\n\n#control>.cont>.top>div>.icon:hover {\n    background-color: var(--card);\n}\n\n#control>.cont>.top>div>.icon:active {\n    transform: scale(0.93);\n}\n\n#control>.cont>.bottom {\n    padding: 20px;\n}\n\n#control>.cont>.bottom>.brightness>.icon {\n    margin-right: 10px;\n    vertical-align: -0.3em;\n    display: inline-block;\n}\n\n#control>.cont>.bottom>.brightness>.icon>icon {\n    font-size: 20px !important;\n}\n\n#control>.cont>.bottom>.brightness>.range-container {\n    width: calc(100% - 43px);\n    height: 4.5px;\n    background-image: linear-gradient(100deg, var(--theme-1), var(--theme-2));\n    border-radius: 7px;\n    display: inline-block;\n}\n\n#control>.cont>.bottom>.brightness>.range-container>.after {\n    border-radius: 0px 7px 7px 0px !important;\n}\n\n#control>.cont>.bottom>.brightness>.range-container>.after {\n    height: 4.5px;\n    position: relative;\n    background-color: var(--bg);\n    bottom: 0px;\n    width: 0px;\n    border-radius: 7px;\n}\n\n#control>.cont>.bottom>.brightness>.range-container>.slider-btn {\n    height: 20px;\n    border-radius: 10px;\n    background-image: linear-gradient(to top, var(--theme-1), var(--theme-2));\n    position: relative;\n    width: 20px;\n    bottom: 12px;\n    margin-left: 100%;\n    transform: translateX(-10px);\n    border: solid var(--msg);\n    border-width: 5px;\n    transition: 0ms, border-width 100ms;\n}\n\n#control>.cont>.bottom>.brightness>.range-container>.slider-btn:hover,\n#control>.cont>.bottom>.brightness>.range-container.active>.slider-btn {\n    /* filter: brightness(0.8); */\n    border-width: 3.5px;\n}\n\n#control>.cont>.bottom>.brightness>.range-container>.slider-btn:active {\n    border-width: 6px;\n}\n\n#datebox.show-begin,\n#control.show-begin {\n    display: flex;\n    flex-direction: column;\n}\n\n#datebox.show,\n#control.show {\n    display: flex;\n    flex-direction: column;\n    bottom: 60px;\n}\n\n#datebox>.tit {\n    padding: 3px 5px;\n    margin: 0;\n}\n\n#datebox>.tit>.time {\n    font-size: 35px;\n    line-height: 50px;\n    height: 50px;\n    /* padding: inherit; */\n}\n\n#datebox>.tit>.date,\n#datebox>.tit>#lunar {\n    margin-left: 5px;\n}\n\n#datebox>.cont {\n    width: 100%;\n    flex-grow: 1;\n}\n\n#datebox>.cont>.head {\n    width: 100%;\n    display: flex;\n}\n\n#datebox>.cont>.head>p {\n    width: 46.5px;\n    text-align: center;\n}\n\n#datebox>.cont>.body {\n    display: flex;\n    flex-wrap: wrap;\n    margin-top: 5px;\n}\n\n#datebox>.cont>.body>* {\n    width: 46.5px;\n    height: 46.5px;\n    border-radius: 50%;\n    text-align: center;\n    padding-top: 10px;\n}\n\n#datebox>.cont>.body>p.today {\n    background: linear-gradient(120deg, var(--theme-1), var(--theme-2));\n    color: #eee;\n}\n\n#datebox>.cont>.body>p:hover {\n    background-color: var(--hover);\n}\n\n/*** 以下桌面 ***/\n\n#desktop {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: calc(100% - 50px);\n    z-index: 0;\n    display: flex;\n    flex-direction: column;\n    flex-wrap: wrap;\n    align-content: flex-start;\n    transition: 30ms;\n    justify-content: flex-start;\n    align-items: baseline;\n}\n\n#desktop>div {\n    width: 85px;\n    height: 84px;\n    text-overflow: ellipsis;\n    border-radius: 7px;\n    text-align: center;\n    margin: 8px 10px 2px 10px;\n    padding: 0 3px 3px 3px;\n    z-index: 3;\n    transition: 80ms;\n}\n\n\n:root.corner_squ #desktop>div {\n    corner-shape: squircle;\n    border-radius: 15px;\n}\n\n#desktop>div:hover {\n    background-color: var(--hover);\n}\n\n#desktop>div:active {\n    opacity: 0.7;\n}\n\n#desktop>div>img {\n    width: 65px;\n    height: 65px;\n}\n\n#desktop>div.b>img {\n    width: 40px;\n    height: 40px;\n    margin: 5px;\n}\n\n#desktop>div>p {\n    line-height: 15px;\n    font-size: 13px;\n    color: #fff;\n    text-shadow: 2px 2px 4px var(--shadow), 0 0 3px #000;\n    margin-top: -6px;\n}\n\n#desktop>.selection {\n    position: fixed;\n    border: 2px solid var(--href);\n    /* border-image: linear-gradient(120deg, var(--theme-1), var(--theme-2)) 4; */\n    border-radius: 5px;\n    background-color: var(--hover-half);\n    display: none;\n}\n\n#desktop-widgets {\n    display: grid;\n    /* justify-content: center; */\n    gap: 10px;\n    grid-template-columns: repeat(auto-fill, 83px);\n    grid-template-rows: repeat(auto-fill, 83px);\n    position: absolute;\n    top: 0;\n    right: 0;\n    width: 100%;\n    height: calc(100% - 50px);\n    /* width: max-content; */\n    grid-auto-flow: row;\n    direction: rtl;\n    padding: 20px;\n    pointer-events: none;\n}\n\n#desktop-widgets * {\n    direction: ltr;\n    pointer-events: auto;\n}\n\n#desktop-widgets>* {\n    background-color: var(--bg70);\n    backdrop-filter: blur(180px) saturate(1.5);\n    filter: none;\n    -webkit-backdrop-filter: blur(80px) saturate(1.5);\n    box-shadow: 3px 3px 20px 3px var(--shadow);\n    transition: all 500ms;\n}\n\n#desktop-widgets>*.moving {\n    transition: none;\n}\n\n#desktop-widgets>*.moving>.content {\n    opacity: 0.5;\n}\n\n#desktop-widgets>*.notrans {\n    transition: none !important;\n}\n\n#desktop-widgets>.widgets-move {\n    display: none;\n    background-color: #3daee922;\n    border: 1px solid #3daee9;\n    border-radius: 10px;\n    backdrop-filter: none;\n    -webkit-backdrop-filter: none;\n    box-shadow: none;\n}\n\n#desktop-widgets>.widgets-move.show {\n    display: block;\n}\n\n#desktop-widgets.edit>* .content * {\n    pointer-events: none;\n}\n\n#desktop-widgets.edit>* {\n    cursor: grab;\n}\n\n#desktop-widgets.edit>*>.content {\n    transition: opacity 500ms;\n}\n\n\n#desktop-widgets.edit>*>.content:hover {\n    opacity: 0.5;\n}\n\n#desktop-editbar-container {\n    width: 100%;\n    position: fixed;\n    top: -50px;\n    left: 0px;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    transition: top 500ms;\n}\n\n#desktop-editbar-container.show {\n    top: 0px;\n}\n\n#desktop-editbar {\n    background-color: var(--bg70);\n    backdrop-filter: blur(180px) saturate(1.5);\n    filter: none;\n    -webkit-backdrop-filter: blur(80px) saturate(1.5);\n    box-shadow: 3px 3px 20px 3px var(--shadow);\n    border-radius: 0px 0px 8px 8px;\n    display: flex;\n    gap: 13px;\n    padding: 4px 20px;\n}\n\n#desktop-editbar>* {\n    transition: background-color 80ms;\n    padding: 1px 7px;\n    border-radius: 5px;\n}\n\n#desktop-editbar>*:hover {\n    background-color: var(--hover);\n}\n\n\n/*** 以下右键菜单 ***/\n\n#cm {\n    display: none;\n    position: absolute;\n    z-index: 101;\n    border-radius: 10px;\n    border: 1.5px solid #6f6f6f30;\n    background: var(--contextmeu);\n    backdrop-filter: blur(25px) saturate(2);\n    min-width: 200px;\n    overflow: hidden;\n    padding: 0px 6px;\n    max-height: 0;\n    width: max-content;\n    transition: 110ms, max-height 200ms ease-in-out, top 100ms, left 100ms, padding 200ms ease-in-out, box-shadow 500ms;\n    opacity: 0;\n}\n\n:root.corner_squ #cm {\n    corner-shape: squircle;\n    border-radius: 25px;\n}\n\n#cm.show {\n    max-height: 100%;\n    padding: 6px;\n    box-shadow: 3px 3px 25px 0px var(--shadow);\n    opacity: 1;\n}\n\n#cm>list {\n    transform: translate(0, -50%);\n    opacity: 0;\n    transition: transform 200ms ease-in-out, opacity 150ms 50ms;\n}\n\n#cm.show>list {\n    opacity: 1;\n    transform: none;\n}\n\n#cm.show-begin {\n    display: block;\n}\n\n#cm>list>a {\n    padding: 4.5px 12px;\n    margin: 1px 0;\n    border-radius: 6px;\n    font-size: 15px;\n    display: flex;\n    line-height: 19px;\n}\n\n#cm>list>a>.bi {\n    font-size: 17px;\n    margin-right: 10px;\n    display: block;\n}\n\n#cm>list>a>info {\n    float: right;\n    text-align: end;\n    color: #888;\n    flex-grow: 1;\n}\n\n#cm>list>*:not(hr):hover {\n    background-color: var(--hover-b);\n}\n\n/*** 以下下拉菜单 ***/\n\n#dp {\n    display: none;\n    position: absolute;\n    box-shadow: 3px 3px 6px 1px var(--shadow);\n    z-index: 101;\n    border-radius: 10px;\n    border: 1.5px solid #6f6f6f30;\n    background: var(--contextmeu);\n    backdrop-filter: blur(20px) saturate(2);\n    min-width: 200px;\n    overflow: hidden;\n    transition: max-height 200ms ease-in-out;\n    padding: 4px;\n    max-height: 0;\n}\n\n#dp.show-begin {\n    display: block;\n    transition: max-height 200ms ease-in-out;\n}\n\n#dp.show {\n    max-height: 100%;\n}\n\n#dp>list>a {\n    padding: 4.5px 10px;\n    margin: 0;\n    transition: 80ms;\n    border-radius: 7px;\n    font-size: 14px;\n    display: flex;\n    line-height: 19px;\n}\n\n#dp>list>a>info {\n    float: right;\n    text-align: end;\n    color: #888;\n    flex-grow: 1;\n}\n\n#dp>list>a>.bi {\n    font-size: 19px;\n    margin-right: 4px;\n    display: block;\n}\n\n#dp>list>*:not(hr):hover {\n    background-color: var(--hover-b);\n}\n\n/*** 以下悬停提示 ***/\n\n#descp {\n    position: fixed;\n    background: var(--contextmeu);\n    border-radius: 6px;\n    box-shadow: 2px 2px 10px var(--shadow);\n    z-index: 102;\n    border: 1.5px solid #4f4f4f30;\n    backdrop-filter: blur(15px) saturate(2);\n    font-size: 13px;\n    padding: 5px 10px;\n    margin: 0;\n    transition: opacity 100ms;\n    opacity: 0;\n    display: none;\n}\n\n\n:root.corner_squ #descp {\n    corner-shape: squircle;\n    border-radius: 15px;\n}\n\n#descp.show {\n    opacity: 1;\n}\n\n#descp.show-begin {\n    display: block;\n}\n\n/*** 以下消息 ***/\n\n.msg {\n    background-color: var(--bg70);\n    backdrop-filter: blur(50px) saturate(130%);\n    position: fixed;\n    right: -430px;\n    bottom: 60px;\n    width: 430px;\n    min-height: 150px;\n    z-index: 100;\n    border-radius: 10px;\n    box-shadow: 3px 3px 6px 1px var(--shadow);\n    padding: 10px 20px;\n    font-size: 15px;\n    display: flex;\n    transition: 400ms 200ms cubic-bezier(0.9, 0, 0.1, 1), transform 200ms;\n    cursor: pointer;\n    border: 1.5px solid #6f6f6f30;\n    transform: scale(0.9);\n}\n\n.msg:hover {\n    transition: 80ms;\n    background-color: var(--msg);\n}\n\n.msg.show {\n    right: 20px;\n    transform: none;\n}\n\n.msg>.main {\n    flex-grow: 1;\n}\n\n.msg>.hide {\n    height: 35px;\n    width: 35px;\n    min-width: 35px;\n    padding-left: 6px;\n    margin-right: -5px;\n    border-radius: 5px;\n    font-size: 23px;\n    transition: 100ms;\n}\n\n.msg>.hide:hover {\n    padding-left: 0;\n}\n\n.msg>.hide:active {\n    padding-left: 25px;\n    transform: scale(0.9);\n}\n\n.msg:not(.show)>.hide {\n    padding-left: 25px;\n}\n\n.msg>.main>.tit {\n    font-size: 20px;\n    margin-bottom: 5px;\n    transition: 100ms;\n}\n\n.msg>.main>.cont {\n    padding-left: 10px;\n    transition: 100ms;\n}\n\n/*** 以下提示对话框 ***/\n\n#notice-back {\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background-color: #00000070;\n    position: fixed;\n    z-index: 99;\n    justify-content: center;\n    align-items: center;\n    display: none;\n}\n\n#notice-back.show {\n    display: flex;\n}\n\n#notice {\n    overflow: hidden;\n    backdrop-filter: blur(20px);\n    display: block;\n    position: absolute;\n    min-width: 300px;\n    min-height: 100px;\n    background: var(--msg);\n    /* left: 30%; */\n    border-radius: 12px;\n    box-shadow: 0 1px 2px #44444460, 0 1px 30px var(--shadow);\n    border: 1px solid var(--hr);\n    transition: 200ms !important;\n    opacity: 0;\n    transform: scale(0.94) translateY(20px);\n}\n\n:root.corner_squ #notice {\n    corner-shape: squircle;\n    border-radius: 20px;\n}\n\n#notice.show {\n    opacity: 1;\n    transform: none;\n}\n\n#notice>.cnt {\n    padding: 15px 20px 30px 20px;\n}\n\n#notice>.cnt>.tit {\n    font-size: 30px;\n}\n\n#notice>.cnt>list {\n    margin-top: 10px;\n}\n\n#notice>.cnt>list>* {\n    padding: 4px 10px;\n}\n\n#notice>.cnt>list>a:hover {\n    background-color: var(--hover-b);\n}\n\n#notice>.btns {\n    min-height: 60px;\n    background: var(--unfoc);\n    display: flex;\n    flex-direction: row-reverse;\n    align-items: center;\n    padding-right: 15px;\n    border-top: 1.5px solid var(--hr);\n}\n\n#notice>.btns>.btn {\n    margin-left: 10px;\n    background-color: var(--msg);\n    min-width: 100px;\n    text-align: center;\n    border-radius: 8px;\n    transition: 50ms;\n    box-shadow: 0 1px 3px 1px var(--s3d);\n}\n\n:root.corner_squ #notice>.btns>.btn {\n    corner-shape: squircle;\n    border-radius: 15px;\n}\n\n#notice>.btns>.btn.main {\n    color: #fff;\n    background-color: var(--href);\n}\n\n#notice>.btns>.btn:hover {\n    filter: brightness(1.2);\n}\n\n#notice>.btns>.btn:active {\n    transform: none;\n    opacity: 0.7;\n}\n\n/*** 以下窗口相关 ***/\n\n.window {\n    position: absolute;\n    height: 80%;\n    width: 70%;\n    transform: scale(0.7);\n    background-color: var(--unfoc);\n    border-radius: 10px;\n    border: 1.5px solid #6f6f6f30;\n    display: none;\n    opacity: 0;\n    transition: cubic-bezier(0.9, 0, 0.1, 1) 200ms;\n    overflow: hidden;\n    box-shadow: 2px 2px 5px var(--shadow);\n    z-index: 90;\n}\n\n:root.mica .window.foc {\n    /* background: url(bg-dark-mica.jpg) no-repeat fixed center; */\n    background: var(--mica) no-repeat fixed center;\n    background-size: cover;\n    backdrop-filter: none;\n    -webkit-backdrop-filter: none;\n    background-color: unset;\n    background-color: var(--unfoc);\n}\n\n:root.corner_squ .window {\n    corner-shape: squircle;\n    border-radius: 20px;\n}\n\n.window.foc>.titbar {\n    opacity: 1;\n}\n\n.window.foc {\n    background: var(--bg70);\n    backdrop-filter: saturate(3.5) contrast(0.8) blur(60px);\n    filter: none;\n    -webkit-backdrop-filter: saturate(3.5) contrast(0.8) blur(60px);\n    box-shadow: 3px 3px 20px 3px var(--shadow);\n}\n\n.window.webapp {\n    background: none;\n    backdrop-filter: none;\n}\n\n.window.webapp>.titbar {\n    outline: var(--href) solid 2px;\n    margin-bottom: 1px;\n    background-color: var(--unfoc);\n    opacity: 1;\n}\n\n.window.webapp.load,\n.window.webapp.content {\n    background: var(--unfoc);\n}\n\n.window.webapp.foc>.titbar {\n    background-color: var(--bg70);\n    backdrop-filter: blur(80px) saturate(1.3);\n    --webkit-backdrop-filter: blur(80px) saturate(1.3);\n}\n\n:root.mica .window.webapp.foc>.titbar {\n    background: none;\n    backdrop-filter: none;\n    --webkit-backdrop-filter: none;\n}\n\n.window.min {\n    top: calc(95%) !important;\n    left: 15% !important;\n    transform: scale(0.3) !important;\n    transition: cubic-bezier(0.9, 0, 0.1, 1) 200ms, top 200ms 100ms, backdrop-filter background-color 0s;\n}\n\n.window.show-begin {\n    display: flex;\n    flex-direction: column;\n}\n\n.window.show {\n    transform: none;\n    height: 80%;\n    width: 70%;\n    opacity: 1;\n    display: flex;\n    flex-direction: column;\n}\n\n.window>.loadback {\n    height: 100%;\n    width: 100%;\n    position: absolute;\n    display: none;\n}\n\n.window>.loadback>.icon {\n    height: 90px;\n    width: 90px;\n    margin: 30px;\n}\n\n.window.load>.loadback {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-direction: column;\n}\n\n.window.load>.content {\n    opacity: 0;\n}\n\n.window.calc {\n    height: 395px;\n    width: 262px;\n}\n\n.window.notepad-fonts {\n    height: 500px;\n    width: 430px;\n}\n\n.window.run {\n    width: 420px;\n    height: 220px;\n    left: 20px;\n    bottom: 60px;\n}\n\n.window.notrans {\n    transition: none !important;\n}\n\n.window>.titbar {\n    min-height: 38px;\n    /* background-color: green; */\n    padding: 0 0 0 9px;\n    display: flex;\n    position: initial;\n    color: var(--text);\n    opacity: 0.5;\n    overflow: hidden;\n}\n\n.window>.titbar>p {\n    font-size: 15px;\n    margin-top: 9px;\n    flex-grow: 1;\n}\n\n.window>.titbar>.icon {\n    margin: 9px 8px 0 3px;\n    height: 22px;\n    width: 22px;\n}\n\n.window>.titbar>div {\n    width: max-content;\n    min-width: max-content;\n}\n\n.window>.content {\n    width: 100%;\n    height: 100%;\n    min-height: 0px !important;\n}\n\n/* \n问题：当我打开edge浏览器，并点击窗口最大化时，窗口确实覆盖了整个屏幕。但是在edge打开某个网页时，\n窗口并没有覆盖到任务栏的位置，底下有一排巨大的空隙。\n\n我把100%的高度设置为120%，好像问题就解决了？\n\n我是小白，改着玩的，不知道会不会有其他bug发生，大佬们多多指教。\n\ngithub-red2026 */\n\n/* 定义当窗口处于最大状态时的样式 */\n.window.max {\n    width: 100% !important;\n    height: 100% !important;\n\n\n    /* 定位属性，确保窗口从屏幕的左上角开始 */\n    left: 0 !important;\n    top: 0 !important;\n    /* 移除圆角和边框，使窗口边缘与屏幕边缘无缝对接 */\n    border-radius: 0;\n    border: none;\n    /* 定义过渡效果，确保窗口在最大化时有平滑的过渡 */\n    transition: cubic-bezier(0.9, 0, 0.1, 1) 200ms, top 200ms 100ms, backdrop-filter, background 0ms;\n}\n\n.window.left {\n    left: 0 !important;\n    top: 0 !important;\n    width: 50% !important;\n    height: 100% !important;\n}\n\n.window.right {\n    left: 50% !important;\n    top: 0 !important;\n    width: 50% !important;\n    height: 100% !important;\n}\n\n/* 窗口控件 */\n\n.wbtg {\n    /* height: 100%; */\n    height: 33px;\n    float: right;\n    width: 45px;\n    text-align: center;\n    padding-top: 6px;\n    font-size: 13px;\n    transition: 50ms;\n    border-radius: 3px;\n}\n\n.wbtg.red {\n    border-top-right-radius: 10px;\n}\n\n.wbtg:hover {\n    background-color: var(--hover-b);\n}\n\n.wbtg:active {\n    opacity: 0.6;\n}\n\n.wbtg.red:hover {\n    background-color: #d80d1c;\n    color: #fff;\n}\n\n.window.max .wbtg.red {\n    border-top-right-radius: 3px;\n}\n\n#window-fill {\n    background-color: var(--fill);\n    backdrop-filter: blur(25px);\n    display: none;\n    position: fixed;\n    transition: all 200ms;\n    margin: 10px;\n    border-radius: 10px;\n    box-shadow: 0 0 10px 1px var(--shadow);\n    border: 1.5px solid #6f6f6f30;\n}\n\n#window-fill.top {\n    width: 0;\n    height: 0;\n    top: 0;\n    left: 50%;\n    display: block;\n}\n\n#window-fill.top.fill {\n    width: calc(100% - 20px);\n    height: calc(100% - 20px);\n    top: 0;\n    left: 0;\n}\n\n#window-fill.left {\n    width: 0;\n    height: 0;\n    top: 50%;\n    left: 0;\n    display: block;\n}\n\n#window-fill.left.fill {\n    width: calc(50% - 20px);\n    height: calc(100% - 20px);\n    top: 0;\n    left: 0;\n}\n\n#window-fill.right {\n    width: 0;\n    height: 0;\n    top: 50%;\n    left: 100%;\n    display: block;\n}\n\n#window-fill.right.fill {\n    width: calc(50% - 20px);\n    height: calc(100% - 20px);\n    top: 0;\n    left: 50%;\n}\n\n.window>.resize-bar {\n    z-index: 1 !important;\n}\n\n.window.max>.resize-bar {\n    display: none !important;\n}\n\n.window>.resize-bar>.resize-knob {\n    position: absolute;\n}\n\n.window>.resize-bar>.resize-knob.top {\n    left: 7px;\n    top: 0px;\n    height: 7px;\n    width: calc(100% - 14px);\n    cursor: ns-resize;\n}\n\n.window>.resize-bar>.resize-knob.bottom {\n    left: 7px;\n    bottom: 0px;\n    height: 7px;\n    width: calc(100% - 14px);\n    cursor: ns-resize;\n}\n\n.window>.resize-bar>.resize-knob.left {\n    top: 7px;\n    left: 0px;\n    height: calc(100% - 14px);\n    width: 7px;\n    cursor: ew-resize;\n}\n\n.window>.resize-bar>.resize-knob.right {\n    top: 7px;\n    right: 0px;\n    height: calc(100% - 14px);\n    width: 7px;\n    cursor: ew-resize;\n}\n\n.window>.resize-bar>.resize-knob.top-left {\n    top: 0px;\n    left: 0px;\n    width: 7px;\n    height: 7px;\n    cursor: nwse-resize;\n}\n\n.window>.resize-bar>.resize-knob.bottom-right {\n    bottom: 0px;\n    right: 0px;\n    width: 7px;\n    height: 7px;\n    cursor: nwse-resize;\n}\n\n.window>.resize-bar>.resize-knob.bottom-left {\n    bottom: 0px;\n    left: 0px;\n    width: 7px;\n    height: 7px;\n    cursor: nesw-resize;\n}\n\n.window>.resize-bar>.resize-knob.top-right {\n    top: 0px;\n    right: 0px;\n    width: 7px;\n    height: 7px;\n    cursor: nesw-resize;\n}\n\n\n\n/** 一些奇怪的东西 **/\n\n.window.whiteboard>.titbar>p {\n    color: #000 !important;\n    ;\n}\n\n:root.dark .window.whiteboard>.titbar>p {\n    text-shadow: 0 0 5px #fff, 0 0 5px #fff;\n}\n\n.save-item {\n    white-space: nowrap;\n    padding: 5px;\n    border-radius: 5px;\n    padding-top: 3px;\n}\n\n.save-item:hover {\n    background-color: #aaa;\n    cursor: pointer;\n    transition: .3s;\n}\n\n\nbody>.container {\n    display: none;\n    /* 默认隐藏 */\n    flex-direction: column;\n    align-items: center;\n    gap: 20px;\n    text-align: center;\n    position: fixed;\n    z-index: 102;\n    height: 100%;\n    width: 100%;\n    background: var(--bg70);\n    justify-content: center;\n    align-items: center;\n    backdrop-filter: blur(50px) saturate(5);\n    -webkit-backdrop-filter: blur(80px) saturate(1.5);\n}\n\nbody>.container>.image-container {\n    position: relative;\n    width: 10%;\n    height: 10%;\n    left: 6%;\n}\n\nbody>.container>.image-container>.svg {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n}\n\n.translucent {\n    opacity: 0.5;\n}\n\n.rotating {\n    animation-delay: 0.6s !important;\n    animation: rotate 1s cubic-bezier(0.77, 0.02, 0.16, 1.04);\n    transform-origin: 0% 100%;\n    animation-fill-mode: forwards;\n}\n\n@keyframes rotate {\n    from {\n        transform: rotate(0deg);\n    }\n\n    to {\n        transform: rotate(-90deg);\n    }\n}\n\n#taskbar-preview {\n    position: fixed;\n    bottom: 60px;\n    background: var(--card-bg);\n    backdrop-filter: blur(20px) saturate(1.5);\n    -webkit-backdrop-filter: blur(20px) saturate(1.5);\n    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15);\n    border: 1px solid rgba(255, 255, 255, 0.08);\n    border-radius: 8px;\n    padding: 12px;\n    display: none;\n    z-index: 10000;\n    transition: all 0.2s ease-out;\n    opacity: 0;\n    transform: translateY(10px);\n    pointer-events: none;\n}\n\n#taskbar-preview.show {\n    display: block;\n    opacity: 1;\n    transform: translateY(0);\n}\n\n#taskbar-preview .preview-title {\n    font-size: 13px;\n    margin-bottom: 10px;\n    display: flex;\n    align-items: center;\n    color: var(--text);\n    opacity: 0.9;\n}\n\n#taskbar-preview .preview-title img {\n    width: 16px;\n    height: 16px;\n    margin-right: 8px;\n}\n\n#taskbar-preview .preview-content {\n    width: 280px;\n    height: 180px;\n    background: var(--hover);\n    border-radius: 6px;\n    overflow: hidden;\n    border: 1px solid rgba(255, 255, 255, 0.05);\n}\n\n#taskbar-preview .preview-content img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    pointer-events: none;\n}"
  },
  {
    "path": "desktop.html",
    "content": "<!-- Windows 12 网页版是一个开放源项目,\n\t希望让用户在网络上预先体验 Windows 12,\n\t内容可能与 Windows 12 正式版本不一致。\n\t使用标准网络技术，例如 HTML、CSS 和 JavaScript，\n\t此项目绝不附属于微软，且不应与微软操作系统或产品混淆，\n\t这也不是 Windows365 cloud PC\n\t本项目中微软、Windows 和其他示范产品是微软公司的商标 -->\n<!--------禁止格式化本文档!  -------->\n<!-----No Formatting the Code! ---->\n<!-- 编辑前务必认真阅读，有不合规范之pr，视情况或要求整改或不予合并 -->\n<!-- 开发须知：\n\n旨为统一代码风格，增加其可读性，也为他人开发便利，以下内容所有开发者、贡献者务必严格遵守，感谢配合！\n\n对于HTML文件的规定\n1. 绝对严格禁止格式化本 html 文档，否则坚决拒绝合并\n2. 对于id属性，除必须外一般不使用id属性，尽量以class替代。若必须使用，切记：\n\t1. 若非 body 下直接的子元素，原则上不设置 id。若确需，参见下方条目 3\n\t2. 所取 id 必须有意义，且不可有与其他 id 重复者\n\t3. 对于非 body>* 元素，坚决不得以单个单词作为 id。请按照 “父元素标志词-(...)-id名称” 进行命名。如：taskmgr-search, setting-search等\n3. 对于 class 属性：\n\t1. 仅对必要的元素分配 class\n\t2. 所取的名字必须要有意义\n\t3. 使用css选择器时，确保所选元素准确定位且无其他匹配，以 id 选择器开头来选择为佳\n4. 对于压行，可在保证可读性前提下自由处置，参考规范：\n\t1. 对于文件中的 svg 图像，压为一行\n\t2. 对于连续3个以上的连续结束标签，视情况压为一行\n\t3. 对于较短的多个并列雷同的项，每项视情况压为一行，如list中的内容\n\t4. 对于不更改、无具体意义的内容，可视情况处置\n\n一些全局性可用的内容，供使用和统一风格：\n.a 可点击元素，可用于各种元素。用于 <a> 可去除下划线、颜色等。\n\t与 .jump 合用于设置了 href 属性的 <a> 链接\n.button 经典按钮，常与 .a 合用\nlist 列表>\n\t<a> 列表项，常与.a合用\n\t.text 文本内容，不可点击\n.buttons 按钮组>\n\t.submit 确认，常与.a合用\n\t.cancel 取消，常与.a合用\n.act 经典点击动画\n.input 输入框\n其他自行研究\n\n有以下 js 函数可用：\nsetData(key, value) 本地存储信息。注意管理，谨慎使用\nlocalStorage.getItem(key) 与前者配合使用，以读取存储信息\n\nstop(event) 停止事件向父级传递事件（停止冒泡），event变量照抄。可使祖先元素接受不到发生的对应事件。\n\nshowcm(event, id, arg) 显示右键菜单，使用方法：oncontextmenu=\"return showcm(event,'标识',arg);\"，\n\t参考 desktop.js 中 cms 中的写法，需提前在 cms 中定义提示内容及其标识符。showcm 带有 stop(event), 无需另加\nopenapp(name) 打开窗口，用法：openapp('程序（窗口）名称')，\n\t程序（窗口）名称就是想要显示的窗口.window的另一个类名，须设置 apps[程序（窗口）名称]对象和init方法\nshownotice(name) 打开提示窗口，用法：shownotice('提示内容标识符')，\n\t参考 desktop.js 中 nts 中的写法，需提前在 nts 对象中定义提示内容及其标识符\nclosenotice() 与前者配合，关闭提示窗口\nshowwin(name) 显示窗口，除特殊用途外不建议使用，用法：showwin('窗口名称')，注意：窗口名称就是想要显示的窗口.window的另一个类名\nhidewin(name) 关闭窗口，用法：hidewin('程序（窗口）名称')，注意：程序（窗口）名称就是想要显示的窗口.window的另一个类名\ntoggletheme() 切换主题\n\n关于 App 添加：\n\n壹 常规 app\n\t1. 界面与(伪)后端的开发，js 在 module/apps.js 中，css 和资源文件在 apps/style 和 apps/icons 中\n\t2. 绘制图标，存储于 icon 中，注意后缀名，参考 desktop.js 中 @icon 的说明\n\t3. 在开始菜单 (@#startmenu-l>list) 中添加你的应用\n\n贰 webapp，即使用 iframe 嵌套网页的应用：\n\t1. 确保目标网页不阻止跨域嵌套，允许 iframe 嵌套\n\t2. html 内容参考 @.window.bilibili.webapp\n\t3. 在 module/apps.js 中参考 @apps[bilibili]\n\t4. 在 module/apps.js 中 @apps[webapps] 里补充 appid\n\n欢迎补充~\n-->\n<!DOCTYPE html>\n<html lang=\"en\" class=\"mica\">\n\n<head>\n\t<meta charset=\"UTF-8\" />\n\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\n\t<meta name=\"format-detection\" content=\"telephone=no\" />\n\n\t<link rel=\"stylesheet\" href=\"./desktop.css\">\n\t<link rel=\"stylesheet\" href=\"bootstrap-icons.css\">\n\t<!-- Apps style -->\n\t<link rel=\"stylesheet\" href=\"apps/style/setting.css\">\n\t<link rel=\"stylesheet\" href=\"apps/style/explorer.css\">\n\t<link rel=\"stylesheet\" href=\"apps/style/calc.css\">\n\t<link rel=\"stylesheet\" href=\"apps/style/about.css\">\n\t<link rel=\"stylesheet\" href=\"apps/style/notepad.css\">\n\t<link rel=\"stylesheet\" href=\"apps/style/terminal.css\">\n\t<link rel=\"stylesheet\" href=\"apps/style/edge.css\">\n\t<link rel=\"stylesheet\" href=\"apps/style/camera.css\">\n\t<link rel=\"stylesheet\" href=\"apps/style/pythonEditor.css\">\n\t<link rel=\"stylesheet\" href=\"apps/style/run.css\">\n\t<link rel=\"stylesheet\" href=\"apps/style/whiteboard.css\">\n\t<link rel=\"stylesheet\" href=\"apps/style/imgviewer.css\">\n\t<link rel=\"stylesheet\" href=\"apps/style/code-editor.css\">\n\t<link rel=\"stylesheet\" href=\"apps/style/mediaplayer.css\">\n\t<link rel=\"stylesheet\" href=\"apps/style/defender.css\">\n\t<link rel=\"stylesheet\" href=\"apps/style/taskmgr.css\">\n\t<link rel=\"stylesheet\" href=\"apps/style/msstore.css\">\n\t<link rel=\"stylesheet\" href=\"apps/style/word.css\">\n\t<link rel=\"stylesheet\" href=\"apps/style/copilot.css\">\n\t<link rel=\"stylesheet\" href=\"apps/style/recognition.css\">\n\t\n\t\n\t<link rel=\"manifest\" href=\"pwa/manifest.json\">\n\t<link rel=\"shortcut icon\" href=\"./pwa/logo.png\" type=\"image/x-icon\">\n\t<link rel=\"stylesheet\" href=\"apps/style/login.css\">\n\t<!-- 模块 -->\n\t<link rel=\"stylesheet\" href=\"module/widget.css\">\n\t<link rel=\"stylesheet\" href=\"module/tab.css\">\n\n\t\n\t<!-- 风水宝地，不可移动 -->\n\t<script src=\"./scripts/jq.min.js\"></script>\n\t<script src=\"./scripts/jquery.i18n.properties.js\"></script>\n\n\t<base target=\"_blank\">\n\n\t<title>Windows 12 网页版</title>\n\t<meta name=\"description\" content=\"Windows 12 网页版是一个在线体验 Windows 12 操作系统的开源项目, 使用 HTML、CSS 和 JavaScript 模拟 Windows 12 操作系统的界面与交互。\">\n</head>\n\n\n<body>\n\t<audio src=\"media/startup.mp3\" id=\"startup-music\"></audio>\n\t<div id=\"loadback\" style=\"background-color:#000;width:100%;height:100%;z-index:105;position:absolute;transition:200ms;cursor: none;/*加载界面隐藏鼠标指针*/\">\n\t\t<style>\n\t\t\t#loadback.hide {\n\t\t\t\topacity: 0;\n\t\t\t}\n\t\t\tloading>svg>circle:last-child {\n\t\t\t\tstroke: #fff;\n\t\t\t\tfill: none;\n\t\t\t\tstroke-width: 2px;\n\t\t\t\tstroke-linecap: round;\n\t\t\t\tanimation: spin-infinite 2.5s linear 0s infinite normal none running;\n\t\t\t\ttransform-origin: 50% 50%;\n\t\t\t\ttransition: all .2s ease-in-out 0s;\n\t\t\t}\n\t\t\tloading>svg {\n\t\t\t\tbackground-color: #00000000;\n\t\t\t\tborder-radius: 50%;\n\t\t\t}\n\t\t\t@keyframes spin-infinite {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dasharray: .01px, 43.97px;\n\t\t\t\t\ttransform: rotate(0deg)\n\t\t\t\t}\n\t\t\t\t50% {\n\t\t\t\t\tstroke-dasharray: 21.99px, 21.99px;\n\t\t\t\t\ttransform: rotate(450deg)\n\t\t\t\t}\n\t\t\t\tto {\n\t\t\t\t\tstroke-dasharray: .01px, 43.97px;\n\t\t\t\t\ttransform: rotate(3turn)\n\t\t\t\t}\n\t\t\t}\n\t\t</style>\n\t\t<svg id=\"loadbacksvg\" viewBox=\"21,18,320,315\" style=\"transition: 1s;opacity: 0;position: absolute;left: calc(50% - 125px);top:20%;\" width=\"250\" height=\"250\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" overflow=\"hidden\"><defs><filter id=\"fx0\" x=\"-10%\" y=\"-10%\" width=\"120%\" height=\"120%\" filterUnits=\"userSpaceOnUse\" primitiveUnits=\"userSpaceOnUse\"><feComponentTransfer color-interpolation-filters=\"sRGB\"><feFuncR type=\"discrete\" tableValues=\"0 0\"/><feFuncG type=\"discrete\" tableValues=\"0 0\"/><feFuncB type=\"discrete\" tableValues=\"0 0\"/><feFuncA type=\"linear\" slope=\"0.4\" intercept=\"0\"/></feComponentTransfer><feGaussianBlur stdDeviation=\"5.81006 5.77778\"/></filter><filter id=\"fx1\" x=\"-10%\" y=\"-10%\" width=\"120%\" height=\"120%\" filterUnits=\"userSpaceOnUse\" primitiveUnits=\"userSpaceOnUse\"><feComponentTransfer color-interpolation-filters=\"sRGB\"><feFuncR type=\"discrete\" tableValues=\"0 0\"/><feFuncG type=\"discrete\" tableValues=\"0 0\"/><feFuncB type=\"discrete\" tableValues=\"0 0\"/><feFuncA type=\"linear\" slope=\"0.4\" intercept=\"0\"/></feComponentTransfer><feGaussianBlur stdDeviation=\"5.77778 5.77778\"/></filter><filter id=\"fx2\" x=\"-10%\" y=\"-10%\" width=\"120%\" height=\"120%\" filterUnits=\"userSpaceOnUse\" primitiveUnits=\"userSpaceOnUse\"><feComponentTransfer color-interpolation-filters=\"sRGB\"><feFuncR type=\"discrete\" tableValues=\"0 0\"/><feFuncG type=\"discrete\" tableValues=\"0 0\"/><feFuncB type=\"discrete\" tableValues=\"0 0\"/><feFuncA type=\"linear\" slope=\"0.4\" intercept=\"0\"/></feComponentTransfer><feGaussianBlur stdDeviation=\"7.36593 7.36776\"/></filter><filter id=\"fx3\" x=\"-10%\" y=\"-10%\" width=\"120%\" height=\"120%\" filterUnits=\"userSpaceOnUse\" primitiveUnits=\"userSpaceOnUse\"><feComponentTransfer color-interpolation-filters=\"sRGB\"><feFuncR type=\"discrete\" tableValues=\"0 0\"/><feFuncG type=\"discrete\" tableValues=\"0 0\"/><feFuncB type=\"discrete\" tableValues=\"0 0\"/><feFuncA type=\"linear\" slope=\"0.521569\" intercept=\"0\"/></feComponentTransfer><feGaussianBlur stdDeviation=\"6 6\"/></filter><clipPath id=\"clip4\"><rect x=\"468\" y=\"169\" width=\"362\" height=\"356\"/></clipPath><clipPath id=\"clip5\"><rect x=\"-6.53632\" y=\"-6.5\" width=\"101.061\" height=\"108\"/></clipPath><clipPath id=\"clip6\"><rect x=\"0\" y=\"0\" width=\"90\" height=\"95\"/></clipPath><linearGradient x1=\"525.053\" y1=\"357.279\" x2=\"645.947\" y2=\"458.721\" gradientUnits=\"userSpaceOnUse\" spreadMethod=\"reflect\" id=\"fill7\"><stop offset=\"0\" stop-color=\"#775CFE\"/><stop offset=\"0.18\" stop-color=\"#775CFE\"/><stop offset=\"0.83\" stop-color=\"#2473DC\"/><stop offset=\"1\" stop-color=\"#2473DC\"/></linearGradient><clipPath id=\"clip8\"><rect x=\"-6.5\" y=\"-6.5\" width=\"125\" height=\"115\"/></clipPath><clipPath id=\"clip9\"><rect x=\"0\" y=\"0\" width=\"112\" height=\"105\"/></clipPath><linearGradient x1=\"511.623\" y1=\"213.086\" x2=\"642.377\" y2=\"368.914\" gradientUnits=\"userSpaceOnUse\" spreadMethod=\"reflect\" id=\"fill10\"><stop offset=\"0\" stop-color=\"#C45DD5\"/><stop offset=\"0.18\" stop-color=\"#C45DD5\"/><stop offset=\"0.69\" stop-color=\"#A266E4\"/><stop offset=\"1\" stop-color=\"#A266E4\"/></linearGradient><clipPath id=\"clip11\"><rect x=\"-7.53336\" y=\"-7.53522\" width=\"128.067\" height=\"124.08\"/></clipPath><clipPath id=\"clip12\"><rect x=\"0\" y=\"0\" width=\"113\" height=\"107\"/></clipPath><linearGradient x1=\"617.245\" y1=\"376.897\" x2=\"771.755\" y2=\"466.103\" gradientUnits=\"userSpaceOnUse\" spreadMethod=\"reflect\" id=\"fill13\"><stop offset=\"0\" stop-color=\"#61A2F9\"/><stop offset=\"0.18\" stop-color=\"#61A2F9\"/><stop offset=\"0.91\" stop-color=\"#3159D7\"/><stop offset=\"1\" stop-color=\"#3159D7\"/></linearGradient><clipPath id=\"clip14\"><rect x=\"-6.5\" y=\"-6.5\" width=\"130\" height=\"137\"/></clipPath><clipPath id=\"clip15\"><rect x=\"0\" y=\"0\" width=\"118\" height=\"124\"/></clipPath><linearGradient x1=\"643.458\" y1=\"199.26\" x2=\"791.542\" y2=\"375.74\" gradientUnits=\"userSpaceOnUse\" spreadMethod=\"reflect\" id=\"fill16\"><stop offset=\"0\" stop-color=\"#8A66FE\"/><stop offset=\"0.19\" stop-color=\"#8A66FE\"/><stop offset=\"1\" stop-color=\"#2473DC\"/></linearGradient></defs><g clip-path=\"url(#clip4)\" transform=\"translate(-468 -169)\"><g clip-path=\"url(#clip5)\" filter=\"url(#fx0)\" transform=\"matrix(1.98889 0 0 2 499 310)\"><g clip-path=\"url(#clip6)\" transform=\"translate(2.84217e-14 0)\"><path d=\"M71.8132 77.0858 26.981 77.0858C22.0288 77.0858 18.0143 73.1038 18.0143 68.1917L18.0143 19.9983C27.6747 18.8595 31.5867 17.632 40.5532 18.2527 49.5197 18.8734 62.1334 21.5426 71.8132 23.7225L71.8132 77.0858Z\" fill=\"#FF0000\" fill-rule=\"evenodd\"/></g></g><path d=\"M639 467 549.834 467C539.984 467 532 459.036 532 449.212L532 352.825C551.213 350.547 558.994 348.093 576.827 349.334 594.661 350.575 619.748 355.914 639 360.273L639 467Z\" fill=\"url(#fill7)\" fill-rule=\"evenodd\"/><g clip-path=\"url(#clip8)\" filter=\"url(#fx1)\" transform=\"matrix(2 0 0 2 468 189)\"><g clip-path=\"url(#clip9)\"><path d=\"M17.9142 86.9142 17.9142 29.4144C17.9142 23.063 23.0408 17.9142 29.3649 17.9142L87.6795 17.9142C91.3242 35.2574 94.0833 41.1006 93.9062 52.6006 93.729 64.1006 89.0466 75.4763 86.6168 86.9142 70.0706 84.6993 65.4194 82.6717 53.5245 82.4844 41.5652 82.296 29.7843 85.4376 17.9142 86.9142Z\" fill=\"#FF0000\" fill-rule=\"evenodd\"/></g></g><path d=\"M501 360 501 245C501 232.298 511.253 222 523.901 222L640.531 222C647.82 256.686 653.338 268.373 652.984 291.373 652.63 314.373 643.265 337.124 638.405 360 605.313 355.57 596.01 351.515 572.221 351.14 548.302 350.764 524.74 357.047 501 360Z\" fill=\"url(#fill10)\" fill-rule=\"evenodd\"/><g clip-path=\"url(#clip11)\" filter=\"url(#fx2)\" transform=\"matrix(1.99115 0 0 1.99065 579 312)\"><g clip-path=\"url(#clip12)\"><path d=\"M90.4862 22.6918 90.4862 74.1822C90.4862 79.8698 85.8764 84.4806 80.1899 84.4806L28.7099 84.4806C25.6989 69.2628 22.7773 68.0805 22.6877 54.0451 22.5938 39.3223 26.7026 33.1429 28.7099 22.6918L90.4862 22.6918Z\" fill=\"#FF0000\" fill-rule=\"evenodd\"/></g></g><path d=\"M762 360 762 462.5C762 473.822 752.821 483 741.499 483L638.994 483C632.999 452.707 627.181 450.353 627.003 422.414 626.816 393.105 634.997 380.805 638.994 360L762 360Z\" fill=\"url(#fill13)\" fill-rule=\"evenodd\"/><g clip-path=\"url(#clip14)\" filter=\"url(#fx3)\" transform=\"matrix(2 0 0 2 594 169)\"><g clip-path=\"url(#clip15)\"><path d=\"M18.7308 18.4142 86.1097 18.4142C93.5523 18.4142 99.5858 24.4663 99.5858 31.932L99.5858 99.5195C79.053 102.327 71.9105 106.654 58.5202 105.134L18.7308 99.5195C21.1161 80.9213 23.4541 75.8406 23.5014 62.3231 23.5527 47.6868 20.321 33.0505 18.7308 18.4142Z\" fill=\"#FF0000\" fill-rule=\"evenodd\"/></g></g><path d=\"M639 203 769.833 203C784.285 203 796 214.752 796 229.248L796 360.486C756.13 365.937 742.262 374.34 716.261 371.389L639 360.486C643.632 324.373 648.171 314.508 648.263 288.26 648.363 259.84 642.088 231.42 639 203Z\" fill=\"url(#fill16)\" fill-rule=\"evenodd\"/></g></svg>\n\t\t<loading id=\"loadbackloading\" style=\"transition:1s;opacity:0;\">\n\t\t\t<svg style=\"position:absolute;left:calc(50% - 25px);top:72%;\" width=\"50px\" height=\"50px\" viewBox=\"0 0 16 16\">\n\t\t\t\t<circle cx=\"8px\" cy=\"8px\" r=\"7px\"></circle>\n\t\t\t</svg>\n\t\t\t<p id=\"loadbackupdate\" style=\"position:absolute;top:calc(72% + 55px);left:0;width:100%;text-align:center;color:#fff;font-size: 25px;display:none;\" data-i18n=\"updating\">休对故人思故国，且将新火试新茶<br>正在更新</p>\n\t\t</loading>\n\t\t<script>\n\t\t\tsetTimeout(() => {\n\t\t\t\t$('#loadbacksvg')[0].style.opacity = 1;\n\t\t\t\t$('#loadbackloading')[0].style.opacity = 1;\n\t\t\t}, 100);\n\t\t</script>\n\t</div>\n\t<div class=\"container\" id=\"orientation-warning\">\n        <div class=\"image-container\">\n            <img src=\"icon/ls.svg\" alt=\"半透明图标\" class=\"svg translucent\">\n            <img src=\"icon/ls.svg\" alt=\"旋转图标\" class=\"svg rotating\">\n        </div>\n        <div data-i18n=\"cover-hp\">横屏以获得最佳体验</div>\n    </div>\n\t<div id=\"loginback\">\n\t\t<div class=\"user\"></div>\n\t\t<div class=\"name\">Administrator</div>\n\t\t\n\t\t<div id=\"login\" onclick=\"$(this).css('opacity','0');$('#login-welc').css('opacity','1');\n\t\t\tsetTimeout(() => {\n\t\t\t\t$('#loginback').addClass('close');\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t$('#loginback').css('opacity', '0');\n\t\t\t\t}, 500);\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t$('#loginback').css('display', 'none');\n\t\t\t\t}, 2000);\n\t\t\t\tif(use_music){\n\t\t\t\t\tdocument.querySelector('audio#startup-music').play();\n\t\t\t\t}\n\t\t\t}, 2000);\" data-i18n=\"login\">\n\t\t\t登录\n\t\t</div>\n\t\t<div id=\"login-welc\" style=\"opacity: 0;\">\n\t\t\t<loading>\n\t\t\t\t<svg width=\"50px\" height=\"50px\" viewBox=\"0 0 16 16\">\n\t\t\t\t\t<circle cx=\"8px\" cy=\"8px\" r=\"6px\"></circle>\n\t\t\t\t</svg>\n\t\t\t</loading>\n\t\t\t<p style=\"font-size: 22px;\n            color: #fff;\n\t\t\tmargin-top: 5px;\n            text-align: center;\" data-i18n=\"welcome\">欢迎</p>\n\t\t</div>\n\t\t<list class=\"langselect new\">\n\t\t\t<span class=\"text\" style=\"font-size: 22px;\"><i class=\"bi bi-globe2\"></i></span>\n\t\t\t<a class=\"a def\" onclick=\"\n\t\t\t\tif(navigator.language in langc)\n\t\t\t\t\tlocalStorage.setItem('lang',langc[navigator.language]);\n\t\t\t\telse\n\t\t\t\t\tlocalStorage.setItem('lang','en-US');\n\t\t\t\twindow.location.href='';\">Default language of the browser</a>\n\t\t\t<a class=\"a zh-CN\" onclick=\"localStorage.setItem('lang','zh-CN');window.location.href='';\">简体中文</a>\n\t\t\t<a class=\"a zh-TW\" onclick=\"localStorage.setItem('lang','zh-TW');window.location.href='';\">繁體中文</a>\n\t\t\t<a class=\"a en\" onclick=\"localStorage.setItem('lang','en');window.location.href='';\">English</a>\n\t\t</list>\n\t\t<a class=\"power\" onclick=\"$(this).addClass('show')\">\n\t\t\t<!-- <i class=\"bi bi-translate\" onclick=\"\n\t\t\t\tif(localStorage.getItem('lang')&&localStorage.getItem('lang')=='en'){\n\t\t\t\t\tsetData('lang','zh_cn');\n\t\t\t\t}else{\n\t\t\t\t\tsetData('lang','en');\n\t\t\t\t}\n\t\t\t\twindow.location.href='';\n\t\t\t\t\" win12_title=\"Toggle language\"></i> -->\n\t\t\t<i class=\"bi bi-power\" onclick=\"setTimeout(() => {window.location='shutdown.html';}, 200);\" win12_title=\"关机\"></i>\n\t\t\t<i class=\"bi bi-arrow-counterclockwise\" onclick=\"setTimeout(() => {window.location='reload.html';}, 200);\" win12_title=\"重启\"></i>\n\t\t</a>\n\t</div>\n\n\n\t<div id=\"voiceBall\" class=\"draggable no-drag\" style=\"top: 80%;left: 80%;\">\n        <div class=\"rainbow-container-main\">\n            <div class=\"rainbow-container\">\n                <div class=\"green\"></div>\n                <div class=\"pink\"></div>\n                <div class=\"blue\"></div>\n            </div>\n        </div>\n    </div>\n\n\n\t<div id=\"start-menu\">\n\t\t<!-- 开始菜单 -->\n\t\t<div id=\"startmenu-l\">\n\t\t\t<div id=\"startmenu-user\">\n\t\t\t\t<svg viewBox=\"0,0,257,344\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" overflow=\"hidden\"><defs><clipPath id=\"user-clip0\"><rect x=\"382\" y=\"195\" width=\"257\" height=\"344\" /></clipPath><linearGradient x1=\"351.462\" y1=\"233.56\" x2=\"669.496\" y2=\"500.422\" gradientUnits=\"userSpaceOnUse\" spreadMethod=\"reflect\" id=\"user-fill1\"><stop offset=\"0\" stop-color=\"#A964C8\" /><stop offset=\"0.35\" stop-color=\"#A964C8\" /><stop offset=\"0.87\" stop-color=\"#2D8AD5\" /><stop offset=\"1\" stop-color=\"#2D8AD5\" /></linearGradient><linearGradient x1=\"351.462\" y1=\"233.56\" x2=\"669.496\" y2=\"500.422\" gradientUnits=\"userSpaceOnUse\" spreadMethod=\"reflect\" id=\"user-fill2\"><stop offset=\"0\" stop-color=\"#A964C8\" /><stop offset=\"0.35\" stop-color=\"#A964C8\" /><stop offset=\"0.87\" stop-color=\"#2D8AD5\" /><stop offset=\"1\" stop-color=\"#2D8AD5\" /></linearGradient></defs><g clip-path=\"url(#user-clip0)\" transform=\"translate(-382 -195)\"><path d=\"M637.755 433.872C642.215 515.221 579.577 537.983 508.011 537.983 436.444 537.983 376.676 507.833 383.513 437.11 383.109 425.234 389.59 414.133 398.634 409.891 413.82 402.768 444.753 402.936 507.484 402.997 570.214 403.058 609.164 402.279 621.521 407.947 633.878 413.614 638.011 424.609 637.755 433.872Z\" fill=\"url(#user-fill1)\" fill-rule=\"evenodd\" /><path d=\"M422 285C422 235.847 461.623 196 510.5 196 559.377 196 599 235.847 599 285 599 334.153 559.377 374 510.5 374 461.623 374 422 334.153 422 285Z\" fill=\"url(#user-fill2)\" fill-rule=\"evenodd\" /></g></svg>\n\t\t\t</div>\n\t\t\t<p style=\"width: 100%;text-align: center;margin: -50px 0 20px 0;font-size: 30px;\">Administrator</p>\n\t\t\t<input type=\"text\" class=\"input\" win12_title=\"搜索\" placeholder=\"在这里输入你要搜索的内容\" onfocus=\"hide_startmenu();\n\t\t\t\t$('#search-btn').addClass('show');\n\t\t\t\t$('#search-win').addClass('show-begin');\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t$('#search-win').addClass('show');\n\t\t\t\t}, 0);\n\t\t\t\t$('#search-input').focus();\" data-i18n-attr=\"placeholder\" data-i18n-key=\"sch-ph\">\n\t\t\t<input-before class=\"bi bi-search\"></input-before>\n\t\t\t<list>\n\t\t\t\t<p class=\"text\" data-i18n=\"stmenu-avlb\">可用</p>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['setting', '设置'])\" onclick=\"openapp('setting');hide_startmenu();\">\n\t\t\t\t\t<img src=\"icon/setting.svg\">\n\t\t\t\t\t<p data-i18n=\"setting.name\">设置</p>\n\t\t\t\t</a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['explorer', '文件资源管理器'])\" onclick=\"openapp('explorer');hide_startmenu();\">\n\t\t\t\t\t<img src=\"icon/explorer.svg\">\n\t\t\t\t\t<p data-i18n=\"explorer.name\">文件资源管理器</p>\n\t\t\t\t</a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['calc', '计算器'])\" onclick=\"openapp('calc');hide_startmenu();\">\n\t\t\t\t\t<img src=\"icon/calc.svg\">\n\t\t\t\t\t<p data-i18n=\"calc.name\">计算器</p>\n\t\t\t\t</a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['run', '运行'])\" onclick=\"openapp('run');hide_startmenu();\">\n\t\t\t\t\t<img src=\"icon/run.svg\">\n\t\t\t\t\t<p data-i18n=\"run.name\">运行</p>\n\t\t\t\t</a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['about', '关于 Win12 网页版'])\" onclick=\"openapp('about');hide_startmenu();\">\n\t\t\t\t\t<img src=\"icon/about.svg\">\n\t\t\t\t\t<p data-i18n=\"about.name\">关于 Win12 网页版</p>\n\t\t\t\t</a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['taskmgr', '任务管理器'])\" onclick=\"openapp('taskmgr');hide_startmenu();\">\n\t\t\t\t\t<img src=\"icon/taskmgr.png\">\n\t\t\t\t\t<p data-i18n=\"taskmgr.name\">任务管理器</p>\n\t\t\t\t</a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['notepad', '记事本'])\" onclick=\"openapp('notepad');hide_startmenu();\">\n\t\t\t\t\t<img src=\"icon/notepad.svg\">\n\t\t\t\t\t<p data-i18n=\"notepad.name\">记事本</p>\n\t\t\t\t</a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['copilot', 'AI Chat'])\" onclick=\"openapp('copilot');hide_startmenu();\">\n\t\t\t\t\t<img src=\"icon/copilot.svg\">\n\t\t\t\t\t<p>AI Chat</p>\n\t\t\t\t</a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['edge', 'Microsoft Edge'])\" onclick=\"openapp('edge');hide_startmenu();\">\n\t\t\t\t\t<img src=\"icon/edge.svg\">\n\t\t\t\t\t<p data-i18n=\"edge.name\">Microsoft Edge</p>\n\t\t\t\t</a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['msstore', 'Microsoft Store'])\" onclick=\"openapp('msstore');hide_startmenu();\">\n\t\t\t\t\t<img src=\"icon/msstore.svg\">\n\t\t\t\t\t<p>Microsoft Store</p>\n\t\t\t\t</a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['camera', '相机'])\" onclick=\"apps.camera.notice();hide_startmenu()\">\n\t\t\t\t\t<img src=\"icon/camera.svg\">\n\t\t\t\t\t<p data-i18n=\"camera.name\">相机</p>\n\t\t\t\t</a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['pythonEditor', 'Python Editor'])\" onclick=\"openapp('pythonEditor');hide_startmenu()\">\n\t\t\t\t\t<img src=\"icon/pythonEditor.svg\">\n\t\t\t\t\t<p>Python Editor</p>\n\t\t\t\t</a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['python', 'Python 3.10.2'])\" onclick=\"openapp('python');hide_startmenu()\">\n\t\t\t\t\t<img src=\"icon/python.svg\">\n\t\t\t\t\t<p>Python 3.10.2</p>\n\t\t\t\t</a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['terminal', '终端'])\" onclick=\"openapp('terminal');hide_startmenu();\">\n\t\t\t\t\t<img src=\"icon/terminal.svg\">\n\t\t\t\t\t<p data-i18n=\"terminal.name\">终端</p>\n\t\t\t\t</a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['whiteboard', 'Whiteboard'])\" onclick=\"openapp('whiteboard');hide_startmenu();\">\n\t\t\t\t\t<img src=\"icon/whiteboard.svg\">\n\t\t\t\t\t<p>Whiteboard</p>\n\t\t\t\t</a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['defender', 'Windows 安全中心'])\" onclick=\"openapp('defender');hide_startmenu();\">\n\t\t\t\t\t<img src=\"icon/defender.svg\">\n\t\t\t\t\t<p data-i18n=\"defender.name\">Windows 安全中心</p>\n\t\t\t\t</a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['word', 'Word Preview'])\" onclick=\"openapp('word');hide_startmenu();\">\n\t\t\t\t\t<img src=\"icon/word.svg\">\n\t\t\t\t\t<p data-i18n=\"word.name\">Word Preview</p>\n\t\t\t\t</a>\n\t\t\t\t<p class=\"text\" data-i18n=\"stmenu-webapp\">Web 应用</p>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['minesweeper', 'Windows 12 minesweeper'])\" onclick=\"openapp('minesweeper');hide_startmenu()\">\n\t\t\t\t\t <img src=\"icon/minesweeper.svg\">\n\t\t\t\t  <p>扫雷</p>\n\t\t\t    </a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['bilibili', '哔哩哔哩'])\" onclick=\"openapp('bilibili');hide_startmenu();\">\n\t\t\t\t\t<img src=\"icon/bilibili.png\">\n\t\t\t\t\t<p data-i18n=\"bilibili.name\">哔哩哔哩</p>\n\t\t\t\t</a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['vscode', 'Visual Studio Code'])\" onclick=\"openapp('vscode');hide_startmenu();\">\n\t\t\t\t\t<img src=\"icon/vscode.png\">\n\t\t\t\t\t<p>Visual Studio Code</p>\n\t\t\t\t</a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['wsa', '适用于 Android™️ 的 Windows 子系统'])\" onclick=\"openapp('wsa');hide_startmenu();\">\n\t\t\t\t\t<img src=\"icon/wsa.png\">\n\t\t\t\t\t<p data-i18n=\"wsa.name\">适用于 Android™ 的 Windows 子系统</p>\n\t\t\t\t</a>\n\t\t\t\t<a oncontextmenu=\"return showcm(event, 'smlapp', ['windows12', 'Windows 12'])\" onclick=\"openapp('windows12');hide_startmenu();\">\n\t\t\t\t\t<img src=\"icon/logo.svg\">\n\t\t\t\t\t<p>Windows 12</p>\n\t\t\t\t</a>\n\t\t\t</list>\n\t\t</div>\n\t\t<div id=\"startmenu-r\">\n\t\t\t<div class=\"row1\">\n\t\t\t\t<div class=\"folder\">\n\t\t\t\t\t<a class=\"a sm-app enable\"\n\t\t\t\t\t\tonclick=\"openapp('explorer');apps.explorer.goto('C:/用户/Administrator/文档');hide_startmenu();\">\n\t\t\t\t\t\t<img src=\"icon/folder/docs.svg\">\n\t\t\t\t\t\t<p data-i18n=\"folder.doc\">文档</p>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"a sm-app enable\"\n\t\t\t\t\t\tonclick=\"openapp('explorer');apps.explorer.goto('C:/用户/Administrator/图片');hide_startmenu();\">\n\t\t\t\t\t\t<img src=\"icon/folder/pics.svg\">\n\t\t\t\t\t\t<p data-i18n=\"folder.pic\">图片</p>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"a sm-app enable\"\n\t\t\t\t\t\tonclick=\"openapp('explorer');apps.explorer.goto('C:/用户/Administrator/音乐');hide_startmenu();\">\n\t\t\t\t\t\t<img src=\"icon/folder/music.svg\">\n\t\t\t\t\t\t<p data-i18n=\"folder.mus\">音乐</p>\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"tool\">\n\t\t\t\t\t<p style=\"font-size: 40px;margin-bottom: -10px;\" class=\"time\">12:00</p>\n\t\t\t\t\t<p class=\"date\">星期一, 2368年13月34日</p>\n\t\t\t\t\t<div class=\"pw\">\n\t\t\t\t\t\t<a class=\"a btn btn-icon big\" win12_title=\"切换全屏\" onclick=\"\n\t\t\t\t\t\t\tif($('#start-menu').hasClass('max')){\n\t\t\t\t\t\t\t\t$('#start-menu>#startmenu-r>.row1>.tool>.pw>.btn-icon.big').html('<i class=\\'bi bi-arrows-angle-expand\\'></i>');\n\t\t\t\t\t\t\t\t$('#start-menu').removeClass('max');\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t$('#start-menu>#startmenu-r>.row1>.tool>.pw>.btn-icon.big').html('<i class=\\'bi bi-arrows-angle-contract\\'></i>');\n\t\t\t\t\t\t\t\t$('#start-menu').addClass('max');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstop(event)\n\t\t\t\t\t\t\">\n\t\t\t\t\t\t\t<i class=\"bi bi-arrows-angle-expand\"></i>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<a class=\"a btn btn-icon power\" win12_title=\"电源\" onclick=\"$(this).toggleClass('show');\">\n\t\t\t\t\t\t\t<span class=\"bi bi-power\"></span>\n\t\t\t\t\t\t\t<i class=\"bi bi-power\" onclick=\"$('#start-menu').removeClass('show');\n\t\t\t\t\t\t\tsetTimeout(() => {window.location='shutdown.html';},200);\" win12_title=\"关机\"></i>\n\t\t\t\t\t\t\t<i class=\"bi bi-arrow-counterclockwise\" onclick=\"$('#start-menu').removeClass('show');\n\t\t\t\t\t\t\tsetTimeout(() => {window.location='reload.html';},200);\" win12_title=\"重启\"></i>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"pinned\">\n\t\t\t\t<!-- 已固定 卡片 -->\n\t\t\t\t<div class=\"title\">\n\t\t\t\t\t<p data-i18n=\"stmenu-pinned\">已固定</p>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<a class=\"a more-btn\"><span data-i18n=\"stmenu-allapp\">所有应用</span> <i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"apps\">\n\t\t\t\t\t<a class=\"a sm-app enable calc\" onclick=\"openapp('calc');hide_startmenu();\" oncontextmenu=\"return showcm(event,'smapp',['calc','计算器'])\">\n\t\t\t\t\t\t<img src=\"icon/calc.svg\">\n\t\t\t\t\t\t<p data-i18n=\"calc.name\">计算器</p>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"a sm-app enable camera\" onclick=\"apps.camera.notice();hide_startmenu();\" oncontextmenu=\"return showcm(event,'smapp',['camera', '相机'])\">\n\t\t\t\t\t\t<img src=\"icon/camera.svg\">\n\t\t\t\t\t\t<p data-i18n=\"camera.name\">相机</p>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"a sm-app enable\" onclick=\"shownotice('feedback');\">\n\t\t\t\t\t\t<img src=\"icon/feedback.svg\">\n\t\t\t\t\t\t<p data-i18n=\"feedback.name\">反馈中心</p>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"a sm-app enable about\" onclick=\"openapp('about');hide_startmenu();\" oncontextmenu=\"return showcm(event,'smapp',['about','关于 Win12 网页版'])\">\n\t\t\t\t\t\t<img src=\"icon/about.svg\">\n\t\t\t\t\t\t<p data-i18n=\"about.name\">关于 Win12 网页版</p>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"a sm-app enable explorer\" onclick=\"openapp('explorer');hide_startmenu();\" oncontextmenu=\"return showcm(event,'smapp',['explorer','文件资源管理器'])\">\n\t\t\t\t\t\t<img src=\"icon/explorer.svg\">\n\t\t\t\t\t\t<p data-i18n=\"explorer.name\">文件资源管理器</p>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"a sm-app enable notepad\" onclick=\"openapp('notepad');hide_startmenu();\" oncontextmenu=\"return showcm(event,'smapp',['notepad','记事本'])\">\n\t\t\t\t\t\t<img src=\"icon/notepad.svg\">\n\t\t\t\t\t\t<p data-i18n=\"notepad.name\">记事本</p>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"a sm-app enable setting\" onclick=\"openapp('setting');hide_startmenu();\" oncontextmenu=\"return showcm(event,'smapp',['setting','设置'])\">\n\t\t\t\t\t\t<img src=\"icon/setting.svg\">\n\t\t\t\t\t\t<p data-i18n=\"setting.name\">设置 </p>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"a sm-app enable defender\" onclick=\"openapp('defender');hide_startmenu();\" oncontextmenu=\"return showcm(event,'smapp',['defender','Windows 安全中心'])\">\n\t\t\t\t\t\t<img src=\"icon/defender.svg\">\n\t\t\t\t\t\t<p data-i18n=\"defender.name\">Windows 安全中心</p>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"a sm-app enable msstore\" onclick=\"openapp('msstore');hide_startmenu();\" oncontextmenu=\"return showcm(event, 'smapp', ['msstore', 'Microsoft Store'])\">\n\t\t\t\t\t\t<img src=\"icon/msstore.svg\">\n\t\t\t\t\t\t<p>Microsoft Store</p>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"a sm-app enable edge\" onclick=\"openapp('edge');hide_startmenu();\" oncontextmenu=\"return showcm(event,'smapp',['edge','Microsoft Edge'])\">\n\t\t\t\t\t\t<img src=\"icon/edge.svg\">\n\t\t\t\t\t\t<p data-i18n=\"edge.name\">Microsoft Edge</p>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"a sm-app enable windows12\" onclick=\"openapp('windows12');hide_startmenu();\" oncontextmenu=\"return showcm(event,'smapp',['windows12','Windows 12'])\">\n\t\t\t\t\t\t<img src=\"icon/logo.svg\">\n\t\t\t\t\t\t<p>Windows 12</p>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"a sm-app enable terminal\" onclick=\"openapp('terminal');hide_startmenu();\" oncontextmenu=\"return showcm(event,'smapp',['terminal','终端'])\">\n\t\t\t\t\t\t<img src=\"icon/terminal.svg\">\n\t\t\t\t\t\t<p data-i18n=\"terminal.name\">终端</p>\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"tuijian\">\n\t\t\t\t<div class=\"title\">\n\t\t\t\t\t<p data-i18n=\"stmenu-tj\">推荐的项目</p>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<a class=\"a more-btn\" onclick=\"openapp('explorer');apps.explorer.goto('C:/用户/Administrator/推荐的项目');hide_startmenu();\"><span data-i18n=\"more\">更多</span> <i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"apps\">\n\t\t\t\t\t<a class=\"a tj-obj act\"><img src=\"icon/files/ppt.png\"><div><p data-i18n=\"stmenu-tj-f1\">科学地使用瓶盖.pptx</p><p data-i18n=\"stmenu-tj-t1\">5 分钟前</p></div></a>\n\t\t\t\t\t<a class=\"a tj-obj act\"><img src=\"icon/files/img.png\"><div><p data-i18n=\"stmenu-tj-f2\">可口可乐瓶盖.jpg</p><p data-i18n=\"stmenu-tj-t2\">7 分钟前</p></div></a>\n\t\t\t\t\t<a class=\"a tj-obj act\"><img src=\"icon/files/img.png\"><div><p data-i18n=\"stmenu-tj-f3\">瓶盖构造图.jpg</p><p data-i18n=\"stmenu-tj-t3\">16 分钟前</p></div></a>\n\t\t\t\t\t<a class=\"a tj-obj act\" onclick=\"openapp('word');apps.word.edit();hide_startmenu();\"><img src=\"icon/files/word.png\"><div><p data-i18n=\"stmenu-tj-f4\">瓶盖的构造及作用.docx</p><p data-i18n=\"stmenu-tj-t4\">24 分钟前</p></div></a>\n\t\t\t\t\t<a class=\"a tj-obj act\"><img src=\"icon/files/excel.png\"><div><p data-i18n=\"stmenu-tj-f5\">可口可乐瓶盖厚度.xlsx</p><p data-i18n=\"stmenu-tj-t5\">35 分钟前</p></div></a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div id=\"search-win\">\n\t\t<!-- 搜索框 -->\n\t\t<input type=\"text\" class=\"input\" placeholder=\"在这里输入你要搜索的内容\" id=\"search-input\"\n\t\t\toninput=\"apps.search.search(this.value.length)\" data-i18n-attr=\"placeholder\" data-i18n-key=\"sch-ph\">\n\t\t<input-before class=\"bi bi-search\"></input-before>\n\t\t<div class=\"tab\">\n\t\t\t<a class=\"now\" data-i18n=\"all\">全部</a><a data-i18n=\"sch-app\">应用</a><a data-i18n=\"sch-doc\">文档</a><a data-i18n=\"sch-web\">网页</a>\n\t\t\t<a data-i18n=\"sch-setting\">设置</a>\n\t\t\t<a data-i18n=\"sch-folder\">文件夹</a><a data-i18n=\"sch-photo\">照片</a>\n\t\t</div>\n\t\t<div class=\"ans\">\n\t\t\t<div class=\"list\">\n\t\t\t\t<list>\n\t\t\t\t\t<p class=\"text\" data-i18n=\"sch-tj\">推荐</p>\n\t\t\t\t\t<a onclick=\"openapp('setting');$('#search-btn').removeClass('show');\n\t\t\t\t\t$('#search-win').removeClass('show');\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t$('#search-win').removeClass('show-begin');\n\t\t\t\t\t}, 200);\">\n\t\t\t\t\t\t<img src=\"icon/setting.svg\">\n\t\t\t\t\t\t<p data-i18n=\"setting.name\">设置</p>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a onclick=\"openapp('about');$('#search-btn').removeClass('show');\n\t\t\t\t\t$('#search-win').removeClass('show');\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t$('#search-win').removeClass('show-begin');\n\t\t\t\t\t}, 200);\">\n\t\t\t\t\t\t<img src=\"icon/about.svg\">\n\t\t\t\t\t\t<p data-i18n=\"about.name\">关于 Win12 网页版</p>\n\t\t\t\t\t</a>\n\t\t\t\t</list>\n\t\t\t</div>\n\t\t\t<div class=\"view\">\n\t\t\t\t<div class=\"fname\">\n\t\t\t\t\t<i class=\"bi bi-search\"></i>\n\t\t\t\t\t<p class=\"name\"></p>\n\t\t\t\t\t<p class=\"type\"></p>\n\t\t\t\t</div>\n\t\t\t\t<hr>\n\t\t\t\t<div class=\"option\">\n\t\t\t\t\t<list>\n\t\t\t\t\t\t<a class=\"a\" data-i18n=\"sch-open\">打开</a>\n\t\t\t\t\t\t<a class=\"a\" data-i18n=\"sch-opfl\">打开文件所在位置</a>\n\t\t\t\t\t\t<a class=\"a\" data-i18n=\"sch-cpp\">复制路径</a>\n\t\t\t\t\t</list>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div id=\"widgets\">\n\t\t<div class=\"widgets\">\n\t\t\t<div class=\"bar\">\n\t\t\t\t<p class=\"tit\" data-i18n=\"widget\">小组件</p>\n\t\t\t\t<button onclick=\"shownotice('widgets')\" class=\"a act btn btn-icon big\"\n\t\t\t\t\tstyle=\"background: linear-gradient(100deg, var(--theme-1), var(--theme-2));color:#fff;\"\n\t\t\t\t\twin12_title=\"添加\"><i class=\"bi bi-plus-lg\"></i></button>\n\t\t\t</div>\n\t\t\t<div class=\"content\">\n\t\t\t\t<div class=\"template\">\n\t\t\t\t\t<div class=\"calc\">\n\t\t\t\t\t\t<div class=\"wg calc template\">\n\t\t\t\t\t\t\t<div class=\"titbar\">\n\t\t\t\t\t\t\t\t<a win12_title=\"更多\" onmouseenter=\"showdescp(event)\" onmouseleave=\"hidedescp(event)\" class=\"a more notip\" onclick=\"$('.wg.calc>.titbar>.menu').toggleClass('show')\"><i class=\"bi bi-three-dots\"></i></a>\n\t\t\t\t\t\t\t\t<div class=\"menu\">\n\t\t\t\t\t\t\t\t\t<a win12_title=\"打开应用\" class=\"a img openapp\" onclick=\"$('.wg.calc>.titbar>.menu').removeClass('show');hide_widgets();openapp('calc')\" onmouseenter=\"showdescp(event)\" onmouseleave=\"hidedescp(event)\">\n\t\t\t\t\t\t\t\t\t\t<img src=\"icon/calc.svg\">\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t<a class=\"a move\" win12_title=\"移动\" onmouseenter=\"showdescp(event)\" onclick=\" hidedescp(event); if (!edit_mode) { editMode(); }\" onmouseleave=\"hidedescp(event)\"><i class=\"bi bi-arrows-move\"></i></a>\n\t\t\t\t\t\t\t\t\t<a class=\"a addtodt\" win12_title=\"添加到桌面\" onmouseenter=\"showdescp(event)\" onclick=\"hidedescp(event); widgets.widgets.remove('calc'); widgets.widgets.addToDesktop('calc');\" onmouseleave=\"hidedescp(event)\"><i class=\"bi bi-box-arrow-in-right\"></i></a>\n\t\t\t\t\t\t\t\t\t<a class=\"a delete\" win12_title=\"删除\" onmouseenter=\"showdescp(event)\" onmouseleave=\"hidedescp(event)\" onclick=\"hidedescp(event); $('.wg.calc>.titbar>.menu').removeClass('show'); widgets.widgets.remove('calc');\"><i class=\"bi bi-trash\"></i></a>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"content\" onmousedown=\"widgetsMove(this.parentElement, event);\" ontouchstart=\"widgetsMove(this.parentElement, event);\">\n\t\t\t\t\t\t\t\t<div class=\"container\">\n\t\t\t\t\t\t\t\t\t<input id=\"calc-input-widgets\" readonly=\"true\" value=\"0\" onkeydown=\"\n\t\t\t\t\t\t\t\t\tswitch (event.key) {\n\t\t\t\t\t\t\t\t\t\tcase '+':\n\t\t\t\t\t\t\t\t\t\t\twidgetCalculator.func_key(1);\n\t\t\t\t\t\t\t\t\t\t\twidgetCalculator.check($('*:not(.template)>*>.wg.calc>.content>.jia')[0]);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase '-':\n\t\t\t\t\t\t\t\t\t\t\twidgetCalculator.func_key(2);\n\t\t\t\t\t\t\t\t\t\t\twidgetCalculator.check($('*:not(.template)>*>.wg.calc>.content>.jian')[0]);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase '*':\n\t\t\t\t\t\t\t\t\t\t\twidgetCalculator.func_key(3);\n\t\t\t\t\t\t\t\t\t\t\twidgetCalculator.check($('*:not(.template)>*>.wg.calc>.content>.cheng')[0]);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase '/':\n\t\t\t\t\t\t\t\t\t\t\twidgetCalculator.func_key(4);\n\t\t\t\t\t\t\t\t\t\t\twidgetCalculator.check($('*:not(.template)>*>.wg.calc>.content>.chu')[0]);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase '=':\n\t\t\t\t\t\t\t\t\t\t\twidgetCalculator.eq();\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase 'Enter':\n\t\t\t\t\t\t\t\t\t\t\twidgetCalculator.eq();\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase 'Backspace':\n\t\t\t\t\t\t\t\t\t\t\twidgetCalculator.backspace();\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase '.':\n\t\t\t\t\t\t\t\t\t\t\twidgetCalculator.point();\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (!isNaN(event.key)) {\n\t\t\t\t\t\t\t\t\t\twidgetCalculator.number_key(Number(event.key));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\"></input>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: pow;\" class=\"b\" onclick=\"widgetCalculator.square()\">𝑥²</a>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: sqrt;\" class=\"b\" onclick=\"widgetCalculator.squareRoot()\">√𝑥</a>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: c;\" class=\"b\" onclick=\"widgetCalculator.clear_num()\">C</a>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: jia;\" class=\"b u jia\" onclick=\"widgetCalculator.func_key(1); widgetCalculator.check(this);\">+</a>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: n7;\" class=\"b\" onclick=\"widgetCalculator.number_key(7);\">7</a>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: n8;\" class=\"b\" onclick=\"widgetCalculator.number_key(8);\">8</a>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: n9;\" class=\"b\" onclick=\"widgetCalculator.number_key(9);\">9</a>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: jian;\" class=\"b u jian\" onclick=\"widgetCalculator.func_key(2); widgetCalculator.check(this);\">-</a>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: n4;\" class=\"b\" onclick=\"widgetCalculator.number_key(4);\">4</a>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: n5;\" class=\"b\" onclick=\"widgetCalculator.number_key(5);\">5</a>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: n6;\" class=\"b\" onclick=\"widgetCalculator.number_key(6);\">6</a>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: cheng;\" class=\"b u hceng\" onclick=\"widgetCalculator.func_key(3); widgetCalculator.check(this);\">×</a>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: n1;\" class=\"b\" onclick=\"widgetCalculator.number_key(1);\">1</a>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: n2;\" class=\"b\" onclick=\"widgetCalculator.number_key(2);\">2</a>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: n3;\" class=\"b\" onclick=\"widgetCalculator.number_key(3);\">3</a>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: chu;\" class=\"b u chu\" onclick=\"widgetCalculator.func_key(4); widgetCalculator.check(this);\">÷</a>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: dot;\" class=\"b\" onclick=\"widgetCalculator.point()\">.</a>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: n0;\" class=\"b\" onclick=\"widgetCalculator.number_key(0);\">0</a>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: back;\" class=\"b\" onclick=\"widgetCalculator.backspace()\"><i class=\"bi bi-backspace\"></i></a>\n\t\t\t\t\t\t\t\t<a style=\"grid-area: ans;\" class=\"b ans u\" onclick=\"if(!widgetCalculator.eq()){widgetCalculator.clear_num(); shownotice('ZeroDivision')}\">=</a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"weather\">\n\t\t\t\t\t\t<div class=\"wg weather template\">\n\t\t\t\t\t\t\t<div class=\"titbar\">\n\t\t\t\t\t\t\t\t<a win12_title=\"更多\" onmouseenter=\"showdescp(event)\" onmouseleave=\"hidedescp(event)\" class=\"a more notip\" onclick=\"$('.wg.weather>.titbar>.menu').toggleClass('show')\"><i class=\"bi bi-three-dots\"></i></a>\n\t\t\t\t\t\t\t\t<div class=\"menu\">\n\t\t\t\t\t\t\t\t\t<a class=\"a move\" win12_title=\"移动\" onmouseenter=\"showdescp(event)\" onmouseleave=\"hidedescp(event)\" onclick=\"hidedescp(event); if (!edit_mode) { editMode() }; \"><i class=\"bi bi-arrows-move\"></i></a>\n\t\t\t\t\t\t\t\t\t<a class=\"a addtotb\" win12_title=\"添加到任务栏\" onmouseenter=\"showdescp(event)\" onmouseleave=\"hidedescp(event)\" onclick=\"hidedescp(event); widgets.widgets.remove('weather'); widgets.widgets.addToToolbar('weather'); \"><i class=\"bi bi-menu-app\"></i></a>\n\t\t\t\t\t\t\t\t\t<a class=\"a addtodt\" win12_title=\"添加到桌面\" onmouseenter=\"showdescp(event)\" onclick=\"hidedescp(event); widgets.widgets.remove('weather'); widgets.widgets.addToDesktop('weather'); \" onmouseleave=\"hidedescp(event)\"><i class=\"bi bi-box-arrow-in-right\"></i></a>\n\t\t\t\t\t\t\t\t\t<a class=\"a delete\" win12_title=\"删除\" onmouseenter=\"showdescp(event)\" onmouseleave=\"hidedescp(event)\" onclick=\"hidedescp(event); $('.wg.weather>.titbar>.menu').removeClass('show'); widgets.widgets.remove('weather'); \"><i class=\"bi bi-trash\"></i></a>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"content\" onmousedown=\"widgetsMove(this.parentElement, event);\" ontouchstart=\"widgetsMove(this.parentElement, event);\">\n\t\t\t\t\t\t\t\t<img class=\"img\" />\n\t\t\t\t\t\t\t\t<div class=\"text\">\n\t\t\t\t\t\t\t\t\t<p class=\"temperature\">--℃</p>\n\t\t\t\t\t\t\t\t\t<p class=\"detail\">-- 体感温度 --℃</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"monitor\">\n\t\t\t\t\t\t<div class=\"wg monitor template\">\n\t\t\t\t\t\t\t<div class=\"titbar\">\n\t\t\t\t\t\t\t\t<a win12_title=\"更多\" onmouseenter=\"showdescp(event)\" onmouseleave=\"hidedescp(event)\" class=\"a more notip\" onclick=\"$('.wg.monitor>.titbar>.menu').toggleClass('show')\"><i class=\"bi bi-three-dots\"></i></a>\n\t\t\t\t\t\t\t\t<div class=\"menu\">\n\t\t\t\t\t\t\t\t\t<a win12_title=\"打开应用\" class=\"a img openapp\" onclick=\"$('.wg.calc>.titbar>.menu').removeClass('show');hide_widgets();openapp('taskmgr')\" onmouseenter=\"showdescp(event)\" onmouseleave=\"hidedescp(event)\">\n\t\t\t\t\t\t\t\t\t\t<img src=\"icon/taskmgr.png\">\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t<a class=\"a chose\" win12_title=\"切换监视器类型\" onmouseenter=\"showdescp(event)\" onmouseleave=\"hidedescp(event)\" onclick=\"showdescp(event); shownotice('widgets.monitor'); \"><i class=\"bi bi-arrow-left-right\"></i></a>\n\t\t\t\t\t\t\t\t\t<a class=\"a move\" win12_title=\"移动\" onmouseenter=\"showdescp(event)\" onmouseleave=\"hidedescp(event)\" onclick=\"showdescp(event); if (!edit_mode) { editMode(); } \"><i class=\"bi bi-arrows-move\"></i></a>\n\t\t\t\t\t\t\t\t\t<a class=\"a addtotb\" win12_title=\"添加到任务栏\" onmouseenter=\"showdescp(event)\" onmouseleave=\"hidedescp(event)\" onclick=\"showdescp(event); widgets.widgets.remove('monitor'); widgets.widgets.addToToolbar('monitor'); \"><i class=\"bi bi-menu-app\"></i></a>\n\t\t\t\t\t\t\t\t\t<a class=\"a addtodt\" win12_title=\"添加到桌面\" onmouseenter=\"showdescp(event)\" onclick=\"showdescp(event); widgets.widgets.remove('monitor'); widgets.widgets.addToDesktop('monitor'); \" onmouseleave=\"hidedescp(event)\"><i class=\"bi bi-box-arrow-in-right\"></i></a>\n\t\t\t\t\t\t\t\t\t<a class=\"a delete\" win12_title=\"删除\" onmouseenter=\"showdescp(event)\" onmouseleave=\"hidedescp(event)\" onclick=\"showdescp(event); $('.wg.monitor>.titbar>.menu').removeClass('show'); widgets.widgets.remove('monitor'); \"><i class=\"bi bi-trash\"></i></a>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"content\" onmousedown=\"widgetsMove(this.parentElement, event);\" ontouchstart=\"widgetsMove(this.parentElement, event);\">\n\t\t\t\t\t\t\t\t<div class=\"container\">\n\t\t\t\t\t\t\t\t\t<svg width=\"60px\" height=\"60px\">\n\t\t\t\t\t\t\t\t\t\t<circle cx=\"30px\" cy=\"30px\" r=\"26px\"></circle>\n\t\t\t\t\t\t\t\t\t\t<circle cx=\"30px\" cy=\"-30px\" r=\"26px\"></circle>\n\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t<div class=\"text\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"value\">50%</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"text\">\n\t\t\t\t\t\t\t\t\t<p class=\"type\">内存</p>\n\t\t\t\t\t\t\t\t\t<p class=\"value\">50%</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"grid\">\n\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<span class=\"hr\"></span>\n\t\t<div class=\"news\">\n\t\t\t<div class=\"bar\">\n\t\t\t\t<p class=\"tit\" data-i18n=\"widget-news\">新闻</p>\n\t\t\t\t<div>\n\t\t\t\t\t<span style=\"color: #7f7f7f;margin-right: 5px;margin-top: 2px;\" data-i18n=\"widget-news-res\">我们不对新闻内容负责</span>\n\t\t\t\t\t<button onclick=\"shownotice('widgets.news.source')\" class=\"a act btn btn-icon big\"\n\t\t\t\t\t\tstyle=\"background: linear-gradient(100deg, var(--theme-1), var(--theme-2));color:#fff;\"\n\t\t\t\t\t\twin12_title=\"切换新闻源\"><i class=\"bi bi-arrow-repeat\"></i></button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"full-tip\">\n\t\t\t\t<loading>\n\t\t\t\t\t<svg width=\"30px\" height=\"30px\" viewBox=\"0 0 16 16\">\n\t\t\t\t\t\t<circle cx=\"8px\" cy=\"8px\" r=\"7px\" style=\"stroke:#7f7f7f50;fill:none;stroke-width:3px;\"></circle>\n\t\t\t\t\t\t<circle cx=\"8px\" cy=\"8px\" r=\"7px\" style=\"stroke:#2983cc;stroke-width:3px;\"></circle>\n\t\t\t\t\t</svg>\n\t\t\t\t</loading>\n\t\t\t\t<p class=\"tit\"></p>\n\t\t\t\t<p class=\"desc\"></p>\n\t\t\t\t<p class=\"info\"></p>\n\t\t\t</div>\n\t\t\t<div class=\"content\">\n\t\t\t\t<div class=\"card top-news\"></div>\n\t\t\t\t<div class=\"news-all\"></div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div id=\"copilot\">\n\t\t<div class=\"titbar\">\n\t\t\t<p class=\"text\">Windows 12 Copilot</p>\n\t\t\t<div class=\"alr\">\n\t\t\t\t<span class=\"btn about\" onclick=\"shownotice('about-copilot')\">\n\t\t\t\t\t<i class=\"bi bi-info-circle\"></i>\n\t\t\t\t</span>\n\t\t\t\t<span class=\"btn hide\" onclick=\"$('#copilot').removeClass('show')\">\n\t\t\t\t\t<i class=\"bi bi-chevron-bar-right\"></i>\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t</div>\n\t\t<p style=\"margin-top: 5px;padding: 8px 15px;background-image: radial-gradient(circle at 20px 5px,rgb(189, 104, 232) 10px,rgb(42, 72, 156) 70%);color: #fff;\">\n\t\t\tAI Copilot 震撼回归，无地域限制，遥遥领先于微软</p>\n\t\t<div class=\"chat\">\n\t\t\t<a class=\"a btn button\" onclick=\"copilot.init()\" style=\"display: inline-block;margin-top: 10px;\" data-i18n=\"copilot.start\">开始对话</a>\n\t\t\t<p style=\"margin-top: 10px;\" data-i18n=\"copilot.p\">使用前请先点击右上 \"<i class=\"bi bi-info-circle\"></i>\" 查看使用注意事项</p>\n\t\t</div>\n\t\t<div class=\"inputbox disable\">\n\t\t\t<input type=\"text\" class=\"input\" onkeydown=\"if(event.keyCode==13){copilot.send($(this).val());$(this).val('');this.blur()}\">\n\t\t\t<a class=\"a send btn\" onclick=\"copilot.send($('#copilot>.inputbox>.input').val());$('#copilot>.inputbox>.input').val('');\" data-i18n=\"copilot.send\">发送</a>\n\t\t</div>\n\t</div>\n\t<div id=\"control\">\n\t\t<div class=\"cont\">\n\t\t\t<div class=\"top\">\n\t\t\t\t<div class=\"btn1\">\n\t\t\t\t\t<div class=\"icon active\" onclick=\"controlStatus.call(this, 'wifi')\">\n\t\t\t\t\t\t<icon class=\"s-icon\"></icon>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"tit\">WLAN</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"btn2\">\n\t\t\t\t\t<div class=\"icon active\" onclick=\"controlStatus.call(this)\">\n\t\t\t\t\t\t<icon class=\"s-icon\"></icon>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"tit\" data-i18n=\"ctrl-blue\">蓝牙</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"btn3\">\n\t\t\t\t\t<div class=\"icon\" onclick=\"controlStatus.call(this, 'fly')\">\n\t\t\t\t\t\t<icon class=\"s-icon\"></icon>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"tit\" data-i18n=\"ctrl-air\">飞行模式</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"btn4\">\n\t\t\t\t\t<div class=\"icon\" onclick=\"controlStatus.call(this, 'dark')\">\n\t\t\t\t\t\t<icon class=\"s-icon\"></icon>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"tit\" data-i18n=\"ctrl-eye\">护眼模式</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"btn5\">\n\t\t\t\t\t<div class=\"icon\" onclick=\"controlStatus.call(this)\">\n\t\t\t\t\t\t<icon class=\"s-icon\"></icon>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"tit\" data-i18n=\"ctrl-hotspot\">移动热点</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"btn6\">\n\t\t\t\t\t<div class=\"icon\" onclick=\"controlStatus.call(this)\">\n\t\t\t\t\t\t<icon class=\"s-icon\"></icon>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"tit\" data-i18n=\"ctrl-acc\">辅助功能</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"bottom\">\n\t\t\t\t<div class=\"brightness\">\n\t\t\t\t\t<div class=\"icon\">\n\t\t\t\t\t\t<icon class=\"s-icon\"></icon>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"range-container\" onmousedown=\"dragBrightness(event)\" ontouchstart=\"dragBrightness(event)\">\n\t\t\t\t\t\t<div class=\"after\"></div>\n\t\t\t\t\t\t<div class=\"slider-btn\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div id=\"datebox\">\n\t\t<div class=\"tit\">\n\t\t\t<p class=\"time\">12:29:19</p>\n\t\t\t<p class=\"date\">星期一, 2022年09月22日</p>\n\t\t\t<p id=\"lunar\"></p>\n\t\t\t<hr>\n\t\t</div>\n\t\t<div class=\"cont\">\n\t\t\t<div class=\"head\" data-i18n=\"data-week\">\n\t\t\t\t<p>一</p><p>二</p><p>三</p><p>四</p><p>五</p><p>六</p><p>日</p>\n\t\t\t</div>\n\t\t\t<div class=\"body\">\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div id=\"dock-box\">\n\t\t<!-- Dock(任务)栏 -->\n\t\t<div class=\"dock dock-start\">\n\t\t\t<a class=\"dock-btn\" id=\"start-btn\" win12_title=\"开始 (Ctrl+Win)\" onclick=\"openDockWidget('start-menu')\" oncontextmenu=\"return showcm(event,'winx',null)\">\n\t\t\t\t<!-- 开始按钮 -->\n\t\t\t\t<svg class=\"menu\" viewBox=\"0,0,440,439\" xmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\" overflow=\"hidden\">\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t<clipPath id=\"clip-start1\">\n\t\t\t\t\t\t\t<rect x=\"134\" y=\"59\" width=\"440\" height=\"439\" />\n\t\t\t\t\t\t</clipPath>\n\t\t\t\t\t</defs>\n\t\t\t\t\t<g clip-path=\"url(#clip-start1)\" transform=\"translate(-134 -59)\">\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M233.479 67.5001 475.521 67.5001C525.767 67.5001 566.5 108.233 566.5 158.479L566.5 490.5 142.5 490.5 142.5 158.479C142.5 108.233 183.233 67.5001 233.479 67.5001Z\"\n\t\t\t\t\t\t\tstroke=\"#7F7F7F\" stroke-width=\"14.6667\" stroke-linecap=\"round\" stroke-miterlimit=\"8\"\n\t\t\t\t\t\t\tfill=\"#A6A6A6\" fill-rule=\"evenodd\" style=\"fill: var(--bg70);\" />\n\t\t\t\t\t\t<path d=\"M208.5 132.5 334.716 132.5\" stroke=\"#888\" stroke-width=\"14.6667\" stroke-linecap=\"round\"\n\t\t\t\t\t\t\tstroke-miterlimit=\"8\" fill=\"none\" fill-rule=\"evenodd\" />\n\t\t\t\t\t\t<path d=\"M208.5 175.5 386.34 175.5\" stroke=\"#888\" stroke-width=\"14.6667\" stroke-linecap=\"round\"\n\t\t\t\t\t\t\tstroke-miterlimit=\"8\" fill=\"none\" fill-rule=\"evenodd\" />\n\t\t\t\t\t\t<path d=\"M208.5 221.5 271.608 221.5\" stroke=\"#888\" stroke-width=\"14.6667\" stroke-linecap=\"round\"\n\t\t\t\t\t\t\tstroke-miterlimit=\"8\" fill=\"none\" fill-rule=\"evenodd\" />\n\t\t\t\t\t</g>\n\t\t\t\t</svg>\n\t\t\t\t<img src=\"icon/logo.svg\" class=\"ico\">\n\t\t\t</a>\n\t\t\t<a class=\"dock-btn\" id=\"search-btn\" win12_title=\"搜索\" onclick=\"openDockWidget('search-win')\">\n\t\t\t\t<!--搜索按钮-->\n\t\t\t\t<svg class=\"out\" width=\"26\" height=\"26\" viewBox=\"0,0,228,229\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" overflow=\"hidden\"><defs><clipPath id=\"clip-search-out-0\"><rect x=\"548\" y=\"268\" width=\"228\" height=\"229\"/></clipPath><linearGradient x1=\"738.799\" y1=\"300.076\" x2=\"608.064\" y2=\"486.786\" gradientUnits=\"userSpaceOnUse\" spreadMethod=\"reflect\" id=\"fill-search-out-1\"><stop offset=\"0\" stop-color=\"#A6A6A6\"/><stop offset=\"0.18\" stop-color=\"#A6A6A6\"/><stop offset=\"0.91\" stop-color=\"#595959\"/><stop offset=\"1\" stop-color=\"#595959\"/></linearGradient></defs><g clip-path=\"url(#clip-search-out-0)\" transform=\"translate(-548 -268)\"><path d=\"M640 268.696C690.41 268.696 731.276 309.574 731.276 360 731.276 378.91 725.529 396.477 715.687 411.049L713.816 413.318 771.4 470.903C777.068 476.571 777.068 485.761 771.4 491.429 765.732 497.097 756.542 497.097 750.874 491.429L693.292 433.847 691.033 435.711C676.465 445.556 658.904 451.305 640 451.304 589.59 451.305 548.724 410.426 548.724 360 548.724 309.574 589.59 268.696 640 268.696Z\" fill=\"url(#fill-search-out-1)\" fill-rule=\"evenodd\"/></g></svg>\n\t\t\t\t<svg class=\"in\" width=\"20\" height=\"20\" viewBox=\"0,0,134,134\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" overflow=\"hidden\"><defs><clipPath id=\"clip-search-in-0\"><rect x=\"573\" y=\"293\" width=\"134\" height=\"134\"/></clipPath><linearGradient x1=\"611.068\" y1=\"280.509\" x2=\"668.932\" y2=\"439.491\" gradientUnits=\"userSpaceOnUse\" spreadMethod=\"reflect\" id=\"fill-search-in-1\"><stop offset=\"0\" stop-color=\"#82CDF6\"/><stop offset=\"0.18\" stop-color=\"#82CDF6\"/><stop offset=\"0.91\" stop-color=\"#4297D6\"/><stop offset=\"1\" stop-color=\"#4297D6\"/></linearGradient><image width=\"132\" height=\"132\" xlink:href=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIQAAACECAMAAABmmnOVAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFZUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKhZnwEAAABzdFJOUwABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJv0gLZAAAACXBIWXMAAA7DAAAOwwHHb6hkAAARAklEQVR4XsWb91caWRTH2TQbFjoMvUlHmoKggihiw94Su8ZojInZ/P8/7Pfe9wZI1wjZ7zm7x8AM8zm3vpl5V/OHGvSMlde3tk5OLm9vzw8P19ZWpuMurfzyL2gotvjm5u7D+5vr63dXV28vLy+ELi/fnm6VRwflYd3TQKh2/unu9j0uf3lxfnZ6cnJ8fHR0yDo6Oj4+OT0735vy98vDu6CRscYtCG6uAXB2enx0+PrgYH9/b3d3h7S7u7u3v3/w+vDo+OTNbLgrBnkVnD+/B8G7txdnJ8e4/t7u9tbmxsb6+lpDaG1tfX1jc2sbLAdvjjYn3S/lqZ3Si+zV548f3l8TwdGbg72drY31xurK8tLiYr2+sLBQq+F/9fri0vLKagMo27v7rw83o8/l6Z2QPn94//HDzbvL85Oj1/u725vrjZWl+kJtvlqdrZTL5RlWuVyZna3O1xbqS8uraxtbO3sHy4kR+RNPVV/pw/3H25ury7Pjw4Pd7Y211eXFhflqpTwzVSoWJwuFPDSRzxcKk8ViaWqmXKnO1epLK431rZ397Uyf/JmnqDd3+vnj7fXVxSmMsLO5trpUr83NlqdLxUJ+YjyXzaTT6RQpnc5kstnceL4wCZJKdX5hcaWxsbW7En0yRnDj308fbhhhb3ujsVyvVSszU8XCRC6bTo0lE/FYLEqK4L9YPJ5IjqXSGZBMFqfLs/MLSytrmzszLvljfybT7O393ft3cAQhrC4tzFVmSpP58Wx6DJePhEOjwUAg4Gfhj2BwNBSORGOJZCqTnSiAo1qDOTY3Mnr5g38g7y15QiCsA6Fani7mxzOpJAHg+n6f1+N2u11C+Mvj9fr8gWAoHI0nxjK5icnSzOx8fbmxsW6XP/lYaafv7u9urs5P3jBCrVqempzIppPxKABwfbfL6XDYFUWxSSmK3e5wOl0ery8wGorEEqnMeL44XZlbWG6sJ/+oijrXvnz6cP327OhgB44AQqkwnhlLgMDv87iduLzNarGYTSaTUZXJZLZYrDbF7gCIPxiKxJOp7MTkVGWuvrJWMMsffoTGkBTv313ADFtry3DEFCHEo6Ggz+NyEgAubzTo9TqdbkSVTqc3GIxGM0CIA/YIRxPAKE7Pzi+uVr3ypx+qZ8V7uEKYYWVxvjI1SQiR0YDP7XIoVhgAALqR4eHhoaGhQVVDQ8PDQNEbjCYzOJxumIMwcvniTLW2tBr+R/78g9Rb+XL/4fry9BBmWKrNTk9OMILfCwKbRQLg4toBqL+pgQGtVguWYQIBhwIOXzAUTaZzhVJ5rr4aeyUv8AAN1b58uiVX7G6uLs6VS/ksI3icdiZgAC0u3tfX+436+vrAIkDAYbEqhBGOJTPjk9OzC8vJBxcu48q/YDg/PthZX1mozsATyWgoACsQAmxABAP9AOiBXrWLPgAJcwgMs9Xu9PhHI/FUNj9VmV9KD8mL/EavDv/9+P7q/Ohge225NjtVyKbi4aDP7VAsJoMeRlAJcNGXpBdS/I+XjAKLMAfcYrTY7C5vAD7JTBRn5urFF/Iyv9QQ7EAM+1uNpflyaYLMAE8Qgo4IyAkwAF/8udAzSP4pYAQIccAcRrPN4YJP4qlcYbpaTz3AI701ssMZMSzOzRTH04kImcFmNurhB9UGhEDXpMu3qwUCDsYYGtYZTAgNjz8UG8sWpmYX4r9d7Dwrf4EdzpAWq/Xq9GQuFQsFYAYrmYERWkYQl/2nTeITJgGHxIBT2Bhu3yhcki9Var/N1CLyAr7Y2wQDwiEZHZVmGB7UEgKM0CSQl5ZnauQ/mYNIyBw9PYQhjeENhhPpCVAE5Bk/0dj9PfICviCGfDYZCXpdMAM8oR0gBOEGuoi8pDxPSn5IYgxwkDXgEzaGJ4DAGC+Wq055/A/lPLn/oDJM5zPEgIikaGAzfIfwnV3lxyRhDXilp1cYg1ziDzHF5C9au3bt8931xfHBVoPskEFIepw2M0cDmwEIRMAI8pSfqokBp/T2IUBH9CarHRQxokj2yMO+1/SXjzeXJwfbjUVmCAc8DuGK/iYCXf/3BCw6UGCoxjBa7C7fKFFUfhoW8btP79+evtlZW5qbRkxGmMEwgohkBnIEIzyMQaV4Jij6mhSwxURpWpEHfaPeWwTE2eHu+vL8zCTFpMdhgx2QmL0UkJJBHvwgqRSMgfhkCooL5MjUjyvnLAUEknOlVi7mmAG+oHBQzfBYBjVOVWMgS1oUUz90SPD2483bk4Ot1YXZ0ngqirz4hoF+Tx77YDEEU7xAsrItKDrDiUyhaJLHtKl34/726gwBgaCcSMdGvU4bxcPTGL6iYFsM60xW1ItIMjcZ+7585/69u0al3FiamylkEiGfSzFTPDyRQaiNYnAYmerwBKNj46XvSlYfMgPZuYWAoKAMuBVLB+ygiikoMMgWepPN6R2NpScK38Zm6TMyg5whAgJBadShPnSGoWmLlz3I1BGDWXEhLLIFj/xWSn+KMnW8t7E8j2odD/kQEPph1IcOMbR5pG9ApEgADkl/fS+Sp6h8vb26UIEzwn43B0QHGVQKqhdIVIQFOST/VVQMH36kErG+hMwYE84YGRpAx+oYQ4uCw8JsY4cke+WXpBwMcfp6axVRqTpjSEtB2TmGJoUIC4sdGZIaby/eVx9vLlCvUSLGxygzzAY1IDrHwBRIEeqpCAur0xuKZ9LyKyj4+cPVKaUnSkR81OuwGHWUnR1mEBRNhyjuQGQsZ5BfaTTzSA1ExGK1BEP4XQplRl/vKwqITjKAghyCmgWHGCk245nm/enIOWoEUqNWJkN4HFSm0L1VQ8ijOiJhCsoQik2YohmaY/fvL4/3N5AaZAhEpW6ozRnyoM6o5RDEJpvCIr9poGsc7jQWKDVGvXaLYViUiM4ztGXIkN7EUSE7+sDnW7TwzeW5adSIgIvSUxqi4wyAoAwhUyBNOSqyopfGPt1cHO2u1SvFLLonUmNEpGcXGFRTUFSIBImmxLKieifCciafjgbdlBrUPNkQ/H1H1W4KrhVJN39+AG9QWJbGk2Gfy4buKVOjGxCtqIAp0MeCsRB9alG9QWHJ+SlqBIUln9ZhkSkoQQYGdVhY+CNjA/gweXd99oa9kYpSoWrPT3FahyVNgbKJDuINJSgoFm+vODemyBtOtM/BATU/xUmdljAFZ6lZ8QRjFBS7qFQo2bPFLLxBRYLWU2wIcU7HxRDoY/3kD5c/gkrx4uL6gitVIR1DbpjbioQ8qdPiBGEIyg9fKPJMY6AE3VqZR6USJbvb3pCm4FJhMGNZEe/V+KiLU4LmEmEfrahQqbpqCEgERa8s3dFhTYpDgsol9Q2sZrrtDYhMIeuVzemLGDUzVCWaIYG+gZLdxfwUEv6Q/SOkaNbQQUWViFDz0lEDZUN0G0Itmp5Rj2ZDxCVW2WE/Vwm1b3QX4hmKJlcKVG6PZgdxublMjYM6KKoEQkIs6+QJ3ZBMUix4TYor4NMcoF4iOYq5BK1w0UHRvLodEgLipSxXAb/miFoo18ugx25uQcjDuyPYmdsHp4c/oDnnoo0WGsP9BnUvlKruJigJphA9jGpmUPOWFvt1ytC/DPGc0wM56hvVvOXFBCCiAkJmqDy4W2pBoJsHNWe4/0OtwtLOj1UV34r/PQjkKCD8mjfcQ8WKRoXodly2Q2BJ4dXs/f8Qbs0mQci13f8E4dKsCoiJFO6E/ycIh2blB5b4m4GJZY1DU+LsIAg00b8NoR2iFDVrEpeoE4CgOiEh/mqxAoRO42EIWTH/DwiHV6vRidVdIcMLq79UttUGRr3D4evRvHhzvE8NjLsoQ1AX7ToEL63Eot+DazXobhitHOsJauW8qPkrEOpKl3a6zIqVVS4ZwqJGrKy6nh4cEuKeWHHRDpMorTHlnSjfkos1pji6S1IhhnRmxT2MD0y02pY3YLTQlYWiqw4RELTaRq3i53drR1wyUShQrXjJj6DoblTwaltmqHiyXDze40cksaDnb9wPQyIuxc2P08gfjYqHRblEiB8favu7DQEGNSSMNpfYPdpP6SEik26Im0HBX3ZBCDeCUG+I5Z7NWfVpkbgPHOjrbs0kCPXRgMWhbgELt56boVzRiw5+iCm/7bgkhHxIom70GdykoKBHqV6HlZ4pd+0pJosZeDGB+y+l+XJ0svmoBv6g904iSeW3nZZqCHjDbG+973DTWrdMjZTvBNWi2R0K9gbXbHrnQQ8xpbb58R2S1Oe08suOrtUrIKiVitaX7e/AYgfsjxS9/+rmQ35hB1mpKDfa958NLre/7uCn/AKi4xQCgosEwtL61YvqhPqEHU2MS4Vqik5TqIYQzevrXd0jK/QuEPWKn6eqpbsLFBSVFJZcJKzf7IxM7a7Rk5KEeLzd9oy9sxD4vVZ+Kjr5qaq+nU0OTZjCbtGLl2CdhxDOkIXK6vhuq390p4HSTS+gnPTepSsJIhnIGUgNhZZUX6t3hlopmQIFS9YKppDfd0DsCxGVlBqmH8w8uDYaC5ViDglCLwTFu/KOVixiYGdQVOLOq61YtpTZWJ6bztOeHt5GAodQsegYhWQQUYmFxLdRKdSz3qijdicjARdtGxgU+yc6RcEMzag0WpSfDKD411fmxdai9t0snaEQdqCoFNsnbD8d10ryJqsUmmnLIZ2haDKIXU5m5ecTMP2FVRmbtI+Ddzipew/lEX+opi9e9VJmGK2GX+xZNleXySG8owXVG3lKwflkijaGfg4Ic/temu/kXREOQYZgzUth0QGPtOIBiUEMPw8IoTA7RO4wEhRP9UiLgRKDtnp9Xyq/1j8xckg2GQ6gh/CmM0qRp1C0xwOqFAXlb3/pVZL2pWYSCE6iEB5BpjLGH4AIBBkPSE6zTfdMfvUL9aXr1al8Oh7yu5hisB+Z2qJ4BAYfLlzBuaklX9h+lRgtvSjVZ0sTKaSIoNBSvSCXPNYYzMA9i32BeNCbbaYH2IE0mFqolMaRIj63Xe5Obe5WJgx52O/EBBQNHJKUF2SH327kV9UXr1WKoAghLuSe6b5e2kBPxniIU/iQVjTwXmXkJtZSD/KF0MtwrSwpaNc0kkQa43kTQx75QzFBO4Pcta2MPNAXUoH5cjGHuPB7aJyAJxqI4kEYKkHTDBSSejD8rj58J2cetkjHwwGeL2lOFIgIbXpFSJ6iWkACcDBQcdDyTn6r+Q/mnPXJcnGCRky8LruVN/SL2Qo53UEc7SAtCQQQwArsCWEGwy/7xc/UE5jmYZtRBIZNjDbwlInAUDkgeXFI/Fs1Ao/ciFEXi23kESH5lYxTU4XcWCwcYGPwvA1bQ8wcCZAWC18dYhsgFEBAQz+EoChPmK8eDBQnx9MJGINGbsw0/EQDYDx9JTlI4uJ0eVyfCcgGYgyLrGDX/XyS4iEyxUoTWRgj6CWf8AyWmEMTHOoYlir6AAQqgk5vNFsV0w/X1Y/RS2emQMbgaTRYw6jX0TxcayCOBtCa4qE4Gs9rzqIptuFOzFRrPel8NkXTibCGYiVztCYD+4lFlRwPpEHFEZ3BaIYjrE/0REv9zqQckvS6aT7QzBOKACESGIWFP7Q0KTnM44k0J6k4rCOPmEj8rZ4pmVwLQ53V1OvUaU0S/lJHRk08MaoMPbTXPVTPDd4kDc6Ggn6v2yXmZmlu1WgADMlA86owAI2sKg6nYhh4XKN4oHotgVQqGYsQBw/wgsRmpRleksViseLyit3hdDnNQw9u2Y9Xv8kdGksQR4AmqV0uJ7NAdrvdQVPMbo9iHOxkJPxYPQb3aCwejfBQud/n83o9JK/X6/M6umqCb/VyyGj3eD3BwGgYFcTrcDjMuoE/aw8azX8p1DsCWPfRswAAAABJRU5ErkJggg==\" preserveAspectRatio=\"none\" id=\"img2\"></image><clipPath id=\"clip-search-in-3\"><rect x=\"574\" y=\"294\" width=\"132\" height=\"132\"/></clipPath></defs><g clip-path=\"url(#clip-search-in-0)\" transform=\"translate(-573 -293)\"><path d=\"M574 360C574 323.549 603.549 294 640 294 676.451 294 706 323.549 706 360 706 396.451 676.451 426 640 426 603.549 426 574 396.451 574 360Z\" fill=\"url(#fill-search-in-1)\" fill-rule=\"evenodd\"/><g clip-path=\"url(#clip-search-in-3)\"><use width=\"100%\" height=\"100%\" xlink:href=\"#img2\" transform=\"translate(574 294)\"></use></g></g></svg>\n\t\t\t</a>\n\t\t\t<a class=\"dock-btn\" id=\"widgets-btn\" win12_title=\"小组件\" onclick=\"news.setup(); openDockWidget('widgets')\">\n\t\t\t\t<!--小组件按钮-->\n\t\t\t\t<svg viewBox=\"0,0,260,260\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" overflow=\"hidden\" class=\"wid1\"><defs><clipPath id=\"clip-wid1-0\"><rect x=\"510\" y=\"230\" width=\"260\" height=\"260\"/></clipPath><linearGradient x1=\"551.891\" y1=\"207.391\" x2=\"728.109\" y2=\"512.609\" gradientUnits=\"userSpaceOnUse\" spreadMethod=\"reflect\" id=\"fill-wid1-1\"><stop offset=\"0\" stop-color=\"#7AB1FA\"/><stop offset=\"0.18\" stop-color=\"#7AB1FA\"/><stop offset=\"0.91\" stop-color=\"#4C6EDC\"/><stop offset=\"1\" stop-color=\"#4C6EDC\"/></linearGradient></defs><g clip-path=\"url(#clip-wid1-0)\" transform=\"translate(-510 -230)\"><path d=\"M511 274.001C511 250.252 530.252 231 554.001 231L725.999 231C749.748 231 769 250.252 769 274.001L769 445.999C769 469.748 749.748 489 725.999 489L554.001 489C530.252 489 511 469.748 511 445.999Z\" fill=\"url(#fill-wid1-1)\" fill-rule=\"evenodd\"/></g></svg>\n\t\t\t\t<svg viewBox=\"0,0,175,206\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" overflow=\"hidden\" class=\"wid2\"><defs><filter id=\"fx0\" x=\"-10%\" y=\"-10%\" width=\"120%\" height=\"120%\" filterUnits=\"userSpaceOnUse\" primitiveUnits=\"userSpaceOnUse\"><feComponentTransfer color-interpolation-filters=\"sRGB\"><feFuncR type=\"discrete\" tableValues=\"0 0\"/><feFuncG type=\"discrete\" tableValues=\"0 0\"/><feFuncB type=\"discrete\" tableValues=\"0 0\"/><feFuncA type=\"linear\" slope=\"0.4\" intercept=\"0\"/></feComponentTransfer><feGaussianBlur stdDeviation=\"5.81042 5.77778\"/></filter><filter id=\"fx1\" x=\"-10%\" y=\"-10%\" width=\"120%\" height=\"120%\" filterUnits=\"userSpaceOnUse\" primitiveUnits=\"userSpaceOnUse\"><feComponentTransfer color-interpolation-filters=\"sRGB\"><feFuncR type=\"discrete\" tableValues=\"0 0\"/><feFuncG type=\"discrete\" tableValues=\"0 0\"/><feFuncB type=\"discrete\" tableValues=\"0 0\"/><feFuncA type=\"linear\" slope=\"0.4\" intercept=\"0\"/></feComponentTransfer><feGaussianBlur stdDeviation=\"4 4\"/></filter><filter id=\"fx2\" x=\"-10%\" y=\"-10%\" width=\"120%\" height=\"120%\" filterUnits=\"userSpaceOnUse\" primitiveUnits=\"userSpaceOnUse\"><feComponentTransfer color-interpolation-filters=\"sRGB\"><feFuncR type=\"discrete\" tableValues=\"0 0\"/><feFuncG type=\"discrete\" tableValues=\"0 0\"/><feFuncB type=\"discrete\" tableValues=\"0 0\"/><feFuncA type=\"linear\" slope=\"0.4\" intercept=\"0\"/></feComponentTransfer><feGaussianBlur stdDeviation=\"4 4\"/></filter><filter id=\"fx3\" x=\"-10%\" y=\"-10%\" width=\"120%\" height=\"120%\" filterUnits=\"userSpaceOnUse\" primitiveUnits=\"userSpaceOnUse\"><feComponentTransfer color-interpolation-filters=\"sRGB\"><feFuncR type=\"discrete\" tableValues=\"0 0\"/><feFuncG type=\"discrete\" tableValues=\"0 0\"/><feFuncB type=\"discrete\" tableValues=\"0 0\"/><feFuncA type=\"linear\" slope=\"0.4\" intercept=\"0\"/></feComponentTransfer><feGaussianBlur stdDeviation=\"4 4\"/></filter><clipPath id=\"clip-wid2-4\"><rect x=\"615\" y=\"214\" width=\"175\" height=\"206\"/></clipPath><clipPath id=\"clip-wid2-5\"><rect x=\"-6.53674\" y=\"-6.5\" width=\"101.068\" height=\"115\"/></clipPath><clipPath id=\"clip-wid2-6\"><rect x=\"0\" y=\"0\" width=\"89\" height=\"104\"/></clipPath><linearGradient x1=\"644.325\" y1=\"249.245\" x2=\"754.675\" y2=\"380.755\" gradientUnits=\"userSpaceOnUse\" spreadMethod=\"reflect\" id=\"fill-wid2-7\"><stop offset=\"0\" stop-color=\"#775CFE\"/><stop offset=\"0.43\" stop-color=\"#775CFE\"/><stop offset=\"0.83\" stop-color=\"#2473DC\"/><stop offset=\"1\" stop-color=\"#2473DC\"/></linearGradient><clipPath id=\"clip-wid2-8\"><rect x=\"-5\" y=\"-5\" width=\"67\" height=\"42\"/></clipPath><clipPath id=\"clip-wid2-9\"><rect x=\"0\" y=\"0\" width=\"57\" height=\"35\"/></clipPath><clipPath id=\"clip-wid2-10\"><rect x=\"-5\" y=\"-5\" width=\"103\" height=\"42\"/></clipPath><clipPath id=\"clip-wid2-11\"><rect x=\"0\" y=\"0\" width=\"93\" height=\"35\"/></clipPath><clipPath id=\"clip-wid2-12\"><rect x=\"-5\" y=\"-5\" width=\"80\" height=\"42\"/></clipPath><clipPath id=\"clip-wid2-13\"><rect x=\"0\" y=\"0\" width=\"72\" height=\"35\"/></clipPath></defs><g clip-path=\"url(#clip-wid2-4)\" transform=\"translate(-615 -214)\"><g clip-path=\"url(#clip-wid2-5)\" filter=\"url(#fx0)\" transform=\"matrix(1.98876 0 0 2 614 213)\"><g clip-path=\"url(#clip-wid2-6)\"><path d=\"M18.2408 33.043C18.2408 24.8162 24.9475 18.1472 33.2208 18.1472L56.0574 18.1472C64.3306 18.1472 71.0374 24.8162 71.0374 33.043L71.0374 71.2513C71.0374 79.4781 64.3306 86.1472 56.0574 86.1472L33.2208 86.1472C24.9475 86.1472 18.2408 79.4781 18.2408 71.2513Z\" fill=\"#FF0000\" fill-rule=\"evenodd\"/></g></g><path d=\"M647 276.792C647 260.338 660.338 247 676.792 247L722.208 247C738.662 247 752 260.338 752 276.792L752 353.208C752 369.662 738.662 383 722.208 383L676.792 383C660.338 383 647 369.662 647 353.208Z\" fill=\"url(#fill-wid2-7)\" fill-rule=\"evenodd\"/><g clip-path=\"url(#clip-wid2-8)\" filter=\"url(#fx1)\" transform=\"translate(649 260)\"><g clip-path=\"url(#clip-wid2-9)\"><path d=\"M17.3857 17.3857 39.7776 17.3858\" stroke=\"#FFFFFF\" stroke-width=\"9\" stroke-linecap=\"round\" stroke-miterlimit=\"8\" fill=\"none\" fill-rule=\"evenodd\"/></g></g><path d=\"M664.5 275.5 686.892 275.5\" stroke=\"#FFFFFF\" stroke-width=\"8.66667\" stroke-linecap=\"round\" stroke-miterlimit=\"8\" fill=\"none\" fill-rule=\"evenodd\"/><g clip-path=\"url(#clip-wid2-10)\" filter=\"url(#fx2)\" transform=\"translate(649 282)\"><g clip-path=\"url(#clip-wid2-11)\"><path d=\"M17.3857 17.3857 75.9099 17.3858\" stroke=\"#FFFFFF\" stroke-width=\"9\" stroke-linecap=\"round\" stroke-miterlimit=\"8\" fill=\"none\" fill-rule=\"evenodd\"/></g></g><path d=\"M664.5 297.5 723.024 297.5\" stroke=\"#FFFFFF\" stroke-width=\"8.66667\" stroke-linecap=\"round\" stroke-miterlimit=\"8\" fill=\"none\" fill-rule=\"evenodd\"/><g clip-path=\"url(#clip-wid2-12)\" filter=\"url(#fx3)\" transform=\"translate(649 305)\"><g clip-path=\"url(#clip-wid2-13)\"><path d=\"M17.3857 17.3857 54.5358 17.3858\" stroke=\"#FFFFFF\" stroke-width=\"9\" stroke-linecap=\"round\" stroke-miterlimit=\"8\" fill=\"none\" fill-rule=\"evenodd\"/></g></g><path d=\"M664.5 320.5 701.65 320.5\" stroke=\"#FFFFFF\" stroke-width=\"8.66667\" stroke-linecap=\"round\" stroke-miterlimit=\"8\" fill=\"none\" fill-rule=\"evenodd\"/></g></svg>\n\t\t\t\t<svg viewBox=\"0,0,174,298\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" overflow=\"hidden\" class=\"wid3\"><defs><filter id=\"fx0\" x=\"-10%\" y=\"-10%\" width=\"120%\" height=\"120%\" filterUnits=\"userSpaceOnUse\" primitiveUnits=\"userSpaceOnUse\"><feComponentTransfer color-interpolation-filters=\"sRGB\"><feFuncR type=\"discrete\" tableValues=\"0 0\"/><feFuncG type=\"discrete\" tableValues=\"0 0\"/><feFuncB type=\"discrete\" tableValues=\"0 0\"/><feFuncA type=\"linear\" slope=\"0.4\" intercept=\"0\"/></feComponentTransfer><feGaussianBlur stdDeviation=\"5.81079 5.7971\"/></filter><filter id=\"fx1\" x=\"-10%\" y=\"-10%\" width=\"120%\" height=\"120%\" filterUnits=\"userSpaceOnUse\" primitiveUnits=\"userSpaceOnUse\"><feComponentTransfer color-interpolation-filters=\"sRGB\"><feFuncR type=\"discrete\" tableValues=\"0 0\"/><feFuncG type=\"discrete\" tableValues=\"0 0\"/><feFuncB type=\"discrete\" tableValues=\"0 0\"/><feFuncA type=\"linear\" slope=\"0.4\" intercept=\"0\"/></feComponentTransfer><feGaussianBlur stdDeviation=\"4 4\"/></filter><filter id=\"fx2\" x=\"-10%\" y=\"-10%\" width=\"120%\" height=\"120%\" filterUnits=\"userSpaceOnUse\" primitiveUnits=\"userSpaceOnUse\"><feComponentTransfer color-interpolation-filters=\"sRGB\"><feFuncR type=\"discrete\" tableValues=\"0 0\"/><feFuncG type=\"discrete\" tableValues=\"0 0\"/><feFuncB type=\"discrete\" tableValues=\"0 0\"/><feFuncA type=\"linear\" slope=\"0.4\" intercept=\"0\"/></feComponentTransfer><feGaussianBlur stdDeviation=\"4 4\"/></filter><filter id=\"fx3\" x=\"-10%\" y=\"-10%\" width=\"120%\" height=\"120%\" filterUnits=\"userSpaceOnUse\" primitiveUnits=\"userSpaceOnUse\"><feComponentTransfer color-interpolation-filters=\"sRGB\"><feFuncR type=\"discrete\" tableValues=\"0 0\"/><feFuncG type=\"discrete\" tableValues=\"0 0\"/><feFuncB type=\"discrete\" tableValues=\"0 0\"/><feFuncA type=\"linear\" slope=\"0.4\" intercept=\"0\"/></feComponentTransfer><feGaussianBlur stdDeviation=\"4 4\"/></filter><clipPath id=\"clip-wid3-4\"><rect x=\"498\" y=\"214\" width=\"174\" height=\"298\"/></clipPath><clipPath id=\"clip-wid3-5\"><rect x=\"-6.53714\" y=\"-6.52174\" width=\"98.0572\" height=\"162.04\"/></clipPath><clipPath id=\"clip-wid3-6\"><rect x=\"0\" y=\"0\" width=\"88\" height=\"150\"/></clipPath><linearGradient x1=\"668.609\" y1=\"288.246\" x2=\"496.391\" y2=\"432.754\" gradientUnits=\"userSpaceOnUse\" spreadMethod=\"reflect\" id=\"fill-wid3-7\"><stop offset=\"0\" stop-color=\"#C45DD5\"/><stop offset=\"0.18\" stop-color=\"#C45DD5\"/><stop offset=\"0.69\" stop-color=\"#A266E4\"/><stop offset=\"1\" stop-color=\"#A266E4\"/></linearGradient><clipPath id=\"clip-wid3-8\"><rect x=\"-5\" y=\"-5\" width=\"86\" height=\"42\"/></clipPath><clipPath id=\"clip-wid3-9\"><rect x=\"0\" y=\"0\" width=\"77\" height=\"35\"/></clipPath><clipPath id=\"clip-wid3-10\"><rect x=\"-5\" y=\"-5\" width=\"67\" height=\"42\"/></clipPath><clipPath id=\"clip-wid3-11\"><rect x=\"0\" y=\"0\" width=\"58\" height=\"35\"/></clipPath><clipPath id=\"clip-wid3-12\"><rect x=\"-5\" y=\"-5\" width=\"92\" height=\"42\"/></clipPath><clipPath id=\"clip-wid3-13\"><rect x=\"0\" y=\"0\" width=\"85\" height=\"35\"/></clipPath></defs><g clip-path=\"url(#clip-wid3-4)\" transform=\"translate(-498 -214)\"><g clip-path=\"url(#clip-wid3-5)\" filter=\"url(#fx0)\" transform=\"matrix(1.98864 0 0 1.99333 498 214)\"><g clip-path=\"url(#clip-wid3-6)\" transform=\"translate(2.84217e-14 -1.42109e-14)\"><path d=\"M18.0166 36.3921C18.0166 26.2201 26.2821 17.9741 36.4781 17.9741L51.3493 17.9741C61.5454 17.9741 69.8109 26.2201 69.8109 36.3921L69.8109 113.436C69.8109 123.608 61.5454 131.854 51.3493 131.854L36.4781 131.854C26.2821 131.854 18.0166 123.608 18.0166 113.436Z\" fill=\"#FF0000\" fill-rule=\"evenodd\"/></g></g><path d=\"M531 283.713C531 263.437 547.437 247 567.713 247L597.287 247C617.563 247 634 263.437 634 283.713L634 437.287C634 457.563 617.563 474 597.287 474L567.713 474C547.437 474 531 457.563 531 437.287Z\" fill=\"url(#fill-wid3-7)\" fill-rule=\"evenodd\"/><g clip-path=\"url(#clip-wid3-8)\" filter=\"url(#fx1)\" transform=\"translate(534 259)\"><g clip-path=\"url(#clip-wid3-9)\"><path d=\"M17.3857 17.3857 59.5683 17.3858\" stroke=\"#FFFFFF\" stroke-width=\"9\" stroke-linecap=\"round\" stroke-miterlimit=\"8\" fill=\"none\" fill-rule=\"evenodd\"/></g></g><path d=\"M549.5 274.5 591.683 274.5\" stroke=\"#FFFFFF\" stroke-width=\"8.66667\" stroke-linecap=\"round\" stroke-miterlimit=\"8\" fill=\"none\" fill-rule=\"evenodd\"/><g clip-path=\"url(#clip-wid3-10)\" filter=\"url(#fx2)\" transform=\"translate(534 281)\"><g clip-path=\"url(#clip-wid3-11)\"><path d=\"M17.3857 17.3857 40.3525 17.3858\" stroke=\"#FFFFFF\" stroke-width=\"9\" stroke-linecap=\"round\" stroke-miterlimit=\"8\" fill=\"none\" fill-rule=\"evenodd\"/></g></g><path d=\"M549.5 296.5 572.467 296.5\" stroke=\"#FFFFFF\" stroke-width=\"8.66667\" stroke-linecap=\"round\" stroke-miterlimit=\"8\" fill=\"none\" fill-rule=\"evenodd\"/><g clip-path=\"url(#clip-wid3-12)\" filter=\"url(#fx3)\" transform=\"translate(534 302)\"><g clip-path=\"url(#clip-wid3-13)\"><path d=\"M17.3857 17.3857 67.3293 17.3858\" stroke=\"#FFFFFF\" stroke-width=\"9\" stroke-linecap=\"round\" stroke-miterlimit=\"8\" fill=\"none\" fill-rule=\"evenodd\"/></g></g><path d=\"M549.5 317.5 599.444 317.5\" stroke=\"#FFFFFF\" stroke-width=\"8.66667\" stroke-linecap=\"round\" stroke-miterlimit=\"8\" fill=\"none\" fill-rule=\"evenodd\"/></g></svg>\n\t\t\t\t<svg viewBox=\"0,0,141,113\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" overflow=\"hidden\" class=\"wid4\"><defs><filter id=\"fx0\" x=\"-10%\" y=\"-10%\" width=\"120%\" height=\"120%\" filterUnits=\"userSpaceOnUse\" primitiveUnits=\"userSpaceOnUse\"><feComponentTransfer color-interpolation-filters=\"sRGB\"><feFuncR type=\"discrete\" tableValues=\"0 0\"/><feFuncG type=\"discrete\" tableValues=\"0 0\"/><feFuncB type=\"discrete\" tableValues=\"0 0\"/><feFuncA type=\"linear\" slope=\"0.4\" intercept=\"0\"/></feComponentTransfer><feGaussianBlur stdDeviation=\"5.77778 5.77778\"/></filter><filter id=\"fx1\" x=\"-10%\" y=\"-10%\" width=\"120%\" height=\"120%\" filterUnits=\"userSpaceOnUse\" primitiveUnits=\"userSpaceOnUse\"><feComponentTransfer color-interpolation-filters=\"sRGB\"><feFuncR type=\"discrete\" tableValues=\"0 0\"/><feFuncG type=\"discrete\" tableValues=\"0 0\"/><feFuncB type=\"discrete\" tableValues=\"0 0\"/><feFuncA type=\"linear\" slope=\"0.4\" intercept=\"0\"/></feComponentTransfer><feGaussianBlur stdDeviation=\"4 4\"/></filter><clipPath id=\"clip-wid4-2\"><rect x=\"629\" y=\"380\" width=\"141\" height=\"113\"/></clipPath><clipPath id=\"clip-wid4-3\"><rect x=\"-6\" y=\"-3\" width=\"154\" height=\"121\"/></clipPath><clipPath id=\"clip-wid4-4\"><rect x=\"0\" y=\"0\" width=\"143\" height=\"115\"/></clipPath><linearGradient x1=\"670.387\" y1=\"386.075\" x2=\"728.613\" y2=\"486.925\" gradientUnits=\"userSpaceOnUse\" spreadMethod=\"reflect\" id=\"fill-wid4-5\"><stop offset=\"0\" stop-color=\"#D854CB\"/><stop offset=\"0.13\" stop-color=\"#D854CB\"/><stop offset=\"1\" stop-color=\"#A266E4\"/></linearGradient><clipPath id=\"clip-wid4-6\"><rect x=\"-5\" y=\"-5\" width=\"105\" height=\"69\"/></clipPath><clipPath id=\"clip-wid4-7\"><rect x=\"0\" y=\"0\" width=\"98\" height=\"63\"/></clipPath></defs><g clip-path=\"url(#clip-wid4-2)\" transform=\"translate(-629 -380)\"><g clip-path=\"url(#clip-wid4-3)\" filter=\"url(#fx0)\" transform=\"translate(628 379)\"><g clip-path=\"url(#clip-wid4-4)\"><path d=\"M18.97 46.5177C18.97 31.4582 31.1781 19.25 46.2377 19.25L96.7623 19.25C111.822 19.25 124.03 31.4582 124.03 46.5177L124.03 68.4823C124.03 83.5418 111.822 95.75 96.7623 95.75L46.2377 95.75C31.1781 95.75 18.97 83.5418 18.97 68.4823Z\" fill=\"#FF0000\" fill-rule=\"evenodd\"/></g></g><path d=\"M648 425.733C648 410.969 659.969 399 674.733 399L724.267 399C739.031 399 751 410.969 751 425.733L751 447.267C751 462.031 739.031 474 724.267 474L674.733 474C659.969 474 648 462.031 648 447.267Z\" fill=\"url(#fill-wid4-5)\" fill-rule=\"evenodd\"/><g clip-path=\"url(#clip-wid4-6)\" filter=\"url(#fx1)\" transform=\"translate(653 407)\"><g clip-path=\"url(#clip-wid4-7)\"><path d=\"M17.3857 45.3857C24.6516 31.6825 31.9177 17.9794 39.5617 17.3963 47.2057 16.8131 56.4457 40.5542 63.2497 41.887 70.0537 43.2198 79.3357 31.3285 80.3857 25.3933\" stroke=\"#FFFFFF\" stroke-width=\"9\" stroke-linecap=\"round\" stroke-miterlimit=\"8\" fill=\"none\" fill-rule=\"evenodd\"/></g></g><path d=\"M668.5 450.5C675.766 436.797 683.032 423.094 690.676 422.511 698.32 421.928 707.56 445.669 714.364 447.001 721.168 448.334 730.45 436.443 731.5 430.508\" stroke=\"#FFFFFF\" stroke-width=\"8.66667\" stroke-linecap=\"round\" stroke-miterlimit=\"8\" fill=\"none\" fill-rule=\"evenodd\"/></g></svg>\n\t\t\t</a>\n\t\t\t<a class=\"dock-btn\" onclick=\"$('#copilot').toggleClass('show');$(this).toggleClass('show')\" id=\"copilot-btn\">\n\t\t\t\t<!--copilot按钮-->\n\t\t\t<img src=\"icon/copilot.svg\"></a>\n\t\t</div>\n\t\t<div class=\"dock\" id=\"taskbar\" style=\"display: none;\" count=\"0\">\n\t\t</div>\n\t\t<div id=\"toolbar\">\n\n\t\t</div>\n\t\t<div class=\"a dock theme\" win12_title=\"切换主题\" onclick=\"toggletheme()\">\n\t\t\t<!--切换主题-->\n\t\t\t<svg viewBox=\"0,0,307,307\" class=\"light\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" overflow=\"hidden\"><defs><clipPath id=\"theme-light-clip0\"><rect x=\"79\" y=\"77\" width=\"307\" height=\"307\" /></clipPath><linearGradient x1=\"128.499\" y1=\"49.9991\" x2=\"337.501\" y2=\"412.001\" gradientUnits=\"userSpaceOnUse\" spreadMethod=\"reflect\" id=\"theme-light-fill1\"><stop offset=\"0\" stop-color=\"#FFC567\" /><stop offset=\"0.18\" stop-color=\"#FFC567\" /><stop offset=\"0.8\" stop-color=\"#EE54F2\" /></linearGradient></defs><g clip-path=\"url(#theme-light-clip0)\" transform=\"translate(-79 -77)\"><path d=\"M80 231C80 146.5 148.5 78 233 78 317.5 78 386 146.5 386 231 386 315.5 317.5 384 233 384 148.5 384 80 315.5 80 231Z\" fill=\"url(#theme-light-fill1)\" fill-rule=\"evenodd\" /></g></svg>\n\t\t\t<svg viewBox=\"0,0,275,294\" class=\"dark\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" overflow=\"hidden\"><defs><clipPath id=\"theme-dark-clip0\"><rect x=\"525\" y=\"230\" width=\"275\" height=\"294\" /></clipPath><linearGradient x1=\"599.492\" y1=\"203.887\" x2=\"725.508\" y2=\"550.113\" gradientUnits=\"userSpaceOnUse\" spreadMethod=\"reflect\" id=\"theme-dark-fill1\"><stop offset=\"0\" stop-color=\"#2474B6\" /><stop offset=\"0.42\" stop-color=\"#2474B6\" /><stop offset=\"0.98\" stop-color=\"#FFD966\" /><stop offset=\"1\" stop-color=\"#FFD966\" /></linearGradient></defs><g clip-path=\"url(#theme-dark-clip0)\" transform=\"translate(-525 -230)\"><path d=\"M635.002 236.062C638.664 240.491 639.245 246.694 636.469 251.721 625.869 271.094 620.334 292.809 620.372 314.869 620.372 388.255 680.469 447.679 754.537 447.679 764.199 447.679 773.604 446.675 782.643 444.759 788.307 443.538 794.156 445.809 797.493 450.526 801.036 455.459 800.803 462.148 796.925 466.824 767.803 502.434 724.103 523.073 677.976 523 593.458 523 525 455.217 525 371.701 525 308.846 563.757 254.933 618.942 232.083 624.588 229.708 631.132 231.329 635.002 236.062Z\" fill=\"url(#theme-dark-fill1)\" fill-rule=\"evenodd\" /></g></svg>\n\t\t</div>\n\t\t<div class=\"a dock control\" onclick=\"openDockWidget('control')\">\n\t\t\t<!--控制-->\n\t\t\t<svg viewBox=\"1 7 29 15\" width=\"28px\" height=\"14px\" version=\"1.1\" id=\"svg4\">\n\t\t\t\t<path\n\t\t\t\t\td=\"M 4 7 C 2.3550302 7 1 8.3550302 1 10 L 1 19 C 1 20.64497 2.3550302 22 4 22 L 24 22 C 25.64497 22 27 20.64497 27 19 L 27 10 C 27 8.3550302 25.64497 7 24 7 L 4 7 z M 4 9 L 24 9 C 24.56503 9 25 9.4349698 25 10 L 25 19 C 25 19.56503 24.56503 20 24 20 L 4 20 C 3.4349698 20 3 19.56503 3 19 L 3 10 C 3 9.4349698 3.4349698 9 4 9 z M 5 11 L 5 18 L 23 18 L 23 11 L 5 11 z M 28 12 L 28 17 L 29 17 C 29.552 17 30 16.552 30 16 L 30 13 C 30 12.448 29.552 12 29 12 L 28 12 z\"\n\t\t\t\t\tid=\"path2\" />\n\t\t\t</svg>\n\t\t\t<icon class=\"s-icon\"></icon>\n\t\t\t<icon class=\"s-icon\"></icon>\n\t\t</div>\n\t\t<div class=\"a dock date\" onclick=\"openDockWidget('datebox'); getLunar();\">\n\t\t\t<!--日期-->\n\t\t\t<p class=\"time\">12:34:56</p>\n\t\t\t<p class=\"date\">2022/10/01</p>\n\t\t\t<i class=\"bi bi-chevron-down\"></i>\n\t\t</div>\n\t</div>\n\t<div id=\"desktop\">\n\t\t<h1>无法处理桌面图标，请使用相对正常的浏览器访问。</h1>\n\t\t<h1>Cannot process desktop icons, please use a relatively normal browser to access</h1>\n\t\t<span class=\"selection\">\n\t\t</span>\n\t\t<p style=\"background-color: rgba(11,45,14,0);z-index:1;position: absolute;top:0px;left:0px;height:100%;width:100%\" oncontextmenu=\"return showcm(event,'desktop');\"></p>\n\t</div>\n\t<!-- 右键菜单 -->\n\t<div id=\"cm\" tabindex=\"-1\">\n\t\t<input class=\"foc\">\n\t\t<list class=\"new\">\n\t\t</list>\n\t</div>\n\t<!-- 下拉菜单 -->\n\t<div id=\"dp\">\n\t\t<list>\n\t\t</list>\n\t</div>\n\t<!-- 悬停提示 -->\n\t<div id=\"descp\">\n\n\t</div>\n\n\t<div id=\"desktop-widgets\">\n\t\t<div class=\"widgets-move\"></div>\n\t</div>\n\t<div id=\"desktop-editbar-container\">\n\t\t<div id=\"desktop-editbar\">\n\t\t\t<div onclick=\"shownotice('widgets.desktop');\"><i class=\"bi bi-plus\"></i> <span data-i18n=\"editmd-add\">添加小组件</span></div>\n\t\t\t<div onclick=\"openapp('setting');$('#win-setting > div.menu > list > a.enable.appearance')[0].click();\"><i class=\"bi bi-brush\"></i> <span data-i18n=\"psnl\">个性化</span></div>\n\t\t\t<div onclick=\"editMode();\" win12_title=\"退出编辑模式\"><i class=\"bi bi-x-lg\"></i></div>\n\t\t</div>\n\t</div>\n\t<p id=\"translater\" style=\"display: none;\"></p>\n\t<!-- 提示窗 -->\n\t<div id=\"notice-back\">\n\t\t<div id=\"notice\">\n\t\t\t<div class=\"cnt\">\n\t\t\t\t<p class=\"tit\">快跑！</p>\n\t\t\t\t<p>你的电脑即将爆炸</p>\n\t\t\t</div>\n\t\t\t<div class=\"btns\">\n\t\t\t\t<a class=\"a btn main\" onclick=\"closenotice()\">确定</a>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"window defender\" data-min-width=\"800\" style=\"width: max(800px, 70%)\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/defender.svg\" class=\"icon\">\n\t\t\t<p data-i18n=\"defender.name\">Windows 安全中心</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('defender')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('defender')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('defender')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/defender.svg\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-defender\">\n\t\t\t<div class=\"app-left\">\n\t\t\t\t<button class=\"close-menu\">\n\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\n\t\t\t\t\t\tclass=\"feather feather-x\">\n\t\t\t\t\t\t<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n\t\t\t\t\t\t<line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t\t<ul class=\"nav-list\">\n\t\t\t\t\t<li class=\"nav-list-item active\">\n\t\t\t\t\t\t<a class=\"nav-list-link\">\n\t\t\t\t\t\t\t<icon></icon>\n\t\t\t\t\t\t\t<span data-i18n=\"home\">主页</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"nav-list-item\">\n\t\t\t\t\t\t<a class=\"nav-list-link\">\n\t\t\t\t\t\t\t<icon></icon>\n\t\t\t\t\t\t\t<span data-i18n=\"defender.virus\">病毒威胁与防护</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"nav-list-item\">\n\t\t\t\t\t\t<a class=\"nav-list-link\">\n\t\t\t\t\t\t\t<icon></icon>\n\t\t\t\t\t\t\t<span data-i18n=\"defender.account\">账户防护</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"nav-list-item\">\n\t\t\t\t\t\t<a class=\"nav-list-link\">\n\t\t\t\t\t\t\t<icon></icon>\n\t\t\t\t\t\t\t<span data-i18n=\"defender.firewall\">防火墙和网络防护</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"nav-list-item\">\n\t\t\t\t\t\t<a class=\"nav-list-link\">\n\t\t\t\t\t\t\t<icon></icon>\n\t\t\t\t\t\t\t<span data-i18n=\"defender.device\">设备安全性</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t<div class=\"app-main\">\n\t\t\t\t<div class=\"main-header-line\">\n\t\t\t\t\t<h1 data-i18n=\"defender.glance\">安全性概览</h1>\n\t\t\t\t\t<div class=\"action-buttons\">\n\t\t\t\t\t\t<button class=\"open-right-area\">\n\t\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tfill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n\t\t\t\t\t\t\t\tstroke-linejoin=\"round\" class=\"feather feather-activity\">\n\t\t\t\t\t\t\t\t<polyline points=\"22 12 18 12 15 21 9 3 6 12 2 12\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button class=\"menu-button\">\n\t\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tfill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n\t\t\t\t\t\t\t\tstroke-linejoin=\"round\" class=\"feather feather-menu\">\n\t\t\t\t\t\t\t\t<line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n\t\t\t\t\t\t\t\t<line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\n\t\t\t\t\t\t\t\t<line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"chart-row three\">\n\t\t\t\t\t<div class=\"chart-container-wrapper\">\n\t\t\t\t\t\t<div class=\"chart-container\">\n\t\t\t\t\t\t\t<div class=\"chart-info-wrapper\">\n\t\t\t\t\t\t\t\t<h2 data-i18n=\"defender.network\">网络流量使用</h2>\n\t\t\t\t\t\t\t\t<span>20.5 M</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"chart-svg\">\n\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 36 36\" class=\"circular-chart pink\">\n\t\t\t\t\t\t\t\t\t<path class=\"circle-bg\" d=\"M18 2.0845\n\t\t\t\t\t\t\ta 15.9155 15.9155 0 0 1 0 31.831\n\t\t\t\t\t\t\ta 15.9155 15.9155 0 0 1 0 -31.831\"></path>\n\t\t\t\t\t\t\t\t\t<path class=\"circle\" stroke-dasharray=\"30, 100\" d=\"M18 2.0845\n\t\t\t\t\t\t\ta 15.9155 15.9155 0 0 1 0 31.831\n\t\t\t\t\t\t\ta 15.9155 15.9155 0 0 1 0 -31.831\"></path>\n\t\t\t\t\t\t\t\t\t<text x=\"18\" y=\"20.35\" class=\"percentage\">30%</text>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"chart-container-wrapper\">\n\t\t\t\t\t\t<div class=\"chart-container\">\n\t\t\t\t\t\t\t<div class=\"chart-info-wrapper\">\n\t\t\t\t\t\t\t\t<h2 data-i18n=\"defender.speed\">网络速度</h2>\n\t\t\t\t\t\t\t\t<span>99 M/S</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"chart-svg\">\n\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 36 36\" class=\"circular-chart blue\">\n\t\t\t\t\t\t\t\t\t<path class=\"circle-bg\" d=\"M18 2.0845\n\t\t\t\t\t\t\ta 15.9155 15.9155 0 0 1 0 31.831\n\t\t\t\t\t\t\ta 15.9155 15.9155 0 0 1 0 -31.831\"></path>\n\t\t\t\t\t\t\t\t\t<path class=\"circle\" stroke-dasharray=\"60, 100\" d=\"M18 2.0845\n\t\t\t\t\t\t\ta 15.9155 15.9155 0 0 1 0 31.831\n\t\t\t\t\t\t\ta 15.9155 15.9155 0 0 1 0 -31.831\"></path>\n\t\t\t\t\t\t\t\t\t<text x=\"18\" y=\"20.35\" class=\"percentage\">99M/S</text>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"chart-container-wrapper\">\n\t\t\t\t\t\t<div class=\"chart-container\">\n\t\t\t\t\t\t\t<div class=\"chart-info-wrapper\">\n\t\t\t\t\t\t\t\t<h2 data-i18n=\"defender.clearv\">入侵病毒清除</h2>\n\t\t\t\t\t\t\t\t<h3 style=\"color: white;\" data-i18n=\"defender.allvc\">所有病毒均被清除</h3>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"chart-svg\">\n\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 36 36\" class=\"circular-chart orange\">\n\t\t\t\t\t\t\t\t\t<path class=\"circle-bg\" d=\"M18 2.0845\n\t\t\t\t\t\t\ta 15.9155 15.9155 0 0 1 0 31.831\n\t\t\t\t\t\t\ta 15.9155 15.9155 0 0 1 0 -31.831\"></path>\n\t\t\t\t\t\t\t\t\t<path class=\"circle\" stroke-dasharray=\"100, 100\" d=\"M18 2.0845\n\t\t\t\t\t\t\ta 15.9155 15.9155 0 0 1 0 31.831\n\t\t\t\t\t\t\ta 15.9155 15.9155 0 0 1 0 -31.831\"></path>\n\t\t\t\t\t\t\t\t\t<text x=\"18\" y=\"20.35\" class=\"percentage\">100%</text>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"chart-row two\">\n\t\t\t\t\t<div class=\"chart-container-wrapper big\">\n\t\t\t\t\t\t<div class=\"chart-container\">\n\t\t\t\t\t\t\t<div class=\"chart-container-header\">\n\t\t\t\t\t\t\t\t<h2 data-i18n=\"defender.freq\">电脑受病毒攻击频率</h2>\n\t\t\t\t\t\t\t\t<span>过去 30 天</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"line-chart\">\n\t\t\t\t\t\t\t\t<canvas id=\"chart\"></canvas>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"chart-data-details\">\n\t\t\t\t\t\t\t\t<div class=\"chart-details-header\"></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"chart-container-wrapper small\">\n\t\t\t\t\t\t<div class=\"chart-container\">\n\t\t\t\t\t\t\t<div class=\"chart-container-header\">\n\t\t\t\t\t\t\t\t<h2 data-i18n=\"defender.netreq\">网络通信比例</h2>\n\t\t\t\t\t\t\t\t<span href=\"#\" data-i18n=\"defender.netreq-thismonth\">这个月</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"acquisitions-bar\">\n\t\t\t\t\t\t\t\t<span class=\"bar-progress rejected\" style=\"width:1%;\"></span>\n\t\t\t\t\t\t\t\t<span class=\"bar-progress shortlisted\" style=\"width:5%;\"></span>\n\t\t\t\t\t\t\t\t<span class=\"bar-progress on-hold\" style=\"width:19%;\"></span>\n\t\t\t\t\t\t\t\t<span class=\"bar-progress applications\" style=\"width:80%;\"></span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"progress-bar-info\">\n\t\t\t\t\t\t\t\t<span class=\"progress-color applications\"></span>\n\t\t\t\t\t\t\t\t<span class=\"progress-type\">请求成功</span>\n\t\t\t\t\t\t\t\t<span class=\"progress-amount\">80%</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"progress-bar-info\">\n\t\t\t\t\t\t\t\t<span class=\"progress-color shortlisted\"></span>\n\t\t\t\t\t\t\t\t<span class=\"progress-type\">请求失败</span>\n\t\t\t\t\t\t\t\t<span class=\"progress-amount\">5%</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"progress-bar-info\">\n\t\t\t\t\t\t\t\t<span class=\"progress-color on-hold\"></span>\n\t\t\t\t\t\t\t\t<span class=\"progress-type\">请求发出后无响应</span>\n\t\t\t\t\t\t\t\t<span class=\"progress-amount\">19%</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"progress-bar-info\">\n\t\t\t\t\t\t\t\t<span class=\"progress-color rejected\"></span>\n\t\t\t\t\t\t\t\t<span class=\"progress-type\">含有病毒</span>\n\t\t\t\t\t\t\t\t<span class=\"progress-amount\">1%</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"chart-container applicants\">\n\t\t\t\t\t\t\t<div class=\"chart-container-header\">\n\t\t\t\t\t\t\t\t<h2 data-i18n=\"defender.recreq\">请求记录</h2>\n\t\t\t\t\t\t\t\t<span>今天 仅展示最近5次请求</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"applicant-line\">\n\t\t\t\t\t\t\t\t<div class=\"applicant-info\">\n\t\t\t\t\t\t\t\t\t<span>Https-Get</span>\n\t\t\t\t\t\t\t\t\t<p>Get url : <strong>tjy-gitnub.github......</strong></p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"applicant-line\">\n\t\t\t\t\t\t\t\t<div class=\"applicant-info\">\n\t\t\t\t\t\t\t\t\t<span>Https-Post</span>\n\t\t\t\t\t\t\t\t\t<p>Post url :<strong>api.github.com/r......</strong></p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"applicant-line\">\n\t\t\t\t\t\t\t\t<div class=\"applicant-info\">\n\t\t\t\t\t\t\t\t\t<span>Https-Get</span>\n\t\t\t\t\t\t\t\t\t<p>Get url :<strong>cdn.jsdelivr.net/p......</strong></p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"applicant-line\">\n\t\t\t\t\t\t\t\t<div class=\"applicant-info\">\n\t\t\t\t\t\t\t\t\t<span>Https-Get</span>\n\t\t\t\t\t\t\t\t\t<p>Get url :<strong>win12server.freeh......</strong></p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"applicant-line\">\n\t\t\t\t\t\t\t\t<div class=\"applicant-info\">\n\t\t\t\t\t\t\t\t\t<span>Https-Get</span>\n\t\t\t\t\t\t\t\t\t<p>Get url :<strong>github.com/tjy-g......</strong></p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div id=\"window-fill\"></div>\n\n\t<!-- Microsoft Store @User782Tec (2023/10/3) -->\n\t<div class=\"window msstore\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/msstore.svg\" class=\"icon\">\n\t\t\t<p>Microsoft Store</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('msstore');\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('msstore')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('msstore')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\" data-delay=\"3500\">\n\t\t\t<img src=\"icon/msstore.svg\" class=\"icon\">\n            <loading style=\"position: static; \">\n                <svg width=\"40px\" height=\"40px\" viewBox=\"0 0 16 16\">\n                    <!-- <circle cx=\"8px\" cy=\"8px\" r=\"7px\" style=\"stroke:#7f7f7f50;fill:none;stroke-width:3px;\"></circle> -->\n                    <circle cx=\"8px\" cy=\"8px\" r=\"7px\" style=\"stroke:#2983cc;stroke-width:3px;\"></circle>\n                </svg>\n            </loading>\n\t\t</div>\n\n\t\t<div class=\"content\" id=\"win-msstore\">\n\t\t\t<div class=\"menu\">\n\t\t\t\t<list class=\"focs\">\n\t\t\t\t\t<a class=\"home check\" onclick=\"apps.msstore.page('home');\"><icon></icon><span class=\"t2\" data-i18n=\"home\">首页</span></a>\n\t\t\t\t\t<a class=\"apps\" onclick=\"apps.msstore.page('apps');\"><icon></icon><span class=\"t2\" data-i18n=\"msstore.apps\">应用</span></a>\n\t\t\t\t\t<a class=\"game\" onclick=\"apps.msstore.page('game');\"><icon></icon><span class=\"t2\" data-i18n=\"msstore.games\">游戏</span></a>\n\t\t\t\t\t<a class=\"down\" onclick=\"apps.msstore.page('down');\"><icon></icon><span class=\"t2\" data-i18n=\"msstore.download\">下载</span></a>\n\t\t\t\t\t<span class=\"focs\"></span>\n\t\t\t\t</list>\n\t\t\t</div>\n\t\t\t<div class=\"page\">\n\t\t\t\t<div class=\"cnt home show\">\n\t\t\t\t\t<div class=\"container\">\n\t\t\t\t\t\t<div class=\"cards\"></div>\n\t\t\t\t\t\t<div class=\"apps\">\n\t\t\t\t\t\t\t<div class=\"tit\" data-i18n=\"msstore.topfree\">热门免费应用 ></div>\n\t\t\t\t\t\t\t<div class=\"app-cards\">\n\t\t\t\t\t\t\t\t<div class=\"card1\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\"></div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"tit\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"up\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"name\">Visual Studio Code</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"type\" data-i18n=\"msstore.free\">免费下载</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"down\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"rating\"></div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"cate\" data-i18n=\"msstore.devtool\">开发</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"card2\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\"></div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"tit\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"up\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"name\" data-i18n=\"msstore.genimp\">原神</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"type\" data-i18n=\"msstore.free\">免费下载</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"down\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"rating\"></div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"cate\" data-i18n=\"msstore.game\">游戏</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"card3\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\"></div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"tit\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"up\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"name\" data-i18n=\"msstore.mc\">我的世界</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"type\" data-i18n=\"msstore.free\">免费下载</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"down\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"rating\"></div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"cate\" data-i18n=\"msstore.game\">游戏</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"card4\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\"></div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"tit\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"up\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"name\">Krita</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"type\" data-i18n=\"msstore.free\">免费下载</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"down\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"rating\"></div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"cate\" data-i18n=\"msstore.design\">设计</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"card5\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\"></div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"tit\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"up\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"name\">VirtualBox</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"type\" data-i18n=\"msstore.free\">免费下载</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"down\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"rating\"></div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"cate\" data-i18n=\"msstore.tool\">工具</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"card6\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\"></div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"tit\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"up\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"name\">LibreOffice</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"type\" data-i18n=\"msstore.free\">免费下载</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"down\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"rating\"></div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"cate\" data-i18n=\"msstore.business\">办公</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"cnt apps\"></div>\n\t\t\t\t<div class=\"cnt game\"></div>\n\t\t\t\t<div class=\"cnt down\"></div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"window setting\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/setting.svg\" class=\"icon\">\n\t\t\t<p data-i18n=\"setting.name\">设置</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('setting')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('setting')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('setting')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/setting.svg\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-setting\">\n\t\t\t<div class=\"menu\">\n\t\t\t\t<a class=\"a user\">\n\t\t\t\t\t<svg viewBox=\"0,0,257,344\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" overflow=\"hidden\"><defs><clipPath id=\"user-clip1\"><rect x=\"382\" y=\"195\" width=\"257\" height=\"344\" /></clipPath><linearGradient x1=\"351.462\" y1=\"233.56\" x2=\"669.496\" y2=\"500.422\" gradientUnits=\"userSpaceOnUse\" spreadMethod=\"reflect\" id=\"user-fill3\"><stop offset=\"0\" stop-color=\"#A964C8\" /><stop offset=\"0.35\" stop-color=\"#A964C8\" /><stop offset=\"0.87\" stop-color=\"#2D8AD5\" /><stop offset=\"1\" stop-color=\"#2D8AD5\" /></linearGradient><linearGradient x1=\"351.462\" y1=\"233.56\" x2=\"669.496\" y2=\"500.422\" gradientUnits=\"userSpaceOnUse\" spreadMethod=\"reflect\" id=\"user-fill4\"><stop offset=\"0\" stop-color=\"#A964C8\" /><stop offset=\"0.35\" stop-color=\"#A964C8\" /><stop offset=\"0.87\" stop-color=\"#2D8AD5\" /><stop offset=\"1\" stop-color=\"#2D8AD5\" /></linearGradient></defs><g clip-path=\"url(#user-clip1)\" transform=\"translate(-382 -195)\"><path d=\"M637.755 433.872C642.215 515.221 579.577 537.983 508.011 537.983 436.444 537.983 376.676 507.833 383.513 437.11 383.109 425.234 389.59 414.133 398.634 409.891 413.82 402.768 444.753 402.936 507.484 402.997 570.214 403.058 609.164 402.279 621.521 407.947 633.878 413.614 638.011 424.609 637.755 433.872Z\" fill=\"url(#user-fill3)\" fill-rule=\"evenodd\" /><path d=\"M422 285C422 235.847 461.623 196 510.5 196 559.377 196 599 235.847 599 285 599 334.153 559.377 374 510.5 374 461.623 374 422 334.153 422 285Z\" fill=\"url(#user-fill4)\" fill-rule=\"evenodd\" /></g></svg>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p data-i18n=\"setting.usrname\">Administrator</p>\n\t\t\t\t\t\t<p>starry-source@windows12.com</p>\n\t\t\t\t\t</div>\n\t\t\t\t</a>\n\t\t\t\t<input type=\"text\" class=\"input\" placeholder=\"查找设置\" style=\"padding-left: 30px;\" data-i18n-attr=\"placeholder\" data-i18n-key=\"setting.sch\">\n\t\t\t\t<input-before class=\"bi bi-search\"></input-before>\n\t\t\t\t<list class=\"focs\">\n\t\t\t\t\t<a class=\"enable home check\" onclick=\"apps.setting.page('home')\"><img src=\"apps/icons/setting/home.png\"><span data-i18n=\"home\">主页</span></a><!-- 主页  @lh11117 (2023/9/31~2023/10/1) -->\n\t\t\t\t\t<a class=\"enable system\" onclick=\"apps.setting.page('system')\"><img src=\"apps/icons/setting/system.png\"><span data-i18n=\"setting.system\">系统</span></a><!-- 系统  stsc 远古-->\n\t\t\t\t\t<a class=\"enable blueteeth\" onclick=\"apps.setting.page('blueteeth')\"><img src=\"apps/icons/setting/blueteeth.png\"><span data-i18n=\"setting.device\">蓝牙和其他设备</span></a><!-- 蓝牙与设备  @Junchen Yi 2023-9-9-->\n\t\t\t\t\t<a class=\"enable network\" onclick=\"apps.setting.page('network')\"><img src=\"apps/icons/setting/network.png\"><span data-i18n=\"setting.network\">网络和 Internet</span></a><!-- 网络和 Internet  @Junchen Yi 2023-9-10-->\n\t\t\t\t\t<a class=\"enable appearance avlb\" onclick=\"apps.setting.page('appearance')\"><img src=\"apps/icons/setting/personal.png\"><span data-i18n=\"setting.psnl\">个性化</span></a><!-- 个性化  stsc 远古-->\n\t\t\t\t\t<a class=\"enable apps\" onclick=\"apps.setting.page('apps')\"><img src=\"apps/icons/setting/apps.png\"><span data-i18n=\"setting.apps\">应用</span></a><!-- 应用  @Junchen Yi 2023-9-11-->\n\t\t\t\t\t<a class=\"enable user\" onclick=\"apps.setting.page('user')\"><img src=\"apps/icons/setting/user.png\"><span data-i18n=\"setting.accounts\">账户</span></a><!-- 账户  @Junchen Yi 2023-9-11-->\n\t\t\t\t\t<a class=\"enable time\" onclick=\"apps.setting.page('time')\"><img src=\"apps/icons/setting/time.png\"><span data-i18n=\"setting.timelang\">时间和语言</span></a><!-- 时间  @Junchen Yi 2023-9-17-->\n\t\t\t\t\t<a class=\"enable game\" onclick=\"apps.setting.page('game')\"><img src=\"apps/icons/setting/game.png\"><span data-i18n=\"setting.game\">游戏</span></a>\n\t\t\t\t\t<a><img src=\"apps/icons/setting/help.png\"><span data-i18n=\"setting.acc\">辅助功能</span></a>\n\t\t\t\t\t<a class=\"enable safe avlb\" onclick=\"apps.setting.page('safe')\"><img src=\"apps/icons/setting/safe.png\"><span data-i18n=\"setting.privacy\">隐私和安全性</span></a>\n\t\t\t\t\t<a class=\"enable update avlb\" onclick=\"apps.setting.page('update')\"><img src=\"apps/icons/setting/update.png\"><span data-i18n=\"setting.update\">Windows 更新</span></a><!-- 更新  stsc 远古-->\n\t\t\t\t\t<span class=\"focs\"></span>\n\t\t\t\t</list>\n\t\t\t</div>\n\t\t\t<div class=\"page\">\n\t\t\t\t<!-- 主页  begin -->\n\t\t\t\t<div class=\"cnt home show\">\n\t\t\t\t\t<p class=\"title\">主页</p>\n\t\t\t\t\t<div style=\"display: flex;margin: 25px;\">\n\t\t\t\t\t\t<p class=\"s-icon\" style=\"font-size: 70px;margin: -8px 10px 0px 20px;\"></p>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<p style=\"font-size: 28px;text-overflow: ellipsis;white-space: nowrap;\">Desktop-PingGai</p>\n\t\t\t\t\t\t\t<p style=\"color: #7f7f7f;margin:-8px 0 -5px 0;\">瓶盖</p>\n\t\t\t\t\t\t\t<a style=\"color: var(--href);text-decoration: underline !important;;\" class=\"a\" onclick=\"shownotice('rename-pc')\">重命名</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"setting-card\">\n\t\t\t\t\t\t<p style=\"padding: 20px\"><icon><img src=\"apps/icons/setting/ms.png\" style=\"width: 35px; height: 35px;\"></icon><br>所有功能尽在 Microsoft 账户<br><span style=\"font-size: 14px;color:var(--text2)\">登录后，即可在设备上使用你最喜爱的 Microsoft 应用和服务。可以备份设备、让设备更安全，并使用 Microsoft 365 应用版和云储存空间。</span><br><img src=\"apps/icons/setting/ms365.png\"></p>\n\t\t\t\t\t\t<div style=\"padding:  20px\">\n\t\t\t\t\t\t\t<a class=\"a button\" onclick=\"window.location.href='./bluescreen.html?code=YOU_CAN_NOT_SIGN_IN_YOUR_MICROSOFT_ACCOUNT'\" win12_title=\"BSOD is coming!\">登录</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"setting-card\">\n\t\t\t\t\t\t<p style=\"padding: 20px\">推荐设置<br><span style=\"font-size: 14px;color:var(--text2)\">最近使用的和常用的设置</span></p>\n\t\t\t\t\t\t<div class=\"setting-list\">\n\t\t\t\t\t\t\t<a><icon><i class=\"bi bi-power\"></i></icon><div><p>电源和电池</p><p></p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t\t<a><icon><i class=\"bi bi-window-desktop\"></i></icon><div><p>任务栏</p><p></p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t\t<a><icon><i class=\"bi bi-camera\"></i></icon><div><p>摄像头</p><p></p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"setting-card\">\n\t\t\t\t\t\t<p style=\"padding: 20px\">蓝牙设备<br><span style=\"font-size: 14px;color:var(--text2)\">管理、添加和删除设备</span></p>\n\t\t\t\t\t\t<div class=\"setting-list\">\n\t\t\t\t\t\t\t<a onclick=\"$('#win-setting>.menu>list>a.blueteeth')[0].click();\"><icon></icon><div><p>蓝牙</p><p></p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"setting-card\">\n\t\t\t\t\t\t<p style=\"padding:20px\">个性化设备</p>\n\t\t\t\t\t\t<div class=\"setting-list\">\n\t\t\t\t\t\t\t<a onclick=\"$('#win-setting>.menu>list>a.appearance')[0].click();\"><icon><i class=\"bi bi-palette\"></i></icon><div><p>个性化</p><p></p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div style=\"height: 60px;\"></div>\n\t\t\t\t</div>\n\t\t\t\t<!-- 主页  end -->\n\t\t\t\t<div class=\"cnt system\">\n\t\t\t\t\t<p class=\"title\">系统</p>\n\t\t\t\t\t<div style=\"display: flex;\">\n\t\t\t\t\t\t<p class=\"s-icon\" style=\"font-size: 70px;margin: -8px 10px 0px 20px;\"></p>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<p style=\"font-size: 28px;text-overflow: ellipsis;white-space: nowrap;\">Desktop-PingGai</p>\n\t\t\t\t\t\t\t<p style=\"color: #7f7f7f;margin:-8px 0 -5px 0;\">瓶盖</p>\n\t\t\t\t\t\t\t<a style=\"color: var(--href);text-decoration: underline !important;;\" class=\"a\" onclick=\"shownotice('rename-pc')\">重命名</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"setting-list\">\n\t\t\t\t\t\t<a><icon></icon><div><p>屏幕</p><p>显示器、亮度、夜间模式、显示描述</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>声音</p><p>声音级别、输入、输出、声音设备</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>通知</p><p>来自系统和应用的警报</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>专注</p><p>通知、自动规则</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon class=\"b\">&#xF186;</icon><div><p>电源和电池</p><p>睡眠、电池使用情况、节电模式</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>存储</p><p>存储空间、驱动器、配置规则</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>多任务处理</p><p>贴靠窗口、桌面、任务切换</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>激活</p><p>激活状态、订阅、产品密钥</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>疑难解答</p><p>建议的疑难解答、首选项和历史记录</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>恢复</p><p>重置、高级启动、返回</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>投影到此电脑</p><p>权限、配对 PIN、可发现性</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>远程桌面</p><p>远程桌面用户、连接权限</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>剪贴板</p><p>剪贴和复制历史记录、同步、清除</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>系统信息</p><p>设备规格、重命名电脑、Windows 规格</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- 蓝牙与设备  @tangyuan0821 2025-06-28-->\n\t\t\t\t<div class=\"cnt blueteeth\">\n\t\t\t\t\t<p class=\"title\">蓝牙与设备</p>\n\t\t\t\t\t<div style=\"display: flex;\">\n\t\t\t\t\t\t<p class=\"s-icon\" style=\"font-size: 70px;margin: -8px 10px 0px 20px;\"></p>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<p style=\"color: #7f7f7f;margin:-8px 0 -5px 0;\">我的蓝牙名称</p>\n\t\t\t\t\t\t\t<p style=\"font-size: 28px;text-overflow: ellipsis;white-space: nowrap;\">Blueteeth-PingGai</p>\n\t\t\t\t\t\t\t<p class=\"blueteeth-tips-text\" style=\"color: #7f7f7f;margin:-8px 0 -5px 0;\">这是您在其他设备的蓝牙列表中的名称</p>\n\t\t\t\t\t\t\t<a style=\"color: var(--href);text-decoration: underline !important;;\" class=\"a\">重命名</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"setting-list\">\n\t\t\t\t\t\t<a><icon></icon><div><p>连接</p><p>搜索新的蓝牙设备</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>设备</p><p>蓝牙鼠标、键盘、其他蓝牙设备</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>打印机和扫描仪</p><p>设置打印机、排除故障</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>移动设备</p><p>立即从电脑访问移动设备</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>触摸板</p><p>点击、滚动、缩放、手势</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>笔和Windows Ink</p><p>设置触控笔、设置触控屏幕</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>USB</p><p>通知、USB节电模式</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- 蓝牙与设备 end -->\n\t\t\t\t<!-- 网络和 Internet  @tamgyuan0821 2025-06-28-->\n\t\t\t\t<div class=\"cnt network\">\n\t\t\t\t\t<p class=\"title\">网络和 Internet</p>\n\t\t\t\t\t<div style=\"display: flex;\">\n\t\t\t\t\t\t<p class=\"s-icon\" style=\"font-size: 70px;margin: -8px 15px 0px 20px;\"></p>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<p style=\"color: #7f7f7f;margin:-8px 0 -5px 0;\">WLAN 已连接</p>\n\t\t\t\t\t\t\t<p style=\"font-size: 28px;text-overflow: ellipsis;white-space: nowrap;\">PingGai - 5G</p>\n\t\t\t\t\t\t\t<a style=\"color: var(--href);text-decoration: underline !important;;\" class=\"a\">断开</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"setting-list\">\n\t\t\t\t\t\t<a><icon></icon><div><p>WLAN</p><p>连接、管理已连接网络</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>移动网络 未连接</p><p>通过移动网络访问互联网</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>VPN</p><p>添加、连接、管理</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>移动热点</p><p>共享Internet连接</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>飞行模式</p><p>停止无线通信</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>代理</p><p>用于 WI-Fi 和以太网的代理服务器</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>拨号</p><p>设置拨号 Internet连接</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>高级网络设置</p><p>查看所有网络适配器、网络重置</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- 网络和 Internet end  @Junchen Yi -->\n\t\t\t\t<div class=\"cnt appearance\">\n\t\t\t\t\t<p class=\"title\" data-i18n=\"setting.psnl\">个性化</p>\n\t\t\t\t\t<div class=\"setting-list\" style=\"margin-top: 10px;\">\n\t\t\t\t\t\t<a class=\"dp app-color\" onclick=\"$('.dp.app-color').toggleClass('show');\">\n\t\t\t\t\t\t\t<icon></icon>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<p data-i18n=\"setting.psnl.color\">颜色</p>\n\t\t\t\t\t\t\t\t<p data-i18n=\"setting.psnl.color-dt\">设置 Windows 的主题色</p>\n\t\t\t\t\t\t\t</div><i class=\"bi bi-chevron-down\"></i>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<div class=\"dp app-color\">\n\t\t\t\t\t\t\t<p data-i18n=\"setting.psnl.color.now\">当前颜色</p>\n\t\t\t\t\t\t\t<div class=\"color\"\n\t\t\t\t\t\t\t\tstyle=\"background: linear-gradient(120deg,var(--theme-1),var(--theme-2));\"></div>\n\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t<p data-i18n=\"setting.psnl.color.custom\">自定义颜色</p>\n\t\t\t\t\t\t\t<div style=\"display: flex;\">\n\t\t\t\t\t\t\t\t<div class=\"a act color theme1\" style=\"background: #47acff\"\n\t\t\t\t\t\t\t\t\tonclick=\"$('div.app-color>div>input.theme1inp')[0].click();\"></div>\n\t\t\t\t\t\t\t\t<input type=\"color\" class=\"theme1inp\"\n\t\t\t\t\t\t\t\t\tonchange=\"$('div.app-color>div>.color.theme1').css('background-color',this.value);\"\n\t\t\t\t\t\t\t\t\tvalue=\"#47acff\">\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tstyle=\"width: 10px;height: 1px;background-color: var(--text);margin: 17px 5px 0 10px;\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"a act color theme2\" style=\"background: #1168ae\"\n\t\t\t\t\t\t\t\t\tonclick=\"$('div.app-color>div>input.theme2inp')[0].click();\"></div>\n\t\t\t\t\t\t\t\t<input type=\"color\" class=\"theme2inp\"\n\t\t\t\t\t\t\t\t\tonchange=\"$('div.app-color>div>.color.theme2').css('background-color',this.value);\"\n\t\t\t\t\t\t\t\t\tvalue=\"#1168ae\">\n\t\t\t\t\t\t\t\t<a class=\"a button\" style=\"margin-left: 20px;\" onclick=\"$(':root').css('--theme-1',$('div.app-color>div>input.theme1inp').val());\n\t\t\t\t\t\t\t\t\t$(':root').css('--theme-2',$('div.app-color>div>input.theme2inp').val());setData('color1',$('div.app-color>div>input.theme1inp').val());\n\t\t\t\t\t\t\t\t\tsetData('color2',$('div.app-color>div>input.theme2inp').val())\" data-i18n=\"apply\">应用</a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<a class=\"dp theme\" onclick=\"$('.dp.theme').toggleClass('show');if (!($('#set-theme>.a').length)) apps.setting.theme_get();\">\n\t\t\t\t\t\t\t<icon>&#xE771;</icon><div><p data-i18n=\"setting.psnl.theme\">主题</p><p data-i18n=\"setting.psnl.theme-dt\">(！消耗大量 github api 限度！) 设置 Windows 的主题 想要<span class=\"a jump\" win12_title=\"https://github.com/tjy-gitnub/win12-theme\" onclick=\"window.open('https://github.com/tjy-gitnub/win12-theme','_blank')\">上传自己的主题</span>?</p></div><i class=\"bi bi-chevron-down\"></i></a>\n\t\t\t\t\t\t<div class=\"dp theme\" id=\"set-theme\">\n\t\t\t\t\t\t\t<loading>\n\t\t\t\t\t\t\t\t<svg width=\"30px\" height=\"30px\" viewBox=\"0 0 16 16\">\n\t\t\t\t\t\t\t\t\t<circle cx=\"8px\" cy=\"8px\" r=\"7px\"\n\t\t\t\t\t\t\t\t\t\tstyle=\"stroke:#7f7f7f50;fill:none;stroke-width:3px;\"></circle>\n\t\t\t\t\t\t\t\t\t<circle cx=\"8px\" cy=\"8px\" r=\"7px\" style=\"stroke:#2983cc;stroke-width:3px;\"></circle>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</loading>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div><icon></icon><div><p data-i18n=\"setting.psnl.round\">平滑圆角</p><p data-i18n=\"setting.psnl.round-dt\">启用平滑圆角</p></div>\n\t\t\t\t\t\t\t<div class=\"alr\">\n\t\t\t\t\t\t\t\t<a class=\"a checkbox checked\" id=\"sys_setting_1\" onclick=\"sys_setting[0]=1-sys_setting[0];$(this).toggleClass('checked',sys_setting[0]);$(':root').toggleClass('corner_squ',sys_setting[0]);saveDesktop();\"></a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div><icon></icon><div><p data-i18n=\"setting.psnl.animation\">动画</p><p data-i18n=\"setting.psnl.animation-dt\">系统界面元素过渡动画</p></div>\n\t\t\t\t\t\t\t<div class=\"alr\">\n\t\t\t\t\t\t\t\t<a class=\"a checkbox checked\" id=\"sys_setting_2\" onclick=\"sys_setting[1]=1-sys_setting[1];$(this).toggleClass('checked', !sys_setting[1]);$(':root').toggleClass('notrans', !sys_setting[1]);saveDesktop();\"></a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div><icon></icon><div><p data-i18n=\"setting.psnl.shadow\">阴影</p><p data-i18n=\"setting.psnl.shadow-dt\">为系统界面元素添加阴影效果</p></div>\n\t\t\t\t\t\t\t<div class=\"alr\">\n\t\t\t\t\t\t\t\t<a class=\"a checkbox checked\" id=\"sys_setting_3\" onclick=\"sys_setting[2]=1-sys_setting[2];$(this).toggleClass('checked',!sys_setting[2]);$(':root').toggleClass('nosd',!sys_setting[2]);saveDesktop();\"></a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div><icon></icon><div><p data-i18n=\"setting.psnl.alltransp\">多窗口透明</p><p data-i18n=\"setting.psnl.alltransp-dt\">为所有窗口开启透明效果，而不是仅用于焦点窗口 <span class=\"a jump\" win12_title=\"开启后将占用大量GPU,可能造成卡顿\">详细</span></p></div>\n\t\t\t\t\t\t\t<div class=\"alr\">\n\t\t\t\t\t\t\t\t<a class=\"a checkbox\" id=\"sys_setting_4\" onclick=\"sys_setting[3]=1-sys_setting[3];$(this).toggleClass('checked',sys_setting[3]);$(':root').toggleClass('moreblur',sys_setting[3]);saveDesktop();\"></a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div><icon>&#xE621;</icon><div><p data-i18n=\"setting.psnl.mica\">Mica效果</p><p data-i18n=\"setting.psnl.mica-dt\">为焦点窗口开启mica效果</p></div>\n\t\t\t\t\t\t\t<div class=\"alr\">\n\t\t\t\t\t\t\t\t<a class=\"a checkbox\" id=\"sys_setting_5\" onclick=\"sys_setting[4]=1-sys_setting[4];$(this).toggleClass('checked',sys_setting[4]);$(':root').toggleClass('mica',sys_setting[4]);saveDesktop();\"></a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div><icon><i class=\"bi bi-music-note-beamed\"></i></icon><div><p data-i18n=\"setting.psnl.startup-sound\">开机音乐</p><p data-i18n=\"setting.psnl.startup-sound-dt\">是否启用开机音乐</p></div>\n\t\t\t\t\t\t\t<div class=\"alr\">\n\t\t\t\t\t\t\t\t<a class=\"a checkbox checked\" id=\"sys_setting_6\" onclick=\"sys_setting[5]=1-sys_setting[5];document.getElementById('sys_setting_6').setAttribute('class', 'a checkbox' + (sys_setting[5]?' checked':''));saveDesktop();\"></a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n            <div><icon><i class=\"bi bi-mic-fill\"></i></icon><div><p data-i18n=\"setting.psnl.ball\">语音输入球</p><p data-i18n=\"setting.psnl.ball-dt\">是否启用语音输入球</p></div>\n\t\t\t\t\t\t\t<div class=\"alr\">\n\t\t\t\t\t\t\t\t<a class=\"a checkbox checked\" id=\"sys_setting_7\" onclick=\"sys_setting[6]=1-sys_setting[6];document.querySelector('.rainbow-container-main').setAttribute('style', 'display:' + (sys_setting[6] ? 'block' : 'none')+ ';');document.getElementById('sys_setting_7').setAttribute('class', 'a checkbox' + (sys_setting[6]?' checked':''));updateVoiceBallStatus();saveDesktop();\"></a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- 应用  @tangyuan0821 2025-06-28-->\n\t\t\t\t<div class=\"cnt apps\">\n\t\t\t\t\t<p class=\"title\">应用</p>\n\t\t\t\t\t<div class=\"setting-list\">\n\t\t\t\t\t\t<a><icon></icon><div><p>安装的应用</p><p>已安装的应用程序、应用程序执行别名</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>默认应用</p><p>文件和链接类型的默认值，其他默认值</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>离线地图</p><p>下载、存储位置、地图更新</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>可选内容</p><p>为您的设备提供额外功能</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>可打开的网站应用</p><p>可以在应用程序而不是浏览器中打开的网站</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>视频播放</p><p>视频格式调整、HDR 流媒体、电池选项</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>启动</p><p>登录时自动启动的应用程序</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- 应用 end  @Junchen Yi -->\n\t\t\t\t<!-- 账户  @Junchen Yi 2023-9-11-->\n\t\t\t\t<div class=\"cnt user\">\n\t\t\t\t\t<p class=\"title\">账户</p>\n\t\t\t\t\t<div style=\"display: flex;\">\n\t\t\t\t\t\t<a class=\"a user\" style=\"display:flex\">\n\t\t\t\t\t\t\t<svg viewBox=\"0,0,257,344\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" style=\"width: 100px;height: 100px;background-color: var(--hover-b);/* box-shadow: 0 0 10px var(--shadow); */width: 60px;width: 60px;height: 60px;border-radius: 50%;padding: 20px;margin-right: 15px;margin-bottom: 15px;\" overflow=\"hidden\"><defs><clipPath id=\"user-clip1\"><rect x=\"382\" y=\"195\" width=\"257\" height=\"344\" /></clipPath><linearGradient x1=\"351.462\" y1=\"233.56\" x2=\"669.496\" y2=\"500.422\" gradientUnits=\"userSpaceOnUse\" spreadMethod=\"reflect\" id=\"user-fill3\"><stop offset=\"0\" stop-color=\"#A964C8\" /><stop offset=\"0.35\" stop-color=\"#A964C8\" /><stop offset=\"0.87\" stop-color=\"#2D8AD5\" /><stop offset=\"1\" stop-color=\"#2D8AD5\" /></linearGradient><linearGradient x1=\"351.462\" y1=\"233.56\" x2=\"669.496\" y2=\"500.422\" gradientUnits=\"userSpaceOnUse\" spreadMethod=\"reflect\" id=\"user-fill4\"><stop offset=\"0\" stop-color=\"#A964C8\" /><stop offset=\"0.35\" stop-color=\"#A964C8\" /><stop offset=\"0.87\" stop-color=\"#2D8AD5\" /><stop offset=\"1\" stop-color=\"#2D8AD5\" /></linearGradient></defs><g clip-path=\"url(#user-clip1)\" transform=\"translate(-382 -195)\"><path d=\"M637.755 433.872C642.215 515.221 579.577 537.983 508.011 537.983 436.444 537.983 376.676 507.833 383.513 437.11 383.109 425.234 389.59 414.133 398.634 409.891 413.82 402.768 444.753 402.936 507.484 402.997 570.214 403.058 609.164 402.279 621.521 407.947 633.878 413.614 638.011 424.609 637.755 433.872Z\" fill=\"url(#user-fill3)\" fill-rule=\"evenodd\" /><path d=\"M422 285C422 235.847 461.623 196 510.5 196 559.377 196 599 235.847 599 285 599 334.153 559.377 374 510.5 374 461.623 374 422 334.153 422 285Z\" fill=\"url(#user-fill4)\" fill-rule=\"evenodd\" /></g></svg>\n\t\t\t\t\t\t\t<div style=\"margin-top: 5px;\">\n\t\t\t\t\t\t\t\t<p>Administrator</p>\n\t\t\t\t\t\t\t\t<p>starry-source@Windows12.com</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"setting-list\">\n\t\t\t\t\t\t<a><icon></icon><div><p>您的微软账户</p><p>订阅、账单等</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>您的账户信息</p><p>电子邮件、日历和联系人使用的帐户</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>登录选项</p><p>Windows Hello、安全密钥、密码、动态锁</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>电子邮件和账户</p><p>电子邮件、日历和联系人使用的帐户</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>家庭</p><p>管理您的家庭群组、编辑帐户类型和设备权限</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>Windows 备份</p><p>备份您的文件、应用程序、首选项以跨设备恢复它们</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>其他用户</p><p>设备访问、工作或学校用户、信息亭分配的访问</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>登录工作或学校账户</p><p>电子邮件、应用程序和网络等组织资源</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- 账户 end -->\n\t\t\t\t<!-- 时间  @tangyuan-821 2025-06-28-->\n\t\t\t\t<div class=\"cnt time\">\n\t\t\t\t\t<p class=\"title\">时间和语言</p>\n\t\t\t\t\t<div class=\"settingTimeItem\">\n\t\t\t\t\t\t<p class=\"settingTimeTitle\">当前设备时间：</p>\n\t\t\t\t\t\t<span class=\"settingTime\"></span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"setting-list\">\n\t\t\t\t\t\t<a><icon></icon><div><p>日期与时间</p><p>时区、自动时钟设置、日历显示</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>语言和区域</p><p>Windows 和某些应用程序根据您所在的地区设置日期和时间的格式</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>输入</p><p>触摸键盘、文本建议、首选项</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon></icon><div><p>语音</p><p>语音语言、语音识别麦克风设置、声音</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- 时间 end -->\n\t\t\t\t<!-- 游戏 begin -->\n\t\t\t\t<div class=\"cnt game\">\n\t\t\t\t\t<p class=\"title\">游戏</p>\n\t\t\t\t\t<div class=\"setting-list\">\n\t\t\t\t\t\t<a><icon><i class=\"bi bi-xbox\"></i></icon><div><p>Game Bar</p><p>控制器和键盘快捷方式</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon><i class=\"bi bi-camera\"></i></icon><div><p>摄像</p><p>保存位置，录制首选项</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a><icon><i class=\"bi bi-controller\"></i></icon><div><p>游戏模式</p><p>优化电脑以便畅玩</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- 游戏 end -->\n\t\t\t\t<div class=\"cnt safe\">\n\t\t\t\t\t<p class=\"title\">隐私和安全性</p>\n\t\t\t\t\t<div class=\"setting-list\">\n\t\t\t\t\t\t<a onclick=\"localStorage.setItem('desktop','[]');setIcon();\">\n\t\t\t\t\t\t\t<icon><i class=\"bi bi-trash3\"></i></icon>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<p>清除桌面图标</p>\n\t\t\t\t\t\t\t\t<p>这将清除用户自定义的所有图标</p>\n\t\t\t\t\t\t\t</div><i class=\"bi bi-chevron-right\"></i>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<a onclick=\"$('.dp.access-token').toggleClass('show')\" class=\"dp access-token\">\n\t\t\t\t\t\t\t<icon><i class=\"bi bi-key\"></i></icon>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<p>Token 管理</p>\n\t\t\t\t\t\t\t\t<p>添加或删除 GitHub Access Token</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<i class=\"bi bi-chevron-down\"></i>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<div class=\"dp access-token\">\n\t\t\t\t\t\t\t<input type=\"text\" class=\"token input\">\n\t\t\t\t\t\t\t<div class=\"container\" style=\"display: flex; align-items: center; gap: 10px; justify-content: space-evenly; margin-top: 6px;\">\n\t\t\t\t\t\t\t\t<div class=\"button\" onclick=\"localStorage.setItem('token', $('.dp.access-token>input.token').val());\">保存 Token</div>\n\t\t\t\t\t\t\t\t<div class=\"button\" onclick=\"localStorage.setItem('token', '');\">清除 Token</div>\n\t\t\t\t\t\t\t\t<div class=\"button\" onclick=\"$('.dp.access-token>input.token').val(localStorage.getItem('token'));\">查看 Token</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"detail\" style=\"font-size: 0.8em; color: var(--text2);\">您可以在这里填入您的Github Access Token来提高Github API限制访问次数，即可以更好地使用 Windows 更新、主题等功能。您的 Token 仅会存放在本地浏览器中，该数据不会传输至服务端，也更不会外泄，但请您妥善保管好自己的 Token。</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"cnt update\">\n\t\t\t\t\t<p class=\"title\">Windows 更新</p>\n\t\t\t\t\t<div class=\"lo\">\n\t\t\t\t\t\t<svg viewBox=\"0 0 65 65\" version=\"1.1\" id=\"svg5\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:svg=\"http://www.w3.org/2000/svg\"><defs id=\"defs2\"><linearGradient id=\"linearGradient12966\"><stop style=\"stop-color:#1946ff;stop-opacity:1;\"offset=\"0\"id=\"stop12962\"/><stop style=\"stop-color:#3eddff;stop-opacity:1;\"offset=\"1\"id=\"stop12964\"/></linearGradient><linearGradient id=\"linearGradient10659\"><stop style=\"stop-color:#6c00e8;stop-opacity:1;\"offset=\"0\"id=\"stop10655\"/><stop style=\"stop-color:#d05ed6;stop-opacity:1;\"offset=\"1\"id=\"stop10657\"/></linearGradient><linearGradient xlink:href=\"#linearGradient10659\"id=\"linearGradient10661\"x1=\"40.558044\"y1=\"64.876854\"x2=\"103.16348\"y2=\"64.876854\"gradientUnits=\"userSpaceOnUse\"/><linearGradient xlink:href=\"#linearGradient10659\"id=\"linearGradient12869\"gradientUnits=\"userSpaceOnUse\"x1=\"40.558044\"y1=\"64.876854\"x2=\"103.16348\"y2=\"64.876854\"/><linearGradient xlink:href=\"#linearGradient10659\"id=\"linearGradient12871\"gradientUnits=\"userSpaceOnUse\"x1=\"40.558044\"y1=\"64.876854\"x2=\"103.16348\"y2=\"64.876854\"/><linearGradient xlink:href=\"#linearGradient12966\"id=\"linearGradient12968\"x1=\"40.558044\"y1=\"64.876854\"x2=\"103.16348\"y2=\"64.876854\"gradientUnits=\"userSpaceOnUse\"/><linearGradient xlink:href=\"#linearGradient12966\"id=\"linearGradient13788\"gradientUnits=\"userSpaceOnUse\"x1=\"40.558044\"y1=\"64.876854\"x2=\"103.16348\"y2=\"64.876854\"/><linearGradient xlink:href=\"#linearGradient12966\"id=\"linearGradient13790\"gradientUnits=\"userSpaceOnUse\"x1=\"40.558044\"y1=\"64.876854\"x2=\"103.16348\"y2=\"64.876854\"/></defs><g id=\"layer1\"><g id=\"g8420\"transform=\"rotate(-173.25016,50.599831,57.584909)\"style=\"stroke:url(#linearGradient10661)\"><path style=\"fill:none;stroke:url(#linearGradient12869);stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none\"id=\"path234-2\"d=\"M 43.058046,79.121117 A 28.487005,28.487005 0 0 1 66.602472,51.066164 28.487005,28.487005 0 0 1 98.316952,69.38588\"/><path style=\"fill:none;stroke:url(#linearGradient12871);stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none\"d=\"M 85.756154,73.849626 100.66351,72.185133 98.999027,57.27777\"id=\"path1617-6\"/></g><g id=\"g8420-2\"transform=\"rotate(6.74984,459.81282,-281.39813)\"style=\"stroke:url(#linearGradient12968);stroke-opacity:1\"><path style=\"fill:none;stroke:url(#linearGradient13788);stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1\"id=\"path234-2-2\"d=\"M 43.058046,79.121117 A 28.487005,28.487005 0 0 1 66.602472,51.066164 28.487005,28.487005 0 0 1 98.316952,69.38588\"/><path style=\"fill:none;stroke:url(#linearGradient13790);stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1\"d=\"M 85.756154,73.849626 100.66351,72.185133 98.999027,57.27777\"id=\"path1617-6-0\"/></g></g></svg>\n\t\t\t\t\t\t<div class=\"update-main\">\n\t\t\t\t\t\t\t<div class=\"part\">\n\t\t\t\t\t\t\t\t<p class=\"notice\">正在检查更新...</p>\n\t\t\t\t\t\t\t\t<p class=\"detail\"></p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div><a class=\"a button disabled\" style=\"font-size: 16px;margin-top: -7.5px; opacity: 0.5; pointer-events: none;\">检查更新</a></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"setting-list\">\n\t\t\t\t\t\t<a onclick=\"openapp('about');$('#win-about>.update').addClass('show');$('#win-about>.about').removeClass('show');\" style=\"opacity: 0.5; pointer-events: none;\"><icon>&#xE946;</icon><div><p>更新历史记录</p><p>查看历史版本功能</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<a style=\"opacity: 0.5; pointer-events: none;\"><icon>&#xE896;</icon><div><p>下载完整内容</p><p>当更新或系统出现问题，使用此项下载最新完整内容</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t\t<div><icon></icon><div><p>自动更新</p><p>设置是否启用自动更新</p></div>\n\t\t\t\t\t\t\t<div class=\"alr\">\n\t\t\t\t\t\t\t\t<a class=\"checkbox checked a\" onclick=\"$(this).toggleClass('checked'); autoUpdate = !autoUpdate; localStorage.setItem('autoUpdate', autoUpdate)\"></a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<a><icon></icon><div><p>Windows预览体验计划</p><p>获取Windows的预览版本，以分享有关新功能的更新和反馈</p></div><i class=\"bi bi-chevron-right\"></i></a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"window explorer tabs\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/explorer.svg\" class=\"icon\">\n\t\t\t<!-- <p style=\"width:min-content\">文件资源管理器</p> -->\n\t\t\t<div class=\"tabs\">\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('explorer')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('explorer')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('explorer')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/explorer.svg\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-explorer\">\n\t\t\t<div class=\"path\">\n\t\t\t\t<a class=\"a btn btn-icon back\" onclick=\"apps.explorer.back(apps.explorer.tabs[apps.explorer.now][0])\"><i class=\"bi bi-arrow-left\"></i></a>\n\t\t\t\t<a class=\"a btn btn-icon front\" onclick=\"apps.explorer.front(apps.explorer.tabs[apps.explorer.now][0])\"><i class=\"bi bi-arrow-right\"></i></a>\n\t\t\t\t<a class=\"a btn btn-icon goback\"><i class=\"bi bi-arrow-up\"></i></a>\n\t\t\t\t<p class=\"tit\"></p>\n\t\t\t\t<div class=\"search\">\n\t\t\t\t\t<input type=\"text\" class=\"input\" placeholder=\"在这里输入你要搜索的内容\" data-i18n-attr=\"placeholder\" data-i18n-key=\"sch-ph\">\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"page\">\n\t\t\t\t<div class=\"menu\">\n\t\t\t\t\t<div class=\"card pinned\">\n\t\t\t\t\t\t<p class=\"title\"><span style=\"font: 15px;\">📌</span> <span data-i18n=\"explorer.pinned\">已固定</span></p>\n\t\t\t\t\t\t<list>\n\t\t\t\t\t\t\t<a onclick=\"shownotice('no-files-permission')\"><img src=\"apps/icons/explorer/qa.png\"><span data-i18n=\"explorer.quickacc\">快速访问</span></a>\n\t\t\t\t\t\t\t<a onclick=\"shownotice('no-files-permission')\"><img src=\"apps/icons/explorer/od.png\">OneDrive</a>\n\t\t\t\t\t\t\t<a class=\"check\" onclick=\"apps.explorer.reset();\"><span\n\t\t\t\t\t\t\t\t\tstyle=\"background:linear-gradient(180deg, var(--theme-1), var(--theme-2));width:4px;height: 19px;border-radius: 10px;margin-left: -12px;margin-right: 8px;margin-top: 1px;\"></span>\n\t\t\t\t\t\t\t\t<img src=\"apps/icons/explorer/thispc.svg\"><span data-i18n=\"explorer.thispc\">此电脑</span></a>\n\t\t\t\t\t\t\t<a onclick=\"shownotice('no-files-permission')\"><img src=\"apps/icons/explorer/rb.png\"><span data-i18n=\"explorer.bin\">回收站</span></a>\n\t\t\t\t\t\t\t<a id=\"explorer-mount-btn\" onclick=\"apps.explorer.mountDrive()\"><img src=\"apps/icons/explorer/disk.svg\"><span data-i18n=\"explorer.mount\">挂载本地文件夹</span></a>\n\t\t\t\t\t\t</list>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"card tags\">\n\t\t\t\t\t\t<p class=\"title\"><span style=\"font: 15px;\">🏷</span> <span data-i18n=\"explorer.tag\">标签</span></p>\n\t\t\t\t\t\t<list>\n\t\t\t\t\t\t\t<a onclick=\"shownotice('no-files-permission')\"><span style=\"background-color: red;\"></span><span data-i18n=\"explorer.tag.red\">红色</span></a>\n\t\t\t\t\t\t\t<a onclick=\"shownotice('no-files-permission')\"><span style=\"background-color: #3981d9;\"></span><span data-i18n=\"explorer.tag.blue\">蓝色</span></a>\n\t\t\t\t\t\t\t<a onclick=\"shownotice('no-files-permission')\"><span style=\"background-color: yellow;\"></span><span data-i18n=\"explorer.tag.yellow\">黄色</span></a>\n\t\t\t\t\t\t\t<a onclick=\"shownotice('no-files-permission')\"><span style=\"background-color: green;\"></span><span data-i18n=\"explorer.tag.green\">绿色</span></a>\n\t\t\t\t\t\t\t<a onclick=\"shownotice('no-files-permission')\"><span style=\"background-color: #fc9816;\"></span><span data-i18n=\"explorer.tag.orange\">橙色</span></a>\n\t\t\t\t\t\t\t<a onclick=\"shownotice('no-files-permission')\"><span style=\"background-color: purple;\"></span><span data-i18n=\"explorer.tag.purple\">紫色</span></a>\n\t\t\t\t\t\t\t<a onclick=\"shownotice('no-files-permission')\"><span style=\"background-color: #ffcad4;\"></span><span data-i18n=\"explorer.tag.pink\">粉色</span></a>\n\t\t\t\t\t\t</list>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"main\">\n\t\t\t\t\t<div class=\"tool micaalt\">\n\t\t\t\t\t\t<a class=\"a b t act\"\n\t\t\t\t\t\t\tonclick=\"apps.explorer.add($('#win-explorer>.path>.tit')[0].dataset.path,'新建文本文档.txt')\"><img\n\t\t\t\t\t\t\t\tsrc=\"apps/icons/explorer/tool-new.png\"><span data-i18n=\"explorer.new\">新建</span></a>\n\t\t\t\t\t\t<div class=\"hr\"></div>\n\t\t\t\t\t\t<a class=\"a b act\"><img src=\"apps/icons/explorer/tool-cut.png\"></a>\n\t\t\t\t\t\t<a class=\"a b act\"><img src=\"apps/icons/explorer/tool-copy.png\"></a>\n\t\t\t\t\t\t<a class=\"a b act\"><img src=\"apps/icons/explorer/tool-paste.png\"></a>\n\t\t\t\t\t\t<a class=\"a b act\"><img src=\"apps/icons/explorer/tool-rename.png\"></a>\n\t\t\t\t\t\t<div class=\"hr\"></div>\n\t\t\t\t\t\t<a class=\"a b t act\"><img src=\"apps/icons/explorer/tool-sort.png\"><span data-i18n=\"explorer.sort\">排序方式</span></a>\n\t\t\t\t\t\t<a class=\"a b t act\"><img src=\"apps/icons/explorer/tool-view.png\"><span data-i18n=\"explorer.view\">布局</span></a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"content\" onclick=\"apps.explorer.del_select()\"\n\t\t\t\t\t\toncontextmenu=\"return showcm(event,'explorer.content',null);\">\n\t\t\t\t\t\t<div class=\"view\">\n\t\t\t\t\t\t\t<!-- 文件列表  -->\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"window calc\">\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/calc.svg\" class=\"icon\">\n\t\t\t<p data-i18n=\"calc.name\">计算器</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('calc')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" style=\"pointer-events: none;color: #777;\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('calc')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/calc.svg\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-calc\">\n\t\t\t<div class=\"container\">\n\t\t\t<input id=\"calc-input\" readonly=\"true\" value=\"0\" onkeydown=\"\n\t\t\t\tswitch (event.key) {\n\t\t\t\t\tcase '+':\n\t\t\t\t\t\tappCalculator.func_key(1);\n\t\t\t\t\t\tappCalculator.check($('#win-calc>.keyb>.jia')[0]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '-':\n\t\t\t\t\t\tappCalculator.func_key(2);\n\t\t\t\t\t\tappCalculator.check($('#win-calc>.keyb>.jian')[0]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '*':\n\t\t\t\t\t\tappCalculator.func_key(3);\n\t\t\t\t\t\tappCalculator.check($('#win-calc>.keyb>.cheng')[0]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '/':\n\t\t\t\t\t\tappCalculator.func_key(4);\n\t\t\t\t\t\tappCalculator.check($('#win-calc>.keyb>.chu')[0]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '=':\n\t\t\t\t\t\tappCalculator.eq();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Enter':\n\t\t\t\t\t\tappCalculator.eq();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Backspace':\n\t\t\t\t\t\tappCalculator.backspace();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '.':\n\t\t\t\t\t\tappCalculator.point();\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!isNaN(event.key)) {\n\t\t\t\t\tappCalculator.number_key(Number(event.key));\n\t\t\t\t}\n\t\t\t\"></input>\n\t\t\t</div>\n\t\t\t\n\t\t\t<div class=\"keyb\">\n\t\t\t\t<a class=\"a b\" onclick=\"appCalculator.square('calc-input')\">𝑥²</a>\n\t\t\t\t<a class=\"a b\" onclick=\"appCalculator.squareRoot('calc-input')\">√𝑥</a>\n\t\t\t\t<a class=\"a b\" onclick=\"appCalculator.clear_num('calc-input')\">C</a>\n\t\t\t\t<a class=\"a b u jia\" onclick=\"appCalculator.func_key(1); appCalculator.check(this);\">+</a>\n\t\t\t\t<a class=\"a b\" onclick=\"appCalculator.number_key(7);\">7</a>\n\t\t\t\t<a class=\"a b\" onclick=\"appCalculator.number_key(8);\">8</a>\n\t\t\t\t<a class=\"a b\" onclick=\"appCalculator.number_key(9);\">9</a>\n\t\t\t\t<a class=\"a b u jian\" onclick=\"appCalculator.func_key(2); appCalculator.check(this);\">-</a>\n\t\t\t\t<a class=\"a b\" onclick=\"appCalculator.number_key(4);\">4</a>\n\t\t\t\t<a class=\"a b\" onclick=\"appCalculator.number_key(5);\">5</a>\n\t\t\t\t<a class=\"a b\" onclick=\"appCalculator.number_key(6);\">6</a>\n\t\t\t\t<a class=\"a b u cheng\" onclick=\"appCalculator.func_key(3); appCalculator.check(this);\">×</a>\n\t\t\t\t<a class=\"a b\" onclick=\"appCalculator.number_key(1);\">1</a>\n\t\t\t\t<a class=\"a b\" onclick=\"appCalculator.number_key(2);\">2</a>\n\t\t\t\t<a class=\"a b\" onclick=\"appCalculator.number_key(3);\">3</a>\n\t\t\t\t<a class=\"a b u chu\" onclick=\"appCalculator.func_key(4); appCalculator.check(this);\">÷</a>\n\t\t\t\t<a class=\"a b\" onclick=\"appCalculator.point()\">.</a>\n\t\t\t\t<a class=\"a b\" onclick=\"appCalculator.number_key(0);\">0</a>\n\t\t\t\t<a class=\"a b\" onclick=\"appCalculator.backspace('calc-input')\"><i class=\"bi bi-backspace\"></i></a>\n\t\t\t\t<a class=\"a b ans u\" onclick=\"if(!appCalculator.eq('calc-input')){ appCalculator.clear_num(); shownotice('ZeroDivision')}\">=</a>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"window about\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/about.svg\" class=\"icon\">\n\t\t\t<p data-i18n=\"about.name\">关于 Win12 网页版</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('about')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('about')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('about')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/about.svg\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-about\">\n\t\t\t<div class=\"menu\">\n\t\t\t\t<!-- <list class=\"focs\">\n\t\t\t\t\t<a onclick=\"$('#win-about>.about').addClass('show');$('#win-about>.update').removeClass('show');\"><img src=\"apps/icons/about/info.svg\" height=\"17px\" width=\"19px\"><span data-i18n=\"about.intro\">简介</span></a>\n\t\t\t\t\t<a onclick=\"$('#win-about>.update').addClass('show');$('#win-about>.about').removeClass('show');\"><img src=\"apps/icons/about/update.svg\" height=\"20px\" width=\"18px\"><span data-i18n=\"about.update\">更新记录</span></a>\n\t\t\t\t</list> -->\n\n\t\t\t\t<list class=\"about-menu\">\n\t\t\t\t\t<a class=\"enable check about avlb\" onclick=\"$('#win-about>.about').addClass('show');$('.about-menu>.about').addClass('check');$('.about-menu>.update').removeClass('check');$('#win-about>.update').removeClass('show');\">\n\t\t\t\t\t\t<span data-i18n=\"about.intro\">简介</span></a>\n\t\t\t\t\t<a class=\"enable update avlb\" onclick=\"$('#win-about>.update').addClass('show');$('.about-menu>.update').addClass('check');$('.about-menu>.about').removeClass('check');$('#win-about>.about').removeClass('show');\">\n\t\t\t\t\t\t<span data-i18n=\"about.update\">更新记录</span></a>\n\t\t\t\t</list>\n\t\t\t</div>\n\t\t\t<div class=\"cnt about\">\n\t\t\t\t<h1 class=\"tit\" data-i18n=\"about.intro.name\"><span></span>Windows 12 网页版</h1>\n\t\t\t\t<div style=\"margin-left: 20px;\">\n\t\t\t\t\t<h2 class=\"tit\" data-i18n=\"about.intro.intro\"><span></span>简介</h2>\n\t\t\t\t\t<p data-i18n=\"about.intro.intro.p1\">&emsp;&emsp;Windows 12 网页版是一个开源项目，由星源原创，使用 HTML、CSS 和 JavaScript，在网络上模拟、创新操作系统。</p>\n\t\t\t\t\t<p data-i18n=\"about.intro.intro.p2\">&emsp;&emsp;此项目已发布至 GitHub，<a onclick=\"window.open('https://github.com/tjy-gitnub/win12','_blank');\" win12_title=\"https://github.com/tjy-gitnub/win12\" class=\"jump\">点击此处查看</a>。</p>\n\t\t\t\t\t<p data-i18n=\"about.intro.intro.p3\">&emsp;&emsp;若您对于该项目有任何意见或建议，请在 GitHub 上<a onclick=\"window.open('https://github.com/tjy-gitnub/win12/issues','_blank');\" win12_title=\"https://github.com/tjy-gitnub/win12/issues\" class=\"jump\">提交 issues</a>，您的问题会被尽可能快地解决。</p>\n\t\t\t\t\t<p data-i18n=\"about.intro.intro.p4\">&emsp;&emsp;原创作者星源，点击以<a onclick=\"window.open('https://tjy-gitnub.github.io/','_blank');\" win12_title=\"https://tjy-gitnub.github.io/\" class=\"jump\">了解详细</a>。</p>\n\t\t\t\t\t<h2 class=\"tit\" data-i18n=\"about.intro.os\"><span></span>开源说明</h2>\n\t\t\t\t\t<p data-i18n=\"about.intro.os.p1\">&emsp;&emsp;此项目是一个开源项目，采用Eclipse基金会发行的Eclipse Public License 2.0许可证（网址:https://www.eclipse.org/legal/epl-2.0/）进行许可。在遵守该许可证的前提下，您可以自由使用本项目的源代码。</p>\n\t\t\t\t\t<p data-i18n=\"about.intro.os.p2\">&emsp;&emsp;根据许可，你可以对该项目进行传播、分发、修改以及二次发布，包括个人和商业用途。</p>\n\t\t\t\t\t<p data-i18n=\"about.intro.os.p3\">&emsp;&emsp;但您必须给出源码来源，<strong>包括作者，项目链接等</strong>，必须使用相同的协议开源。</p>\n\t\t\t\t\t<p data-i18n=\"about.intro.os.p4\">&emsp;&emsp;不是在该项目基础上进行增加、修改的，仅参考源码的，不需要开源，但也仅供学习用途。</p>\n\t\t\t\t\t<h2 class=\"tit\" data-i18n=\"about.intro.thank\"><span></span>特别感谢</h2>\n\t\t\t\t\t<p data-i18n=\"about.intro.thank.p1\">&emsp;&emsp;特别感谢 @NB-Group，他为本项目的后端开发做出了重要贡献！</p>\n\t\t\t\t\t<h2 class=\"tit\" data-i18n=\"about.intro.contri\"><span></span>贡献者</h2>\n\t\t\t\t\t<p data-i18n=\"about.intro.contri.p1\">&emsp;&emsp;感谢所有项目的贡献者（实时数据，计算方法：即为 Commits 次数）</p>\n\t\t\t\t\t<div id=\"contri\">\n\t\t\t\t\t\t<loading>\n\t\t\t\t\t\t\t<svg width=\"30px\" height=\"30px\" viewBox=\"0 0 16 16\">\n\t\t\t\t\t\t\t\t<circle cx=\"8px\" cy=\"8px\" r=\"7px\" style=\"stroke:#7f7f7f50;fill:none;stroke-width:3px;\">\n\t\t\t\t\t\t\t\t</circle>\n\t\t\t\t\t\t\t\t<circle cx=\"8px\" cy=\"8px\" r=\"7px\" style=\"stroke:#2983cc;stroke-width:3px;\"></circle>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</loading>\n\t\t\t\t\t</div>\n\t\t\t\t\t<h2 class=\"tit\"><span></span>Star</h2>\n\t\t\t\t\t<p data-i18n=\"about.intro.star.p1\">&emsp;&emsp;感谢<a class=\"jump\" win12_title=\"给个 Star 好不好？(即将跳转到：https://github.com/tjy-gitnub/win12/stargazers)\" onclick=\"window.open('https://github.com/tjy-gitnub/win12/stargazers','_blank')\">所有支持我们的人</a>。</p>\n\t\t\t\t\t<div id=\"StarShow\">\n\t\t\t\t\t\t<loading>\n\t\t\t\t\t\t\t<svg width=\"30px\" height=\"30px\" viewBox=\"0 0 16 16\">\n\t\t\t\t\t\t\t\t<circle cx=\"8px\" cy=\"8px\" r=\"7px\" style=\"stroke:#7f7f7f50;fill:none;stroke-width:3px;\">\n\t\t\t\t\t\t\t\t</circle>\n\t\t\t\t\t\t\t\t<circle cx=\"8px\" cy=\"8px\" r=\"7px\" style=\"stroke:#2983cc;stroke-width:3px;\"></circle>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</loading>\n\t\t\t\t\t</div>\n\t\t\t\t\t<h2 class=\"tit\" data-i18n=\"about.intro.others\"><span></span>其它</h2>\n\t\t\t\t\t<p data-i18n=\"about.intro.others.p1\">&emsp;&emsp;此项目基于目前 Windows 版本创造，与微软的 Windows 12 正式版本不一致。</p>\n\t\t\t\t\t<p data-i18n=\"about.intro.others.p2\">&emsp;&emsp;此项目绝不附属于微软，且不应与微软操作系统或产品混淆，这也不是 Windows365 cloud PC。</p>\n\t\t\t\t\t<p data-i18n=\"about.intro.others.p3\">&emsp;&emsp;本项目中微软、Windows 和其他示范产品是微软公司的商标。本项目中 Android 是谷歌公司的商标。</p>\n\t\t\t\t\t<p data-i18n=\"about.intro.others.p4\">&emsp;&emsp;若您在本项目（网址为tjy-gitnub.github.io/win12/）之外的网站看到此页面，那么您可能正在浏览一个镜像网站。若欲造访原始页面，请点击<a onclick=\"window.open('https://tjy-gitnub.github.io/win12/desktop.html','_blank');\" win12_title=\"https://tjy-gitnub.github.io/win12/desktop.html\" class=\"jump\">这里</a>。</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"cnt update\">\n\t\t\t\t<h1 class=\"tit\" data-i18n=\"about.update.name\"><span></span>更新记录</h1>\n\t\t\t\t<div style=\"margin-left: 20px;\">\n\t\t\t\t\t<details><summary><span>v10.2.0</span> 平滑圆角</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自 @tjy-gitnub)<br>\n\t\t\t\t\t\t&emsp;&emsp;-修复一些沉积问题<br>\n\t\t\t\t\t\t&emsp;&emsp;-引入平滑圆角（需较新浏览器）<br>\n\t\t\t\t\t\t&emsp;&emsp;-细节优化和修复<br>\n\t\t\t\t\t</p></details>\n\t\t\t\t\t<details><summary><span>v10.1.0</span> 增加对农历的支持</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自 @stxttkx & @lingbopro)<br>\n\t\t\t\t\t\t&emsp;&emsp;-现已可以显示农历日期。<br>\n\t\t\t\t\t</p></details>\n\t\t\t\t\t<details><summary><span>v10.0.9</span> 修复了一些已知问题</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自 @tangyuan0821)<br>\n\t\t\t\t\t\t&emsp;&emsp;-修复了一些已知问题。<br>\n\t\t\t\t\t</p></details>\n\t\t\t\t\t<details><summary><span>v10.0.8</span> 添加Word</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自 @HHCL233)<br>\n\t\t\t\t\t\t&emsp;&emsp;-添加Word应用<br>\n\t\t\t\t\t</p></details>\n\t\t\t\t\t<details><summary><span>v10.0.7</span> 优化关机后行为和设置的部分UI</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自 @HHCL233)<br>\n\t\t\t\t\t\t&emsp;&emsp;-删除设置中Windows更新页的重复元素<br>\n\t\t\t\t\t\t&emsp;&emsp;-设置中系统页的重命名支持打开重命名窗口<br>\n\t\t\t\t\t\t&emsp;&emsp;-关于Windows12应用的侧边栏更改为类似设置侧边栏的样式<br>\n\t\t\t\t\t\t&emsp;&emsp;-支持在关机后按下回车重新开机<br>\n\t\t\t\t\t</p></details>\n\t\t\t\t\t<details><summary><span>v10.0.6</span> 优化部分应用</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自 @HHCL233)<br>\n\t\t\t\t\t\t&emsp;&emsp;-添加一个没用的重命名电脑窗口<br>\n\t\t\t\t\t\t&emsp;&emsp;-更改“扫雷”名称并重新分类至Web应用下<br>\n\t\t\t\t\t\t&emsp;&emsp;-将“开始菜单”的“Copilot”点击行为和任务栏“Copilot”点击行为一致(不会再打开窗口化Copilot)<br>\n\t\t\t\t\t\t&emsp;&emsp;-支持通过“开始菜单”的“更多”查看推荐项目<br>\n\t\t\t\t\t\t&emsp;&emsp;-“任务管理器”的进程占用颜色现在会跟随主题色<br>\n\t\t\t\t\t\t&emsp;&emsp;-“文件资源管理器”中不可打开的侧边栏项现在打开会显示“你没有权限打开此文件”<br>\n\t\t\t\t\t</p></details>\n\t\t\t\t\t<details><summary><span>v10.0.5.1</span>  灾难性错误修复</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自 @tangyuan0821)<br>\n\t\t\t\t\t\t&emsp;&emsp;-修复繁体中文页面无法加载的问题<br>\n\t\t\t\t\t</p></details>\n\t\t\t\t\t<details><summary><span>v10.0.5</span> 设置优化</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自 @tangyuan0821)<br>\n\t\t\t\t        &emsp;&emsp;- 对 “设置” 应用中的部分表述进行了优化，使其更契合微软的风格<br>\n\t\t\t\t\t\t&emsp;&emsp;- 在“设置”中增加了“Windows预览体验计划”<br>\n\t\t\t\t\t\t&emsp;&emsp;- 其他细微之处的更新<br>\n\t\t\t\t    </p></details>\n\t\t\t\t\t<details><summary><span>v10.0.4</span>\n\t\t\t\t\t</v10></span> 扫雷</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自 @kjmjh)<br>\n\t\t\t\t        &emsp;&emsp;-更新了扫雷<br>\n\t\t\t\t    </p></details>\n\t\t\t\t\t<details><summary><span>v10.0.3</span> 终端彩蛋命令和系统工具</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-添加新的终端命令：cls、help、hello、matrix、snow、dance、systeminfo 和 starwars<br>\n\t\t\t\t\t\t&emsp;&emsp;-增加互动和趣味彩蛋效果，如黑客帝国代码雨、下雪、窗口跳舞和星球大战文字滚动<br>\n\t\t\t\t\t\t&emsp;&emsp;-添加系统信息显示和基础终端实用工具<br>\n\t\t\t\t\t\t&emsp;&emsp;-增强终端用户体验，添加趣味和实用命令<br>\n\t\t\t\t\t</p></details>\n\t\t\t\t\t<details><summary><span>v10.0.2</span> 细节优化和修复</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自 @tjy-gitnub)<br>\n\t\t\t\t\t\t&emsp;&emsp;-Copilot 每日对话限制<br>\n\t\t\t\t\t\t&emsp;&emsp;-细节优化和修复<br>\n\t\t\t\t\t</p></details>\n\t\t\t\t\t<details><summary><span>v10.0.1</span> 繁體中文語言支持</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自 @tjy-gitnub)<br>\n\t\t\t\t\t\t&emsp;&emsp;-添加繁中語言支持<br>\n\t\t\t\t\t\t&emsp;&emsp;-细节优化和修复<br>\n\t\t\t\t\t\t&emsp;&emsp;无偿请求帮助我们翻译此项目！详见<a class=\"jump\" href=\"https://github.com/tjy-gitnub/win12\">项目主页</a><br>\n\t\t\t\t\t</p></details>\n\t\t\t\t\t<details><summary><span>v10.0.0</span> AI Copilot 回归，走向国际化</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自 @NB-Group)<br>\n\t\t\t\t\t\t&emsp;&emsp;重启AI Copilot！<br>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自 @tjy-gitnub)<br>\n\t\t\t\t\t\t&emsp;&emsp;-部分英语翻译<br>\n\t\t\t\t\t\t&emsp;&emsp;-细节优化和修复<br>\n\t\t\t\t\t</p></details>\n\t\t\t\t\t<details><summary><span>v9.2.1</span> 修复一些问题</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自 @tjy-gitnub)<br>\n\t\t\t\t\t\t&emsp;&emsp;-拆解 desktop.js<br>\n\t\t\t\t\t\t&emsp;&emsp;-细节优化和修复<br>\n\t\t\t\t\t</p></details>\n\t\t\t\t\t<details><summary><span>v9.2.0</span> 整理</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自 @tjy-gitnub)<br>\n\t\t\t\t\t\t&emsp;&emsp;修改大量积累的 bug<br>\n\t\t\t\t\t\t&emsp;&emsp;-关于开始菜单全屏的问题<br>\n\t\t\t\t\t\t&emsp;&emsp;-关于小组件的大量问题<br>\n\t\t\t\t\t\t&emsp;&emsp;-标签页的移动端适配问题<br>\n\t\t\t\t\t\t&emsp;&emsp;-天气小组件 api 失效的问题<br>\n\t\t\t\t\t\t&emsp;&emsp;新增和完善部分内容<br>\n\t\t\t\t\t\t&emsp;&emsp;-鼠标中键关闭标签页<br>\n\t\t\t\t\t\t&emsp;&emsp;-登录界面的美化<br>\n\t\t\t\t\t\t&emsp;&emsp;-细节优化和修复<br>\n\t\t\t\t\t</p></details>\n\t\t\t\t\t<details><summary><span>v9.1.2</span> 任务栏预览</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自 @fzlzjerry)<br>\n\t\t\t\t\t\t&emsp;&emsp;-加入任务栏窗口预览<br>\n\t\t\t\t\t</p></details>\n\t\t\t\t\t<details><summary><span>v9.1.1</span> 移动端适配</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自@NB-Group)<br>\n\t\t\t\t\t\t&emsp;&emsp;- 在移动端竖屏体验时将会提示“横屏以获得最佳体验”<br>\n\t\t\t\t\t</p></details>\n\t\t\t\t\t<details><summary><span>v9.1.0</span> 真正的在线新闻功能！</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自@lingbopro)<br>\n\t\t\t\t\t\t&emsp;&emsp;- 现在在小组件面板里有真正从网络实时获取的新闻！ <br>\n\t\t\t\t\t\t&emsp;&emsp;&nbsp; （可能会出现卡顿，触发方式薛定谔）<br>\n\t\t\t\t\t\t&emsp;&emsp;- 顺便重构了一下新闻部分</p>\n\t\t\t\t\t</p></details>\n\t\t\t\t\t<details><summary><span>v9.0.0</span> 窗口背景材质超级大升级！</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自@NB-Group)<br>\n\t\t\t\t\t\t&emsp;&emsp;- 新材质(仿win11 Mica)非常高级！ <br>\n\t\t\t\t\t\t&emsp;&emsp;- 将设置的UI更新了</p>\n\t\t\t\t\t</p></details>\n\t\t\t\t\t<details><summary><span>v8.1.0</span> 整理</summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自@tjy-gitnub)<br>\n\t\t\t\t\t\t&emsp;&emsp;- 代码整理<br>\n\t\t\t\t\t\t&emsp;&emsp;- 修复一些问题</p>\n\t\t\t\t\t</p></details>\n\t\t\t\t\t<details><summary><span>v8.0.0</span> </summary><p>\n\t\t\t\t\t\t&emsp;&emsp;-(更新来自@User782Tec)<br>\n\t\t\t\t\t\t&emsp;&emsp;-使用svg矢量图优化了任务管理器性能图表的绘制<br>\n\t\t\t\t\t\t&emsp;&emsp;-加入了半成品的Microsoft Store<br>\n\t\t\t\t\t\t&emsp;&emsp;-其他一些细微之处的更新</p>\n\t\t\t\t\t</p></details>\n\t\t\t\t\t<!-- 全部列出来那这个更多意义何在？ -->\n\t\t\t\t\t<a onclick=\"window.open('changelog.md','_blank');\" win12_title=\"changelog.md\" class=\"a jump\" style=\"text-align: center;\">更多</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"window notepad\" onclick=\"if(font_window){playWindowsBackground();showwin('notepad-fonts');}\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/notepad.svg\" class=\"icon\">\n\t\t\t<p data-i18n=\"notepad.name\">记事本</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('notepad');hidewin('notepad-fonts', 'configs')\"><i\n\t\t\t\t\t\tclass=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('notepad')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('notepad')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/notepad.svg\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-notepad\">\n\t\t\t<div class=\"tool\">\n\t\t\t\t<a class=\"a\" onmouseover=\"showdp(this,'notepad.file',null)\" onmouseleave=\"hidedp()\" data-i18n=\"notepad.file\">文件</a>\n\t\t\t\t<a class=\"a\" onmouseover=\"showdp(this,'notepad.edit',null)\" onmouseleave=\"hidedp()\" data-i18n=\"notepad.edit\">编辑</a>\n\t\t\t\t<a class=\"a\" onmouseover=\"showdp(this,'notepad.view',null)\" onmouseleave=\"hidedp()\" data-i18n=\"notepad.format\">格式</a>\n\t\t\t\t<a class=\"a notepad-md-toggle\" id=\"notepad-md-toggle\" onclick=\"apps.notepad.togglePreview()\" style=\"display:none;\"><i class=\"bi bi-eye\"></i> 预览</a>\n\t\t\t</div>\n\t\t\t<div class=\"text-box\" contenteditable=\"true\" spellcheck=\"false\">\n\t\t\t\t<p>在此输入...</p>\n\t\t\t</div>\n\t\t\t<div class=\"md-preview\" id=\"notepad-md-preview\" style=\"display:none;\"></div>\n\t\t\t<a href=\"\" download=\"未命名.html\" style=\"opacity: 0;\" class=\"save\">另存为</a>\n\t\t</div>\n\t</div>\n\t<!-- 这个东西还有用吗？？（ -->\n\t<div class=\"window notepad-fonts\">\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/notepad.svg\" class=\"icon\">\n\t\t\t<p>字体</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('notepad-fonts', 'configs');font_window=false;\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/notepad.svg\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-notepad-font\">\n\t\t\t<div class=\"row\">\n\t\t\t\t<div class=\"select-input\" id=\"win-notepad-font-type\">\n\t\t\t\t\t<div class=\"description\">字体</div>\n\t\t\t\t\t<input type=\"text\" />\n\t\t\t\t\t<list class=\"value-box\">\n\t\t\t\t\t\t<a class=\"option\">Arial</a>\n\t\t\t\t\t\t<a class=\"option\">Book Antiqua</a>\n\t\t\t\t\t\t<a class=\"option\">Cascadia Code</a>\n\t\t\t\t\t\t<a class=\"option\">Comic Sans MS</a>\n\t\t\t\t\t\t<a class=\"option\">Consolas</a>\n\t\t\t\t\t\t<a class=\"option\">Courier</a>\n\t\t\t\t\t\t<a class=\"option\">cursive</a>\n\t\t\t\t\t\t<a class=\"option\">Geneva</a>\n\t\t\t\t\t\t<a class=\"option\">Georgia</a>\n\t\t\t\t\t\t<a class=\"option\">Ink Free</a>\n\t\t\t\t\t\t<a class=\"option\">Lucida Console</a>\n\t\t\t\t\t\t<a class=\"option\">Microsoft YaHei UI</a>\n\t\t\t\t\t\t<a class=\"option\">Monaco</a>\n\t\t\t\t\t\t<a class=\"option\">monospace</a>\n\t\t\t\t\t\t<a class=\"option\">Palatino Linotype</a>\n\t\t\t\t\t\t<a class=\"option\">serif</a>\n\t\t\t\t\t\t<a class=\"option\">Tahoma</a>\n\t\t\t\t\t\t<a class=\"option\">仿宋</a>\n\t\t\t\t\t\t<a class=\"option\">方正舒体</a>\n\t\t\t\t\t\t<a class=\"option\">华文行楷</a>\n\t\t\t\t\t\t<a class=\"option\">楷体</a>\n\t\t\t\t\t\t<a class=\"option\">宋体</a>\n\t\t\t\t\t\t<a class=\"option\">幼圆</a>\n\t\t\t\t\t</list>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"select-input\" id=\"win-notepad-font-size\">\n\t\t\t\t\t<div class=\"description\">大小</div>\n\t\t\t\t\t<input type=\"text\" />\n\t\t\t\t\t<list class=\"value-box\">\n\t\t\t\t\t\t<a class=\"option\">初号</a>\n\t\t\t\t\t\t<a class=\"option\">小初</a>\n\t\t\t\t\t\t<a class=\"option\">一号</a>\n\t\t\t\t\t\t<a class=\"option\">小一</a>\n\t\t\t\t\t\t<a class=\"option\">二号</a>\n\t\t\t\t\t\t<a class=\"option\">小二</a>\n\t\t\t\t\t\t<a class=\"option\">三号</a>\n\t\t\t\t\t\t<a class=\"option\">小三</a>\n\t\t\t\t\t\t<a class=\"option\">四号</a>\n\t\t\t\t\t\t<a class=\"option\">小四</a>\n\t\t\t\t\t\t<a class=\"option\">五号</a>\n\t\t\t\t\t\t<a class=\"option\">小五</a>\n\t\t\t\t\t</list>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"select-input\" id=\"win-notepad-font-style\">\n\t\t\t\t\t<div class=\"description\">字形</div>\n\t\t\t\t\t<input type=\"text\" />\n\t\t\t\t\t<list class=\"value-box\">\n\t\t\t\t\t\t<a class=\"option\">正常</a>\n\t\t\t\t\t\t<a class=\"option\">斜体</a>\n\t\t\t\t\t\t<a class=\"option\">粗体</a>\n\t\t\t\t\t\t<a class=\"option\">粗偏斜体</a>\n\t\t\t\t\t</list>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"preview\">\n\t\t\t\t<div class=\"description\">\n\t\t\t\t\t预览\n\t\t\t\t</div>\n\t\t\t\t<div class=\"preview-box\">\n\t\t\t\t\t<div>Hello</div>\n\t\t\t\t\t<div>你好</div>\n\t\t\t\t\t<div>こんにちは</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"buttons\">\n\t\t\t\t<a class=\"a submit act\" onclick=\"apps.notepadFonts.commitFont();\" data-i18n=\"ok\">确定</a>\n\t\t\t\t<a class=\"a cancel act\" onclick=\"hidewin('notepad-fonts', 'configs');font_window=false;\" data-i18n=\"cancel\">取消</a>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"window terminal terminal-apps\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/terminal.svg\" class=\"icon\">\n\t\t\t<p data-i18n=\"terminal.name\">终端</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('terminal')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('terminal')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('terminal')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/terminal.svg\" class=\"icon\">\n\t\t</div>\n\n\t\t<div class=\"content\" id=\"win-terminal\" onmouseup=\"$('#win-terminal input').focus();\" ontouchend=\"$('#win-terminal input').focus();\">\n            <pre>\n\t\t\t\tMicrosoft Windows [版本 12.0.39035.7324]\n\t\t\t\t(c) Microsoft Corporation。保留所有权利。\n\t\t\t</pre>\n\t\t\t<pre class=\"text-cmd\"></pre>\n\t\t\t<pre\n\t\t\t\tstyle=\"display: flex\"><span class=\"prompt\">C:\\Windows\\System32> </span><input type=\"text\" onkeyup=\"if (event.keyCode == 13) { apps.terminal.run(); }\"></pre>\n\t\t</div>\n\t</div>\n\t<div class=\"window python terminal-apps\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/python.svg\" class=\"icon\">\n\t\t\t<p>Python 3.10.2</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('python')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('python')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('python')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/python.svg\" class=\"icon\">\n\t\t</div>\n\n\t\t<div class=\"content\" id=\"win-python\" onmouseup=\"$('#win-python input').focus();\" ontouchend=\"$('#win-python input').focus();\">\n            <pre>\n\t\t\t\tPython 3.10.2  [MSC v.1912 64 bit (AMD64)] :: Anaconda, Inc. on win32\n\t\t\t\tType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n\t\t\t</pre>\n\t\t\t<pre class=\"text-cmd\"></pre>\n\t\t\t<pre>>>> <input type=\"text\" onkeyup=\"if (event.keyCode == 13) { apps.python.run(); }\"></pre>\n\t\t</div>\n\t</div>\n\t<div class=\"window edge tabs\" onmousemove=\"if(apps.edge.in_div('over-bar',event)||apps.edge.in_div('edge-path-bar',event)||apps.edge.in_div('edge-titbar',event)){null}else{if(apps.edge.fuls){$('.edge>.titbar').hide();$('.edge>.content>.tool').hide()}}\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div style=\"height:3px;width:100%;display: none;\" id=\"over-bar\" onmouseover=\"if(apps.edge.fuls){$('.edge>.titbar').show();$('.edge>.content>.tool').show()}\" onmouseleave=\"if(apps.edge.fuls&&(apps.edge.b1||apps.edge.b2)){$('.edge>.titbar').hide();$('.edge>.content>.tool').hide()}\"></div>\n\t\t<div class=\"titbar\" onmouseleave=\"apps.edge.b1=false;\" onmouseover=\"apps.edge.b1=true;\" id=\"edge-titbar\">\n\t\t\t<img src=\"icon/edge.svg\" class=\"icon\">\n\t\t\t<p style=\"display: none;\">Microsoft Edge</p>\n\t\t\t<div class=\"tabs\">\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('edge')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('edge');apps.edge.max=!apps.edge.max;\" id=\"edge-max\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"apps.edge.exitfullscreen()\" id=\"fuls-edge-exit\" style=\"display: none;\"><i class=\"bi bi-arrows-angle-contract\" id=\"fuls-edge-i\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('edge')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"apps.edge.fullscreen()\" id=\"fuls-edge\"><i class=\"bi bi-arrows-angle-expand\" id=\"fuls-edge-i\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/edge.svg\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-edge\">\n\t\t\t<div class=\"tool\" onmouseleave=\"apps.edge.b2=false;\" onmouseover=\"apps.edge.b2=true;\" id=\"edge-path-bar\">\n\t\t\t\t<a class=\"a back\" onclick=\"apps.edge.back(apps.edge.tabs[apps.edge.now][0]);\">\n\t\t\t\t\t<i class=\"bi bi-arrow-left-short\" style=\"font-size: 25px;--top:-5px;\"></i>\n\t\t\t\t</a>\n\t\t\t\t<a class=\"a front\" onclick=\"apps.edge.front(apps.edge.tabs[apps.edge.now][0]);\">\n\t\t\t\t\t<i class=\"bi bi-arrow-right-short\" style=\"font-size: 25px;--top:-5px;\"></i>\n\t\t\t\t</a>\n\t\t\t\t<a class=\"a\" onclick=\"apps.edge.reload()\">\n\t\t\t\t\t<i class=\"bi bi-arrow-clockwise\"></i>\n\t\t\t\t</a>\n\t\t\t\t<input type=\"text\" onkeyup=\"if(event.keyCode==13&&$(this).val()!=''){apps.edge.goto($(this).val())}\"\n\t\t\t\t\tplaceholder=\"在必应中搜索，或输入一个网址\" class=\"url\" spellcheck=\"false\" id=\"edge-path\" data-i18n-attr=\"placeholder\" data-i18n-key=\"edge.schbing\">\n\t\t\t\t<input type=\"text\" onkeyup=\"if(event.keyCode==13&&$(this).val()!=''){m_tab.rename('edge',$(this).val());}\"\n\t\t\t\t\tplaceholder=\"为标签页命名\" class=\"rename\" spellcheck=\"false\"  data-i18n-attr=\"placeholder\" data-i18n-key=\"edge.rename\">\n\t\t\t\t<a class=\"a\">\n\t\t\t\t\t<i class=\"bi bi-info-circle\" win12_title=\"浏览器只能访问允许嵌套的网站。由于规则限制无法获取网页标题，请右键标签页手动命名\"></i>\n\t\t\t\t</a>\n\t\t\t\t<script>\n\t\t\t\tfunction add_save(){\n\t\t\t\t\tt = document.getElementById('edge-path').value\n\t\t\t\t\tif(t.length>7){\n\t\t\t\t\t\tt = t.substring(0,7) + '...';\n\t\t\t\t\t}\n          var className = 'save_' + Math.random().toString(36).substr(2);\n\t\t\t\t\tdocument.getElementById('save-bar').innerHTML += \"<a class='save-item \" + className + \"' \" + `oncontextmenu=\"return showcm(event,'save-bar', '${className}');\"` + \"  onclick='apps.edge.goto(`\" + document.getElementById('edge-path').value +  \"`)' win12_title='\" + document.getElementById('edge-path').value + \"' class='save-item'><i class='bi bi-file-earmark'></i>\" + t + \"</a>\";\n\t\t\t\t}\n\t\t\t\t</script>\n\t\t\t\t<a class=\"a\" style=\"filter: contrast(0.2);\" onclick=\"add_save()\">\n\t\t\t\t\t<i class=\"bi bi-star\"></i>\n\t\t\t\t</a>\n\t\t\t\t<a class=\"a\" style=\"filter: contrast(0.2);\">\n\t\t\t\t\t<i class=\"bi bi-code-slash\"></i>\n\t\t\t\t</a>\n\t\t    </div>\n\t\t\t<div id=\"save-bar\" style=\"margin:10px;margin-top: 3px;white-space: nowrap;overflow-x: scroll;\">\n\t\t\t\t<!--收藏夹-->\n\t\t\t\t<a onclick=\"apps.edge.goto('https://tjy-gitnub.github.io/')\" win12_title=\"https://tjy-gitnub.github.io/\" class=\"save-item\"><i class=\"bi bi-file-earmark\"></i>星源</a>\n\t\t\t\t<a onclick=\"apps.edge.goto('https://www.bing.com')\" win12_title=\"https://www.bing.com\" class=\"save-item\"><i class=\"bi bi-file-earmark\"></i>Bing</a>\n\t\t\t\t<style>\n\t\t\t\t\t#save-bar{\n\t\t\t\t\t\tscrollbar-width: none; /* Firefox */\n\t\t\t\t\t\t-ms-overflow-style: none; /* IE 10+ */\n\t\t\t\t\t}\n\t\t\t\t\t#save-bar::-webkit-scrollbar {\n\t\t\t\t\t  display: none; /* Chrome Safari */\n\t\t\t\t\t}\n\t\t\t\t</style>\n\t\t\t</div>\n\t\t\t<iframe frameborder=\"0\" class=\"0 show\" onmousemove=\"if(apps.edge.fuls){$('.edge>.titbar').hide();$('.edge>.content>.tool').hide()}\">\n\t\t\t</iframe>\n\t\t</div>\n\t</div>\n\t<div class=\"msg update\" oncontextmenu=\"return showcm(event,'msgupdate',null)\">\n\t\t<div class=\"main\" onclick=\"openapp('about');if($('.window.about').hasClass('min'))minwin('about');\n\t\t\t$('#win-about>.about').removeClass('show');$('#win-about>.update').addClass('show');\n\t\t\t$('#win-about>.update>div>details:first-child').attr('open','open')\">\n\t\t\t<p class=\"tit\"></p>\n\t\t\t<p class=\"cont\"></p>\n\t\t</div>\n\t\t<div class=\"a hide\" onclick=\"$('.msg').removeClass('show')\"><i class=\"bi bi-arrow-right-short\"></i></div>\n\t</div>\n\t<div class=\"window vscode webapp\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/vscode.png\" class=\"icon\">\n\t\t\t<p>Visual Studio Code</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('vscode')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('vscode')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('vscode')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/vscode.png\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-vscode\">\n\t\t\t<!-- <iframe src=\"https://github1s.com/\" frameborder=\"0\" style=\"width: 100%; height: 100%;\" loading=\"lazy\"></iframe> -->\n\t\t</div>\n\t</div>\n\t<div class=\"window bilibili webapp\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/bilibili.png\" class=\"icon\">\n\t\t\t<p data-i18n=\"bilibili.name\">哔哩哔哩</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('bilibili')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('bilibili')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('bilibili')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/bilibili.png\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-bilibili\">\n\t\t\t<!-- <iframe src=\"https://bilibili.com/\" frameborder=\"0\" style=\"width: 100%; height: 100%;\" loading=\"lazy\"></iframe> -->\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"window copilot\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/copilot.svg\" class=\"icon\">\n\t\t\t<p>AI Chat</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('copilot')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('copilot')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('copilot')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/copilot.svg\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-copilot\">\n\t\t</div>\n\t</div>\n\t<div class=\"window minesweeper\">\n      <div class=\"resize-bar\"></div>\n        <div class=\"titbar\">\n\t      <img src=\"icon/minesweeper.svg\" class=\"icon\">\n\t\t\t\t\t\t<p>扫雷</p>\n\t\t\t\t <div>\n\t\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('minesweeper')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t\t <a class=\"a wbtg max\" onclick=\"maxwin('minesweeper')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t        <a class=\"a wbtg\" onclick=\"minwin('minesweeper')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t\t</div>\n\t\t            </div>\n\t\t\t\t\t       <div class=\"loadback\">\n\t\t         <img src=\"icon/minesweeper.svg\" class=\"icon\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t</div>\n\t\t        <div class=\"content\" id=\"win-minesweeper\">\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t                </div>\n\t\t    </div>\n\t<div class=\"window wsa\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/wsa.png\" class=\"icon\">\n\t\t\t<p data-i18n=\"wsa.name\">手机连接(适用于 Android™️ 的 Windows 子系统)</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('wsa')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" style=\"pointer-events: none;color: #777;\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('wsa')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/wsa.png\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-wsa\" style=\"margin-bottom:auto;\">\n\t\t\t<iframe src=\"https://android11react.osrc.com/\" frameborder=\"0\" style=\" width: 100%;height: 100%;\" loading=\"lazy\"></iframe>\n\t\t</div>\n\t</div>\n\t<div class=\"window pythonEditor\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/pythonEditor.svg\" class=\"icon\">\n\t\t\t<p>Python Editor</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('pythonEditor')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('pythonEditor')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('pythonEditor')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg run\" onclick=\"apps.pythonEditor.run();\"><i class=\"bi bi-play\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/pythonEditor.svg\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-pythonEditor\">\n\t\t\t<div id=\"win-python-ace-editor\"></div>\n\t\t\t<div class=\"output\" id=\"output\"></div>\n\t\t</div>\n\t</div>\n\t<div class=\"window camera\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/camera.svg\" class=\"icon\">\n\t\t\t<p data-i18n=\"camera.name\">相机</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('camera')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('camera')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('camera')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/camera.svg\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-camera\">\n\t\t\t<div class=\"video\">\n\t\t\t\t<video></video>\n\t\t\t</div>\n\t\t\t<div class=\"control\">\n\t\t\t\t<div>\n\t\t\t\t\t<div class=\"startbutton act\" onclick=\"apps.camera.takePhoto();\"></div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<canvas style=\"display: none;\"></canvas>\n\t\t\t<a style=\"display: none;\"></a>\n\t\t</div>\n\t</div>\n\t<div class=\"window windows12\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/logo.svg\" class=\"icon\">\n\t\t\t<p>Windows 12</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('windows12')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('windows12')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('windows12')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"apps.windows12.init()\"><i class=\"bi bi-arrow-counterclockwise\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/logo.svg\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-win12\">\n\t\t\t<iframe style=\"height:100%; width:100%;object-fit:cover;\" id=\"win12-window\" frameborder=\"no\"></iframe>\n\t\t</div>\n\t</div>\n\t<div class=\"window camera-notice\">\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/camera.svg\" class=\"icon\">\n\t\t\t<p data-i18n=\"camera.notice\">提示</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('camera-notice');hidewin('camera')\"><i\n\t\t\t\t\t\tclass=\"bi bi-x-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/camera.svg\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-camera-notice\" style=\"padding: 0px 10px 0px 10px;\">\n\t\t\t<div style=\"display: flex; width: 100%; justify-content: center; margin-top: 10px; margin-bottom: 10px;\">\n\t\t\t\t<div\n\t\t\t\t\tstyle=\"width: 50px; height: 50px; background-image: url('icon/camera.svg'); background-repeat: no-repeat;\">\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<p data-i18n=\"camera.notice.txt\">\n\t\t\t\t&emsp;&emsp;欢迎使用“相机”应用！本应用由 User782Tec 开发， tjy-gitnub 维护。<br />\n\t\t\t\t&emsp;&emsp;在使用中，此应用将会获取访问您摄像头的权限（用于进行拍摄照片等操作）。此应用不会将任何您的个人信息（包括所拍摄的照片）上传至服务器，更不会泄露给他人。<br />\n\t\t\t\t&emsp;&emsp;若您不同意上述协议，则将不能使用此应用。\n\t\t\t</p>\n\t\t\t<div class=\"buttons\">\n\t\t\t\t<a class=\"a submit act\"\n\t\t\t\t\tonclick=\"hidewin('camera-notice', 'configs');localStorage.setItem('camera', true);openapp('camera');\" data-i18n=\"camera.notice.agree\">同意并继续</a>\n\t\t\t\t<a class=\"a cancel act\" onclick=\"hidewin('camera-notice')\" data-i18n=\"camera.notice.disag\">不同意</a>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"window run\">\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/run.svg\" class=\"icon\">\n\t\t\t<p data-i18n=\"run.name\">运行</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('run')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/run.svg\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-run\">\n\t\t\t<div class=\"top\">\n\t\t\t\t<div class=\"icon\"></div>\n\t\t\t\t<div class=\"text\" data-i18n=\"run.txt\">Windows 将根据你所输入的名称，为你打开相应的程序、文件夹、文档或 Internet 资源。</div>\n\t\t\t</div>\n\t\t\t<div class=\"open\">\n\t\t\t\t<div class=\"prompt\" data-i18n=\"run.open\">打开: </div>\n\t\t\t\t<input class=\"input\" type=\"text\"\n\t\t\t\t\tonkeyup=\"if (event.keyCode == 13) { hidewin('run');apps.run.run($('#win-run>.open>input').val()); }\">\n\t\t\t</div>\n\t\t\t<div class=\"buttons\">\n\t\t\t\t<a class=\"a submit act\" onclick=\"hidewin('run');apps.run.run($('#win-run>.open>input').val())\" data-i18n=\"ok\">确定</a>\n\t\t\t\t<a class=\"a cancel act\" onclick=\"hidewin('run')\" data-i18n=\"cancel\">取消</a>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"window whiteboard\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/whiteboard.svg\" class=\"icon\">\n\t\t\t<p>Whiteboard</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('whiteboard')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('whiteboard')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('whiteboard')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"apps.whiteboard.saveAs()\" win12_title=\"另存为\"><i class=\"bi bi-save\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/whiteboard.svg\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-whiteboard\">\n\t\t\t<a class=\"download\" href=\"\" download=\"Picture.png\"></a>\n\t\t\t<canvas onmousedown=\"apps.whiteboard.draw(event);\" ontouchstart=\"apps.whiteboard.draw(event);\"></canvas>\n\t\t\t<div class=\"toolbar\">\n\t\t\t\t<div class=\"tools\">\n\t\t\t\t\t<div class=\"pen1 active\" onclick=\"apps.whiteboard.changePen.call(this)\" data-color=\"red\">\n\t\t\t\t\t\t<svg xmlns=\"https://www.w3.org/2000/svg\" width=\"76\" height=\"75\" viewBox=\"0 0 760 950\"\n\t\t\t\t\t\t\tcolor=\"#e92a2a\">\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td=\"M120 881c0-155 96-575 144-630 7-9 25-48 40-88 31-82 50-104 71-82 14 15 81 162 120 264 51 136 105 412 105 542v63h-30c-30 0-30-1-30-55v-55H180v55c0 54 0 55-30 55h-30v-69zm343-98l107-6v-44c0-84-95-447-122-464-15-10-148-12-172-3-27 10-114 328-123 452l-6 72h105c58 0 153-3 211-7zm-89-588c-4-8-10-15-15-15s-9 7-9 15 7 15 15 15c9 0 12-6 9-15z\"\n\t\t\t\t\t\t\t\tfill=\"#020202\"></path>\n\t\t\t\t\t\t\t<path fill=\"red\"\n\t\t\t\t\t\t\t\td=\"M150 880v-70h420v140H150v-70zM305 213c10-42 47-123 55-123 9 0 60 112 60 134 0 13-11 16-61 16h-61l7-27z\">\n\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"pen2\" onclick=\"apps.whiteboard.changePen.call(this)\" data-color=\"orange\">\n\t\t\t\t\t\t<svg xmlns=\"https://www.w3.org/2000/svg\" width=\"76\" height=\"75\" viewBox=\"0 0 760 950\"\n\t\t\t\t\t\t\tcolor=\"#e92a2a\">\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td=\"M120 881c0-155 96-575 144-630 7-9 25-48 40-88 31-82 50-104 71-82 14 15 81 162 120 264 51 136 105 412 105 542v63h-30c-30 0-30-1-30-55v-55H180v55c0 54 0 55-30 55h-30v-69zm343-98l107-6v-44c0-84-95-447-122-464-15-10-148-12-172-3-27 10-114 328-123 452l-6 72h105c58 0 153-3 211-7zm-89-588c-4-8-10-15-15-15s-9 7-9 15 7 15 15 15c9 0 12-6 9-15z\"\n\t\t\t\t\t\t\t\tfill=\"#020202\"></path>\n\t\t\t\t\t\t\t<path fill=\"orange\"\n\t\t\t\t\t\t\t\td=\"M150 880v-70h420v140H150v-70zM305 213c10-42 47-123 55-123 9 0 60 112 60 134 0 13-11 16-61 16h-61l7-27z\">\n\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"pen3\" onclick=\"apps.whiteboard.changePen.call(this)\" data-color=\"yellow\">\n\t\t\t\t\t\t<svg xmlns=\"https://www.w3.org/2000/svg\" width=\"76\" height=\"75\" viewBox=\"0 0 760 950\"\n\t\t\t\t\t\t\tcolor=\"#e92a2a\">\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td=\"M120 881c0-155 96-575 144-630 7-9 25-48 40-88 31-82 50-104 71-82 14 15 81 162 120 264 51 136 105 412 105 542v63h-30c-30 0-30-1-30-55v-55H180v55c0 54 0 55-30 55h-30v-69zm343-98l107-6v-44c0-84-95-447-122-464-15-10-148-12-172-3-27 10-114 328-123 452l-6 72h105c58 0 153-3 211-7zm-89-588c-4-8-10-15-15-15s-9 7-9 15 7 15 15 15c9 0 12-6 9-15z\"\n\t\t\t\t\t\t\t\tfill=\"#020202\"></path>\n\t\t\t\t\t\t\t<path fill=\"yellow\"\n\t\t\t\t\t\t\t\td=\"M150 880v-70h420v140H150v-70zM305 213c10-42 47-123 55-123 9 0 60 112 60 134 0 13-11 16-61 16h-61l7-27z\">\n\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"pen4\" onclick=\"apps.whiteboard.changePen.call(this)\" data-color=\"green\">\n\t\t\t\t\t\t<svg xmlns=\"https://www.w3.org/2000/svg\" width=\"76\" height=\"75\" viewBox=\"0 0 760 950\"\n\t\t\t\t\t\t\tcolor=\"#e92a2a\">\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td=\"M120 881c0-155 96-575 144-630 7-9 25-48 40-88 31-82 50-104 71-82 14 15 81 162 120 264 51 136 105 412 105 542v63h-30c-30 0-30-1-30-55v-55H180v55c0 54 0 55-30 55h-30v-69zm343-98l107-6v-44c0-84-95-447-122-464-15-10-148-12-172-3-27 10-114 328-123 452l-6 72h105c58 0 153-3 211-7zm-89-588c-4-8-10-15-15-15s-9 7-9 15 7 15 15 15c9 0 12-6 9-15z\"\n\t\t\t\t\t\t\t\tfill=\"#020202\"></path>\n\t\t\t\t\t\t\t<path fill=\"green\"\n\t\t\t\t\t\t\t\td=\"M150 880v-70h420v140H150v-70zM305 213c10-42 47-123 55-123 9 0 60 112 60 134 0 13-11 16-61 16h-61l7-27z\">\n\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"pen5\" onclick=\"apps.whiteboard.changePen.call(this)\" data-color=\"blue\">\n\t\t\t\t\t\t<svg xmlns=\"https://www.w3.org/2000/svg\" width=\"76\" height=\"75\" viewBox=\"0 0 760 950\"\n\t\t\t\t\t\t\tcolor=\"#e92a2a\">\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td=\"M120 881c0-155 96-575 144-630 7-9 25-48 40-88 31-82 50-104 71-82 14 15 81 162 120 264 51 136 105 412 105 542v63h-30c-30 0-30-1-30-55v-55H180v55c0 54 0 55-30 55h-30v-69zm343-98l107-6v-44c0-84-95-447-122-464-15-10-148-12-172-3-27 10-114 328-123 452l-6 72h105c58 0 153-3 211-7zm-89-588c-4-8-10-15-15-15s-9 7-9 15 7 15 15 15c9 0 12-6 9-15z\"\n\t\t\t\t\t\t\t\tfill=\"#020202\"></path>\n\t\t\t\t\t\t\t<path fill=\"blue\"\n\t\t\t\t\t\t\t\td=\"M150 880v-70h420v140H150v-70zM305 213c10-42 47-123 55-123 9 0 60 112 60 134 0 13-11 16-61 16h-61l7-27z\">\n\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"pen6\" onclick=\"apps.whiteboard.changePen.call(this)\" data-color=\"purple\">\n\t\t\t\t\t\t<svg xmlns=\"https://www.w3.org/2000/svg\" width=\"76\" height=\"75\" viewBox=\"0 0 760 950\"\n\t\t\t\t\t\t\tcolor=\"#e92a2a\">\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td=\"M120 881c0-155 96-575 144-630 7-9 25-48 40-88 31-82 50-104 71-82 14 15 81 162 120 264 51 136 105 412 105 542v63h-30c-30 0-30-1-30-55v-55H180v55c0 54 0 55-30 55h-30v-69zm343-98l107-6v-44c0-84-95-447-122-464-15-10-148-12-172-3-27 10-114 328-123 452l-6 72h105c58 0 153-3 211-7zm-89-588c-4-8-10-15-15-15s-9 7-9 15 7 15 15 15c9 0 12-6 9-15z\"\n\t\t\t\t\t\t\t\tfill=\"#020202\"></path>\n\t\t\t\t\t\t\t<path fill=\"purple\"\n\t\t\t\t\t\t\t\td=\"M150 880v-70h420v140H150v-70zM305 213c10-42 47-123 55-123 9 0 60 112 60 134 0 13-11 16-61 16h-61l7-27z\">\n\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"eraser\" onclick=\"apps.whiteboard.changePen.call(this)\" data-color=\"eraser\">\n\t\t\t\t\t\t<img src=\"apps/icons/whiteboard/marker.png\" height=\"70\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"delete\" onclick=\"apps.whiteboard.delete()\">\n\t\t\t\t\t\t<img src=\"apps/icons/whiteboard/delete.png\" height=\"60\">\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"window winver\">\n\t\t<div class=\"titbar\">\n\t\t\t<p data-i18n=\"winver.name\">关于 Windows</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('winver');\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-winver\">\n\t\t\t<div class=\"logo\">\n\t\t\t\t<div class=\"img\"></div>\n\t\t\t\t<p>Windows 12</p>\n\t\t\t</div>\n\t\t\t<hr>\n\t\t\t<p>Microsoft Windows</p>\n\t\t\t<p data-i18n=\"winver.p1\">版本 25H2 (OS 内部版本 24612.1896)</p>\n\t\t\t<p data-i18n=\"winver.p2\">© Microsoft Corporation。保留所有权利。</p>\n\t\t\t<p style=\"margin-top: 20px\" data-i18n=\"winver.p3\">Windows12 专业版操作系统及其用户界面受美国和其他国家/地区的商标法和其他待颁布或已颁布的知识产权法保护。</p>\n\t\t\t<div class=\"bottom\">\n\t\t\t\t<p data-i18n=\"winver.p4\">根据Microsoft软件许可条款，许可如下用户使用本产品</p>\n\t\t\t\t<p style=\"margin:20px 0 0 90px\">Administrator</p>\n\t\t\t</div>\n\t\t\t<p ondblclick=\"$(this).hide()\" class=\"a mesg\" data-i18n=\"winver.p5\">上面都是胡扯，切勿当真(双击隐藏此消息)</p>\n\t\t\t<div class=\"buttons\">\n\t\t\t\t<a class=\"a submit act\" onclick=\"hidewin('winver');\" data-i18n=\"ok\">确定</a>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"window code-editor\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/vscode.png\" class=\"icon\">\n\t\t\t<p>代码编辑器</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('code-editor')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('code-editor')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('code-editor')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"apps.codeEditor.save()\" win12_title=\"保存 Ctrl+S\"><i class=\"bi bi-floppy\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/vscode.png\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-code-editor\">\n\t\t\t<div id=\"code-ace-editor\"></div>\n\t\t</div>\n\t</div>\n\t<div class=\"window imgviewer\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/files/picture.png\" class=\"icon\">\n\t\t\t<p>图片查看器</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('imgviewer')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('imgviewer')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('imgviewer')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/files/picture.png\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-imgviewer\">\n\t\t\t<img class=\"preview-img\" src=\"\" alt=\"\">\n\t\t</div>\n\t</div>\n\t<div class=\"window mediaplayer\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/files/vidio.png\" class=\"icon\">\n\t\t\t<p>媒体播放器</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"apps.mediaplayer.close()\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('mediaplayer')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('mediaplayer')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/files/vidio.png\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-mediaplayer\">\n\t\t\t<video id=\"mediaplayer-video\" controls style=\"display:none;\"></video>\n\t\t\t<audio id=\"mediaplayer-audio\" controls style=\"display:none;\"></audio>\n\t\t</div>\n\t</div>\n\t<div class=\"window pdfviewer\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/files/pdf.svg\" class=\"icon\">\n\t\t\t<p>PDF 查看器</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"apps.pdfviewer.close()\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('pdfviewer')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('pdfviewer')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/files/pdf.svg\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-pdfviewer\">\n\t\t\t<iframe id=\"pdfviewer-frame\" src=\"\" style=\"width:100%;height:100%;border:none;\"></iframe>\n\t\t</div>\n\t</div>\n\t<div class=\"window taskmgr\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/taskmgr.png\" class=\"icon\">\n\t\t\t<span style=\"font-size: 15px;margin-top: 9px;\" data-i18n=\"taskmgr.name\">任务管理器</span>\n\t\t\t<div style=\"flex-grow: 1;display: flex;align-items: center;justify-content: center;\">\n\t\t\t\t<input type=\"text\" class=\"input\" style=\"width: 75%;\" placeholder=\"键入要搜索的名称\" id=\"tsk-search\" oninput=\"apps.taskmgr.generateProcesses()\" value=\"\"></input>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('taskmgr')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('taskmgr')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('taskmgr')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"loadback\">\n\t\t\t<img src=\"icon/taskmgr.png\" class=\"icon\">\n\t\t</div>\n\t\t<div class=\"content\" id=\"win-taskmgr\" style=\"height:100%\">\n\t\t\t<div class=\"menu\" style=\"height:100%; display: flex; flex-direction: column;\">\n\t\t\t\t<a class=\"fold\" onclick=\"apps.taskmgr.fold()\" win12_title=\"折叠\"><i class=\"bi bi-list\"></i></a>\n\t\t\t\t<list class=\"focs\">\n\t\t\t\t\t<a class=\"processes check\" onclick=\"apps.taskmgr.page('processes')\" win12_title=\"进程\"><icon class=\"t-icon\"></icon><p><span data-i18n=\"taskmgr.processes\">进程</span></p></a>\n\t\t\t\t\t<a class=\"performance\" onclick=\"apps.taskmgr.page('performance')\" win12_title=\"性能\"><icon class=\"s-icon\"></icon><p><span data-i18n=\"taskmgr.performance\">性能</span></p></a>\n\t\t\t\t\t<a class=\"setting\" onclick=\"apps.taskmgr.page('setting')\" style=\"position: absolute; bottom: 0px;\" win12_title=\"设置\"><i class=\"bi bi-gear\"></i><p><span data-i18n=\"taskmgr.settings\">设置</span></p></a>\n\t\t\t\t\t<span class=\"focs\" data-type=\"abs\" style=\"position: absolute;top: -445px; left: 0px;\"></span>\n\t\t\t\t</list>\n\t\t\t</div>\n\t\t\t<div class=\"main\">\n\t\t\t\t<div class=\"cnt processes show\">\n\t\t\t\t\t<div class=\"tit\">\n\t\t\t\t\t\t<p data-i18n=\"taskmgr.processes.title\">进程</p>\n\t\t\t\t\t\t<hr>\n\t\t\t\t\t</div>\n\t\t\t\t\t<table>\n\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t<tr class=\"title\">\n\t\t\t\t\t\t\t\t<th data-i18n=\"taskmgr.processes.name\">进程名称</th>\n\t\t\t\t\t\t\t\t<th class=\"align-right\" onclick=\"apps.taskmgr.changeSort(this.childNodes[0], 'cpu');\"><i class=\"bi bi-chevron-down\"></i><div class=\"value\">11.4%</div><span data-i18n=\"taskmgr.processes.cpu\">CPU</span></th>\n\t\t\t\t\t\t\t\t<th class=\"align-right\" onclick=\"apps.taskmgr.changeSort(this.childNodes[0], 'memory');\"><i class=\"bi\"></i><div class=\"value\">11.4%</div><span data-i18n=\"taskmgr.processes.memory\">内存</span></th>\n\t\t\t\t\t\t\t\t<th class=\"align-right\" onclick=\"apps.taskmgr.changeSort(this.childNodes[0], 'disk');\"><i class=\"bi\"></i><div class=\"value\">11.4%</div><span data-i18n=\"taskmgr.processes.disk\">硬盘</span></th>\n\t\t\t\t\t\t\t\t<th class=\"power\" data-i18n=\"taskmgr.processes.power\">电源使用情况</th>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t<tbody class=\"view\">\n\t\t\t\t\t\t\t<!-- 进程信息 -->\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t</table>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"cnt 404\">\n\t\t\t\t\t<div class=\"content\" style=\"display: flex; justify-content: center; align-items: center; height: 100%; width: 100%; flex-direction: column; text-align: center\">\n\t\t\t\t\t\t<p data-i18n=\"taskmgr.processes.no-results\"><b>无筛选结果</b><br />请尝试使用其他名称、发布者或 PID 键入以进行筛选。</p>\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\t<a onclick=\"$('#tsk-search').val('');apps.taskmgr.generateProcesses()\" style=\"cursor: pointer;color:var(--href);\" data-i18n=\"taskmgr.processes.reset-filter\">重置筛选器</a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"cnt performance\">\n\t\t\t\t\t<div class=\"tit\">\n\t\t\t\t\t\t<p data-i18n=\"taskmgr.performance.title\">性能</p>\n\t\t\t\t\t\t<hr>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"content\">\n\t\t\t\t\t\t<div class=\"select-menu\">\n\t\t\t\t\t\t\t<div onclick=\"apps.taskmgr.graph('graph-cpu')\" class=\"graph-cpu check\">\n\t\t\t\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t\t\t\t<svg class=\"graph-view-cpu\" viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"right\">\n\t\t\t\t\t\t\t\t\t<div class=\"tit\">CPU</div>\n\t\t\t\t\t\t\t\t\t<div class=\"data\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"value1\">11.4%</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"value2\">10GHz</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div onclick=\"apps.taskmgr.graph('graph-memory');\" class=\"graph-memory\">\n\t\t\t\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t\t\t\t<svg class=\"graph-view-memory\" viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"right\">\n\t\t\t\t\t\t\t\t\t<div class=\"tit\" data-i18n=\"taskmgr.performance.memory\">内存</div>\n\t\t\t\t\t\t\t\t\t<div class=\"data\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"value1\">11.4 / 100GB</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"value2\">11.4%</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div onclick=\"apps.taskmgr.graph('graph-disk');\" class=\"graph-disk\">\n\t\t\t\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t\t\t\t<svg class=\"graph-view-disk\" viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"right\">\n\t\t\t\t\t\t\t\t\t<div class=\"tit\" data-i18n=\"taskmgr.performance.disk\">磁盘</div>\n\t\t\t\t\t\t\t\t\t<div class=\"data\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"tit\">SSD</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"value2\">1.14%</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div onclick=\"apps.taskmgr.graph('graph-wifi');\" class=\"graph-wifi\">\n\t\t\t\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t\t\t\t<svg class=\"graph-view-wifi\" viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"right\">\n\t\t\t\t\t\t\t\t\t<div class=\"tit\" data-i18n=\"taskmgr.performance.wifi\">Wi-Fi</div>\n\t\t\t\t\t\t\t\t\t<div class=\"data\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"tit\">WLAN</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"value2\"><span data-i18n=\"taskmgr.performance.wifi-speed\">发送: 1145 接收: 1145 Mbps</span></div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div onclick=\"apps.taskmgr.graph('graph-gpu');\" class=\"graph-gpu\">\n\t\t\t\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t\t\t\t<svg class=\"graph-view-gpu\" viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"right\">\n\t\t\t\t\t\t\t\t\t<div class=\"tit\">GPU 0</div>\n\t\t\t\t\t\t\t\t\t<div class=\"data\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"tit\">NBidia GeForce RTX 4090Ti</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"value2\">1%</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"performance-graph\">\n\t\t\t\t\t\t\t<div class=\"graph-cpu show\">\n\t\t\t\t\t\t\t\t<div class=\"tit\">\n\t\t\t\t\t\t\t\t\t<div class=\"left-name\">CPU</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right-message\">The Wandering Earth (R) NB (R) Quantum Chip 550W @ 8192</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph-msg top\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\">% 利用率</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">100%</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph\" win12_title=\"CPU活动\">\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"bg\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"chart\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph-msg bottom\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\">60 秒</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">0</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"information\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">利用率</div><div class=\"value\">11.4%</div></div>\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">速度</div><div class=\"value\">1024.53 GHz</div></div>\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">进程</div><div class=\"value\">1145</div></div>\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">线程</div><div class=\"value\">114514</div></div>\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">句柄</div><div class=\"value\">114514191918</div></div>\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">正常运行时间</div><div class=\"value\">0:11:45:14</div></div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">\n\t\t\t\t\t\t\t\t\t\t<table>\n\t\t\t\t\t\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr><td>基准速度: </td><td>10.0 GHz</td></tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr><td>插槽: </td><td>1</td></tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr><td>内核: </td><td>32</td></tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr><td>逻辑处理器: </td><td>32</td></tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr><td>虚拟化: </td><td>已启用</td></tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr><td>L1缓存: </td><td>512 MB</td></tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr><td>L2缓存: </td><td>2.1 GB</td></tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr><td>L3缓存: </td><td>5.5 GB</td></tr>\n\t\t\t\t\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t\t\t\t\t</table>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"graph-memory\">\n\t\t\t\t\t\t\t\t<div class=\"tit\">\n\t\t\t\t\t\t\t\t\t<div class=\"left-name\">内存</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right-message\">100GB</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph-msg top\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\">内存使用量</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">100GB</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph\" win12_title=\"使用中\">\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"bg\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"chart\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph-msg bottom\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\">60 秒</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">0</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph-msg top\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\">内存组合</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph2 minor\" style=\"margin-bottom: 10px; border: 1px #660099 solid; height: 35px !important\">\n\t\t\t\t\t\t\t\t\t<div class=\"chart\" style=\"background-color: #66009922;\"></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"information\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">使用中(已压缩)</div><div class=\"value\">11.4 GB</div></div>\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">可用</div><div class=\"value\">88.6 GB</div></div>\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">已提交</div><div class=\"value\">12 / 100 GB</div></div>\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">已缓存</div><div class=\"value\">5.5 GB</div></div>\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">分页缓冲池</div><div class=\"value\">1 GB</div></div>\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">非分页缓冲池</div><div class=\"value\">365 MB</div></div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">\n\t\t\t\t\t\t\t\t\t\t<table>\n\t\t\t\t\t\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr><td>速度: </td><td>4514MHz</td></tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr><td>已使用插槽: </td><td>2 / 2</td></tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr><td>外形规格: </td><td>Row of chips</td></tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr><td>为硬件保留的内存：</td><td>200MB</td></tr>\n\t\t\t\t\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t\t\t\t\t</table>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"graph-disk\">\n\t\t\t\t\t\t\t\t<div class=\"tit\">\n\t\t\t\t\t\t\t\t\t<div class=\"left-name\">磁盘 0 (C: D:)</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right-message\">NB++ 360G</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph-msg top\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\">活动时间</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">100%</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph\" win12_title=\"磁盘处理读取或写入请求的时间百分比\">\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"bg\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"chart\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph-msg bottom\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\">60 秒</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">0</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph-msg top\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\">磁盘传输速率</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">100 MB/秒</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph2 minor\" style=\"margin-bottom: 10px; height: 70px !important; min-height: 70px !important;\">\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"chart\" xmlns=\"http://www.w3.org/2000/svg\" style=\"width: 100% !important; height: 100% !important\"></svg>\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"bg\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"information\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">活动时间</div><div class=\"value\">1.14%</div></div>\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">平均响应时间</div><div class=\"value\">0.014 毫秒</div></div>\n\t\t\t\t\t\t\t\t\t\t<div style=\"border-left: 2px #008000 solid; padding-left: 10px;\"><div class=\"top\">读取速度</div><div class=\"value\">14 KB/秒</div></div>\n\t\t\t\t\t\t\t\t\t\t<div style=\"border-left: 2px #008000 dotted; padding-left: 10px;\"><div class=\"top\">写入速度</div><div class=\"value\">114 KB/秒</div></div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">\n\t\t\t\t\t\t\t\t\t\t<table>\n\t\t\t\t\t\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr><td>容量: </td><td>359 GB</td></tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr><td>已格式化: </td><td>359 GB</td></tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr><td>系统磁盘: </td><td>是</td></tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr><td>页面文件: </td><td>是</td></tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr><td>类型: </td><td>SSD</td></tr>\n\t\t\t\t\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t\t\t\t\t</table>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"graph-wifi\">\n\t\t\t\t\t\t\t\t<div class=\"tit\">\n\t\t\t\t\t\t\t\t\t<div class=\"left-name\">Wi-Fi</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right-message\">NB Wireless LAN 802.11ac</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph-msg top\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\">吞吐量</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">100 Mbps</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph\" win12_title=\"此网络上的发送和接收活动\">\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"bg\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"chart\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph-msg bottom\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\">60 秒</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">0</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"information\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">发送</div><div class=\"value\">114 Mbps</div></div>\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">接收</div><div class=\"value\">114 Mbps</div></div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">\n\t\t\t\t\t\t\t\t\t\t<table>\n\t\t\t\t\t\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>适配器名称: </td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>WLAN</td>\n\t\t\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>SSID: </td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>NB Network</td>\n\t\t\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>连接类型: </td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>802.11ac</td>\n\t\t\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>IPv4地址: </td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>114.514.19.81</td>\n\t\t\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>IPv6地址: </td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>2CBB::2CBB:2CBB:2CBB:2CBB</td>\n\t\t\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>信号强度: </td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"4.4 4.4 26.2 31.2\" width=\"1.45em\" height=\"1.4em\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<path d=\"M 5 25 L 5 35 L 10 35 L 10 25 L 5 25 M 10 20 L 10 35 L 15 35 L 15 20 L 10 20 M 15 15 L 20 15 L 20 35 L 15 35 L 15 15 M 20 10 L 25 10 L 25 35 L 20 35 L 20 10 M 25 5 L 25 35 L 30 35 L 30 5 L 25 5\" stroke=\"#8e5829\" stroke-width=\"0.6\" fill=\"#8e582988\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t\t\t\t\t</table>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"graph-gpu\">\n\t\t\t\t\t\t\t\t<div class=\"tit\">\n\t\t\t\t\t\t\t\t\t<div class=\"left-name\">GPU</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right-message\">NBidia GeForce RTX 9090Ti</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graphs\">\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"usage\" style=\"display: none;\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t\t<div class=\"graph1\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"title-gpu\">3D</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"chart\">\n\t\t\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"bg\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"chart\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"graph2\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"title-gpu\">Copy</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"chart\">\n\t\t\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"bg\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"chart\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"graph3\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"title-gpu\">Video Decode</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"chart\">\n\t\t\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"bg\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"chart\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"graph4\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"title-gpu\">Video Processing</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"chart\">\n\t\t\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"bg\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"chart\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph-msg top\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\">专用 GPU 内存利用率</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">16 GB</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph gpu2-1 minor\" style=\"height: 70px !important; min-height: 70px !important;\" win12_title=\"专用 GPU 内存利用率\">\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"chart\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"bg\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph-msg top\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\">共享 GPU 内存利用率</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">32 GB</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"graph gpu2-2 minor\" style=\"height: 70px !important; min-height: 70px !important; margin-bottom: 10px\" win12_title=\"共享 GPU 内存利用率\">\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"chart\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 6000 1000\" preserveAspectRatio=\"none\" class=\"bg\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"information\">\n\t\t\t\t\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">利用率</div><div class=\"value\">1.1%</div></div>\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">专用 GPU 内存</div><div class=\"value\">0.1 GB / 2 GB</div></div>\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">共享 GPU 内存</div><div class=\"value\">1.1 GB / 16 GB</div></div>\n\t\t\t\t\t\t\t\t\t\t<div><div class=\"top\">GPU 内存</div><div class=\"value\">1.2 / 18 GB</div></div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"right\">\n\t\t\t\t\t\t\t\t\t\t<table>\n\t\t\t\t\t\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>驱动程序版本: </td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>11.45.14.19</td>\n\t\t\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>驱动程序日期: </td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>2025 / 1 / 5</td>\n\t\t\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>DirectX 版本</td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>12 (FL 12.1)</td>\n\t\t\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>物理位置: </td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td>PCI 总线 0、设备 14 、功能 0</td>\n\t\t\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t\t\t\t\t</table>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"cnt setting\">\n\t\t\t\t\t<div class=\"tit\">\n\t\t\t\t\t\t<p data-i18n=\"taskmgr.settings.title\">设置</p>\n\t\t\t\t\t\t<hr>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<h3 data-i18n=\"taskmgr.settings.window-management\">窗口管理</h3>\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"tsk-setting-topmost\" name=\"tsk-setting-topmost\" style=\"height: 15px;width:15px;color:#fff;\" onclick=\"if(checked){topmost[topmost.length]='taskmgr'}else{topmost.splice(topmost.indexOf('taskmgr',1))};hidewin('taskmgr');apps.taskmgr.page('processes');$('#win-taskmgr>.menu>list.focs>a')[0].click();saveDesktop();$('#tsk-search').val('');setTimeout('openapp(`taskmgr`);apps.taskmgr.generateProcesses();',300);\"/><label for=\"tsk-setting-topmost\" style=\"font-size: 15px;\" data-i18n=\"taskmgr.settings.stay-on-top\">置于顶层</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<h3 data-i18n=\"taskmgr.settings.feedback\">反馈</h3>\n                        <a class=\"a jump\" onclick=\"shownotice('feedback')\" data-i18n=\"taskmgr.settings.send-feedback\">发送反馈</a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"window word\" data-min-width=\"800\" style=\"width: max(800px, 70%)\">\n\t\t<div class=\"resize-bar\"></div>\n\t\t<div class=\"titbar\">\n\t\t\t<img src=\"icon/word.svg\" class=\"icon\">\n\t\t\t<p data-i18n=\"word.name\">Word Preview</p>\n\t\t\t<div>\n\t\t\t\t<a class=\"a wbtg red\" onclick=\"hidewin('word')\"><i class=\"bi bi-x-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg max\" onclick=\"maxwin('word')\"><i class=\"bi bi-app\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"minwin('word')\"><i class=\"bi bi-dash-lg\"></i></a>\n\t\t\t\t<a class=\"a wbtg\" onclick=\"window.location.href='bluescreen.html';\"><i class=\"bi bi-person\"></i></a>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"pages\">\n\t\t<div class=\"home show\">\n\t\t\t<div class=\"content\" id=\"win-word\">\n\t\t\t\t<div class=\"app-left\">\n\t\t\t\t\t<list class=\"focs\">\n\t\t\t\t\t\t<a class=\"back\" onclick=\"apps.word.edit()\"><i class=\"bi bi-arrow-left-circle\"></i></a>\n\t\t\t\t\t\t<a class=\"home check\"><icon class=\"office-icon\"></icon><span class=\"t2\" data-i18n=\"home\">首页</span></a>\n\t\t\t\t\t</list>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"app-main\">\n\t\t\t\t\t<h3>新建</h3>\n\t\t\t\t\t<div class=\"card-list\">\n\t\t\t\t\t\t<div class=\"card\" onclick=\"apps.word.new()\">\n\t\t\t\t\t\t\t<img border=\"0\" src=\"img/office-newfile.png\">\n\t\t\t\t\t\t\t<p>空白文档</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"card\" onclick=\"apps.word.new()\">\n\t\t\t\t\t\t\t<img border=\"0\" src=\"img/office-newfile.png\">\n\t\t\t\t\t\t\t<p>空白文档</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<h3>最近</h3>\n\t\t\t\t\t<input type=\"text\" class=\"input\" placeholder=\"搜索\">\n\t\t\t\t\t<p>你最近尚未打开任何文档。</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"edit\">\n\t\t\t<div class=\"ribbon\">\n\t\t\t\t<div class=\"tab\">\n\t\t\t\t\t<a win12_title=\"暂未完成\" data-descp=\"hide\" onclick=\"apps.word.home()\">文件</a>\n\t\t\t\t\t<a>插入</a>\n\t\t\t\t\t<span class=\"tab-selected\"></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"items\">\n\t\t\t\t\t<div class=\"item\" onclick=\"$('.window.word>.pages>.edit>.content>.doc.homepage').append('默认文本<br>')\">\n\t\t\t\t\t\t<i class=\"bi bi-text-paragraph\"></i>\n\t\t\t\t\t\t<p>段</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"item\" onclick=\"$('.window.word>.pages>.edit>.content>.doc.homepage').append('<h1>默认标题</h1>')\">\n\t\t\t\t\t\t<i class=\"bi bi-text-paragraph\"></i>\n\t\t\t\t\t\t<p>主标题</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"item\" onclick=\"$(`.window.word>.pages>.edit>.content>.doc.homepage`).append(`<img class='square'>`)\">\n\t\t\t\t\t\t<i class=\"bi bi-bounding-box\"></i>\n\t\t\t\t\t\t<p>方形</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"item\" onclick=\"$(`.window.word>.pages>.edit>.content>.doc.homepage`).append(`<table class='table' border='1' contenteditable><tr><th></th><th></th><th></th></tr><tr><th></th><th></th><th></th></tr><tr><th></th><th></th><th></th></tr></table><br>`)\">\n\t\t\t\t\t\t<i class=\"bi bi-bounding-box\"></i>\n\t\t\t\t\t\t<p>表格</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"item\" onclick='$(`.window.word>.pages>.edit>.content`).append(`<div class=\"doc\" contenteditable></div>`)'>\n\t\t\t\t\t\t<i class=\"bi bi-file\"></i>\n\t\t\t\t\t\t<p>空白页</p>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"content\">\n\t\t\t\t<div class=\"doc homepage\" contenteditable></div>\n\t\t\t</div>\n\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<script defer src=\"data/tasks.js\"></script>\n\t<script defer src=\"scripts/utils.js\"></script>\n\n\t<script defer src=\"module/apps.js\"></script>\n\t<script defer src=\"desktop.js\"></script>\n\t<script defer src=\"module/window.js\"></script>\n\t<script defer src=\"module/widget.js\"></script>\n\t<script defer src=\"module/tab.js\"></script>\n\n\t<script defer src=\"scripts/setting_getTime.js\"></script><!-- 设置页面获取时间逻辑 @Junchen Yi 2023-9-17-->\n\t<script defer src=\"scripts/news.js\"></script>\n\t<script defer src=\"scripts/Lunar.js\"></script><!-- 农历转换 @stxttkx 2026-2-17-->\n\t<script defer src=\"https://unpkg.com/pyodide@0.23.4/pyodide.js\" async></script>\n\t<script defer src=\"https://cdnjs.cloudflare.com/ajax/libs/ace/1.23.0/ace.min.js\"></script>\n\t<script defer src=\"https://cdnjs.cloudflare.com/ajax/libs/ace/1.23.0/ext-language_tools.min.js\"></script>\n\t<script defer src=\"https://cdnjs.cloudflare.com/ajax/libs/ace/1.23.0/ext-error_marker.min.js\"></script>\n\t<script defer src='https://cdnjs.cloudflare.com/ajax/libs/big.js/6.2.1/big.min.js'></script>\n\t<script defer src=\"./scripts/calculator_kernel.js\"></script>\n\t<script defer src='https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.min.js'></script>\n\t<script defer src='https://cdnjs.cloudflare.com/ajax/libs/marked/12.0.2/marked.min.js'></script>\n\n</body>\n\n</html>\n"
  },
  {
    "path": "desktop.js",
    "content": "'use strict';\n\n/*\n\nWindows 12 网页版\n    GitHub: tjy-gitnub/win12\n\n*/\n\n/********** 禁止格式化此文档！ **********/\n\nconsole.log('%cWindows 12 网页版 (GitHub: tjy-gitnub/win12)', 'background-image: linear-gradient(to right,rgb(174, 115, 229),rgb(21, 105, 223)); border-radius: 8px; font-size: 1.3em; padding: 10px 15px; color: #fff; ');\n// 好高级，还能这样？？\n\n\n\nfunction loadlang(code) {\n    $.i18n.properties({\n        name: 'lang',\n        path: 'lang/', // 目录\n        language: code,\n        mode: 'map',\n        callback: function() {\n            $('[data-i18n]').each(function() {\n                // 标签的内容\n                // console.log($(this).data(\"i18n\"));\n                // console.log($.i18n.prop($(this).data(\"i18n\")));\n                // if($.i18n.prop($(this).data(\"i18n\"))!=$(this).html())console.log($(this).data(\"i18n\"),$(this).html());\n                $(this).html($.i18n.prop($(this).data(\"i18n\")));\n            });\n            $('[data-i18n-attr]').each(function() {\n                // 标签的属性\n\n                // if($.i18n.prop($(this).data(\"i18n-key\"))!=$(this).attr($(this).data(\"i18n-attr\")))console.log($(this).data(\"i18n-key\"),$(this).attr($(this).data(\"i18n-attr\")));\n                $(this).attr($(this).data(\"i18n-attr\"),$.i18n.prop($(this).data(\"i18n-key\")));\n            });\n        }\n    });\n}\n\nlet nl='zh-TW';\nlet langc={\n    'zh-CN':'zh-CN',\n    'zh-cn':'zh-CN',\n    'zh-hans':'zh-CN',\n    'zh-Hans':'zh-CN',\n    'zh-TW':'zh-TW',\n    'zh-tw':'zh-TW',\n    'zh-hant':'zh-TW',\n    'zh-Hant':'zh-TW',\n    'zh-HK':'zh-TW',\n    'zh-hk':'zh-TW',\n    'zh':'zh-CN',\n\n    'en':'en',\n    'en-US':'en',\n    'en-us':'en',\n    'en-GB':'en',\n    'en-gb':'en'\n}\n\nlet langcode,lang=(txt,id)=>{\n    return $.i18n.prop(id);\n};\n\nif(localStorage.getItem('lang')!=null){\n    if(localStorage.getItem('lang')=='hans' || localStorage.getItem('lang')=='zh_cn' || localStorage.getItem('lang')=='zh-cn'){\n        localStorage.setItem('lang','zh-CN');\n    }\n}else{\n    if(navigator.language in langc)\n        localStorage.setItem('lang',langc[navigator.language]);\n    else\n        localStorage.setItem('lang','en');\n}\nlangcode=localStorage.getItem('lang');\n\n\nif(document.querySelectorAll('#loginback>.langselect>.'+langcode).length!=0){\n    $('#loginback>.langselect>.'+langcode).addClass('selected')\n}else{\n    $('#loginback>.langselect>.en').addClass('selected')\n}\n\n\nif(langcode!='zh-CN')\n    loadlang(langcode);\n\nif(langcode=='zh-CN'){\n    lang=(txt,id)=>{\n        // if(txt!=$.i18n.prop(id))console.log(id,txt);\n        return txt;\n    };\n}\nconsole.log('?')\n\n\n// 函数 lang(txt,id)\n/// langcode==zh_cn 下返回 txt,\n/// 否则返回语言 properties 文件中键 id 对应的值。\n/// 用例： lang('设置','setting.name')\n// \n// 为开发方便，故不将简体中文纳入语言考虑\n\n\n// 后端服务器\nconst server = 'http://win12server.freehk.svipss.top/';\nconst pages = {\n    'get-title': '', // 获取标题\n};\nconst page = $('html')[0];\n\nfunction disableIframes() {\n    $('iframe:not(.nochanges)').css('pointer-events', 'none');\n    $('iframe:not(.nochanges)').css('touch-action', 'none');\n}\n\nfunction enableIframes() {\n    $('iframe:not(.nochanges)').css('pointer-events', 'auto');\n    $('iframe:not(.nochanges)').css('touch-action', 'auto');\n}\n\nasync function api(index, nobase=false) {\n    if (!nobase) index='https://api.github.com/' +index;\n    const token = localStorage.getItem('token');\n    if (token) {\n        const headers = new Headers();\n        headers.append('Authorization', token);\n        const res = await fetch( index, {headers: headers});\n        return res;\n    }\n    else {\n        const res = await fetch( index);\n        return res;\n    }\n}\n\npage.addEventListener('mousedown', disableIframes);\npage.addEventListener('touchstart', disableIframes);\npage.addEventListener('mouseup', enableIframes);\npage.addEventListener('touchend', enableIframes);\npage.addEventListener('touchcancel', enableIframes);\n\npage.addEventListener('click',(event)=>{\n    if($('#start-menu').hasClass('show')&&!$(event.target).closest('#start-menu').length){\n        hide_startmenu();\n    }\n});\n//开始菜单收回\n\t\n\n// 上古代码，列表前的小竖线\ndocument.querySelectorAll('list.focs').forEach(li => {\n    li.addEventListener('click', () => {\n        let _ = li.$$('span.focs')[0], la = li.$$('a.check')[0],\n            las = li.$$('a');\n        if (_.dataset.type == 'abs') {\n            $(_).addClass('cl');\n            $(_).css('top', (la.getBoundingClientRect().top - li.parentElement.getBoundingClientRect().top) + 'px');\n            setTimeout(() => {\n                $(_).removeClass('cl');\n            }, 500);\n        }\n        else {\n            $(_).addClass('cl');\n            $(_).css('top', la.offsetTop - las[las.length - 1].offsetTop);\n            $(_).css('left', la.offsetLeft - li.offsetLeft);\n            setTimeout(() => {\n                $(_).removeClass('cl');\n            }, 500);\n        }\n    });\n});\n\n// 禁止拖拽图片\n$('img').on('dragstart', () => {\n    return false;\n});\n// 右键菜单\n$('html').on('contextmenu', () => {\n    return false;\n});\nfunction stop(e) {\n    e.stopPropagation();\n    return false;\n}\n$('input,textarea,*[contenteditable=true]').on('contextmenu', (e) => {\n    stop(e);\n    return true;\n});\n// 给桌面上的图标加右键菜单\nfunction addMenu() {\n    var parentDiv = $('#desktop')[0];\n    var childDivs = parentDiv.$$('#div');\n\n    for (var i = 0; i < childDivs.length; i++) {\n        if (i <= 4) {//win12内置的5个图标不添加\n            continue;\n        }\n        let div = childDivs[i];\n        div.setAttribute('iconIndex', i - 5);\n        div.addEventListener('contextmenu', (event) => {\n            if (div.getAttribute('appname') != undefined) {\n                return showcm(event, 'desktop.icon', [div.getAttribute('appname'), div.getAttribute('iconIndex')]);\n            }\n            return false;\n        }, useCapture = true);\n    }\n}\nvar run_cmd = '';\nconst nomax = { 'calc': 0 , 'notepad-fonts': 0, 'camera-notice': 0, 'winver': 0, 'run': 0, 'wsa': 0 };\nconst nomin = { 'notepad-fonts': 0, 'camera-notice': 0, 'run': 0 };\nvar topmost = [];\nvar sys_setting = [1, 1, 1, 0, 1, 1, 1];\nvar use_music = true;\nvar use_mic_voice = true;\n\n// 右键菜单\n/* 参考 desktop.html 开头信息\n    每个标识对应一个列表，每一项为一个右键菜单中显示的项，可以有以下形式：\n1. 'text', 文本信息\n2. ['text','script'], 分别为显示内容，点击执行的代码\n3. arg => {\n        ...\n        return ...\n    }\n    形参 arg 为 showcm() 方法第三个位置的用以传参的参数内容，\n    返回内容或为 'null' 表示跳过此项，或参考条目 2 的格式\n*/\nconst cms = {\n    'save-bar':[\n      arg => {\n        return ['<i class=\"bi bi-window-x\"></i> 移除', `removeEdgeSaveUrl('${arg}')`];\n      }\n    ],\n    'titbar': [\n        arg => {\n            if (arg in nomax) {\n                return 'null';\n            }\n            if ($('.window.' + arg).hasClass('max')) {\n                return ['<i class=\"bi bi-window-stack\"></i> '+lang('还原','window.restore'), `maxwin('${arg}')`];\n            }\n            else {\n                return ['<i class=\"bi bi-window-fullscreen\"></i> '+lang('最大化','window.max'), `maxwin('${arg}')`];\n            }\n        },\n        arg => {\n            if (arg in nomin) {\n                return 'null';\n            }\n            else {\n                return ['<i class=\"bi bi-window-dash\"></i> '+lang('最小化','window.min'), `minwin('${arg}')`];\n            }\n        },\n        arg => {\n            if (arg in nomin) {\n                return ['<i class=\"bi bi-window-x\"></i> '+lang('关闭','close'), `hidewin('${arg}', 'configs')`];\n            }\n            else {\n                return ['<i class=\"bi bi-window-x\"></i> '+lang('关闭','close'), `hidewin('${arg}')`];\n            }\n        },\n    ],\n    'taskbar': [\n        arg => {\n            return ['<i class=\"bi bi-window-x\"></i> '+lang('关闭','close'), `hidewin('${arg}')`];\n        }\n    ],\n    'desktop': [\n        [`<i class=\"bi bi-arrow-clockwise\"></i> ${lang('刷新','refresh')} <info>F5</info>`, '$(\\'#desktop\\').css(\\'opacity\\',\\'0\\');setTimeout(()=>{$(\\'#desktop\\').css(\\'opacity\\',\\'1\\');},100);setIcon();'],\n        ['<i class=\"bi bi-circle-square\"></i> '+lang('切换主题','desktop.tgltheme'), 'toggletheme()'],\n        `<a onmousedown=\"window.open(\\'https://github.com/tjy-gitnub/win12\\',\\'_blank\\');\" win12_title=\"https://github.com/tjy-gitnub/win12\" onmouseenter=\"showdescp(event)\" onmouseleave=\"hidedescp(event)\"><i class=\"bi bi-github\"></i> ${lang('在 Github 中查看此项目','desktop.vogithub')}</a>`,\n        arg => {\n            if (edit_mode) {\n                return ['<i class=\"bi bi-pencil\"></i> '+lang('退出编辑模式','desktop.exitedit'), 'editMode();'];\n            }\n            else if (!edit_mode) {\n                return ['<i class=\"bi bi-pencil\"></i> '+lang('进入编辑模式','desktop.enteredit'), 'editMode();'];\n            }\n        },\n        ['<i class=\"bi bi-info-circle\"></i> '+lang('关于 Win12 网页版','about.name'), '$(\\'#win-about>.about\\').addClass(\\'show\\');$(\\'#win-about>.update\\').removeClass(\\'show\\');openapp(\\'about\\');if($(\\'.window.about\\').hasClass(\\'min\\'))minwin(\\'about\\');'],\n        ['<i class=\"bi bi-brush\"></i> '+lang('个性化','psnl'), 'openapp(\\'setting\\');$(\\'#win-setting > div.menu > list > a.enable.appearance\\')[0].click()']\n    ],\n    'desktop.icon': [\n        arg => {\n            return ['<i class=\"bi bi-folder2-open\"></i> '+lang('打开','open'), 'openapp(`' + arg[0] + '`)'];\n        },\n        arg => {\n            if (arg[1] >= 0) {\n                return ['<i class=\"bi bi-trash3\"></i> '+lang('删除','del'), 'desktopItem.splice(' + (arg[1]) + ', 1);saveDesktop();setIcon();addMenu();'];\n            } else {\n                return 'null';\n            }\n        }\n    ],\n    'winx': [\n        arg => {\n            if ($('#start-menu').hasClass('show')) {\n                return ['<i class=\"bi bi-box-arrow-in-down\"></i> 关闭开始菜单', 'hide_startmenu()'];\n            }\n            else {\n                return ['<i class=\"bi bi-box-arrow-in-up\"></i> 打开开始菜单', `$('#start-btn').addClass('show');\n                if($('#search-win').hasClass('show')){$('#search-btn').removeClass('show');\n                $('#search-win').removeClass('show');setTimeout(() => {$('#search-win').removeClass('show-begin');\n                }, 200);}$('#start-menu').addClass('show-begin');setTimeout(() => {$('#start-menu').addClass('show');\n                }, 0);`];\n            }\n        },\n        '<hr>',\n        ['<i class=\"bi bi-gear\"></i> '+lang('设置','setting.name'), 'openapp(\\'setting\\')'],\n        ['<i class=\"bi bi-terminal\"></i> '+lang('运行','run.name'), 'openapp(\\'run\\')'],\n        ['<i class=\"bi bi-folder2-open\"></i> '+lang('文件资源管理器','explorer.name'), 'openapp(\\'explorer\\')'],\n        ['<i class=\"bi bi-search\"></i> 搜索', `$('#search-btn').addClass('show');hide_startmenu();\n        $('#search-win').addClass('show-begin');setTimeout(() => {$('#search-win').addClass('show');\n        $('#search-input').focus();}, 0);`],\n        '<hr>',\n        ['<i class=\"bi bi-power\"></i> 关机', 'window.location=\\'shutdown.html\\''],\n        ['<i class=\"bi bi-arrow-counterclockwise\"></i> 重启', 'window.location=\\'reload.html\\''],\n    ],\n    'smapp': [\n        arg => {\n            return ['<i class=\"bi bi-window\"></i> '+lang('打开','open'), `openapp('${arg[0]}');hide_startmenu();`];\n        },\n        arg => {\n            return ['<i class=\"bi bi-link-45deg\"></i> 在桌面创建链接', 'var s=`<div class=\\'b\\' ondblclick=openapp(\\'' + arg[0] + '\\')  ontouchstart=openapp(\\'' + arg[0] + '\\') appname=\\'' + arg[0] + '\\'><img src=\\'icon/' + geticon(arg[0]) + '\\'><p>' + arg[1] + '</p></div>`;$(\\'#desktop\\').append(s);desktopItem[desktopItem.length]=s;addMenu();saveDesktop();'];\n        },\n        arg => {\n            return ['<i class=\"bi bi-x\"></i> 取消固定', `$('#startmenu-r>.pinned>.apps>.sm-app.${arg[0]}').remove()`];\n        }\n    ],\n    'smlapp': [\n        arg => {\n            return ['<i class=\"bi bi-window\"></i> '+lang('打开','open'), `openapp('${arg[0]}');hide_startmenu();`];\n        },\n        arg => {\n            return ['<i class=\"bi bi-link-45deg\"></i> 在桌面创建链接', 'var s=`<div class=\\'b\\' ondblclick=openapp(\\'' + arg[0] + '\\')  ontouchstart=openapp(\\'' + arg[0] + '\\') appname=\\'' + arg[0] + '\\'><img src=\\'icon/' + geticon(arg[0]) + '\\'><p>' + arg[1] + '</p></div>`;$(\\'#desktop\\').append(s);desktopItem[desktopItem.length]=s;addMenu();saveDesktop();'];\n        },\n        arg => {\n            return ['<i class=\"bi bi-pin-angle\"></i> 固定到开始菜单', 'pinapp(\\'' + arg[0] + '\\', \\'' + arg[1] + '\\', \\'openapp(&quot;' + arg[0] + '&quot;);hide_startmenu();\\')'];\n        }\n    ],\n    'msgupdate': [\n        ['<i class=\"bi bi-layout-text-window-reverse\"></i> 查看详细', `openapp('about');if($('.window.about').hasClass('min'))\n        minwin('about');$('#win-about>.about').removeClass('show');$('#win-about>.update').addClass('show');\n        $('#win-about>.update>div>details:first-child').attr('open','open')`],\n        ['<i class=\"bi bi-box-arrow-right\"></i> 关闭', '$(\\'.msg.update\\').removeClass(\\'show\\')']\n    ],\n    'explorer.folder': [\n        arg => {\n            return ['<i class=\"bi bi-folder2-open\"></i> '+lang('打开','open'), `apps.explorer.goto('${arg}')`];\n        },\n        arg => {\n            return ['<i class=\"bi bi-arrow-up-right-square\"></i> 在新标签页中打开', `apps.explorer.newtab('${arg}');`];\n        },\n        arg => {\n            if ($('#win-explorer>.path>.tit>.path>div.text').length > 1)\n                return ['<i class=\"bi bi-trash3\"></i> '+lang('删除','del'), `apps.explorer.del('${arg}')`];\n            return 'null';\n        },\n        arg => {\n            if ($('#win-explorer>.path>.tit>.path>div.text').length > 1)\n                return ['<i class=\"bi bi-files\"></i> 复制', `apps.explorer.copy_or_cut('${arg}','copy')`];\n            return 'null';\n        },\n        arg => {\n            if ($('#win-explorer>.path>.tit>.path>div.text').length > 1)\n                return ['<i class=\"bi bi-scissors\"></i> 剪切', `apps.explorer.copy_or_cut('${arg}','cut')`];\n            return 'null';\n        },\n        arg => {\n            if ($('#win-explorer>.path>.tit>.path>div.text').length > 1)\n                return ['<i class=\"bi bi-input-cursor-text\"></i> 重命名', `apps.explorer.rename('${arg}')`];\n            return 'null';\n        }\n    ],\n    'explorer.file': [\n        arg => {\n            const drive = arg.split('/')[0];\n            if (apps.explorer.mounts[drive])\n                return ['<i class=\"bi bi-folder2-open\"></i> ' + lang('打开','open'), `apps.explorer.openMountedFile('${arg}')`];\n            return ['<i class=\"bi bi-folder2-open\"></i> 打开（目前毛用没有）', ''];\n        },\n        arg => {\n            if ($('#win-explorer>.path>.tit>.path>div.text').length > 1)\n                return ['<i class=\"bi bi-trash3\"></i> '+lang('删除','del'), `apps.explorer.del('${arg}')`];\n            return 'null';\n        },\n        arg => {\n            if ($('#win-explorer>.path>.tit>.path>div.text')[0].innerHTML != '此电脑')\n                return ['<i class=\"bi bi-files\"></i> 复制', `apps.explorer.copy_or_cut('${arg}','copy')`];\n            return 'null';\n        },\n        arg => {\n            if ($('#win-explorer>.path>.tit>.path>div.text').length > 1)\n                return ['<i class=\"bi bi-scissors\"></i> 剪切', `apps.explorer.copy_or_cut('${arg}','cut')`];\n        },\n        arg => {\n            if ($('#win-explorer>.path>.tit>.path>div.text').length > 1)\n                return ['<i class=\"bi bi-input-cursor-text\"></i> 重命名', `apps.explorer.rename('${arg}')`];\n            return 'null';\n        }\n    ],\n    'explorer.content': [\n        arg => {\n            if ($('#win-explorer>.path>.tit>.path>div.text').length > 1)\n                return ['<i class=\"bi bi-file-earmark-plus\"></i> 新建文件', 'apps.explorer.add($(\\'#win-explorer>.path>.tit\\')[0].dataset.path,\\'新建文本文档.txt\\')'];\n            return 'null';\n        },\n        arg => {\n            if ($('#win-explorer>.path>.tit>.path>div.text').length > 1)\n                return ['<i class=\"bi bi-folder-plus\"></i> 新建文件夹', 'apps.explorer.add($(\\'#win-explorer>.path>.tit\\')[0].dataset.path,\\'新建文件夹\\',type=\\'files\\')'];\n            return 'null';\n        },\n        arg => {\n            if ($('#win-explorer>.path>.tit>.path>div.text').length > 1)\n                return ['<i class=\"bi bi-file-earmark-arrow-down\"></i> 粘贴', 'apps.explorer.paste($(\\'#win-explorer>.path>.tit\\')[0].dataset.path,\\'新建文件夹\\',type=\\'files\\')'];\n            return 'null';\n        },\n        arg => {\n            if ($('#win-explorer>.path>.tit>.path>div.text').length > 1)\n                return ['<i class=\"bi bi-arrow-clockwise\"></i> 刷新', 'apps.explorer.goto($(\\'#win-explorer>.path>.tit\\')[0].dataset.path, false)'];\n            return ['<i class=\"bi bi-arrow-clockwise\"></i> 刷新', 'apps.explorer.reset()'];\n        },\n        arg => {\n            if ($('#win-explorer>.path>.tit>.path>div.text').length <= 1 && apps.explorer.fsApiSupported)\n                return ['<i class=\"bi bi-usb-drive\"></i> 挂载本地文件夹', 'apps.explorer.mountDrive()'];\n            return 'null';\n        }\n    ],\n    'explorer.mounted': [\n        arg => ['<i class=\"bi bi-folder2-open\"></i> 打开', `apps.explorer.goto('${arg}')`],\n        arg => ['<i class=\"bi bi-eject\"></i> 卸载', `apps.explorer.unmountDrive('${arg}')`]\n    ],\n    'explorer.tab': [\n        arg => {\n            return ['<i class=\"bi bi-x\"></i> 关闭标签页', `m_tab.close('explorer',${arg})`];\n        }\n    ],\n    'edge.tab': [\n        arg => {\n            return ['<i class=\"bi bi-pencil-square\"></i> 命名标签页', `apps.edge.c_rename(${arg})`];\n        },\n        arg => {\n            return ['<i class=\"bi bi-x\"></i> 关闭标签页', `m_tab.close('edge',${arg})`];\n        }\n    ],\n    'taskmgr.processes': [\n        arg => {\n            return ['<i class=\"bi bi-x\"></i> 结束任务', `apps.taskmgr.taskkill('${arg}')`];\n        }\n    ]\n};\n\nfunction showcm(e, cl, arg) {\n    if ($('#cm').hasClass('show-begin')) {\n        setTimeout(() => {\n            $('#cm').css('left', e.clientX);\n            $('#cm').css('top', e.clientY);\n            let h = '';\n            cms[cl].forEach(item => {\n                if (typeof (item) == 'function') {\n                    arg.event = e;\n                    ret = item(arg);\n                    if (ret == 'null') return true;\n                    h += `<a class=\"a\" onmousedown=\"${ret[1]}\">${ret[0]}</a>\\n`;\n                }\n                else if (typeof (item) == 'string') {\n                    h += item + '\\n';\n                }\n                else {\n                    h += `<a class=\"a\" onmousedown=\"${item[1]}\">${item[0]}</a>\\n`;\n                }\n            });\n            $('#cm>list')[0].innerHTML = h;\n            $('#cm').addClass('show-begin');\n            $('#cm>.foc').focus();\n            // .foc是用来模拟焦点的，将焦点放在右键菜单上\n            setTimeout(() => {\n                $('#cm').addClass('show');\n            }, 0);\n            setTimeout(() => {\n                if (e.clientY + $('#cm')[0].offsetHeight > $('html')[0].offsetHeight) {\n                    $('#cm').css('top', e.clientY - $('#cm')[0].offsetHeight);\n                }\n                if (e.clientX + $('#cm')[0].offsetWidth > $('html')[0].offsetWidth) {\n                    $('#cm').css('left', $('html')[0].offsetWidth - $('#cm')[0].offsetWidth - 5);\n                }\n            }, 200);\n        }, 200);\n        return;\n    }\n    $('#cm').css('left', e.clientX);\n    $('#cm').css('top', e.clientY);\n    let h = '';\n    cms[cl].forEach(item => {\n        if (typeof (item) == 'function') {\n            let ret = item(arg);\n            if (ret == 'null') {\n                return true;\n            };\n            h += `<a class=\"a\" onmousedown=\"${ret[1]}\">${ret[0]}</a>\\n`;\n        } else if (typeof (item) == 'string') {\n            h += item + '\\n';\n        } else {\n            h += `<a class=\"a\" onmousedown=\"${item[1]}\">${item[0]}</a>\\n`;\n        }\n    });\n    $('#cm>list')[0].innerHTML = h;\n    $('#cm').addClass('show-begin');\n    $('#cm>.foc').focus();\n    setTimeout(() => {\n        $('#cm').addClass('show');\n    }, 0);\n    setTimeout(() => {\n        if (e.clientY + $('#cm')[0].offsetHeight > $('html')[0].offsetHeight) {\n            $('#cm').css('top', e.clientY - $('#cm')[0].offsetHeight);\n        }\n        if (e.clientX + $('#cm')[0].offsetWidth > $('html')[0].offsetWidth) {\n            $('#cm').css('left', $('html')[0].offsetWidth - $('#cm')[0].offsetWidth - 5);\n        }\n    }, 200);\n}\n$('#cm>.foc').blur(() => {\n    let x = event.target.parentNode;\n    $(x).removeClass('show');\n    setTimeout(() => {\n        $(x).removeClass('show-begin');\n    }, 200);\n});\nlet font_window = false;\n\n// 下拉菜单\nconst dps = {\n    'notepad.file': [\n        ['<i class=\"bi bi-file-earmark-plus\"></i> 新建', `hidedp(true);apps.notepad._mountedFileHandle=null;$('#win-notepad>.text-box').addClass('down');\n        setTimeout(()=>{$('#win-notepad>.text-box').val('');$('#win-notepad>.text-box').removeClass('down')},200);`],\n        ['<i class=\"bi bi-floppy\"></i> 保存 <info>Ctrl+S</info>', `hidedp(true);apps.notepad.saveMounted();`],\n        ['<i class=\"bi bi-box-arrow-right\"></i> 另存为', `hidedp(true);$('#win-notepad>.save').attr('href', window.URL.createObjectURL(new Blob([$('#win-notepad>.text-box').html()])));\n        $('#win-notepad>.save')[0].click();`],\n        '<hr>',\n        ['<i class=\"bi bi-x\"></i> 退出', 'isOnDp=false;hidedp(true);hidewin(\\'notepad\\')'],\n    ],\n    'notepad.edit': [\n        ['<i class=\"bi bi-files\"></i> 复制 <info>Ctrl+C</info>', 'document.execCommand(\\'copy\\')'],\n        ['<i class=\"bi bi-clipboard\"></i> 粘贴 <info>Ctrl+V</info>', 'document.execCommand(\\'paste\\')'],\n        ['<i class=\"bi bi-scissors\"></i> 剪切 <info>Ctrl+X</info>', 'document.execCommand(\\'cut\\')'],\n        '<hr>',\n        ['<i class=\"bi bi-arrow-return-left\"></i> 撤销 <info>Ctrl+Z</info>', 'document.execCommand(\\'undo\\')'],\n        ['<i class=\"bi bi-arrow-clockwise\"></i> 重做 <info>Ctrl+Y</info>', 'document.execCommand(\\'redo\\')'],\n    ],\n    'notepad.view': [\n        ['<i class=\"bi bi-type\"></i> 插入正常字块', 'hidedp(true);$(\\'#win-notepad>.text-box\\')[0].innerHTML+=\\'<p>T</p>\\''],\n        ['<i class=\"bi bi-type-h1\"></i> 插入主标题', 'hidedp(true);$(\\'#win-notepad>.text-box\\')[0].innerHTML+=\\'<h1>H1</h1>\\''],\n        ['<i class=\"bi bi-type-h2\"></i> 插入次标题', 'hidedp(true);$(\\'#win-notepad>.text-box\\')[0].innerHTML+=\\'<h2>H2</h2>\\''],\n        ['<i class=\"bi bi-type-h3\"></i> 插入副标题', 'hidedp(true);$(\\'#win-notepad>.text-box\\')[0].innerHTML+=\\'<h3>H3</h3>\\''],\n        ['<i class=\"bi bi-type-underline\"></i> 插入下划线', 'hidedp(true);$(\\'#win-notepad>.text-box\\')[0].innerHTML+=\\'<u>U</u>\\''],\n        ['<i class=\"bi bi-type-strikethrough\"></i> 插入删除线', 'hidedp(true);$(\\'#win-notepad>.text-box\\')[0].innerHTML+=\\'<s>S</s>\\''],\n        ['<i class=\"bi bi-type-italic\"></i> 插入斜体字', 'hidedp(true);$(\\'#win-notepad>.text-box\\')[0].innerHTML+=\\'<i>I</i>\\''],\n        ['<i class=\"bi bi-type-bold\"></i> 插入加粗字', 'hidedp(true);$(\\'#win-notepad>.text-box\\')[0].innerHTML+=\\'<b>B</b>\\''],\n        '<hr>',\n        ['<i class=\"bi bi-fonts\"></i> 字体', 'font_window=true;hidedp(true);showwin(\\'notepad-fonts\\');apps.notepadFonts.reset();'],\n    ]\n};\n\nfunction playWindowsBackground() {\n    var audio = new Audio('./media/Windows Background.wav');\n    audio.play();\n}\n\nlet dpt = null, isOnDp = false;\n$('#dp')[0].onmouseover = () => { isOnDp = true; };\n$('#dp')[0].onmouseleave = () => { isOnDp = false; hidedp(); };\nfunction showdp(e, cl, arg) {\n    if ($('#dp').hasClass('show-begin')) {\n        $('#dp').removeClass('show');\n        setTimeout(() => {\n            $('#dp').removeClass('show-begin');\n        }, 200);\n        if (e != dpt) {\n            setTimeout(() => {\n                showdp(e, cl, arg);\n            }, 400);\n        }\n        return;\n    }\n    // dpt = e;\n    const off = $(e).offset();\n    $('#dp').css('left', off.left);\n    $('#dp').css('top', off.top + e.offsetHeight);\n    let h = '';\n    dps[cl].forEach(item => {\n        if (typeof (item) == 'function') {\n            let ret = item(arg);\n            if (ret == 'null') {\n                return true;\n            }\n            h += `<a class=\"a\" onclick=\"${ret[1]}\">${ret[0]}</a>\\n`;\n        } else if (typeof (item) == 'string') {\n            h += item + '\\n';\n        } else {\n            h += `<a class=\"a\" onclick=\"${item[1]}\">${item[0]}</a>\\n`;\n        }\n    });\n    $('#dp>list')[0].innerHTML = h;\n    $('#dp').addClass('show-begin');\n    setTimeout(() => {\n        $('#dp').addClass('show');\n    }, 0);\n    setTimeout(() => {\n        if (off.top + e.offsetHeight + $('#dp')[0].offsetHeight > $('html')[0].offsetHeight) {\n            $('#dp').css('top', off.top - $('#dp')[0].offsetHeight);\n        }\n        if (off.left + $('#dp')[0].offsetWidth > $('html')[0].offsetWidth) {\n            $('#dp').css('left', $('html')[0].offsetWidth - $('#dp')[0].offsetWidth - 5);\n        }\n    }, 200);\n}\nfunction hidedp(force = false) {\n    setTimeout(() => {\n        if (isOnDp && !force) {\n            return;\n        }\n        $('#dp').removeClass('show');\n        setTimeout(() => {\n            $('#dp').removeClass('show-begin');\n        }, 200);\n    }, 100);\n}\n// 悬停提示\ndocument.querySelectorAll('*[win12_title]:not(.notip)').forEach(a => {\n    a.addEventListener('mouseenter', showdescp);\n    a.addEventListener('mouseleave', hidedescp);\n});\nfunction showdescp(e) {\n    $(e.target).attr('data-descp', 'waiting');\n    setTimeout(() => {\n        if ($(e.target).attr('data-descp') == 'hide') {\n            return;\n        }\n        $(e.target).attr('data-descp', 'show');\n        $('#descp').css('left', e.clientX + 15);\n        $('#descp').css('top', e.clientY + 20);\n        $('#descp').text($(e.target).attr('win12_title'));\n        $('#descp').addClass('show-begin');\n        setTimeout(() => {\n            if (e.clientY + $('#descp')[0].offsetHeight + 20 >= $('html')[0].offsetHeight) {\n                $('#descp').css('top', e.clientY - $('#descp')[0].offsetHeight - 10);\n            }\n            if (e.clientX + $('#descp')[0].offsetWidth + 15 >= $('html')[0].offsetWidth) {\n                $('#descp').css('left', e.clientX - $('#descp')[0].offsetWidth - 10);\n            }\n            $('#descp').addClass('show');\n        }, 100);\n    }, 500);\n}\nfunction hidedescp(e) {\n    $('#descp').removeClass('show');\n    $(e.target).attr('data-descp', 'hide');\n    setTimeout(() => {\n        $('#descp').removeClass('show-begin');\n    }, 100);\n}\n\n// 提示窗\n/* 参考 desktop.html 开头信息，\n格式、功能较简单，自行研究，不作赘述*/\n\nconst nts = {\n    'about': {\n        cnt: lang(`<p class=\"tit\">Windows 12 网页版</p>\n            <p>Windows 12 网页版是一个开放源项目,<br />\n            希望让用户在网络上预先体验 Windows 12,<br />\n            内容可能与 Windows 12 正式版本不一致。<br />\n            使用标准网络技术,例如 HTML, CSS 和 JS<br />\n            此项目绝不附属于微软,且不应与微软操作系统或产品混淆,<br />\n            这也不是 Windows365 cloud PC<br />\n            本项目中微软、Windows和其他示范产品是微软公司的商标<br />\n            本项目中 Android 是谷歌公司的商标。</p>`,'nts.about'),\n        btn: [\n            { type: 'main', text: lang(lang('关闭','close'),'close'), js: 'closenotice();' },\n            { type: 'detail', text: lang('更多','more'), js: 'closenotice();openapp(\\'about\\');if($(\\'.window.about\\').hasClass(\\'min\\'))minwin(\\'about\\');$(\\'.dock.about\\').removeClass(\\'show\\')' },\n        ]\n    },\n    'feedback': {\n        cnt: `<p class=\"tit\">${lang('反馈','nts.feedback.name')}</p>\n            <p>${lang('我们非常注重用户的体验与反馈','nts.feedback.txt')}</p>\n            <list class=\"new\">\n                <a class=\"a\" onclick=\"window.open('https://github.com/tjy-gitnub/win12/issues','_blank');\" win12_title=\"在浏览器新窗口打开链接\" onmouseenter=\"showdescp(event)\" onmouseleave=\"hidedescp(event)\">${lang('在github上提交issue (需要github账户)','nts.feedback.github')}</a>\n            </list>`,\n        btn: [\n            { type: 'main', text: lang(lang('关闭','close'),'close'), js: 'closenotice();' },\n        ]\n    },\n    'widgets': {\n        cnt: `\n            <p class=\"tit\">${lang('添加小组件','nts.addwg')}</p>\n            <list class=\"new\">\n                <a class=\"a\" onclick=\"closenotice(); widgets.widgets.add('calc');\">${lang('计算器','calc.name')}</a>\n                <a class=\"a\" onclick=\"closenotice(); widgets.widgets.add('weather');\">${lang('天气','nts.addwg.weather')}</a>\n                <a class=\"a\" onclick=\"closenotice(); widgets.widgets.add('monitor');\">${lang('系统性能监视器','nts.addwg.monitor')}</a>\n            </list>`,\n        btn: [\n            { type: 'cancel', text: lang('取消','cancel'), js: 'closenotice();' }\n        ]\n    },\n    'ZeroDivision': {//计算器报错窗口\n        // 甚至还报错我真的哭死，直接输入框显示error啥的不就完了。。\n        cnt: lang(`<p class=\"tit\">错误</p>\n            <p>除数不得等于0</p>`,'calc.error.zero'),\n        btn: [\n            { type: 'main', text: lang('确定','ok'), js: 'closenotice();' },\n        ]\n    },\n    'Can-not-open-file': {\n        cnt: '<p class=\"tit\">' + run_cmd + `</p>\n        <p>Windows 找不到文件 '` + run_cmd + '\\'。请确定文件名是否正确后，再试一次。</p> ',\n        btn: [\n            { type: 'main', text: lang('确定','ok'), js: 'closenotice();' },\n            { type: 'detail', text: '在 Micrsoft Edge 中搜索', js: 'closenotice();openapp(\\'edge\\');window.setTimeout(() => {apps.edge.newtab();apps.edge.goto(' + run_cmd + ');}, 300);' }\n        ]\n    },\n    'widgets.monitor': {\n        cnt: `\n        <p class=\"tit\">切换监视器类型</p>\n        <list class=\"new\">\n            <a class=\"a\" onclick=\"closenotice(); widgets.monitor.type = 'cpu';\">CPU利用率</a>\n            <a class=\"a\" onclick=\"closenotice(); widgets.monitor.type = 'memory';\">内存使用率</a>\n            <a class=\"a\" onclick=\"closenotice(); widgets.monitor.type = 'disk';\">磁盘活动时间</a>\n            <a class=\"a\" onclick=\"closenotice(); widgets.monitor.type = 'wifi-receive';\">网络吞吐量-接收</a>\n            <a class=\"a\" onclick=\"closenotice(); widgets.monitor.type = 'wifi-send';\">网络吞吐量-发送</a>\n            <a class=\"a\" onclick=\"closenotice(); widgets.monitor.type = 'gpu';\">GPU利用率</a>\n        </list>`,\n        btn: [\n            { type: 'cancel', text: lang('取消','cancel'), js: 'closenotice();' }\n        ]\n    },\n    'widgets.desktop': {\n        cnt: `\n            <p class=\"tit\">添加桌面小组件</p>\n            <list class=\"new\">\n                <a class=\"a\" onclick=\"closenotice(); widgets.widgets.addToDesktop('calc');\">计算器</a>\n                <a class=\"a\" onclick=\"closenotice(); widgets.widgets.addToDesktop('weather');\">天气</a>\n                <a class=\"a\" onclick=\"closenotice(); widgets.widgets.addToDesktop('monitor');\">系统性能监视器</a>\n            </list>`,\n        btn: [\n            { type: 'cancel', text: lang('取消','cancel'), js: 'closenotice();' }\n        ]\n    },\n    'widgets.news.source': {\n        cnt: `\n            <p class=\"tit\">切换新闻源</p>\n            <list class=\"new\">\n                新闻源未加载，请检查网络连接\n            </list>`,\n        btn: [{ type: 'cancel', text: lang('取消','cancel'), js: 'closenotice();' }],\n    },\n    'duplication file name': {\n        cnt: `\n            <p class=\"tit\">错误</p>\n            <p>文件名重复</p>`,\n        btn: [\n            { type: 'cancel', text: lang('取消','cancel'), js: 'closenotice();' }\n        ]\n    },\n    'about-copilot': {\n        cnt: `\n            <p class=\"tit\">关于 Windows 12 Copilot</p>\n             <p>你可以使用此 AI 助手帮助你更快地完成工作，此AI助手基于 Qwen3-Max 模型 (有人用Win12工作?)<br>\n            也请适当使用，不要谈论敏感、违规话题，<br>请有身为一个人类最基本的道德底线。<br>\n            在此特别感谢云智api(yunzhiapi.cn)为本项目提供赞助！</p>\n            <a class=\"a\" onclick=\"window.open('https://status.tangyuan0821.com/status/win12/','_blank');\" win12_title=\"在浏览器新窗口打开链接\">状态监测</a><br>\n            <a class=\"a\" onclick=\"window.open('https://www.yunzhiapi.cn/','_blank');\" win12_title=\"在浏览器新窗口打开链接\">云智API官网</a>\n        `,\n        btn: [\n            { type: 'main', text: lang('确定','ok'), js: 'closenotice();' },\n        ]\n    },\n    'shutdown': {\n        cnt: `\n        <p class=\"tit\">即将注销你的登录</p>\n        <p>Windows 将在 114514 分钟后关闭。</p>`,\n        btn: [\n            { type: 'main', text: lang('关闭','close'), js: 'closenotice();' }\n        ]\n    },\n    'setting.update': {\n        cnt: `\n            <p class=\"tit\">更新已就绪</p>\n            <p>请重启电脑以应用更新</p>\n        `,\n        btn: [\n            { type: 'main', text: '立即重启', js: 'location.href = `./reload.html`;' },\n            { type: 'detail', text: '稍后重启', js: 'closenotice();' }\n        ]\n    },\n    'recognition' : {\n        cnt: `\n        <p class=\"tit\">语音输入法使用须知</p>\n        <p>本语音输入法由@nb-group开发<br>\n        使用的语音识别api 仅可在使用 Chromium 内核的浏览器上使用，<br>\n        包括Microsoft Edge，Google Chrome等，<br>\n        api（理论上）完全离线.<br>\n        我们绝不会窃取您的输入信息，请放心使用。<br><br>\n        每次语音识别都会重新申请一下麦克风，这是浏览器的问题，<br>\n        可以在浏览器设置里选择始终允许。<br><br>\n        哦对了，关掉提示窗口之后再点一次语音球才能开始识别。\n        </p>\n         `,\n        btn: [\n            { type: 'main', text: lang('确定','ok'), js: 'closenotice();' },\n        ]\n    },\n    'setting.down': {\n        cnt: `\n        <p class=\"tit\">下载完毕</p>\n        <p>请立即重新启动以应用更改</p>\n        `,\n        btn: [\n            { type: 'main', text: '重新启动', js: 'closenotice(); setTimeout(() => {window.location=`reload.html`;},200);' }\n        ]\n    },\n    'whiteboard-saveas': {\n        cnt: `\n        <p class=\"tit\">${lang('另存为','whiteboard.saveas.title')}</p>\n        <p>${lang('请输入文件名:','whiteboard.saveas.prompt')}</p>\n        <input type=\"text\" id=\"whiteboard-filename\" placeholder=\"Whiteboard_${new Date().toISOString().slice(0,10)}\" style=\"width: 100%; padding: 8px; margin: 10px 0; border: 1px solid #ccc; border-radius: 4px;\">\n        `,\n        btn: [\n            { type: 'main', text: lang('保存','whiteboard.saveas.save'), js: 'apps.whiteboard.doSaveAs();' },\n            { type: 'detail', text: lang('取消','whiteboard.saveas.cancel'), js: 'closenotice();' }\n        ]\n    },\n    'no-files-permission': {\n        cnt: lang(`<p class=\"tit\">文件资源管理器</p>\n            <p>你没有权限打开该文件，请向文件的所有者或管理员申请权限<br /></p>`),\n        btn: [\n            { type: 'main', text: lang(lang('关闭','close'),'close'), js: 'closenotice();' }\n        ]\n    },\n    'rename-pc': {\n        cnt: `\n        <p class=\"tit\">重命名你的电脑</p>\n        <p>你可以使用字母、连字符和数字的组合</p>\n        <input type=\"text\" id=\"rename-name\" placeholder=\"Desktop-${Math.floor(Math.random() * 1000000)}\">\n        `,\n        btn: [\n            { type: 'main', text: lang('保存','pc.saveas.save'), js: '' },\n            { type: 'detail', text: lang('取消','pc.saveas.cancel'), js: 'closenotice();' }\n        ]\n    },\n    'no-files-permission': {\n        cnt: lang(`<p class=\"tit\">文件资源管理器</p>\n            <p>你没有权限打开该文件，请向文件的所有者或管理员申请权限<br /></p>`),\n        btn: [\n            { type: 'main', text: lang(lang('关闭','close'),'close'), js: 'closenotice();' }\n        ]\n    },\n    'rename-pc': {\n        cnt: `\n        <p class=\"tit\">重命名你的电脑</p>\n        <p>你可以使用字母、连字符和数字的组合</p>\n        <input type=\"text\" id=\"rename-name\" placeholder=\"Desktop-${Math.floor(Math.random() * 1000000)}\" style=\"width: 100%; padding: 8px; margin: 10px 0; border: 1px solid #ccc; border-radius: 4px;\">\n        `,\n        btn: [\n            { type: 'main', text: lang('保存','pc.saveas.save'), js: 'closenotice();' },\n            { type: 'detail', text: lang('取消','pc.saveas.cancel'), js: 'closenotice();' }\n        ]\n    },\n    'word-open-files-fail': {\n        cnt: lang(`<p class=\"tit\">打开失败</p>\n            <p>Word在试图打开文件时遇到错误<br /></p>`),\n        btn: [\n            { type: 'main', text: lang(lang('关闭','close'),'close'), js: 'closenotice();' }\n        ]\n    },\n    'fs-api-unsupported': {\n        cnt: lang(`<p class=\"tit\">不支持的功能</p>\n            <p>您的浏览器不支持文件系统访问 API。请使用 Chrome 或 Edge 浏览器。</p>`, 'nts.fs-api-unsupported'),\n        btn: [\n            { type: 'main', text: lang('确定','ok'), js: 'closenotice();' }\n        ]\n    },\n    'fs-mount-error': {\n        cnt: lang(`<p class=\"tit\">挂载失败</p>\n            <p>无法挂载本地文件夹，权限可能被拒绝。</p>`, 'nts.fs-mount-error'),\n        btn: [\n            { type: 'main', text: lang('确定','ok'), js: 'closenotice();' }\n        ]\n    },\n    'unsupported-file-type': {\n        cnt: lang(`<p class=\"tit\">无法打开文件</p>\n            <p>没有找到可以打开此类型文件的应用程序。</p>`, 'nts.unsupported-file-type'),\n        btn: [\n            { type: 'main', text: lang('确定','ok'), js: 'closenotice();' }\n        ]\n    },\n    'file-read-error': {\n        cnt: lang(`<p class=\"tit\">读取失败</p>\n            <p>无法读取文件内容，权限可能已过期。</p>`, 'nts.file-read-error'),\n        btn: [\n            { type: 'main', text: lang('确定','ok'), js: 'closenotice();' }\n        ]\n    },\n    'file-write-error': {\n        cnt: lang(`<p class=\"tit\">保存失败</p>\n            <p>无法写入文件，权限可能已过期。</p>`, 'nts.file-write-error'),\n        btn: [\n            { type: 'main', text: lang('确定','ok'), js: 'closenotice();' }\n        ]\n    },\n};\nfunction shownotice(name) {\n    $('#notice>.cnt').html(nts[name].cnt);\n    let tmp = '';\n    nts[name].btn.forEach(btn => {\n        tmp += `<a class=\"a btn ${btn.type}\" onclick=\"${btn.js}\">${btn.text}</a>`;\n    });\n    $('#notice>.btns').html(tmp);\n    $('#notice-back').addClass('show');\n    setTimeout(() => {\n        $('#notice').addClass('show');\n    }, 200);\n}\nfunction closenotice() {\n    $('#notice').removeClass('show');\n    setTimeout(() => {\n        $('#notice-back').removeClass('show');\n    }, 200);\n}\n\nfunction closeVideo() {\n  var video = apps.camera.video\n  if (video) {\n    try {\n      var stream = video.srcObject;\n      var tracks = stream.getTracks();\n      tracks.forEach(function (track) {\n        track.stop();\n      });\n      video.srcObject = null;\n    } catch (error) {}\n  }\n}\n\nvar shutdown_task = []; //关机任务，储存在这个数组里\n// 为什么要数组？\n\n// 运行的指令\nfunction runcmd(cmd, inTerminal=false) {\n    if (cmd.slice(0, 3) == 'cmd') {\n        run_cmd = cmd;\n        if (!inTerminal) {\n            openapp('terminal');\n        }\n        return true;\n    }\n    else if (cmd === 'cls') {\n        if (inTerminal) {\n            $('#win-terminal>.text-cmd').html('');\n        }\n        return true;\n    }\n    else if (cmd === 'help') {\n        if (inTerminal) {\n            $('#win-terminal>.text-cmd').append(`\n${lang('有关某个命令的详细信息，请键入 HELP 命令名','terminal.help.title')}\nDIR             ${lang('显示目录中的文件和子目录列表','terminal.help.dir')}\nLS              ${lang('显示目录中的文件和子目录列表 (DIR的别名)','terminal.help.ls')}\nDEL             ${lang('删除一个或多个文件','terminal.help.del')}\nCD              ${lang('显示当前目录的名称或将其更改','terminal.help.cd')}\nCLS             ${lang('清除屏幕','terminal.help.cls')}\nHELP            ${lang('提供 Windows 命令的帮助信息','terminal.help.help')}\nSYSTEMINFO      ${lang('显示系统信息','terminal.help.systeminfo')}\nSHUTDOWN        ${lang('关闭计算机','terminal.help.shutdown')}\nCMD             ${lang('打开新的命令提示符窗口','terminal.help.cmd')}\nEXIT            ${lang('退出命令提示符程序','terminal.help.exit')}\n\n${lang('彩蛋命令:','terminal.help.easter')}\nHELLO           ${lang('打个招呼','terminal.help.hello')}\nMATRIX          ${lang('黑客帝国特效','terminal.help.matrix')}\nSNOW            ${lang('下雪特效','terminal.help.snow')}\nDANCE           ${lang('让窗口跳舞','terminal.help.dance')}\nSTARWARS        ${lang('原力觉醒','terminal.help.starwars')}\n`);\n        }\n        return true;\n    }\n    else if (cmd === 'dir' || cmd === 'ls') {\n        if (inTerminal) {\n            $('#win-terminal>.text-cmd').append(`\n 驱动器 C 中的卷没有标签。\n 卷的序列号是 3E47-2B9A\n\n C:\\\\Windows\\\\System32 的目录\n\n${new Date().toLocaleDateString()}  ${new Date().toLocaleTimeString()}    <DIR>          .\n${new Date().toLocaleDateString()}  ${new Date().toLocaleTimeString()}    <DIR>          ..\n2023/10/01  10:30:00             1,024 calc.exe\n2023/10/01  10:30:00               512 cmd.exe\n2023/10/01  10:30:00             2,048 notepad.exe\n2023/10/01  10:30:00             4,096 taskmgr.exe\n2023/10/01  10:30:00               256 winver.exe\n               5 个文件          7,936 字节\n               2 个目录  21,474,836,480 可用字节\n`);\n        }\n        return true;\n    }\n    else if (cmd.startsWith('del ')) {\n        if (inTerminal) {\n            const fileName = cmd.substring(4).trim();\n            if (fileName.toLowerCase().includes('system32') || fileName.toLowerCase().includes('windows') || fileName.toLowerCase().includes('program files')) {\n                $('#win-terminal>.text-cmd').append(`错误: 拒绝访问。无法删除系统关键文件或目录。\\n`);\n            } else {\n                $('#win-terminal>.text-cmd').append(`找不到文件 \"${fileName}\"。\\n`);\n            }\n        }\n        return true;\n    }\n    else if (cmd.startsWith('cd ')) {\n        if (inTerminal) {\n            const path = cmd.substring(3).trim();\n            if (path === '..') {\n                $('#win-terminal>.text-cmd').append(`C:\\\\Windows\\n`);\n            } else if (path === '\\\\' || path === '/') {\n                $('#win-terminal>.text-cmd').append(`C:\\\\\\n`);\n            } else {\n                $('#win-terminal>.text-cmd').append(`C:\\\\Windows\\\\System32\\\\${path}\\n`);\n            }\n        }\n        return true;\n    }\n    else if (cmd.toLowerCase() === 'hello') {\n        if (inTerminal) {\n            const greetings = [\n                '你好呀! 今天也是元气满满的一天呢! (◍•ᴗ•◍)',\n                'Hello! 欢迎来到 Windows 12! ╰(*°▽°*)╯',\n                '嗨! 很高兴见到你! (｡♥‿♥｡)',\n                '你好! 我是 Windows 12 终端, 有什么可以帮你的吗? (❁´◡`❁)'\n            ];\n            $('#win-terminal>.text-cmd').append(greetings[Math.floor(Math.random() * greetings.length)] + '\\n');\n        }\n        return true;\n    }\n    else if (cmd.toLowerCase() === 'matrix') {\n        if (inTerminal) {\n            const chars = 'ｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜﾝ1234567890'; // 哈？(from stsc)\n            let matrix = '';\n            \n            // 创建一个专门的容器来放置 matrix 效果\n            const matrixContainer = $('<div class=\"matrix-container\" style=\"font-family: monospace; line-height: 1.2;\"></div>');\n            $('#win-terminal>.text-cmd').append(matrixContainer);\n            \n            for (let i = 0; i < 15; i++) {\n                let line = '';\n                for (let j = 0; j < 50; j++) {\n                    const rand = Math.random();\n                    if (rand < 0.3) {\n                        line += `<span style=\"color: #0f0; text-shadow: 0 0 8px #0f0;\">${chars[Math.floor(Math.random() * chars.length)]}</span>`;\n                    } else if (rand < 0.4) {\n                        line += `<span style=\"color: #fff; text-shadow: 0 0 8px #fff;\">${chars[Math.floor(Math.random() * chars.length)]}</span>`;\n                    } else {\n                        line += `<span style=\"color: #050;\">${chars[Math.floor(Math.random() * chars.length)]}</span>`;\n                    }\n                }\n                matrix += line + '\\n';\n            }\n            matrixContainer.html(matrix);\n            \n            // 添加动画效果\n            const interval = setInterval(() => {\n                const newLine = Array.from({length: 50}, () => {\n                    const rand = Math.random();\n                    if (rand < 0.3) {\n                        return `<span style=\"color: #0f0; text-shadow: 0 0 8px #0f0;\">${chars[Math.floor(Math.random() * chars.length)]}</span>`;\n                    } else if (rand < 0.4) {\n                        return `<span style=\"color: #fff; text-shadow: 0 0 8px #fff;\">${chars[Math.floor(Math.random() * chars.length)]}</span>`;\n                    } else {\n                        return `<span style=\"color: #050;\">${chars[Math.floor(Math.random() * chars.length)]}</span>`;\n                    }\n                }).join('');\n                \n                const matrixContent = matrixContainer.html().split('\\n');\n                matrixContent.shift();\n                matrixContent.push(newLine);\n                matrixContainer.html(matrixContent.join('\\n'));\n            }, 100);\n\n            // 10秒后停止动画并移除容器\n            setTimeout(() => {\n                clearInterval(interval);\n                setTimeout(() => {\n                    matrixContainer.fadeOut(500, function() {\n                        $(this).remove();\n                    });\n                }, 500);\n            }, 10000);\n        }\n        return true;\n    }\n    else if (cmd.toLowerCase() === 'snow') {\n        if (inTerminal) {\n            $('#win-terminal>.text-cmd').append('让整个屏幕下雪吧! ❄️\\n');\n            if (!$('#snow-container').length) {\n                $('body').append(`\n                    <div id=\"snow-container\" style=\"position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; pointer-events: none; z-index: 9999;\">\n                        <div id=\"snow-pile\" style=\"position: absolute; bottom: 0; left: 0; width: 100%; display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: center; perspective: 1000px; transform-style: preserve-3d;\"></div>\n                    </div>\n                `);\n            }\n            \n            const snowflakes = ['❄', '❅', '❆', '✻', '✼', '❉'];\n            const pileFlakes = ['❄', '❅', '❆'];\n            const colors = ['#fff', '#eef', '#ddf'];\n            let pileCount = 0;\n            let lastPilePosition = 50; // 用于记录上一个堆积位置\n            \n            function createSnowflake() {\n                const flake = snowflakes[Math.floor(Math.random() * snowflakes.length)];\n                const color = colors[Math.floor(Math.random() * colors.length)];\n                const size = Math.random() * 1.2 + 0.6;\n                const left = Math.random() * 100;\n                const fallDuration = 3 + Math.random() * 2;\n                const $snowflake = $(`<span class=\"snowflake\" style=\"position: absolute; left: ${left}%; top: -10%; font-size: ${size}em; color: ${color}; text-shadow: 0 0 5px ${color}; transition: all ${fallDuration}s linear; opacity: 0.8; transform: rotate(0deg) translateZ(0);\">${flake}</span>`);\n                \n                $('#snow-container').append($snowflake);\n                \n                setTimeout(() => {\n                    const rotation = Math.random() * 360;\n                    const finalLeft = left + (Math.random() - 0.5) * 20;\n                    $snowflake.css({\n                        transform: `rotate(${rotation}deg) translateZ(0)`,\n                        top: '90%',\n                        left: `${finalLeft}%`\n                    });\n                }, 50);\n\n                setTimeout(() => {\n                    $snowflake.css({\n                        transition: 'all 0.5s ease-out',\n                        opacity: 0\n                    });\n                    \n                    if (pileCount < 200) {\n                        const pileFlake = pileFlakes[Math.floor(Math.random() * pileFlakes.length)];\n                        const pileSize = Math.random() * 0.4 + 0.3; // 减小堆积雪花的大小\n                        \n                        // 计算新的堆积位置，使其更自然\n                        const deviation = (Math.random() - 0.5) * 30;\n                        lastPilePosition = Math.max(10, Math.min(90, lastPilePosition + deviation));\n                        const pileLeft = lastPilePosition;\n                        \n                        // 计算堆积高度，使其形成自然的山形\n                        const baseHeight = Math.sin((pileLeft - 50) * Math.PI / 180) * 20;\n                        const pileHeight = Math.max(0, 20 - Math.abs(pileLeft - 50) / 2.5 + baseHeight);\n                        \n                        const $pile = $(`<span style=\"position: absolute; left: ${pileLeft}%; bottom: ${pileHeight}px; font-size: ${pileSize}em; opacity: 0; transform: scale(0) translateZ(${Math.random() * 50}px); transition: all 0.3s ease-out;\">${pileFlake}</span>`);\n                        $('#snow-pile').append($pile);\n                        \n                        setTimeout(() => {\n                            $pile.css({\n                                transform: `scale(1) translateZ(${Math.random() * 50}px) rotate(${Math.random() * 30 - 15}deg)`,\n                                opacity: 0.85\n                            });\n                        }, 50);\n                        \n                        pileCount++;\n                    }\n                    \n                    setTimeout(() => $snowflake.remove(), 500);\n                }, fallDuration * 1000);\n            }\n\n            // 持续创建新雪花\n            const snowInterval = setInterval(() => {\n                if ($('#snow-container .snowflake').length < 100) {\n                    createSnowflake();\n                }\n            }, 200);\n\n            // 30秒后停止动画并缓慢消失\n            setTimeout(() => {\n                clearInterval(snowInterval);\n                // 让所有堆积的雪花缓慢消失\n                $('#snow-pile span').each(function(i) {\n                    const $pile = $(this);\n                    setTimeout(() => {\n                        $pile.css({\n                            transition: 'all 0.5s ease-in',\n                            opacity: 0,\n                            transform: 'scale(0) translateY(10px)'\n                        });\n                    }, Math.random() * 2000);\n                });\n                // 让飘落的雪花消失\n                $('#snow-container .snowflake').each(function(i) {\n                    const $flake = $(this);\n                    setTimeout(() => {\n                        $flake.css({\n                            transition: 'all 1s ease-in',\n                            opacity: 0\n                        });\n                    }, Math.random() * 2000);\n                });\n                setTimeout(() => {\n                    $('#snow-container').fadeOut(1000, function() {\n                        $(this).remove();\n                    });\n                }, 2500);\n            }, 30000);\n        }\n        return true;\n    }\n    else if (cmd.toLowerCase() === 'dance') {\n        if (inTerminal) {\n            $('#win-terminal>.text-cmd').append('窗口开始跳舞啦! ♪(^∇^*)\\n');\n            const windows = $('.window:not(.min)');\n            const danceSteps = [\n                { transform: 'rotate(5deg) translateY(-10px)' },\n                { transform: 'rotate(-5deg) translateY(0px)' },\n                { transform: 'rotate(5deg) translateX(10px)' },\n                { transform: 'rotate(-5deg) translateX(-10px)' },\n                { transform: 'rotate(0deg) translate(0, 0)' }\n            ];\n            \n            windows.each(function() {\n                const win = $(this);\n                let danceCount = 0;\n                const danceInterval = setInterval(() => {\n                    danceCount++;\n                    win.css({\n                        transition: 'transform 0.3s ease-in-out',\n                        transform: danceSteps[danceCount % danceSteps.length].transform\n                    });\n                    \n                    // 跳舞15次后停止\n                    if (danceCount >= 15) {\n                        clearInterval(danceInterval);\n                        win.css({\n                            transition: 'transform 0.5s ease-out',\n                            transform: 'none'\n                        });\n                    }\n                }, 300);\n            });\n        }\n        return true;\n    }\n    else if (cmd === 'systeminfo') {\n        if (inTerminal) {\n            const d = new Date();\n            $('#win-terminal>.text-cmd').append(`\n主机名:                 WIN12-WEB\nOS 名称:               Microsoft Windows 12 网页版\nOS 版本:               12.0.39035.7324\nOS 制造商:             Microsoft Corporation\nOS 配置:               主要工作站\nOS 构建类型:           Multiprocessor Free\n注册的所有人:          Web User\n注册的组织:            Web Organization\n产品 ID:               12345-67890-09876-54321\n初始安装日期:          ${d.toLocaleDateString()}\n系统启动时间:          ${d.toLocaleString()}\n系统制造商:            Web Browser\n系统型号:              Virtual Machine\n系统类型:              x64-based PC\n处理器:                AMD64 Family Web Browser\nBIOS 版本:             Web Browser Virtual BIOS\nWindows 目录:          C:\\\\Windows\n系统目录:              C:\\\\Windows\\\\System32\n启动设备:              \\\\Device\\\\HarddiskVolume1\n系统区域设置:          zh-cn;中文(中国)\n输入法区域设置:        zh-cn;中文(中国)\n时区:                  (UTC+08:00)北京，重庆，香港特别行政区，乌鲁木齐\n物理内存总量:          8,192 MB\n可用的物理内存:        4,096 MB\n虚拟内存: 最大值:      16,384 MB\n虚拟内存: 可用:        12,288 MB\n虚拟内存: 使用中:      4,096 MB\n页面文件位置:          C:\\\\pagefile.sys\n域:                    WORKGROUP\n登录服务器:            \\\\\\\\WIN12-WEB\n修补程序:              0 个修补程序已安装\n网卡:                  1 个 NIC 已安装\n                      [01]: Ethernet Browser Adapter\n`);\n        }\n        return true;\n    }\n    else if (cmd in apps) {\n        openapp(cmd);\n        return true;\n    }\n    else if (cmd.replace('.exe', '') in apps) {\n        openapp(cmd.replace('.exe', ''));\n        return true;\n    }\n    else if (cmd.includes('shutdown')) {//关机指令 by fzlzjerry\n        // 保存当前命令以供后续使用\n        run_cmd = cmd;\n        // 将命令按空格分割成数组以便解析参数\n        var cmds = cmd.split(' ');\n        // 检查命令是否为shutdown或shutdown.exe\n        if ((cmds[0] == 'shutdown') || (cmds[0] == 'shutdown.exe')) {\n            // 如果没有参数，显示帮助信息\n            if (cmds.length == 1) {\n                // 如果不是在终端中执行，则打开终端\n                if(!inTerminal){\n                    openapp('terminal');\n                    $('#win-terminal').html('<pre class=\"text-cmd\"></pre>');\n                }\n                // 显示帮助信息\n                $('#win-terminal>.text-cmd').append(`\nshutdown [-s] [-r] [-f] [-a] [-t time]\n-s:关机\n-r:重启\n-f:注销\n-a:取消之前的操作\n-t time:指定在 time秒 后操作\n\n其余不多做介绍了` + (inTerminal?'' : `\n请按任意键继续.&nbsp;.&nbsp;.<input type=\"text\" onkeydown=\"hidewin('terminal')\"></input>`));\n                if (!inTerminal) {\n                    $('#win-terminal>pre>input').focus();\n                }\n                return true;\n            }\n            \n            // 初始化参数变量\n            let hasTime = false;      // 是否指定了时间\n            let timeValue = 0;        // 延迟时间值（秒）\n            let operation = '';       // 操作类型（关机/重启/注销）\n            let forceMode = false;    // 是否为强制模式（不显示通知）\n\n            // 检查并解析时间参数 (-t 或 /t)\n            if (cmds.includes('-t') || cmds.includes('/t')) {\n                const timeFlag = cmds.includes('-t') ? '-t' : '/t';\n                const timeIndex = cmds.indexOf(timeFlag);\n                // 检查时间参数是否有效\n                if (timeIndex < cmds.length - 1 && !isNaN(cmds[timeIndex + 1])) {\n                    hasTime = true;\n                    timeValue = parseInt(cmds[timeIndex + 1]);\n                } else {\n                    // 时间参数无效时显示错误信息\n                    $('#win-terminal>.text-cmd').append(`错误: 无效的时间参数\\n`);\n                    return true;\n                }\n            }\n\n            // 检查是否为强制模式 (-f 或 /f)\n            if (cmds.includes('-f') || cmds.includes('/f')) {\n                forceMode = true;\n            }\n\n            // 检查是否为取消操作 (-a 或 /a)\n            if (cmds.includes('-a') || cmds.includes('/a')) {\n                // 如果有正在进行的关机任务\n                if (shutdown_task.length > 0) {\n                    // 清除所有关机任务\n                    for (let task of shutdown_task) {\n                        if (task != null) {\n                            try {\n                                clearTimeout(task);\n                            } catch (err) { console.log(err); }\n                        }\n                    }\n                    shutdown_task = [];\n                    // 显示取消通知\n                    nts['shutdown'] = {\n                        cnt: `\n                        <p class=\"tit\">注销已取消</p>\n                        <p>计划的关闭已取消。</p>`,\n                        btn: [\n                            { type: 'main', text: lang('关闭','close'), js: 'closenotice();' },\n                        ]\n                    };\n                    shownotice('shutdown');\n                } else {\n                    // 如果没有正在进行的关机任务，显示错误信息\n                    $('#win-terminal>.text-cmd').append(`错误: 没有正在进行的关机操作\\n`);\n                }\n                return true;\n            }\n\n            // 确定操作类型\n            if (cmds.includes('-s') || cmds.includes('/s')) {\n                operation = 'shutdown';    // 关机\n            }\n            else if (cmds.includes('-r') || cmds.includes('/r')) {\n                operation = 'restart';     // 重启\n            }\n            else if (cmds.includes('-f') || cmds.includes('/f')) {\n                operation = 'logoff';      // 注销\n            }\n            else {\n                // 如果没有指定有效的操作类型，显示错误信息\n                $('#win-terminal>.text-cmd').append(`错误: 无效的操作参数\\n`);\n                return true;\n            }\n\n            // 计算延迟时间和显示文本\n            const delay = hasTime ? timeValue * 1000 : 0;  // 将秒转换为毫秒\n            const timeString = hasTime ? calcTimeString(timeValue) : '立即';\n            \n            // 准备通知内容\n            nts['shutdown'] = {\n                cnt: `\n                <p class=\"tit\">即将${operation === 'restart' ? '重启' : operation === 'logoff' ? '注销' : '关机'}</p>\n                <p>Windows 将在 ${timeString} 后${operation === 'restart' ? '重启' : operation === 'logoff' ? '注销' : '关机'}。</p>`,\n                btn: [\n                    { type: 'main', text: lang('关闭','close'), js: 'closenotice();' },\n                ]\n            };\n\n            // 创建定时任务\n            const task = setTimeout(() => {\n                // 根据操作类型跳转到相应页面\n                if (operation === 'restart') {\n                    window.location.href = './reload.html';\n                } else if (operation === 'logoff') {\n                    window.location.href = './login.html';\n                } else {\n                    window.location.href = './shutdown.html';\n                }\n            }, delay);\n\n            // 将任务添加到任务列表\n            shutdown_task.push(task);\n            \n            // 如果不是强制模式，显示通知\n            if (!forceMode) {\n                shownotice('shutdown');\n            }\n            return true;\n        }\n    }\n    else if (cmd.toLowerCase() === 'starwars') {\n        if (inTerminal) {\n            $('#win-terminal>.text-cmd').append('原力与你同在... ⚔️\\n');\n            \n            // 创建星球大战容器\n            const starWarsContainer = $('<div class=\"starwars-container\" style=\"font-family: monospace; perspective: 400px; color: #ffd700; position: relative; height: 400px; overflow: hidden; background: #000;\"></div>');\n            $('#win-terminal>.text-cmd').append(starWarsContainer);\n            \n            // 添加星球大战文本\n            const text = `\n            Episode XII\n            WIN12 STRIKES BACK\n\n            在遥远的未来，一个充满\n            科技的银河系中...\n\n            Windows操作系统已经\n            进化到了第12代。\n\n            然而，这个系统不仅仅\n            是一个操作系统，它是\n            一个充满原力的存在。\n\n            此刻，一股神秘的力量\n            正在你的电脑中觉醒...\n\n            你，就是那个被选中的人，\n            将带领这个系统走向新的\n            纪元...\n\n            愿原力与你同在！\n            `;\n            \n            const crawl = $(`<div class=\"crawl\" style=\"position: relative; top: 400px; transform-origin: 50% 100%; transform: rotateX(60deg); text-align: center; font-size: 24px; line-height: 1.5; white-space: pre-line; text-shadow: 0 0 10px #ffd700;\"></div>`);\n            crawl.html(text);\n            starWarsContainer.append(crawl);\n            \n            // 添加动态背景星星\n            for (let i = 0; i < 200; i++) {\n                const size = Math.random() * 2 + 1;\n                const speed = Math.random() * 3 + 1;\n                const star = $(`<div class=\"star\" style=\"position: absolute; width: ${size}px; height: ${size}px; background: #fff; left: ${Math.random() * 100}%; top: ${Math.random() * 100}%; animation: twinkle ${speed}s infinite alternate;\"></div>`);\n                starWarsContainer.append(star);\n            }\n\n            // 添加CSS动画\n            const style = $(`<style>\n                @keyframes twinkle {\n                    0% { opacity: 0.2; }\n                    100% { opacity: 1; }\n                }\n                .star {\n                    border-radius: 50%;\n                    box-shadow: 0 0 3px #fff;\n                }\n                .crawl {\n                    animation: crawl 30s linear;\n                }\n                @keyframes crawl {\n                    0% { top: 400px; opacity: 1; }\n                    90% { opacity: 1; }\n                    100% { top: -1000px; opacity: 0; }\n                }\n            </style>`);\n            starWarsContainer.append(style);\n            \n            // 30秒后清理\n            setTimeout(() => {\n                starWarsContainer.fadeOut(2000, function() {\n                    $(this).remove();\n                });\n            }, 30000);\n        }\n        return true;\n    }\n    return false;\n}\n\n\n// 语音球\n\nvar voiceBall = document.getElementById(\"voiceBall\");\nvar nbFlag = true;\nvar pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;\nvar isDragging = false;\n\nvoiceBall.addEventListener(\"mousedown\", dragMouseDown);\nvoiceBall.addEventListener(\"mouseup\", stopDrag);\n\nfunction dragMouseDown(e) {\n    e.preventDefault();\n    pos3 = e.clientX;\n    pos4 = e.clientY;\n    document.addEventListener(\"mousemove\", elementDrag);\n    isDragging = false;\n}\n\nfunction elementDrag(e) {\n    e.preventDefault();\n    pos1 = pos3 - e.clientX;\n    pos2 = pos4 - e.clientY;\n    pos3 = e.clientX;\n    pos4 = e.clientY;\n    voiceBall.style.top = (voiceBall.offsetTop - pos2) + \"px\";\n    voiceBall.style.left = (voiceBall.offsetLeft - pos1) + \"px\";\n    isDragging = true;\n}\n\nfunction stopDrag() {\n    document.removeEventListener(\"mousemove\", elementDrag);\n    if (!isDragging) {\n        startSpeechRecognition();\n    }\n}\n\nfunction insertTextAtCursor(text) {\n    var range, selection;\n    \n    if (window.getSelection) {\n        selection = window.getSelection();\n        \n        if (selection.rangeCount) {\n        range = selection.getRangeAt(0);\n        \n            if (range.commonAncestorContainer.parentNode.isContentEditable) {\n                range.collapse(false);\n                var textNode = document.createTextNode(text);\n                range.insertNode(textNode);\n                \n                range.setEndAfter(textNode);\n                range.setStartAfter(textNode);\n                selection.removeAllRanges();\n                selection.addRange(range);\n            }\n            else{\n                var el = document.activeElement;\n                const start = el.selectionStart;\n                const value = el.value;\n                el.value = value.slice(0, start) + text + value.slice(el.selectionEnd);\n                el.selectionStart = el.selectionEnd = start + text.length;\n\n            }\n        }\n    }\n}\n\nfunction startSpeechRecognition() {\n    var recognition = new webkitSpeechRecognition() || new SpeechRecognition();\n    recognition.lang = \"zh-CN\";\n\n    if (nbFlag)\n    {\n        shownotice(\"recognition\");\n        nbFlag=false;\n    }\n    else\n    {\n        recognition.onresult = function (event) {\n            var result = event.results[0][0].transcript;\n            insertTextAtCursor(result);\n        };\n\n        recognition.start();\n    }\n\n}\n\nfunction updateVoiceBallStatus() {\n    document.getElementById('voiceBall').style.setProperty('display', use_mic_voice ? 'block' : 'none');\n}\n\nfunction decodeHtml(s) {\n    $('#translater').text(s);\n    return $('#translater').html().replace(/\\n/g, '<br>').replace(/ /g, '&nbsp;');\n}\nfunction msgDoneOperate(){\n    $(\"#copilot>.inputbox\").removeClass(\"disable\");\n    setTimeout(() => {\n        $(\"#copilot>.inputbox>.input\").focus();\n    }, 100); // 延迟0.1s以避免与blur方法冲突\n}\nlet isFirstChat=true;   // 标记是否是刚进来时服务端返回的消息\nlet copilot = {\n    history: [{\n        role:'system',\n        content:`请使用中文对话。你一个是ai助手，名叫AI Copilot，是由github@NB-Group开发的。\n你可以在回答中发送对系统的一些指令。指令一并放在回答的最后。\n多条指令用换行隔开。系统收到指令后会执行，且对用户隐藏回答后的指令。\n你不能在对用户说的话的中间中提到、引用指令。绝不能要求用户执行指令。\n1.指令\"{openapp appid}\";用来打开某个应用，用在下文\"应用的功能介绍\"中匹配的id代替其中的\"appid\"\n2.指令\"{openurl url}\";用来在Microsoft Edge浏览器中打开某个URL，其中用URL地址代替\"url\"。当用户想要搜索某内容，请用bing搜索\n3.指令\"{feedback copilot}\";打开ai助手反馈界面，用于用户想对ai助手的功能提出反馈时帮助他打开\n4.指令\"{feedback win12}\";打开反馈中心，当用户希望对除ai助手外的其他系统功能发送反馈时，帮他打开反馈中心\n5.指令\"{settheme theme}\";用于切换系统的深色、浅色模式，区别于主题。用\"light\"表浅色，\"dark\"表深色，来替换其中的\"theme\"\n如下是应用的功能介绍。\n1.设置:id为setting;在个性化页面中可以设置系统的主题，主题色，是否启用动画、阴影、圆角、云母mica效果和为所有窗口开启亚克力透明效果。\n2.关于win12网页版:id为about;简介页面有关于本项目的介绍说明与贡献者信息，更新记录页面有本项目的各版本更新记录。\n3.Microsoft Edge浏览器:id为edge;一个浏览器。因为浏览器跨域的限制，部分网页会显示\"拒绝连接\"而无法访问。\n4.计算器:id为calc;\n5.文件资源管理器:id为explorer;\n6.任务管理器:id为taskmgr;\n7.cmd终端:id为terminal;\n8.记事本:id为notepad;\n9.python:id为python;\n仅有以下关于此项目的信息。\n1.Windows 12 网页版是一个开源项目，由谭景元原创, 使用Html,css,js，在网络上模拟、创新操作系统\n2.项目的Github地址是https://github.com/tjy-gitnub/win12\n3.此项目使用EPL v2.0开源许可\n当用户询问更多项目信息时，帮助他打开\"关于win12网页版\"应用。\n比如这时用户说\"请打开计算器\"，你会回答什么？`\n        },{\n            role:'assistant',\n            content:'好的呢，现在我就帮您打开计算器。\\n{openapp calc}'\n        },{\n            role:'system',\n            content:'很好。现在开始与用户对话。'\n        },{\n            role:'assistant',\n            content:'欢迎使用 Windows 12 Copilot AI助手，有什么可以帮您？'\n        }],\n    init: () => {\n        $('#copilot>.chat').html('');\n        $('#copilot>.chat').append(`<div class=\"line system\"><p class=\"text\">本 AI 助手基于Qwen3-max模型，目前支持以下操作：<br>\n        1.打开除webapp外大多应用<br>\n        2.在浏览器中打开链接、搜索<br>\n        3.发送对系统、AI助手的反馈<br>\n        4.切换颜色主题<br>\n        若您在使用中出现异常可先至状态监测页面（https://status.tangyuan0821.com/status/win12/）查看状态，若确有异常请及时向我们反馈。</p></div>`);\n        setTimeout(() => {\n            $('#copilot>.chat').append(`<div class=\"line ai\"><p class=\"text\">欢迎使用 Windows 12，有什么可以帮您？</p></div>`);\n            $('#copilot>.inputbox').removeClass('disable');\n            $('#copilot>.chat').scrollTop($('#copilot>.chat')[0].scrollHeight);\n        }, 200);\n    },\n    send: (t, showusr = true, role='user') => {\n        // 输入验证\n        if (t.length == 0) {\n            $('#copilot>.chat').append('<div class=\"line system\"><p class=\"text\">请发一些有意义的东西</p></div>');\n            $('#copilot>.chat').scrollTop($('#copilot>.chat')[0].scrollHeight);\n            msgDoneOperate();\n            return;\n        }\n\n        $('#copilot>.inputbox').addClass('disable');\n\n        // 显示用户消息\n        if (showusr) {\n            $('#copilot>.chat').append(`<div class=\"line user\"><p class=\"text\">${t}</p></div>`);\n        }\n        copilot.history.push({ role: role, content: t });\n        $('#copilot>.chat').scrollTop($('#copilot>.chat')[0].scrollHeight);\n           // 存储uid\n           const uid = localStorage.getItem('copilot_uid') || \n            (() => {\n              const newUid = Math.floor(100000 + Math.random() * 900000); // 生成 100000-999999 的随机六位数\n              localStorage.setItem('copilot_uid', newUid.toString());\n              return newUid;\n           })();\n        // 构建API请求URL\n        const encodedQuestion = encodeURIComponent(t);\n        const apiUrl = `https://yunzhiapi.cn/vip/win12/qwen3-max/index.php?question=${encodedQuestion}&system=${encodeURIComponent(copilot.history[0].content)}&uid=${uid}`;\n\n        // API请求\n        $.ajax({\n            url: apiUrl,\n            method: 'GET',\n            success: function(responseText) {\n                msgDoneOperate();\n\n                // 处理特殊命令\n                let rt = responseText;\n                let r = [];\n                if (/{.+}/.test(rt)) {\n                    r = rt.match(/{.+?}/g) || [];\n                }\n\n                if (r.length) {\n                    for (const i of r) {\n                        if (/{openapp .+?}/.test(i)) {\n                            let t = i.match(/(?<={openapp ).+(?=})/)[0];\n                            if($('.window.'+t).length){\n                                openapp(t);\n                                rt = rt.replace(i, `<div class=\"action\"><p class=\"tit\">打开应用</p><p class=\"detail\">${$(`.window.${t}>.titbar>p`).text()}</p></div>`);\n                            }else{\n                                rt = rt.replace(i, `<div class=\"action\"><p class=\"tit\">打开应用</p><p class=\"detail\">${t} <span style=\"color:red\">(AI 理解力较差，见谅)</span></p></div>`);\n                            }\n                        } else if (/{openurl .+?}/.test(i)) {\n                            const t = i.match(/(?<={openurl ).+(?=})/)[0];\n                            openapp('edge');\n                            apps.edge.newtab();\n                            apps.edge.goto(t);\n                            rt = rt.replace(i, `<div class=\"action\"><p class=\"tit\">打开URL</p><p class=\"detail\">${decodeHtml(t)}</p></div>`);\n                        } else if (/{feedback win12}/.test(i)) {\n                            shownotice('feedback');\n                            rt = rt.replace(i, '<div class=\"action\"><p class=\"tit\">反馈</p><p class=\"detail\">关于 Windows 12 网页版</p></div>');\n                        } else if (/{feedback copilot}/.test(i)) {\n                            shownotice('feedback-copilot');\n                            rt = rt.replace(i, '<div class=\"action\"><p class=\"tit\">反馈</p><p class=\"detail\">关于 Windows 12 Copilot</p></div>');\n                        } else if (/{settheme .+?}/.test(i)) {\n                            const t = i.match(/(?<={settheme ).+(?=})/)[0];\n                            if ((t == 'light' && $(':root').hasClass('dark')) || (t == 'dark' && !$(':root').hasClass('dark'))) {\n                                toggletheme();\n                            }\n                            if(t!='light' && t!='dark')\n                                rt = rt.replace(i, `<div class=\"action\"><p class=\"tit\">切换外观模式</p><p class=\"detail\">${t} 模式 <span style=\"color:red\">(AI 理解力较差，见谅)</span></p></div>`);\n                            else\n                                rt = rt.replace(i, `<div class=\"action\"><p class=\"tit\">切换外观模式</p><p class=\"detail\">${t == 'dark' ? '深色' : '浅色'} 模式</p></div>`);\n                        }\n                    }\n                    $('#copilot>.chat').append(`<div class=\"line ai\"><div class=\"text\">${rt}</div></div>`);\n                } else {\n                    $('#copilot>.chat').append(`<div class=\"line ai\"><p class=\"text\">${decodeHtml(rt)}</p></div>`);\n                }\n\n                copilot.history.push({ role: 'assistant', content: responseText });\n                $('#copilot>.chat').scrollTop($('#copilot>.chat')[0].scrollHeight);\n                msgDoneOperate();\n            },\n            error: function(error) {\n                console.log(error);\n                $('#copilot>.chat').append('<div class=\"line system\"><p class=\"text\">发生错误，请查看控制台输出或重试</p></div>');\n                $('#copilot>.chat').scrollTop($('#copilot>.chat')[0].scrollHeight);\n                msgDoneOperate();\n            }\n        });\n    },\n    ana: (resp)=>{\n\n    }\n};\n// 日期、时间\nlet da = new Date();\n\nconst date = {\n    'zh-CN':`星期${['日', '一', '二', '三', '四', '五', '六'][da.getDay()]}, ${da.getFullYear()}年${(da.getMonth() + 1).toString().padStart(2, '0')}月${da.getDate().toString().padStart(2, '0')}日`,\n    'zh-TW':`星期${['日', '一', '二', '三', '四', '五', '六'][da.getDay()]}, ${da.getFullYear()}年${(da.getMonth() + 1).toString().padStart(2, '0')}月${da.getDate().toString().padStart(2, '0')}日`,\n    en:`${['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][da.getDay()]}, ${['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'][da.getMonth()]} ${da.getDate().toString().padStart(2, '0')}, ${da.getFullYear()}`\n}[langcode];\n\n$('#startmenu-r>.row1>.tool>.date').text(date);\n$('.dock.date>.date').text(`${da.getFullYear()}/${(da.getMonth() + 1).toString().padStart(2, '0')}/${da.getDate().toString().padStart(2, '0')}`);\n$('#datebox>.tit>.date').text(date);\nfunction loadtime() {\n    let d = new Date();\n    let time = d.toLocaleTimeString();\n    $('#startmenu-r>.row1>.tool>.time').text(time);\n    $('.dock.date>.time').text(time);\n    $('#datebox>.tit>.time').text(time);\n    $('.settingTime').text(time);\n}\n// apps.setting.theme_get();//提前加载主题\nloadtime();\nsetTimeout(() => {\n    loadtime(); setInterval(loadtime, 1000);\n}, 1000 - da.getMilliseconds());//修复时间不精准的问题。以前的误差：0-999毫秒；现在：几乎没有\nlet d = new Date();\nlet today = new Date().getDate();\nlet start = 7 - ((d.getDate() - d.getDay()) % 7) + 1;\nlet daysum = new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate();\nfor (let i = 1; i < start; i++) {\n    $('#datebox>.cont>.body')[0].innerHTML += '<span></span>';\n}\nfor (let i = 1; i <= daysum; i++) {\n    if (i == today) {\n        $('#datebox>.cont>.body')[0].innerHTML += `<p class=\"today\">${i}</p>`;\n        continue;\n    }\n    $('#datebox>.cont>.body')[0].innerHTML += `<p>${i}</p>`;\n}\nfunction pinapp(id, name, command) {\n    if ($('#startmenu-r>.pinned>.apps>.a.sm-app.' + id).length) return;\n    $('#startmenu-r>.pinned>.apps').append(`<a class='a sm-app enable ${id}' onclick='${command}';hide_startmenu();' oncontextmenu='return showcm(event,\\\"smapp\\\",[\\\"${id}\\\",\\\"${name}\\\"])'><img src='icon/${geticon(id)}'><p>${name}</p></a>`);\n}\n\n// 应用方法\n\n// png 格式的图标在此备注，否则以 标识+.svg 的名称自动检索\nconst icon = {\n    bilibili: 'bilibili.png',\n    vscode: 'vscode.png',\n    // python: 'python.png',\n    winver: 'about.svg',\n    // run: 'run.png',\n    // whiteboard: 'whiteboard.png',\n    taskmgr: 'taskmgr.png',\n    imgviewer: 'files/picture.png',\n    'code-editor': 'vscode.png',\n    mediaplayer: 'files/vidio.png',\n    pdfviewer: 'files/pdf.svg'\n};\nfunction geticon(name) {\n    if (icon[name]) return icon[name];\n    else return name + '.svg';\n}\n\n\nfunction openapp(name) {\n    if (taskmgrTasks.findIndex(elt => elt.link == name) > -1 && apps.taskmgr.tasks.findIndex(elt => elt.link == name) == -1) {\n        apps.taskmgr.tasks.splice(apps.taskmgr.tasks.length, 0, taskmgrTasks.find(elt => elt.link == name));\n    }\n    if ($('#taskbar>.' + name).length != 0) {\n        if ($('.window.' + name).hasClass('min')) {\n            minwin(name);\n        }\n        focwin(name);\n        return;\n    }\n    $('.window.' + name).addClass('load');\n    showwin(name);\n    $('#taskbar').attr('count', Number($('#taskbar').attr('count')) + 1);\n    $('#taskbar').append(`<a class=\"${name}\" onclick=\"taskbarclick('${name}\\')\" win12_title=\"${$(`.window.${name}>.titbar>p`).text()}\" onmouseenter=\"showdescp(event)\" onmouseleave=\"hidedescp(event)\" oncontextmenu=\"return showcm(event, 'taskbar', '${name}')\"><img src=\"icon/${icon[name] || (name + '.svg')}\"></a>`);\n    if ($('#taskbar').attr('count') == '1') {\n        $('#taskbar').css('display', 'flex');\n    }\n    $('#taskbar>.' + name).addClass('foc');\n    setTimeout(() => {\n        $('#taskbar').css('width', 4 + $('#taskbar').attr('count') * (34 + 4));\n    }, 0);\n    let tmp = name.replace(/\\-(\\w)/g, function (all, letter) {\n        return letter.toUpperCase();\n    });\n    if (apps[tmp].load && !apps[tmp].loaded) {\n        apps[tmp].loaded = true;\n        apps[tmp].load();\n        apps[tmp].init();\n        $('.window.' + name).removeClass('load');\n        return;\n    }\n    apps[tmp].init();\n    setTimeout(() => {\n        $('.window.' + name).removeClass('load');\n    }, Number($('.window.' + name + '>.loadback').attr('data-delay')) || 500);\n}\n\n// 开始菜单一类\n\n\n\n//打开任务栏按钮对应的widget\n\n// 为啥管这个东西叫 widget?? from stsc\nfunction openDockWidget(name){\n    if(name==\"start-menu\"){ //打开开始菜单\n        if($('#start-menu').hasClass('show')){\n            hide_startmenu();\n        }\n        else{\n            $('#start-btn').addClass('show');\n            if($('#search-win').hasClass('show')){\n                $('#search-btn').removeClass('show');\n                $('#search-win').removeClass('show');\n                setTimeout(() => {\n                    $('#search-win').removeClass('show-begin');\n                }, 200);\n                hide_widgets();\n            }\n            if($('#widgets').hasClass('show'))hide_widgets();\n            $('#start-menu').addClass('show-begin');\n            setTimeout(() => {\n                $('#start-menu').addClass('show');\n            }, 0);\n        }\n    }else if(name==\"search-win\"){   //打开搜索框\n        if ($('#search-win').hasClass('show')) {\n            $('#search-btn').removeClass('show');\n            $('#search-win').removeClass('show');\n            setTimeout(() => {\n                $('#search-win').removeClass('show-begin');\n            }, 200);\n        }\n        else {\n            $('#search-btn').addClass('show');\n            if($('#start-menu').hasClass('show'))hide_startmenu();\n            if($('#widgets').hasClass('show'))hide_widgets();\n            $('#search-win').addClass('show-begin');\n            setTimeout(() => {\n                $('#search-win').addClass('show');\n            }, 0);\n            $('#search-input').focus();\n        }\n    }else if(name==\"widgets\"){  //打开小组件\n        if($('#widgets').hasClass('show')){\n            hide_widgets();\n        }\n        else{\n            $('#widgets-btn').addClass('show');\n            if($('#search-win').hasClass('show')){\n                $('#search-btn').removeClass('show');\n                $('#search-win').removeClass('show');\n                setTimeout(() => {\n                    $('#search-win').removeClass('show-begin');\n                }, 200);\n            }\n            if($('#start-menu').hasClass('show'))hide_startmenu();\n            $('#widgets').addClass('show-begin');\n            setTimeout(() => {\n                $('#widgets').addClass('show');\n            }, 0);\n            $('#widgets-input').focus();\n        }\n    }else if(name==\"control\"){  //打开控制\n        if($('#control').hasClass('show')) {\n\t\t\t$('#control').removeClass('show');\n\t\t\tsetTimeout(() => {\n\t\t\t\t$('#control').removeClass('show-begin');\n\t\t\t}, 200);\n\t\t}\n\t\telse {\n\t\t\tif ($('#datebox').hasClass('show')) {\n\t\t\t\t$('.dock.date').removeClass('show');\n\t\t\t\t$('#datebox').removeClass('show');\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t$('#datebox').removeClass('show-begin');\n\t\t\t\t}, 200);\n\t\t\t}\n\t\t\t$('#control').css('left',$('.a.dock.control').position().left - 123);\n\t\t\t$('#control').addClass('show-begin');\n\t\t\tsetTimeout(() => {\n\t\t\t\t$('#control').addClass('show');\n\t\t\t}, 0);\n\t\t}\n    }else if(name==\"datebox\"){  //打开时间框\n        if($('#datebox').hasClass('show')) {\n\t\t\t$('.dock.date').removeClass('show');\n\t\t\t$('#datebox').removeClass('show');\n\t\t\tsetTimeout(() => {\n\t\t\t\t$('#datebox').removeClass('show-begin');\n\t\t\t}, 200);\n\t\t}\n\t\telse {\n\t\t\tif ($('#control').hasClass('show')) {\n\t\t\t\t$('#control').removeClass('show');\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t$('#control').removeClass('show-begin');\n\t\t\t\t}, 200);\n\t\t\t}\n\t\t\t$('.dock.date').addClass('show');\n\t\t\t$('#datebox').css('left',$('.a.dock.date').position().left-125);\n\t\t\t$('#datebox').addClass('show-begin');\n\t\t\tsetTimeout(() => {\n\t\t\t\t$('#datebox').addClass('show');\n\t\t\t}, 0);\n\t\t}\n    }else{\n        console.err(\"openDockWidget()传递的name不正确!\");\n    }\n}\n\nfunction removeEdgeSaveUrl(classname) {\n    $('.' + classname).remove()\n}\n\nfunction hide_startmenu() {\n    $('#start-menu').removeClass('show');\n    $('#start-btn').removeClass('show');\n    setTimeout(() => { $('#start-menu').removeClass('show-begin'); }, 200);\n}\nfunction hide_widgets() {\n    $('#widgets').removeClass('show');\n    $('#widgets-btn').removeClass('show');\n    setTimeout(() => { $('#widgets').removeClass('show-begin'); }, 200);\n}\nconst FLY_HIDDEN_LIST_KEY = 'control_status_fly_hidden_list'\nfunction controlStatus(name) {\n    if (this.classList.contains('active')) {\n        this.classList.remove('active');\n        if (name == 'wifi') {\n            wifiStatus = false;\n        }\n        if (name == 'fly') {\n            flyStatus = false\n            if (localStorage.getItem(FLY_HIDDEN_LIST_KEY)) {\n              const flyHiddenData = JSON.parse(localStorage.getItem(FLY_HIDDEN_LIST_KEY))\n              const flyHiddenList = Array.isArray(flyHiddenData) ? flyHiddenData : []\n              flyHiddenList.forEach(item => {\n                const dom = $(`#control .${item} .icon`)\n                if (!dom.hasClass('active')) {\n                  dom.addClass('active')\n                }\n              })\n              localStorage.removeItem(FLY_HIDDEN_LIST_KEY)\n            }\n        }\n    }\n    else if (!this.classList.contains('active')) {\n        this.classList.add('active');\n        if (name == 'wifi') {\n            wifiStatus = true;\n        }\n        if (name == 'fly') {\n          flyStatus = true\n          const hiddenList = ['btn1', 'btn2', 'btn5']\n          const hiddenDiffList = []\n          hiddenList.forEach(item => {\n            const dom = $(`#control .${item} .icon`)\n            if (dom.hasClass('active')) {\n              dom.removeClass('active')\n              hiddenDiffList.push(item)\n            }\n          })\n          localStorage.setItem(FLY_HIDDEN_LIST_KEY, JSON.stringify(hiddenDiffList))\n        }\n    }\n    if (name == 'dark') { \n        $('html').toggleClass('night');\n        if ($('html').hasClass('night')) {\n            setTimeout(() => {\n                alert('别看屏幕了，去休息眼睛吧~');\n            }, 200);\n        }\n    }\n}\n// 控制面板 亮度调整\nfunction dragBrightness(e) {\n    const container = $('#control>.cont>.bottom>.brightness>.range-container')[0];\n    const after = $('#control>.cont>.bottom>.brightness>.range-container>.after')[0];\n    const slider = $('#control>.cont>.bottom>.brightness>.range-container>.slider-btn')[0];\n    const viewport = container.getBoundingClientRect().left;\n    const width = Number(window.getComputedStyle(container, null).width.split('px')[0]);\n    move(e);\n    page.onmousemove = move;\n    page.ontouchmove = move;\n    container.classList.add('active');\n    function move(e) {\n        let clientX;\n        if (e.type.match('mouse')) {\n            clientX = e.clientX;\n        }\n        else if (e.type.match('touch')) {\n            clientX = e.touches[0].clientX;\n        }\n        var _offset = clientX - viewport;\n\n        const limit=2; // 亮度条件限制\n\n        if (_offset < 0) {\n            _offset = 0;\n        }\n        else if (_offset > limit*width) {\n            _offset = limit*width;\n        }\n        slider.style.marginLeft = _offset + 'px';\n        after.style.left = _offset + 'px';\n        after.style.width = width - _offset + 'px';\n        if (_offset / width > 0.3 && _offset / width < limit) {\n            page.style.filter = `brightness(${_offset / width})`;\n        }\n        else if (_offset / width < limit){\n            page.style.filter = 'brightness(0.3)';\n        }else{\n            page.style.filter = `brightness(${limit})`;\n        }\n    }\n    function up() {\n        container.classList.remove('active');\n        page.onmouseup = null;\n        page.ontouchend = null;\n        page.ontouchcancel = null;\n        page.onmousemove = null;\n        page.ontouchmove = null;\n    }\n    page.onmouseup = up;\n    page.ontouchend = up;\n    page.ontouchcancel = up;\n}\n\n// 控制面板 电量监测\nif (navigator.getBattery) {\n    navigator.getBattery().then((battery) => {\n        // 检查battery对象和level属性是否存在且有效\n        if (battery && typeof battery.level === 'number' && !isNaN(battery.level)) {\n            const batteryLevel = Math.max(0, Math.min(1, battery.level)); // 确保在0-1范围内\n            const batteryWidth = 18 * batteryLevel + 5;\n            \n            const pathElement = $('.a.dock.control>svg>path')[0];\n            if (pathElement) {\n                pathElement.outerHTML = `<path\n                    d=\"M 4 7 C 2.3550302 7 1 8.3550302 1 10 L 1 19 C 1 20.64497 2.3550302 22 4 22 L 24 22 C 25.64497 22 27 20.64497 27 19 L 27 10 C 27 8.3550302 25.64497 7 24 7 L 4 7 z M 4 9 L 24 9 C 24.56503 9 25 9.4349698 25 10 L 25 19 C 25 19.56503 24.56503 20 24 20 L 4 20 C 3.4349698 20 3 19.56503 3 19 L 3 10 C 3 9.4349698 3.4349698 9 4 9 z M 5 11 L 5 18 L ${batteryWidth} 18 L ${batteryWidth} 11 L 5 11 z M 28 12 L 28 17 L 29 17 C 29.552 17 30 16.552 30 16 L 30 13 C 30 12.448 29.552 12 29 12 L 28 12 z\"\n            id=\"path2\" fill=\"#000000\"\n        />`;\n\n                // 检查addEventListener是否存在\n                if (battery.addEventListener && typeof battery.addEventListener === 'function') {\n        battery.addEventListener('levelchange', () => {\n                        if (battery && typeof battery.level === 'number' && !isNaN(battery.level)) {\n                            const updatedLevel = Math.max(0, Math.min(1, battery.level));\n                            const updatedWidth = 18 * updatedLevel + 5;\n                            const updatedPathElement = $('.a.dock.control>svg>path')[0];\n                            if (updatedPathElement) {\n                                updatedPathElement.outerHTML = `<path\n                                    d=\"M 4 7 C 2.3550302 7 1 8.3550302 1 10 L 1 19 C 1 20.64497 2.3550302 22 4 22 L 24 22 C 25.64497 22 27 20.64497 27 19 L 27 10 C 27 8.3550302 25.64497 7 24 7 L 4 7 z M 4 9 L 24 9 C 24.56503 9 25 9.4349698 25 10 L 25 19 C 25 19.56503 24.56503 20 24 20 L 4 20 C 3.4349698 20 3 19.56503 3 19 L 3 10 C 3 9.4349698 3.4349698 9 4 9 z M 5 11 L 5 18 L ${updatedWidth} 18 L ${updatedWidth} 11 L 5 11 z M 28 12 L 28 17 L 29 17 C 29.552 17 30 16.552 30 16 L 30 13 C 30 12.448 29.552 12 29 12 L 28 12 z\"\n                id=\"path2\" fill=\"#000000\"\n            />`;\n                            }\n                        }\n    });\n                }\n            }\n        }\n    }).catch((error) => {\n        // 静默处理错误，电池API在某些浏览器中不可用是正常的\n        console.log('电池API不可用:', error);\n    });\n}\n\n// 任务管理器 记录硬件运行时间\nif (localStorage.getItem('cpuRunningTime')) {\n    apps.taskmgr.cpuRunningTime = localStorage.getItem('cpuRunningTime');\n}\nwindow.setInterval(() => {\n    apps.taskmgr.cpuRunningTime++;\n    localStorage.setItem('cpuRunningTime', apps.taskmgr.cpuRunningTime);\n}, 1000);\n\nvar wifiStatus = true;\n// 飞行模式\nvar flyStatus = false;\n\n// 选择框\nlet chstX, chstY;\nfunction ch(e) {\n    $('#desktop>.selection').css('left', Math.min(chstX, e.clientX));\n    $('#desktop>.selection').css('width', Math.abs(e.clientX - chstX));\n    $('#desktop>.selection').css('display', 'block');\n    $('#desktop>.selection').css('top', Math.min(chstY, e.clientY));\n    $('#desktop>.selection').css('height', Math.abs(e.clientY - chstY));\n}\n$('#desktop')[0].addEventListener('mousedown', e => {\n    chstX = e.clientX;\n    chstY = e.clientY;\n    this.onmousemove = ch;\n});\nwindow.addEventListener('mouseup', e => {\n    this.onmousemove = null;\n    $('#desktop>.selection').css('left', 0);\n    $('#desktop>.selection').css('top', 0);\n    $('#desktop>.selection').css('display', 'none');\n    $('#desktop>.selection').css('width', 0);\n    $('#desktop>.selection').css('height', 0);\n});\nlet isDark = false;\n\n// 个性化主题\nfunction toggletheme() {\n    $('.dock.theme').toggleClass('dk');\n    // var darkControl = $(`#control .btn4 .icon`)\n    $(':root').toggleClass('dark');\n    if ($(':root').hasClass('dark')) {\n        $('.window.whiteboard>.titbar>p').text('Blackboard');\n        setData('theme', 'dark');\n        isDark = true;\n        // darkControl.addClass('active')\n    } else {\n        $('.window.whiteboard>.titbar>p').text('Whiteboard');\n        setData('theme', 'light');\n        isDark = false;\n        // darkControl.removeClass('active')\n    }\n}\n\n// Only set theme based on system preference if no user preference is stored\nif (localStorage.getItem('theme') === null) {\n    if (window.matchMedia('(prefers-color-scheme: dark)').matches) { //是深色\n        $('.dock.theme').toggleClass('dk');\n        $(':root').toggleClass('dark');\n        $('.window.whiteboard>.titbar>p').text('Blackboard');\n        localStorage.setItem('theme', 'dark');\n        isDark = true;\n    } else { // 不是深色\n        $('.window.whiteboard>.titbar>p').text('Whiteboard');\n        localStorage.setItem('theme', 'light');\n    }\n}\n\n// 桌面图标的初始化\nlet desktopItem = [];\n\nfunction saveDesktop() {\n    const data = {\n        desktop: JSON.stringify(desktopItem),\n        topmost: JSON.stringify(topmost),\n        sys_setting: JSON.stringify(sys_setting),\n        root_class: $(':root').attr('class')\n    };\n    \n    Object.entries(data).forEach(([key, value]) => {\n        localStorage.setItem(key, value);\n    });\n}\n\nfunction setIcon() {\n    // return;\n    if (!Array.isArray(JSON.parse(localStorage.getItem('desktop')))){\n        setData('desktop','[]')\n    }\n    if (Array.isArray(JSON.parse(localStorage.getItem('desktop')))) {\n        $('#desktop')[0].innerHTML = `<div ondblclick=\"openapp('explorer');\" ontouchstart=\"openapp('explorer');\" oncontextmenu=\"return showcm(event,'desktop.icon',['explorer',-1]);\" appname=\"explorer\">\n        <img src=\"apps/icons/explorer/thispc.svg\">\n        <p>${lang('此电脑','explorer.thispc')}</p>\n    </div>\n    <div class=\"b\" ondblclick=\"openapp('setting');\" ontouchstart=\"openapp('setting');\" oncontextmenu=\"return showcm(event,'desktop.icon',['setting',-1]);\" appname=\"setting\">\n        <img src=\"icon/setting.svg\">\n        <p>${lang('设置','setting.name')}</p>\n    </div>\n    <div class=\"b\" ondblclick=\"openapp('about');\" ontouchstart=\"openapp('about');\" oncontextmenu=\"return showcm(event,'desktop.icon',['about',-1]);\" appname=\"about\">\n        <img src=\"icon/about.svg\">\n        <p>${lang('关于 Win12 网页版','about.name')}</p>\n    </div>\n    <div class=\"b\" ondblclick=\"openapp('edge');\" ontouchstart=\"openapp('edge');\" oncontextmenu=\"return showcm(event,'desktop.icon',['edge',-1]);\" appname=\"edge\">\n        <img src=\"icon/edge.svg\">\n        <p>Microsoft Edge</p>\n    </div>\n    <div class=\"b\" ondblclick=\"shownotice('feedback');\" ontouchstart=\"shownotice('feedback');\">\n        <img src=\"icon/feedback.svg\">\n        <p>${lang('反馈中心','feedback.name')}</p>\n    </div>\n    <span class=\"selection\">\n    </span>\n    <p style=\"background-color: rgba(11,45,14,0);z-index:1;position: absolute;top:0px;left:0px;height:100%;width:100%\" oncontextmenu=\"return showcm(event,'desktop');\"></p>`;\n        desktopItem = JSON.parse(localStorage.getItem('desktop'));\n        desktopItem.forEach((item) => {\n            $('#desktop')[0].innerHTML += item;\n        });\n        addMenu();\n    }\n    if (Array.isArray(JSON.parse(localStorage.getItem('topmost')))) {\n        topmost = JSON.parse(localStorage.getItem('topmost'));\n        if (topmost.includes('taskmgr')) {\n            $('#tsk-setting-topmost')[0].checked = true;\n        }\n    }\n    if (Array.isArray(JSON.parse(localStorage.getItem('sys_setting')))) {\n        var sys_setting_back = JSON.parse(localStorage.getItem('sys_setting'));\n        if (/^(1|0)+$/.test(sys_setting_back.join(''))/* 只含有0和1 */) {\n            sys_setting = sys_setting_back;\n            for (var i = 0; i < sys_setting.length; i++) {\n                document.getElementById('sys_setting_' + (i + 1))?.setAttribute(\"class\", 'a checkbox' + (sys_setting[i] ? ' checked' : '')); //设置class属性\n                if (i == 5) {\n                    use_music = sys_setting[i] ? true : false;\n                }\n                if (i == 6) {\n                    use_mic_voice = sys_setting[i] ? true : false;\n                }\n            }\n        }\n    }\n    if (localStorage.getItem('root_class')) {\n        $(':root')[0].className = localStorage.getItem('root_class') + ' ' + (isDark ? 'dark' : '');\n    }\n    \n    if(sys_setting[0]){\n        $(':root').addClass('corner_squ');\n    }\n}\n\n// 原神，启动！\ndocument.getElementsByTagName('body')[0].onload = () => {\n    setTimeout(() => {\n        $('#loadback').addClass('hide');\n    }, 500);\n    setTimeout(() => {\n        $('#loadback').css('display', 'none');\n    }, 1000);\n    apps.webapps.init();\n    //getdata\n    if (localStorage.getItem('theme') == 'dark') {\n        $(':root').addClass('dark');\n        $('.dock.theme').addClass('dk');\n        $('.window.whiteboard>.titbar>p').text('Blackboard');\n        isDark = true;\n    } else {\n        $(':root').removeClass('dark');\n        $('.dock.theme').removeClass('dk');\n        $('.window.whiteboard>.titbar>p').text('Whiteboard');\n        isDark = false;\n    }\n    if (localStorage.getItem('color1')) {\n        $(':root').css('--theme-1', localStorage.getItem('color1'));\n        $(':root').css('--theme-2', localStorage.getItem('color2'));\n    }\n    setIcon();//加载桌面图标\n\n    // 所以这个东西为啥要在开机的时候加载？\n    // 不应该在python.init里面吗？\n    //     (async function () {\n    //         apps.python.pyodide = await loadPyodide();\n    //         apps.python.pyodide.runPython(`\n    // import sys\n    // import io\n    // `);\n    //     })();\n    // apps.pythonEditor.load();\n    // apps.notepadFonts.load();\n    // apps.whiteboard.load();\n    document.querySelectorAll('.window').forEach(w => {\n        let qw = $(w), wc = w.classList[1];\n        // window: onmousedown=\"focwin('explorer')\" ontouchstart=\"focwin('explorer')\"\n        qw.attr('onmousedown', `focwin('${wc}')`);\n        qw.attr('ontouchstart', `focwin('${wc}')`);\n        // titbar: oncontextmenu=\"return showcm(event,'titbar','edge')\" ondblclick=\"maxwin('edge')\"\n        qw = $(`.window.${wc}>.titbar`);\n        qw.attr('oncontextmenu', `return showcm(event,'titbar','${wc}')`);\n        if (!(wc in nomax)) {\n            qw.attr('ondblclick', `maxwin('${wc}')`);\n        }\n        // icon: onclick=\"return showcm(event,'titbar','explorer')\"\n        qw = $(`.window.${wc}>.titbar>.icon`);\n        qw.attr('onclick', `let os=$(this).offset();stop(event);return showcm({clientX:os.left-5,clientY:os.top+this.offsetHeight+3},'titbar','${wc}')`);\n        qw.mousedown(stop);\n        $(`.window.${wc}>.titbar>div>.wbtg`).mousedown(stop);\n    });\n    document.querySelectorAll('.window>div.resize-bar').forEach(w => {\n        for (const n of ['top', 'bottom', 'left', 'right', 'top-right', 'top-left', 'bottom-right', 'bottom-left']) {\n            w.insertAdjacentHTML('afterbegin', `<div class=\"resize-knob ${n}\" onmousedown=\"resizewin(this.parentElement.parentElement, '${n}', this)\"></div>`);\n        }\n    });\n    $.getJSON('https://tjy-gitnub.github.io/win12-theme/def.json').then(j=>{\n        if(j.sp){\n            $(':root').css('--bgul',j.bg);\n            if(j.spth){\n                $(':root').css('--theme-1',j.th1);\n                $(':root').css('--theme-2',j.th2);\n                $(':root').css('--href', j.href);\n            }\n            if(j.death){\n                $('html').css('filter','saturate(0)');\n            }\n        }\n    });\n    updateVoiceBallStatus();\n    // loadlang();\n    checkOrientation();\n};\n\nlet autoUpdate = true;\nfunction checkUpdate() {\n    const sha = localStorage.getItem('sha');\n    api('repos/tjy-gitnub/win12/commits').then(res => {\n        res.json().then(json => {\n            if (sha != json[0].sha && sha) {\n                localStorage.setItem('update', true);\n                sendToSw({\n                    head: 'update'\n                });\n            }\n            localStorage.setItem('sha', json[0].sha);\n        });\n    });\n}\n\nif (localStorage.getItem('autoUpdate') == undefined) {\n    localStorage.setItem('autoUpdate', true);\n}\nelse {\n    autoUpdate = (autoUpdate == 'true');\n}\n\n// PWA 应用\nlet setData;\nif (!location.href.match(/((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])(?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))/) && !location.href.match('localhost') && !(new URL(location.href)).searchParams.get('develop')) {\n    $('#loginback').css('opacity', '1');\n    $('#loginback').css('display', 'flex');\n    shownotice('about');\n    navigator.serviceWorker.register('sw.js', { updateViaCache: 'none', scope: './' }).then(reg => {\n\n        reg.update();\n\n        reg.addEventListener('updatefound', () => {\n            // 正在安装的新的 SW\n            const newWorker = reg.installing;\n            console.log('dsk-发现更新');\n            // newWorker.state;\n            // // \"installing\" - 安装事件被触发，但还没完成\n            // // \"installed\"  - 安装完成\n            // // \"activating\" - 激活事件被触发，但还没完成\n            // // \"activated\"  - 激活成功\n            // // \"redundant\"  - 废弃，可能是因为安装失败，或者是被一个新版本覆盖\n        });\n    });\n    // navigator.serviceWorker.controller.postMessage({\n    //     head: 'is_update'\n    // });\n    // navigator.serviceWorker.addEventListener('message', function (e) {\n    // checkUpdate();\n\n    if (localStorage.getItem('autoUpdate') == 'true') {\n        checkUpdate();\n    }\n    if (localStorage.getItem('update') == 'true') {\n        $('.msg.update>.main>.tit').html('<i class=\"bi bi-stars\" style=\"background-image: linear-gradient(100deg, var(--theme-1), var(--theme-2));-webkit-background-clip: text;-webkit-text-fill-color: transparent;text-shadow:3px 3px 5px var(--shadow);filter:saturate(200%) brightness(0.9);\"></i> ' + $('#win-about>.cnt.update>div>details:first-child>summary').text());\n        $('.msg.update>.main>.cont').html($('#win-about>.cnt.update>div>details:first-child>p').html());\n        $('#loadbackupdate').css('display', 'block');\n        localStorage.setItem('update', false);\n        $('.msg.update').addClass('show');\n    }\n    // });\n    // 使用说明见 desktop.html 开头\n    setData=(k, v)=>{\n        localStorage.setItem(k, v);\n    }\n\n} else {\n    setData=(k, v)=>{\n        console.log('setData 被禁用');\n    }\n}\nfunction sendToSw(msg) {\n    navigator.serviceWorker.controller.postMessage(msg);\n}\n\n/**\n * 将秒数换算为可读的时间格式\n * @param {number} second 秒数\n * @returns 将秒数格式化为  1 天 8 小时 43 分钟 26 秒类似的格式\n */\nfunction calcTimeString(second) {\n    let timeStr = '';\n    const days = Math.floor(second / (24 * 60 * 60));\n    const hours = Math.floor(second % (24 * 60 * 60) / 3600);\n    const minutes = Math.floor(second % 3600 / 60);\n    const seconds = second % 60;\n    if (days > 0) {\n        timeStr += ' ' + days + ' 天';\n    }\n    if (hours > 0) {\n        timeStr += ' ' + hours + ' 小时';\n    }\n    if (minutes > 0) {\n        timeStr += ' ' + minutes + ' 分钟';\n    }\n    if (seconds > 0) {\n        timeStr += ' ' + seconds + ' 秒';\n    }\n    return timeStr === '' ? ' 0 秒' : timeStr;\n}\n\n//监听全局按键\nfunction setupGlobalKey(){\n    $(document).keydown(function (event) {\n        if (event.keyCode == 116/*F5被按下(刷新)*/) {\n            event.preventDefault();/*取消默认刷新行为*/\n            $('#desktop').css('opacity', '0'); setTimeout(() => { $('#desktop').css('opacity', '1'); }, 100); setIcon();\n            return;\n        }\n\n        //按下徽标键\n        if (event.metaKey && event.ctrlKey) {\n            //打开或关闭开始菜单\n            openDockWidget(\"start-menu\");\n        }\n    });\n}\n\nsetupGlobalKey();\n\n\nfunction isMobileDevice() {\n    return /Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent);\n}\n\nfunction checkOrientation() {\n    const container = document.getElementById('orientation-warning');\n    const isPortrait = window.matchMedia(\"(orientation: portrait)\").matches;\n    if (isMobileDevice() && isPortrait) {\n        container.style.display = \"flex\"; // 显示提示\n    } else {\n        container.style.display = \"none\"; // 隐藏提示\n    }\n}\n\n// 监听屏幕方向变化\nwindow.addEventListener(\"resize\", checkOrientation);\nwindow.addEventListener(\"orientationchange\", checkOrientation);\n\n\n// 任务栏悬停预览窗口 by @fzlzjerry \n\nlet previewTimeout;\n\nfunction showTaskbarPreview(name, event) {\n    clearTimeout(previewTimeout);\n    \n    const preview = document.getElementById('taskbar-preview');\n    if (!preview) {\n        const previewEl = document.createElement('div');\n        previewEl.id = 'taskbar-preview';\n        previewEl.innerHTML = `\n            <div class=\"preview-title\">\n                <img src=\"\" alt=\"\">\n                <span></span>\n            </div>\n            <div class=\"preview-content\">\n                <div class=\"preview-window\"></div>\n            </div>\n        `;\n        document.body.appendChild(previewEl);\n    }\n    \n    const win = $(`.window.${name}`);\n    if (win.length && !win.hasClass('min')) {\n        const preview = $('#taskbar-preview');\n        const taskbarItem = $(event.currentTarget);\n        const itemRect = taskbarItem[0].getBoundingClientRect();\n        \n\n        \n        // Set window title and icon\n        const titleImg = win.find('.titbar img.icon').attr('src');\n        const title = win.find('.titbar p').text() || win.find('.titbar span').text();\n        \n        preview.find('.preview-title img').attr('src', titleImg);\n        preview.find('.preview-title span').text(title);\n        \n        // Create simplified window preview\n        const previewWindow = preview.find('.preview-content .preview-window');\n        previewWindow.empty();\n        \n        // Clone important window elements for preview\n        const content = win.find('.content').clone();\n        content.find('script').remove(); // Remove any scripts\n        content.find('iframe').remove(); // Remove iframes\n        \n        // Scale down the content\n        content.css({\n            transform: 'scale(0.2)',\n            transformOrigin: 'top left',\n            width: '500%', // 1/0.2 = 5\n            height: '500%'\n        });\n        \n        previewWindow.append(content);\n        preview.addClass('show');\n\n        // Set preview position\n        console.log(content[0].offsetWidth* 0.2);\n        preview.css({\n            left: itemRect.left - ( content[0].offsetWidth* 0.2 / 2),\n            bottom: '60px'\n        });\n    }\n}\n\nfunction hideTaskbarPreview() {\n    previewTimeout = setTimeout(() => {\n        $('#taskbar-preview').removeClass('show');\n    }, 200);\n}\n\n// Add hover events to taskbar items\n$(document).on('mouseenter', '#taskbar>a', function(e) {\n    const name = this.className.split(' ')[0];\n    showTaskbarPreview(name, e);\n});\n\n$(document).on('mouseleave', '#taskbar>a', function() {\n    hideTaskbarPreview();\n});\n\n// Add hover events to preview\n$(document).on('mouseenter', '#taskbar-preview', function() {\n    clearTimeout(previewTimeout);\n});\n\n$(document).on('mouseleave', '#taskbar-preview', function() {\n    hideTaskbarPreview();\n});"
  },
  {
    "path": "fonts/LICENSE",
    "content": "Attribution-ShareAlike 4.0 International\n\n=======================================================================\n\nCreative Commons Corporation (\"Creative Commons\") is not a law firm and\ndoes not provide legal services or legal advice. Distribution of\nCreative Commons public licenses does not create a lawyer-client or\nother relationship. Creative Commons makes its licenses and related\ninformation available on an \"as-is\" basis. Creative Commons gives no\nwarranties regarding its licenses, any material licensed under their\nterms and conditions, or any related information. Creative Commons\ndisclaims all liability for damages resulting from their use to the\nfullest extent possible.\n\nUsing Creative Commons Public Licenses\n\nCreative Commons public licenses provide a standard set of terms and\nconditions that creators and other rights holders may use to share\noriginal works of authorship and other material subject to copyright\nand certain other rights specified in the public license below. The\nfollowing considerations are for informational purposes only, are not\nexhaustive, and do not form part of our licenses.\n\n     Considerations for licensors: Our public licenses are\n     intended for use by those authorized to give the public\n     permission to use material in ways otherwise restricted by\n     copyright and certain other rights. Our licenses are\n     irrevocable. Licensors should read and understand the terms\n     and conditions of the license they choose before applying it.\n     Licensors should also secure all rights necessary before\n     applying our licenses so that the public can reuse the\n     material as expected. Licensors should clearly mark any\n     material not subject to the license. This includes other CC-\n     licensed material, or material used under an exception or\n     limitation to copyright. More considerations for licensors:\n     wiki.creativecommons.org/Considerations_for_licensors\n\n     Considerations for the public: By using one of our public\n     licenses, a licensor grants the public permission to use the\n     licensed material under specified terms and conditions. If\n     the licensor's permission is not necessary for any reason--for\n     example, because of any applicable exception or limitation to\n     copyright--then that use is not regulated by the license. Our\n     licenses grant only permissions under copyright and certain\n     other rights that a licensor has authority to grant. Use of\n     the licensed material may still be restricted for other\n     reasons, including because others have copyright or other\n     rights in the material. A licensor may make special requests,\n     such as asking that all changes be marked or described.\n     Although not required by our licenses, you are encouraged to\n     respect those requests where reasonable. More considerations\n     for the public:\n     wiki.creativecommons.org/Considerations_for_licensees\n\n=======================================================================\n\nCreative Commons Attribution-ShareAlike 4.0 International Public\nLicense\n\nBy exercising the Licensed Rights (defined below), You accept and agree\nto be bound by the terms and conditions of this Creative Commons\nAttribution-ShareAlike 4.0 International Public License (\"Public\nLicense\"). To the extent this Public License may be interpreted as a\ncontract, You are granted the Licensed Rights in consideration of Your\nacceptance of these terms and conditions, and the Licensor grants You\nsuch rights in consideration of benefits the Licensor receives from\nmaking the Licensed Material available under these terms and\nconditions.\n\n\nSection 1 -- Definitions.\n\n  a. Adapted Material means material subject to Copyright and Similar\n     Rights that is derived from or based upon the Licensed Material\n     and in which the Licensed Material is translated, altered,\n     arranged, transformed, or otherwise modified in a manner requiring\n     permission under the Copyright and Similar Rights held by the\n     Licensor. For purposes of this Public License, where the Licensed\n     Material is a musical work, performance, or sound recording,\n     Adapted Material is always produced where the Licensed Material is\n     synched in timed relation with a moving image.\n\n  b. Adapter's License means the license You apply to Your Copyright\n     and Similar Rights in Your contributions to Adapted Material in\n     accordance with the terms and conditions of this Public License.\n\n  c. BY-SA Compatible License means a license listed at\n     creativecommons.org/compatiblelicenses, approved by Creative\n     Commons as essentially the equivalent of this Public License.\n\n  d. Copyright and Similar Rights means copyright and/or similar rights\n     closely related to copyright including, without limitation,\n     performance, broadcast, sound recording, and Sui Generis Database\n     Rights, without regard to how the rights are labeled or\n     categorized. For purposes of this Public License, the rights\n     specified in Section 2(b)(1)-(2) are not Copyright and Similar\n     Rights.\n\n  e. Effective Technological Measures means those measures that, in the\n     absence of proper authority, may not be circumvented under laws\n     fulfilling obligations under Article 11 of the WIPO Copyright\n     Treaty adopted on December 20, 1996, and/or similar international\n     agreements.\n\n  f. Exceptions and Limitations means fair use, fair dealing, and/or\n     any other exception or limitation to Copyright and Similar Rights\n     that applies to Your use of the Licensed Material.\n\n  g. License Elements means the license attributes listed in the name\n     of a Creative Commons Public License. The License Elements of this\n     Public License are Attribution and ShareAlike.\n\n  h. Licensed Material means the artistic or literary work, database,\n     or other material to which the Licensor applied this Public\n     License.\n\n  i. Licensed Rights means the rights granted to You subject to the\n     terms and conditions of this Public License, which are limited to\n     all Copyright and Similar Rights that apply to Your use of the\n     Licensed Material and that the Licensor has authority to license.\n\n  j. Licensor means the individual(s) or entity(ies) granting rights\n     under this Public License.\n\n  k. Share means to provide material to the public by any means or\n     process that requires permission under the Licensed Rights, such\n     as reproduction, public display, public performance, distribution,\n     dissemination, communication, or importation, and to make material\n     available to the public including in ways that members of the\n     public may access the material from a place and at a time\n     individually chosen by them.\n\n  l. Sui Generis Database Rights means rights other than copyright\n     resulting from Directive 96/9/EC of the European Parliament and of\n     the Council of 11 March 1996 on the legal protection of databases,\n     as amended and/or succeeded, as well as other essentially\n     equivalent rights anywhere in the world.\n\n  m. You means the individual or entity exercising the Licensed Rights\n     under this Public License. Your has a corresponding meaning.\n\n\nSection 2 -- Scope.\n\n  a. License grant.\n\n       1. Subject to the terms and conditions of this Public License,\n          the Licensor hereby grants You a worldwide, royalty-free,\n          non-sublicensable, non-exclusive, irrevocable license to\n          exercise the Licensed Rights in the Licensed Material to:\n\n            a. reproduce and Share the Licensed Material, in whole or\n               in part; and\n\n            b. produce, reproduce, and Share Adapted Material.\n\n       2. Exceptions and Limitations. For the avoidance of doubt, where\n          Exceptions and Limitations apply to Your use, this Public\n          License does not apply, and You do not need to comply with\n          its terms and conditions.\n\n       3. Term. The term of this Public License is specified in Section\n          6(a).\n\n       4. Media and formats; technical modifications allowed. The\n          Licensor authorizes You to exercise the Licensed Rights in\n          all media and formats whether now known or hereafter created,\n          and to make technical modifications necessary to do so. The\n          Licensor waives and/or agrees not to assert any right or\n          authority to forbid You from making technical modifications\n          necessary to exercise the Licensed Rights, including\n          technical modifications necessary to circumvent Effective\n          Technological Measures. For purposes of this Public License,\n          simply making modifications authorized by this Section 2(a)\n          (4) never produces Adapted Material.\n\n       5. Downstream recipients.\n\n            a. Offer from the Licensor -- Licensed Material. Every\n               recipient of the Licensed Material automatically\n               receives an offer from the Licensor to exercise the\n               Licensed Rights under the terms and conditions of this\n               Public License.\n\n            b. Additional offer from the Licensor -- Adapted Material.\n               Every recipient of Adapted Material from You\n               automatically receives an offer from the Licensor to\n               exercise the Licensed Rights in the Adapted Material\n               under the conditions of the Adapter's License You apply.\n\n            c. No downstream restrictions. You may not offer or impose\n               any additional or different terms or conditions on, or\n               apply any Effective Technological Measures to, the\n               Licensed Material if doing so restricts exercise of the\n               Licensed Rights by any recipient of the Licensed\n               Material.\n\n       6. No endorsement. Nothing in this Public License constitutes or\n          may be construed as permission to assert or imply that You\n          are, or that Your use of the Licensed Material is, connected\n          with, or sponsored, endorsed, or granted official status by,\n          the Licensor or others designated to receive attribution as\n          provided in Section 3(a)(1)(A)(i).\n\n  b. Other rights.\n\n       1. Moral rights, such as the right of integrity, are not\n          licensed under this Public License, nor are publicity,\n          privacy, and/or other similar personality rights; however, to\n          the extent possible, the Licensor waives and/or agrees not to\n          assert any such rights held by the Licensor to the limited\n          extent necessary to allow You to exercise the Licensed\n          Rights, but not otherwise.\n\n       2. Patent and trademark rights are not licensed under this\n          Public License.\n\n       3. To the extent possible, the Licensor waives any right to\n          collect royalties from You for the exercise of the Licensed\n          Rights, whether directly or through a collecting society\n          under any voluntary or waivable statutory or compulsory\n          licensing scheme. In all other cases the Licensor expressly\n          reserves any right to collect such royalties.\n\n\nSection 3 -- License Conditions.\n\nYour exercise of the Licensed Rights is expressly made subject to the\nfollowing conditions.\n\n  a. Attribution.\n\n       1. If You Share the Licensed Material (including in modified\n          form), You must:\n\n            a. retain the following if it is supplied by the Licensor\n               with the Licensed Material:\n\n                 i. identification of the creator(s) of the Licensed\n                    Material and any others designated to receive\n                    attribution, in any reasonable manner requested by\n                    the Licensor (including by pseudonym if\n                    designated);\n\n                ii. a copyright notice;\n\n               iii. a notice that refers to this Public License;\n\n                iv. a notice that refers to the disclaimer of\n                    warranties;\n\n                 v. a URI or hyperlink to the Licensed Material to the\n                    extent reasonably practicable;\n\n            b. indicate if You modified the Licensed Material and\n               retain an indication of any previous modifications; and\n\n            c. indicate the Licensed Material is licensed under this\n               Public License, and include the text of, or the URI or\n               hyperlink to, this Public License.\n\n       2. You may satisfy the conditions in Section 3(a)(1) in any\n          reasonable manner based on the medium, means, and context in\n          which You Share the Licensed Material. For example, it may be\n          reasonable to satisfy the conditions by providing a URI or\n          hyperlink to a resource that includes the required\n          information.\n\n       3. If requested by the Licensor, You must remove any of the\n          information required by Section 3(a)(1)(A) to the extent\n          reasonably practicable.\n\n  b. ShareAlike.\n\n     In addition to the conditions in Section 3(a), if You Share\n     Adapted Material You produce, the following conditions also apply.\n\n       1. The Adapter's License You apply must be a Creative Commons\n          license with the same License Elements, this version or\n          later, or a BY-SA Compatible License.\n\n       2. You must include the text of, or the URI or hyperlink to, the\n          Adapter's License You apply. You may satisfy this condition\n          in any reasonable manner based on the medium, means, and\n          context in which You Share Adapted Material.\n\n       3. You may not offer or impose any additional or different terms\n          or conditions on, or apply any Effective Technological\n          Measures to, Adapted Material that restrict exercise of the\n          rights granted under the Adapter's License You apply.\n\n\nSection 4 -- Sui Generis Database Rights.\n\nWhere the Licensed Rights include Sui Generis Database Rights that\napply to Your use of the Licensed Material:\n\n  a. for the avoidance of doubt, Section 2(a)(1) grants You the right\n     to extract, reuse, reproduce, and Share all or a substantial\n     portion of the contents of the database;\n\n  b. if You include all or a substantial portion of the database\n     contents in a database in which You have Sui Generis Database\n     Rights, then the database in which You have Sui Generis Database\n     Rights (but not its individual contents) is Adapted Material,\n     including for purposes of Section 3(b); and\n\n  c. You must comply with the conditions in Section 3(a) if You Share\n     all or a substantial portion of the contents of the database.\n\nFor the avoidance of doubt, this Section 4 supplements and does not\nreplace Your obligations under this Public License where the Licensed\nRights include other Copyright and Similar Rights.\n\n\nSection 5 -- Disclaimer of Warranties and Limitation of Liability.\n\n  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE\n     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS\n     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF\n     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,\n     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,\n     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR\n     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,\n     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT\n     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT\n     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.\n\n  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE\n     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,\n     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,\n     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,\n     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR\n     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN\n     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR\n     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR\n     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.\n\n  c. The disclaimer of warranties and limitation of liability provided\n     above shall be interpreted in a manner that, to the extent\n     possible, most closely approximates an absolute disclaimer and\n     waiver of all liability.\n\n\nSection 6 -- Term and Termination.\n\n  a. This Public License applies for the term of the Copyright and\n     Similar Rights licensed here. However, if You fail to comply with\n     this Public License, then Your rights under this Public License\n     terminate automatically.\n\n  b. Where Your right to use the Licensed Material has terminated under\n     Section 6(a), it reinstates:\n\n       1. automatically as of the date the violation is cured, provided\n          it is cured within 30 days of Your discovery of the\n          violation; or\n\n       2. upon express reinstatement by the Licensor.\n\n     For the avoidance of doubt, this Section 6(b) does not affect any\n     right the Licensor may have to seek remedies for Your violations\n     of this Public License.\n\n  c. For the avoidance of doubt, the Licensor may also offer the\n     Licensed Material under separate terms or conditions or stop\n     distributing the Licensed Material at any time; however, doing so\n     will not terminate this Public License.\n\n  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public\n     License.\n\n\nSection 7 -- Other Terms and Conditions.\n\n  a. The Licensor shall not be bound by any additional or different\n     terms or conditions communicated by You unless expressly agreed.\n\n  b. Any arrangements, understandings, or agreements regarding the\n     Licensed Material not stated herein are separate from and\n     independent of the terms and conditions of this Public License.\n\n\nSection 8 -- Interpretation.\n\n  a. For the avoidance of doubt, this Public License does not, and\n     shall not be interpreted to, reduce, limit, restrict, or impose\n     conditions on any use of the Licensed Material that could lawfully\n     be made without permission under this Public License.\n\n  b. To the extent possible, if any provision of this Public License is\n     deemed unenforceable, it shall be automatically reformed to the\n     minimum extent necessary to make it enforceable. If the provision\n     cannot be reformed, it shall be severed from this Public License\n     without affecting the enforceability of the remaining terms and\n     conditions.\n\n  c. No term or condition of this Public License will be waived and no\n     failure to comply consented to unless expressly agreed to by the\n     Licensor.\n\n  d. Nothing in this Public License constitutes or may be interpreted\n     as a limitation upon, or waiver of, any privileges and immunities\n     that apply to the Licensor or You, including from the legal\n     processes of any jurisdiction or authority.\n\n\n=======================================================================\n\nCreative Commons is not a party to its public licenses.\nNotwithstanding, Creative Commons may elect to apply one of its public\nlicenses to material it publishes and in those instances will be\nconsidered the “Licensor.” The text of the Creative Commons public\nlicenses is dedicated to the public domain under the CC0 Public Domain\nDedication. Except for the limited purpose of indicating that material\nis shared under a Creative Commons public license or as otherwise\npermitted by the Creative Commons policies published at\ncreativecommons.org/policies, Creative Commons does not authorize the\nuse of the trademark \"Creative Commons\" or any other trademark or logo\nof Creative Commons without its prior written consent including,\nwithout limitation, in connection with any unauthorized modifications\nto any of its public licenses or any other arrangements,\nunderstandings, or agreements concerning use of licensed material. For\nthe avoidance of doubt, this paragraph does not form part of the public\nlicenses.\n\nCreative Commons may be contacted at creativecommons.org.\n"
  },
  {
    "path": "games/minesweeper.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>win12扫雷</title>\n    <style>\n        body {\n            font-family: sans-serif;\n            background-color: #f0f0f0;\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            min-height: 100vh;\n            margin: 0;\n            background: linear-gradient(to bottom, #c0c0c0, #d0d0d0);\n        }\n\n        .container {\n            background-color: #c0c0c0;\n            border: 2px solid #808080;\n            padding: 10px;\n            box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);\n            background: linear-gradient(to bottom, #c0c0c0, #d0d0d0);\n        }\n\n        .game-info {\n            display: flex;\n            justify-content: space-between;\n            margin-bottom: 10px;\n            padding: 5px;\n            background-color: #c0c0c0;\n            border: 1px solid #808080;\n            background: linear-gradient(to bottom, #c0c0c0, #d0d0d0);\n        }\n\n        #timer, #mines-left {\n            font-size: 1.2em;\n            padding: 5px;\n            background-color: black;\n            color: red;\n            width: 50px;\n            text-align: center;\n            border: 2px inset #808080;\n        }\n\n        .face-button {\n            font-size: 1.5em;\n            background-color: #c0c0c0;\n            border: 2px solid #808080;\n            cursor: pointer;\n            padding: 5px 10px;\n            border-style: outset;\n            background: linear-gradient(to bottom, #c0c0c0, #d0d0d0);\n        }\n\n        .face-button:active {\n            border-style: inset;\n        }\n\n        .grid {\n            display: grid;\n            border: 2px solid #808080;\n            background-color: #c0c0c0;\n            border-style: inset;\n        }\n\n        .cell {\n            width: 25px;\n            height: 25px;\n            border: 2px solid #808080;\n            box-sizing: border-box;\n            text-align: center;\n            font-size: 1.1em;\n            cursor: pointer;\n            border-style: outset;\n            user-select: none;\n            background: linear-gradient(to bottom, #c0c0c0, #d0d0d0);\n            position: relative;\n        }\n\n        .cell:active {\n            border-style: inset;\n        }\n\n        .cell.revealed {\n            border-style: none;\n            background-color: #d0d0d0;\n            background: linear-gradient(to bottom, #d0d0d0, #e0e0e0);\n        }\n\n        .cell.mine {\n            background-color: red;\n            color: white;\n        }\n\n        .cell.flagged::before { /* 这里写完才知道忘加了 */\n            content: \"🚩\";\n            position: absolute;\n            top: 50%;\n            left: 50%;\n            transform: translate(-50%, -50%);\n            font-size: 1.2em;\n        }\n\n\n        .win12-button {\n            background-color: #c0c0c0;\n            border: 2px solid #808080;\n            border-style: outset;\n            padding: 5px 10px;\n            cursor: pointer;\n            background: linear-gradient(to bottom, #c0c0c0, #d0d0d0);\n        }\n\n        .win12-button:active {\n            border-style: inset;\n        }\n\n        .modal {\n            display: none;\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background-color: rgba(0, 0, 0, 0.5);\n            justify-content: center;\n            align-items: center;\n        }\n\n        .modal-content {\n            background-color: #fefefe;\n            padding: 20px;\n            border: 1px solid #888;\n            width: 80%;\n            max-width: 500px;\n            background: linear-gradient(to bottom, #f0f0f0, #f8f8f8);\n        }\n\n        .close {\n            color: #aaa;\n            float: right;\n            font-size: 28px;\n            font-weight: bold;\n            cursor: pointer;\n        }\n\n        .close:hover,\n        .close:focus {\n            color: black;\n            text-decoration: none;\n            cursor: pointer;\n        }\n\n        .difficulty-selector {\n            display: flex;\n            gap: 10px;\n            margin-bottom: 10px;\n        }\n\n        .custom-difficulty {\n            display: flex;\n            flex-direction: column;\n            gap: 5px;\n        }\n\n        .custom-difficulty label {\n            font-size: 14px;\n        }\n\n        .custom-difficulty input {\n            padding: 5px;\n            border: 1px solid #ccc;\n            border-radius: 3px;\n        }\n    </style>\n</head>\n<body>\n\n<div class=\"container\">\n    <div class=\"game-info\">\n        <div id=\"mines-left\">0</div>\n        <button class=\"face-button\" id=\"reset-button\">🙂</button>\n        <div id=\"timer\">0</div>\n    </div>\n    <div class=\"grid\" id=\"grid\"></div>\n\n    <!-- Modal -->\n    <div id=\"modal\" class=\"modal\">\n        <div class=\"modal-content\">\n            <span class=\"close\" id=\"close-modal\">&times;</span>\n            <h2>游戏结束！</h2>\n            <p id=\"modal-message\"></p>\n            <button class=\"win12-button\" id=\"restart-button\">重新开始</button>\n        </div>\n    </div>\n\n    <!-- 模式-->\n    <div class=\"difficulty-selector\">\n        <button class=\"win12-button\" data-difficulty=\"easy\">简单 (9x9, 10雷)</button>\n        <button class=\"win12-button\" data-difficulty=\"medium\">中等 (16x16, 40雷)</button>\n        <button class=\"win12-button\" data-difficulty=\"hard\">困难 (16x30, 99雷)</button>\n        <div class=\"custom-difficulty\">\n            <label for=\"custom-rows\">行数:</label>\n            <input type=\"number\" id=\"custom-rows\" value=\"16\" min=\"5\" max=\"30\">\n            <label for=\"custom-cols\">列数:</label>\n            <input type=\"number\" id=\"custom-cols\" value=\"16\" min=\"5\" max=\"30\">\n            <label for=\"custom-mines\">雷数:</label>\n            <input type=\"number\" id=\"custom-mines\" value=\"40\" min=\"1\" max=\"899\">\n            <button class=\"win12-button\" id=\"custom-button\">自定义</button>\n        </div>\n    </div>\n\n</div>\n\n<script>\n    const gridElement = document.getElementById('grid');\n    const minesLeftElement = document.getElementById('mines-left');\n    const resetButton = document.getElementById('reset-button');\n    const timerElement = document.getElementById('timer');\n    const modal = document.getElementById('modal');\n    const closeModalButton = document.getElementById('close-modal');\n    const restartButton = document.getElementById('restart-button');\n    const modalMessage = document.getElementById('modal-message');\n    const difficultyButtons = document.querySelectorAll('.difficulty-selector button[data-difficulty]');\n    const customButton = document.getElementById('custom-button');\n    const customRowsInput = document.getElementById('custom-rows');\n    const customColsInput = document.getElementById('custom-cols');\n    const customMinesInput = document.getElementById('custom-mines');\n    //好丑啊这里\n\n\n    let grid = [];\n    let rows = 9;\n    let cols = 9;\n    let mines = 10;\n    let minesLeft = mines;\n    let isGameOver = false;\n    let timerInterval;\n    let seconds = 0;\n    let firstClick = true;\n\n\n    function createGrid() {\n        grid = [];\n        for (let i = 0; i < rows; i++) {\n            grid.push(Array(cols).fill(0));\n        }\n    }\n\n\n    function placeMines(initialRow, initialCol) {\n        let minesPlaced = 0;\n        while (minesPlaced < mines) {\n            const row = Math.floor(Math.random() * rows);\n            const col = Math.floor(Math.random() * cols);\n\n            if (grid[row][col] !== 'mine' && (row !== initialRow || col !== initialCol)) {\n                grid[row][col] = 'mine';\n                minesPlaced++;\n            }\n        }\n    }\n\n\n\n    function calculateNumbers() {\n        for (let i = 0; i < rows; i++) {\n            for (let j = 0; j < cols; j++) {\n                if (grid[i][j] !== 'mine') {\n                    let count = 0;\n                    for (let x = -1; x <= 1; x++) {\n                        for (let y = -1; y <= 1; y++) {\n                            if (i + x >= 0 && i + x < rows && j + y >= 0 && j + y < cols && grid[i + x][j + y] === 'mine') {\n                                count++;\n                            }\n                        }\n                    }\n                    grid[i][j] = count;\n                }\n            }\n        }\n    }\n\n\n    function renderGrid() {\n        gridElement.innerHTML = '';\n        gridElement.style.gridTemplateColumns = `repeat(${cols}, 1fr)`;\n\n        for (let i = 0; i < rows; i++) {\n            for (let j = 0; j < cols; j++) {\n                const cell = document.createElement('div');\n                cell.classList.add('cell');\n                cell.dataset.row = i;\n                cell.dataset.col = j;\n\n                cell.addEventListener('click', handleCellClick);\n                cell.addEventListener('contextmenu', handleCellRightClick);\n\n                gridElement.appendChild(cell);\n            }\n        }\n    }\n\n\n    function handleCellClick(event) {\n        if (isGameOver) return;\n\n        const cell = event.target;\n        const row = parseInt(cell.dataset.row);\n        const col = parseInt(cell.dataset.col);\n\n        if(firstClick) {\n            placeMines(row, col);\n            calculateNumbers();\n            firstClick = false;\n            startTimer();\n        }\n\n\n        if (cell.classList.contains('flagged')) return; // Ignore clicks on flagged cells\n\n        revealCell(row, col);\n    }\n\n    function handleCellRightClick(event) {\n        event.preventDefault(); // Prevent default context menu\n        if (isGameOver) return;\n\n        const cell = event.target;\n        const row = parseInt(cell.dataset.row);\n        const col = parseInt(cell.dataset.col);\n\n        toggleFlag(row, col, cell);\n    }\n\n    function toggleFlag(row, col, cell) {\n        if (grid[row][col] === 'revealed') return;\n\n        if (cell.classList.contains('flagged')) {\n            cell.classList.remove('flagged');\n            minesLeft++;\n        } else {\n            if(minesLeft > 0){\n                cell.classList.add('flagged');\n                minesLeft--;\n            }\n\n        }\n        minesLeftElement.textContent = minesLeft;\n    }\n\n\n    function revealCell(row, col) {\n        if (row < 0 || row >= rows || col < 0 || col >= cols || grid[row][col] === 'revealed') return;\n\n        const cell = document.querySelector(`[data-row=\"${row}\"][data-col=\"${col}\"]`);\n        if (!cell || cell.classList.contains('flagged')) return;\n\n\n        if (grid[row][col] === 'mine') {\n            cell.classList.add('mine', 'revealed');\n            gameOver(false);\n            return;\n        }\n\n        const value = grid[row][col];\n        grid[row][col] = 'revealed';\n        cell.classList.add('revealed');\n        cell.textContent = value === 0 ? '' : value;\n\n\n        if (value === 0) {\n            for (let x = -1; x <= 1; x++) {\n                for (let y = -1; y <= 1; y++) {\n                    revealCell(row + x, col + y);\n                }\n            }\n        }\n\n        checkWin();\n    }\n\n    function gameOver(win) {\n        isGameOver = true;\n        stopTimer();\n        resetButton.textContent = win ? \"😎\" : \"🤯\";\n\n        // Reveal all mines\n        for (let i = 0; i < rows; i++) {\n            for (let j = 0; j < cols; j++) {\n                const cell = document.querySelector(`[data-row=\"${i}\"][data-col=\"${j}\"]`);\n                if (grid[i][j] === 'mine' && cell) {\n                    cell.classList.add('mine', 'revealed');\n                }\n            }\n        }\n\n        modalMessage.textContent = win ? \"恭喜，你赢了！\" : \"游戏结束，你输了！\";\n        modal.style.display = \"flex\";\n    }\n\n\n    function checkWin() {\n        let revealedCount = 0;\n        for (let i = 0; i < rows; i++) {\n            for (let j = 0; j < cols; j++) {\n                if (grid[i][j] === 'revealed') {\n                    revealedCount++;\n                }\n            }\n        }\n        if (revealedCount === rows * cols - mines) {\n            gameOver(true);\n        }\n    }\n\n\n    function resetGame() {\n        isGameOver = false;\n        stopTimer();\n        seconds = 0;\n        firstClick = true;\n        timerElement.textContent = '0';\n        resetButton.textContent = '🙂';\n        minesLeft = mines;\n        minesLeftElement.textContent = minesLeft;\n        createGrid();\n        renderGrid();\n    }\n\n    function startTimer() {\n        timerInterval = setInterval(() => {\n            seconds++;\n            timerElement.textContent = seconds;\n        }, 1000);\n    }\n\n    function stopTimer() {\n        clearInterval(timerInterval);\n    }\n\n\n    // Event listeners\n    resetButton.addEventListener('click', resetGame);\n\n    closeModalButton.addEventListener('click', () => {\n        modal.style.display = \"none\";\n    });\n\n    restartButton.addEventListener('click', () => {\n        modal.style.display = \"none\";\n        resetGame();\n    });\n\n    difficultyButtons.forEach(button => {\n        button.addEventListener('click', () => {\n            const difficulty = button.dataset.difficulty;\n            if (difficulty === 'easy') {\n                rows = 9;\n                cols = 9;\n                mines = 10;\n            } else if (difficulty === 'medium') {\n                rows = 16;\n                cols = 16;\n                mines = 40;\n            } else if (difficulty === 'hard') {\n                rows = 16;\n                cols = 30;\n                mines = 99;\n            }\n            resetGame();\n        });\n    });\n\n    customButton.addEventListener('click', () => {\n        const customRows = parseInt(customRowsInput.value);\n        const customCols = parseInt(customColsInput.value);\n        const customMines = parseInt(customMinesInput.value);\n\n        if (customRows >= 5 && customRows <= 30 && customCols >= 5 && customCols <= 30 && customMines >= 1 && customMines < customRows * customCols) {\n            rows = customRows;\n            cols = customCols;\n            mines = customMines;\n            resetGame();\n        } else {\n            alert(\"自定义参数不合法，请重新设置。\");\n        }\n    });\n\n\n    // Initialize game\n    resetGame(); // Start with default settings\n</script>\n\n</body>\n</html>"
  },
  {
    "path": "icon/LICENSE",
    "content": "Attribution-ShareAlike 4.0 International\n\n=======================================================================\n\nCreative Commons Corporation (\"Creative Commons\") is not a law firm and\ndoes not provide legal services or legal advice. Distribution of\nCreative Commons public licenses does not create a lawyer-client or\nother relationship. Creative Commons makes its licenses and related\ninformation available on an \"as-is\" basis. Creative Commons gives no\nwarranties regarding its licenses, any material licensed under their\nterms and conditions, or any related information. Creative Commons\ndisclaims all liability for damages resulting from their use to the\nfullest extent possible.\n\nUsing Creative Commons Public Licenses\n\nCreative Commons public licenses provide a standard set of terms and\nconditions that creators and other rights holders may use to share\noriginal works of authorship and other material subject to copyright\nand certain other rights specified in the public license below. The\nfollowing considerations are for informational purposes only, are not\nexhaustive, and do not form part of our licenses.\n\n     Considerations for licensors: Our public licenses are\n     intended for use by those authorized to give the public\n     permission to use material in ways otherwise restricted by\n     copyright and certain other rights. Our licenses are\n     irrevocable. Licensors should read and understand the terms\n     and conditions of the license they choose before applying it.\n     Licensors should also secure all rights necessary before\n     applying our licenses so that the public can reuse the\n     material as expected. Licensors should clearly mark any\n     material not subject to the license. This includes other CC-\n     licensed material, or material used under an exception or\n     limitation to copyright. More considerations for licensors:\n     wiki.creativecommons.org/Considerations_for_licensors\n\n     Considerations for the public: By using one of our public\n     licenses, a licensor grants the public permission to use the\n     licensed material under specified terms and conditions. If\n     the licensor's permission is not necessary for any reason--for\n     example, because of any applicable exception or limitation to\n     copyright--then that use is not regulated by the license. Our\n     licenses grant only permissions under copyright and certain\n     other rights that a licensor has authority to grant. Use of\n     the licensed material may still be restricted for other\n     reasons, including because others have copyright or other\n     rights in the material. A licensor may make special requests,\n     such as asking that all changes be marked or described.\n     Although not required by our licenses, you are encouraged to\n     respect those requests where reasonable. More considerations\n     for the public:\n     wiki.creativecommons.org/Considerations_for_licensees\n\n=======================================================================\n\nCreative Commons Attribution-ShareAlike 4.0 International Public\nLicense\n\nBy exercising the Licensed Rights (defined below), You accept and agree\nto be bound by the terms and conditions of this Creative Commons\nAttribution-ShareAlike 4.0 International Public License (\"Public\nLicense\"). To the extent this Public License may be interpreted as a\ncontract, You are granted the Licensed Rights in consideration of Your\nacceptance of these terms and conditions, and the Licensor grants You\nsuch rights in consideration of benefits the Licensor receives from\nmaking the Licensed Material available under these terms and\nconditions.\n\n\nSection 1 -- Definitions.\n\n  a. Adapted Material means material subject to Copyright and Similar\n     Rights that is derived from or based upon the Licensed Material\n     and in which the Licensed Material is translated, altered,\n     arranged, transformed, or otherwise modified in a manner requiring\n     permission under the Copyright and Similar Rights held by the\n     Licensor. For purposes of this Public License, where the Licensed\n     Material is a musical work, performance, or sound recording,\n     Adapted Material is always produced where the Licensed Material is\n     synched in timed relation with a moving image.\n\n  b. Adapter's License means the license You apply to Your Copyright\n     and Similar Rights in Your contributions to Adapted Material in\n     accordance with the terms and conditions of this Public License.\n\n  c. BY-SA Compatible License means a license listed at\n     creativecommons.org/compatiblelicenses, approved by Creative\n     Commons as essentially the equivalent of this Public License.\n\n  d. Copyright and Similar Rights means copyright and/or similar rights\n     closely related to copyright including, without limitation,\n     performance, broadcast, sound recording, and Sui Generis Database\n     Rights, without regard to how the rights are labeled or\n     categorized. For purposes of this Public License, the rights\n     specified in Section 2(b)(1)-(2) are not Copyright and Similar\n     Rights.\n\n  e. Effective Technological Measures means those measures that, in the\n     absence of proper authority, may not be circumvented under laws\n     fulfilling obligations under Article 11 of the WIPO Copyright\n     Treaty adopted on December 20, 1996, and/or similar international\n     agreements.\n\n  f. Exceptions and Limitations means fair use, fair dealing, and/or\n     any other exception or limitation to Copyright and Similar Rights\n     that applies to Your use of the Licensed Material.\n\n  g. License Elements means the license attributes listed in the name\n     of a Creative Commons Public License. The License Elements of this\n     Public License are Attribution and ShareAlike.\n\n  h. Licensed Material means the artistic or literary work, database,\n     or other material to which the Licensor applied this Public\n     License.\n\n  i. Licensed Rights means the rights granted to You subject to the\n     terms and conditions of this Public License, which are limited to\n     all Copyright and Similar Rights that apply to Your use of the\n     Licensed Material and that the Licensor has authority to license.\n\n  j. Licensor means the individual(s) or entity(ies) granting rights\n     under this Public License.\n\n  k. Share means to provide material to the public by any means or\n     process that requires permission under the Licensed Rights, such\n     as reproduction, public display, public performance, distribution,\n     dissemination, communication, or importation, and to make material\n     available to the public including in ways that members of the\n     public may access the material from a place and at a time\n     individually chosen by them.\n\n  l. Sui Generis Database Rights means rights other than copyright\n     resulting from Directive 96/9/EC of the European Parliament and of\n     the Council of 11 March 1996 on the legal protection of databases,\n     as amended and/or succeeded, as well as other essentially\n     equivalent rights anywhere in the world.\n\n  m. You means the individual or entity exercising the Licensed Rights\n     under this Public License. Your has a corresponding meaning.\n\n\nSection 2 -- Scope.\n\n  a. License grant.\n\n       1. Subject to the terms and conditions of this Public License,\n          the Licensor hereby grants You a worldwide, royalty-free,\n          non-sublicensable, non-exclusive, irrevocable license to\n          exercise the Licensed Rights in the Licensed Material to:\n\n            a. reproduce and Share the Licensed Material, in whole or\n               in part; and\n\n            b. produce, reproduce, and Share Adapted Material.\n\n       2. Exceptions and Limitations. For the avoidance of doubt, where\n          Exceptions and Limitations apply to Your use, this Public\n          License does not apply, and You do not need to comply with\n          its terms and conditions.\n\n       3. Term. The term of this Public License is specified in Section\n          6(a).\n\n       4. Media and formats; technical modifications allowed. The\n          Licensor authorizes You to exercise the Licensed Rights in\n          all media and formats whether now known or hereafter created,\n          and to make technical modifications necessary to do so. The\n          Licensor waives and/or agrees not to assert any right or\n          authority to forbid You from making technical modifications\n          necessary to exercise the Licensed Rights, including\n          technical modifications necessary to circumvent Effective\n          Technological Measures. For purposes of this Public License,\n          simply making modifications authorized by this Section 2(a)\n          (4) never produces Adapted Material.\n\n       5. Downstream recipients.\n\n            a. Offer from the Licensor -- Licensed Material. Every\n               recipient of the Licensed Material automatically\n               receives an offer from the Licensor to exercise the\n               Licensed Rights under the terms and conditions of this\n               Public License.\n\n            b. Additional offer from the Licensor -- Adapted Material.\n               Every recipient of Adapted Material from You\n               automatically receives an offer from the Licensor to\n               exercise the Licensed Rights in the Adapted Material\n               under the conditions of the Adapter's License You apply.\n\n            c. No downstream restrictions. You may not offer or impose\n               any additional or different terms or conditions on, or\n               apply any Effective Technological Measures to, the\n               Licensed Material if doing so restricts exercise of the\n               Licensed Rights by any recipient of the Licensed\n               Material.\n\n       6. No endorsement. Nothing in this Public License constitutes or\n          may be construed as permission to assert or imply that You\n          are, or that Your use of the Licensed Material is, connected\n          with, or sponsored, endorsed, or granted official status by,\n          the Licensor or others designated to receive attribution as\n          provided in Section 3(a)(1)(A)(i).\n\n  b. Other rights.\n\n       1. Moral rights, such as the right of integrity, are not\n          licensed under this Public License, nor are publicity,\n          privacy, and/or other similar personality rights; however, to\n          the extent possible, the Licensor waives and/or agrees not to\n          assert any such rights held by the Licensor to the limited\n          extent necessary to allow You to exercise the Licensed\n          Rights, but not otherwise.\n\n       2. Patent and trademark rights are not licensed under this\n          Public License.\n\n       3. To the extent possible, the Licensor waives any right to\n          collect royalties from You for the exercise of the Licensed\n          Rights, whether directly or through a collecting society\n          under any voluntary or waivable statutory or compulsory\n          licensing scheme. In all other cases the Licensor expressly\n          reserves any right to collect such royalties.\n\n\nSection 3 -- License Conditions.\n\nYour exercise of the Licensed Rights is expressly made subject to the\nfollowing conditions.\n\n  a. Attribution.\n\n       1. If You Share the Licensed Material (including in modified\n          form), You must:\n\n            a. retain the following if it is supplied by the Licensor\n               with the Licensed Material:\n\n                 i. identification of the creator(s) of the Licensed\n                    Material and any others designated to receive\n                    attribution, in any reasonable manner requested by\n                    the Licensor (including by pseudonym if\n                    designated);\n\n                ii. a copyright notice;\n\n               iii. a notice that refers to this Public License;\n\n                iv. a notice that refers to the disclaimer of\n                    warranties;\n\n                 v. a URI or hyperlink to the Licensed Material to the\n                    extent reasonably practicable;\n\n            b. indicate if You modified the Licensed Material and\n               retain an indication of any previous modifications; and\n\n            c. indicate the Licensed Material is licensed under this\n               Public License, and include the text of, or the URI or\n               hyperlink to, this Public License.\n\n       2. You may satisfy the conditions in Section 3(a)(1) in any\n          reasonable manner based on the medium, means, and context in\n          which You Share the Licensed Material. For example, it may be\n          reasonable to satisfy the conditions by providing a URI or\n          hyperlink to a resource that includes the required\n          information.\n\n       3. If requested by the Licensor, You must remove any of the\n          information required by Section 3(a)(1)(A) to the extent\n          reasonably practicable.\n\n  b. ShareAlike.\n\n     In addition to the conditions in Section 3(a), if You Share\n     Adapted Material You produce, the following conditions also apply.\n\n       1. The Adapter's License You apply must be a Creative Commons\n          license with the same License Elements, this version or\n          later, or a BY-SA Compatible License.\n\n       2. You must include the text of, or the URI or hyperlink to, the\n          Adapter's License You apply. You may satisfy this condition\n          in any reasonable manner based on the medium, means, and\n          context in which You Share Adapted Material.\n\n       3. You may not offer or impose any additional or different terms\n          or conditions on, or apply any Effective Technological\n          Measures to, Adapted Material that restrict exercise of the\n          rights granted under the Adapter's License You apply.\n\n\nSection 4 -- Sui Generis Database Rights.\n\nWhere the Licensed Rights include Sui Generis Database Rights that\napply to Your use of the Licensed Material:\n\n  a. for the avoidance of doubt, Section 2(a)(1) grants You the right\n     to extract, reuse, reproduce, and Share all or a substantial\n     portion of the contents of the database;\n\n  b. if You include all or a substantial portion of the database\n     contents in a database in which You have Sui Generis Database\n     Rights, then the database in which You have Sui Generis Database\n     Rights (but not its individual contents) is Adapted Material,\n     including for purposes of Section 3(b); and\n\n  c. You must comply with the conditions in Section 3(a) if You Share\n     all or a substantial portion of the contents of the database.\n\nFor the avoidance of doubt, this Section 4 supplements and does not\nreplace Your obligations under this Public License where the Licensed\nRights include other Copyright and Similar Rights.\n\n\nSection 5 -- Disclaimer of Warranties and Limitation of Liability.\n\n  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE\n     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS\n     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF\n     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,\n     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,\n     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR\n     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,\n     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT\n     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT\n     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.\n\n  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE\n     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,\n     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,\n     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,\n     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR\n     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN\n     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR\n     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR\n     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.\n\n  c. The disclaimer of warranties and limitation of liability provided\n     above shall be interpreted in a manner that, to the extent\n     possible, most closely approximates an absolute disclaimer and\n     waiver of all liability.\n\n\nSection 6 -- Term and Termination.\n\n  a. This Public License applies for the term of the Copyright and\n     Similar Rights licensed here. However, if You fail to comply with\n     this Public License, then Your rights under this Public License\n     terminate automatically.\n\n  b. Where Your right to use the Licensed Material has terminated under\n     Section 6(a), it reinstates:\n\n       1. automatically as of the date the violation is cured, provided\n          it is cured within 30 days of Your discovery of the\n          violation; or\n\n       2. upon express reinstatement by the Licensor.\n\n     For the avoidance of doubt, this Section 6(b) does not affect any\n     right the Licensor may have to seek remedies for Your violations\n     of this Public License.\n\n  c. For the avoidance of doubt, the Licensor may also offer the\n     Licensed Material under separate terms or conditions or stop\n     distributing the Licensed Material at any time; however, doing so\n     will not terminate this Public License.\n\n  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public\n     License.\n\n\nSection 7 -- Other Terms and Conditions.\n\n  a. The Licensor shall not be bound by any additional or different\n     terms or conditions communicated by You unless expressly agreed.\n\n  b. Any arrangements, understandings, or agreements regarding the\n     Licensed Material not stated herein are separate from and\n     independent of the terms and conditions of this Public License.\n\n\nSection 8 -- Interpretation.\n\n  a. For the avoidance of doubt, this Public License does not, and\n     shall not be interpreted to, reduce, limit, restrict, or impose\n     conditions on any use of the Licensed Material that could lawfully\n     be made without permission under this Public License.\n\n  b. To the extent possible, if any provision of this Public License is\n     deemed unenforceable, it shall be automatically reformed to the\n     minimum extent necessary to make it enforceable. If the provision\n     cannot be reformed, it shall be severed from this Public License\n     without affecting the enforceability of the remaining terms and\n     conditions.\n\n  c. No term or condition of this Public License will be waived and no\n     failure to comply consented to unless expressly agreed to by the\n     Licensor.\n\n  d. Nothing in this Public License constitutes or may be interpreted\n     as a limitation upon, or waiver of, any privileges and immunities\n     that apply to the Licensor or You, including from the legal\n     processes of any jurisdiction or authority.\n\n\n=======================================================================\n\nCreative Commons is not a party to its public licenses.\nNotwithstanding, Creative Commons may elect to apply one of its public\nlicenses to material it publishes and in those instances will be\nconsidered the “Licensor.” The text of the Creative Commons public\nlicenses is dedicated to the public domain under the CC0 Public Domain\nDedication. Except for the limited purpose of indicating that material\nis shared under a Creative Commons public license or as otherwise\npermitted by the Creative Commons policies published at\ncreativecommons.org/policies, Creative Commons does not authorize the\nuse of the trademark \"Creative Commons\" or any other trademark or logo\nof Creative Commons without its prior written consent including,\nwithout limitation, in connection with any unauthorized modifications\nto any of its public licenses or any other arrangements,\nunderstandings, or agreements concerning use of licensed material. For\nthe avoidance of doubt, this paragraph does not form part of the public\nlicenses.\n\nCreative Commons may be contacted at creativecommons.org.\n"
  },
  {
    "path": "icon/NOTICE.md",
    "content": "# 非“自由版权”文件列表\n>[!CAUTION]\n>本列表内所列文件受著作权保护！相关文件属合理使用范畴。<br>本列表内所列文件可能含有受商标法或其他类似法律、法规保护的内容。\n\n| 文件名称 | 备注| \n| --- | --- |\n|bilibili.png|是上海宽娱数码科技有限公司的商标| \n|office.png|是微软公司的商标|\n|vscode.png|是微软公司的商标|\n|wsa.png|无|\n|excel.png|无|\n|exefile.png|无|\n|explorer.png|无|\n|img.png|无|\n|music.png|无|\n|picture.png|无|\n|ppt.png|无|\n|txt.png|无|\n|vidio.png|无|\n|word.png|无|\n|pythonEditor.svg|是JetBrains s.r.o.的商标|\n|python.svg|是Python软件基金会的商标|\n|word.svg|是微软公司的商标|"
  },
  {
    "path": "img/LICENSE",
    "content": "Attribution-ShareAlike 4.0 International\n\n=======================================================================\n\nCreative Commons Corporation (\"Creative Commons\") is not a law firm and\ndoes not provide legal services or legal advice. Distribution of\nCreative Commons public licenses does not create a lawyer-client or\nother relationship. Creative Commons makes its licenses and related\ninformation available on an \"as-is\" basis. Creative Commons gives no\nwarranties regarding its licenses, any material licensed under their\nterms and conditions, or any related information. Creative Commons\ndisclaims all liability for damages resulting from their use to the\nfullest extent possible.\n\nUsing Creative Commons Public Licenses\n\nCreative Commons public licenses provide a standard set of terms and\nconditions that creators and other rights holders may use to share\noriginal works of authorship and other material subject to copyright\nand certain other rights specified in the public license below. The\nfollowing considerations are for informational purposes only, are not\nexhaustive, and do not form part of our licenses.\n\n     Considerations for licensors: Our public licenses are\n     intended for use by those authorized to give the public\n     permission to use material in ways otherwise restricted by\n     copyright and certain other rights. Our licenses are\n     irrevocable. Licensors should read and understand the terms\n     and conditions of the license they choose before applying it.\n     Licensors should also secure all rights necessary before\n     applying our licenses so that the public can reuse the\n     material as expected. Licensors should clearly mark any\n     material not subject to the license. This includes other CC-\n     licensed material, or material used under an exception or\n     limitation to copyright. More considerations for licensors:\n     wiki.creativecommons.org/Considerations_for_licensors\n\n     Considerations for the public: By using one of our public\n     licenses, a licensor grants the public permission to use the\n     licensed material under specified terms and conditions. If\n     the licensor's permission is not necessary for any reason--for\n     example, because of any applicable exception or limitation to\n     copyright--then that use is not regulated by the license. Our\n     licenses grant only permissions under copyright and certain\n     other rights that a licensor has authority to grant. Use of\n     the licensed material may still be restricted for other\n     reasons, including because others have copyright or other\n     rights in the material. A licensor may make special requests,\n     such as asking that all changes be marked or described.\n     Although not required by our licenses, you are encouraged to\n     respect those requests where reasonable. More considerations\n     for the public:\n     wiki.creativecommons.org/Considerations_for_licensees\n\n=======================================================================\n\nCreative Commons Attribution-ShareAlike 4.0 International Public\nLicense\n\nBy exercising the Licensed Rights (defined below), You accept and agree\nto be bound by the terms and conditions of this Creative Commons\nAttribution-ShareAlike 4.0 International Public License (\"Public\nLicense\"). To the extent this Public License may be interpreted as a\ncontract, You are granted the Licensed Rights in consideration of Your\nacceptance of these terms and conditions, and the Licensor grants You\nsuch rights in consideration of benefits the Licensor receives from\nmaking the Licensed Material available under these terms and\nconditions.\n\n\nSection 1 -- Definitions.\n\n  a. Adapted Material means material subject to Copyright and Similar\n     Rights that is derived from or based upon the Licensed Material\n     and in which the Licensed Material is translated, altered,\n     arranged, transformed, or otherwise modified in a manner requiring\n     permission under the Copyright and Similar Rights held by the\n     Licensor. For purposes of this Public License, where the Licensed\n     Material is a musical work, performance, or sound recording,\n     Adapted Material is always produced where the Licensed Material is\n     synched in timed relation with a moving image.\n\n  b. Adapter's License means the license You apply to Your Copyright\n     and Similar Rights in Your contributions to Adapted Material in\n     accordance with the terms and conditions of this Public License.\n\n  c. BY-SA Compatible License means a license listed at\n     creativecommons.org/compatiblelicenses, approved by Creative\n     Commons as essentially the equivalent of this Public License.\n\n  d. Copyright and Similar Rights means copyright and/or similar rights\n     closely related to copyright including, without limitation,\n     performance, broadcast, sound recording, and Sui Generis Database\n     Rights, without regard to how the rights are labeled or\n     categorized. For purposes of this Public License, the rights\n     specified in Section 2(b)(1)-(2) are not Copyright and Similar\n     Rights.\n\n  e. Effective Technological Measures means those measures that, in the\n     absence of proper authority, may not be circumvented under laws\n     fulfilling obligations under Article 11 of the WIPO Copyright\n     Treaty adopted on December 20, 1996, and/or similar international\n     agreements.\n\n  f. Exceptions and Limitations means fair use, fair dealing, and/or\n     any other exception or limitation to Copyright and Similar Rights\n     that applies to Your use of the Licensed Material.\n\n  g. License Elements means the license attributes listed in the name\n     of a Creative Commons Public License. The License Elements of this\n     Public License are Attribution and ShareAlike.\n\n  h. Licensed Material means the artistic or literary work, database,\n     or other material to which the Licensor applied this Public\n     License.\n\n  i. Licensed Rights means the rights granted to You subject to the\n     terms and conditions of this Public License, which are limited to\n     all Copyright and Similar Rights that apply to Your use of the\n     Licensed Material and that the Licensor has authority to license.\n\n  j. Licensor means the individual(s) or entity(ies) granting rights\n     under this Public License.\n\n  k. Share means to provide material to the public by any means or\n     process that requires permission under the Licensed Rights, such\n     as reproduction, public display, public performance, distribution,\n     dissemination, communication, or importation, and to make material\n     available to the public including in ways that members of the\n     public may access the material from a place and at a time\n     individually chosen by them.\n\n  l. Sui Generis Database Rights means rights other than copyright\n     resulting from Directive 96/9/EC of the European Parliament and of\n     the Council of 11 March 1996 on the legal protection of databases,\n     as amended and/or succeeded, as well as other essentially\n     equivalent rights anywhere in the world.\n\n  m. You means the individual or entity exercising the Licensed Rights\n     under this Public License. Your has a corresponding meaning.\n\n\nSection 2 -- Scope.\n\n  a. License grant.\n\n       1. Subject to the terms and conditions of this Public License,\n          the Licensor hereby grants You a worldwide, royalty-free,\n          non-sublicensable, non-exclusive, irrevocable license to\n          exercise the Licensed Rights in the Licensed Material to:\n\n            a. reproduce and Share the Licensed Material, in whole or\n               in part; and\n\n            b. produce, reproduce, and Share Adapted Material.\n\n       2. Exceptions and Limitations. For the avoidance of doubt, where\n          Exceptions and Limitations apply to Your use, this Public\n          License does not apply, and You do not need to comply with\n          its terms and conditions.\n\n       3. Term. The term of this Public License is specified in Section\n          6(a).\n\n       4. Media and formats; technical modifications allowed. The\n          Licensor authorizes You to exercise the Licensed Rights in\n          all media and formats whether now known or hereafter created,\n          and to make technical modifications necessary to do so. The\n          Licensor waives and/or agrees not to assert any right or\n          authority to forbid You from making technical modifications\n          necessary to exercise the Licensed Rights, including\n          technical modifications necessary to circumvent Effective\n          Technological Measures. For purposes of this Public License,\n          simply making modifications authorized by this Section 2(a)\n          (4) never produces Adapted Material.\n\n       5. Downstream recipients.\n\n            a. Offer from the Licensor -- Licensed Material. Every\n               recipient of the Licensed Material automatically\n               receives an offer from the Licensor to exercise the\n               Licensed Rights under the terms and conditions of this\n               Public License.\n\n            b. Additional offer from the Licensor -- Adapted Material.\n               Every recipient of Adapted Material from You\n               automatically receives an offer from the Licensor to\n               exercise the Licensed Rights in the Adapted Material\n               under the conditions of the Adapter's License You apply.\n\n            c. No downstream restrictions. You may not offer or impose\n               any additional or different terms or conditions on, or\n               apply any Effective Technological Measures to, the\n               Licensed Material if doing so restricts exercise of the\n               Licensed Rights by any recipient of the Licensed\n               Material.\n\n       6. No endorsement. Nothing in this Public License constitutes or\n          may be construed as permission to assert or imply that You\n          are, or that Your use of the Licensed Material is, connected\n          with, or sponsored, endorsed, or granted official status by,\n          the Licensor or others designated to receive attribution as\n          provided in Section 3(a)(1)(A)(i).\n\n  b. Other rights.\n\n       1. Moral rights, such as the right of integrity, are not\n          licensed under this Public License, nor are publicity,\n          privacy, and/or other similar personality rights; however, to\n          the extent possible, the Licensor waives and/or agrees not to\n          assert any such rights held by the Licensor to the limited\n          extent necessary to allow You to exercise the Licensed\n          Rights, but not otherwise.\n\n       2. Patent and trademark rights are not licensed under this\n          Public License.\n\n       3. To the extent possible, the Licensor waives any right to\n          collect royalties from You for the exercise of the Licensed\n          Rights, whether directly or through a collecting society\n          under any voluntary or waivable statutory or compulsory\n          licensing scheme. In all other cases the Licensor expressly\n          reserves any right to collect such royalties.\n\n\nSection 3 -- License Conditions.\n\nYour exercise of the Licensed Rights is expressly made subject to the\nfollowing conditions.\n\n  a. Attribution.\n\n       1. If You Share the Licensed Material (including in modified\n          form), You must:\n\n            a. retain the following if it is supplied by the Licensor\n               with the Licensed Material:\n\n                 i. identification of the creator(s) of the Licensed\n                    Material and any others designated to receive\n                    attribution, in any reasonable manner requested by\n                    the Licensor (including by pseudonym if\n                    designated);\n\n                ii. a copyright notice;\n\n               iii. a notice that refers to this Public License;\n\n                iv. a notice that refers to the disclaimer of\n                    warranties;\n\n                 v. a URI or hyperlink to the Licensed Material to the\n                    extent reasonably practicable;\n\n            b. indicate if You modified the Licensed Material and\n               retain an indication of any previous modifications; and\n\n            c. indicate the Licensed Material is licensed under this\n               Public License, and include the text of, or the URI or\n               hyperlink to, this Public License.\n\n       2. You may satisfy the conditions in Section 3(a)(1) in any\n          reasonable manner based on the medium, means, and context in\n          which You Share the Licensed Material. For example, it may be\n          reasonable to satisfy the conditions by providing a URI or\n          hyperlink to a resource that includes the required\n          information.\n\n       3. If requested by the Licensor, You must remove any of the\n          information required by Section 3(a)(1)(A) to the extent\n          reasonably practicable.\n\n  b. ShareAlike.\n\n     In addition to the conditions in Section 3(a), if You Share\n     Adapted Material You produce, the following conditions also apply.\n\n       1. The Adapter's License You apply must be a Creative Commons\n          license with the same License Elements, this version or\n          later, or a BY-SA Compatible License.\n\n       2. You must include the text of, or the URI or hyperlink to, the\n          Adapter's License You apply. You may satisfy this condition\n          in any reasonable manner based on the medium, means, and\n          context in which You Share Adapted Material.\n\n       3. You may not offer or impose any additional or different terms\n          or conditions on, or apply any Effective Technological\n          Measures to, Adapted Material that restrict exercise of the\n          rights granted under the Adapter's License You apply.\n\n\nSection 4 -- Sui Generis Database Rights.\n\nWhere the Licensed Rights include Sui Generis Database Rights that\napply to Your use of the Licensed Material:\n\n  a. for the avoidance of doubt, Section 2(a)(1) grants You the right\n     to extract, reuse, reproduce, and Share all or a substantial\n     portion of the contents of the database;\n\n  b. if You include all or a substantial portion of the database\n     contents in a database in which You have Sui Generis Database\n     Rights, then the database in which You have Sui Generis Database\n     Rights (but not its individual contents) is Adapted Material,\n     including for purposes of Section 3(b); and\n\n  c. You must comply with the conditions in Section 3(a) if You Share\n     all or a substantial portion of the contents of the database.\n\nFor the avoidance of doubt, this Section 4 supplements and does not\nreplace Your obligations under this Public License where the Licensed\nRights include other Copyright and Similar Rights.\n\n\nSection 5 -- Disclaimer of Warranties and Limitation of Liability.\n\n  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE\n     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS\n     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF\n     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,\n     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,\n     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR\n     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,\n     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT\n     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT\n     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.\n\n  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE\n     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,\n     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,\n     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,\n     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR\n     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN\n     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR\n     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR\n     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.\n\n  c. The disclaimer of warranties and limitation of liability provided\n     above shall be interpreted in a manner that, to the extent\n     possible, most closely approximates an absolute disclaimer and\n     waiver of all liability.\n\n\nSection 6 -- Term and Termination.\n\n  a. This Public License applies for the term of the Copyright and\n     Similar Rights licensed here. However, if You fail to comply with\n     this Public License, then Your rights under this Public License\n     terminate automatically.\n\n  b. Where Your right to use the Licensed Material has terminated under\n     Section 6(a), it reinstates:\n\n       1. automatically as of the date the violation is cured, provided\n          it is cured within 30 days of Your discovery of the\n          violation; or\n\n       2. upon express reinstatement by the Licensor.\n\n     For the avoidance of doubt, this Section 6(b) does not affect any\n     right the Licensor may have to seek remedies for Your violations\n     of this Public License.\n\n  c. For the avoidance of doubt, the Licensor may also offer the\n     Licensed Material under separate terms or conditions or stop\n     distributing the Licensed Material at any time; however, doing so\n     will not terminate this Public License.\n\n  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public\n     License.\n\n\nSection 7 -- Other Terms and Conditions.\n\n  a. The Licensor shall not be bound by any additional or different\n     terms or conditions communicated by You unless expressly agreed.\n\n  b. Any arrangements, understandings, or agreements regarding the\n     Licensed Material not stated herein are separate from and\n     independent of the terms and conditions of this Public License.\n\n\nSection 8 -- Interpretation.\n\n  a. For the avoidance of doubt, this Public License does not, and\n     shall not be interpreted to, reduce, limit, restrict, or impose\n     conditions on any use of the Licensed Material that could lawfully\n     be made without permission under this Public License.\n\n  b. To the extent possible, if any provision of this Public License is\n     deemed unenforceable, it shall be automatically reformed to the\n     minimum extent necessary to make it enforceable. If the provision\n     cannot be reformed, it shall be severed from this Public License\n     without affecting the enforceability of the remaining terms and\n     conditions.\n\n  c. No term or condition of this Public License will be waived and no\n     failure to comply consented to unless expressly agreed to by the\n     Licensor.\n\n  d. Nothing in this Public License constitutes or may be interpreted\n     as a limitation upon, or waiver of, any privileges and immunities\n     that apply to the Licensor or You, including from the legal\n     processes of any jurisdiction or authority.\n\n\n=======================================================================\n\nCreative Commons is not a party to its public licenses.\nNotwithstanding, Creative Commons may elect to apply one of its public\nlicenses to material it publishes and in those instances will be\nconsidered the “Licensor.” The text of the Creative Commons public\nlicenses is dedicated to the public domain under the CC0 Public Domain\nDedication. Except for the limited purpose of indicating that material\nis shared under a Creative Commons public license or as otherwise\npermitted by the Creative Commons policies published at\ncreativecommons.org/policies, Creative Commons does not authorize the\nuse of the trademark \"Creative Commons\" or any other trademark or logo\nof Creative Commons without its prior written consent including,\nwithout limitation, in connection with any unauthorized modifications\nto any of its public licenses or any other arrangements,\nunderstandings, or agreements concerning use of licensed material. For\nthe avoidance of doubt, this paragraph does not form part of the public\nlicenses.\n\nCreative Commons may be contacted at creativecommons.org.\n"
  },
  {
    "path": "img/NOTICE.md",
    "content": "# 非“自由版权”文件列表\n>[!CAUTION]\n>本列表内所列文件受著作权保护！相关文件属合理使用范畴。<br>本列表内所列文件可能含有受商标法或其他类似法律、法规保护的内容。\n\n| 文件名称 | 备注| \n| --- | --- |\n|earth.webp|无| \n|Bing.svg|是微软公司的商标|\n|office.png|无|\n|win11.jpg|无|\n|win13.jpg|无|\n|yq.jpg|无|\n|earth.webp|无|\n|mc.jpg|无|\n|corsiri.svg|无|"
  },
  {
    "path": "index.html",
    "content": ""
  },
  {
    "path": "lang/README_trans.md",
    "content": "# trans.py 使用说明\n## 简介 / Introduction\n这是一个简单的交互式标注工具，用来给 HTML 标签插入 `data-i18n` 属性，并把翻译键值写入属性文件（`.properties`）。\n\nThis is a simple interactive annotation tool used to insert the `data-i18n` attribute into HTML tags and write translation key-value pairs to a properties file (`.properties`).\n## 用法 / Usage\n\n- 启动后会询问起始行号（1-based），直接回车从第 1 行开始。<br>After startup, you will be prompted for the starting line number (1‑based). Press Enter directly to start from line 1.\n- 上下方向键：切换行。<br>Up/down arrow keys: Switch lines.\n- 左右方向键：移动光标位置（插入位置）。<br>Left/right arrow keys: Move the cursor position (insertion point).\n- 回车：跳到下一行。<br>Enter: Jump to the next line.\n- 按 `Space` 或 `/`：进入输入模式，写入 `data-i18n`。<br>Press Space or /: Enter input mode and write data-i18n.\n- 按 `Esc`：保存并退出。<br>Press Esc: Save and exit.\n\n## 输入模式 / Input Mode\n\n输入格式支持两种 Two input formats are supported:\n\n- `key=value`：在当前行插入 `data-i18n=\"key\"`，并把 `key=value` 追加写入属性文件。<br>`key=value`: Inserts `data-i18n=\"key\"` at the current line, and appends `key=value` to the properties file.\n- `key`：只插入 `data-i18n=\"key\"`，不写入属性文件。<br>`key`: Only inserts `data-i18n=\"key\"` without writing to the properties file.\n\n输入完成后会自动跳到下一行。<br>\nAfter completing the input, it will automatically jump to the next line.\n\n## 示例 / Examples\n\n在光标处输入 Enter the following at the cursor position:\n\n```\napp.title=Windows 12\n```\n\n会把当前 HTML 行改为 This will modify the current HTML line to:\n\n```html\n... data-i18n=\"app.title\" ...\n```\n\n并在属性文件追加 And append the following to the properties file:\n\n```\napp.title=Windows 12\n```\n## 反馈 / Feedback\n如若发现任何问题，欢迎通过提交issues向我们提交反馈。\n<br>If you find any issues, feel free to submit feedback to us via GitHub Issues."
  },
  {
    "path": "lang/lang.properties",
    "content": "# Base language file for jQuery i18n properties\n# This file is intentionally minimal to prevent 404 errors"
  },
  {
    "path": "lang/lang_en.properties",
    "content": "updating=Updating\ncover-hp=Landscape for the best experience\nlogin=Login\nwelcome=Welcome\nstmenu-avlb=Available\nstmenu-webapp=Webapps\nbilibili.name=Bilibili\nwsa.name=Windows Subsystem for Android™\nfolder.doc=Documents\nfolder.pic=Pictures\nfolder.mus=Music\nstmenu-pinned=Pinned\nstmenu-allapp=All\nfeedback.name=Feedback Hub\nstmenu-tj=Recommended\nstmenu-tj-f1=How to use bottle caps scientifically.pptx\nstmenu-tj-t1=5 minutes ago\nstmenu-tj-f2=Coca Cola bottle cap.jpg\nstmenu-tj-t2=7 minutes ago\nstmenu-tj-f3=Bottle cap construction diagram.jpg\nstmenu-tj-t3=16 minutes ago\nstmenu-tj-f4=The structure and function of bottle caps.docx\nstmenu-tj-t4=24 minutes ago\nstmenu-tj-f5=The thickness of Coca Cola bottle caps.xlsx\nstmenu-tj-t5=35 minutes ago\nsch-app=Apps\nsch-doc=Documents\nsch-web=Web\nsch-setting=Settings\nsch-folder=Folders\nsch-photo=Photos\nsch-tj=Recommended\nsch-open=Open\nsch-opfl=Open file location\nsch-cpp=Copy path\nsch-ph=Type here to serach\nwidget=Widgets\nwidget-news=News\nwidget-news-res=We are not responsible for news content.\nctrl-blue=Bluetooth\nctrl-air=Airplane mode\nctrl-eye=Eye protection\nctrl-hotspot=Mobile hotspot\nctrl-acc=Accessibility\ndata-week=<p>Mon</p><p>Tue</p><p>Wed</p><p>Thu</p><p>Fri</p><p>Sat</p><p>Sun</p>\neditmd-add=Add widget\n\n\npsnl=Personalize\nhome=Home\napply=Apply\nok=OK\ncancel=Cancel\nall=All\nmore=More\nclose=Close\nrefresh=Refresh\nopen=Open\ndel=Delete\n\ndesktop.tgltheme=Toggle color mode\ndesktop.vogithub=View on Github\ndesktop.exitedit=Exit editing mode\ndesktop.enteredit=Enter editing mode\n\nnts.about=<p class=\"tit\">Windows 12 Online</p><p>Windows 12 Online is an open source project,<br>which aims to provide users with a pre experience of Windows 12 online<br />It is not consistent with official version of Windows 12.<br />Using standard network technologies such as HTML, CSS and JS.<br />This project is not affiliated with Microsoft and should not be<br> confused with Microsoft products.<br> It is also not Windows365 cloud PC.<br>Microsoft, Windows, and other demonstration products in this project<br> are trademarks of Microsoft Corporation.<br />Android in this project is a trademark of Google Inc.</p>\nnts.feedback.name=Feedback\nnts.feedback.txt=We place great emphasis on user experience and feedback.\nnts.feedback.github=Submit an issue on GitHub (requires a GitHub account)\nnts.addwg=Add a widget\nnts.addwg.weather=Weather\nnts.addwg.monitor=Resource monitor\nnts.fs-api-unsupported=<p class=\"tit\">Unsupported Feature</p><p>Your browser does not support the File System Access API. Please use Chrome or Edge.</p>\nnts.fs-mount-error=<p class=\"tit\">Mount Failed</p><p>Unable to mount local folder. Permission may have been denied.</p>\nnts.unsupported-file-type=<p class=\"tit\">Cannot Open File</p><p>No application found to open this file type.</p>\nnts.file-read-error=<p class=\"tit\">Read Failed</p><p>Unable to read file contents. Permission may have expired.</p>\nnts.file-write-error=<p class=\"tit\">Save Failed</p><p>Unable to write file. Permission may have expired.</p>\n\n\nwindow.restore=Restore\nwindow.min=Minimize\nwindow.max=Maximize\nwindow.close=Close\n\n# calc\ncalc.name=Calculator\ncalc.error.zero=<p class=\"tit\">Error</p><p>The divisor cannot be 0</p>\n\n\n# defender\ndefender.name=Windows Security\ndefender.virus=Virus & threat protection\ndefender.account=Account protection\ndefender.firewall=Firewall & network protection\ndefender.device=Device security\ndefender.glance=Security at a glance\ndefender.network=Network usage\ndefender.speed=Network speed\ndefender.clearv=Intrusion virus clearance\ndefender.allvc=All viruses have been cleared.\ndefender.freq=Frequency of virus attacks\ndefender.netreq=Network requests\ndefender.netreq-thismonth=This month\ndefender.recreq=Request record\n\n\n# msstore\nmsstore.apps=Apps\nmsstore.games=Gaming\nmsstore.download=Downloads\nmsstore.topfree=Top free apps >\nmsstore.free=Free\nmsstore.devtool=Developer tools\nmsstore.genimp=Genshin Impact\nmsstore.game=Game\nmsstore.mc=Minecraft\nmsstore.design=Multimedia design\nmsstore.tool=Utilities & tools\nmsstore.business=Business\n\n\n# setting\nsetting.name=Settings\nsetting.usrname=Starry bottle\nsetting.sch=Find a setting\n\nsetting.system=System\nsetting.device=Bluetooth & devices\nsetting.network=Network & internet\n\nsetting.psnl=Personalization\nsetting.psnl.color=Colors\nsetting.psnl.color-dt=Set accent color in Windows\nsetting.psnl.color.now=Now\nsetting.psnl.color.custom=Custom color\nsetting.psnl.theme=Themes\nsetting.psnl.theme-dt=(!Consuming a large amount of GitHub API limits!) Set the theme for Windows. Do you want to <span class=\"a jump\" win12_title=\"https://github.com/tjy-gitnub/win12-theme\" onclick=\"window.open('https://github.com/tjy-gitnub/win12-theme','_blank')\">upload your own theme</span>?\nsetting.psnl.round=Rounded corner\nsetting.psnl.round-dt=Set whether to enable rounded corners in Windows.\nsetting.psnl.animation=Animation effects\nsetting.psnl.animation-dt=Set whether to enable animation effects\nsetting.psnl.shadow=Shadow\nsetting.psnl.shadow-dt=Set whether to enable shadow effect\nsetting.psnl.alltransp=Transparency effects for all windows\nsetting.psnl.alltransp-dt=Enable transparency effects for all windows, not just for the focus window <span class=\"a jump\" win12_title=\"It will occupy a large amount of GPU and may cause lag\">For details</span>\nsetting.psnl.mica=Mica effects (Beta)\nsetting.psnl.mica-dt=Enable mica effects for the focus window\nsetting.psnl.startup-sound=Sound effect after startup\nsetting.psnl.startup-sound-dt=Set whether to play the sound effect after startup\nsetting.psnl.ball=Voice input ball\nsetting.psnl.ball-dt=Set whether to enable the voice input ball\n\nsetting.apps=Apps\nsetting.accounts=Accounts\nsetting.timelang=Time & Languages\nsetting.game=Gaming\nsetting.acc=Accessibility\nsetting.privacy=Privacy & security\nsetting.update=Windows Update\n\n\n# edge\nedge.name=Microsoft Edge\nedge.schbing=Search in Bing or enter an address\nedge.rename=Rename this tab\n\n\n# explorer\nexplorer.name=File Explorer\nexplorer.pinned=Pinned\nexplorer.quickacc=Quick access\nexplorer.thispc=This PC\nexplorer.bin=Recycle Bin\nexplorer.tag=Tags\nexplorer.tag.red=Red\nexplorer.tag.blue=Blue\nexplorer.tag.yellow=Yellow\nexplorer.tag.green=Green\nexplorer.tag.orange=Orange\nexplorer.tag.purple=Purple\nexplorer.tag.pink=Pink\nexplorer.new=New\nexplorer.sort=Sort\nexplorer.view=View\nexplorer.mount=Mount local folder\n\n\n# about\nabout.name=About Win12 Online\nabout.intro=Introduction\nabout.update=Update log\nabout.intro.name=<span></span>Windows 12 Online\nabout.intro.intro=<span></span>Introduction\nabout.intro.intro.p1=Windows 12 Online is an open source project, developed by Starry Source. It use HTML, CSS and JS to simulate and innovate Windows 12 online.\nabout.intro.intro.p2=This project has been published on GitHub, <a onclick=\"window.open('https://github.com/tjy-gitnub/win12','_ blank');\" win12_title=\" https://github.com/tjy-gitnub/win12 \" class=\"jump\">Click here to view</a>.\nabout.intro.intro.p3=If you have any comments or suggestions, please <a onclick=\"window.open('https://github.com/tjy-gitnub/win12/issues','_blank');\" win12_title=\"https://github.com/tjy-gitnub/win12/issues\" class=\"jump\">send issues on Github</a>, your problem will be solved as soon as possible.\nabout.intro.intro.p4=About the author, Starry Source, click for <a onclick=\"window.open('https://tjy-gitnub.github.io/','_blank');\" win12_title=\"https://tjy-gitnub.github.io/\" class=\"jump\">more information</a>.\nabout.intro.os=<span></span>Open Source License\nabout.intro.os.p1=It is an open source project, using the EPL v2.0 licence. Open source licence is a contract with legal effect. Please consciously abide by it and respect the labor of others.\nabout.intro.os.p2=According to the licence, you can disseminate, distribute, modify and re publish the project, including personal and commercial purposes.\nabout.intro.os.p3=But you must indicate the source of the code, <strong>including the author, project link, etc.</strong>, and the code must be open source.\nabout.intro.os.p4=And if it is not added or modified on the basis of the project, it does not need open source. But also only for learning purposes.\nabout.intro.thank=<span></span>Thanks\nabout.intro.thank.p1=Special thanks to @NB-Group, who has made important contributions to the back-end development of this project!\nabout.intro.contri=<span></span>Contributors\nabout.intro.contri.p1=Thanks to all project contributors (real-time data, by the number of Commits)\nabout.intro.star.p1=Thank you to all those <a class=\"jump\" win12_title=\"How about join in this list? (Jumping to: https://github.com/tjy-gitnub/win12/stargazers)\" onclick=\"window.open('https://github.com/tjy-gitnub/win12/stargazers','_blank')\">who have supported us</a>.\nabout.intro.others=<span></span>Others\nabout.intro.others.p1=This project is based on the current version of Windows and is not consistent with official version of Windows 12.\nabout.intro.others.p2=This project is not affiliated with Microsoft and should not be confused with Microsoft products. It is also not Windows365 cloud PC.\nabout.intro.others.p3=Microsoft, Windows, and other demonstration products in this project are trademarks of Microsoft Corporation. Android in this project is a trademark of Google Inc.\nabout.intro.others.p4=If you see this page on a website other than tjy-gitnub.github.io/win12/desktop.html, you may be browsing a mirror site. To visit the original page, please click <a onclick=\"window.open('https://tjy-gitnub.github.io/win12/desktop.html','_blank');\" win12_title=\"https://tjy-gitnub.github.io/win12/desktop.html\" class=\"jump\">here</a>.\nabout.update.name=<span></span>Update log\n\n\n# notepad\nnotepad.name=Notepad\nnotepad.file=File\nnotepad.edit=Edit\nnotepad.format=Format\n\n\n# terminal\nterminal.name=Terminal\n\n# word\nword.name=Microsoft Word Preview\n\n\n# camera\ncamera.name=Camera\ncamera.notice=Notice\ncamera.notice.txt=Camera is developed by User782Tec and will be maintained by tjy-gitnub. <br>During use, it will request access to your camera (for taking photos). It won’t upload any of your personal information (including photos taken) to internet, nor will it disclose it to others.<br>If you don’t agree to the above, you will not be able to use Camera.\ncamera.notice.agree=Agree and continue\ncamera.notice.disag=Disagree\n\n\n# run\nrun.name=Run\nrun.txt=Type the name of a program, folder, document, or Internet resource, and Windows will open it for you.\nrun.open=Open\n\n\n# winver\nwinver.name=About Windows\nwinver.p1=Version 25H2 (OS Build 24612.1896)\nwinver.p2=© Microsoft Corporation. All rights reserved.\nwinver.p3=The Windows 12 Pro operating system and its user interface are protected by trademark and other pending or existing intellectual property rights in the United States and other countries/regions.\nwinver.p4=This product is licensed under the Microsoft Software License Terms to:\nwinver.p5=The above is all nonsense, don’t take it seriously (double-click to hide this message)\n\n\n# taskmgr\ntaskmgr.name=Task Manager\ntaskmgr.processes=Processes\ntaskmgr.performance=Performance  \ntaskmgr.settings=Settings\ntaskmgr.processes.title=Processes\ntaskmgr.processes.name=Process name\ntaskmgr.processes.cpu=CPU\ntaskmgr.processes.memory=Memory\ntaskmgr.processes.disk=Disk\ntaskmgr.processes.power=Power usage\ntaskmgr.processes.no-results=<b>No filter results</b><br />Try typing with other names, publishers, or PIDs for filtering.\ntaskmgr.processes.reset-filter=Reset filter\ntaskmgr.performance.title=Performance\ntaskmgr.performance.memory=Memory\ntaskmgr.performance.disk=Disk\ntaskmgr.performance.wifi=Wi-Fi\ntaskmgr.performance.wifi-speed=Sent: 1145 Receive: 1145 Mbps\ntaskmgr.settings.title=Settings\ntaskmgr.settings.window-management=Window management\ntaskmgr.settings.stay-on-top=Stay on top\ntaskmgr.settings.feedback=Feedback\ntaskmgr.settings.send-feedback=Send feedback\n\n# copilot\ncopilot.start=Start the conversation\ncopilot.p=Please click \"<i class=\"bi bi-info-circle\"></i>\" on the top right to check the precautions before use. This copilot may not communicate in your language.\ncopilot.send=Send\n\n# terminal commands\nterminal.help.title=For more information on a specific command, type HELP command-name\nterminal.help.dir=Display a list of files and subdirectories in a directory\nterminal.help.ls=Display a list of files and subdirectories in a directory (alias for DIR)\nterminal.help.del=Delete one or more files\nterminal.help.cd=Display the name of or change the current directory\nterminal.help.cls=Clear the screen\nterminal.help.help=Provide help information for Windows commands\nterminal.help.systeminfo=Display system information\nterminal.help.shutdown=Shut down the computer\nterminal.help.cmd=Open a new command prompt window\nterminal.help.exit=Exit the command prompt program\nterminal.help.easter=Easter egg commands:\nterminal.help.hello=Say hello\nterminal.help.matrix=Matrix effect\nterminal.help.snow=Snow effect\nterminal.help.dance=Make windows dance\nterminal.help.starwars=The Force Awakens\n\n# whiteboard\nwhiteboard.saveas.title=Save As\nwhiteboard.saveas.prompt=Enter filename:\nwhiteboard.saveas.save=Save\nwhiteboard.saveas.cancel=Cancel\n\n"
  },
  {
    "path": "lang/lang_zh.properties",
    "content": "# Base language file for jQuery i18n properties\n# This file is intentionally minimal to prevent 404 errors"
  },
  {
    "path": "lang/lang_zh_CN.properties",
    "content": "updating=休对故人思故国，且将新火试新茶<br>正在更新\ncover-hp=横屏以获得最佳体验\nlogin=登录\nwelcome=欢迎\nstmenu-avlb=可用\nstmenu-webapp=Web 应用\nbilibili.name=哔哩哔哩\nwsa.name=适用于 Android™ 的 Windows 子系统\nfolder.doc=文档\nfolder.pic=图片\nfolder.mus=音乐\nstmenu-pinned=已固定\nstmenu-allapp=所有应用\nfeedback.name=反馈中心\nstmenu-tj=推荐的项目\nstmenu-tj-f1=科学地使用瓶盖.pptx\nstmenu-tj-t1=5 分钟前\nstmenu-tj-f2=可口可乐瓶盖.jpg\nstmenu-tj-t2=7 分钟前\nstmenu-tj-f3=瓶盖构造图.jpg\nstmenu-tj-t3=16 分钟前\nstmenu-tj-f4=瓶盖的构造及作用.docx\nstmenu-tj-t4=24 分钟前\nstmenu-tj-f5=可口可乐瓶盖厚度.xlsx\nstmenu-tj-t5=35 分钟前\nsch-app=应用\nsch-doc=文档\nsch-web=网页\nsch-setting=设置\nsch-folder=文件夹\nsch-photo=照片\nsch-tj=推荐\nsch-open=打开\nsch-opfl=打开文件所在位置\nsch-cpp=复制路径\nsch-ph=在这里输入你要搜索的内容\nwidget=小组件\nwidget-news=新闻\nwidget-news-res=我们不对新闻内容负责\nctrl-blue=蓝牙\nctrl-air=飞行模式\nctrl-eye=护眼\nctrl-hotspot=移动热点\nctrl-acc=辅助功能\ndata-week=<p>一</p><p>二</p><p>三</p><p>四</p><p>五</p><p>六</p><p>日</p>\neditmd-add=添加小组件\n\npsnl=个性化\nhome=主页\napply=应用\nok=确定\ncancel=取消\nall=全部\nmore=更多\nclose=关闭\nrefresh=刷新\nopen=打开\ndel=删除\n\ndesktop.tgltheme=切换主题\ndesktop.vogithub=在 Github 中查看此项目\ndesktop.exitedit=退出编辑模式 \ndesktop.enteredit=进入编辑模式\n\nnts.about=<p class=\"tit\">Windows 12 网页版</p><p>Windows 12 网页版是一个开放源项目,<br />希望让用户在网络上预先体验 Windows 12,<br />内容可能与 Windows 12 正式版本不一致。<br />使用标准网络技术,例如 HTML, CSS 和 JS<br />此项目绝不附属于微软,且不应与微软操作系统或产品混淆,<br />这也不是 Windows365 cloud PC<br />本项目中微软、Windows和其他示范产品是微软公司的商标<br />本项目中 Android 是谷歌公司的商标。</p>\nnts.feedback.name=反馈\nnts.feedback.txt=我们非常注重用户的体验与反馈\nnts.feedback.github=在github上提交issue (需要github账户)\nnts.addwg=添加小组件\nnts.addwg.weather=天气\nnts.addwg.monitor=系统性能监视器\nnts.fs-api-unsupported=<p class=\"tit\">不支持的功能</p><p>您的浏览器不支持文件系统访问 API。请使用 Chrome 或 Edge 浏览器。</p>\nnts.fs-mount-error=<p class=\"tit\">挂载失败</p><p>无法挂载本地文件夹，权限可能被拒绝。</p>\nnts.unsupported-file-type=<p class=\"tit\">无法打开文件</p><p>没有找到可以打开此类型文件的应用程序。</p>\nnts.file-read-error=<p class=\"tit\">读取失败</p><p>无法读取文件内容，权限可能已过期。</p>\nnts.file-write-error=<p class=\"tit\">保存失败</p><p>无法写入文件，权限可能已过期。</p>\n\nwindow.restore=还原\nwindow.min=最小化\nwindow.max=最大化\nwindow.close=关闭\n\n# calc\ncalc.name=计算器\ncalc.error.zero=<p class=\"tit\">错误</p><p>除数不得等于0</p>\n\n# defender\ndefender.name=Windows 安全中心\ndefender.virus=病毒威胁与防护\ndefender.account=账户防护\ndefender.firewall=防火墙和网络防护\ndefender.device=设备安全性\ndefender.glance=安全性概览\ndefender.network=网络流量使用\ndefender.speed=网络速度\ndefender.clearv=入侵病毒清除\ndefender.allvc=所有病毒均被清除\ndefender.freq=电脑受病毒攻击频率\ndefender.netreq=网络通信比例\ndefender.netreq-thismonth=这个月\ndefender.recreq=请求记录\n\n# msstore\nmsstore.apps=应用\nmsstore.games=游戏\nmsstore.download=下载\nmsstore.topfree=热门免费应用 >\nmsstore.free=免费下载\nmsstore.devtool=开发\nmsstore.genimp=原神\nmsstore.game=游戏\nmsstore.mc=我的世界\nmsstore.design=设计\nmsstore.tool=工具\nmsstore.business=办公\n\n# setting\nsetting.name=设置\nsetting.usrname=星瓶\nsetting.sch=查找设置\n\nsetting.system=系统\nsetting.device=蓝牙和其他设备\nsetting.network=网络和 Internet\n\nsetting.psnl=个性化\nsetting.psnl.color=颜色\nsetting.psnl.color-dt=设置 Windows 的主题色\nsetting.psnl.color.now=当前颜色\nsetting.psnl.color.custom=自定义颜色\nsetting.psnl.theme=主题\nsetting.psnl.theme-dt=(！消耗大量 github api 限度！) 设置 Windows 的主题 想要<span class=\"a jump\" win12_title=\"https://github.com/tjy-gitnub/win12-theme\" onclick=\"window.open('https://github.com/tjy-gitnub/win12-theme','_blank')\">上传自己的主题</span>?\nsetting.psnl.round=平滑圆角\nsetting.psnl.round-dt=启用平滑圆角（需要较新浏览器。若发现圆角过大，请关闭此功能）\nsetting.psnl.animation=动画\nsetting.psnl.animation-dt=系统界面元素过渡动画\nsetting.psnl.shadow=阴影\nsetting.psnl.shadow-dt=为系统界面元素添加阴影效果\nsetting.psnl.alltransp=多窗口透明 \nsetting.psnl.alltransp-dt=为所有窗口开启透明效果，而不是仅用于焦点窗口 <span class=\"a jump\" win12_title=\"开启后将占用大量GPU,可能造成卡顿\">详细</span>\nsetting.psnl.mica=Mica效果\nsetting.psnl.mica-dt=为焦点窗口开启mica效果\nsetting.psnl.startup-sound=开机音乐\nsetting.psnl.startup-sound-dt=是否启用开机音乐\nsetting.psnl.ball=语音输入球\nsetting.psnl.ball-dt=是否启用语音输入球\n\nsetting.apps=应用\nsetting.accounts=账户\nsetting.timelang=时间和语言\nsetting.game=游戏\nsetting.acc=辅助功能\nsetting.privacy=隐私和安全性\nsetting.update=Windows 更新\n\n# edge\nedge.schbing=在必应中搜索，或输入一个网址\nedge.rename=为标签页命名\n\n# explorer\nexplorer.name=文件资源管理器\nexplorer.pinned=已固定\nexplorer.quickacc=快速访问\nexplorer.thispc=此电脑\nexplorer.bin=回收站\nexplorer.tag=标签\nexplorer.tag.red=红色\nexplorer.tag.blue=蓝色\nexplorer.tag.yellow=黄色\nexplorer.tag.green=绿色\nexplorer.tag.orange=橙色\nexplorer.tag.purple=紫色\nexplorer.tag.pink=粉色\nexplorer.new=新建\nexplorer.sort=排序方式\nexplorer.view=布局\nexplorer.mount=挂载本地文件夹\n\n# about\nabout.name=关于 Win12 网页版\nabout.intro=简介\nabout.update=更新记录\nabout.intro.name=<span></span>Windows 12 网页版\nabout.intro.intro=<span></span>简介\nabout.intro.intro.p1=&emsp;&emsp;Windows 12 网页版是一个开源项目，由星源原创，使用 HTML、CSS 和 JavaScript，在网络上模拟、创新操作系统。\nabout.intro.intro.p2=&emsp;&emsp;此项目已发布至 GitHub，<a onclick=\"window.open('https://github.com/tjy-gitnub/win12','_blank');\" win12_title=\"https://github.com/tjy-gitnub/win12\" class=\"jump\">点击此处查看</a>。\nabout.intro.intro.p3=&emsp;&emsp;若您对于该项目有任何意见或建议，请在 GitHub 上<a onclick=\"window.open('https://github.com/tjy-gitnub/win12/issues','_blank');\" win12_title=\"https://github.com/tjy-gitnub/win12/issues\" class=\"jump\">提交 issues</a>，您的问题会被尽可能快地解决。\nabout.intro.intro.p4=&emsp;&emsp;原创作者星源，点击以<a onclick=\"window.open('https://tjy-gitnub.github.io/','_blank');\" win12_title=\"https://tjy-gitnub.github.io/\" class=\"jump\">了解详细</a>。\nabout.intro.os=<span></span>开源说明\nabout.intro.os.p1=&emsp;&emsp;此项目是一个开源项目。此项目使用 EPL v2.0 开源许可。开源许可是具有法律效力的合同，请自觉遵守开源许可，尊重他人劳动。\nabout.intro.os.p2=&emsp;&emsp;根据许可，你可以对该项目进行传播、分发、修改以及二次发布，包括个人和商业用途。\nabout.intro.os.p3=&emsp;&emsp;但您必须给出源码来源，<strong>包括作者，项目链接等</strong>，必须使用相同的协议开源。\nabout.intro.os.p4=&emsp;&emsp;不是在该项目基础上进行增加、修改的，仅参考源码的，不需要开源，但也仅供学习用途。\nabout.intro.thank=<span></span>特别感谢\nabout.intro.thank.p1=&emsp;&emsp;特别感谢 @NB-Group，他为本项目的后端开发做出了重要贡献！\nabout.intro.contri=<span></span>贡献者\nabout.intro.contri.p1=&emsp;&emsp;感谢所有项目的贡献者（实时数据，计算方法：即为 Commits 次数）\nabout.intro.star.p1=&emsp;&emsp;感谢<a class=\"jump\" win12_title=\"给个 Star 好不好？(即将跳转到：https://github.com/tjy-gitnub/win12/stargazers)\" onclick=\"window.open('https://github.com/tjy-gitnub/win12/stargazers','_blank')\">所有支持我们的人</a>。\nabout.intro.others=<span></span>其它\nabout.intro.others.p1=&emsp;&emsp;此项目基于目前 Windows 版本创造，与微软的 Windows 12 正式版本不一致。\nabout.intro.others.p2=&emsp;&emsp;此项目绝不附属于微软，且不应与微软操作系统或产品混淆，这也不是 Windows365 cloud PC。\nabout.intro.others.p3=&emsp;&emsp;本项目中微软、Windows 和其他示范产品是微软公司的商标。本项目中 Android 是谷歌公司的商标。\nabout.intro.others.p4=&emsp;&emsp;若您在本项目（网址为tjy-gitnub.github.io/win12/desktop.html）之外的网站看到此页面，那么您可能正在浏览一个镜像网站。若欲造访原始页面，请点击<a class=\"jump\" win12_title=\"https://tjy-gitnub.github.io/win12/desktop.html\" onclick=\"window.open('https://tjy-gitnub.github.io/win12/desktop.html','_blank')\">这里</a>。\nabout.update.name=<span></span>更新记录\n\n\n# notepad\nnotepad.name=记事本\nnotepad.file=文件\nnotepad.edit=编辑\nnotepad.format=格式\n\n# terminal\nterminal.name=终端\n\n# word\nword.name=Microsoft Word Preview\n\n# camera\ncamera.name=相机\ncamera.notice=提示\ncamera.notice.txt=&emsp;&emsp;欢迎使用“相机”应用！本应用由 User782Tec 开发， tjy-gitnub 维护。<br>&emsp;&emsp;在使用中，此应用将会获取访问您摄像头的权限（用于进行拍摄照片等操作）。此应用不会将任何您的个人信息（包括所拍摄的照片）上传至服务器，更不会泄露给他人。&emsp;&emsp;若您不同意上述协议，则将不能使用此应用。\ncamera.notice.agree=同意并继续\ncamera.notice.disag=不同意\n\n# run\nrun.name=运行\nrun.txt=Windows 将根据你所输入的名称，为你打开相应的程序、文件夹、文档或 Internet 资源。\nrun.open=打开: \n\n# winver\nwinver.name=关于 Windows \nwinver.p1=版本 25H2 (OS 内部版本 24612.1896)\nwinver.p2=© Microsoft Corporation。保留所有权利。\nwinver.p3=Windows12 专业版操作系统及其用户界面受美国和其他国家/地区的商标法和其他待颁布或已颁布的知识产权法保护。\nwinver.p4=根据Microsoft软件许可条款，许可如下用户使用本产品\nwinver.p5=上面都是胡扯，切勿当真(双击隐藏此消息)\n\n# taskmgr\ntaskmgr.name=任务管理器\n\n# copilot\ncopilot.start=开始对话\ncopilot.p=使用前请先点击右上 \"<i class=\"bi bi-info-circle\"></i>\" 查看使用注意事项\ncopilot.send=发送\n"
  },
  {
    "path": "lang/lang_zh_TW.properties",
    "content": "updating=休對故人思故國，且將新火試新茶<br />正在更新\ncover-hp=請轉為橫向檢視以獲得最佳體驗\nlogin=登入\nwelcome=歡迎\nstmenu-avlb=可用\nstmenu-webapp=Web 應用程式\nbilibili.name=嗶哩嗶哩\nwsa.name=Windows Subsystem for Android™\nfolder.doc=檔案\nfolder.pic=圖片\nfolder.mus=音樂\nstmenu-pinned=已釘選\nstmenu-allapp=全部\nfeedback.name=意見反應中樞\nstmenu-tj=建議專案\nstmenu-tj-f1=科學地使用瓶蓋.pptx\nstmenu-tj-t1=5 分鐘前\nstmenu-tj-f2=可口可樂瓶蓋.jpg\nstmenu-tj-t2=7 分鐘前\nstmenu-tj-f3=瓶蓋構造圖.jpg\nstmenu-tj-t3=16 分鐘前\nstmenu-tj-f4=瓶蓋的構造及作用.docx\nstmenu-tj-t4=24 分鐘前\nstmenu-tj-f5=可口可樂瓶蓋厚度.xlsx\nstmenu-tj-t5=35 分鐘前\nsch-app=應用程式\nsch-doc=檔案\nsch-web=網頁\nsch-setting=設定\nsch-folder=資料夾\nsch-photo=相片\nsch-tj=建議\nsch-open=開放\nsch-opfl=開放檔案位置\nsch-cpp=複製路徑\nsch-ph=在這裡輸入以進行搜尋\nwidget=小工具\nwidget-news=新聞\nwidget-news-res=我們不對新聞內容負責\nctrl-blue=藍牙\nctrl-air=飛行模式\nctrl-eye=護眼\nctrl-hotspot=行動熱點\nctrl-acc=協助功能\ndata-week=<p>一</p><p>二</p><p>三</p><p>四</p><p>五</p><p>六</p><p>日</p>\neditmd-add=添加小工具\n\npsnl=個人化\nhome=首頁\napply=套用\nok=確定\ncancel=取消\nall=全部\nmore=更多\nclose=關閉\nrefresh=重新整理\nopen=開啟\ndel=刪除\n\ndesktop.tgltheme=切換佈景主題\ndesktop.vogithub=在 GitHub 檢視此專案\ndesktop.exitedit=結束編輯模式\ndesktop.enteredit=進入編輯模式\n\nnts.about=<p class=\"tit\">Windows 12 網頁版</p><p>Windows 12 網頁版是一個開放源專案，<br />希望讓使用者在網路上預先體驗 Windows 12，<br />內容可能與 Windows 12 正式版本不一致。<br />使用標準網路技術，例如 HTML， CSS 和 JS<br />此專案絕不附屬於微軟，且不應與微軟操作系統或產品混淆，<br />這也不是 Windows365 cloud PC<br />本專案中微軟、Windows和其他示範產品是微軟公司的商標<br />本專案中 Android 是谷歌公司的商標。</p>\nnts.feedback.name=意見反應\nnts.feedback.txt=我們非常注重使用者的體驗與反應\nnts.feedback.github=在github上提交issue (需要github帳戶)\nnts.addwg=添加小工具\nnts.addwg.weather=天氣\nnts.addwg.monitor=系統性能監視器\nnts.fs-api-unsupported=<p class=\"tit\">不支援的功能</p><p>您的瀏覽器不支援檔案系統存取 API。請使用 Chrome 或 Edge 瀏覽器。</p>\nnts.fs-mount-error=<p class=\"tit\">掛載失敗</p><p>無法掛載本地資料夾，權限可能被拒絕。</p>\nnts.unsupported-file-type=<p class=\"tit\">無法開啟檔案</p><p>找不到可以開啟此類型檔案的應用程式。</p>\nnts.file-read-error=<p class=\"tit\">讀取失敗</p><p>無法讀取檔案內容，權限可能已過期。</p>\nnts.file-write-error=<p class=\"tit\">儲存失敗</p><p>無法寫入檔案，權限可能已過期。</p>\n\nwindow.restore=還原\nwindow.min=最小化\nwindow.max=最大化\nwindow.close=關閉\n\n# calc\ncalc.name=小算盤\ncalc.error.zero=<p class=\"tit\">錯誤</p><p>除數不得等於0</p>\n\n# defender\ndefender.name=Windows 安全性\ndefender.virus=病毒與威脅防護\ndefender.account=帳戶防護\ndefender.firewall=防火牆和網路保護\ndefender.device=裝置安全性\ndefender.glance=安全性概覽\ndefender.network=網路流量使用\ndefender.speed=網路速度\ndefender.clearv=入侵病毒清除\ndefender.allvc=所有病毒均被清除\ndefender.freq=電腦受病毒攻擊頻率\ndefender.netreq=網路通信比例\ndefender.netreq-thismonth=這個月\ndefender.recreq=請求記錄\n\n# msstore\nmsstore.apps=應用程式\nmsstore.games=遊戲\nmsstore.download=下載\nmsstore.topfree=熱門免費應用程式 >\nmsstore.free=免費下載\nmsstore.devtool=開發\nmsstore.genimp=原神\nmsstore.game=遊戲\nmsstore.mc=Minecraft\nmsstore.design=設計\nmsstore.tool=工具\nmsstore.business=商務\n\n# setting\nsetting.name=設定\nsetting.usrname=星瓶\nsetting.sch=尋找設定\n\nsetting.system=系統\nsetting.device=藍牙與裝置\nsetting.network=網路和網際網路\n\nsetting.psnl=個人化\nsetting.psnl.color=色彩\nsetting.psnl.color-dt=設定 Windows 的佈景主題色彩\nsetting.psnl.color.now=目前色彩\nsetting.psnl.color.custom=自訂色彩\nsetting.psnl.theme=主題\nsetting.psnl.theme-dt=(！消耗大量 github api 限度！) 設置 Windows 的主題 想要<span class=\"a jump\" win12_title=\"https://github.com/tjy-gitnub/win12-theme\" onclick=\"window.open('https://github.com/tjy-gitnub/win12-theme','_blank')\">上載自己的主題</span>?\nsetting.psnl.round=圓角\nsetting.psnl.round-dt=設置系統界面中是否啟用圓角\nsetting.psnl.animation=動畫\nsetting.psnl.animation-dt=系統界面元素過渡動畫\nsetting.psnl.shadow=陰影\nsetting.psnl.shadow-dt=為系統界面元素添加陰影效果\nsetting.psnl.alltransp=多窗口透明 \nsetting.psnl.alltransp-dt=為所有窗口開啟透明效果，而不是僅用於焦點窗口 <span class=\"a jump\" win12_title=\"開啟後將佔用大量GPU,可能造成卡頓\">詳細</span>\nsetting.psnl.mica=Mica效果 (實驗)\nsetting.psnl.mica-dt=為焦點窗口開啟mica效果 <a class=\"a jump\" onclick=\"shownotice('feedback')\">反饋</a>\nsetting.psnl.startup-sound=開機音樂\nsetting.psnl.startup-sound-dt=是否啟用開機音樂\nsetting.psnl.ball=語音輸入球\nsetting.psnl.ball-dt=是否啟用語音輸入球\n\nsetting.apps=應用程式\nsetting.accounts=帳戶\nsetting.timelang=時間和語言\nsetting.game=遊戲\nsetting.acc=協助工具\nsetting.privacy=隱私權與安全性\nsetting.update=Windows Update\n\n# edge\nedge.schbing=在必應中搜索，或輸入一個網址\nedge.rename=為標籤頁命名\n\n# explorer\nexplorer.name=檔案總管\nexplorer.pinned=已釘選\nexplorer.quickacc=快速存取\nexplorer.thispc=本機\nexplorer.bin=資源回收筒\nexplorer.tag=標籤\nexplorer.tag.red=紅色\nexplorer.tag.blue=藍色\nexplorer.tag.yellow=黃色\nexplorer.tag.green=綠色\nexplorer.tag.orange=橙色\nexplorer.tag.purple=紫色\nexplorer.tag.pink=粉色\nexplorer.new=新增\nexplorer.sort=排序\nexplorer.view=檢視\nexplorer.mount=掛載本地資料夾\n\n# about\nabout.name=關於 Win12 網頁版\nabout.intro=簡介\nabout.update=更新歷程記錄\nabout.intro.name=<span></span>Windows 12 網頁版\nabout.intro.intro=<span></span>簡介\nabout.intro.intro.p1=&emsp;&emsp;Windows 12 網頁版是一個開源專案，由星源創作，使用 HTML、CSS 和 JavaScript，在網絡上模擬、創新操作系統。\nabout.intro.intro.p2=&emsp;&emsp;此專案已發布至 GitHub，<a onclick=\"window.open('https://github.com/tjy-gitnub/win12','_blank');\" win12_title=\"https://github.com/tjy-gitnub/win12\" class=\"jump\">點擊此處查看</a>。\nabout.intro.intro.p3=&emsp;&emsp;若您對於該專案有任何意見或建議，請在 GitHub 上<a onclick=\"window.open('https://github.com/tjy-gitnub/win12/issues','_blank');\" win12_title=\"https://github.com/tjy-gitnub/win12/issues\" class=\"jump\">提交 issues</a>，您的問題會被盡可能快地解決。\nabout.intro.intro.p4=&emsp;&emsp;原創作者星源，點擊以<a onclick=\"window.open('https://tjy-gitnub.github.io/','_blank');\" win12_title=\"https://tjy-gitnub.github.io/\" class=\"jump\">瞭解詳細</a>。\nabout.intro.os=<span></span>開源說明\nabout.intro.os.p1=&emsp;&emsp;此專案是一個開源專案。此專案使用 EPL v2.0 開源許可。開源許可是具有法律效力的合同，請自覺遵守開源許可，尊重他人勞動。\nabout.intro.os.p2=&emsp;&emsp;根據許可，你可以對該專案進行傳播、分發、修改以及二次發布，包括個人和商業用途。\nabout.intro.os.p3=&emsp;&emsp;但您必須給出源碼來源，<strong>包括作者，專案鏈接等</strong>，必須使用相同的協議開源。\nabout.intro.os.p4=&emsp;&emsp;不是在該專案基礎上進行增加、修改的，僅參考源碼的，不需要開源，但也僅供學習用途。\nabout.intro.thank=<span></span>特別感謝\nabout.intro.thank.p1=&emsp;&emsp;特別感謝 @NB-Group，他為本專案的後端開發做出了重要貢獻！\nabout.intro.contri=<span></span>貢獻者\nabout.intro.contri.p1=&emsp;&emsp;感謝所有專案的貢獻者（即時數據，計算方法：即為 Commits 次數）\nabout.intro.star.p1=&emsp;&emsp;感謝<a class=\"jump\" win12_title=\"給個 Star 好不好？(即將跳轉到：https://github.com/tjy-gitnub/win12/stargazers)\" onclick=\"window.open('https://github.com/tjy-gitnub/win12/stargazers','_blank')\">所有支持我們的人</a>。\nabout.intro.others=<span></span>其它\nabout.intro.others.p1=&emsp;&emsp;此專案基於目前 Windows 版本創造，與微軟的 Windows 12 正式版本不一致。\nabout.intro.others.p2=&emsp;&emsp;此專案絕不附屬於微軟，且不應與微軟操作系統或產品混淆，這也不是 Windows365 cloud PC。\nabout.intro.others.p3=&emsp;&emsp;本專案中微軟、Windows 和其他示範產品是微軟公司的商標。本專案中 Android 是谷歌公司的商標。\nabout.intro.others.p4=&emsp;&emsp;若您在本專案（網址為tjy-gitnub.github.io/win12/desktop.html）之外的網站看到此頁面，那麼您可能正在瀏覽一個鏡像網站。若欲造訪原始頁面，請點擊<a class=\"jump\" win12_title=\"https://tjy-gitnub.github.io/win12/desktop.html\" onclick=\"window.open('https://tjy-gitnub.github.io/win12/desktop.html','_blank')\">這裡</a>。\nabout.update.name=<span></span>更新歷程記錄\n\n# notepad\nnotepad.name=記事本\nnotepad.file=檔案\nnotepad.edit=編輯\nnotepad.format=檢視\n\n# terminal\nterminal.name=終端機\n\n# word\nword.name=Microsoft Word Preview\n\n# camera\ncamera.name=相機\ncamera.notice=提示\ncamera.notice.txt=&emsp;&emsp;歡迎使用“相機”應用！本應用由 User782Tec 開發， tjy-gitnub 維護。<br>&emsp;&emsp;在使用中，此應用程式將會獲取訪問您攝像頭的權限（用於進行拍攝相片等操作）。此應用程式不會將任何您的個人信息（包括所拍攝的相片）上傳至服務器，更不會洩露給他人。&emsp;&emsp;若您不同意上述協議，則將不能使用此應用程式。\ncamera.notice.agree=同意並繼續\ncamera.notice.disag=不同意\n\n# run\nrun.name=執行\nrun.txt=輸入程式、資料夾、文件或網際網路資源的名稱，Windows 會自動開啟。\nrun.open=開啟\n\n# winver\nwinver.name=關於 Windows \nwinver.p1=版本 25H2 (OS 組建 24612.1896)\nwinver.p2=© Microsoft Corporation。保留所有權利。\nwinver.p3=Windows 12 專業版 作業系統及其使用者介面受美國及其他國家/地區之商標及其他已立案和立案中的智慧財產權法保護。\nwinver.p4=此產品依據 Microsoft 軟體許可條款中規定，使用權屬於：\nwinver.p5=上面都是胡扯，不可當真(雙擊隱藏此消息)\n\n# taskmgr\ntaskmgr.name=工作管理員\n\n# copilot\ncopilot.start=開始對話\ncopilot.p=使用前請先點擊右上 \"<i class=\"bi bi-info-circle\"></i>\" 查看使用注意事項。此 Copilot 可能不以你使用的語言回答。\ncopilot.send=發送\n\n# terminal commands\nterminal.help.title=有關某個命令的詳細資訊，請鍵入 HELP 命令名\nterminal.help.dir=顯示目錄中的檔案和子目錄清單\nterminal.help.ls=顯示目錄中的檔案和子目錄清單 (DIR的別名)\nterminal.help.del=刪除一個或多個檔案\nterminal.help.cd=顯示目前目錄的名稱或將其變更\nterminal.help.cls=清除螢幕\nterminal.help.help=提供 Windows 命令的説明資訊\nterminal.help.systeminfo=顯示系統資訊\nterminal.help.shutdown=關閉電腦\nterminal.help.cmd=開啟新的命令提示字元視窗\nterminal.help.exit=結束命令提示字元程式\nterminal.help.easter=彩蛋命令:\nterminal.help.hello=打個招呼\nterminal.help.matrix=駭客任務特效\nterminal.help.snow=下雪特效\nterminal.help.dance=讓視窗跳舞\nterminal.help.starwars=原力覺醒\n\n# whiteboard\nwhiteboard.saveas.title=另存為\nwhiteboard.saveas.prompt=請輸入檔案名稱:\nwhiteboard.saveas.save=儲存\nwhiteboard.saveas.cancel=取消\n"
  },
  {
    "path": "lang/readme.md",
    "content": "# 翻译贡献指南\n开始翻译前，**务必[联系我们](https://teams.live.com/l/invite/FEA0yrNkE_bAn-ddwI)，并征得同意**，以了解是否还有其他人正在翻译，避免重复劳动和合并冲突。<br>\nBefore you start translating, **you must [contact](https://teams.live.com/l/invite/FEA0yrNkE_bAn-ddwI) us and get approval** to check if others are already working on the same translation, avoid duplicate work and merge conflicts.\n\n## 条件 / Requirements\n1. 有中文基础<br>Basic proficiency in Chinese\n2. 有一定的目标语言的基础 / 愿意将自己的 Windows 11 系统调成目标语言<br>Basic proficiency in the target language / willing to set your Windows 11 system to the target language\n3. 有代码基础<br>Basic coding knowledge\n\n## 方法 / Method\n项目使用 i18n 库实现多语言，可上网查阅，或自行研究已有翻译的部分\n\nThe project uses an i18n library for multi-language support. You can refer to online resources or study existing translated sections.\n### 已有成果 / Existing Resources\n0. 务必理解 `desktop.js` 开头语言处理部分，熟悉原理<br>Make sure you understand the language handling logic at the beginning of desktop.js and are familiar with the mechanism.\n1. 此目录下 `trans.py`的使用说明见[此](README_trans.md)<br>See [this](README_trans.md) for the usage instructions of trans.py in this directory.\n2. `desktop.js` 中有 `lang(txt,id)`，详见注释<br>desktop.js includes the lang(txt, id) function — see the comments for details.\n\n### 注意 / Notes\n部分代码形如 Some code like:\n```html\n<a class=\"btn\">\n    <i class=\"bi\"></i> 文本\n</a>\n```\n可能不便于设置属性，可对纯文本部分添加 `<span>` 标签，例可改为 may not be suitable for direct attribute assignment:\n\n```html\n<a class=\"btn\">\n    <i class=\"bi\"></i>\n    <span data-i18n=\"sth\">文本</span>\n</a>\n```\n\n顺便把 `lang_zh_cn` 文件一同完善，感激不尽。<br>Please also help improve the lang_zh_cn file — we would greatly appreciate it.\n\n### 加分项 / Bonus Points\n1. 与 Windows 11 一致的部分，应符合(尽量)最新版的原生语言内容<br>For parts that match Windows 11, try to use the latest official native wording.\n2. 不一致的，应避免机器翻译<br>For non‑matching parts, avoid machine translation.\n\n## 酬劳 / Rewards\n有且仅有 Only these:\n1. Github 贡献点<br>GitHub contribution points\n2. 来自开发者的由衷感谢 >u-)o<br>Sincere gratitude from the developer >u-)o"
  },
  {
    "path": "lang/trans.py",
    "content": " # Windows 12 网页版是一个开放源项目,希望让用户在网络上预先体验 Windows 12.\n # @author tangyuan0821 <tangyuan0821@email.cn>  tjy-gitnub <starry-source@outlook.com>\n # @license EPL v2\n # @link <https://github.com/tjy-gitnub/win12>\nfrom msvcrt import getch, kbhit\nfrom pathlib import Path\nimport sys\nfrom colorama import init\ninit(autoreset=True)\nblack=30\nred=31\ngreen=32\nyellow=33\nblue=34\npink=35\ncyan=36\nwhite=37\nfullchar='█'\ndef color(what,text=None,bg=None,bold=False,underline=False,blink=False,fanxian=False,disnone=False):\n    clist=[]\n    clist.append(str(text)) if text else None\n    clist.append(str(bg+10)) if bg else None\n    clist.append('1') if bold else None\n    clist.append('4') if underline else None\n    clist.append('5') if blink else None\n    clist.append('7') if fanxian else None\n    clist.append('8') if disnone else None\n    return '\\033['+';'.join(clist)+'m'+what+'\\033[0m'\n\ndef clear():\n    print(\"\\x1b[2J\\x1b[H\", end='')\n\nclear_c = \"\\x1b[2J\\x1b[H\"\nclear_line_c = \"\\r\\033[K\"\n\nSCRIPT_DIR = Path(__file__).resolve().parent\nDEFAULT_HTML = SCRIPT_DIR.parent / \"desktop.html\"\nDEFAULT_PROPS = SCRIPT_DIR / \"lang_en.properties\"\n\n\ndef clamp(value: int, low: int, high: int) -> int:\n    return max(low, min(value, high))\n\n\ndef load_lines(path: Path):\n    return path.read_text(encoding='utf8').split('\\n')\n\n\ndef save_lines(path: Path, lines):\n    path.write_text('\\n'.join(lines), encoding='utf8')\n\n\ndef append_property(path: Path, key: str, value: str):\n    with path.open('a', encoding='utf8') as fh:\n        fh.write(f\"{key}={value}\\n\")\n\n\ndef display_context(lines, index: int):\n    clear()\n    start = max(0, index - 7)\n    end = min(len(lines), index + 8)\n    for idx in range(start, end):\n        line = lines[idx]\n        print(color(line, blue) if idx == index else line)\n    print('------------------------------------\\n')\n\n\ndef prompt_start_line(total: int) -> int:\n    raw = input('Start line (1-based, default 1): ').strip()\n    if raw == '':\n        return 0\n    try:\n        line_no = int(raw) - 1\n    except ValueError:\n        line_no = 0\n    return clamp(line_no, 0, max(0, total - 1))\n\n\ndef main():\n    html_path = Path(sys.argv[1]).resolve() if len(sys.argv) > 1 else DEFAULT_HTML\n    props_path = Path(sys.argv[2]).resolve() if len(sys.argv) > 2 else DEFAULT_PROPS\n    if not html_path.exists():\n        print(f\"HTML file not found: {html_path}\")\n        return\n    lines = load_lines(html_path)\n    if not lines:\n        print('HTML file is empty, nothing to edit.')\n        return\n\n    index = prompt_start_line(len(lines))\n    pos = len(lines[index])\n\n    while 0 <= index < len(lines):\n        display_context(lines, index)\n        pos = clamp(pos, 0, len(lines[index]))\n        while True:\n            print(clear_line_c + f\"{index + 1}/{len(lines)}   {lines[index][:pos]}|{lines[index][pos:]}\", end='', flush=True)\n            g = getch()\n\n\n            if g in (b'\\r', b'\\n'):\n                index = clamp(index + 1, 0, len(lines) - 1)\n                pos = len(lines[index])\n                break\n\n\n            elif g == b'\\x1b':\n                if kbhit():\n                    seq = getch()\n                    if seq in (b'[', b'O'):\n                        code = getch()\n                        if code == b'A':  # Up\n                            index = clamp(index - 1, 0, len(lines) - 1)\n                            pos = len(lines[index])\n                            break\n                        elif code == b'B':  # Down\n                            index = clamp(index + 1, 0, len(lines) - 1)\n                            pos = len(lines[index])\n                            break\n                        elif code == b'C':  # Right\n                            pos = clamp(pos + 1, 0, len(lines[index]))\n                        elif code == b'D':  # Left\n                            pos = clamp(pos - 1, 0, len(lines[index]))\n                else:\n                    save_lines(html_path, lines)\n                    return\n\n\n            elif g in (b'\\xe0', b'\\x00'):\n                direction = getch()\n                if direction == b'K':  # Left\n                    pos = clamp(pos - 1, 0, len(lines[index]))\n                elif direction == b'M':  # Right\n                    pos = clamp(pos + 1, 0, len(lines[index]))\n                elif direction == b'H':  # Up\n                    index = clamp(index - 1, 0, len(lines) - 1)\n                    pos = len(lines[index])\n                    break\n                elif direction == b'P':  # Down\n                    index = clamp(index + 1, 0, len(lines) - 1)\n                    pos = len(lines[index])\n                    break\n\n            elif g in (b' ', b'/'):\n                print('')\n                raw = input('> ').strip()\n                if not raw:\n                    continue\n                if '=' in raw:\n                    key, value = raw.split('=', 1)\n                    key, value = key.strip(), value.strip()\n                else:\n                    key, value = raw.strip(), None\n                if not key:\n                    continue\n                insert = f' data-i18n=\"{key}\"'\n                lines[index] = lines[index][:pos] + insert + lines[index][pos:]\n                save_lines(html_path, lines)\n                if value is not None:\n                    append_property(props_path, key, value)\n                index = clamp(index + 1, 0, len(lines) - 1)\n                pos = len(lines[index])\n                break\n\n        if index == len(lines) - 1 and g in (b'\\r', b'\\n'):\n            save_lines(html_path, lines)\n            return\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "mainpage.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Win12浏览器</title> <!-- 优化：修改页面标题为描述性标题 -->\n    <style>\n        * {\n            margin: 0px;\n            padding: 0px;\n        }\n\n        html,\n        body {\n            height: 100%;\n            width: 100%;\n        }\n\n        * {\n            background: transparent;\n        }\n\n        body {\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            flex-direction: column;\n        }\n\n        body>div.input {\n            display: flex;\n            width: 50%;\n            /* height: 10%; */\n            height: 2em;\n            font-size: 1.3em;\n            border-radius: 25px;\n            border: none;\n            padding: 4px 25px 5px 25px;\n            align-items: center;\n            justify-content: space-between;\n            border: 2px solid #6f6f6f50;\n            backdrop-filter: saturate(1.3);\n            box-shadow: 1px 3px 8px #00000045;\n        }\n\n        body>div.input>input {\n            font-size: 1em;\n            border: none;\n            height: 100%;\n            width: 90%;\n            color: #7f7f7f;\n        }\n\n        body>div.input>input:focus {\n            outline: none;\n        }\n\n        body>div.logo {\n            width: 100%;\n            height: 60px;\n            background-image: url('./img/Bing.svg');\n            background-size: contain;\n            background-repeat: no-repeat;\n            background-position: 50% 50%;\n            margin-bottom: 30px;\n            margin-top:-150px;\n        }\n    </style>\n</head>\n\n<body>\n    <div class=\"logo\"></div>\n    <div class=\"input\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"#5F6368\">\n            <path d=\"M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" />\n        </svg>\n        <input type=\"text\" onkeyup=\"handleKeyPress(event)\" placeholder=\"在必应中搜索，或输入一个网址\">\n    </div>\n    <script>\n        function handleKeyPress(event) {\n            // 如果按下的是回车键\n            if (event.keyCode === 13) {\n                // 获取输入框的值\n                var inputValue = event.target.value;\n                // 判断是否为搜索查询\n                if (isSearchQuery(inputValue)) {\n                    // 在Bing中搜索\n                    searchInBing(inputValue);\n                } else {\n                    // 导航到指定URL\n                    navigateToURL(inputValue);\n                }\n            }\n        }\n    \n        function isSearchQuery(value) {\n            // 正则用来验证大部分常见的URL格式，包括以\"http://\"、\"https://\"或\"ftp://\"开头的URL\n            var urlPattern = /^(((ht|f)tps?):\\/\\/)?([^!@#$%^&*?.\\s-]([^!@#$%^&*?.\\s]{0,63}[^!@#$%^&*?.\\s])?\\.)+[a-z]{2,6}\\/?/;\n            // 判断是否为URL\n            return !urlPattern.test(value);\n        }\n    \n        function searchInBing(query) {\n            // 对查询进行编码\n            var encodedQuery = encodeURIComponent(query);\n            // 在新标签页中打开Bing搜索\n            window.location = 'https://bing.com/search?q=' + encodedQuery;\n            // 可能报错\n            apps.edge.rename(query);\n        }\n    \n        function navigateToURL(url) {\n            // 如果URL不包含协议前缀\n            if (!/^https?:\\/\\//.test(url)) {\n                // 添加默认的HTTP协议前缀\n                url = 'http://' + url;\n            }\n            // 导航到指定URL\n            window.location = url;\n            // 可能报错\n            apps.edge.rename(url); \n        }\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "media/LICENSE",
    "content": "Attribution-ShareAlike 4.0 International\n\n=======================================================================\n\nCreative Commons Corporation (\"Creative Commons\") is not a law firm and\ndoes not provide legal services or legal advice. Distribution of\nCreative Commons public licenses does not create a lawyer-client or\nother relationship. Creative Commons makes its licenses and related\ninformation available on an \"as-is\" basis. Creative Commons gives no\nwarranties regarding its licenses, any material licensed under their\nterms and conditions, or any related information. Creative Commons\ndisclaims all liability for damages resulting from their use to the\nfullest extent possible.\n\nUsing Creative Commons Public Licenses\n\nCreative Commons public licenses provide a standard set of terms and\nconditions that creators and other rights holders may use to share\noriginal works of authorship and other material subject to copyright\nand certain other rights specified in the public license below. The\nfollowing considerations are for informational purposes only, are not\nexhaustive, and do not form part of our licenses.\n\n     Considerations for licensors: Our public licenses are\n     intended for use by those authorized to give the public\n     permission to use material in ways otherwise restricted by\n     copyright and certain other rights. Our licenses are\n     irrevocable. Licensors should read and understand the terms\n     and conditions of the license they choose before applying it.\n     Licensors should also secure all rights necessary before\n     applying our licenses so that the public can reuse the\n     material as expected. Licensors should clearly mark any\n     material not subject to the license. This includes other CC-\n     licensed material, or material used under an exception or\n     limitation to copyright. More considerations for licensors:\n     wiki.creativecommons.org/Considerations_for_licensors\n\n     Considerations for the public: By using one of our public\n     licenses, a licensor grants the public permission to use the\n     licensed material under specified terms and conditions. If\n     the licensor's permission is not necessary for any reason--for\n     example, because of any applicable exception or limitation to\n     copyright--then that use is not regulated by the license. Our\n     licenses grant only permissions under copyright and certain\n     other rights that a licensor has authority to grant. Use of\n     the licensed material may still be restricted for other\n     reasons, including because others have copyright or other\n     rights in the material. A licensor may make special requests,\n     such as asking that all changes be marked or described.\n     Although not required by our licenses, you are encouraged to\n     respect those requests where reasonable. More considerations\n     for the public:\n     wiki.creativecommons.org/Considerations_for_licensees\n\n=======================================================================\n\nCreative Commons Attribution-ShareAlike 4.0 International Public\nLicense\n\nBy exercising the Licensed Rights (defined below), You accept and agree\nto be bound by the terms and conditions of this Creative Commons\nAttribution-ShareAlike 4.0 International Public License (\"Public\nLicense\"). To the extent this Public License may be interpreted as a\ncontract, You are granted the Licensed Rights in consideration of Your\nacceptance of these terms and conditions, and the Licensor grants You\nsuch rights in consideration of benefits the Licensor receives from\nmaking the Licensed Material available under these terms and\nconditions.\n\n\nSection 1 -- Definitions.\n\n  a. Adapted Material means material subject to Copyright and Similar\n     Rights that is derived from or based upon the Licensed Material\n     and in which the Licensed Material is translated, altered,\n     arranged, transformed, or otherwise modified in a manner requiring\n     permission under the Copyright and Similar Rights held by the\n     Licensor. For purposes of this Public License, where the Licensed\n     Material is a musical work, performance, or sound recording,\n     Adapted Material is always produced where the Licensed Material is\n     synched in timed relation with a moving image.\n\n  b. Adapter's License means the license You apply to Your Copyright\n     and Similar Rights in Your contributions to Adapted Material in\n     accordance with the terms and conditions of this Public License.\n\n  c. BY-SA Compatible License means a license listed at\n     creativecommons.org/compatiblelicenses, approved by Creative\n     Commons as essentially the equivalent of this Public License.\n\n  d. Copyright and Similar Rights means copyright and/or similar rights\n     closely related to copyright including, without limitation,\n     performance, broadcast, sound recording, and Sui Generis Database\n     Rights, without regard to how the rights are labeled or\n     categorized. For purposes of this Public License, the rights\n     specified in Section 2(b)(1)-(2) are not Copyright and Similar\n     Rights.\n\n  e. Effective Technological Measures means those measures that, in the\n     absence of proper authority, may not be circumvented under laws\n     fulfilling obligations under Article 11 of the WIPO Copyright\n     Treaty adopted on December 20, 1996, and/or similar international\n     agreements.\n\n  f. Exceptions and Limitations means fair use, fair dealing, and/or\n     any other exception or limitation to Copyright and Similar Rights\n     that applies to Your use of the Licensed Material.\n\n  g. License Elements means the license attributes listed in the name\n     of a Creative Commons Public License. The License Elements of this\n     Public License are Attribution and ShareAlike.\n\n  h. Licensed Material means the artistic or literary work, database,\n     or other material to which the Licensor applied this Public\n     License.\n\n  i. Licensed Rights means the rights granted to You subject to the\n     terms and conditions of this Public License, which are limited to\n     all Copyright and Similar Rights that apply to Your use of the\n     Licensed Material and that the Licensor has authority to license.\n\n  j. Licensor means the individual(s) or entity(ies) granting rights\n     under this Public License.\n\n  k. Share means to provide material to the public by any means or\n     process that requires permission under the Licensed Rights, such\n     as reproduction, public display, public performance, distribution,\n     dissemination, communication, or importation, and to make material\n     available to the public including in ways that members of the\n     public may access the material from a place and at a time\n     individually chosen by them.\n\n  l. Sui Generis Database Rights means rights other than copyright\n     resulting from Directive 96/9/EC of the European Parliament and of\n     the Council of 11 March 1996 on the legal protection of databases,\n     as amended and/or succeeded, as well as other essentially\n     equivalent rights anywhere in the world.\n\n  m. You means the individual or entity exercising the Licensed Rights\n     under this Public License. Your has a corresponding meaning.\n\n\nSection 2 -- Scope.\n\n  a. License grant.\n\n       1. Subject to the terms and conditions of this Public License,\n          the Licensor hereby grants You a worldwide, royalty-free,\n          non-sublicensable, non-exclusive, irrevocable license to\n          exercise the Licensed Rights in the Licensed Material to:\n\n            a. reproduce and Share the Licensed Material, in whole or\n               in part; and\n\n            b. produce, reproduce, and Share Adapted Material.\n\n       2. Exceptions and Limitations. For the avoidance of doubt, where\n          Exceptions and Limitations apply to Your use, this Public\n          License does not apply, and You do not need to comply with\n          its terms and conditions.\n\n       3. Term. The term of this Public License is specified in Section\n          6(a).\n\n       4. Media and formats; technical modifications allowed. The\n          Licensor authorizes You to exercise the Licensed Rights in\n          all media and formats whether now known or hereafter created,\n          and to make technical modifications necessary to do so. The\n          Licensor waives and/or agrees not to assert any right or\n          authority to forbid You from making technical modifications\n          necessary to exercise the Licensed Rights, including\n          technical modifications necessary to circumvent Effective\n          Technological Measures. For purposes of this Public License,\n          simply making modifications authorized by this Section 2(a)\n          (4) never produces Adapted Material.\n\n       5. Downstream recipients.\n\n            a. Offer from the Licensor -- Licensed Material. Every\n               recipient of the Licensed Material automatically\n               receives an offer from the Licensor to exercise the\n               Licensed Rights under the terms and conditions of this\n               Public License.\n\n            b. Additional offer from the Licensor -- Adapted Material.\n               Every recipient of Adapted Material from You\n               automatically receives an offer from the Licensor to\n               exercise the Licensed Rights in the Adapted Material\n               under the conditions of the Adapter's License You apply.\n\n            c. No downstream restrictions. You may not offer or impose\n               any additional or different terms or conditions on, or\n               apply any Effective Technological Measures to, the\n               Licensed Material if doing so restricts exercise of the\n               Licensed Rights by any recipient of the Licensed\n               Material.\n\n       6. No endorsement. Nothing in this Public License constitutes or\n          may be construed as permission to assert or imply that You\n          are, or that Your use of the Licensed Material is, connected\n          with, or sponsored, endorsed, or granted official status by,\n          the Licensor or others designated to receive attribution as\n          provided in Section 3(a)(1)(A)(i).\n\n  b. Other rights.\n\n       1. Moral rights, such as the right of integrity, are not\n          licensed under this Public License, nor are publicity,\n          privacy, and/or other similar personality rights; however, to\n          the extent possible, the Licensor waives and/or agrees not to\n          assert any such rights held by the Licensor to the limited\n          extent necessary to allow You to exercise the Licensed\n          Rights, but not otherwise.\n\n       2. Patent and trademark rights are not licensed under this\n          Public License.\n\n       3. To the extent possible, the Licensor waives any right to\n          collect royalties from You for the exercise of the Licensed\n          Rights, whether directly or through a collecting society\n          under any voluntary or waivable statutory or compulsory\n          licensing scheme. In all other cases the Licensor expressly\n          reserves any right to collect such royalties.\n\n\nSection 3 -- License Conditions.\n\nYour exercise of the Licensed Rights is expressly made subject to the\nfollowing conditions.\n\n  a. Attribution.\n\n       1. If You Share the Licensed Material (including in modified\n          form), You must:\n\n            a. retain the following if it is supplied by the Licensor\n               with the Licensed Material:\n\n                 i. identification of the creator(s) of the Licensed\n                    Material and any others designated to receive\n                    attribution, in any reasonable manner requested by\n                    the Licensor (including by pseudonym if\n                    designated);\n\n                ii. a copyright notice;\n\n               iii. a notice that refers to this Public License;\n\n                iv. a notice that refers to the disclaimer of\n                    warranties;\n\n                 v. a URI or hyperlink to the Licensed Material to the\n                    extent reasonably practicable;\n\n            b. indicate if You modified the Licensed Material and\n               retain an indication of any previous modifications; and\n\n            c. indicate the Licensed Material is licensed under this\n               Public License, and include the text of, or the URI or\n               hyperlink to, this Public License.\n\n       2. You may satisfy the conditions in Section 3(a)(1) in any\n          reasonable manner based on the medium, means, and context in\n          which You Share the Licensed Material. For example, it may be\n          reasonable to satisfy the conditions by providing a URI or\n          hyperlink to a resource that includes the required\n          information.\n\n       3. If requested by the Licensor, You must remove any of the\n          information required by Section 3(a)(1)(A) to the extent\n          reasonably practicable.\n\n  b. ShareAlike.\n\n     In addition to the conditions in Section 3(a), if You Share\n     Adapted Material You produce, the following conditions also apply.\n\n       1. The Adapter's License You apply must be a Creative Commons\n          license with the same License Elements, this version or\n          later, or a BY-SA Compatible License.\n\n       2. You must include the text of, or the URI or hyperlink to, the\n          Adapter's License You apply. You may satisfy this condition\n          in any reasonable manner based on the medium, means, and\n          context in which You Share Adapted Material.\n\n       3. You may not offer or impose any additional or different terms\n          or conditions on, or apply any Effective Technological\n          Measures to, Adapted Material that restrict exercise of the\n          rights granted under the Adapter's License You apply.\n\n\nSection 4 -- Sui Generis Database Rights.\n\nWhere the Licensed Rights include Sui Generis Database Rights that\napply to Your use of the Licensed Material:\n\n  a. for the avoidance of doubt, Section 2(a)(1) grants You the right\n     to extract, reuse, reproduce, and Share all or a substantial\n     portion of the contents of the database;\n\n  b. if You include all or a substantial portion of the database\n     contents in a database in which You have Sui Generis Database\n     Rights, then the database in which You have Sui Generis Database\n     Rights (but not its individual contents) is Adapted Material,\n     including for purposes of Section 3(b); and\n\n  c. You must comply with the conditions in Section 3(a) if You Share\n     all or a substantial portion of the contents of the database.\n\nFor the avoidance of doubt, this Section 4 supplements and does not\nreplace Your obligations under this Public License where the Licensed\nRights include other Copyright and Similar Rights.\n\n\nSection 5 -- Disclaimer of Warranties and Limitation of Liability.\n\n  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE\n     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS\n     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF\n     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,\n     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,\n     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR\n     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,\n     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT\n     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT\n     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.\n\n  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE\n     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,\n     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,\n     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,\n     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR\n     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN\n     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR\n     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR\n     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.\n\n  c. The disclaimer of warranties and limitation of liability provided\n     above shall be interpreted in a manner that, to the extent\n     possible, most closely approximates an absolute disclaimer and\n     waiver of all liability.\n\n\nSection 6 -- Term and Termination.\n\n  a. This Public License applies for the term of the Copyright and\n     Similar Rights licensed here. However, if You fail to comply with\n     this Public License, then Your rights under this Public License\n     terminate automatically.\n\n  b. Where Your right to use the Licensed Material has terminated under\n     Section 6(a), it reinstates:\n\n       1. automatically as of the date the violation is cured, provided\n          it is cured within 30 days of Your discovery of the\n          violation; or\n\n       2. upon express reinstatement by the Licensor.\n\n     For the avoidance of doubt, this Section 6(b) does not affect any\n     right the Licensor may have to seek remedies for Your violations\n     of this Public License.\n\n  c. For the avoidance of doubt, the Licensor may also offer the\n     Licensed Material under separate terms or conditions or stop\n     distributing the Licensed Material at any time; however, doing so\n     will not terminate this Public License.\n\n  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public\n     License.\n\n\nSection 7 -- Other Terms and Conditions.\n\n  a. The Licensor shall not be bound by any additional or different\n     terms or conditions communicated by You unless expressly agreed.\n\n  b. Any arrangements, understandings, or agreements regarding the\n     Licensed Material not stated herein are separate from and\n     independent of the terms and conditions of this Public License.\n\n\nSection 8 -- Interpretation.\n\n  a. For the avoidance of doubt, this Public License does not, and\n     shall not be interpreted to, reduce, limit, restrict, or impose\n     conditions on any use of the Licensed Material that could lawfully\n     be made without permission under this Public License.\n\n  b. To the extent possible, if any provision of this Public License is\n     deemed unenforceable, it shall be automatically reformed to the\n     minimum extent necessary to make it enforceable. If the provision\n     cannot be reformed, it shall be severed from this Public License\n     without affecting the enforceability of the remaining terms and\n     conditions.\n\n  c. No term or condition of this Public License will be waived and no\n     failure to comply consented to unless expressly agreed to by the\n     Licensor.\n\n  d. Nothing in this Public License constitutes or may be interpreted\n     as a limitation upon, or waiver of, any privileges and immunities\n     that apply to the Licensor or You, including from the legal\n     processes of any jurisdiction or authority.\n\n\n=======================================================================\n\nCreative Commons is not a party to its public licenses.\nNotwithstanding, Creative Commons may elect to apply one of its public\nlicenses to material it publishes and in those instances will be\nconsidered the “Licensor.” The text of the Creative Commons public\nlicenses is dedicated to the public domain under the CC0 Public Domain\nDedication. Except for the limited purpose of indicating that material\nis shared under a Creative Commons public license or as otherwise\npermitted by the Creative Commons policies published at\ncreativecommons.org/policies, Creative Commons does not authorize the\nuse of the trademark \"Creative Commons\" or any other trademark or logo\nof Creative Commons without its prior written consent including,\nwithout limitation, in connection with any unauthorized modifications\nto any of its public licenses or any other arrangements,\nunderstandings, or agreements concerning use of licensed material. For\nthe avoidance of doubt, this paragraph does not form part of the public\nlicenses.\n\nCreative Commons may be contacted at creativecommons.org.\n"
  },
  {
    "path": "module/apps.js",
    "content": "// 应用功能\nlet apps = {\n    setting: {\n        init: () => {\n            $('#win-setting>.menu>list>a.home')[0].click();\n            $('#win-setting>.page>.cnt.update>.setting-list>div:last-child>.alr>a.checkbox')[localStorage.getItem('autoUpdate') == 'true' ? 'addClass' : 'removeClass']('checked');\n            apps.setting.checkUpdate();\n        },\n        page: (name) => {\n            $('#win-setting>.page>.cnt.' + name).scrollTop(0);\n            $('#win-setting>.page>.cnt.show').removeClass('show');\n            $('#win-setting>.page>.cnt.' + name).addClass('show');\n            $('#win-setting>.menu>list>a.check').removeClass('check');\n            $('#win-setting>.menu>list>a.' + name).addClass('check');\n        },\n        theme_get: () => {\n            $('#set-theme').html(`<loading><svg width=\"30px\" height=\"30px\" viewBox=\"0 0 16 16\">\n            <circle cx=\"8px\" cy=\"8px\" r=\"7px\" style=\"stroke:#7f7f7f50;fill:none;stroke-width:3px;\"></circle>\n            <circle cx=\"8px\" cy=\"8px\" r=\"7px\" style=\"stroke:#2983cc;stroke-width:3px;\"></circle></svg></loading>`);\n            // 实时获取主题\n            api('repos/tjy-gitnub/win12-theme/contents').then(res => {res.json().then(cs => {\n                console.log(cs);\n                cs.forEach(c => {\n                    if (c.type == 'dir') {\n                        api(c.url,true).then(res => {res.json().then(cnt => {\n                            $('#set-theme').html('');\n                            cnt.forEach(cn => {\n                                if (cn.name == 'theme.json') {\n                                    $.getJSON('https://tjy-gitnub.github.io/win12-theme/' + cn.path).then(inf => {\n                                        $('#set-theme>loading').remove();\n                                        $('#set-theme').append(`<a class=\"a act\" onclick=\"apps.setting.theme_set('${c.name}')\" style=\"background-image:url('https://tjy-gitnub.github.io/win12-theme/${c.name}/view.jpg')\">${c.name}</a>`);\n                                    });\n                                }\n                            });\n                        })});\n                    }\n                });\n            })});\n            $('#set-theme').append(`<a class=\"a btn\" onclick=\"$(':root').removeAttr('style');\" style=\"background: #555;\">默认主题</a>`);\n        },\n        theme_set: (infp) => {\n            api('repos/tjy-gitnub/win12-theme/contents/' + infp).then(res => {res.json().then(cnt => {\n                // console.log('https://api.github.com/repos/tjy-gitnub/win12-theme/contents/' + infp);\n                cnt.forEach(cn => {\n                    if (cn.name == 'theme.json') {\n                        $.getJSON('https://tjy-gitnub.github.io/win12-theme/' + cn.path).then(inf => {\n                            let infjs = inf;\n                            cnt.forEach(fbg => {\n                                console.log(fbg, infjs);\n                                if (fbg.name == infjs.bg) {\n                                    $(':root').css('--bgul', `url('https://tjy-gitnub.github.io/win12-theme/${fbg.path}')`);\n                                    $(':root').css('--theme-1', infjs.color1);\n                                    $(':root').css('--theme-2', infjs.color2);\n                                    $(':root').css('--href', infjs.href);\n                                    // $('#set-theme').append(`<a class=\"a act\" onclick=\"apps.setting.theme_set(\\`(${inf})\\`)\" style=\"background-image:url('https://tjy-gitnub.github.io/win12-theme/${fbg.path}')\">${c.name}</a>`);\n                                }\n                            });\n                        });\n                    }\n                });\n            })});\n        },\n        // 无法正常运行，待调试\n        checkUpdate: () => {\n            $('#win-setting>.page>.cnt.update>.lo>.update-main .notice')[0].innerText = '开发者暂未完善此功能';\n            $('#win-setting>.page>.cnt.update>.lo>.update-main .detail')[0].innerHTML = 'Windows 更新已被禁用';\n            $('#win-setting>.page>.cnt.update>.setting-list>.update-now').addClass('disabled');\n            $('#win-setting>.page>.cnt.update>.lo>.update-main>div:last-child').addClass('disabled');\n            // Simulate the previous functionality for backward compatibility but disable actual updates\n            setTimeout(() => {\n                $('#win-setting>.page>.cnt.update>.lo>.update-main .notice')[0].innerText = '开发者暂未完善此功能';\n                $('#win-setting>.page>.cnt.update>.lo>.update-main .detail')[0].innerText = 'Windows 更新已被禁用';\n                // $('#win-setting>.page>.cnt.update>.setting-list>.update-now>div>p:first-child')[0].innerText = '开发者暂未完善此功能';\n                // $('#win-setting>.page>.cnt.update>.setting-list>.update-now>div>p:last-child')[0].innerText = 'Windows 更新已被禁用';\n                // Keep buttons disabled as requested\n                $('#win-setting>.page>.cnt.update>.setting-list>.update-now').addClass('disabled');\n                $('#win-setting>.page>.cnt.update>.lo>.update-main>div:last-child').addClass('disabled');\n            }, 1000);\n        },\n    },\n    msstore: {\n        init: () => {\n            $('#win-msstore>.menu>list>a.home')[0].click();\n        },\n        page: (name) => {\n            $('#win-msstore>.page>.cnt.' + name).scrollTop(0);\n            $('#win-msstore>.page>.cnt.show').removeClass('show');\n            $('#win-msstore>.page>.cnt.' + name).addClass('show');\n            $('#win-msstore>.menu>list>a.check').removeClass('check');\n            $('#win-msstore>.menu>list>a.' + name).addClass('check');\n        }\n    },\n    run: {\n        init: () => {\n            $('#win-run>.open>input').val(run_cmd);   //在windows中，运行输入的内容会被保留\n            window.setTimeout(() => {\n                $('#win-run>.open>input').focus();\n                $('#win-run>.open>input').select();\n            }, 300);\n        },\n        run: (cmd) => {\n            if (!runcmd(cmd)) {\n                if (cmd != '') {\n                    try {\n                        cmd = cmd.replace(/\\/$/, '');\n                        var pathl = cmd.split('/');\n                        let tmp = apps.explorer.path;\n                        let valid = true;\n                        pathl.forEach(name => {\n                            if (Object.prototype.hasOwnProperty.call(tmp['folder'], name)) {\n                                tmp = tmp['folder'][name];\n                            }\n                            else {\n                                valid = false;\n                                return false;\n                            }\n                        });\n                        if (valid == true) {\n                            run_cmd = cmd;\n                            openapp('explorer');\n                            window.setTimeout(() => {\n                                apps.explorer.goto(cmd);\n                            }, 300);\n                        }\n                        else {\n                            nts['Can-not-open-file'] = {\n                                cnt: '<p class=\"tit\">' + cmd + `</p>\n                                <p>Windows 找不到文件 '` + cmd + '\\'。请确定文件名是否正确后，再试一次。</p> ',\n                                btn: [\n                                    { type: 'main', text: '确定', js: 'closenotice();showwin(\\'run\\');$(\\'#win-run>.open>input\\').select();' },\n                                    { type: 'cancel', text: '在 Micrsoft Edge 中搜索', js: 'closenotice();openapp(\\'edge\\');window.setTimeout(() => {apps.edge.newtab();apps.edge.goto(\\'https://www.bing.com/search?q=' + encodeURIComponent(cmd) + '\\');}, 300);' }\n                                ]\n                            };\n                            shownotice('Can-not-open-file');\n                        }\n                    }\n                    catch {\n                        nts['Can-not-open-file'] = {\n                            cnt: '<p class=\"tit\">' + cmd + `</p>\n                            <p>Windows 找不到文件 '` + cmd + '\\'。请确定文件名是否正确后，再试一次。</p> ',\n                            btn: [\n                                { type: 'main', text: '确定', js: 'closenotice();showwin(\\'run\\');$(\\'#win-run>.open>input\\').select();' },\n                                { type: 'cancel', text: '在 Micrsoft Edge 中搜索', js: 'closenotice();openapp(\\'edge\\');window.setTimeout(() => {apps.edge.newtab();apps.edge.goto(\\'https://www.bing.com/search?q=' + encodeURIComponent(cmd) + '\\');}, 300);' }\n                            ]\n                        };\n                        shownotice('Can-not-open-file');\n                    }\n                }\n            }\n        }\n    },\n    taskmgr: {\n        sortType: 'cpu',\n        sortOrder: 'up-down',\n        tasks: structuredClone(taskmgrTasks),\n        cpu: 0,\n        cpuChart: null,\n        cpuBg: null,\n        memory: 0,\n        memoryChart: null,\n        memoryBg: null,\n        memory2Elt: null,\n        cpuRunningTime: 0,\n        disk: 0,\n        diskChart: null,\n        diskBg: null,\n        disk2Chart: null,\n        disk2Bg: null,\n        diskSpeed: {\n            read: 0,\n            write: 0\n        },\n        wifi: {\n            receive: 0,\n            send: 0\n        },\n        wifiChart: null,\n        wifiBg: null,\n        gpu: {\n            d3: 0,\n            copy: 0,\n            videod: 0,\n            videop: 0,\n            usage: 0\n        },\n        gpuChart: [null, null, null, null],\n        gpuBg: [null, null, null, null],\n        gpu2Chart: [null, null],\n        gpu2Bg: [null, null],\n        gpuMemory: {\n            private: 0,\n            public: 0\n        },\n        gpu3Chart: null,\n        processList: [],\n        handle: 0,\n        foldHide: false,\n        delay: 0,\n        remove: () => {\n            apps.taskmgr.loaded = false;\n            window.clearInterval(apps.taskmgr.handle);\n            if (apps.taskmgr.preLoaded == true) {\n                apps.taskmgr.preLoaded = false;\n                apps.taskmgr.load(false);\n            }\n            else {\n                apps.taskmgr.preLoaded = false;\n            }\n        },\n        init: () => {\n            window.setTimeout(() => {\n                $('#win-taskmgr>.menu>list.focs>a')[0].click();\n            }, 200);\n        },\n        fold: () => {\n            if (!apps.taskmgr.foldHide) {\n                window.setTimeout(() => {\n                    $('#win-taskmgr>.menu>.focs>a>p').hide();\n                }, 50);\n                $('#win-taskmgr')[0].style.gridTemplateColumns = '78px auto';\n            }\n            else {\n                window.setTimeout(() => {\n                    $('#win-taskmgr>.menu>.focs>a>p').show();\n                }, 100);\n                $('#win-taskmgr')[0].style.gridTemplateColumns = '320px auto';\n            }\n            apps.taskmgr.foldHide = !apps.taskmgr.foldHide;\n        },\n        load: (init_all = true) => {\n            if (init_all == true) {\n                const performance = $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph')[0];\n                performance.$$('.graph-cpu>.information>.left>div:nth-child(3)>.value')[0].innerText = apps.taskmgr.tasks.length;\n\n                apps.taskmgr.cpuChart = performance.$$('.graph-cpu>.graph>.chart')[0];\n                apps.taskmgr.cpuBg = performance.$$('.graph-cpu>.graph>.bg')[0];\n                apps.taskmgr.cpuBg.innerHTML = '<g class=\"col\"></g><g class=\"row\"></g>';\n                apps.taskmgr.cpuChart.innerHTML = '<path d=\"M 6000 1000\" stroke=\"#2983cc\" stroke-width=\"3px\" fill=\"#2983cc22\" />';\n\n                apps.taskmgr.memoryChart = performance.$$('.graph-memory>.graph>.chart')[0];\n                apps.taskmgr.memoryBg = performance.$$('.graph-memory>.graph>.bg')[0];\n                apps.taskmgr.memoryBg.innerHTML = '<g class=\"col\"></g><g class=\"row\"></g>';\n                apps.taskmgr.memoryChart.innerHTML = '<path d=\"M 6000 1000\" stroke=\"#660099\" stroke-width=\"3px\" fill=\"#66009922\" />';\n\n                apps.taskmgr.memory2Elt = performance.$$('.graph-memory>.graph2>.chart')[0];\n\n                apps.taskmgr.diskChart = performance.$$('.graph-disk>.graph>.chart')[0];\n                apps.taskmgr.diskBg = performance.$$('.graph-disk>.graph>.bg')[0];\n                apps.taskmgr.diskBg.innerHTML = '<g class=\"col\"></g><g class=\"row\"></g>';\n                apps.taskmgr.diskChart.innerHTML = '<path d=\"M 6000 1000\" stroke=\"#008000\" stroke-width=\"3px\" fill=\"#00800022\" />';\n\n                apps.taskmgr.disk2Chart = performance.$$('.graph-disk>.graph2>.chart')[0];\n                apps.taskmgr.disk2Bg = performance.$$('.graph-disk>.graph2>.bg')[0];\n                apps.taskmgr.disk2Bg.innerHTML = '<g class=\"col\"></g><g class=\"row\"></g>';\n                apps.taskmgr.disk2Chart.innerHTML = '<path d=\"M 6000 1000\" stroke=\"#008000\" stroke-width=\"3px\" fill=\"#00800022\" /><path d=\"M 6000 1000\" stroke=\"#008000\" stroke-width=\"3px\" fill=\"none\" stroke-dasharray=\"15, 15\" />';\n\n                apps.taskmgr.wifiChart = performance.$$('.graph-wifi>.graph>.chart')[0];\n                apps.taskmgr.wifiBg = performance.$$('.graph-wifi>.graph>.bg')[0];\n                apps.taskmgr.wifiChart.innerHTML = '<path d=\"M 6000 1000\" stroke=\"#8e5829\" stroke-width=\"3px\" fill=\"#8e582922\" /><path d=\"M 6000 1000\" stroke=\"#8e5829\" stroke-width=\"3px\" fill=\"none\" stroke-dasharray=\"10, 10\" />';\n                apps.taskmgr.wifiBg.innerHTML = '<g class=\"col\"></g><g class=\"row\"></g>';\n\n                apps.taskmgr.gpu3Chart = performance.$$('.graph-gpu>.graphs>svg')[0];\n                apps.taskmgr.gpu3Chart.innerHTML = '<path d=\"M 6000 1000\" stroke=\"#2983cc\" stroke-width=\"3px\" fill=\"#2983cc22\" />';\n\n                for (var i = 1; i <= 4; i++) {\n                    apps.taskmgr.gpuChart[i-1] = performance.$$('.graph-gpu>.graphs>.graph' + i + '>.chart>.chart')[0];\n                    apps.taskmgr.gpuChart[i-1].innerHTML = '<path d=\"M 6000 1000\" stroke-width=\"3px\" stroke=\"#2983cc\" fill=\"#2983cc22\" />';\n                    apps.taskmgr.gpuBg[i-1] = performance.$$('.graph-gpu>.graphs>.graph' + i + '>.chart>.bg')[0];\n                    apps.taskmgr.gpuBg[i-1].innerHTML = '<g class=\"col\"></g><g class=\"row\"></g>';\n                }\n                for (var i = 1; i <= 2; i++) {\n                    apps.taskmgr.gpu2Chart[i-1] = performance.$$('.graph-gpu>.gpu2-' + i + '>.chart')[0];\n                    apps.taskmgr.gpu2Bg[i-1] = performance.$$('.graph-gpu>.gpu2-' + i + '>.bg')[0];\n                    apps.taskmgr.gpu2Bg[i-1].innerHTML = '<g class=\"col\"></g><g class=\"row\"></g>';\n                    apps.taskmgr.gpu2Chart[i-1].innerHTML = '<path d=\"M 6000 1000\" stroke-width=\"3px\" stroke=\"#2983cc\" fill=\"#2983cc22\" />';\n                }\n            }\n\n            if (apps.taskmgr.preLoaded != true && apps.taskmgr.loaded != true) {\n                apps.taskmgr.gpuMemory.private = Number((Math.random() * 4).toFixed(2));\n                apps.taskmgr.gpuMemory.public = Number((Math.random() * 4).toFixed(2));\n                apps.taskmgr.generateProcesses();\n                apps.taskmgr.sort();\n                apps.taskmgr.loadProcesses();\n                apps.taskmgr.performanceLoad();\n            }\n\n            if (init_all == true) {\n                apps.taskmgr.gpuMemory.private = Number((Math.random() * 4).toFixed(2));\n                apps.taskmgr.gpuMemory.public = Number((Math.random() * 4).toFixed(2));\n                apps.taskmgr.loadProcesses();\n                apps.taskmgr.generateProcesses();\n                apps.taskmgr.sort();\n                apps.taskmgr.performanceLoad();\n                apps.taskmgr.drawGrids();\n                apps.taskmgr.handle = window.setInterval(() => {\n                    apps.taskmgr.loadProcesses();\n                    apps.taskmgr.generateProcesses();\n                    apps.taskmgr.sort();\n                    apps.taskmgr.performanceLoad();\n                    apps.taskmgr.loadGraph();\n                    apps.taskmgr.gridLine();\n                    apps.taskmgr.memory2Elt.style.width = apps.taskmgr.memory + '%';\n                }, 1000);\n            }\n            else if (apps.taskmgr.loaded != true && apps.taskmgr.preLoaded != true) {\n                apps.taskmgr.handle = window.setInterval(() => {\n                    apps.taskmgr.loadProcesses();\n                    apps.taskmgr.generateProcesses();\n                    apps.taskmgr.sort();\n                    apps.taskmgr.performanceLoad();\n                }, 1000);\n            }\n        },\n        page: (name) => {\n            $('#win-taskmgr>.main>.cnt.' + name).scrollTop(0);\n            $('#win-taskmgr>.main>.cnt.show').removeClass('show');\n            $('#win-taskmgr>.main>.cnt.' + name).addClass('show');\n            $('#win-taskmgr>.menu>list.focs>a.check').removeClass('check');\n            $('#win-taskmgr>.menu>list.focs>a.' + name).addClass('check');\n            if (!(name == 'processes' || name == '404')) {\n                document.getElementById('tsk-search').style.display = 'none';\n            } else {\n                document.getElementById('tsk-search').style.display = '';\n            }\n        },\n        graph: (name) => {\n            $('#win-setting>.page>.cnt.' + name).scrollTop(0);\n            $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.show').removeClass('show');\n            $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.' + name).addClass('show');\n            $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu>.check').removeClass('check');\n            $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu>.' + name).addClass('check');\n        },\n        generateProcesses: () => {\n            let processList = [];\n            let max = 100 / apps.taskmgr.tasks.length;\n            let cpusum = 0, memorysum = 0, disksum = 0, diskUsing = Number(Math.random()) > 0.7/*, color = window.getComputedStyle(page, null).getPropertyValue('--href')*/;\n            var search_len = 0;\n            for (const elt of apps.taskmgr.tasks) {\n                let cpu = Number((Math.random() * max).toFixed(1)),\n                    memory = apps.taskmgr.memory != 0 ? apps.taskmgr.memory / apps.taskmgr.tasks.length + Number(((Math.random() - 0.5) / 5).toFixed(1)) : Number((Math.random() * max).toFixed(1)),\n                    disk = Number((Math.random() * max).toFixed(1)) > (max / 1.2) && diskUsing ? max * Number(Math.random().toFixed(1)) : 0;\n                cpusum = Number((cpusum + cpu).toFixed(1));\n                memorysum = Number((memorysum + memory).toFixed(1));\n                disksum = Number((disksum + disk).toFixed(1));\n                if (document.getElementById('tsk-search').value != '' && document.getElementById('tsk-search').style.display == '' && (!elt.name.toLowerCase().includes(document.getElementById('tsk-search').value.toLowerCase()))) {\n                    continue;\n                }\n                processList.splice(processList.length, 0, {\n                    name: elt.name,\n                    icon: elt.icon || '',\n                    system: elt.system,\n                    cpu: cpu,\n                    memory: memory,\n                    disk: disk\n                });\n                search_len++;\n            }\n            if (search_len == 0) {\n                apps.taskmgr.page('404');\n            }\n            else {\n                if ($('#tsk-search').val() != '' && $('#tsk-search')[0].style.display == '') {\n                    apps.taskmgr.page('processes');\n                }\n            }\n            apps.taskmgr.cpu = cpusum;\n            apps.taskmgr.memory = memorysum;\n            apps.taskmgr.disk = disksum;\n            apps.taskmgr.processList = processList;\n\n        },\n        loadProcesses: (processList = apps.taskmgr.processList) => {\n            const processContainer = $('#win-taskmgr>.main>.cnt.processes tbody.view')[0];\n            const values = $('#win-taskmgr>.main>.cnt.processes thead>tr>th>.value');\n            const cpu = values[0], memory = values[1], disk = values[2];\n            let selected;\n            if ($('#win-taskmgr>.main>.cnt.processes tbody.view>tr.select>td:first-child>.text')[0]) {\n                selected = $('#win-taskmgr>.main>.cnt.processes tbody.view>tr.select>td:first-child>.text')[0].innerText;\n            }\n            let max = 100 / apps.taskmgr.tasks.length;\n            processContainer.innerHTML = '';\n            for (const elt of processList) {\n                const newElt = document.createElement('tr');\n                newElt.classList.add('notrans');\n                newElt.innerHTML = `<td><div class=\"text\"><div class=\"icon\" style=\"background-image: url('${elt.icon ? elt.icon : ''}');\"></div>${elt.name}</div></td><td style=\"text-align: right;background-color: color-mix(in srgb, var(--theme-2) ${elt.cpu >= (max / 1.3) ? '75%' : '50%'}, transparent);\">${elt.cpu.toFixed(1)}%</td><td style=\"text-align: right;background-color: color-mix(in srgb, var(--theme-2) ${elt.memory >= (max / 1) ? '75%' : '50%'}, transparent);\">${elt.memory.toFixed(1)}%</td><td style=\"text-align: right;background-color: color-mix(in srgb, var(--theme-2) ${elt.disk >= (max / 1.3) ? '75%' : '50%'}, transparent);\">${elt.disk.toFixed(1)}%</td><td>${['非常低', '非常低', '非常低', '低', '中'][Math.floor(Math.random() * 5)]}</td>`;\n                if (elt.name == selected) {\n                    newElt.classList.add('select');\n                }\n                processContainer.appendChild(newElt);\n                newElt.onclick = function () {\n                    apps.taskmgr.selectProcess(this);\n                };\n                newElt.oncontextmenu = function (e) {\n                    return showcm(e, 'taskmgr.processes', elt.name);\n                };\n                window.setTimeout(() => {\n                    newElt.classList.remove('notrans');\n                }, 100);\n            }\n            cpu.innerText = apps.taskmgr.cpu.toFixed(1) + '%';\n            memory.innerText = apps.taskmgr.memory.toFixed(1) + '%';\n            disk.innerText = apps.taskmgr.disk.toFixed(1) + '%';\n        },\n        sort: (processList = apps.taskmgr.processList, type = apps.taskmgr.sortType, order = apps.taskmgr.sortOrder) => {\n            processList.sort((a, b) => {\n                if (a[type] > b[type]) {\n                    return order == 'up-down' ? -1 : 1;\n                }\n                else if (a[type] <= b[type]) {\n                    return order == 'up-down' ? 1 : -1;\n                }\n            });\n            apps.taskmgr.processList = processList;\n        },\n        performanceLoad: () => {\n            $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-cpu>.information>.left>div:nth-child(1)>.value')[0].innerText = `${apps.taskmgr.cpu.toFixed(1)}%`;\n            $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-cpu>.information>.left>div:nth-child(2)>.value')[0].innerText = `${(3200 / 100 * apps.taskmgr.cpu).toFixed(1)} GHz`;\n            $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-cpu>.information>.left>div:nth-child(4)>.value')[0].innerText = `${apps.taskmgr.tasks.length * (5 + Math.floor(Math.random() * 5))}`;\n            $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-cpu>.information>.left>div:nth-child(5)>.value')[0].innerText = `${apps.taskmgr.tasks.length * (10 + Math.floor(Math.random() * 20))}`;\n            let sec = apps.taskmgr.cpuRunningTime;\n            let min = Math.floor(sec / 60);\n            sec %= 60;\n            let hour = Math.floor(min / 60);\n            min %= 60;\n            let day = Math.floor(hour / 24);\n            hour %= 24;\n            $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-cpu>.information>.left>div:nth-child(6)>.value')[0].innerText = `${day}:${String(hour).length < 2 ? '0' : ''}${hour}:${String(min).length < 2 ? '0' : ''}${min}:${String(sec).length < 2 ? '0' : ''}${sec}`;\n            $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu>.graph-cpu>.right>.data>.value1')[0].innerText = `${apps.taskmgr.cpu.toFixed(1)}%`;\n            $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu>.graph-cpu>.right>.data>.value2')[0].innerText = `${(3200 / 100 * apps.taskmgr.cpu).toFixed(1)}GHz`;\n\n            $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-memory>.information>.left>div:nth-child(1)>.value')[0].innerText = `${apps.taskmgr.memory.toFixed(1)} GB (0 MB)`;\n            $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-memory>.information>.left>div:nth-child(2)>.value')[0].innerText = `${(100 - apps.taskmgr.memory).toFixed(1)} GB`;\n            $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-memory>.information>.left>div:nth-child(3)>.value')[0].innerText = `${(apps.taskmgr.memory - 2).toFixed(1)} / 100 GB`;\n            $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-memory>.information>.left>div:nth-child(4)>.value')[0].innerText = `${(apps.taskmgr.memory / 2).toFixed(2)} GB`;\n            $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu>.graph-memory>.right>.data>.value1')[0].innerText = `${apps.taskmgr.memory.toFixed(1)} / 100 GB`;\n            $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu>.graph-memory>.right>.data>.value2')[0].innerText = `${apps.taskmgr.memory.toFixed(1)}%`;\n\n            apps.taskmgr.diskSpeed.read = apps.taskmgr.disk != 0 ? (Math.random() * 100).toFixed(2) : 0;\n            apps.taskmgr.diskSpeed.write = apps.taskmgr.disk != 0 ? (Math.random() * 100).toFixed(2) : 0;\n            $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-disk>.information>.left>div:nth-child(1)>.value')[0].innerText = `${apps.taskmgr.disk}%`;\n            $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-disk>.information>.left>div:nth-child(2)>.value')[0].innerText = `${apps.taskmgr.disk != 0 ? Math.random().toFixed(2) : 0} 毫秒`;\n            $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-disk>.information>.left>div:nth-child(3)>.value')[0].innerText = `${apps.taskmgr.diskSpeed.read} ${apps.taskmgr.disk != 0 ? 'MB/秒' : 'KB/秒'}`;\n            $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-disk>.information>.left>div:nth-child(4)>.value')[0].innerText = `${apps.taskmgr.diskSpeed.write} ${apps.taskmgr.disk != 0 ? 'MB/秒' : 'KB/秒'}`;\n            $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu>.graph-disk>.right>.data>.value2')[0].innerText = `${apps.taskmgr.disk}%`;\n\n            $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu>.graph-gpu>.right>.data>.value2')[0].innerText = `${apps.taskmgr.gpu.usage.toFixed(1)}%`;\n\n            apps.taskmgr.gpu.d3 = Number((Math.random() * 15).toFixed(2));\n            apps.taskmgr.gpu.copy = Number((Math.random() * 15).toFixed(2));\n            apps.taskmgr.gpu.videop = Number((Math.random() * 15).toFixed(2));\n            apps.taskmgr.gpu.videod = Number((Math.random() * 15).toFixed(2));\n            apps.taskmgr.gpu.usage = Number(((apps.taskmgr.gpu.d3 + apps.taskmgr.gpu.copy + apps.taskmgr.gpu.videop + apps.taskmgr.gpu.videod) / 4).toFixed(1));\n\n            apps.taskmgr.wifi.receive = Number((Math.random() * 100).toFixed(2));\n            apps.taskmgr.wifi.send = Number((Math.random() * 100).toFixed(2));\n            $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-wifi>.information>.left>div:nth-child(1)>.value')[0].innerText = `${apps.taskmgr.wifi.send.toFixed(2)} Mbps`;\n            $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-wifi>.information>.left>div:nth-child(2)>.value')[0].innerText = `${apps.taskmgr.wifi.receive.toFixed(2)} Mbps`;\n            $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu>.graph-wifi>.right>.data>.value2')[0].innerText = `发送: ${apps.taskmgr.wifi.send} 接收: ${apps.taskmgr.wifi.receive} Mbps`;\n        },\n        drawGraph: (chart, data, nth = 0) => {\n            var path = $(chart.querySelectorAll('path')[nth]).attr('d');\n            path = path.replace(/ L 6000 1000$/, '');\n            var pathl = path.split(' ');\n            var newPath = '';\n            var sum = 0, head = 0;\n            for (var i = 0; i < pathl.length; i += 3) {\n                const arg = pathl[i];\n                if (arg == 'M' && Number(pathl[i + 1]) > 0) {\n                    pathl[i + 1] = Number(pathl[i + 1]) - 100;\n                    pathl[i + 2] = pathl[i + 2];\n                }\n                else if (arg == 'M' && Number(pathl[i + 1]) <= 0) {\n                    pathl[i + 1] = 0;\n                    pathl[i + 2] = 1000;\n                }\n                else if (arg == 'L') {\n                    if (sum == 0) {\n                        head = i;\n                    }\n                    else if (sum >= 60) {\n                        pathl.splice(head, 3);\n                        sum--;\n                        i -= 3;\n                    }\n                    pathl[i + 1] = Number(pathl[i + 1]) - 100;\n                    sum++;\n                }\n            }\n            pathl.push('L', '6000', 1000 - data, 'L', '6000', '1000');\n            window.setTimeout(() => {\n                $(chart.querySelectorAll('path')[nth]).attr('d', '');\n                for (const arg of pathl) {\n                    if (!(arg === '')) {\n                        newPath += arg + ' ';\n                    }\n                }\n                newPath = newPath.substring(0, newPath.length - 1);\n                $(chart.querySelectorAll('path')[nth]).attr('d', newPath);\n            }, apps.taskmgr.delay);\n        },\n        loadGraph: () => {\n            apps.taskmgr.drawGraph(apps.taskmgr.cpuChart, apps.taskmgr.cpu * 10);\n            apps.taskmgr.drawGraph(apps.taskmgr.memoryChart, apps.taskmgr.memory * 10);\n            apps.taskmgr.drawGraph(apps.taskmgr.diskChart, apps.taskmgr.disk * 10);\n            apps.taskmgr.drawGraph(apps.taskmgr.disk2Chart, apps.taskmgr.diskSpeed.read * 10, 0);\n            apps.taskmgr.drawGraph(apps.taskmgr.disk2Chart, apps.taskmgr.diskSpeed.write * 10, 1);\n            apps.taskmgr.drawGraph(apps.taskmgr.wifiChart, apps.taskmgr.wifi.receive * 10, 0);\n            apps.taskmgr.drawGraph(apps.taskmgr.wifiChart, apps.taskmgr.wifi.send * 10, 1);\n            for (var i = 0; i < 4; i++) {\n                apps.taskmgr.drawGraph(apps.taskmgr.gpuChart[i], apps.taskmgr.gpu[['d3', 'copy', 'videop', 'videod'][i]] * 10);\n            }\n            for (var i = 0; i < 2; i++) {\n                apps.taskmgr.drawGraph(apps.taskmgr.gpu2Chart[i], apps.taskmgr.gpuMemory[['private', 'public'][i]] * (i == 1 ? (1000 / 32) : (1000 / 16)));\n            }\n            apps.taskmgr.drawGraph(apps.taskmgr.gpu3Chart, apps.taskmgr.gpu.usage * 10);\n            const menu = $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu')[0];\n            menu.$$('.graph-cpu svg')[0].innerHTML = apps.taskmgr.cpuChart.innerHTML;\n            menu.$$('.graph-memory svg')[0].innerHTML = apps.taskmgr.memoryChart.innerHTML;\n            menu.$$('.graph-disk svg')[0].innerHTML = apps.taskmgr.diskChart.innerHTML;\n            menu.$$('.graph-wifi svg')[0].innerHTML = apps.taskmgr.wifiChart.innerHTML;\n            menu.$$('.graph-gpu svg')[0].innerHTML = apps.taskmgr.gpu3Chart.innerHTML;\n        },\n        changeSort: (elt, type) => {\n            for (const _elt of $('#win-taskmgr>.main>.cnt.processes thead>tr>th>i')) {\n                _elt.className = 'bi';\n            }\n            if (apps.taskmgr.sortOrder == 'up-down' && apps.taskmgr.sortType == type) {\n                elt.className = 'bi bi-chevron-up';\n                apps.taskmgr.sortOrder = 'down-up';\n                apps.taskmgr.sort(apps.taskmgr.processList, type, 'down-up');\n            }\n            else {\n                elt.className = 'bi bi-chevron-down';\n                apps.taskmgr.sortOrder = 'up-down';\n                apps.taskmgr.sortType = type;\n                apps.taskmgr.sort(apps.taskmgr.processList, type, 'up-down');\n            }\n        },\n        gridLine: () => {\n            apps.taskmgr.changeGrids(apps.taskmgr.memoryBg);\n            apps.taskmgr.changeGrids(apps.taskmgr.cpuBg);\n            apps.taskmgr.changeGrids(apps.taskmgr.diskBg);\n            apps.taskmgr.changeGrids(apps.taskmgr.disk2Bg);\n            apps.taskmgr.changeGrids(apps.taskmgr.wifiBg);\n            apps.taskmgr.gpuBg.forEach(function (chart) {\n                apps.taskmgr.changeGrids(chart);\n            });\n            apps.taskmgr.gpu2Bg.forEach(function (chart) {\n                apps.taskmgr.changeGrids(chart);\n            });\n        },\n        selectProcess: (elt) => {\n            $('#win-taskmgr>.main>.cnt.processes tbody.view>.select').removeClass('select');\n            $(elt).addClass('select');\n        },\n        taskkill: (name) => {\n            if (name == 'System') {\n                window.location = 'bluescreen.html';\n            }\n            else {\n                apps.taskmgr.tasks.splice(apps.taskmgr.tasks.findIndex(elt => elt.name == name), 1);\n                if (taskmgrTasks.find(elt => elt.name == name).link != null) {\n                    hidewin(taskmgrTasks.find(elt => elt.name == name).link);\n                }\n            }\n        },\n        initgrids: (chart) => {\n            const column = chart.querySelector('g.col'), row = chart.querySelector('g.row');\n            for (var i = 0; i <= 20; i++) {\n                column.innerHTML += `<path d=\"M ${i * 300} 0 L ${i * 300} 1000 Z\" stroke=\"#aeaeae\" fill=\"none\" />`;\n            }\n            for (var i = 0; i <= 10; i++) {\n                row.innerHTML += `<path d=\"M 0 ${i * 100} L 6000 ${i * 100} Z\" stroke=\"#aeaeae\" fill=\"none\" />`;\n            }\n        },\n        drawGrids: () => {\n            apps.taskmgr.initgrids(apps.taskmgr.cpuBg);\n            apps.taskmgr.initgrids(apps.taskmgr.diskBg);\n            apps.taskmgr.initgrids(apps.taskmgr.memoryBg);\n            apps.taskmgr.initgrids(apps.taskmgr.disk2Bg);\n            apps.taskmgr.initgrids(apps.taskmgr.wifiBg);\n            for (var i = 0; i < 4; i++) {\n                apps.taskmgr.initgrids(apps.taskmgr.gpuBg[i]);\n            }\n            for (var i = 0; i < 2; i++) {\n                apps.taskmgr.initgrids(apps.taskmgr.gpu2Bg[i]);\n            }\n        },\n        changeGrids: (chart) => {\n            const grid = chart.querySelectorAll('g.col>path');\n            for (const elt of grid) {\n                let path = $(elt).attr('d').split(' ');\n                for (var i = 0; i < path.length; i++) {\n                    if (path[i] == 'M' || path[i] == 'L') {\n                        var cur = Number(path[i+1]);\n                        cur -= 100;\n                        if (cur < 0) {\n                            cur = (300 - (-cur)) + 6000;\n                        }\n                        path[i+1] = String(cur);\n                    }\n                }\n                $(elt).attr('d', '');\n                let tmp = '';\n                for (const comp of path) {\n                    tmp += comp + ' ';\n                }\n                $(elt).attr('d', tmp);\n                console.log($(elt).attr('d'));\n            }\n        }\n    },\n    whiteboard: {\n        canvas: null,\n        ctx: null,\n        windowResizeObserver: null,\n        color: 'red',\n        init: () => {\n            apps.whiteboard.ctx.lineJoin = 'round';\n            apps.whiteboard.ctx.lineCap = 'round';\n            apps.whiteboard.changeColor(apps.whiteboard.color);\n            if ($(':root').hasClass('dark')) {\n                $('.window.whiteboard>.titbar>p').text('Blackboard');\n            } else {\n                $('.window.whiteboard>.titbar>p').text('Whiteboard');\n            }\n        },\n        changeColor: (color) => {\n            apps.whiteboard.color = color;\n            if (color == 'eraser') {\n                apps.whiteboard.ctx.strokeStyle = 'black';\n                apps.whiteboard.ctx.lineWidth = 35;\n                apps.whiteboard.ctx.globalCompositeOperation = 'destination-out';\n            }\n            else {\n                apps.whiteboard.ctx.strokeStyle = color;\n                apps.whiteboard.ctx.globalCompositeOperation = 'source-over';\n                apps.whiteboard.ctx.lineWidth = 8;\n            }\n        },\n        changePen: function () {\n            const pens = $('#win-whiteboard>.toolbar>.tools>*');\n            for (const elt of pens) {\n                elt.classList.remove('active');\n            }\n            this.classList.add('active');\n            apps.whiteboard.changeColor(this.dataset.color);\n        },\n        load: () => {\n            apps.whiteboard.canvas = $('#win-whiteboard>canvas')[0];\n            apps.whiteboard.ctx = apps.whiteboard.canvas.getContext('2d');\n            apps.whiteboard.windowResizeObserver = new ResizeObserver(apps.whiteboard.resize);\n            apps.whiteboard.windowResizeObserver.observe($('.window.whiteboard')[0], { box: 'border-box' });\n        },\n        resize: () => {\n            try {\n                const imgData = apps.whiteboard.ctx.getImageData(0, 0, apps.whiteboard.canvas.width, apps.whiteboard.canvas.height);\n                apps.whiteboard.canvas.width = $('#win-whiteboard')[0].clientWidth;\n                apps.whiteboard.canvas.height = $('#win-whiteboard')[0].clientHeight;\n                apps.whiteboard.ctx.putImageData(imgData, 0, 0);\n            }\n            catch {\n                apps.whiteboard.canvas.width = $('#win-whiteboard')[0].clientWidth;\n                apps.whiteboard.canvas.height = $('#win-whiteboard')[0].clientHeight;\n            }\n            apps.whiteboard.init();\n        },\n        draw: (e) => {\n            let offsetX, offsetY, left = $('#win-whiteboard')[0].getBoundingClientRect().left, top = $('#win-whiteboard')[0].getBoundingClientRect().top;\n            if (e.type.match('mouse')) {\n                offsetX = e.clientX - left, offsetY = e.clientY - top;\n            }\n            else if (e.type.match('touch')) {\n                offsetX = e.touches[0].clientX - left, offsetY = e.touches[0].clientY - top;\n            }\n            apps.whiteboard.ctx.beginPath();\n            apps.whiteboard.ctx.moveTo(offsetX, offsetY);\n            page.onmousemove = apps.whiteboard.drawing;\n            page.ontouchmove = apps.whiteboard.drawing;\n            page.onmouseup = apps.whiteboard.up;\n            page.ontouchend = apps.whiteboard.up;\n            page.ontouchcancel = apps.whiteboard.up;\n        },\n        drawing: (e) => {\n            let offsetX, offsetY, left = $('#win-whiteboard')[0].getBoundingClientRect().left, top = $('#win-whiteboard')[0].getBoundingClientRect().top;\n            if (e.type.match('mouse')) {\n                offsetX = e.clientX - left, offsetY = e.clientY - top;\n            }\n            else if (e.type.match('touch')) {\n                offsetX = e.touches[0].clientX - left, offsetY = e.touches[0].clientY - top;\n            }\n            apps.whiteboard.ctx.lineTo(offsetX, offsetY);\n            apps.whiteboard.ctx.stroke();\n        },\n        up: () => {\n            apps.whiteboard.ctx.stroke();\n            page.onmousemove = null;\n            page.ontouchmove = null;\n            page.onmouseup = null;\n            page.ontouchend = null;\n            page.ontouchcancel = null;\n        },\n        download: () => {\n            const url = apps.whiteboard.canvas.toDataURL();\n            $('#win-whiteboard>a.download')[0].href = url;\n            $('#win-whiteboard>a.download')[0].click();\n        },\n        saveAs: () => {\n            // Show filename input dialog using notice system\n            shownotice('whiteboard-saveas');\n        },\n        doSaveAs: () => {\n            // Execute the actual save with the filename from the notice input\n            const fileName = document.getElementById('whiteboard-filename').value.trim() || \n                           `Whiteboard_${new Date().toISOString().slice(0,10)}`;\n            \n            const url = apps.whiteboard.canvas.toDataURL();\n            const link = document.createElement('a');\n            link.href = url;\n            link.download = fileName.endsWith('.png') ? fileName : fileName + '.png';\n            document.body.appendChild(link);\n            link.click();\n            document.body.removeChild(link);\n            \n            closenotice();\n        },\n        delete: () => {\n            apps.whiteboard.ctx.clearRect(0, 0, apps.whiteboard.canvas.width, apps.whiteboard.canvas.height);\n        }\n    },\n    // webapp 即将网页嵌套作为应用内容，格式参考 desktop.html 中 vscode, bilibili\n    webapps: {\n        apps: ['vscode', 'bilibili','copilot','minesweeper'],\n        init: () => {\n            for (const app of apps.webapps.apps) {\n                apps[app].load();\n            }\n        }\n    },\n    vscode: {\n        init: () => {\n            return null;\n        },\n        load: () => {\n            // 不能改成 vscode.dev, 别问，问就算用不了\n            $('#win-vscode')[0].insertAdjacentHTML('afterbegin', '<iframe src=\"https://github1s.com/\" frameborder=\"0\" style=\"width: 100%; height: 100%;\" loading=\"lazy\"></iframe>');\n        }\n    },\n    bilibili: {\n        init: () => {\n            return null;\n        },\n        load: () => {\n            $('#win-bilibili')[0].insertAdjacentHTML('afterbegin', '<iframe src=\"https://bilibili.com/\" frameborder=\"0\" style=\"width: 100%; height: 100%;\" loading=\"lazy\"></iframe>');\n        }\n    },\n    'copilot': {\n        init: () => {\n            return null;\n        },\n        load: () => {\n            $('#win-copilot')[0].insertAdjacentHTML('afterbegin', '<iframe src=\"/chatgh/copilot.html\" frameborder=\"0\" style=\"width: 100%; height: 100%;\" loading=\"lazy\"></iframe>');\n        }\n    },\n    'minesweeper': {\n      init: () => {\n          return null;\n        },\n        load: () => {\n            $('#win-minesweeper')[0].insertAdjacentHTML('afterbegin', '<iframe src=\"https://tjy-gitnub.github.io/win12/games/minesweeper.html\" frameborder=\"0\" style=\"width: 100%; height: 100%;\" loading=\"lazy\"></iframe>');\n        }\n    },\n    defender: {\n        init: () => {\n            return null;\n        },\n        load: () => {\n            var chart = $('#chart')[0].getContext('2d'),\n                gradient = chart.createLinearGradient(0, 0, 0, 450);\n            gradient.addColorStop(0, 'rgba(0, 199, 214, 0.32)');\n            gradient.addColorStop(0.3, 'rgba(0, 199, 214, 0.1)');\n            gradient.addColorStop(1, 'rgba(0, 199, 214, 0)');\n            var data = {\n                labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n                datasets: [{\n                    label: '病毒攻击次数',\n                    backgroundColor: gradient,\n                    pointBackgroundColor: '#00c7d6',\n                    borderWidth: 1,\n                    borderColor: '#0e1a2f',\n                    data: [60, 45, 80, 30, 35, 55, 25, 80, 40, 50, 80, 50]\n                }]\n            };\n            var options = {\n                responsive: true,\n                maintainAspectRatio: true,\n                animation: {\n                    easing: 'easeInOutQuad',\n                    duration: 520\n                },\n                scales: {\n                    yAxes: [{\n                        ticks: {\n                            fontColor: '#5e6a81'\n                        },\n                        gridLines: {\n                            color: 'rgba(200, 200, 200, 0.08)',\n                            lineWidth: 1\n                        }\n                    }],\n                    xAxes: [{\n                        ticks: {\n                            fontColor: '#5e6a81'\n                        }\n                    }]\n                },\n                elements: {\n                    line: {\n                        tension: 0.4\n                    }\n                },\n                legend: {\n                    display: false\n                },\n                point: {\n                    backgroundColor: '#00c7d6'\n                },\n                tooltips: {\n                    titleFontFamily: 'Poppins',\n                    backgroundColor: 'rgba(0,0,0,0.4)',\n                    titleFontColor: 'white',\n                    caretSize: 5,\n                    cornerRadius: 2,\n                    xPadding: 10,\n                    yPadding: 10\n                }\n            };\n            var chartInstance = new Chart(chart, {\n                type: 'line',\n                data: data,\n                options: options\n            });\n        }\n    },\n    camera: {\n        init: () => {\n            if (!localStorage.getItem('camera')) {\n                showwin('camera-notice');\n                return null;\n            }\n            if (localStorage.getItem('camera')) {\n                apps.camera.streaming = false;\n                apps.camera.video = $('#win-camera video')[0];\n                apps.camera.canvas = $('#win-camera canvas')[0];\n                apps.camera.context = apps.camera.canvas.getContext('2d');\n                apps.camera.context.fillStyle = '#aaa';\n                apps.camera.downloadLink = $('#win-camera a')[0];\n                // apps.camera.control = document.querySelector('#win-camera>.control')\n                navigator.mediaDevices.getUserMedia({ video: true, audio: false })\n                    .then(stream => {\n                        apps.camera.video.srcObject = stream;\n                        apps.camera.video.play();\n                    })\n                    .catch(() => {\n                        hidewin('camera');\n                    });\n                apps.camera.video.addEventListener('canplay', () => {\n                    if (!apps.camera.streaming) {\n                        apps.camera.aspectRatio = apps.camera.video.videoWidth / apps.camera.video.videoHeight;\n                        apps.camera.canvas.width = apps.camera.video.videoWidth;\n                        apps.camera.canvas.height = apps.camera.video.videoHeight;\n                        apps.camera.windowResizeObserver = new ResizeObserver(apps.camera.resize);\n                        apps.camera.windowResizeObserver.observe($('.window.camera')[0], { box: 'border-box' });\n                        apps.camera.streaming = true;\n                    }\n                });\n            }\n            else {\n                hidewin('camera');\n            }\n        },\n        clearCanvas: () => {\n            apps.camera.context.fillRect(0, 0, canvas.width, canvas.height);\n        },\n        takePhoto: () => {\n            apps.camera.context.drawImage(apps.camera.video, 0, 0, apps.camera.canvas.width, apps.camera.canvas.height);\n            apps.camera.downloadLink.href = apps.camera.canvas.toDataURL('image/png');\n            apps.camera.downloadLink.download = 'photo.png';\n            apps.camera.downloadLink.click();\n        },\n        notice: () => {\n            if (!localStorage.getItem('camera')) {\n                showwin('camera-notice');\n            }\n            else {\n                openapp('camera');\n            }\n        },\n        resize: () => {\n            let w = $('#win-camera')[0].offsetWidth,\n                h = $('#win-camera')[0].offsetHeight;\n            if (w / apps.camera.aspectRatio <= h) {\n                if (!$('#win-camera').hasClass('v')) {\n                    $('#win-camera').removeClass('h');\n                    $('#win-camera').addClass('v');\n                }\n            }\n            else if (w / apps.camera.aspectRatio >= h) {\n                if (!$('#win-camera').hasClass('h')) {\n                    $('#win-camera').removeClass('v');\n                    $('#win-camera').addClass('h');\n                }\n            }\n        },\n        remove: () => {\n            apps.camera.video.srcObject.getTracks().forEach((t) => {\n                t.stop();\n            });\n            apps.camera.video.srcObject = null;\n        }\n    },\n    explorer: {\n        mounts: {},\n        nextDriveLetter: 'E',\n        fsApiSupported: ('showDirectoryPicker' in window),\n        init: () => {\n            apps.explorer.tabs = [];\n            apps.explorer.len = 0;\n            apps.explorer.newtab();\n            // apps.explorer.reset();\n            apps.explorer.Process_Of_Select = '';\n            apps.explorer.is_use = 0;//千万不要删除它，它依托bug运行\n            apps.explorer.is_use2 = 0;//千万不要删除它，它依托bug运行\n            apps.explorer.old_name = '';\n            apps.explorer.clipboard = null;\n            if (!apps.explorer.fsApiSupported) $('#explorer-mount-btn').hide();\n            document.addEventListener('keydown', function (event) {\n                if (event.key === 'Delete' && $('.window.foc')[0].classList[1] == 'explorer') {\n                    apps.explorer.del(apps.explorer.Process_Of_Select);\n                }\n            });\n        },\n        mountDrive: async () => {\n            if (!apps.explorer.fsApiSupported) { shownotice('fs-api-unsupported'); return; }\n            try {\n                const dirHandle = await window.showDirectoryPicker({ mode: 'readwrite' });\n                const letter = apps.explorer.nextDriveLetter + ':';\n                apps.explorer.nextDriveLetter = String.fromCharCode(\n                    apps.explorer.nextDriveLetter.charCodeAt(0) + 1);\n                apps.explorer.mounts[letter] = dirHandle;\n                apps.explorer.path.folder[letter] = { folder: {}, file: [], _mounted: true, _handle: dirHandle };\n                if (!apps.explorer.tabs[apps.explorer.now][2].length) apps.explorer.reset();\n            } catch (e) {\n                if (e.name !== 'AbortError') shownotice('fs-mount-error');\n            }\n        },\n        openMountedFile: async (path) => {\n            var pathl = path.split('/');\n            var fileName = pathl[pathl.length - 1];\n            var ext = fileName.split('.').pop().toLowerCase();\n            let tmp = apps.explorer.path;\n            for (let i = 0; i < pathl.length - 1; i++) {\n                tmp = tmp['folder'][pathl[i]];\n            }\n            var fileObj = tmp['file'].find(f => f.name === fileName);\n            if (!fileObj || !fileObj._mounted || !fileObj._handle) return;\n            try {\n                const file = await fileObj._handle.getFile();\n                const codeExts = ['js', 'ts', 'jsx', 'tsx', 'css', 'scss', 'less', 'html', 'htm', 'xml',\n                    'json', 'yaml', 'yml', 'py', 'java', 'c', 'cpp', 'h', 'cs', 'go',\n                    'rs', 'rb', 'php', 'sh', 'bat', 'ps1', 'sql', 'svg'];\n                const notepadExts = ['txt', 'log', 'md', 'csv', 'ini', 'cfg'];\n                if (codeExts.includes(ext)) {\n                    const text = await file.text();\n                    apps.codeEditor.open(text, fileName, fileObj._handle);\n                } else if (notepadExts.includes(ext)) {\n                    const text = await file.text();\n                    apps.notepad._mountedFileHandle = fileObj._handle;\n                    if ($('#taskbar>.notepad').length != 0) {\n                        $('#win-notepad>.text-box')[0].innerText = text;\n                        if ($('.window.notepad').hasClass('min')) minwin('notepad');\n                        focwin('notepad');\n                    } else {\n                        apps.notepad._pendingContent = text;\n                        openapp('notepad');\n                    }\n                    apps.notepad.setMdMode(ext === 'md');\n                } else if (['png', 'jpg', 'jpeg', 'bmp', 'gif', 'webp', 'ico'].includes(ext)) {\n                    const url = URL.createObjectURL(file);\n                    apps.imgviewer.open(url, fileName);\n                } else if (['mp4', 'webm', 'mov', 'avi', 'mkv', 'flv', 'wmv'].includes(ext)) {\n                    const url = URL.createObjectURL(file);\n                    apps.mediaplayer.open(url, fileName, 'video');\n                } else if (['mp3', 'wav', 'flac', 'ogg', 'aac', 'wma', 'm4a'].includes(ext)) {\n                    const url = URL.createObjectURL(file);\n                    apps.mediaplayer.open(url, fileName, 'audio');\n                } else if (ext === 'pdf') {\n                    const url = URL.createObjectURL(file);\n                    apps.pdfviewer.open(url, fileName);\n                } else {\n                    shownotice('unsupported-file-type');\n                }\n            } catch (e) {\n                shownotice('file-read-error');\n            }\n        },\n        unmountDrive: (letter) => {\n            delete apps.explorer.mounts[letter];\n            delete apps.explorer.path.folder[letter];\n            if (!apps.explorer.tabs[apps.explorer.now][2].length) apps.explorer.reset();\n            else if (apps.explorer.tabs[apps.explorer.now][2].startsWith(letter)) apps.explorer.reset();\n        },\n        populateFromHandle: async (dirHandle, targetObj) => {\n            targetObj.folder = {};\n            targetObj.file = [];\n            for await (const entry of dirHandle.values()) {\n                if (entry.kind === 'directory') {\n                    targetObj.folder[entry.name] = { folder: {}, file: [], _mounted: true, _handle: entry };\n                } else {\n                    const ext = entry.name.split('.').pop().toLowerCase();\n                    let ico = 'icon/files/none.png';\n                    if (['txt', 'log', 'md', 'csv', 'ini', 'cfg'].includes(ext)) ico = 'icon/files/txt.png';\n                    else if (['js', 'ts', 'jsx', 'tsx', 'css', 'scss', 'less', 'html', 'htm', 'xml',\n                              'json', 'yaml', 'yml', 'py', 'java', 'c', 'cpp', 'h', 'cs', 'go',\n                              'rs', 'rb', 'php', 'sh', 'bat', 'ps1', 'sql'].includes(ext)) ico = 'icon/files/txt.png';\n                    else if (['png', 'jpg', 'bmp', 'jpeg', 'gif', 'webp', 'svg', 'ico', 'tiff'].includes(ext)) ico = 'icon/files/picture.png';\n                    else if (['doc', 'docx', 'rtf', 'odt'].includes(ext)) ico = 'icon/files/word.png';\n                    else if (['xls', 'xlsx', 'ods'].includes(ext)) ico = 'icon/files/excel.png';\n                    else if (['ppt', 'pptx', 'odp'].includes(ext)) ico = 'icon/files/ppt.png';\n                    else if (['mp3', 'wav', 'flac', 'ogg', 'aac', 'wma', 'm4a'].includes(ext)) ico = 'icon/files/music.png';\n                    else if (['mp4', 'avi', 'mkv', 'mov', 'wmv', 'webm', 'flv'].includes(ext)) ico = 'icon/files/vidio.png';\n                    else if (['exe', 'msi'].includes(ext)) ico = 'icon/files/exefile.png';\n                    else if (['zip', 'rar', '7z', 'tar', 'gz'].includes(ext)) ico = 'icon/files/none.png';\n                    else if ('pdf' === ext) ico = 'icon/files/pdf.svg';\n                    targetObj.file.push({ name: entry.name, ico: ico, command: '', _handle: entry, _mounted: true });\n                }\n            }\n        },\n        tabs: [],\n        now: null,\n        len: 0,\n        newtab: (path = '') => {\n            m_tab.newtab('explorer', '');\n            apps.explorer.tabs[apps.explorer.tabs.length - 1][2] = path;\n            apps.explorer.initHistory(apps.explorer.tabs[apps.explorer.tabs.length - 1][0]);\n            apps.explorer.checkHistory(apps.explorer.tabs[apps.explorer.tabs.length - 1][0]);\n            m_tab.tab('explorer', apps.explorer.tabs.length - 1);\n            // }\n        },\n        settab: (t, i) => {\n            return `\n                <div class=\"tab ${t[0]}\" onclick=\"m_tab.tab('explorer',${i})\"\n                oncontextmenu=\"showcm(event,'explorer.tab',${i});stop(event);return false\"\n                onmousedown=\"\n                    if(event.button==1){m_tab.close('explorer',${i});stop(event);}\n                    else{m_tab.moving('explorer',this,event,${i});stop(event);disableIframes();}\"\n                ontouchstart=\"m_tab.moving('explorer',this,event,${i});stop(event);disableIframes();\">\n                    <p>${t[1]}</p>\n                    <span class=\"clbtn bi bi-x\" onclick=\"m_tab.close('explorer',${i});stop(event);\"></span>\n                </div>`;\n        },\n        tab: (c, load = true) => {\n            if (load) {\n                console.log(c);\n                if (!apps.explorer.tabs[c][2].length) apps.explorer.reset();\n                else apps.explorer.goto(apps.explorer.tabs[c][2]);\n            }\n            apps.explorer.checkHistory(apps.explorer.tabs[c][0]);\n        },\n        reset: (clear = true) => {\n            let resetHtml = `<style>#win-explorer>.page>.main>.content>.view>.class{margin: 5px 0 0 10px;display: flex;}\n            #win-explorer>.page>.main>.content>.view>.class>img{width: 20px;height: 20px;margin-top: 3px;margin-right: 5px;filter:brightness(0.9);}\n            #win-explorer>.page>.main>.content>.view>.group{display: flex;flex-wrap: wrap;padding: 10px 20px;}\n            #win-explorer>.page>.main>.content>.view>.group>.item{width: 280px;margin: 5px;height:80px;\n    box-shadow: 0 1px 2px var(--s3d);\n                background: radial-gradient(circle, var(--card),var(--card));border-radius: 10px;display: flex;}\n            #win-explorer>.page>.main>.content>.view>.group>.item:hover{background-color: var(--hover);}\n\n            #win-explorer>.page>.main>.content>.view>.group>.item>img{width: 55px;height: 55px;margin-top: 18px;margin-left: 10px;}\n            #win-explorer>.page>.main>.content>.view>.group>.item>div{flex-grow: 1;padding: 5px 5px 0 0;}\n            #win-explorer>.page>.main>.content>.view>.group>.item>div>.bar{width: calc(100% - 10px);height: 8px;border-radius: 10px;\n                background-color: var(--hover-b);margin: 5px 5px;}\n            #win-explorer>.page>.main>.content>.view>.group>.item>div>.bar>.content{height: 100%;background-image: linear-gradient(90deg, var(--theme-1), var(--theme-2));\n                border-radius: 10px;}\n            #win-explorer>.page>.main>.content>.view>.group>.item>div>.info{color: #959595;font-size: 14px;}</style>\n            <p class=\"class\"><img src=\"apps/icons/explorer/disk.svg\"> 设备和驱动器</p><div class=\"group\">\n            <a class=\"a item act\" ondblclick=\"apps.explorer.goto('C:')\" ontouchend=\"apps.explorer.goto('C:')\" oncontextmenu=\"showcm(event,'explorer.folder','C:');return stop(event);\">\n            <img src=\"apps/icons/explorer/diskwin.svg\"><div><p class=\"name\">本地磁盘 (C:)</p>\n            <div class=\"bar\"><div class=\"content\" style=\"width: 88%;\"></div>\n            </div><p class=\"info\">32.6 GB 可用, 共 143 GB</p></div></a><a class=\"a item act\" ondblclick=\"apps.explorer.goto('D:')\" ontouchend=\"apps.explorer.goto('D:')\"\n            oncontextmenu=\"showcm(event,'explorer.folder','D:');return stop(event);\">\n            <img src=\"apps/icons/explorer/disk.svg\"><div><p class=\"name\">本地磁盘 (D:)</p><div class=\"bar\"><div class=\"content\" style=\"width: 15%;\"></div>\n            </div><p class=\"info\">185.3 GB 可用, 共 216 GB</p></div></a>`;\n            for (let letter in apps.explorer.mounts) {\n                const handle = apps.explorer.mounts[letter];\n                resetHtml += `<a class=\"a item act\" ondblclick=\"apps.explorer.goto('${letter}')\" ontouchend=\"apps.explorer.goto('${letter}')\" oncontextmenu=\"showcm(event,'explorer.mounted','${letter}');return stop(event);\">\n                <img src=\"apps/icons/explorer/disk.svg\"><div><p class=\"name\">${handle.name} (${letter})</p>\n                <div class=\"bar\"><div class=\"content\" style=\"width: 0%;\"></div>\n                </div><p class=\"info\">本地文件夹</p></div></a>`;\n            }\n            resetHtml += `</div>`;\n            $('#win-explorer>.page>.main>.content>.view')[0].innerHTML = resetHtml;\n            $('#win-explorer>.path>.tit')[0].innerHTML = '<div class=\"icon\" style=\"background-image: url(\\'./apps/icons/explorer/thispc.svg\\')\"></div><div class=\"path\"><div class=\"text\" onclick=\"apps.explorer.reset()\">此电脑</div><div class=\"arrow\">&gt;</div></div>';\n            // if(rename){\n            m_tab.rename('explorer', '<img src=\"./apps/icons/explorer/thispc.svg\"> 此电脑');\n            apps.explorer.tabs[apps.explorer.now][2] = '';\n            if (clear) {\n                apps.explorer.delHistory(apps.explorer.tabs[apps.explorer.now][0]);\n                apps.explorer.pushHistory(apps.explorer.tabs[apps.explorer.now][0], '此电脑');\n            }\n            // }\n        },\n        select: (path, id) => {\n            var elements = document.querySelectorAll('#win-explorer > .main > .content > .view > .select');\n            for (var i = 0; i < elements.length; i++) {\n                elements[i].classList.remove('select');\n            }\n            apps.explorer.Process_Of_Select = path;\n            var element = document.getElementById(id);\n            element.classList.add('select');\n            apps.explorer.is_use += 1;\n        },\n        copy_or_cut: (path, operate) => { //operate只能为copy或cut\n            var pathl = path.split('/');\n            var name = pathl[pathl.length - 1];\n            pathl.pop();\n            let tmp = apps.explorer.path;\n            pathl.forEach(name => {\n                tmp = tmp['folder'][name];\n            });\n\n            if (Object.keys(tmp['folder']).includes(name)) {\n                apps.explorer.clipboard = ['folder', [name], tmp['folder'][name]];\n                if (operate == 'cut') {\n                    delete tmp['folder'][name];\n                }\n            }\n            else {\n                for (var i = 0; i < tmp['file'].length; i++) {\n                    if (tmp['file'][i]['name'] == name) {\n                        apps.explorer.clipboard = ['file', tmp['file'][i]];\n                        if (operate == 'cut') {\n                            tmp['file'].splice(i, 1); // Use splice instead of delete\n                        }\n                        break;\n                    }\n                }\n            }\n            apps.explorer.goto($('#win-explorer>.path>.tit')[0].dataset.path, false);\n        },\n        paste: (path) => {\n            if (!apps.explorer.clipboard) {\n                return;\n            }\n            var pathl = path.split('/');\n            let tmp = apps.explorer.path;\n            pathl.forEach(name => {\n                if (!tmp['folder'][name]) {\n                    return;\n                }\n                tmp = tmp['folder'][name];\n            });\n\n            var clipboard = apps.explorer.clipboard;\n            if (clipboard[0] == 'file') {\n                // Check for duplicate file name\n                if (tmp['file'].some(file => file.name === clipboard[1].name)) {\n                    shownotice('duplication file name');\n                    return;\n                }\n                tmp['file'].push({...clipboard[1]}); // Create a copy of the file object\n            } else {\n                // Check for duplicate folder name\n                if (tmp['folder'][clipboard[1][0]]) {\n                    shownotice('duplication file name');\n                    return;\n                }\n                tmp['folder'][clipboard[1][0]] = JSON.parse(JSON.stringify(clipboard[2])); // Deep copy the folder\n            }\n            apps.explorer.goto(path);\n        },\n        del_select: () => {\n            if (apps.explorer.is_use >= 1 && apps.explorer.is_use2 != apps.explorer.is_use) {\n                apps.explorer.is_use2 = apps.explorer.is_use;\n                return;\n            }\n            var elements = document.querySelectorAll('#win-explorer>.page>.main>.content>.view>.change');\n            console.log(elements);\n            for (var i = 0; i < elements.length; i++) {\n                var name_1, icon_;\n                elements[i].classList.remove('change');\n                let aTag = elements[i];\n                var on = apps.explorer.old_name;\n                let inputTag = aTag.querySelector('#new_name');\n                var pathl = $('#win-explorer>.path>.tit')[0].dataset.path.split('/');\n                let tmp = apps.explorer.path;\n                pathl.forEach(name => {\n                    tmp = tmp['folder'][name];\n                });\n                if (inputTag.value == '' || apps.explorer.traverseDirectory(tmp, inputTag.value) || on == inputTag.value) {\n                    if (apps.explorer.traverseDirectory(tmp, inputTag.value) && on != inputTag.value) {\n                        shownotice('duplication file name');\n                    }\n                    var element = document.getElementById('new_name');\n                    element.parentNode.removeChild(element);\n                    aTag.innerHTML += on;\n                    continue;\n                }\n                name_1 = inputTag.value.split('.');\n                if (name_1[0].indexOf('/') > -1) alert('恭喜你发现了这个bug,但是太懒了不想修qwq');\n                console.log(name_1);\n                if (name_1[1] == 'txt') {\n                    icon_ = 'icon/files/txt.png';\n                }\n                else if (name_1[1] == 'png' || name_1[1] == 'jpg' | name_1[1] == 'bmp') {\n                    icon_ = 'icon/files/picture.png';\n                }\n                else {\n                    icon_ = 'icon/files/none.png';\n                }\n                //这边可以适配更多的文件类型\n\n                aTag.innerHTML += inputTag.value;\n                var isMountedRename = !!apps.explorer.mounts[pathl[0]];\n                for (var j = 0; j < tmp['file'].length; j++) {\n                    if (tmp['file'][j]['name'] == on) {\n                        tmp['file'][j]['name'] = inputTag.value;\n                        tmp['file'][j]['ico'] = icon_;\n                        if (isMountedRename && tmp._handle) {\n                            tmp._handle.getFileHandle(on).then(h =>\n                                h.move ? h.move(inputTag.value) : null\n                            ).catch(() => {});\n                        }\n                    }\n                }\n                const keys = Object.keys(tmp['folder']);\n                for (var i = 0; i < keys.length; i++) {\n                    if (keys[i] == on) {\n                        keys[i] = inputTag.value;\n                        tmp['folder'][inputTag.value] = tmp['folder'][on];\n                        delete tmp['folder'][on];\n                    }\n                }\n                element = document.getElementById('new_name');\n                element.parentNode.removeChild(element);\n                apps.explorer.goto($('#win-explorer>.path>.tit')[0].dataset.path, false);\n\n            }\n            apps.explorer.is_use2 = apps.explorer.is_use;\n            elements = document.querySelectorAll('#win-explorer>.page>.main>.content>.view>.select');\n            for (var i = 0; i < elements.length; i++) {\n                elements[i].classList.remove('select');\n            }\n            apps.explorer.Process_Of_Select = '';\n        },\n        goto: (path, clear = true) => {\n            if (path == '此电脑') { apps.explorer.reset(clear); return null; }\n            var pathl = path.split('/');\n            if (apps.explorer.mounts[pathl[0]]) {\n                apps.explorer._gotoAsync(path, clear, !clear);\n            } else {\n                apps.explorer._gotoSync(path, clear);\n            }\n        },\n        _gotoAsync: async (path, clear, forceRefresh = false) => {\n            $('#win-explorer>.page>.main>.content>.view')[0].innerHTML = '<p class=\"info\" style=\"opacity:0.6;\">加载中...</p>';\n            var pathl = path.split('/');\n            let tmp = apps.explorer.path;\n            try {\n                for (let i = 0; i < pathl.length; i++) {\n                    tmp = tmp['folder'][pathl[i]];\n                    const needLoad = Object.keys(tmp.folder).length === 0 && tmp.file.length === 0;\n                    if (tmp._mounted && tmp._handle && (needLoad || (forceRefresh && i === pathl.length - 1))) {\n                        await apps.explorer.populateFromHandle(tmp._handle, tmp);\n                    }\n                }\n                apps.explorer._gotoSync(path, clear);\n            } catch (e) {\n                $('#win-explorer>.page>.main>.content>.view')[0].innerHTML = '<p class=\"info\">无法读取此文件夹。</p>';\n            }\n        },\n        _gotoSync: (path, clear = true) => {\n            apps.explorer.Process_Of_Select = '';\n            $('#win-explorer>.page>.main>.content>.view')[0].innerHTML = '';\n            var pathl = path.split('/');\n            var pathqwq = '';\n            var index_ = 0;\n            let tmp = apps.explorer.path;\n            $('#win-explorer>.path>.tit')[0].dataset.path = path;\n            $('#win-explorer>.path>.tit>.path')[0].innerHTML = '<div class=\"text\" onclick=\"apps.explorer.reset()\">此电脑</div><div class=\"arrow\">&gt;</div>';\n            $('#win-explorer>.path>.tit>.icon')[0].style.marginTop = '0px';\n            if (pathl[pathl.length - 1] == 'C:') {\n                $('#win-explorer>.path>.tit>.icon')[0].style.backgroundImage = 'url(\"apps/icons/explorer/diskwin.svg\")';\n                $('#win-explorer>.path>.tit>.icon')[0].style.marginTop = '2.5px';\n                m_tab.rename('explorer', '<img src=\"./apps/icons/explorer/diskwin.svg\" style=\"margin-top:2.5px\">' + pathl[pathl.length - 1]);\n            }\n            else if (pathl[pathl.length - 1] == 'D:') {\n                $('#win-explorer>.path>.tit>.icon')[0].style.backgroundImage = 'url(\"apps/icons/explorer/disk.svg\")';\n                m_tab.rename('explorer', '<img src=\"./apps/icons/explorer/disk.svg\">' + pathl[pathl.length - 1]);\n            }\n            else if (apps.explorer.mounts[pathl[pathl.length - 1]]) {\n                $('#win-explorer>.path>.tit>.icon')[0].style.backgroundImage = 'url(\"apps/icons/explorer/disk.svg\")';\n                m_tab.rename('explorer', '<img src=\"./apps/icons/explorer/disk.svg\">' + pathl[pathl.length - 1]);\n            }\n            else {\n                $('#win-explorer>.path>.tit>.icon')[0].style.backgroundImage = 'url(\"apps/icons/explorer/folder.svg\")';\n                m_tab.rename('explorer', '<img src=\"./apps/icons/explorer/folder.svg\">' + pathl[pathl.length - 1]);\n            }\n            // if(rename){\n            apps.explorer.tabs[apps.explorer.now][2] = path;\n            // }\n            pathl.forEach(name => {\n                pathqwq += name;\n                $('#win-explorer>.path>.tit>.path')[0].innerHTML += `<div class=\"text\" onclick=\"apps.explorer.goto('${pathqwq}')\">${name}</div><div class=\"arrow\">&gt;</div>`;\n                tmp = tmp['folder'][name];\n                pathqwq += '/';\n            });\n            var path_ = path;\n            if (Object.keys(tmp['folder']) == 0 && tmp['file'].length == 0) {\n                $('#win-explorer>.page>.main>.content>.view')[0].innerHTML = '<p class=\"info\">此文件夹为空。</p>';\n            }\n            else {\n                let ht = '';\n                for (let folder in tmp['folder']) {\n                    ht += `<a class=\"a item files\" id=\"file${index_}\" onclick=\"apps.explorer.select('${path}/${folder}','file${index_}');\" ondblclick=\"apps.explorer.goto('${path}/${folder}')\" ontouchend=\"apps.explorer.goto('${path}/${folder}')\" oncontextmenu=\"showcm(event,'explorer.folder','${path}/${folder}');return stop(event);\">\n                        <img src=\"apps/icons/explorer/folder.svg\">${folder}</a>`;\n                    index_ += 1;\n                }\n                if (tmp['file']) {\n                    tmp['file'].forEach(file => {\n                        let cmd = file['command'];\n                        if (file._mounted && file._handle) {\n                            cmd = `apps.explorer.openMountedFile('${path_}/${file['name']}')`;\n                        }\n                        ht += `<a class=\"a item file\" id=\"file${index_}\" onclick=\"apps.explorer.select('${path_}/${file['name']}','file${index_}');\" ondblclick=\"${cmd}\" ontouchend=\"${cmd}\" oncontextmenu=\"showcm(event,'explorer.file','${path_}/${file['name']}');return stop(event);\">\n                            <img src=\"${file['ico']}\">${file['name']}</a>`;\n                        index_ += 1;\n                    });\n                }\n                $('#win-explorer>.page>.main>.content>.view')[0].innerHTML = ht;\n            }\n            if (pathl.length == 1) {\n                $('#win-explorer>.path>.goback').attr('onclick', 'apps.explorer.reset()');\n            } else {\n                $('#win-explorer>.path>.goback').attr('onclick', `apps.explorer.goto('${path.substring(0, path.length - pathl[pathl.length - 1].length - 1)}')`);\n            }\n\n            if (clear) {\n                apps.explorer.delHistory(apps.explorer.tabs[apps.explorer.now][0]);\n                apps.explorer.pushHistory(apps.explorer.tabs[apps.explorer.now][0], $('#win-explorer>.path>.tit')[0].dataset.path);\n            }\n            apps.explorer.checkHistory(apps.explorer.tabs[apps.explorer.now][0]);\n        },\n        add: (path, name_, type = 'file', command = '', icon = '') => { //type为文件类型，只有文件夹files和文件file\n            var pathl = path.split('/');\n            var icon_ = '';\n            var isMounted = !!apps.explorer.mounts[pathl[0]];\n            let tmp = apps.explorer.path;\n            pathl.forEach(name => {\n                tmp = tmp['folder'][name];\n            });\n            if (tmp == null) {\n                tmp = { folder: {}, file: [] };\n            }\n            if (apps.explorer.traverseDirectory(tmp, name_)) {\n                shownotice('duplication file name');\n                return;\n            }\n\n            // 检查是否是文件夹\n            if (type === 'folder') {\n                if (icon !== '') {\n                    icon_ = icon;\n                } else {\n                    icon_ = 'icon/folder.png';\n                }\n                try {\n                    if (isMounted && tmp._handle) {\n                        tmp.folder[name_] = { folder: {}, file: [], _mounted: true };\n                        tmp._handle.getDirectoryHandle(name_, { create: true }).then(h => {\n                            tmp.folder[name_]._handle = h;\n                        }).catch(() => shownotice('file-write-error'));\n                    } else {\n                        tmp.folder[name_] = { folder: {}, file: [] };\n                    }\n                } catch {\n                    tmp = { folder: {}, file: [] };\n                    tmp.folder[name_] = { folder: {}, file: [] };\n                }\n                return;\n            }\n\n            // 处理文件\n            const name_1 = name_.split('.');\n            if (name_1.length < 2) {\n                icon_ = 'icon/files/none.png';\n            }\n            else if (name_1[1] === 'txt') {\n                icon_ = 'icon/files/txt.png';\n                if (command === '') {\n                    command = 'openapp(\\'notepad\\')';\n                }\n            }\n            else if (['png', 'jpg', 'bmp'].includes(name_1[1])) {\n                icon_ = 'icon/files/picture.png';\n            }\n            else {\n                icon_ = 'icon/files/none.png';\n            }\n\n            if (icon !== '') {\n                icon_ = icon;\n            }\n\n            try {\n                if (isMounted && tmp._handle) {\n                    var fileEntry = { name: name_, ico: icon_, command: '', _mounted: true };\n                    tmp.file.push(fileEntry);\n                    tmp._handle.getFileHandle(name_, { create: true }).then(h => {\n                        fileEntry._handle = h;\n                    }).catch(() => shownotice('file-write-error'));\n                } else {\n                    tmp.file.push({ name: name_, ico: icon_, command: command });\n                }\n            }\n            catch {\n                tmp = { folder: {}, file: [] };\n                tmp.file = [{ name: name_, ico: icon_, command: command }];\n            }\n            apps.explorer.goto(path);\n            apps.explorer.rename(path + '/' + name_);\n        },\n        rename: (path) => {\n            var pathl = path.split('/');\n            var name = pathl[pathl.length - 1];\n            apps.explorer.old_name = name;\n            pathl.pop();\n            let tmp = apps.explorer.path;\n            pathl.forEach(name => {\n                tmp = tmp['folder'][name];\n            });\n            let element = document.querySelector('#' + apps.explorer.get_file_id(name));\n            let img = element.querySelector('img').outerHTML;\n            element.innerHTML = img;\n            let input = document.createElement('input');\n            // input.style.cssText = '';\n            input.id = 'new_name';\n            input.className = 'input';\n            input.value = apps.explorer.old_name;\n            element.appendChild(input);\n            setTimeout(() => { $('#new_name').focus(); $('#new_name').select(); }, 200);\n\n            element.classList.add('change');\n            var input_ = document.getElementById('new_name');\n            input_.addEventListener('keyup', function (event) {\n                if (event.key === 'Enter') {\n                    event.preventDefault();\n                    apps.explorer.del_select();\n                }\n            });\n        },\n        get_file_id: (name) => {  //只能找到已经打开了的文件夹的元素id\n            var elements = document.getElementsByClassName('item');\n            for (var i = 0; i < elements.length; i++) {\n                var element = elements[i];\n                if (element.innerText == name) {\n                    return element.id;\n                }\n            }\n        },\n        del: (path) => {\n            var pathl = path.split('/');\n            var name = pathl[pathl.length - 1];\n            var isMounted = !!apps.explorer.mounts[pathl[0]];\n            pathl.pop();\n            let tmp = apps.explorer.path;\n            pathl.forEach(name => {\n                tmp = tmp['folder'][name];\n            });\n            let tmp_file = tmp['file'];\n            for (var i = 0; i < tmp_file.length; i++) {\n                if (tmp_file[i]['name'] == name) {\n                    tmp_file.splice(i, 1);\n                }\n            }\n            let tmp_files = tmp['folder'];\n            delete tmp_files[name];\n            if (isMounted && tmp._handle) {\n                tmp._handle.removeEntry(name, { recursive: true }).catch(() => shownotice('file-write-error'));\n            }\n            apps.explorer.goto(pathl.join('/'));\n            apps.explorer.history.forEach(item => {\n                while (item.includes(path)) {\n                    item.splice(item.findIndex(elt => { return elt == path; }), 1);\n                }\n            });\n        },\n        traverseDirectory(dir, name) {\n            if (dir['file'] == null && dir['folder'] == null)\n                return false;\n            for (var i = 0; i < dir['file'].length; i++) {\n                if (dir['file'][i]['name'] == name) {\n                    return true;\n                }\n            }\n            const keys = Object.keys(dir['folder']);\n            for (var i = 0; i < keys.length; i++) {\n                if (keys[i] == name) {\n                    return true;\n                }\n            }\n            return false;\n        },\n        // 禁止奇奇怪怪的缩进！尽量压行，不要毫无意义地全部格式化和展开！ \n        // 给我看蒙了这东西，写的是啥？\n        path: {folder:{'C:':{folder:{'Program Files':{folder:{'WindowsApps':{folder:{},file:[]},'Microsoft':{folder:{},file:[]}},file:[{name:'about.exe',ico:'icon/about.svg',command:'openapp(\\'about\\')'},{name:'setting.exe',ico:'icon/setting.svg',command:'openapp(\\'setting\\')'},]},'Program Files (x86)':{folder:{'Microsoft':{folder:{'Edge':{folder:{'Application':{folder:{'SetupMetrics':{folder:{},file:[]}},file:[{name:'msedge.exe',ico:'icon/edge.svg',command:'openapp(\\'edge\\')'}]}}}}}}},'Windows':{folder:{'Boot':{folder:{},file:[]},'System':{folder:{},file:[]},'SysWOW64':{folder:{},file:[]},'System32':{folder:{},file:[{name:'calc.exe',ico:'icon/calc.svg',command:'openapp(\\'calc\\')'},{name:'cmd.exe',ico:'icon/terminal.svg',command:'openapp(\\'terminal\\')'},{name:'notepad.exe',ico:'icon/notepad.svg',command:'openapp(\\'notepad\\')'},{name:'taskmgr.exe',ico:'icon/taskmgr.png',command:'openapp(\\'taskmgr\\')'},{name:'winver.exe',ico:'icon/about.svg',command:'openapp(\\'winver\\')'},]}},file:[{name:'explorer.exe',ico:'icon/explorer.svg',command:'apps.explorer.newtab()'},{name:'notepad.exe',ico:'icon/notepad.svg',command:'openapp(\\'notepad\\')'},{name:'py.exe',ico:'icon/python.svg',command:'openapp(\\'python\\')'},]},'用户':{folder:{'Administrator':{folder:{'推荐的项目':{folder:{},file:[{name:'瓶盖介绍.doc',ico:'icon/files/word.png',command:'openapp(\\'word\\');apps.word.edit()'},{name:'瓶盖质量统计分析.xlsx',ico:'icon/files/excel.png',command:''},]},'文档':{folder:{'IISExpress':{folder:{},file:[]},'PowerToys':{folder:{},file:[]}},file:[{name:'瓶盖介绍.doc',ico:'icon/files/word.png',command:''},{name:'瓶盖质量统计分析.xlsx',ico:'icon/files/excel.png',command:''},]},'图片':{folder:{'本机照片':{folder:{},file:[]},'屏幕截图':{folder:{},file:[]}},file:[{name:'瓶盖构造图.png',ico:'icon/files/img.png',command:''},{name:'可口可乐瓶盖.jpg',ico:'icon/files/img.png',command:''},]},'AppData':{folder:{'Local':{folder:{'Microsoft':{folder:{'Windows':{folder:{'Fonts':{},'TaskManager':{},'Themes':{},'Shell':{},'应用程序快捷方式':{},}},}},'Programs':{folder:{'Python':{folder:{'Python310':{folder:{'DLLs':{},'Doc':{},'include':{},'Lib':{folder:{'site-packages':{},'tkinter':{},}},'libs':{},'Script':{},'share':{},'tcl':{},'Tools':{}},file:[{name:'python.exe',ico:'icon/python.png',command:'openapp(\\'python\\')'}]}},}}},'Temp':{folder:{}},}},'LocalLow':{folder:{'Microsoft':{folder:{'Windows':{},}},}},'Roaming':{folder:{'Microsoft':{folder:{'Windows':{folder:{'「开始」菜单':{folder:{'程序':{folder:{}},}},}},}},}},},file:[]},'音乐':{folder:{'录音机':{folder:{},file:[]}}}}},'公用':{folder:{'公用文档':{folder:{'IISExpress':{folder:{},file:[]},'PowerToys':{folder:{},file:[]}},file:[]},'公用图片':{folder:{'本机照片':{folder:{},file:[]},'屏幕截图':{folder:{},file:[]}},file:[]},'公用音乐':{folder:{'录音机':{folder:{},file:[]}}}}}}}},file:[]},'D:':{folder:{'Microsoft':{folder:{},file:[]}},file:[{name:'瓶盖结构说明.docx',ico:'icon/files/word.png',command:''},{name:'可口可乐瓶盖历史.pptx',ico:'icon/files/ppt.png',command:''},]}}},\n        history: [],\n        historypt: [],\n        initHistory: (tab) => {\n            apps.explorer.history[tab] = [];\n            apps.explorer.historypt[tab] = -1;\n        },\n        pushHistory: (tab, u) => {\n            apps.explorer.history[tab].push(u);\n            apps.explorer.historypt[tab]++;\n        },\n        topHistory: (tab) => {\n            return apps.explorer.history[tab][apps.explorer.historypt[tab]];\n        },\n        popHistory: (tab) => {\n            apps.explorer.historypt[tab]--;\n            return apps.explorer.history[tab][apps.explorer.historypt[tab]];\n        },\n        incHistory: (tab) => {\n            apps.explorer.historypt[tab]++;\n            return apps.explorer.history[tab][apps.explorer.historypt[tab]];\n        },\n        delHistory: (tab) => {\n            apps.explorer.history[tab].splice(apps.explorer.historypt[tab] + 1, apps.explorer.history[tab].length - 1 - apps.explorer.historypt[tab]);\n        },\n        historyIsEmpty: (tab) => {\n            return apps.explorer.historypt[tab] <= 0;\n        },\n        historyIsFull: (tab) => {\n            return apps.explorer.historypt[tab] >= apps.explorer.history[tab].length - 1;\n        },\n        checkHistory: (tab) => {\n            if (apps.explorer.historyIsEmpty(tab)) {\n                $('#win-explorer>.path>.back').addClass('disabled');\n            }\n            else if (!apps.explorer.historyIsEmpty(tab)) {\n                $('#win-explorer>.path>.back').removeClass('disabled');\n            }\n            if (apps.explorer.historyIsFull(tab)) {\n                $('#win-explorer>.path>.front').addClass('disabled');\n            }\n            else if (!apps.explorer.historyIsFull(tab)) {\n                $('#win-explorer>.path>.front').removeClass('disabled');\n            }\n        },\n        back: (tab) => {\n            apps.explorer.goto(apps.explorer.popHistory(tab), false);\n            apps.explorer.checkHistory(tab);\n        },\n        front: (tab) => {\n            apps.explorer.goto(apps.explorer.incHistory(tab), false);\n            apps.explorer.checkHistory(tab);\n        }\n    },\n    calc: {\n        init: () => {\n            document.getElementById('calc-input').innerHTML = '0';\n        }\n    },\n    about: {\n        init: () => {\n            $('#win-about>.about').addClass('show');\n            $('#win-about>.update').removeClass('show');\n            if (!($('#contri').length > 1)) apps.about.get();\n            if (!($('#StarShow').html().includes('刷新'))) apps.about.get_star();\n        },\n        run_loading: (expr) => {\n            $(expr).html(`<loading><svg width=\"30px\" height=\"30px\" viewBox=\"0 0 16 16\">\n            <circle cx=\"8px\" cy=\"8px\" r=\"7px\" style=\"stroke:#7f7f7f50;fill:none;stroke-width:3px;\"></circle>\n            <circle cx=\"8px\" cy=\"8px\" r=\"7px\" style=\"stroke:#2983cc;stroke-width:3px;\"></circle></svg></loading>`);\n        },\n        get: () => {\n            apps.about.run_loading('#contri');\n            // 实时获取项目贡献者\n            $.get('https://api.github.com/repos/tjy-gitnub/win12/contributors').then(cs => {\n                setTimeout(() => {\n                    $('#contri').html('');\n                    cs.forEach(c => {\n                        $('#contri').append(`<a class=\"a\" onclick=\"window.open('${c['html_url']}','_blank');\"><p class=\"name\">${c['login']}</p><p class=\"cbs\">贡献：<span class=\"num\">${c['contributions']}</span></p></a>`);\n                    });\n                    $('#contri').append('<a class=\"button\" onclick=\"apps.about.get()\"><i class=\"bi bi-arrow-clockwise\"></i> 刷新</a>');\n                }, 200);\n            });\n        },\n        get_star: () => {\n            apps.about.run_loading('#StarShow');\n            const repoFullName = 'tjy-gitnub/win12';\n            fetch(`https://api.github.com/repos/${repoFullName}`)\n                .then(response => response.json())\n                .then(data => {\n                    setTimeout(() => {\n                        const starCount = data.stargazers_count;\n                        $('#StarShow').html('<div style=\"display: flex;\"><p>&emsp;&emsp;Star 数量：' + starCount + ' (实时数据)</p>&emsp;<a class=\"button\" onclick=\"apps.about.get_star()\"><i class=\"bi bi-arrow-clockwise\"></i> 刷新</a></div>');\n                    }, 200);\n                })\n                .catch(error => {\n                    console.error('获取star数量时出错：', error);\n                    $('#StarShow').html('<div style=\"display: flex;\"><p>&emsp;&emsp;哎呀！出错了！</p>&emsp;<a class=\"button\" onclick=\"apps.about.get_star()\"><i class=\"bi bi-arrow-clockwise\"></i> 重试</a></div>');\n                });\n        }\n    },\n    notepad: {\n        _pendingContent: null,\n        _mountedFileHandle: null,\n        _keyBound: false,\n        _isMd: false,\n        _previewing: false,\n        init: () => {\n            apps.notepad._resetPreview();\n            $('#win-notepad>.text-box').addClass('down');\n            setTimeout(() => {\n                if (apps.notepad._pendingContent !== null) {\n                    $('#win-notepad>.text-box')[0].innerText = apps.notepad._pendingContent;\n                    apps.notepad._pendingContent = null;\n                } else {\n                    $('#win-notepad>.text-box').val('');\n                    apps.notepad._mountedFileHandle = null;\n                }\n                $('#win-notepad>.text-box').removeClass('down');\n            }, 200);\n            if (!apps.notepad._keyBound) {\n                apps.notepad._keyBound = true;\n                document.addEventListener('keydown', function (e) {\n                    if (e.ctrlKey && e.key === 's' && $('.window.foc')[0]?.classList.contains('notepad')) {\n                        e.preventDefault();\n                        apps.notepad.saveMounted();\n                    }\n                });\n            }\n        },\n        _resetPreview: () => {\n            apps.notepad._isMd = false;\n            apps.notepad._previewing = false;\n            $('#notepad-md-toggle').hide().removeClass('active').html('<i class=\"bi bi-eye\"></i> 预览');\n            $('#notepad-md-preview').hide();\n            $('#win-notepad>.text-box').show();\n        },\n        setMdMode: (enabled) => {\n            apps.notepad._resetPreview();\n            apps.notepad._isMd = enabled;\n            if (enabled) {\n                $('#notepad-md-toggle').show();\n            }\n        },\n        togglePreview: () => {\n            apps.notepad._previewing = !apps.notepad._previewing;\n            if (apps.notepad._previewing) {\n                var text = $('#win-notepad>.text-box')[0].innerText;\n                $('#notepad-md-preview').html(marked.parse(text)).show();\n                $('#win-notepad>.text-box').hide();\n                $('#notepad-md-toggle').addClass('active').html('<i class=\"bi bi-pencil\"></i> 编辑');\n            } else {\n                $('#notepad-md-preview').hide();\n                $('#win-notepad>.text-box').show();\n                $('#notepad-md-toggle').removeClass('active').html('<i class=\"bi bi-eye\"></i> 预览');\n            }\n        },\n        saveMounted: async () => {\n            if (!apps.notepad._mountedFileHandle) return;\n            try {\n                const writable = await apps.notepad._mountedFileHandle.createWritable();\n                await writable.write($('#win-notepad>.text-box')[0].innerText);\n                await writable.close();\n            } catch (e) {\n                shownotice('file-write-error');\n            }\n        }\n    },\n    imgviewer: {\n        init: () => {},\n        open: (url, name) => {\n            openapp('imgviewer');\n            $('#win-imgviewer>.preview-img').attr('src', url);\n            $('.window.imgviewer>.titbar>p').text(name || '图片查看器');\n        }\n    },\n    mediaplayer: {\n        _blobUrl: null,\n        init: () => {},\n        open: (url, name, type) => {\n            openapp('mediaplayer');\n            apps.mediaplayer._blobUrl = url;\n            $('.window.mediaplayer>.titbar>p').text(name || '媒体播放器');\n            if (type === 'video') {\n                $('#mediaplayer-video').attr('src', url).show()[0].load();\n                $('#mediaplayer-audio').hide()[0].pause();\n                $('.window.mediaplayer>.titbar>img').attr('src', 'icon/files/vidio.png');\n            } else {\n                $('#mediaplayer-audio').attr('src', url).show()[0].load();\n                $('#mediaplayer-video').hide()[0].pause();\n                $('.window.mediaplayer>.titbar>img').attr('src', 'icon/files/music.png');\n            }\n        },\n        close: () => {\n            $('#mediaplayer-video')[0].pause();\n            $('#mediaplayer-audio')[0].pause();\n            if (apps.mediaplayer._blobUrl) {\n                URL.revokeObjectURL(apps.mediaplayer._blobUrl);\n                apps.mediaplayer._blobUrl = null;\n            }\n            hidewin('mediaplayer');\n        }\n    },\n    pdfviewer: {\n        _blobUrl: null,\n        init: () => {},\n        open: (url, name) => {\n            openapp('pdfviewer');\n            apps.pdfviewer._blobUrl = url;\n            $('#pdfviewer-frame').attr('src', url);\n            $('.window.pdfviewer>.titbar>p').text(name || 'PDF 查看器');\n        },\n        close: () => {\n            $('#pdfviewer-frame').attr('src', '');\n            if (apps.pdfviewer._blobUrl) {\n                URL.revokeObjectURL(apps.pdfviewer._blobUrl);\n                apps.pdfviewer._blobUrl = null;\n            }\n            hidewin('pdfviewer');\n        }\n    },\n    codeEditor: {\n        editor: null,\n        _fileHandle: null,\n        _modeMap: {\n            js: 'javascript', jsx: 'jsx', ts: 'typescript', tsx: 'tsx',\n            css: 'css', scss: 'scss', less: 'less',\n            html: 'html', htm: 'html', xml: 'xml', svg: 'svg',\n            json: 'json', yaml: 'yaml', yml: 'yaml',\n            py: 'python', java: 'java', c: 'c_cpp', cpp: 'c_cpp', h: 'c_cpp',\n            cs: 'csharp', go: 'golang', rs: 'rust', rb: 'ruby',\n            php: 'php', sh: 'sh', bat: 'batchfile', ps1: 'powershell',\n            sql: 'sql', md: 'markdown'\n        },\n        init: () => { return null; },\n        load: () => {\n            ace.require('ace/ext/language_tools');\n            apps.codeEditor.editor = ace.edit('code-ace-editor');\n            apps.codeEditor.editor.setTheme('ace/theme/vibrant_ink');\n            apps.codeEditor.editor.setOptions({\n                enableBasicAutocompletion: true,\n                enableSnippets: true,\n                showPrintMargin: false,\n                enableLiveAutocompletion: true,\n                fontSize: 15\n            });\n            apps.codeEditor.editor.commands.addCommand({\n                name: 'save', bindKey: { win: 'Ctrl-S', mac: 'Command-S' },\n                exec: () => apps.codeEditor.save()\n            });\n        },\n        open: (text, fileName, fileHandle) => {\n            apps.codeEditor._fileHandle = fileHandle || null;\n            openapp('code-editor');\n            var ext = fileName.split('.').pop().toLowerCase();\n            var mode = apps.codeEditor._modeMap[ext] || 'text';\n            apps.codeEditor.editor.session.setMode('ace/mode/' + mode);\n            apps.codeEditor.editor.setValue(text, -1);\n            $('.window.code-editor>.titbar>p').text(fileName);\n        },\n        save: async () => {\n            if (!apps.codeEditor._fileHandle) return;\n            try {\n                const writable = await apps.codeEditor._fileHandle.createWritable();\n                await writable.write(apps.codeEditor.editor.getValue());\n                await writable.close();\n            } catch (e) {\n                shownotice('file-write-error');\n            }\n        }\n    },\n    pythonEditor: {\n        editor: null,\n        init: () => {\n            return null;\n        },\n        run: () => {\n            let result;\n            let output = document.getElementById('output');\n            try {\n                if (apps.python.pyodide) {\n                    let code = apps.pythonEditor.editor.getValue();\n                    apps.python.pyodide.runPython('sys.stdout = io.StringIO()');\n                    apps.python.pyodide.runPython(code);\n                    result = apps.python.pyodide.runPython('sys.stdout.getvalue()');\n                }\n            }\n            catch (e) {\n                result = e.message;\n            }\n            output.innerHTML = result;\n        },\n        load: () => {\n            if (!apps.python.loaded) {\n                apps.python.loaded = true;\n                apps.python.load();\n            }\n            ace.require('ace/ext/language_tools');\n            apps.pythonEditor.editor = ace.edit('win-python-ace-editor');\n            apps.pythonEditor.editor.session.setMode('ace/mode/python');\n            apps.pythonEditor.editor.setTheme('ace/theme/vibrant_ink');\n            apps.pythonEditor.editor.setOptions({\n                enableBasicAutocompletion: true,\n                enableSnippets: true,\n                showPrintMargin: false,\n                enableLiveAutocompletion: true\n            });\n        }\n    },\n    notepadFonts: {\n        sizes: {\n            '初号': '56',\n            '小初': '48',\n            '一号': '34.7',\n            '小一': '32',\n            '二号': '29.3',\n            '小二': '24',\n            '三号': '21.3',\n            '小三': '20',\n            '四号': '18.7',\n            '小四': '16',\n            '五号': '14',\n            '小五': '12'\n        },\n        styles: {\n            '正常': '',\n            '粗体': 'font-weight: bold;',\n            '斜体': 'font-style: italic;',\n            '粗偏斜体': 'font-weight: bold; font-style: italic;'\n        },\n        load: () => {\n            apps.notepadFonts.fontvalues = $('#win-notepad-font>.row>#win-notepad-font-type>.value-box>.option');\n            apps.notepadFonts.sizevalues = $('#win-notepad-font>.row>#win-notepad-font-size>.value-box>.option');\n            apps.notepadFonts.stylevalues = $('#win-notepad-font>.row>#win-notepad-font-style>.value-box>.option');\n            apps.notepadFonts.typeinput = $('#win-notepad-font>.row>#win-notepad-font-type>input[type=text]')[0];\n            apps.notepadFonts.sizeinput = $('#win-notepad-font>.row>#win-notepad-font-size>input[type=text]')[0];\n            apps.notepadFonts.styleinput = $('#win-notepad-font>.row>#win-notepad-font-style>input[type=text]')[0];\n            apps.notepadFonts.previewBox = $('#win-notepad-font>.preview>.preview-box');\n            apps.notepadFonts.textBox = $('.notepad>#win-notepad>.text-box');\n\n            for (const elt of apps.notepadFonts.fontvalues) {\n                elt.onclick = function () {\n                    apps.notepadFonts.typeinput.value = this.innerText;\n                    apps.notepadFonts.preview();\n                };\n                elt.setAttribute('style', `font-family: ${elt.innerText};`);\n            }\n\n            for (const elt of apps.notepadFonts.sizevalues) {\n                elt.onclick = function () {\n                    apps.notepadFonts.sizeinput.value = this.innerText;\n                    apps.notepadFonts.preview();\n                };\n            }\n\n            for (const elt of apps.notepadFonts.stylevalues) {\n                elt.onclick = function () {\n                    apps.notepadFonts.styleinput.value = this.innerText;\n                    apps.notepadFonts.preview();\n                };\n                elt.setAttribute('style', apps.notepadFonts.styles[elt.innerText]);\n            }\n\n            apps.notepadFonts.sizeinput.addEventListener('keyup', apps.notepadFonts.preview);\n            apps.notepadFonts.typeinput.addEventListener('keyup', apps.notepadFonts.preview);\n        },\n        preview: () => {\n            var fontsize = 0;\n            var fontstyle;\n            if (!apps.notepadFonts.sizeinput.value.match(/^[0-9]*$/)) {\n                if (apps.notepadFonts.sizes[apps.notepadFonts.sizeinput.value] != undefined) {\n                    fontsize = apps.notepadFonts.sizes[apps.notepadFonts.sizeinput.value];\n                }\n            }\n            else if (apps.notepadFonts.sizeinput.value.match(/^[0-9]*$/)) {\n                fontsize = apps.notepadFonts.sizeinput.value;\n            }\n            if (apps.notepadFonts.styles[apps.notepadFonts.styleinput.value] != undefined) {\n                fontstyle = apps.notepadFonts.styles[apps.notepadFonts.styleinput.value];\n            }\n            else if (apps.notepadFonts.styles[apps.notepadFonts.styleinput.value] == undefined) {\n                fontstyle = apps.notepadFonts.styles['正常'];\n            }\n            apps.notepadFonts.previewBox.attr('style', `font-family: ${apps.notepadFonts.typeinput.value} !important; font-size: ${fontsize}px !important;${fontstyle}`);\n        },\n        commitFont: () => {\n            const styles = window.getComputedStyle(apps.notepadFonts.previewBox[0], null);\n            apps.notepadFonts.textBox.attr('style', `font-family: ${styles.fontFamily} !important; font-size: ${styles.fontSize} !important; font-weight: ${styles.fontWeight} !important; font-style: ${styles.fontStyle} !important;`);\n            hidewin('notepad-fonts', 'configs');\n        },\n        reset: () => {\n            const styles = window.getComputedStyle(apps.notepadFonts.textBox[0], null);\n            apps.notepadFonts.typeinput.value = styles.fontFamily.split(', ')[0];\n            var fontsize = styles.fontSize.split('px')[0];\n            var fontweight = styles.fontWeight;\n            var fontstyle = styles.fontStyle;\n            if (fontweight == '700' && fontstyle == 'normal') {\n                apps.notepadFonts.styleinput.value = '粗体';\n            }\n            else if (fontweight == '400' && fontstyle == 'italic') {\n                apps.notepadFonts.styleinput = '斜体';\n            }\n            else if (fontweight == '700' && fontstyle == 'italic') {\n                apps.notepadFonts.styleinput.value = '粗偏斜体';\n            }\n            else if (fontweight == '400' && fontstyle == 'normal') {\n                apps.notepadFonts.styleinput.value = '正常';\n            }\n            for (const [key, value] of Object.entries(apps.notepadFonts.sizes)) {\n                if (value == fontsize) {\n                    fontsize = key;\n                    break;\n                }\n            }\n            apps.notepadFonts.sizeinput.value = fontsize;\n        },\n    },\n    python: {\n        codeCache: '',\n        prompt: '>>> ',\n        indent: false,\n        load: () => {\n            (async function () {\n                apps.python.pyodide = await loadPyodide();\n                apps.python.pyodide.runPython(`\nimport sys\nimport io\n`);\n            })();\n        },\n        init: () => {\n            $('#win-python').html(`\n        <pre>\nPython 3.10.2  [MSC v.1912 64 bit (AMD64)] :: Anaconda, Inc. on win32\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n        </pre>\n        <pre class=\"text-cmd\"></pre>\n        <pre style=\"display: flex;\"><span class='prompt'>>>> </span><input type=\"text\" onkeyup=\"if (event.keyCode == 13) { apps.python.run(); }\"></pre>`);\n        },\n        run: () => {\n            if (apps.python.pyodide) {\n                const input = $('#win-python>pre>input');\n                const _code = input.val();\n                if (_code == 'exit()') {\n                    hidewin('python');\n                    input.val('');\n                }\n                else {\n                    const elt = $('#win-python>pre.text-cmd')[0];\n                    const lastChar = _code[_code.length - 1];\n                    var newD = document.createElement('div');\n                    newD.innerText = `${apps.python.prompt}${_code}`;\n                    elt.appendChild(newD);\n                    if (lastChar != ':' && lastChar != '\\\\' && ((!apps.python.indent || _code == ''))) {\n                        apps.python.prompt = '>>> ';\n                        apps.python.codeCache += _code;\n                        apps.python.indent = false;\n                        const code = apps.python.codeCache;\n                        apps.python.codeCache = '';\n                        apps.python.pyodide.runPython('sys.stdout = io.StringIO()');\n                        try {\n                            const result = String(apps.python.pyodide.runPython(code));\n                            if (apps.python.pyodide.runPython('sys.stdout.getvalue()')) {\n                                var newD = document.createElement('div');\n                                newD.innerText = `${apps.python.pyodide.runPython('sys.stdout.getvalue()')}`;\n                                elt.appendChild(newD);\n                            }\n                            if (result && result != 'undefined') {\n                                var newD = document.createElement('div');\n                                if (result == 'false') {\n                                    newD.innerText = 'False';\n                                }\n                                else if (result == 'true') {\n                                    newD.innerText = 'True';\n                                }\n                                else {\n                                    newD.innerText = result;\n                                }\n                                elt.appendChild(newD);\n                            }\n                        }\n                        catch (err) {\n                            var newD = document.createElement('div');\n                            newD.innerText = `${err.message}`;\n                            elt.appendChild(newD);\n                        }\n                    }\n                    else {\n                        apps.python.prompt = '... ';\n                        if (lastChar == ':') {\n                            apps.python.indent = true;\n                        }\n                        apps.python.codeCache += _code + '\\n';\n                    }\n                    input.val('');\n\n                    // 自动聚焦\n                    input.blur();\n                    input.focus();\n\n                    $('#win-python .prompt')[0].innerText = apps.python.prompt;\n                }\n            }\n        }\n    },\n    terminal: {\n        historyList: [],\n        historypt: 0,\n        historyTemp: '',\n        isViewingHistory: false,\n        init: () => {\n            $('#win-terminal').html(`<pre>\nMicrȯsoft Windows [版本 12.0.39035.7324]\n(c) Microṡoft Corporation。保留所有杈利。\n        </pre>\n        <pre class=\"text-cmd\"></pre>\n        <pre style=\"display: flex\"><span class=\"prompt\">C:\\\\Windows\\\\System32> </span><input type=\"text\" onkeyup=\"apps.terminal.handleKeyUp(event)\"></pre>`);\n            $('#win-terminal>pre>input').focus();\n        },\n        handleKeyUp: (event) => {\n            const input = $('#win-terminal input');\n            if (event.keyCode === 13) { // Enter\n                apps.terminal.run();\n            } else if (event.keyCode === 38) { // Up arrow\n                apps.terminal.history('up');\n            } else if (event.keyCode === 40) { // Down arrow\n                apps.terminal.history('down');\n            }\n        },\n        run: () => {\n            const elt = $('#win-terminal>pre.text-cmd')[0];\n            const input = $('#win-terminal input');\n            const command = input.val().trim();\n            \n            if (command !== '') {\n                // Add command to history\n                apps.terminal.historyList.push(command);\n                apps.terminal.historypt = apps.terminal.historyList.length;\n                \n                var newD = document.createElement('div');\n                newD.innerText = `C:\\\\Windows\\\\System32> ${command}`;\n                elt.appendChild(newD);\n                \n                if (command === 'exit') {\n                    hidewin('terminal');\n                } else if (!runcmd(command, true)) {\n                    var newD = document.createElement('div');\n                    newD.innerText = `\"${command}\" 不是内部或外部命令,也不是可运行程序或批处理文件`;\n                    elt.appendChild(newD);\n                }\n            }\n            \n            input.val('');\n            input.blur();\n            input.focus();\n        },\n        history: (direction) => {\n            const input = $('#win-terminal input');\n            \n            if (!apps.terminal.isViewingHistory) {\n                apps.terminal.isViewingHistory = true;\n                apps.terminal.historyTemp = input.val();\n            }\n            \n            if (direction === 'up' && apps.terminal.historypt > 0) {\n                apps.terminal.historypt--;\n                input.val(apps.terminal.historyList[apps.terminal.historypt]);\n            } else if (direction === 'down') {\n                apps.terminal.historypt++;\n                if (apps.terminal.historypt >= apps.terminal.historyList.length) {\n                    apps.terminal.historypt = apps.terminal.historyList.length;\n                    apps.terminal.isViewingHistory = false;\n                    input.val(apps.terminal.historyTemp);\n                } else {\n                    input.val(apps.terminal.historyList[apps.terminal.historypt]);\n                }\n            }\n        }\n    },\n    search: {\n        rand: [{ name: '农夫山泉瓶盖简介.txt', bi: 'text', ty: '文本文档' },\n            { name: '瓶盖构造图.png', bi: 'image', ty: 'PNG 文件' },\n            { name: '瓶盖结构说明.docx', bi: 'richtext', ty: 'Microsoft Word 文档' },\n            { name: '可口可乐瓶盖.jpg', bi: 'image', ty: 'JPG 文件' },\n            { name: '可口可乐瓶盖历史.pptx', bi: 'slides', ty: 'Microsoft Powerpoint 演示文稿' },\n            { name: '瓶盖质量统计分析.xlsx', bi: 'ruled', ty: 'Microsoft Excel 工作表' },\n            { name: '农夫山泉瓶盖.svg', bi: 'image', ty: 'SVG 文件' },\n            { name: '瓶盖介绍.doc', bi: 'richtext', ty: 'Microsoft Word 文档' }],\n        search: le => {\n            if (le > 0) {\n                $('#search-win>.ans>.list>list').html(\n                    `<a class=\"a\" onclick=\"apps.search.showdetail(${le % 8})\"><i class=\"bi bi-file-earmark-${apps.search.rand[le % 8].bi}\"></i> ${apps.search.rand[le % 8].name\n                    }</a><a class=\"a\" onclick=\"apps.search.showdetail(${(le + 3) % 8})\"><i class=\"bi bi-file-earmark-${apps.search.rand[(le + 3) % 8].bi}\"></i> ${apps.search.rand[(le + 3) % 8].name}</a>`);\n                apps.search.showdetail(le % 8);\n            } else {\n                $('#search-win>.ans>.list>list').html(\n                    `<p class=\"text\">推荐</p>\n\t\t\t\t\t<a onclick=\"openapp('setting');$('#search-btn').removeClass('show');\n\t\t\t\t\t$('#search-win').removeClass('show');\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t$('#search-win').removeClass('show-begin');\n\t\t\t\t\t}, 200);\">\n\t\t\t\t\t\t<img src=\"icon/setting.svg\"><p>设置</p></a>\n\t\t\t\t\t<a onclick=\"openapp('about');$('#search-btn').removeClass('show');\n\t\t\t\t\t$('#search-win').removeClass('show');\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t$('#search-win').removeClass('show-begin');\n\t\t\t\t\t}, 200);\">\n\t\t\t\t\t\t<img src=\"icon/about.svg\"><p>关于Win12网页版</p></a>`);\n                $('#search-win>.ans>.view').removeClass('show');\n            }\n        },\n        showdetail: i => {\n            $('#search-win>.ans>.view').addClass('show');\n            let inf = apps.search.rand[i];\n            $('#search-win>.ans>.view>.fname>.bi').attr('class', 'bi bi-file-earmark-' + inf.bi);\n            $('#search-win>.ans>.view>.fname>.name').text(inf.name);\n            $('#search-win>.ans>.view>.fname>.type').text(inf.ty);\n        }\n    },\n    edge: {\n        init: () => {\n            $('#win-edge>iframe').remove();\n            apps.edge.tabs = [];\n            apps.edge.len = 0;\n            apps.edge.newtab();\n        },\n        tabs: [],\n        now: null,\n        len: 0,\n        history: [],\n        historypt: [],\n        reloadElt: '<loading class=\"reloading\"><svg viewBox=\"0 0 16 16\"><circle cx=\"8px\" cy=\"8px\" r=\"5px\"></circle><circle cx=\"8px\" cy=\"8px\" r=\"5px\"></circle></svg></loading>',\n        max: false,\n        fuls: false,\n        b1: false, b2: false, b3: false,\n        newtab: () => {\n            m_tab.newtab('edge', '新建标签页');\n            apps.edge.initHistory(apps.edge.tabs[apps.edge.tabs.length - 1][0]);\n            apps.edge.pushHistory(apps.edge.tabs[apps.edge.tabs.length - 1][0], 'mainpage.html');\n            $('#win-edge').append(`<iframe src=\"mainpage.html\" frameborder=\"0\" class=\"${apps.edge.tabs[apps.edge.tabs.length - 1][0]}\">`);\n            $('#win-edge>.tool>input.url').focus();\n            $('#win-edge>iframe')[apps.edge.tabs.length - 1].onload = function () {\n                this.contentDocument.querySelector('input').onkeyup = function (e) {\n                    if (e.keyCode == 13 && $(this).val() != '') {\n                        apps.edge.goto($(this).val());\n                    }\n                };\n                this.contentDocument.querySelector('svg').onclick = () => {\n                    if ($(this.contentDocument.querySelector('input')).val() != '') {\n                        apps.edge.goto($(this.contentDocument.querySelector('input')).val());\n                    }\n                };\n            };\n            m_tab.tab('edge', apps.edge.tabs.length - 1);\n            apps.edge.checkHistory(apps.edge.tabs[apps.edge.now][0]);\n        },\n        fullscreen: () => {\n            if (!apps.edge.max) {\n                maxwin('edge');\n                apps.edge.max = !apps.edge.max;\n            }\n            document.getElementById('fuls-edge').style.display = 'none';\n            document.getElementById('edge-max').style.display = 'none';\n            document.getElementById('fuls-edge-exit').style.display = '';\n            document.getElementById('over-bar').style.display = '';\n            $('.edge>.titbar').hide();\n            $('.edge>.content>.tool').hide();\n            apps.edge.fuls = !apps.edge.fuls;\n        },\n        exitfullscreen: () => {\n            if (apps.edge.max) {\n                maxwin('edge'); apps.edge.max = !apps.edge.max;\n            }\n            document.getElementById('fuls-edge').style.display = '';\n            document.getElementById('edge-max').style.display = '';\n            document.getElementById('fuls-edge-exit').style.display = 'none';\n            document.getElementById('over-bar').style.display = 'none';\n            $('.edge>.titbar').show();\n            $('.edge>.content>.tool').show();\n            apps.edge.fuls = !apps.edge.fuls;\n        },\n        in_div(id,event) {\n            var div = document.getElementById(id);\n            var x = event.clientX;\n            var y = event.clientY;\n            var divx1 = div.offsetLeft;\n            var divy1 = div.offsetTop;\n            var divx2 = div.offsetLeft + div.offsetWidth;\n            var divy2 = div.offsetTop + div.offsetHeight;\n            if (x < divx1 || x > divx2 || y < divy1 || y > divy2) {\n                //如果离开，则执行。。 \n                return false;\n            }\n            else {\n                //如检播到，则执行。。 \n                return true;\n            }\n        },\n        settab: (t, i) => {\n            if ($('.window.edge>.titbar>.tabs>.tab.' + t[0] + '>.reloading')[0]) {\n                return `<div class=\"tab ${t[0]}\" onclick=\"m_tab.tab('edge',${i})\" oncontextmenu=\"showcm(event,'edge.tab',${i});stop(event);return false\" onmousedown=\"m_tab.moving('edge',this,event,${i});stop(event);disableIframes();\" ontouchstart=\"m_tab.moving('edge',this,event,${i});stop(event);disableIframes();\">${apps.edge.reloadElt}<p>${t[1]}</p><span class=\"clbtn bi bi-x\" onclick=\"m_tab.close('edge',${i})\"></span></div>`;\n            }\n            else {\n                return `<div class=\"tab ${t[0]}\" onclick=\"m_tab.tab('edge',${i})\" oncontextmenu=\"showcm(event,'edge.tab',${i});stop(event);return false\" onmousedown=\"m_tab.moving('edge',this,event,${i});stop(event);disableIframes();\" ontouchstart=\"m_tab.moving('edge',this,event,${i});stop(event);disableIframes();\"><p>${t[1]}</p><span class=\"clbtn bi bi-x\" onclick=\"m_tab.close('edge',${i})\"></span></div>`;\n            }\n        },\n        tab: (c) => {\n            $('#win-edge>iframe.show').removeClass('show');\n            $('#win-edge>iframe.' + apps.edge.tabs[c][0]).addClass('show');\n            $('#win-edge>.tool>input.url').val($('#win-edge>iframe.' + apps.edge.tabs[c][0]).attr('src') == 'mainpage.html' ? '' : $('#win-edge>iframe.' + apps.edge.tabs[c][0]).attr('src'));\n            $('#win-edge>.tool>input.rename').removeClass('show');\n            apps.edge.checkHistory(apps.edge.tabs[apps.edge.now][0]);\n        },\n        c_rename: (c) => {\n            m_tab.tab('edge', c);\n            $('#win-edge>.tool>input.rename').val(apps.edge.tabs[apps.edge.now][1]);\n            $('#win-edge>.tool>input.rename').addClass('show');\n            setTimeout(() => {\n                $('#win-edge>.tool>input.rename').focus();\n            }, 300);\n        },\n        reload: () => {\n            if (wifiStatus == false) {\n                $('#win-edge>iframe.show').attr('src', 'data/disconnected' + (isDark ? '_dark' : '') + '.html');\n            }\n            else {\n                $('#win-edge>iframe.show').attr('src', $('#win-edge>iframe.show').attr('src'));\n                if (!$('.window.edge>.titbar>.tabs>.tab.' + apps.edge.tabs[apps.edge.now][0] + '>.reloading')[0]) {\n                    $('.window.edge>.titbar>.tabs>.tab.' + apps.edge.tabs[apps.edge.now][0])[0].insertAdjacentHTML('afterbegin', apps.edge.reloadElt);\n                    $('#win-edge>iframe.' + apps.edge.tabs[apps.edge.now][0])[0].onload = function () {\n                        $('.window.edge>.titbar>.tabs>.tab.' + this.classList[0])[0].removeChild($('.window.edge>.titbar>.tabs>.tab.' + this.classList[0] + '>.reloading')[0]);\n                    };\n                }\n            }\n        },\n        getTitle: async (url, np) => {\n            const response = await fetch(server + pages['get-title'] + `?url=${url}`);\n            if (response.ok == true) {\n                const text = await response.text();\n                apps.edge.tabs[np][1] = text;\n                m_tab.settabs('edge');\n                m_tab.tab('edge', np);\n            }\n        },\n        goto: (u, clear = true) => {\n            if (wifiStatus == false) {\n                m_tab.rename('edge', u);\n                $('#win-edge>iframe.show').attr('src', '.data/disconnected' + (isDark ? '_dark' : '') + '.html');\n                $('#win-edge>.tool>input.url').val(u);\n            }\n            else {\n                // 6\n                if (!/^(((ht|f)tps?):\\/\\/)?([^!@#$%^&*?.\\s-]([^!@#$%^&*?.\\s]{0,63}[^!@#$%^&*?.\\s])?\\.)+[a-z]{2,6}\\/?/.test(u) && !u.match(/^mainpage.html$/)) {\n                    // 启用必应搜索\n                    $('#win-edge>iframe.show').attr('src', 'https://bing.com/search?q=' + encodeURIComponent(u));\n                    m_tab.rename('edge', u);\n                }\n                // 检测网址是否带有http头\n                else if (!/^https?:\\/\\//.test(u) && !u.match(/^mainpage.html$/)) {\n                    $('#win-edge>iframe.show').attr('src', 'http://' + u);\n                    m_tab.rename('edge', 'http://' + u);\n                }\n                else {\n                    $('#win-edge>iframe.show').attr('src', u);\n                    m_tab.rename('edge', u.match(/^mainpage.html$/) ? '新建标签页' : u);\n                }\n                if (!$('.window.edge>.titbar>.tabs>.tab.' + apps.edge.tabs[apps.edge.now][0] + '>.reloading')[0]) {\n                    $('.window.edge>.titbar>.tabs>.tab.' + apps.edge.tabs[apps.edge.now][0])[0].insertAdjacentHTML('afterbegin', apps.edge.reloadElt);\n                }\n                $('#win-edge>iframe.' + apps.edge.tabs[apps.edge.now][0])[0].onload = function () {\n                    $('.window.edge>.titbar>.tabs>.tab.' + this.classList[0])[0].removeChild($('.window.edge>.titbar>.tabs>.tab.' + this.classList[0] + '>.reloading')[0]);\n                };\n                apps.edge.getTitle($('#win-edge>iframe.show').attr('src'), apps.edge.now);\n                if (clear) {\n                    apps.edge.delHistory(apps.edge.tabs[apps.edge.now][0]);\n                    apps.edge.pushHistory(apps.edge.tabs[apps.edge.now][0], $('#win-edge>iframe.show').attr('src'));\n                }\n                apps.edge.checkHistory(apps.edge.tabs[apps.edge.now][0]);\n            }\n\n        },\n        initHistory: (tab) => {\n            apps.edge.history[tab] = [];\n            apps.edge.historypt[tab] = -1;\n        },\n        pushHistory: (tab, u) => {\n            apps.edge.history[tab].push(u);\n            apps.edge.historypt[tab]++;\n        },\n        topHistory: (tab) => {\n            return apps.edge.history[tab][apps.edge.historypt[tab]];\n        },\n        popHistory: (tab) => {\n            apps.edge.historypt[tab]--;\n            return apps.edge.history[tab][apps.edge.historypt[tab]];\n        },\n        incHistory: (tab) => {\n            apps.edge.historypt[tab]++;\n            return apps.edge.history[tab][apps.edge.historypt[tab]];\n        },\n        delHistory: (tab) => {\n            apps.edge.history[tab].splice(apps.edge.historypt[tab] + 1, apps.edge.history[tab].length - 1 - apps.edge.historypt[tab]);\n        },\n        historyIsEmpty: (tab) => {\n            return apps.edge.historypt[tab] <= 0;\n        },\n        historyIsFull: (tab) => {\n            return apps.edge.historypt[tab] >= apps.edge.history[tab].length - 1;\n        },\n        checkHistory: (tab) => {\n            if (apps.edge.historyIsEmpty(tab)) {\n                $('#win-edge>.tool>.back').addClass('disabled');\n            }\n            else if (!apps.edge.historyIsEmpty(tab)) {\n                $('#win-edge>.tool>.back').removeClass('disabled');\n            }\n            if (apps.edge.historyIsFull(tab)) {\n                $('#win-edge>.tool>.front').addClass('disabled');\n            }\n            else if (!apps.edge.historyIsFull(tab)) {\n                $('#win-edge>.tool>.front').removeClass('disabled');\n            }\n        },\n        back: (tab) => {\n            apps.edge.goto(apps.edge.popHistory(tab), false);\n            apps.edge.checkHistory(tab);\n        },\n        front: (tab) => {\n            apps.edge.goto(apps.edge.incHistory(tab), false);\n            apps.edge.checkHistory(tab);\n        }\n    },\n    winver: {\n        init: () => {\n            $('#win-winver>.mesg').show();\n        },\n    },\n    windows12: {\n        init: () => {\n            document.getElementById('win12-window').src = './boot.html';\n        }\n    },\n    wsa: {\n        init: () => {\n            null;\n        }\n    },\n    word: {\n        init: () => {\n            $('#win-word>.app-left>.focs>.home').css(\"display\", \"flex\");\n            $('#win-word>.app-left>.focs>.back').css(\"display\", \"none\");\n            $('.window.word>.pages>.edit').removeClass('show');\n            $('.window.word>.pages>.home').addClass('show');\n            $(`.window.word>.pages>.edit>.content`).empty();\n            $(`.window.word>.pages>.edit>.content`).append(`<div class=\"doc homepage\" contenteditable></div>`);\n        },\n        edit: () => {\n            $('.window.word>.pages>.home').removeClass('show');\n            $('.window.word>.pages>.edit').addClass('show');\n        },\n        home: () => {\n            $('#win-word>.app-left>.focs>.home').css(\"display\", \"none\");\n            $('#win-word>.app-left>.focs>.back').css(\"display\", \"flex\");\n            $('.window.word>.pages>.edit').removeClass('show');\n            $('.window.word>.pages>.home').addClass('show');\n        },\n        new: () => {\n            $(`.window.word>.pages>.edit>.content`).empty();\n            $(`.window.word>.pages>.edit>.content`).append(`<div class=\"doc homepage\" contenteditable></div>`);\n            $('.window.word>.pages>.home').removeClass('show');\n            $('.window.word>.pages>.edit').addClass('show');\n        },\n    }\n};"
  },
  {
    "path": "module/tab.css",
    "content": ".window.tabs>.titbar>.tabs {\n    display: flex;\n    flex-grow: 1 !important;\n    height: calc(100% - 2px);\n    padding: 2px 1px;\n    /* overflow-x:auto; */\n    overflow: hidden;\n    align-items: center;\n    margin-top: 2px;\n}\n\n.window.tabs>.titbar>.tabs>.tab {\n    display: flex;\n    border-radius: 7px;\n    max-width: 200px;\n    display: flex;\n    justify-content: space-between;\n    /* padding: 4px 0; */\n    align-items: center;\n    width: 0;\n    flex-grow: 1;\n    max-width: 200px;\n    min-width: none;\n    overflow: hidden;\n    transition: 50ms;\n    height: 100%;\n    white-space: nowrap;\n}\n\n:root.corner_squ .window.tabs>.titbar>.tabs>.tab {\n    corner-shape: squircle;\n    border-radius: 15px;\n}\n\n.window.tabs>.titbar>.tabs>.tab::before {\n    content: '';\n    position: relative;\n    width: 1.5px;\n    height: 19px;\n    background: var(--hr);\n    /* opacity: 0.3; */\n    transition: 50ms;\n}\n\n.window.tabs>.titbar>.tabs>.tab p {\n    overflow: hidden;\n    display: -webkit-box;\n    box-orient: vertical;\n    -webkit-box-orient: vertical;\n    line-clamp: 1;\n    -webkit-line-clamp: 1;\n}\n\n.window.tabs>.titbar>.tabs>.tab.show {\n    background: var(--hover) !important;\n    box-shadow: 0 1px 2px var(--shadow);\n}\n\n.window.tabs>.titbar>.tabs>.tab.close {\n    transform: translateY(calc(100% + 5px)) !important;\n    opacity: 0.6;\n    transition: 150ms;\n}\n\n.window.tabs>.titbar>.tabs>.tab.left {\n    transform: translateX(-100%) !important;\n    transition: 150ms;\n}\n\n.window.tabs>.titbar>.tabs>.tab.right {\n    transform: translateX(100%) !important;\n    transition: 150ms;\n}\n\n.window.tabs>.titbar>.tabs>.tab.moving {\n    /* background: var(--unfoc) !important; */\n    background: var(--bg) !important;\n    z-index: 1;\n}\n\n.window.tabs>.titbar>.tabs>.tab:hover {\n    background: var(--hover-b);\n}\n\n.window.tabs>.titbar>.tabs>.tab:hover::before,\n.window.tabs>.titbar>.tabs>.tab:hover+.tab::before,\n.window.tabs>.titbar>.tabs>.tab.show::before,\n.window.tabs>.titbar>.tabs>.tab.show+.tab::before {\n    opacity: 0;\n}\n\n.window.tabs>.titbar>.tabs>.tab>p {\n    font-size: 15px;\n    margin-left: 7px;\n    margin-top: 1px;\n    flex-grow: 1;\n}\n\n.window.tabs>.titbar>.tabs>.tab>.clbtn {\n    border-radius: 4px;\n    display: block;\n    margin: 0 5px 0 0;\n    width: 18px;\n    height: 18px;\n}\n\n.window.tabs>.titbar>.tabs>.tab>.clbtn::before {\n    position: relative;\n    top: -3px;\n    left: 1px;\n}\n\n.window.tabs>.titbar>.tabs>.tab>.clbtn:hover {\n    background: var(--hover);\n}\n\n.window.tabs>.titbar>.tabs>.new {\n    border-radius: 7px;\n    margin: 3px 2px;\n    height: 25px;\n    width: 25px;\n    font-size: 20px;\n    text-align: center;\n    transition: 50ms;\n}\n\n.window.tabs>.titbar>.tabs>.new::before {\n    position: relative;\n    top: -3px;\n}\n\n.window.tabs>.titbar>.tabs>.new:hover {\n    background-color: var(--hover-half);\n}\n"
  },
  {
    "path": "module/tab.js",
    "content": "let m_tab={\n    newtab: (appn,n) => {\n        app=apps[appn];\n        app.tabs.push([app.len++, n]);\n        m_tab.settabs(appn);\n    },\n    settabs: (appn) => {\n        let app=apps[appn];\n        let html = '';\n        for (let i = 0; i < app.tabs.length; i++) {\n            const t = app.tabs[i];\n            html+=app.settab(t,i);\n        }\n        $(`.window.${appn}>.titbar>.tabs`)[0].innerHTML = html;\n        $(`.window.${appn}>.titbar>.tabs`)[0].innerHTML += `<a class=\"new bi bi-plus\" onclick=\"apps.${appn}.newtab()\"></a>`;\n        // $(`.window.${appn}>.titbar>.tabs>.tab.`+app.tabs[app.now][0]).addClass('show');\n    },\n    moving: (appn, t, ev, np) => {\n        let app=apps[appn];\n        let deltaLeft, pos=np;\n        if (ev.type.match('mouse')) {\n            deltaLeft = ev.clientX;\n        }\n        else if (ev.type.match('touch')) {\n            deltaLeft = ev.touches[0].clientX;\n        }\n        function move_f(e) {\n            let x;\n            if (e.type.match('mouse')) {\n                x = e.clientX;\n            }\n            else if (e.type.match('touch')) {\n                x = e.touches[0].clientX;\n            }\n            $(this).css('transform', `translateX(${x - deltaLeft}px)`);\n            pos = Math.floor((this.offsetLeft + x - deltaLeft - 36 + (this.offsetWidth / 2)) / this.offsetWidth);\n            if (pos > app.tabs.length - 1) {\n                pos = app.tabs.length - 1;\n            }\n            $(`.window.${appn}>.titbar>.tabs>.tab.left`).removeClass('left');\n            $(`.window.${appn}>.titbar>.tabs>.tab.right`).removeClass('right');\n            if (np < pos) {\n                for (let i = np + 1; i <= pos; i++) {\n                    const ta = app.tabs[i];\n                    if (ta) {\n                        $(`.window.${appn}>.titbar>.tabs>.tab.` + ta[0]).addClass('left');\n                    }\n                }\n            }\n            else if (np > pos) {\n                for (let i = pos; i < np; i++) {\n                    const ta = app.tabs[i];\n                    if (ta) {\n                        $(`.window.${appn}>.titbar>.tabs>.tab.${ta[0]}`).addClass('right');\n                    }\n                }\n            }\n        };\n        page.onmousemove = move_f.bind(t);\n        page.ontouchmove = move_f.bind(t);\n\n        function up_f(e) {\n            page.onmousemove = null;\n            page.onmouseup = null;\n            page.ontouchmove = null;\n            page.ontouchend = null;\n            page.ontouchcancel = null;\n            // let x;\n            // if (e.type.match('mouse')) {\n            //     x = e.clientX;\n            // }else if (e.type.match('touch')) {\n            //     x = e.touches[0].clientX\n            // }\n            // pos = Math.floor((this.offsetLeft + x - deltaLeft - 36 + (this.offsetWidth / 2)) / this.offsetWidth);\n            if (pos > app.tabs.length - 1) {\n                pos = app.tabs.length - 1;\n            }\n            if (pos == np || pos > app.tabs.length || pos < 0) {\n                $(this).css('transform', 'none');\n                $(this).removeClass('moving');\n                $(`.window.${appn}>.titbar>.tabs>.tab.left`).removeClass('left');\n                $(`.window.${appn}>.titbar>.tabs>.tab.right`).removeClass('right');\n            }\n            else {\n                app.tabs.splice(np < pos ? pos + 1 : pos, 0, app.tabs[np]);\n                app.tabs.splice(np < pos ? np : (np + 1), 1);\n                m_tab.settabs(appn);\n                // console.log('pos:',pos);\n                m_tab.tab(appn,pos);\n            }\n        }\n        page.onmouseup = up_f.bind(t);\n        page.ontouchend = up_f.bind(t);\n        page.ontouchcancel = up_f.bind(t);\n        $(t).addClass('moving');\n    },\n    close: (appn, c) => {\n        app=apps[appn];\n        $(`.window.${appn}>.titbar>.tabs>.tab.${app.tabs[c][0]}`).addClass('close');\n        for (let i = c + 1; i < app.tabs.length; i++) {\n            const _id = app.tabs[i][0];\n            $(`.window.${appn}>.titbar>.tabs>.tab.${_id}`).addClass('left');\n        }\n        setTimeout(() => {\n            $(`#win-${appn}>iframe.${app.tabs[c][0]}`).remove();\n            app.tabs.splice(c, 1);\n            m_tab.settabs(appn);\n            if (app.tabs.length == 0) {\n                hidewin(appn);\n            }\n            else {\n                m_tab.tab(appn,app.tabs.length - 1);\n            }\n        }, 200);\n    },\n    tab: (appn,c,load=true) => {\n        focwin(appn);\n        app=apps[appn];\n        app.now = c;\n        app.tab(c,load);\n        $(`.window.${appn}>.titbar>.tabs>.tab.show`).removeClass('show');\n        $(`.window.${appn}>.titbar>.tabs>.tab.${app.tabs[c][0]}`).addClass('show');\n    },\n    rename: (appn,n) => {\n        app=apps[appn];\n        app.tabs[app.now][1] = n;\n        m_tab.settabs(appn);\n        m_tab.tab(appn,app.now,false);\n    },\n}"
  },
  {
    "path": "module/widget.css",
    "content": "@keyframes shine {\n    0% {\n        border-color: #111;\n    }\n    49% {\n        border-color: #111;\n    }\n    51% {\n        border-color: transparent;\n    }\n    98% {\n        border-color: transparent;\n    }\n    100% {\n        border-color: #111;\n    }\n}\n\n.wg {\n    border-radius: 10px;\n    box-shadow: 1px 2px 5px var(--shadow);\n    overflow: hidden;\n    transition: 200ms;\n}\n\n\n:root.corner_squ .wg {\n    corner-shape: squircle;\n    border-radius: 20px;\n}\n\n.wg>.titbar {\n    display: flex;\n    flex-direction: row-reverse;\n}\n\n.wg>.titbar>.more {\n    border-radius: 50%;\n    width: 25px;\n    height: 25px;\n    /* background-color: var(--bggrey); */\n    /* box-shadow: 2px 2px 5px var(--shadow); */\n    margin: 3px 3px 0 0;\n    text-align: center;\n    overflow: hidden;\n    z-index: 1;\n}\n\n.wg>.titbar>.more>.bi {\n    display: block;\n}\n\n.wg>.titbar>.more:hover>.bi {\n    background: var(--hover);\n}\n\n.wg>.titbar>.menu {\n    transition: 200ms cubic-bezier(0.9, 0, 0.1, 1);\n    max-width: 0;\n    box-shadow: 2px 2px 5px var(--shadow);\n    overflow: hidden;\n    margin: 3px 3px 0 3px;\n    background-color: var(--bggrey);\n    border-radius: 12.5px;\n    height: 25px;\n    flex-grow: 1;\n    display: flex;\n    max-width: fit-content;\n    transform: scaleX(0);\n    transform-origin: right;\n}\n\n.wg>.titbar>.menu.show {\n    transform: scaleX(1);\n}\n\n.wg>.titbar>.menu>.a {\n    width: 25px;\n    height: 100%;\n}\n\n.wg>.titbar>.menu>.a>.bi {\n    margin-left: 4px;\n}\n\n.wg>.titbar>.menu>.a:first-child>.bi {\n    margin-left: 8px;\n}\n\n.wg>.titbar>.menu>.a:first-child,\n.wg>.titbar>.menu>.a:last-child {\n    width: 28px;\n}\n\n.wg>.titbar>.menu>.a.img>img {\n    width: 18px;\n    height: 18px;\n    margin: 3.5px 0 3.5px 6px;\n}\n\n.wg>.titbar>.menu>.a:hover {\n    background-color: var(--hover);\n}\n\n.wg>.content {\n    width: 100%;\n    height: 100%;\n    margin-top: -28px;\n}\n\n.wg.toolbar {\n    border-radius: 8px;\n    height: 100%;\n    background-color: var(--contextmeu);\n    backdrop-filter: blur(20px) saturate(1.5);\n    -webkit-backdrop-filter: blur(20px) saturate(1.5);\n    box-shadow: 0 1px 2px #44444460, 0px 3px 25px 1px var(--shadow);\n    margin: 0 3px;\n}\n\n.wg.toolbar>.titbar>.more {\n    width: 18px;\n    height: 18px;\n    font-size: 13px;\n    opacity: 0;\n}\n\n.wg.toolbar:hover>.titbar>.more {\n    opacity: 1;\n}\n\n.wg.toolbar>.titbar>.menu>.a.addtotb {\n    display: none;\n}\n\n.wg.desktop>.titbar>.menu>.a.addtodt {\n    display: none;\n}\n\n.wg.calc {\n    grid-column: auto / span 2;\n    grid-row: auto / span 3;\n}\n\n.wg.calc>.content {\n    display: grid;\n    grid-template-areas:\n        \"input input input input\"\n        \"pow sqrt c jia\"\n        \"n7 n8 n9 jian\"\n        \"n4 n5 n6 cheng\"\n        \"n1 n2 n3 chu\"\n        \"dot n0 back ans\";\n    grid-template-columns: repeat(4, 25%);\n    grid-template-rows: 25% repeat(5, 15%);\n    gap: 0px;\n}\n\n.wg.calc>.content .checked {\n    background-color: var(--mm) !important;\n}\n\n.wg.calc>.content>.container>input {\n    border: none;\n    outline: none;\n    background-color: #00000000;\n    font-size: 30px;\n    text-align: end;\n    color: var(--text);\n    width: 98%;\n    border-right: 2px solid transparent;\n}\n\n.wg.calc>.content>.container {\n    display: flex;\n    grid-area: input;\n    width: 100%;\n    align-items: flex-end;\n}\n\n.wg.calc>.content>.container>input:focus {\n    animation-name: shine;\n    animation-duration: 1s;\n    border-color: #111;\n    animation-iteration-count: infinite;\n}\n\n.wg.calc>.content>.b {\n    margin: 5px 5px;\n    font-size: 25px;\n    margin: 0;\n    border: 1px solid var(--hr);\n    text-align: center;\n    transition: 50ms;\n    background: var(--card);\n}\n\n.wg.calc>.content>.b.ans {\n    border: none;\n    background-image: linear-gradient(120deg, var(--theme-1), var(--theme-2));\n    filter: opacity(0.7);\n}\n\n.wg.calc>.content>.b.ans:hover {\n    filter: none;\n}\n\n.wg.calc>.content>.b:hover {\n    background-color: var(--mm);\n}\n\n.wg.weather {\n    grid-column: auto / span 3;\n    grid-row: auto / span 1;\n}\n\n.wg.weather>.content {\n    display: flex;\n}\n\n.wg.weather.menu>.content>.img, .wg.weather.desktop>.content>.img {\n    width: 70px;\n    height: 100%;\n    padding: 5px;\n    background-size: cover;\n    margin: 0 10px;\n}\n\n.wg.weather.menu>.content>.text>.temperature, .wg.weather.desktop>.content>.text>.temperature {\n    font-size: 30px;\n    margin: 8px 0;\n}\n\n.wg.weather>.content>.text {\n    padding-top: 10px;\n    line-height: 1;\n}\n\n.wg.toolbar.weather>.content>.img {\n    width: 30px;\n    height: 100%;\n    margin: 0 5px 0 10px;\n}\n\n.wg.toolbar.weather>.content>.text {\n    font-size: 9px;\n    padding-top: 5px;\n    margin-right: 10px;\n}\n\n.wg.toolbar.weather>.content>.text>.temperature {\n    font-size: 19px;\n}\n\n.wg.monitor {\n    grid-column: auto / span 3;\n    grid-row: auto / span 1;\n}\n\n.wg.monitor>.content>.text>.type {\n    font-size: 1.4em;\n}\n\n.wg.monitor>.content {\n    display: flex;\n    flex-direction: row;\n    gap: 20px;\n    align-items: center;\n}\n\n.wg.monitor>.content>.container {\n    width: 60px;\n    height: 60px;\n    position: relative;\n    margin-left: 13px;\n}\n\n.wg.monitor>.content>.container>.text {\n    font-size: 0.9em;\n}\n\n.wg.monitor>.content>.container>svg>circle:first-child {\n    fill: none;\n    stroke: var(--hover-b);\n    stroke-width: 6px;\n}\n\n.wg.monitor>.content>.container>svg>circle:last-child {\n    stroke: #fff;\n    fill: none;\n    stroke-width: 2px;\n    transform: rotate(90deg);\n    stroke-width: 6px;\n    stroke-linecap: round;\n}\n\n.wg.monitor>.content>.container>div.text {\n    position: absolute;\n    width: 60px;\n    height: 60px;\n    top: 0px;\n    left: 0px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n.wg.monitor.toolbar>.content {\n    font-size: 0.7em;\n    gap: 10px;\n    min-width: 180px;\n    line-height: 1.1;\n}\n\n.wg.monitor.toolbar>.content>.container, .wg.monitor.toolbar>.content>.container>svg, .wg.monitor.toolbar>.content>.container>.text {\n    height: 40px;\n    width: 40px;\n}\n\n.wg.monitor.toolbar>.content>.container>svg>circle {\n    cx: 20px;\n    cy: 20px;\n    r: 15px;\n    stroke-width: 5px;\n}\n\n.wg.monitor.toolbar>.content>.container>svg>circle:last-child {\n    cy: -20px !important;\n}\n\n/* .wg.monitor.toolbar>.content>.text {\n    font-siz\n} */\n"
  },
  {
    "path": "module/widget.js",
    "content": "// 小组件功能\n\nlet widgets = {\n    widgets: {\n        add: (arg) => {\n            if ($(`.wg.${arg}.menu,.wg.${arg}.toolbar,.wg.${arg}.desktop`).length != 0) {\n                return;\n            }\n            $('#widgets>.widgets>.content>.grid')[0].innerHTML += $('#widgets>.widgets>.content>.template>.' + arg).html();\n            $('#widgets>.widgets>.content>.grid>.wg.' + arg).removeClass('template').addClass('menu');\n            widgets[arg].init();\n\n        },\n        remove: (arg) => {\n            $(`.wg.${arg}.menu,.wg.${arg}.toolbar,.wg.${arg}.desktop`).remove();\n            widgets[arg].remove();\n        }, \n        addToToolbar: (arg) => {\n            // widgets.widgets.remove(arg);\n            if ($('.wg.toolbar.' + arg).length != 0) {\n                return;\n            }\n            $('#toolbar')[0].innerHTML += $('#widgets>.widgets>.content>.template>.' + arg).html();\n            $('#toolbar>.wg.' + arg).removeClass('template').addClass('toolbar');\n            widgets[arg].init();\n        },\n        addToDesktop: (arg) => {\n            // widgets.widgets.remove(arg);\n            if ($('.wg.toolbar.' + arg).length != 0) {\n                return;\n            }\n            $('#desktop-widgets')[0].innerHTML += $('#widgets>.widgets>.content>.template>.' + arg).html();\n            $('#desktop-widgets>.' + arg).removeClass('template').addClass('desktop');\n            // setTimeout(() => {\n                widgets[arg].init();\n            // }, 5000);\n        }\n    },\n    calc: {\n        init: () => {\n            widgetCalculator = new Calculator('.wg.calc:not(.template)>.content>.container>#calc-input-widgets', '.wg.calc:not(.template)>.content');\n        },\n        remove: () => {\n            // $('#calc-input-widgets')[0].value = '0';\n            $('#calc-input-widgets').val('0');\n        }\n    },\n    weather: {\n        init: () => {\n            widgets.weather.update();\n            widgets.weather.handel = setInterval(widgets.weather.update, 100000);\n        },\n        remove: () => {\n            clearInterval(widgets.weather.handel);\n        },\n        update: () => {\n            let wic = {\n                \"d000\": \"SunnyDayV3\",\n                \"d100\": \"MostlySunnyDay\",\n                \"d200\": \"D200PartlySunnyV2\",\n                \"d210\": \"D210LightRainShowersV2\",\n                \"d211\": \"D211LightRainSowShowersV2\",\n                \"d212\": \"D212LightSnowShowersV2\",\n                \"d220\": \"LightRainShowerDay\",\n                \"d221\": \"D221RainSnowShowersV2\",\n                \"d222\": \"SnowShowersDayV2\",\n                \"d240\": \"D240TstormsV2\",\n                \"d300\": \"MostlyCloudyDayV2\",\n                \"d310\": \"D310LightRainShowersV2\",\n                \"d311\": \"D311LightRainSnowShowersV2\",\n                \"d312\": \"LightSnowShowersDay\",\n                \"d320\": \"RainShowersDayV2\",\n                \"d321\": \"D321RainSnowShowersV2\",\n                \"d322\": \"SnowShowersDayV2\",\n                \"d340\": \"D340TstormsV2\",\n                \"d400\": \"CloudyV3\",\n                \"d410\": \"LightRainV3\",\n                \"d411\": \"RainSnowV2\",\n                \"d412\": \"LightSnowV2\",\n                \"d420\": \"HeavyDrizzle\",\n                \"d421\": \"RainSnowV2\",\n                \"d422\": \"Snow\",\n                \"d430\": \"ModerateRainV2\",\n                \"d431\": \"RainSnowV2\",\n                \"d432\": \"HeavySnowV2\",\n                \"d440\": \"Thunderstorm\",\n                \"d500\": \"MostlyCloudyDayV2\",\n                \"d600\": \"FogV2\",\n                \"d603\": \"FreezingRainV2\",\n                \"d605\": \"IcePelletsV2\",\n                \"d705\": \"BlowingHailV2\",\n                \"d905\": \"BlowingHailV2\",\n                \"d907\": \"Haze\",\n                \"d900\": \"Haze\",\n                \"n000\": \"ClearNightV3\",\n                \"n100\": \"MostlyClearNight\",\n                \"n200\": \"PartlyCloudyNightV2\",\n                \"n210\": \"N210LightRainShowersV2\",\n                \"n211\": \"N211LightRainSnowShowersV2\",\n                \"n212\": \"N212LightSnowShowersV2\",\n                \"n220\": \"LightRainShowerNight\",\n                \"n221\": \"N221RainSnowShowersV2\",\n                \"n222\": \"N222SnowShowersV2\",\n                \"n240\": \"N240TstormsV2\",\n                \"n300\": \"MostlyCloudyNightV2\",\n                \"n310\": \"N310LightRainShowersV2\",\n                \"n311\": \"N311LightRainSnowShowersV2\",\n                \"n312\": \"LightSnowShowersNight\",\n                \"n320\": \"RainShowersNightV2\",\n                \"n321\": \"N321RainSnowShowersV2\",\n                \"n322\": \"N322SnowShowersV2\",\n                \"n340\": \"N340TstormsV2\",\n                \"n400\": \"CloudyV3\",\n                \"n410\": \"LightRainV3\",\n                \"n411\": \"RainSnowV2\",\n                \"n412\": \"LightSnowV2\",\n                \"n420\": \"HeavyDrizzle\",\n                \"n421\": \"RainSnowShowersNightV2\",\n                \"n422\": \"N422SnowV2\",\n                \"n430\": \"ModerateRainV2\",\n                \"n431\": \"RainSnowV2\",\n                \"n432\": \"HeavySnowV2\",\n                \"n440\": \"Thunderstorm\",\n                \"n500\": \"PartlyCloudyNightV2\",\n                \"n600\": \"FogV2\",\n                \"n603\": \"FreezingRainV2\",\n                \"n605\": \"BlowingHailV2\",\n                \"n705\": \"BlowingHailV2\",\n                \"n905\": \"BlowingHailV2\",\n                \"n907\": \"Hazy-Night\",\n                \"n900\": \"Hazy-Night\",\n                \"xxxx1\": \"WindyV2\"\n            };\n            $.getJSON('https://api.msn.cn/weather/overview?apikey=j5i4gDqHL6nGYwx5wi5kRhXjtf2c5qgFX9fzfk0TOo&locale=zh-cn&ocid=msftweather').then(r => {\n                let inf = r.value[0].responses[0].weather[0].current;\n                // console.log(inf.icon,wic[inf.icon]);\n                $('.wg.weather>.content>.img').attr('src', `https://assets.msn.cn/weathermapdata/1/static/weather/Icons/taskbar_v10/Condition_Card/${wic[inf.symbol]}.svg`);\n                $('.wg.weather>.content>.text>.temperature').text(`${inf.temp}℃`);\n                $('.wg.weather>.content>.text>.detail').text(`${inf.cap} 体感温度${inf.feels}℃`);\n            });\n        },\n    },\n    monitor: {\n        type: 'cpu',\n        handle: null,\n        init: () => {\n            if ($('*:not(.template)>*>.wg.monitor')[0].classList.contains('toolbar')) {\n                $('*:not(.template)>*>.wg.monitor>.content>.container>svg>circle').attr('r', '15px');\n            }\n            else {\n                $('*:not(.template)>*>.wg.monitor>.content>.container>svg>circle').attr('r', '26px');\n            }\n            if (apps.taskmgr.preLoaded != true && apps.taskmgr.loaded != true) {\n                apps.taskmgr.load(false);\n            }\n            apps.taskmgr.preLoaded = true;\n            widgets.monitor.update();\n            widgets.monitor.handle = window.setInterval(widgets.monitor.update, 1000);\n        },\n        update: () => {\n            $('*:not(.template)>*>.wg.monitor>.content>.container>svg>circle:last-child').css('stroke-dasharray', `${widgets.monitor.type != 'gpu' ? widgets.monitor.type.match('wifi') ? widgets.monitor.type == 'wifi-send' ? apps.taskmgr.wifi.send / 100 * (Math.PI * $('*:not(.template)>*>.wg.monitor>.content>.container>svg>circle:last-child')[0].r.baseVal.value * 2) : apps.taskmgr.wifi.receive / 100 * (Math.PI * $('*:not(.template)>*>.wg.monitor>.content>.container>svg>circle:last-child')[0].r.baseVal.value * 2) : apps.taskmgr[widgets.monitor.type] / 100 * (Math.PI * $('*:not(.template)>*>.wg.monitor>.content>.container>svg>circle:last-child')[0].r.baseVal.value * 2) : apps.taskmgr.gpu.usage / 100 * (Math.PI * $('*:not(.template)>*>.wg.monitor>.content>.container>svg>circle:last-child')[0].r.baseVal.value * 2)}, 170`);\n            if (widgets.monitor.type == 'cpu' || widgets.monitor.type == 'gpu') {\n                $('*:not(.template)>*>.wg.monitor>.content>.container>svg>circle:last-child').css('stroke', '#2983cc');\n                $('*:not(.template)>*>.wg.monitor>.content>.text>.type')[0].innerText = widgets.monitor.type == 'cpu' ? 'CPU利用率' : 'GPU利用率';\n            }\n            else if (widgets.monitor.type == 'memory') {\n                $('*:not(.template)>*>.wg.monitor>.content>.container>svg>circle:last-child').css('stroke', '#660099');\n                $('*:not(.template)>*>.wg.monitor>.content>.text>.type')[0].innerText = '内存使用量';\n            }\n            else if (widgets.monitor.type == 'disk') {\n                $('*:not(.template)>*>.wg.monitor>.content>.container>svg>circle:last-child').css('stroke', '#008000');\n                $('*:not(.template)>*>.wg.monitor>.content>.text>.type')[0].innerText = '磁盘活动时间';\n            }\n            else if (widgets.monitor.type == 'wifi-send') {\n                $('*:not(.template)>*>.wg.monitor>.content>.container>svg>circle:last-child').css('stroke', '#8e5829');\n                $('*:not(.template)>*>.wg.monitor>.content>.text>.type')[0].innerText = '网络吞吐量-发送';\n            }\n            else if (widgets.monitor.type == 'wifi-receive') {\n                $('*:not(.template)>*>.wg.monitor>.content>.container>svg>circle:last-child').css('stroke', '#8e5829');\n                $('*:not(.template)>*>.wg.monitor>.content>.text>.type')[0].innerText = '网络吞吐量-接收';\n            }\n            $('*:not(.template)>*>.wg.monitor>.content>.text>.value')[0].innerText = (widgets.monitor.type != 'gpu' ? widgets.monitor.type.match('wifi') ? widgets.monitor.type == 'wifi-send' ? apps.taskmgr.wifi.send : apps.taskmgr.wifi.receive : apps.taskmgr[widgets.monitor.type] : apps.taskmgr.gpu.usage).toFixed(widgets.monitor.type.match('wifi') ? 2 : 1) + (widgets.monitor.type.match('wifi') ? 'Mbps' : '%');\n            $('*:not(.template)>*>.wg.monitor>.content>.container>.text>.value')[0].innerText = (widgets.monitor.type != 'gpu' ? widgets.monitor.type.match('wifi') ? widgets.monitor.type == 'wifi-send' ? apps.taskmgr.wifi.send : apps.taskmgr.wifi.receive : apps.taskmgr[widgets.monitor.type] : apps.taskmgr.gpu.usage).toFixed(widgets.monitor.type.match('wifi') ? 2 : 1) + (widgets.monitor.type.match('wifi') ? 'Mbps' : '%');\n        },\n        remove: () => {\n            window.clearInterval(widgets.monitor.handle);\n        }\n    }\n};\nlet edit_mode = false,gridnow;\nfunction editMode() {\n    if (edit_mode) {\n        $('#desktop-editbar-container').removeClass('show');\n        $('#desktop-widgets').removeClass('edit');\n    }\n    else if (!edit_mode) {\n        $('#desktop-editbar-container').addClass('show');\n        $('#desktop-widgets').addClass('edit');\n    }\n    edit_mode = !edit_mode;\n}\nfunction widgetsMove(elt, e) {\n    if (elt.classList.contains('desktop') && edit_mode == true) {\n        let width = elt.getBoundingClientRect().width;\n        let height = elt.getBoundingClientRect().height;\n        let gridrow = window.getComputedStyle(elt, null).gridRowEnd.replace('span ', '');\n        let gridcol = window.getComputedStyle(elt, null).gridColumnEnd.replace('span ', '');\n        let gridrowmax = window.getComputedStyle($('#desktop-widgets')[0], null).gridTemplateRows.split(' ').length;\n        let gridcolmax = window.getComputedStyle($('#desktop-widgets')[0], null).gridTemplateColumns.split(' ').length;\n        let deltaLeft = e.clientX - elt.getBoundingClientRect().left;\n        let deltaTop = e.clientY - elt.getBoundingClientRect().top;\n        elt.style.position = 'fixed';\n        elt.style.width = `${width}px`;\n        elt.style.height = `${height}px`;\n        elt.classList.add('moving');\n        elt.classList.add('notrans');\n        // elt.style.left = `${e.clientX - deltaLeft}px`;\n        // elt.style.top = `${e.clientY - deltaTop}px`;\n\n        $('#desktop-widgets>.widgets-move').addClass('show');\n        // $('#desktop-widgets>.widgets-move').css('cssText', `width: ${width}px; height: ${height}px;`);\n        function widgetsMoving(e) {\n            let left = 0, top = 0;\n            if (e.type.match('mouse')) {\n                left = e.clientX - deltaLeft;\n                top = e.clientY - deltaTop;\n            }\n            else if (e.type.match('touch')) {\n                left = e.touches[0].clientX - deltaLeft;\n                top = e.touches[0].clientY - deltaTop;\n            }\n            elt.style.left = `${left}px`;\n            elt.style.top = `${top}px`;\n            // 基于人脑计算qwq\n            gridnow = {\n                // 四舍五入(组件宽度 / 2 + 组件视窗右边距 - 布局右边距) / ((网格总列数 * 网格宽度 + 网格间距 * 网格间距数量) / 网格总数量) - 元素网格列尾 + 校正值)\n                col: ((width / 2 + elt.getBoundingClientRect().right - 20) / ((gridcolmax * 83 + 10 * (gridcolmax - 1)) / gridcolmax) - gridcol/* + (gridcol - 2) * 0.5*/).toFixed(0),\n                row: ((height / 2 + top - 20) / ((gridrowmax * 83 + 10 * (gridrowmax - 1)) / gridrowmax) + (2 - gridrow) * 0.5).toFixed(0)\n            };\n            gridnow.col = gridnow.col <= Math.floor(gridcol / 2) ? 1 + Math.floor(gridcol / 2) : gridnow.col > (gridcolmax - gridcol + (gridcol % 2 ? (Number(gridcol) + 1) / 2 : gridcol / 2)) ? (gridcolmax - gridcol + (gridcol % 2 ? (Number(gridcol) + 1) / 2 : gridcol / 2)) : gridnow.col;\n            gridnow.row = gridnow.row <= 0 ? 1 : gridnow.row >= (gridrowmax - gridrow + 1) ? gridrowmax - gridrow + 1 : gridnow.row;\n            $('#desktop-widgets>.widgets-move').css('cssText', `grid-column: ${gridcolmax - gridnow.col} / span ${gridcol}; grid-row: ${gridnow.row} / span ${gridrow}`);\n        }\n        function up() {\n            elt.classList.remove('notrans');\n            elt.classList.remove('moving');\n            let destTop = $('#desktop-widgets>.widgets-move')[0].getBoundingClientRect().top;\n            let destLeft = $('#desktop-widgets>.widgets-move')[0].getBoundingClientRect().left;\n            elt.style.left = `${destLeft}px`;\n            elt.style.top = `${destTop}px`;\n            window.setTimeout(() => {\n                elt.style.position = 'static';\n                $(elt).css('cssText', `grid-column: ${gridcolmax - gridnow.col} / span ${gridcol}; grid-row: ${gridnow.row} / span ${gridrow}`);\n                elt.style.left = '0px';\n                elt.style.top = '0px';\n                $('#desktop-widgets>.widgets-move').removeClass('show');\n            }, 500);\n            page.onmousemove = null;\n            page.ontouchmove = null;\n            page.onmouseup = null;\n            page.ontouchend = null;\n            page.ontouchcancel = null;\n        }\n        widgetsMoving(e);\n        page.onmousemove = widgetsMoving;\n        page.ontouchmove = widgetsMoving;\n        page.onmouseup = up;\n        page.ontouchend = up;\n        page.ontouchcancel = up;\n    }\n}"
  },
  {
    "path": "module/window.js",
    "content": "// 窗口操作模块\n\n/***** 项目一级保护代码 *****\n 未经允许，严禁擅改，否则可致灾难性错误 */\nfunction showwin(name) {\n    $('.window.' + name).addClass('show-begin');\n    setTimeout(() => { $('.window.' + name).addClass('show'); }, 0);\n    setTimeout(() => { $('.window.' + name).addClass('notrans'); }, 200);\n    if (name != 'run') {\n        $('.window.' + name).attr('style', 'top: 10%;left: 15%;');\n    }\n    $('#taskbar>.' + wo[0]).removeClass('foc');\n    $('.window.' + wo[0]).removeClass('foc');\n    wo.splice(0, 0, name);\n    orderwin();\n    $('.window.' + name).addClass('foc');\n    if (!$('#start-menu.show')[0] && !$('#search-win.show')[0] && !$('#widgets.show')[0] && !$('#control.show')[0] && !$('#datebox.show')[0]) {\n        if ($('.window.max:not(.left):not(.right)')[0]) {\n            $('#dock-box').addClass('hide');\n        }\n        else {\n            $('#dock-box').removeClass('hide');\n        }\n    }\n    else {\n        $('#dock-box').removeClass('hide');\n    }\n}\n\nfunction hidewin(name, arg = 'window') {\n    $('.window.' + name).removeClass('notrans');\n    $('.window.' + name).removeClass('max');\n    $('.window.' + name).removeClass('show');\n    if (name == 'camera') {\n      // 相机关闭后统一清理 tracks\n      closeVideo()\n    }\n    if (arg == 'window') {\n        $('#taskbar').attr('count', Number($('#taskbar').attr('count')) - 1);\n        $('#taskbar>.' + name).remove();\n        $('#taskbar').css('width', 4 + $('#taskbar').attr('count') * (34 + 4));\n        setTimeout(() => {\n            if ($('#taskbar').attr('count') == '0') {\n                $('#taskbar').css('display', 'none');\n            }\n        }, 80);\n    }\n    setTimeout(() => {\n        $('.window.' + name).removeClass('show-begin');\n        if (name == 'run') {\n            window.setTimeout(() => {\n                $('.window.' + name).attr('style', '');\n            }, 200);\n        }\n    }, 200);\n    $('.window.' + name + '>.titbar>div>.wbtg.max').html('<i class=\"bi bi-app\"></i>');\n    wo.splice(wo.indexOf(name), 1);\n    focwin(wo[wo.length - 1]);\n    // orderwindow();\n    if (!$('#start-menu.show')[0] && !$('#search-win.show')[0] && !$('#widgets.show')[0] && !$('#control.show')[0] && !$('#datebox.show')[0]) {\n        if ($('.window.max:not(.left):not(.right)')[0]) {\n            $('#dock-box').addClass('hide');\n        }\n        else {\n            $('#dock-box').removeClass('hide');\n        }\n    }\n    else {\n        $('#dock-box').removeClass('hide');\n    }\n    if (arg == 'window') {\n        if (apps[name].remove) {\n            apps[name].remove();\n        }\n    }\n}\n\nfunction maxwin(name, trigger = true) {\n    if ($('.window.' + name).hasClass('max')) {\n        $('.window.' + name).removeClass('left');\n        $('.window.' + name).removeClass('right');\n        $('.window.' + name).removeClass('max');\n        $('.window.' + name + '>.titbar>div>.wbtg.max').html('<i class=\"bi bi-app\"></i>');\n        if (trigger) {\n            setTimeout(() => { $('.window.' + name).addClass('notrans'); }, 200);\n        }\n        else if (!trigger) {\n            $('.window.' + name).addClass('notrans');\n        }\n        if ($('.window.' + name).attr('data-pos-x') != 'null' && $('.window.' + name).attr('data-pos-y') != 'null') {\n            // $('.window.' + name).attr(`style`, `left:${$('.window.' + name).attr('data-pos-x')};top:${$('.window.' + name).attr('data-pos-y')}`);\n            $('.window.' + name).css('left', `${$('.window.' + name).attr('data-pos-x')}`);\n            $('.window.' + name).css('top', `${$('.window.' + name).attr('data-pos-y')}`);\n        }\n        // }\n    } else {\n        if (trigger) {\n            $('.window.' + name).attr('data-pos-x', `${$('.window.' + name).css('left')}`);\n            $('.window.' + name).attr('data-pos-y', `${$('.window.' + name).css('top')}`);\n        }\n        $('.window.' + name).removeClass('notrans');\n        $('.window.' + name).addClass('max');\n        $('.window.' + name + '>.titbar>div>.wbtg.max').html('<svg version=\"1.1\" width=\"12\" height=\"12\" viewBox=\"0,0,37.65105,35.84556\" style=\"margin-top:4px;\"><g transform=\"translate(-221.17804,-161.33903)\"><g style=\"stroke:var(--text);\" data-paper-data=\"{&quot;isPaintingLayer&quot;:true}\" fill=\"none\" fill-rule=\"nonzero\" stroke-width=\"2\" stroke-linecap=\"butt\" stroke-linejoin=\"miter\" stroke-miterlimit=\"10\" stroke-dasharray=\"\" stroke-dashoffset=\"0\" style=\"mix-blend-mode: normal\"><path d=\"M224.68734,195.6846c-2.07955,-2.10903 -2.00902,-6.3576 -2.00902,-6.3576l0,-13.72831c0,0 -0.23986,-1.64534 2.00902,-4.69202c1.97975,-2.68208 4.91067,-2.00902 4.91067,-2.00902h14.06315c0,0 3.77086,-0.23314 5.80411,1.67418c2.03325,1.90732 1.33935,5.02685 1.33935,5.02685v13.39347c0,0 0.74377,4.01543 -1.33935,6.3576c-2.08312,2.34217 -5.80411,1.67418 -5.80411,1.67418h-13.39347c0,0 -3.50079,0.76968 -5.58035,-1.33935z\"/><path d=\"M229.7952,162.85325h16.06111c0,0 5.96092,-0.36854 9.17505,2.64653c3.21412,3.01506 2.11723,7.94638 2.11723,7.94638v18.55642\"/></g></g></svg>');\n    }\n    if (!$('#start-menu.show')[0] && !$('#search-win.show')[0] && !$('#widgets.show')[0] && !$('#control.show')[0] && !$('#datebox.show')[0]) {\n        if ($('.window.max:not(.left):not(.right)')[0]) {\n            $('#dock-box').addClass('hide');\n        }\n        else {\n            $('#dock-box').removeClass('hide');\n        }\n    }\n    else {\n        $('#dock-box').removeClass('hide');\n    }\n}\nfunction minwin(name) {\n    if ($('.window.' + name).hasClass('min')) {\n        $('.window.' + name).addClass('show-begin');\n        focwin(name);\n        setTimeout(() => {\n            $('#taskbar>.' + name).removeClass('min');\n            $('.window.' + name).removeClass('min');\n            if ($('.window.' + name).hasClass('min-max')) {\n                $('.window.' + name).addClass('max');\n            }\n            $('.window.' + name).removeClass('min-max');\n        }, 0);\n        setTimeout(() => {\n            if (!$('.window.' + name).hasClass('max')) {\n                $('.window.' + name).addClass('notrans');\n            }\n        }, 200);\n    } else {\n        focwin(null);\n        if ($('.window.' + name).hasClass('max')) {\n            $('.window.' + name).addClass('min-max');\n        }\n        $('.window.' + name).removeClass('foc');\n        $('.window.' + name).removeClass('max');\n        $('#taskbar>.' + name).addClass('min');\n        $('.window.' + name).addClass('min');\n        $('.window.' + name).removeClass('notrans');\n        setTimeout(() => { $('.window.' + name).removeClass('show-begin'); }, 200);\n    }\n}\n\nfunction resizewin(win, arg, resizeElt) {\n    page.onmousemove = function (e) {\n        win_resizing(win, e, arg);\n    };\n    page.ontouchmove = function (e) {\n        win_resizing(win, e, arg);\n    };\n    function up_f() {\n        page.onmousedown = null;\n        page.ontouchstart = null;\n        page.onmousemove = null;\n        page.ontouchmove = null;\n        page.ontouchcancel = null;\n        page.style.cursor = 'auto';\n    }\n    page.onmouseup = up_f;\n    page.ontouchend = up_f;\n    page.ontouchcancel = up_f;\n    page.style.cursor = window.getComputedStyle(resizeElt, null).cursor;\n}\nfunction win_resizing(win, e, arg) {\n    let x, y,\n        minWidth = win.dataset.minWidth ? win.dataset.minWidth : 400,\n        minHeight = win.dataset.minHeight ? win.dataset.minHeight : 300,\n        offsetLeft = win.getBoundingClientRect().left,\n        offsetTop = win.getBoundingClientRect().top,\n        offsetRight = win.getBoundingClientRect().right,\n        offsetBottom = win.getBoundingClientRect().bottom;\n    if (e.type.match('mouse')) {\n        x = e.clientX;\n        y = e.clientY;\n    }\n    else if (e.type.match('touch')) {\n        x = e.touches[0].clientX;\n        y = e.touches[0].clientY;\n    }\n    if (arg == 'right' && x - offsetLeft >= minWidth) {\n        win.style.width = x - offsetLeft + 'px';\n    }\n    else if (arg == 'right') {\n        win.style.width = minWidth + 'px';\n    }\n\n    if (arg == 'left' && offsetRight - x >= minWidth) {\n        win.style.left = x + 'px';\n        win.style.width = offsetRight - x + 'px';\n    }\n    else if (arg == 'left') {\n        win.style.width = minWidth + 'px';\n        win.style.left = offsetRight - minWidth + 'px';\n    }\n\n    if (arg == 'bottom' && y - offsetTop >= minHeight) {\n        win.style.height = y - offsetTop + 'px';\n    }\n    else if (arg == 'bottom') {\n        win.style.height = minHeight + 'px';\n    }\n\n    if (arg == 'top' && offsetBottom - y >= minHeight) {\n        win.style.top = y + 'px';\n        win.style.height = offsetBottom - y + 'px';\n    }\n    else if (arg == 'top') {\n        win.style.top = offsetBottom - minHeight + 'px';\n        win.style.height = minHeight + 'px';\n    }\n\n    if (arg == 'top-left') {\n        if (offsetRight - x >= minWidth) {\n            win.style.left = x + 'px';\n            win.style.width = offsetRight - x + 'px';\n        }\n        else {\n            win.style.left = offsetRight - minWidth + 'px';\n            win.style.width = minWidth + 'px';\n        }\n        if (offsetBottom - y >= minHeight) {\n            win.style.top = y + 'px';\n            win.style.height = offsetBottom - y + 'px';\n        }\n        else {\n            win.style.top = offsetBottom - minHeight + 'px';\n            win.style.height = minHeight + 'px';\n        }\n    }\n\n    else if (arg == 'top-right') {\n        if (x - offsetLeft >= minWidth) {\n            win.style.width = x - offsetLeft + 'px';\n        }\n        else {\n            win.style.width = minWidth + 'px';\n        }\n        if (offsetBottom - y >= minHeight) {\n            win.style.top = y + 'px';\n            win.style.height = offsetBottom - y + 'px';\n        }\n        else {\n            win.style.top = offsetBottom - minHeight + 'px';\n            win.style.height = minHeight + 'px';\n        }\n    }\n\n    else if (arg == 'bottom-left') {\n        if (offsetRight - x >= minWidth) {\n            win.style.left = x + 'px';\n            win.style.width = offsetRight - x + 'px';\n        }\n        else {\n            win.style.left = offsetRight - minWidth + 'px';\n            win.style.width = minWidth + 'px';\n        }\n        if (y - offsetTop >= minHeight) {\n            win.style.height = y - offsetTop + 'px';\n        }\n        else {\n            win.style.height = minHeight + 'px';\n        }\n    }\n\n    else if (arg == 'bottom-right') {\n        if (x - offsetLeft >= minWidth) {\n            win.style.width = x - offsetLeft + 'px';\n        }\n        else {\n            win.style.width = minWidth + 'px';\n        }\n        if (y - offsetTop >= minHeight) {\n            win.style.height = y - offsetTop + 'px';\n        }\n        else {\n            win.style.height = minHeight + 'px';\n        }\n    }\n}\nlet wo = [];\nfunction orderwin() {\n    for (let i = 0; i < wo.length; i++) {\n        const win = $('.window.' + wo[wo.length - i - 1]);\n        if (topmost.includes(wo[wo.length - i - 1])) {\n            win.css('z-index', 10 + i + 50);\n        } else {\n            win.css('z-index', 10 + i);\n        }\n    }\n}\n\n// 拖拽窗口\nconst titbars = document.querySelectorAll('.window>.titbar');\nconst wins = document.querySelectorAll('.window');\nlet deltaLeft = 0, deltaTop = 0, fil = false, filty = 'none', bfLeft = 0, bfTop = 0;\nfunction win_move(e) {\n    let cx, cy;\n    if (e.type == 'touchmove') {\n        cx = e.targetTouches[0].clientX, cy = e.targetTouches[0].clientY;\n    }\n    else {\n        cx = e.clientX, cy = e.clientY;\n    }\n    // $(this).css('cssText', `left:${cx - deltaLeft}px;top:${cy - deltaTop}px;`);\n    $(this).css('left', `${cx - deltaLeft}px`);\n    $(this).css('top', `${cy - deltaTop}px`);\n    if (cy <= 0) {\n        // $(this).css('cssText', `left:${cx - deltaLeft}px;top:${-deltaTop}px`);\n        $(this).css('left', `${cx - deltaLeft}px`);\n        $(this).css('top', `${-deltaTop}px`);\n        if (!(this.classList[1] in nomax)) {\n            $('#window-fill').addClass('top');\n            setTimeout(() => {\n                $('#window-fill').addClass('fill');\n            }, 0);\n            fil = this;\n            filty = 'top';\n        }\n        // console.log(this.classList[1], nomax,this.classList[1] in nomax,not this.classList[1] in nomax);\n    }\n    else if (cx <= 0) {\n        // $(this).css('cssText', `left:${-deltaLeft}px;top:${cy - deltaTop}px`);\n        $(this).css('left', `${-deltaLeft}px`);\n        $(this).css('top', `${cy - deltaTop}px`);\n        if (!(this.classList[1] in nomax)) {\n            $('#window-fill').addClass('left');\n            setTimeout(() => {\n                $('#window-fill').addClass('fill');\n            }, 0);\n            fil = this;\n            filty = 'left';\n        }\n    }\n    else if (cx >= document.body.offsetWidth - 2) {\n        // $(this).css('cssText', `left:calc(100% - ${deltaLeft}px);top:${cy - deltaTop}px`);\n        $(this).css('left', `calc(100% - ${deltaLeft}px)`);\n        $(this).css('top', `${cy - deltaTop}px`);\n        if (!(this.classList[1] in nomax)) {\n            $('#window-fill').addClass('right');\n            setTimeout(() => {\n                $('#window-fill').addClass('fill');\n            }, 0);\n            fil = this;\n            filty = 'right';\n        }\n    }\n    else if (fil) {\n        $('#window-fill').removeClass('fill');\n        setTimeout(() => {\n            $('#window-fill').removeClass('top');\n            $('#window-fill').removeClass('left');\n            $('#window-fill').removeClass('right');\n        }, 200);\n        fil = false;\n        filty = 'none';\n    }\n    else if ($(this).hasClass('max')) {\n        deltaLeft = deltaLeft / (this.offsetWidth - (45 * 3)) * ((0.7 * document.body.offsetWidth) - (45 * 3));\n        maxwin(this.classList[1], false);\n        // 窗口控制按钮宽 45px\n        // $(this).css('cssText', `left:${cx - deltaLeft}px;top:${cy - deltaTop}px;`);\n        $(this).css('left', `${cx - deltaLeft}px`);\n        $(this).css('top', `${cy - deltaTop}px`);\n        $('.window.' + this.classList[1] + '>.titbar>div>.wbtg.max').html('<i class=\"bi bi-app\"></i>');\n\n        $(this).addClass('notrans');\n    }else if(cy >= document.body.offsetHeight - 10){\n        $(this).css('left', `${cx - deltaLeft}px`);\n        $(this).css('top', `calc(100% - ${deltaTop}px)`);\n    }\n}\nfor (let i = 0; i < wins.length; i++) {\n    const win = wins[i];\n    const titbar = titbars[i];\n    titbar.addEventListener('mousedown', (e) => {\n        if ($('.taskmgr>.titbar>div>input').is(':focus')) {\n            return;\n        }\n        let x = window.getComputedStyle(win, null).getPropertyValue('left').split('px')[0];\n        let y = window.getComputedStyle(win, null).getPropertyValue('top').split('px')[0];\n        if (y != 0) {\n            bfLeft = x;\n            bfTop = y;\n        }\n        deltaLeft = e.clientX - x;\n        deltaTop = e.clientY - y;\n        page.onmousemove = win_move.bind(win);\n    });\n    titbar.addEventListener('touchstart', (e) => {\n        let x = window.getComputedStyle(win, null).getPropertyValue('left').split('px')[0];\n        let y = window.getComputedStyle(win, null).getPropertyValue('top').split('px')[0];\n        if (y != 0) {\n            bfLeft = x;\n            bfTop = y;\n        }\n        deltaLeft = e.targetTouches[0].clientX - x;\n        deltaTop = e.targetTouches[0].clientY - y;\n        page.ontouchmove = win_move.bind(win);\n    });\n}\npage.addEventListener('mouseup', () => {\n    page.onmousemove = null;\n    if (fil) {\n        if (filty == 'top') {\n            maxwin(fil.classList[1], false);\n        }\n        else if (filty == 'left') {\n            $(fil).addClass('left');\n            maxwin(fil.classList[1], false);\n        }\n        else if (filty == 'right') {\n            $(fil).addClass('right');\n            maxwin(fil.classList[1], false);\n        }\n        setTimeout(() => {\n            $('#window-fill').removeClass('fill');\n            $('#window-fill').removeClass('top');\n            $('#window-fill').removeClass('left');\n            $('#window-fill').removeClass('right');\n        }, 200);\n        $('.window.' + fil.classList[1]).attr('data-pos-x', `${bfLeft}px`);\n        $('.window.' + fil.classList[1]).attr('data-pos-y', `${bfTop}px`);\n        fil = false;\n    }\n});\npage.addEventListener('touchend', () => {\n    page.ontouchmove = null;\n    if (fil) {\n        if (filty == 'top')\n            maxwin(fil.classList[1], false);\n        else if (filty == 'left') {\n            maxwin(fil.classList[1], false);\n            $(fil).addClass('left');\n        } else if (filty == 'right') {\n            maxwin(fil.classList[1], false);\n            $(fil).addClass('right');\n        }\n        setTimeout(() => {\n            $('#window-fill').removeClass('fill');\n            $('#window-fill').removeClass('top');\n            $('#window-fill').removeClass('left');\n            $('#window-fill').removeClass('right');\n        }, 200);\n        setTimeout(() => {\n            $('.window.' + fil.classList[1]).attr('data-pos-x', `${bfLeft}px`);\n            $('.window.' + fil.classList[1]).attr('data-pos-y', `${bfTop}px`);\n        }, 200);\n        fil.setAttribute('style', `left:${bfLeft}px;top:${bfTop}px`);\n        fil = false;\n    }\n});\npage.addEventListener('mousemove', (e) => {\n    if (e.clientY >= window.innerHeight - 60) {\n        $('#dock-box').removeClass('hide');\n    }\n    else {\n        if (!$('#start-menu.show')[0] && !$('#search-win.show')[0] && !$('#widgets.show')[0] && !$('#control.show')[0] && !$('#datebox.show')[0]) {\n            if ($('.window.max:not(.left):not(.right)')[0]) {\n                $('#dock-box').addClass('hide');\n            }\n            else {\n                $('#dock-box').removeClass('hide');\n            }\n        }\n        else {\n            $('#dock-box').removeClass('hide');\n        }\n    }\n});\n\n\n// 屎山警告\nfunction focwin(name, arg = 'window') {\n    // if(wo[0]==name)return;\n    if (arg == 'window') {\n        $('#taskbar>.' + wo[0]).removeClass('foc');\n        $('#taskbar>.' + name).addClass('foc');\n    }\n    $('.window.' + wo[0]).removeClass('foc');\n    wo.splice(wo.indexOf(name), 1);\n    wo.splice(0, 0, name);\n    orderwin();\n    $('.window.' + name).addClass('foc');\n}\nfunction taskbarclick(name) {\n    if ($('.window.' + name).hasClass('foc')) {\n        minwin(name);\n        // focwin(null); \n        return;\n    }\n    if ($('.window.' + name).hasClass('min')) {\n        minwin(name);\n    }\n    focwin(name);\n}"
  },
  {
    "path": "pwa/manifest.json",
    "content": "{\n  \"name\": \"Windows 12\",\n  \"short_name\": \"Windows 12\",\n  \"display\": \"standalone\",\n  \"start_url\": \"/win12/boot.html\",\n  \"prefer_related_applications\": true,\n  \"background_color\": \"#000\",\n  \"icons\": [\n    {\n      \"src\": \"logo.png\",\n      \"sizes\": \"144x144\",\n      \"type\": \"image/png\"\n    }\n  ]\n}"
  },
  {
    "path": "readme/README_en_us.md",
    "content": "<p align=\"center\">\n    <img src=\"./icon/windows12.svg\" width=\"100\" height=\"100\">\n</p>\n<h1 align=\"center\">Windows12 Online</h1>\n<p align=\"center\" class=\"shields\">\n  <span href=\"https://github.com/tjy-gitnub/win12/issues\" style=\"text-decoration:none\">\n    <img src=\"https://img.shields.io/github/issues/tjy-gitnub/win12.svg\" alt=\"GitHub issues\"/>\n  </span>\n<span href=\"https://github.com/tjy-gitnub/win12/stargazers\" style=\"text-decoration:none\">\n<img src=\"https://img.shields.io/github/stars/tjy-gitnub/win12.svg\" alt=\"GitHub stars\"/>\n</span>\n<span href=\"https://github.com/tjy-gitnub/win12/network\" style=\"text-decoration:none\">\n<img src=\"https://img.shields.io/github/forks/tjy-gitnub/win12.svg\" alt=\"GitHub forks\"/>\n  </span>\n</p>\n<p align=\"center\" class=\"language\" title=\"Language selection\">\n<a href=\"readme/README_en_us.md\">English</a> | \n<b>Simplified Chinese</b> | \n<a href=\"readme/README_fr_fr.md\">Français</a>|\n<a href=\"readme/README_zh_tw.md\">Traditional Chinese</a>\n</p>\n<details align=\"center\">\n  <summary>Star History</summary>\n  <a href=\"https://star-history.com/#tjy-gitnub/win12&Date\" style=\"text-decoration:none\">\n<img src=\"https://api.star-history.com/svg?repos=tjy-gitnub/win12&type=Date\" alt=\"Star History Chart\">\n  </a>\n</details>\n\n## Table of Contents\n\n- [Windows12 Online](#windows12-online)\n  - [Preface](#preface)\n  - [Online Experience](#online-experience)\n  - [Effect Display](#effect-display)\n- [Future Planning](#future-planning)\n- [Open Source Statement](#open-source-statement)\n- [Contribution Guidelines](#contribution-guidelines)\n- [Contributors](#contributors)\n- [Support Us](#support-us)\n    \n\n    \n\n## Foreword\n\nA long time ago, tjy-gitnub was inspired after seeing the Windows 12 concept version (Powered by PowerPoint) and decided to create a Windows 12 web version, just like the [Windows 11 web version](https://win11.blueedge.me/). It features beautiful UI design, smooth and rich animations, and various advanced features.\n\nThus this project was born (yes, the birth of this project was just that sudden)\n\n> The mobile adaptation is not very complete yet, so please use the desktop version website for now `>v-)o`\n\n## Online Experience\n\nClick [here](tjy-gitnub.github.io/win12/desktop.html) to experience it.\n\n\n## Feature Preview\n\n> The new version has many changes. This is for reference only. Please refer to the actual product (you can click [here](https://tjy-gitnub.github.io/win12/desktop.html) to see for yourself, no trouble `-_-)o` )\n\n![image](https://tjy-gitnub.github.io/win12/img/start-menu.png)\n\n*Start Menu*\n\n![image](https://tjy-gitnub.github.io/win12/img/colorful-apps.png)\n\n*Rich Applications*\n\n![image](https://tjy-gitnub.github.io/win12/img/dark-mode.png)\n\n*Dark Mode*\n\n![image](https://tjy-gitnub.github.io/win12/img/ai-copilot.png)\n*AI Copilot([Implementation Method](./scripts/AI%20Copilot%20service/README.md))*\n## Future Planning\n\nRegarding the roadmap for this project:\n\n- [x] Basic Features and Applications\n- [x] Overall appearance optimization\n- [x] Added special effects\n- [x] Window functionality\n- [x] Application refinement\n- [x] Add more personalization settings\n- [x] Add Edge application\n- [ ] Add tabs for more applications\n- [x] Improve widgets and add desktop widget functionality\n- [x] Dynamic wallpaper\n- [ ] More taskbar customization\n- [ ] Enrich app ecosystem, add Microsoft Store\n- [ ] Improve Settings and Windows Update\n\nHere are some... uh... wild... ideas `~o~)/`:\n\n- [x] Establish a file system\n- [ ] Build my own executable file mechanism\n- [ ] Convert and execute .exe files\n- [ ] Provide more APIs for applications to call\n- [x] Built-in browser kernel, become an application\n- [ ] Rename the project to \"Windows 12\"\n- [ ] Package into the Windows system\n- [ ] Set the startup program to this application\n- [ ] Remove redundant system functions and package them into an independent operating system\n- [ ] Rename the project to \"Doswin 1.0\"\n- [ ] Adapt to quantum computers\n- [x] Integrate ChatGPT\n- [ ] Rename the project to \"550W\"\n\n## Open Source Statement\n>[!TIP]\nRegardless of how you use this project, it represents that you have carefully read and agreed to comply with all content in this section.\n\nThe content of Windows12 Online is licensed under a relatively permissive copyright license for use by the general public.\n\n### Computer Program Source Code\nWindows12 Online is free software licensed under the Eclipse Public License 2.0 (URL: <https://www.eclipse.org/legal/epl-2.0/>) issued by the Eclipse Foundation. Subject to compliance with this license, you are free to use the source code of this project.\n\n### Media Files\n\nThe media file content (graphic works, artistic works, audiovisual works) of Windows12 Online is published under the Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA 4.0) (except where otherwise stated); under the premise of complying with this license agreement, you are free to use the media files in this project.\n\nRelated files fall within the scope of fair use. Please note that the use of related media files carries legal risks. Please consult the provisions of copyright laws and regulations before use.\n\n### Additional Terms\n1. Anyone who uses, shares, or distributes this project must clearly include the original author information (Tan Jingyuan, tjy-gitnub) and the original project link (<https://github.com/tjy-gitnub/win12>) in the project introduction, documentation, or related materials. **You must not intentionally conceal, remove, or modify the attribution information, author information, or project links in the original project; you must not restrict others from viewing this information**.\n2. Those who use this project for commercial purposes must clearly indicate the original author and project link, and open-source all related source code under the EPL-2.0 license.\n3. Unmodified source code must not be used for commercial purposes.\n4. Anyone who uses or shares this project must not remove, hide, or restrict access to this open-source statement.\n5. If you discover that others violate any of the requirements listed in the preceding four paragraphs, please [report it to us](https://github.com/tjy-gitnub/win12/issues) in a timely manner and prevent the publication and transmission of the relevant content as promptly as possible.\n6. If you engage in infringing conduct, we will retain records in accordance with applicable laws and reserve the right to take legal action in any manner and pursue legal liability at any time (including but not limited to submitting reports to law enforcement agencies in accordance with law, filing complaints with judicial authorities, cooperating with law enforcement and judicial investigations, etc.).\n## Contribution Guidelines\n\nFor details, please see [Contribution Guide](./CONTRIBUTING.md).\n\nThis project uses the i18n library to implement multi-language support. Translation work is conducted according to the [Translation Contribution Guide](lang/readme.md).\n\n## Contributors\n\nCore developers: tjy-gitnub([Bilibili](https://space.bilibili.com/2010692096/)), NB-group([Bilibili](https://space.bilibili.com/1570243738/)), 782([Bilibili](https://space.bilibili.com/1046361194/)) (all three are middle school students)\n\nProject contributors: See [here](https://github.com/tjy-gitnub/win12/graphs/contributors) (Thank you to our excellent contributors!)\n\n## Support Us\n\nYou can donate to our [Afdian account](https://afdian.com/a/qstudio)\n\nSpecial thanks to the following sponsors:\n- CursoR_光标（<https://afdian.com/a/cursor>）\n- Baymax（<https://afdian.com/u/a131cd504dea11eeb6be5254001e7c00>）\n"
  },
  {
    "path": "readme/README_fr_fr.md",
    "content": "<p align=\"center\">\n    <img src=\"./icon/windows12.svg\" width=\"100\" height=\"100\">\n</p>\n<h1 align=\"center\">Windows 12 version Web</h1>\n<p align=\"center\" class=\"shields\">\n  <span href=\"https://github.com/tjy-gitnub/win12/issues\" style=\"text-decoration:none\">\n    <img src=\"https://img.shields.io/github/issues/tjy-gitnub/win12.svg\" alt=\"Problèmes GitHub\"/>\n  </span>\n<span href=\"https://github.com/tjy-gitnub/win12/stargazers\" style=\"text-decoration:none\">\n    <img src=\"https://img.shields.io/github/stars/tjy-gitnub/win12.svg\" alt=\"GitHub stars\"/>\n  </span>\n  <span href=\"https://github.com/tjy-gitnub/win12/network\" style=\"text-decoration:none\">\n<img src=\"https://img.shields.io/github/forks/tjy-gitnub/win12.svg\" alt=\"Fourches GitHub\"/>\n  </span>\n</p>\n<p align=\"center\" class=\"language\" title=\"Sélection de la langue 语言选择\">\n<a href=\"readme/README_en_us.md\">English</a> | \n  <b>简体中文</b> | \n  <a href=\"readme/README_fr_fr.md\">Français</a>|\n  <a href=\"readme/README_zh_tw.md\">繁體中文</a>\n</p>\n<details align=\"center\">\n  <summary>Historique des étoiles</summary>\n  <a href=\"https://star-history.com/#tjy-gitnub/win12&Date\" style=\"text-decoration:none\">\n<img src=\"https://api.star-history.com/svg?repos=tjy-gitnub/win12&type=Date\" alt=\"Star History Chart\">\n  </a>\n</details>\n\n## Table des matières\n\n- [Windows 12 version web](#windows-12-网页版)\n  - [Avant-propos](#前言)\n  - [Expérience en ligne](#在线体验)\n  - [Démonstration des effets](#效果展示)\n- [Planification à venir](#前景规划)\n  - [Déclaration d'ouverture](#开源声明)\n  - [Instructions pour contribuer](#贡献须知)\n  - [Contributeurs](#贡献者)\n- [资助我们](#资助我们)\n    \n\n    \n\n## Avant-propos\n\nIl y a longtemps, après avoir vu la version conceptuelle de Windows 12 (Powered by PowerPoint), tjy-gitnub a été profondément inspiré et a décidé de créer une version web de Windows 12, à l'instar de [Windows 11 网页版](https://win11.blueedge.me/). Elle présente un design d'interface élégant, des animations fluides et riches, ainsi que diverses fonctionnalités avancées.\n\nC'est ainsi que ce projet est né (oui, la naissance de ce projet a été aussi soudaine).\n\n> L'adaptation pour mobile n'est pas encore très aboutie, utilisez la version bureau du site pour dépanner `>v-)o`\n\n## Expérience en ligne\n\nCliquez [ici](tjy-gitnub.github.io/win12/desktop.html) pour essayer.\n\n\n## Présentation des résultats\n\nLa nouvelle version comporte de nombreux changements, à titre indicatif seulement ; veuillez vous référer à l’objet réel (cliquez [ici](https://tjy-gitnub.github.io/win12/desktop.html) et vous verrez, ce n’est pas compliqué `-_-)o`)\n\n![image](https://tjy-gitnub.github.io/win12/img/start-menu.png)\n\n*Menu Démarrer*\n\n![image](https://tjy-gitnub.github.io/win12/img/colorful-apps.png)\n\n*Applications riches*\n\n![image](https://tjy-gitnub.github.io/win12/img/dark-mode.png)\n\n*Mode sombre*\n\n![image](https://tjy-gitnub.github.io/win12/img/ai-copilot.png)\n*AI Copilot([实现方法](./scripts/AI%20Copilot%20service/README.md))*\n## Planification future\n\nConcernant la feuille de route de ce projet :\n\n- [x] Fonctionnalités de base et application\n- [x] Optimisation globale de l'apparence\n- [x] Ajout d'effets spéciaux\n- [x] Fonctionnalités de la fenêtre\n- [x] Application améliorée\n- [x] Ajouter plus d'options de personnalisation\n- [x] Ajouter l'application Edge\n- [ ] Ajouter des onglets pour plus d'applications\n- [x] Améliorer les widgets, ajouter la fonctionnalité d'intégration au bureau\n- [x] Fond d'écran dynamique\n- [ ] Plus de personnalisation de la barre des tâches\n- [ ] Enrichir l'écosystème d'applications, ajouter Microsoft Store\n- [ ] Améliorer les Paramètres et Windows Update\n\nVoici quelques... euh... rêvasseries `~o~)/` :\n\n- [x] Établir un système de fichiers\n- [ ] Mettre en place son propre mécanisme d'exécutables\n- [ ] Convertir et exécuter des fichiers .exe\n- [ ] Fournir plus d'API pour les appels par les applications\n- [x] Intégrer un moteur de navigateur, devenir une application\n- [ ] Renommer le projet en \"Windows 12\"\n- [ ] Emballer dans le système Windows\n- [ ] Définir ce programme comme lanceur de cette application\n- [ ] Supprimer les fonctions système superflues et les encapsuler en un système d'exploitation indépendant\n- [ ] Renommer le projet en \"Doswin 1.0\"\n- [ ] Adapter aux ordinateurs quantiques\n- [x] Intégrer ChatGPT\n- [ ] Renommer le projet en \"550W\"\n\n## Déclaration open source\n>[!TIP]\nQuelle que soit la manière dont vous utilisez ce projet, vous déclarez avoir lu attentivement et accepté de vous conformer à l’intégralité des dispositions de ce chapitre.\n\nLe contenu de la version Web de Windows12 est mis à la disposition du public sous une licence de droit d’auteur relativement permissive.\n\n### Code source des programmes informatiques\nWndows12 网页版 est un logiciel libre, distribué sous la licence Eclipse Public License 2.0 de la Fondation Eclipse (URL : <https://www.eclipse.org/legal/epl-2.0/>). Dans le respect de cette licence, vous êtes libre d’utiliser le code source de ce projet.\n\n### Fichiers multimédias\n\nLes fichiers multimédias de la version Web de Windows12 (œuvres graphiques, œuvres d'art, œuvres audiovisuelles) sont publiés sous licence Creative Commons Attribution-Partage dans les Mêmes Conditions 4.0 International (CC BY-SA 4.0) (sauf indications contraires) ; sous réserve du respect de cette licence, vous pouvez utiliser librement les fichiers multimédias de ce projet.\n\nLes fichiers concernés relèvent de l'utilisation raisonnable ; il convient de noter qu'il existe des risques juridiques liés à l'utilisation de certains fichiers multimédias. Veuillez consulter les lois et règlements sur le droit d'auteur avant utilisation.\n\n### Conditions supplémentaires\n1. Toute personne utilisant, partageant ou distribuant ce projet doit mentionner clairement les informations de l'auteur original (谭景元, tjy-gitnub) et le lien du projet original (<https://github.com/tjy-gitnub/win12>) dans la présentation du projet, la documentation ou les documents connexes. Vous ne devez pas dissimuler, supprimer ou modifier délibérément les informations de signature, les informations d'auteur ou le lien du projet dans le projet original ; vous ne devez pas restreindre l'accès de tiers à ces informations.\n2. Toute personne utilisant ce projet à des fins commerciales doit indiquer l'auteur original et le lien du projet, et publier en open source la totalité du code source concerné sous la licence EPL-2.0.\n3. Le code source non modifié ne peut pas être utilisé à des fins commerciales.\n4. Toute personne utilisant ou partageant ce projet ne doit pas retirer, cacher ou restreindre l'accès à cette déclaration open source.\n5. Si vous découvrez qu'une autre personne enfreint l'une quelconque des exigences énoncées dans les quatre alinéas précédents, veuillez-nous en [signaler](https://github.com/tjy-gitnub/win12/issues) immédiatement et, dans la mesure du possible, empêcher promptement la publication et la diffusion des contenus concernés.\n6. Si vous commettez un acte de contrefaçon, nous conserverons des enregistrements conformément aux dispositions légales et nous réservons le droit, à tout moment et par tous moyens, d'engager des actions en justice et de demander réparation (y compris, sans s'y limiter, signaler l'affaire aux organismes chargés de l'application de la loi, porter plainte devant les autorités judiciaires, collaborer aux enquêtes des autorités compétentes, etc.).\n## Instructions pour les contributions\n\nPour plus de détails, veuillez consulter le [guide de contribution](./CONTRIBUTING.md).\n\nCe projet utilise la bibliothèque i18n pour fournir la fonctionnalité multilingue; le travail de traduction suit le [guide de contribution pour les traductions](lang/readme.md).\n\n## Contributeurs\n\nDéveloppeurs principaux : tjy-gitnub([Bilibili](https://space.bilibili.com/2010692096/)), NB-group([Bilibili](https://space.bilibili.com/1570243738/)), 782([Bilibili](https://space.bilibili.com/1046361194/)) (les trois sont collégiens)\n\nContributeurs du projet : voir [ici](https://github.com/tjy-gitnub/win12/graphs/contributors) (merci à nos excellents contributeurs ! )\n\n## Soutenez-nous\n\nVous pouvez faire un don via notre [compte Afdian](https://afdian.com/a/qstudio)\n\nRemerciements particuliers aux sponsors suivants :\n- CursoR_光标（<https://afdian.com/a/cursor>）\n- Baymax（<https://afdian.com/u/a131cd504dea11eeb6be5254001e7c00>）\n"
  },
  {
    "path": "readme/README_zh_tw.md",
    "content": "<p align=\"center\">\n    <img src=\"./icon/windows12.svg\" width=\"100\" height=\"100\">\n</p>\n<h1 align=\"center\">Windows 12 網頁版</h1>\n<p align=\"center\" class=\"shields\">\n  <span href=\"https://github.com/tjy-gitnub/win12/issues\" style=\"text-decoration:none\">\n    <img src=\"https://img.shields.io/github/issues/tjy-gitnub/win12.svg\" alt=\"GitHub issues\"/>\n  </span>\n<span href=\"https://github.com/tjy-gitnub/win12/stargazers\" style=\"text-decoration:none\">\n    <img src=\"https://img.shields.io/github/stars/tjy-gitnub/win12.svg\" alt=\"GitHub stars\"/>\n  </span>\n  <span href=\"https://github.com/tjy-gitnub/win12/network\" style=\"text-decoration:none\">\n<img src=\"https://img.shields.io/github/forks/tjy-gitnub/win12.svg\" alt=\"GitHub forks\"/>\n  </span>\n</p>\n<p align=\"center\" class=\"language\" title=\"語言選擇 语言选择\">\n<a href=\"readme/README_en_us.md\">English</a> | \n<b>簡體中文</b> | \n<a href=\"readme/README_fr_fr.md\">Français</a>|\n<a href=\"readme/README_zh_tw.md\">繁體中文</a>\n</p>\n<details align=\"center\">\n  <summary>星史</summary>\n  <a href=\"https://star-history.com/#tjy-gitnub/win12&Date\" style=\"text-decoration:none\">\n<img src=\"https://api.star-history.com/svg?repos=tjy-gitnub/win12&type=Date\" alt=\"Star History Chart\">\n  </a>\n</details>\n\n## 目錄\n\n- [Windows 12 網頁版](#windows-12-網頁版)\n  - [前言](#前言)\n  - [線上體驗](#線上體驗)\n  - [效果展示](#效果展示)\n- [前景規劃](#前景規劃)\n  - [開源聲明](#開源聲明)\n  - [貢獻須知](#貢獻須知)\n  - [貢獻者](#貢獻者)\n- [資助我們](#资助我們)\n    \n\n    \n\n## 前言\n\n很久以前 tjy-gitnub 在看到 Windows 12 概念版（Powered by PowerPoint）後深受啟發，決定做一個 Windows 12 網頁版，就像 [Windows 11 網頁版](https://win11.blueedge.me/) 一樣。 它擁有精美的 UI 設計、流暢豐富的動畫，以及各種進階功能。\n\n於是就有了這個專案（是的，這個專案的誕生就是這麼突然）\n\n> 目前行動端適配還不太完善，開桌面版網站湊合著用吧 `>v-)o`\n\n## 在線體驗\n\n點擊[此處](tjy-gitnub.github.io/win12/desktop.html)即可體驗。\n\n\n## 效果展示\n\n> 新的版本有很多變化，僅供參考，請以實物為準（你點一下 [這裡](https://tjy-gitnub.github.io/win12/desktop.html) 就知道了啊，不麻煩`-_-)o` ）\n\n![image](https://tjy-gitnub.github.io/win12/img/start-menu.png)\n\n*開始功能表*\n\n![image](https://tjy-gitnub.github.io/win12/img/colorful-apps.png)\n\n*豐富的應用*\n\n![image](https://tjy-gitnub.github.io/win12/img/dark-mode.png)\n\n*深色模式*\n\n![image](https://tjy-gitnub.github.io/win12/img/ai-copilot.png)\n*AI Copilot([實作方法](./scripts/AI%20Copilot%20service/README.md))*\n## 前景規劃\n\n關於該專案的路徑規劃:\n\n- [x] 基本功能與應用\n- [x] 外觀整體優化\n- [x] 加入特效\n- [x] 視窗功能\n- [x] 應用完善\n- [x] 新增更多個人化設定選項\n- [x] 新增 Edge 應用程式\n- [ ] 為更多應用程式新增分頁\n- [x] 完善小工具，新增到桌面等功能\n- [x] 動態桌布\n- [ ] 更多工作列的自訂\n- [ ] 豐富應用生態，加入 Microsoft Store\n- [ ] 完善設定及 Windows 更新\n\n下面是一些...呃......暢..想 `~o~)/`：\n\n- [x] 建立檔案系統\n- [ ] 建立自己的可執行檔機制\n- [ ] 將 .exe 檔案轉換並執行\n- [ ] 提供更多 API 供應用調用\n- [x] 內建瀏覽器核心，成為應用\n- [ ] 將專案更名為 \"Windows 12\"\n- [ ] 封裝到 Windows 系統中\n- [ ] 將啟動程式設為此應用\n- [ ] 去除多餘系統功能，封裝成獨立的作業系統\n- [ ] 將專案更名為 \"Doswin 1.0\"\n- [ ] 適配量子電腦\n- [x] 接入 ChatGPT\n- [ ] 將專案更名為「550W」\n\n## 開源聲明\n>[!TIP]\n>無論您以何種方式使用本專案，皆表示您已仔細閱讀並同意遵守本章節的全部內容。\n\nWindows12 網頁版的內容均採用較為寬鬆的著作權許可協議授權社會大眾使用。\n\n### 計算機程式原始碼\nWndows12 網頁版是自由軟體，採用 Eclipse 基金會發佈的 Eclipse Public License 2.0 許可證（網址:<https://www.eclipse.org/legal/epl-2.0/>）進行授權。在遵守該許可證的前提下，您可以自由使用本專案的原始碼。\n\n### 媒體檔案\n\nWindows12 網頁版的媒體檔案內容（圖形作品、美術作品、視聽作品）依照知識共享 署名-相同方式共享 4.0 協議國際版（CC BY-SA 4.0）公開發表（另有聲明的部分除外）；在遵守該授權協議的前提下，您可以自由使用本專案內的媒體檔案。\n\n相關檔案屬於合理使用的範疇，但使用相關媒體檔案可能存在法律風險，請在使用前查閱著作權相關法律法規之規定。\n\n### 附加條款\n1. 任何使用、分享或分發本專案者，必須在專案介紹、文件或相關材料中明確附上原作者資訊（譚景元，tjy-gitnub）及原專案連結（<https://github.com/tjy-gitnub/win12>）。**您不得故意隱瞞、移除或修改原專案中的署名資訊、作者資訊或專案連結等；不得限制他人查看這些資訊**。\n2. 將本專案用於商業用途者，必須標明原作者及專案連結，並以 EPL-2.0 協議開源全部相關原始碼。\n3. 未經修改的原始碼不得用於商業用途。\n4. 任何使用或分享本專案者，不得移除、隱藏或限制查看本開源聲明。\n5. 您在發現他人違反前四款所列各項要求時，請及時[向我們回報](https://github.com/tjy-gitnub/win12/issues)，並盡可能及時制止相關內容的發布與傳輸。\n6. 若您實施侵權行為，我們將根據法律規定保留記錄，且保留在任何時間以一切方式採取法律行動、追究法律責任的權利（包括但不限於依法向執法機關提交報告、向司法機關提出控告、配合執法機關和司法機關調查等）。\n## 貢獻須知\n\n詳情請見 [貢獻指南](./CONTRIBUTING.md)。\n\n本專案使用 i18n 函式庫實現多語言，翻譯工作依據[翻譯貢獻指南](lang/readme.md)進行。\n\n## 貢獻者\n\n核心開發者: tjy-gitnub([Bilibili](https://space.bilibili.com/2010692096/))，NB-group([Bilibili](https://space.bilibili.com/1570243738/))，782([Bilibili](https://space.bilibili.com/1046361194/))（三人均為國中生）\n\n專案貢獻者:詳見[此處](https://github.com/tjy-gitnub/win12/graphs/contributors)（感謝我們出色的貢獻者！）\n\n## 贊助我們\n\n您可以透過我們的[愛發電帳戶](https://afdian.com/a/qstudio)捐款\n\n特別感謝以下贊助者：\n- CursoR_光標（<https://afdian.com/a/cursor>）\n- Baymax（<https://afdian.com/u/a131cd504dea11eeb6be5254001e7c00>）\n"
  },
  {
    "path": "reload.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh\"> <!-- 优化：添加 lang 属性以指定页面语言为中文 -->\n<head>\n    <meta charset=\"UTF-8\"> <!-- 优化：指定字符集为UTF-8 -->\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"> <!-- 优化：添加 viewport meta 标签 -->\n    <title>Win12 - 重启中</title> <!-- 优化：修改页面标题以包含关键词 -->\n    <meta name=\"description\" content=\"Win12正在重启，请稍候...\"> <!-- 优化：修正 meta 描述内容 -->\n    <style>\n        body {\n            background: linear-gradient(130deg, #ad6ecaee, #3b91d8ee);\n            margin: 0; /* 优化：添加 margin 样式，确保页面外边距为0 */\n        }\n\n        loading>svg>circle:first-child {\n            stroke: #fff;\n            fill: none;\n            stroke-width: 2px;\n            stroke-linecap: round;\n            animation: spin-infinite 1.8s linear 0s infinite normal none running;\n            transform-origin: 50% 50%;\n            transition: all .2s ease-in-out 0s;\n        }\n\n        loading>svg>circle:last-child {\n            fill: transparent; /* 优化：将填充颜色设置为透明 */\n        }\n\n        loading>svg {\n            background-color: transparent; /* 优化：将背景颜色设置为透明 */\n            border-radius: 50%;\n        }\n\n        @keyframes spin-infinite {\n            0% {\n                stroke-dasharray: 0.01px, 43.97px;\n                transform: rotate(0deg);\n            }\n\n            50% {\n                stroke-dasharray: 21.99px, 21.99px;\n                transform: rotate(450deg);\n            }\n\n            to {\n                stroke-dasharray: 0.01px, 43.97px;\n                transform: rotate(3turn);\n            }\n        }\n    </style>\n    <meta http-equiv=\"refresh\" content=\"5;boot.html\">\n</head>\n<body onload=\"initReboot()\"> <!-- 优化：将JavaScript函数添加到 onload 事件中 -->\n    <div id=\"backdrop\" style=\"transition: 1.5s; backdrop-filter: blur(30px); width: 100%; height: 100%; position: absolute; top: 0; left: 0; background-color: rgba(111, 111, 111, 0.5); opacity: 0;\"></div> <!-- 优化：修改背景颜色，添加透明度 -->\n    <loading id=\"ld\" style=\"transition: 2s; opacity: 0;\">\n        <svg style=\"position: absolute; left: calc(50% - 25px); top: calc(50% - 35px); width: 50px; height: 50px;\" width=\"50px\" height=\"50px\" viewBox=\"0 0 16 16\">\n            <circle cx=\"8\" cy=\"8\" r=\"7\"></circle> <!-- 优化：修改SVG元素 -->\n            <circle cx=\"8\" cy=\"8\" r=\"6\"></circle> <!-- 优化：修改SVG元素 -->\n        </svg>\n    </loading>\n    <p id=\"ldt\" style=\"transition: 1.5s; opacity: 0; width: 100px; left: calc(50% - 50px); text-align: center; position: absolute; top: calc(50% + 5px); color: #fff; font-size: 20px;\">\n        正在重启\n    </p>\n    <script>\n        function initReboot() {\n            document.getElementById('backdrop').style.opacity = 1;\n            document.getElementById('ld').style.opacity = 1;\n            document.getElementById('ldt').style.opacity = 1;\n            setTimeout(() => {\n                document.getElementById('backdrop').style.display = 'none';\n                document.getElementById('ld').style.display = 'none';\n                document.getElementById('ldt').style.display = 'none';\n            }, 3000);\n        }\n    </script>\n</body>\n</html>"
  },
  {
    "path": "robots.txt",
    "content": "User-agent: *\n\n# 若想要让搜索引擎爬取以下目录，请注释掉相应的索引规则\n\n# 外部数据文件：不允许搜索引擎爬取外部数据文件，以保护敏感数据\nDisallow: /data/ # 阻止搜索引擎访问外部数据文件\n\n# 应用程序：不允许搜索引擎爬取应用程序相关的内容\nDisallow: /apps/ #\n\nDisallow: /pwa/ # 阻止搜索引擎访问PWA相关内容\n\n# JavaScript文件：不允许搜索引擎爬取JavaScript文件\nDisallow: /scripts/ # 阻止搜索引擎访问JavaScript文件\n\n# 字体文件：不允许搜索引擎爬取字体文件\nDisallow: /fonts/ # 阻止搜索引擎访问字体文件\n\n# 图像文件：不允许搜索引擎爬取图标文件\nDisallow: /icon/ # 阻止搜索引擎访问图标文件\n\n# 图片文件：不允许搜索引擎爬取图片文件\nDisallow: /img/ # 阻止搜索引擎访问图片文件\n\n# 音频文件：不允许搜索引擎爬取音频文件\nDisallow: /media/ # 阻止搜索引擎访问音频文件"
  },
  {
    "path": "scripts/AI Copilot service/README.md",
    "content": "# AI Copilot 介绍\n本AI由云智API提供支持，文档来自 github@tangyuan0821\n\n原文档由github@NB-Group提供，可查看其在互联网档案馆的[存档](https://web.archive.org/web/20251115175835/https://github.com/tjy-gitnub/win12/blob/main/scripts/AI%20Copilot%20service/README.md)\n## 介绍\nAI Copilot 是一个基于 Qwen3-max 的文本生成工具，可以生成文本.本 AI 由云智API（[yunzhiapi.cn](https://www.yunzhiapi.cn)）提供支持，其接受来自前端页面的请求，并返回生成文本。\n\n## 问题反馈\n如在使用过程中出现问题可以通过[issues](https://github.com/tjy-gitnub/win12/issues)提交反馈\n"
  },
  {
    "path": "scripts/Lunar.js",
    "content": "//农历获取实现 By @stxttkx\n// 由 lingbopro 改良\n\nlet lunarCache = null;\nlet lunarCachePromise = null;\nasync function getLunar() {\n    let lunarDisplay = document.getElementById('lunar');\n\n    // 缓存验证\n    if (lunarCache?.data?.AD) {\n        const now = new Date();\n        const nowAD = new RegExp(`${now.getFullYear()}年0?${now.getMonth() + 1}月0?${now.getDate()}日`, 'g');\n        if (!lunarCache.data.AD.match(nowAD)) {\n            lunarCache = null;\n        }\n    }\n\n    // 如果没有缓存且当前没有进行中的请求，则发起新的请求\n    if (!lunarCache && !lunarCachePromise) {\n        lunarCachePromise = (async () => {\n            try {\n                const response = await fetch('https://api.lolimi.cn/API/rl/api');\n                if (!response.ok) {\n                    // 你是怎么想出来往开发控制台打印这种东西的。。。\n                    // throw new Error('网络不给力');\n                    throw new Error('HTTP 状态码不符合预期: ' + response.status);\n                }\n                const jsonContent = await response.json();\n                if (jsonContent.code !== 1) {\n                    throw new Error(`服务器异常，错误码: ${jsonContent.code}`);\n                }\n                if (typeof jsonContent?.data?.lunar !== 'string') {\n                    throw new Error('服务器返回数据格式异常');\n                }\n                lunarCache = jsonContent;\n                return lunarCache;\n            } catch (error) {\n                lunarDisplay.textContent = '';\n                console.error('获取农历信息失败: ', error);\n                throw error;\n            } finally {\n                // 请求结束后，无论成功与否，都清除进行中的 Promise 标记\n                lunarCachePromise = null;\n            }\n        })();\n    }\n    // 如果有进行中的请求但还没有缓存，等待请求完成\n    if (!lunarCache && lunarCachePromise) {\n        await lunarCachePromise;\n    }\n\n    if (lunarCache?.data?.lunar) {\n        const lunarContent = lunarCache.data.lunar;\n        lunarDisplay.textContent = lunarContent;\n    }\n}\n"
  },
  {
    "path": "scripts/bios_kernel.js",
    "content": "function addZero(i) {\n    return i < 10 ? `0${i}` : i;\n}\n\nfunction timeChange() {\n    const d = new Date();\n    $('#time')[0].innerText = `[${addZero(d.getHours())}:${addZero(d.getMinutes())}:${addZero(d.getSeconds())}]`;\n    $('#date')[0].innerText = `[${d.getDate()}/${d.getMonth() + 1}/${d.getFullYear()}]`;\n}\n\nfunction toBoot() {\n    setTimeout(() => {\n        $('#body').html('');\n        $('#body').css('cssText', 'background-color: black;');\n    }, 500);\n    setTimeout(() => {\n        location.href = './boot.html';\n    }, 1000);\n}\n\nfunction BIOS_confirm(tit, func) {\n    $('#confirm-tit')[0].innerText = tit;\n    $('#confirmContainer').css('display', 'flex');\n    $('#confirm').attr('data-show', 'true');\n    $('#confirm>.btns>*:first-child').attr('click', func);\n    $('#confirm>.btns>*:first-child').attr('ontouchstart', func);\n}\n\nfunction changePage(t) {\n    $('.tab.show').removeClass('show');\n    $('.tab.foc').removeClass('foc');\n    $(`.tab${t}`).addClass('show');\n    $(`.tab${t}`).addClass('foc');\n    $('.page.show').removeClass('show');\n    $(`.page${t}`).addClass('show');\n    tab = t;\n}\n\nlet tab = 0;\nlet btn = 0;\nlet foc = 0;\nlet tab_back = tab;\nlet btn_back = btn;\nlet foc_back = foc;\nlet subFoc = -1;\n\ntimeChange();\n\n// Add configuration state\nconst biosConfig = {\n    cpuHyperThreading: true,\n    cpuTurboBoost: true,\n    cpuCoreRatio: 'Auto',\n    memoryFrequency: 'Auto',\n    memoryTimingMode: 'Auto',\n    xmpProfile: false,\n    fastBoot: true,\n    bootMode: 'UEFI',\n    secureBoot: true,\n    tpmState: true\n};\n\nfunction toggleOption(optionElement) {\n    const currentValue = optionElement.innerText;\n    if (currentValue.includes('Enabled')) {\n        optionElement.innerText = '[Disabled]';\n        return false;\n    }\n    if (currentValue.includes('Disabled')) {\n        optionElement.innerText = '[Enabled]';\n        return true;\n    }\n    if (currentValue.includes('Auto')) {\n        optionElement.innerText = '[Manual]';\n        return 'Manual';\n    }\n    if (currentValue.includes('Manual')) {\n        optionElement.innerText = '[Auto]';\n        return 'Auto';\n    }\n    return currentValue;\n}\n\nfunction handleExitOption(option) {\n    const action = $(option).attr('click');\n    if (action.includes('toBoot()')) {\n        toBoot();\n    } else if (action.includes('BIOS_confirm')) {\n        const match = action.match(/BIOS_confirm\\('([^']+)',\\s*'([^']+)'\\)/);\n        if (match) {\n            const [_, message, callback] = match;\n            BIOS_confirm(message, callback);\n        }\n    }\n}\n\nfunction updateFocus() {\n    // Clear all focus states first\n    $('.option').css('background-color', '#aaaaaa');\n    $('.option').css('color', '#0100a2');\n    $('.exit').css('color', '#0100a2');\n    \n    const currentPage = $(`.page${tab}`);\n    \n    if (tab === tabs.length - 1) { // Exit page\n        const exitOptions = currentPage.find('.exit');\n        if (foc > 0 && foc <= exitOptions.length) {\n            $(exitOptions[foc - 1]).css('color', '#ffffff');\n        }\n    } else { // Other pages\n        const options = currentPage.find('.option');\n        if (foc > 0 && options.length > 0) {\n            const focusedOption = options[Math.min(foc - 1, options.length - 1)];\n            if (focusedOption) {\n                $(focusedOption).css('background-color', '#0100a2');\n                $(focusedOption).css('color', '#ffffff');\n            }\n        }\n    }\n}\n\n// Update tabs array\nconst tabs = ['main', 'advanced', 'boot', 'security', 'exit'];\n\nchangePage(0);\ndocument.oncontextmenu = () => false;\n\nwindow.onkeydown = (evt) => {\n    const event = evt || window.event;\n    \n    if ($('#confirm').attr('data-show') !== 'true') {\n        if (event.keyCode === 9) { // Tab\n            event.preventDefault();\n            tab = (tab + 1) % tabs.length;\n            foc = 0;\n            changePage(tab);\n        }\n        else if (event.keyCode === 121) { // F10\n            toBoot();\n        }\n        else if (event.keyCode === 39) { // Right\n            event.preventDefault();\n            if (tab < tabs.length - 1) {\n                tab++;\n                foc = 0;\n                changePage(tab);\n            }\n        }\n        else if (event.keyCode === 37) { // Left\n            event.preventDefault();\n            if (tab > 0) {\n                tab--;\n                foc = 0;\n                changePage(tab);\n            }\n        }\n        else if (event.keyCode === 40) { // Down\n            event.preventDefault();\n            const currentPage = $(`.page${tab}`);\n            if (tab === tabs.length - 1) { // Exit page\n                const exitOptions = currentPage.find('.exit');\n                if (exitOptions.length > 0) {\n                    foc = Math.min(foc + 1, exitOptions.length);\n                    updateFocus();\n                }\n            } else {\n                const options = currentPage.find('.option');\n                if (options.length > 0) {\n                    foc = Math.min(foc + 1, options.length);\n                    updateFocus();\n                }\n            }\n        }\n        else if (event.keyCode === 38) { // Up\n            event.preventDefault();\n            if (foc > 0) {\n                foc--;\n                updateFocus();\n            }\n        }\n        else if (event.keyCode === 13) { // Enter\n            const currentPage = $(`.page${tab}`);\n            if (tab === tabs.length - 1) { // Exit page\n                const exitOptions = currentPage.find('.exit');\n                if (foc > 0 && foc <= exitOptions.length) {\n                    const focusedOption = exitOptions[foc - 1];\n                    handleExitOption(focusedOption);\n                }\n            } else {\n                const options = currentPage.find('.option');\n                if (foc > 0 && foc <= options.length) {\n                    const focusedOption = options[foc - 1];\n                    const newValue = toggleOption(focusedOption);\n                    const optionId = $(focusedOption).attr('data-option');\n                    if (optionId) {\n                        biosConfig[optionId] = newValue;\n                    }\n                }\n            }\n        }\n    } else {\n        // Confirm dialog navigation\n        if (event.keyCode === 39 || event.keyCode === 37) { // Right/Left\n            event.preventDefault();\n            btn = btn ? 0 : 1;\n            if (btn) {\n                $('#cancel-btn').css('cssText', 'background-color: #000; color: #fff;');\n                $('#ok-btn').css('cssText', 'color: #000; background-color: #fff;');\n            } else {\n                $('#ok-btn').css('cssText', 'background-color: #000;color: #fff;');\n                $('#cancel-btn').css('cssText', 'color: #000;background-color: #fff;');\n            }\n        }\n        else if (event.keyCode === 13) { // Enter\n            event.preventDefault();\n            if (btn) {\n                $('#confirmContainer').css('display', 'none');\n                $('#confirm').attr('data-show', 'false');\n            } else {\n                toBoot();\n            }\n            btn = 0;\n            $('#ok-btn').css('cssText', 'background-color: #000;color: #fff;');\n            $('#cancel-btn').css('cssText', 'color: #000;background-color: #fff;');\n        }\n    }\n};\n\n// Add click handlers for options\nfor (const option of document.querySelectorAll('.option')) {\n    option.addEventListener('click', function() {\n        const newValue = toggleOption(this);\n        const optionId = this.getAttribute('data-option');\n        if (optionId) {\n            biosConfig[optionId] = newValue;\n        }\n    });\n}"
  },
  {
    "path": "scripts/boot_kernel.js",
    "content": "function setProgress(n) {\n    $('#load').css('width', `${(400 / 20 * n)}px`);\n    $('#back').css('width', `${(400 / 20 * (20 - n))}px`);\n}\nsetProgress(0);\nlet i = 0;\nconst progress = [0, 0, 1, 3, 7, 17, 20];\nconst timer = setInterval(() => {\n    setProgress(progress[i]);\n    i++;\n    if (i >= progress.length) {\n        if (timer !== undefined) {\n            clearInterval(timer);\n        }\n        window.location.href = './desktop.html';\n    }\n}, 300);\n\nfunction toBIOS() {\n    if (timer !== undefined) {\n        clearInterval(timer);\n    }\n    setTimeout(() => {\n        $('body').html('');\n        $('body').css('cssText', 'background-color: black;');\n    }, 500);\n    setTimeout(() => {\n        window.location.href = './bios.html';\n    }, 1000);\n}\n\nwindow.onkeydown = (event) => {\n    if (event.keyCode === 113 || event.key === 'F2') {\n        toBIOS();\n    }\n};\n\nwindow.ontouchstart = toBIOS;\ndocument.oncontextmenu = () => false;\n"
  },
  {
    "path": "scripts/calculator_kernel.js",
    "content": "class Calculator {\n    constructor(input, container) {\n        this.elt = input;\n        this.num1 = null;\n        this.num2 = null;\n        this.keysContainer = container;\n        this.operator = 0;\n        this.preview = false;\n    }\n\n    get_num() {\n        return Big($(this.elt)[0].value);\n    }\n\n    number_key(key) {\n        // key:按下的数字键，int\n        // id:显示区的id\n        console.log($(this.elt)[0],$(this.elt)[0].value);\n        if ($(this.elt)[0].value == '0' || this.preview) {\n            $(this.elt)[0].value = '';\n            this.preview = false;\n        }\n        $(this.elt)[0].value += key;\n        this.uncheck();\n    }\n\n    func_key(key) {\n        // key:按下的功能键，int,加1，减2，乘3，除4\n        if (!this.isCheck()) {\n            if (this.num1 != null) {\n                this.num2 = Big($(this.elt)[0].value);\n                this.num1 = Big(this._calc(this.num1, this.num2, this.operator));\n                $(this.elt)[0].value = this.num1;\n                this.preview = true;\n            }\n            else {\n                this.num1 = Big($(this.elt)[0].value);\n                $(this.elt)[0].value = this.num1;\n                this.preview = true;\n            }\n        }\n        this.operator = key;\n\n    }\n\n    check(elt) {\n        this.uncheck();\n        elt.classList.add('checked');\n    }\n\n    uncheck() {\n        for (const elt of $(this.keysContainer)[0].children) {\n            elt.classList.remove('checked');\n        }\n    }\n\n    isCheck() {\n        for (const elt of $(this.keysContainer)[0].children) {\n            if (elt.classList.contains('checked')) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    point() {\n        if ($(this.elt)[0].value == '') {\n            $(this.elt)[0].value = '0';\n        }\n        if (!($(this.elt)[0].value.includes('.'))) {\n            $(this.elt)[0].value += '.';\n        }\n    }\n\n    square() {\n        $(this.elt)[0].value = Math.pow(Number(this.get_num().toString()), 2);\n    }\n\n    squareRoot() {\n        $(this.elt)[0].value = Math.sqrt(Number(this.get_num().toString()));\n    }\n\n    backspace() {\n        if ($(this.elt)[0].value.length > 0) {\n            $(this.elt)[0].value = $(this.elt)[0].value.substring(0, $(this.elt)[0].value.length - 1);\n        }\n        if ($(this.elt)[0].value == '') {\n            $(this.elt)[0].value = '0';\n        }\n    }\n\n\n    clear_num() {\n        $(this.elt)[0].value = '0';\n        this.num1 = null, this.num2 = null, this.operator = 0;\n        this.uncheck();\n    }\n\n    eq() {\n        this.uncheck();\n        if (this.operator == 0) {\n            return true;\n        }\n        this.num2 = Big($(this.elt)[0].value);\n        var num = this._calc(this.num1, this.num2, this.operator);\n        this.clear_num();\n        if (num != null) {\n            $(this.elt)[0].value = num;\n            return true;\n        }\n        return false;\n    }\n\n    _calc(n1, n2, c) {\n        switch (c) {\n        case 1:\n            return n1.plus(n2).toString();\n        case 2:\n            return n1.minus(n2).toString();\n        case 3:\n            return n1.times(n2).toString();\n        case 4:\n            return (n2 != 0) ? this.num1.div(this.num2).toString() : null;\n        }\n    }\n}\n\nvar widgetCalculator = new Calculator('#calc-input-widgets', '#widgets .calc>.content');\nvar appCalculator = new Calculator('#calc-input', '#win-calc>.keyb');\n"
  },
  {
    "path": "scripts/jquery.i18n.properties.js",
    "content": "/******************************************************************************\n * jquery.i18n.properties\n *\n * Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and\n * MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.\n *\n * @version     1.2.7\n * @url         https://github.com/jquery-i18n-properties/jquery-i18n-properties\n * @inspiration Localisation assistance for jQuery (http://keith-wood.name/localisation.html)\n *              by Keith Wood (kbwood{at}iinet.com.au) June 2007\n *\n *****************************************************************************/\n\n(function ($) {\n\n    $.i18n = {};\n\n    /**\n     * Map holding bundle keys if mode is 'map' or 'both'. Values of this can also be an\n     * Object, in which case the key is a namespace.\n     */\n    $.i18n.map = {};\n\n    var debug = function (message) {\n        window.console && console.log('i18n::' + message);\n    };\n\n    /**\n     * Load and parse message bundle files (.properties),\n     * making bundles keys available as javascript variables.\n     *\n     * i18n files are named <name>.js, or <name>_<language>.js or <name>_<language>_<country>.js\n     * Where:\n     *      The <language> argument is a valid ISO Language Code. These codes are the lower-case,\n     *      two-letter codes as defined by ISO-639. You can find a full list of these codes at a\n     *      number of sites, such as: http://www.loc.gov/standards/iso639-2/englangn.html\n     *      The <country> argument is a valid ISO Country Code. These codes are the upper-case,\n     *      two-letter codes as defined by ISO-3166. You can find a full list of these codes at a\n     *      number of sites, such as: http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html\n     *\n     * Sample usage for a bundles/Messages.properties bundle:\n     * $.i18n.properties({\n     *      name:      'Messages',\n     *      language:  'en_US',\n     *      path:      'bundles'\n     * });\n     * @param  name      (string/string[], optional) names of file to load (eg, 'Messages' or ['Msg1','Msg2']). Defaults to \"Messages\"\n     * @param  language    (string, optional) language/country code (eg, 'en', 'en_US', 'pt_BR'). if not specified, language reported by the browser will be used instead.\n     * @param  path      (string, optional) path of directory that contains file to load\n     * @param  mode      (string, optional) whether bundles keys are available as JavaScript variables/functions or as a map (eg, 'vars' or 'map')\n     * @param  debug     (boolean, optional) whether debug statements are logged at the console\n     * @param  cache        (boolean, optional) whether bundles should be cached by the browser, or forcibly reloaded on each page load. Defaults to false (i.e. forcibly reloaded)\n     * @param  encoding  (string, optional) the encoding to request for bundles. Property file resource bundles are specified to be in ISO-8859-1 format. Defaults to UTF-8 for backward compatibility.\n     * @param  callback     (function, optional) callback function to be called after script is terminated\n     */\n    $.i18n.properties = function (settings) {\n\n        var defaults = {\n            name: 'Messages',\n            language: '',\n            path: '',\n            namespace: null,\n            mode: 'vars',\n            cache: false,\n            debug: false,\n            encoding: 'UTF-8',\n            async: false,\n            callback: null\n        };\n\n        settings = $.extend(defaults, settings);\n\n        if (settings.namespace && typeof settings.namespace == 'string') {\n            // A namespace has been supplied, initialise it.\n            if (settings.namespace.match(/^[a-z]*$/)) {\n                $.i18n.map[settings.namespace] = {};\n            } else {\n                debug('Namespaces can only be lower case letters, a - z');\n                settings.namespace = null;\n            }\n        }\n\n        // Ensure a trailing slash on the path\n        if (!settings.path.match(/\\/$/)) settings.path += '/';\n\n        // Try to ensure that we have at a least a two letter language code\n        settings.language = this.normaliseLanguageCode(settings);\n\n        // Ensure an array\n        var files = (settings.name && settings.name.constructor === Array) ? settings.name : [settings.name];\n\n        // A locale is at least a language code which means at least two files per name. If\n        // we also have a country code, thats an extra file per name.\n        settings.totalFiles = (files.length * 2) + ((settings.language.length >= 5) ? files.length : 0);\n        if (settings.debug) {\n            debug('totalFiles: ' + settings.totalFiles);\n        }\n\n        settings.filesLoaded = 0;\n\n        files.forEach(function (file) {\n\n            var defaultFileName, shortFileName, longFileName, fileNames;\n            // 1. load base (eg, Messages.properties)\n            defaultFileName = settings.path + file + '.properties';\n            // 2. with language code (eg, Messages_pt.properties)\n            var shortCode = settings.language.substring(0, 2);\n            shortFileName = settings.path + file + '_' + shortCode + '.properties';\n            // 3. with language code and country code (eg, Messages_pt_BR.properties)\n            if (settings.language.length >= 5) {\n                var longCode = settings.language.substring(0, 5);\n                longFileName = settings.path + file + '_' + longCode + '.properties';\n                fileNames = [defaultFileName, shortFileName, longFileName];\n            } else {\n                fileNames = [defaultFileName, shortFileName];\n            }\n            loadAndParseFiles(fileNames, settings);\n        });\n\n        // call callback\n        if (settings.callback && !settings.async) {\n            settings.callback();\n        }\n    }; // properties\n\n    /**\n     * When configured with mode: 'map', allows access to bundle values by specifying its key.\n     * Eg, jQuery.i18n.prop('com.company.bundles.menu_add')\n     */\n    $.i18n.prop = function (key /* Add parameters as function arguments as necessary  */) {\n\n        var args = [].slice.call(arguments);\n\n        var phvList, namespace;\n        if (args.length == 2) {\n            if ($.isArray(args[1])) {\n                // An array was passed as the second parameter, so assume it is the list of place holder values.\n                phvList = args[1];\n            } else if (typeof args[1] === 'object') {\n                // Second argument is an options object {namespace: 'mynamespace', replacements: ['egg', 'nog']}\n                namespace = args[1].namespace;\n                var replacements = args[1].replacements;\n                args.splice(-1, 1);\n                if (replacements) {\n                    Array.prototype.push.apply(args, replacements);\n                }\n            }\n        }\n\n        var value = (namespace) ? $.i18n.map[namespace][key] : $.i18n.map[key];\n        if (value === null || value === undefined) {\n            return '[' + ((namespace) ? namespace + '#' + key : key) + ']';\n        }\n\n        // Place holder replacement\n        /**\n        * Tested with:\n        *   test.t1=asdf ''{0}''\n        *   test.t2=asdf '{0}' '{1}'{1}'zxcv\n        *   test.t3=This is \\\"a quote\" 'a''{0}''s'd{fgh{ij'\n        *   test.t4=\"'''{'0}''\" {0}{a}\n        *   test.t5=\"'''{0}'''\" {1}\n        *   test.t6=a {1} b {0} c\n        *   test.t7=a 'quoted \\\\ s\\ttringy' \\t\\t x\n        *\n        * Produces:\n        *   test.t1, p1 ==> asdf 'p1'\n        *   test.t2, p1 ==> asdf {0} {1}{1}zxcv\n        *   test.t3, p1 ==> This is \"a quote\" a'{0}'sd{fgh{ij\n        *   test.t4, p1 ==> \"'{0}'\" p1{a}\n        *   test.t5, p1 ==> \"'{0}'\" {1}\n        *   test.t6, p1 ==> a {1} b p1 c\n        *   test.t6, p1, p2 ==> a p2 b p1 c\n        *   test.t6, p1, p2, p3 ==> a p2 b p1 c\n        *   test.t7 ==> a quoted \\ s\ttringy \t\t x\n        */\n\n        var i;\n        if (typeof(value) == 'string') {\n            // Handle escape characters. Done separately from the tokenizing loop below because escape characters are\n            // active in quoted strings.\n            i = 0;\n            while ((i = value.indexOf('\\\\', i)) != -1) {\n                if (value.charAt(i + 1) == 't') {\n                    value = value.substring(0, i) + '\\t' + value.substring((i++) + 2); // tab\n                } else if (value.charAt(i + 1) == 'r') {\n                    value = value.substring(0, i) + '\\r' + value.substring((i++) + 2); // return\n                } else if (value.charAt(i + 1) == 'n') {\n                    value = value.substring(0, i) + '\\n' + value.substring((i++) + 2); // line feed\n                } else if (value.charAt(i + 1) == 'f') {\n                    value = value.substring(0, i) + '\\f' + value.substring((i++) + 2); // form feed\n                } else if (value.charAt(i + 1) == '\\\\') {\n                    value = value.substring(0, i) + '\\\\' + value.substring((i++) + 2); // \\\n                } else {\n                    value = value.substring(0, i) + value.substring(i + 1); // Quietly drop the character\n                }\n            }\n\n            // Lazily convert the string to a list of tokens.\n            var arr = [], j, index;\n            i = 0;\n            while (i < value.length) {\n                if (value.charAt(i) == '\\'') {\n                    // Handle quotes\n                    if (i == value.length - 1) {\n                        value = value.substring(0, i); // Silently drop the trailing quote\n                    } else if (value.charAt(i + 1) == '\\'') {\n                        value = value.substring(0, i) + value.substring(++i); // Escaped quote\n                    } else {\n                        // Quoted string\n                        j = i + 2;\n                        while ((j = value.indexOf('\\'', j)) != -1) {\n                            if (j == value.length - 1 || value.charAt(j + 1) != '\\'') {\n                                // Found start and end quotes. Remove them\n                                value = value.substring(0, i) + value.substring(i + 1, j) + value.substring(j + 1);\n                                i = j - 1;\n                                break;\n                            } else {\n                                // Found a double quote, reduce to a single quote.\n                                value = value.substring(0, j) + value.substring(++j);\n                            }\n                        }\n\n                        if (j == -1) {\n                            // There is no end quote. Drop the start quote\n                            value = value.substring(0, i) + value.substring(i + 1);\n                        }\n                    }\n                } else if (value.charAt(i) == '{') {\n                    // Beginning of an unquoted place holder.\n                    j = value.indexOf('}', i + 1);\n                    if (j == -1) {\n                        i++; // No end. Process the rest of the line. Java would throw an exception\n                    } else {\n                        // Add 1 to the index so that it aligns with the function arguments.\n                        index = parseInt(value.substring(i + 1, j));\n                        if (!isNaN(index) && index >= 0) {\n                            // Put the line thus far (if it isn't empty) into the array\n                            var s = value.substring(0, i);\n                            if (s !== \"\") {\n                                arr.push(s);\n                            }\n                            // Put the parameter reference into the array\n                            arr.push(index);\n                            // Start the processing over again starting from the rest of the line.\n                            i = 0;\n                            value = value.substring(j + 1);\n                        } else {\n                            i = j + 1; // Invalid parameter. Leave as is.\n                        }\n                    }\n                } else {\n                    i++;\n                }\n            } // while\n\n            // Put the remainder of the no-empty line into the array.\n            if (value !== \"\") {\n                arr.push(value);\n            }\n            value = arr;\n\n            // Make the array the value for the entry.\n            if (namespace) {\n                $.i18n.map[settings.namespace][key] = arr;\n            } else {\n                $.i18n.map[key] = arr;\n            }\n        }\n\n        if (value.length === 0) {\n            return \"\";\n        }\n        if (value.length == 1 && typeof(value[0]) == \"string\") {\n            return value[0];\n        }\n\n        var str = \"\";\n        for (i = 0, j = value.length; i < j; i++) {\n            if (typeof(value[i]) == \"string\") {\n                str += value[i];\n            } else if (phvList && value[i] < phvList.length) {\n                // Must be a number\n                str += phvList[value[i]];\n            } else if (!phvList && value[i] + 1 < args.length) {\n                str += args[value[i] + 1];\n            } else {\n                str += \"{\" + value[i] + \"}\";\n            }\n        }\n\n        return str;\n    };\n\n    function callbackIfComplete(settings) {\n\n        if (settings.debug) {\n            debug('callbackIfComplete()');\n            debug('totalFiles: ' + settings.totalFiles);\n            debug('filesLoaded: ' + settings.filesLoaded);\n        }\n\n        if (settings.async) {\n            if (settings.filesLoaded === settings.totalFiles) {\n                if (settings.callback) {\n                    settings.callback();\n                }\n            }\n        }\n    }\n\n    function loadAndParseFiles(fileNames, settings) {\n\n        if (settings.debug) debug('loadAndParseFiles');\n\n\t    if (fileNames !== null && fileNames.length > 0) {\n\t\t    loadAndParseFile(fileNames[0], settings, function () {\n\t\t\t    fileNames.shift();\n\t\t\t    loadAndParseFiles(fileNames,settings);\n\t\t    });\n\t    } else {\n            callbackIfComplete(settings);\n        }\n    }\n\n    /** Load and parse .properties files */\n    function loadAndParseFile(filename, settings, nextFile) {\n\n        if (settings.debug) {\n            debug('loadAndParseFile(\\'' + filename +'\\')');\n            debug('totalFiles: ' + settings.totalFiles);\n            debug('filesLoaded: ' + settings.filesLoaded);\n        }\n\n  \t    if (filename !== null && typeof filename !== 'undefined') {\n            $.ajax({\n                url: filename,\n                async: settings.async,\n                cache: settings.cache,\n                dataType: 'text',\n                success: function (data, status) {\n\n                    if (settings.debug) {\n                        debug('Succeeded in downloading ' + filename + '.');\n                        debug(data);\n                    }\n\n                    parseData(data, settings);\n                    nextFile();\n                },\n                error: function (jqXHR, textStatus, errorThrown) {\n\n                    if (settings.debug) {\n                        debug('Failed to download or parse ' + filename + '. errorThrown: ' + errorThrown);\n                    }\n                    if (jqXHR.status === 404) {\n                        settings.totalFiles -= 1;\n                    }\n                    nextFile();\n                }\n            });\n        }\n    }\n\n    /** Parse .properties files */\n    function parseData(data, settings) {\n\n        var parsed = '';\n        var lines = data.split(/\\n/);\n        var regPlaceHolder = /(\\{\\d+})/g;\n        var regRepPlaceHolder = /\\{(\\d+)}/g;\n        var unicodeRE = /(\\\\u.{4})/ig;\n        for (var i=0,j=lines.length;i<j;i++) {\n            var line = lines[i];\n\n            line = line.trim();\n            if (line.length > 0 && line.match(\"^#\") != \"#\") { // skip comments\n                var pair = line.split('=');\n                if (pair.length > 0) {\n                    /** Process key & value */\n                    var name = decodeURI(pair[0]).trim();\n                    var value = pair.length == 1 ? \"\" : pair[1];\n                    // process multi-line values\n                    while (value.search(/\\\\$/) != -1) {\n                        value = value.substring(0, value.length - 1);\n                        value += lines[++i].trimRight();\n                    }\n                    // Put values with embedded '='s back together\n                    for (var s = 2; s < pair.length; s++) {\n                        value += '=' + pair[s];\n                    }\n                    value = value.trim();\n\n                    /** Mode: bundle keys in a map */\n                    if (settings.mode == 'map' || settings.mode == 'both') {\n                        // handle unicode chars possibly left out\n                        var unicodeMatches = value.match(unicodeRE);\n                        if (unicodeMatches) {\n                            unicodeMatches.forEach(function (match) {\n                                value = value.replace(match, unescapeUnicode(match));\n                            });\n                        }\n                        // add to map\n                        if (settings.namespace) {\n                            $.i18n.map[settings.namespace][name] = value;\n                        } else {\n                            $.i18n.map[name] = value;\n                        }\n                    }\n\n                    /** Mode: bundle keys as vars/functions */\n                    if (settings.mode == 'vars' || settings.mode == 'both') {\n                        value = value.replace(/\"/g, '\\\\\"'); // escape quotation mark (\")\n\n                        // make sure namespaced key exists (eg, 'some.key')\n                        checkKeyNamespace(name);\n\n                        // value with variable substitutions\n                        if (regPlaceHolder.test(value)) {\n                            var parts = value.split(regPlaceHolder);\n                            // process function args\n                            var first = true;\n                            var fnArgs = '';\n                            var usedArgs = [];\n                            parts.forEach(function (part) {\n\n                                if (regPlaceHolder.test(part) && (usedArgs.length === 0 || usedArgs.indexOf(part) == -1)) {\n                                    if (!first) {\n                                        fnArgs += ',';\n                                    }\n                                    fnArgs += part.replace(regRepPlaceHolder, 'v$1');\n                                    usedArgs.push(part);\n                                    first = false;\n                                }\n                            });\n                            parsed += name + '=function(' + fnArgs + '){';\n                            // process function body\n                            var fnExpr = '\"' + value.replace(regRepPlaceHolder, '\"+v$1+\"') + '\"';\n                            parsed += 'return ' + fnExpr + ';' + '};';\n                            // simple value\n                        } else {\n                            parsed += name + '=\"' + value + '\";';\n                        }\n                    } // END: Mode: bundle keys as vars/functions\n                } // END: if(pair.length > 0)\n            } // END: skip comments\n        }\n        eval(parsed);\n        settings.filesLoaded += 1;\n    }\n\n    /** Make sure namespace exists (for keys with dots in name) */\n    // TODO key parts that start with numbers quietly fail. i.e. month.short.1=Jan\n    function checkKeyNamespace(key) {\n\n        var regDot = /\\./;\n        if (regDot.test(key)) {\n            var fullname = '';\n            var names = key.split(/\\./);\n            for (var i=0,j=names.length;i<j;i++) {\n                var name = names[i];\n\n                if (i > 0) {\n                    fullname += '.';\n                }\n\n                fullname += name;\n                if (eval('typeof ' + fullname + ' == \"undefined\"')) {\n                    eval(fullname + '={};');\n                }\n            }\n        }\n    }\n\n    /** Ensure language code is in the format aa_AA. */\n    $.i18n.normaliseLanguageCode = function (settings) {\n\n        var lang = settings.language;\n        if (!lang || lang.length < 2) {\n            if (settings.debug) debug('No language supplied. Pulling it from the browser ...');\n            lang = (navigator.languages && navigator.languages.length > 0) ? navigator.languages[0]\n                                        : (navigator.language || navigator.userLanguage /* IE */ || 'en');\n            if (settings.debug) debug('Language from browser: ' + lang);\n        }\n\n        lang = lang.toLowerCase();\n        lang = lang.replace(/-/,\"_\"); // some browsers report language as en-US instead of en_US\n        if (lang.length > 3) {\n            lang = lang.substring(0, 3) + lang.substring(3).toUpperCase();\n        }\n        return lang;\n    };\n\n    /** Unescape unicode chars ('\\u00e3') */\n    function unescapeUnicode(str) {\n\n        // unescape unicode codes\n        var codes = [];\n        var code = parseInt(str.substr(2), 16);\n        if (code >= 0 && code < Math.pow(2, 16)) {\n            codes.push(code);\n        }\n        // convert codes to text\n        return codes.reduce(function (acc, val) { return acc + String.fromCharCode(val); }, '');\n    }\n}) (jQuery);\n"
  },
  {
    "path": "scripts/news.js",
    "content": "/**\n * @author lingbopro\n * 在线新闻功能\n */\n\nconst wait = (duration) => new Promise((resolve) => setTimeout(resolve, duration));\n\nvar news = {\n    sources: [\n        {\n            name: '东方网',\n            description: '东方网新闻头条（使用公益API）',\n            url: 'https://tools.mgtv100.com/external/v1/toutiao/index',\n            async getData() {\n                try {\n                    const response = await fetch(this.url);\n                    const data = await response.json();\n                    if (!(data.status === 'success' && data.code === 200)) {\n                        return {\n                            status: 'error',\n                            message: '返回结果中未包含成功信息',\n                        };\n                    }\n                    const list = data.data.result.data.map((value) => {\n                        return {\n                            title: value.title,\n                            author: value.author_name,\n                            category: value.category,\n                            url: value.url,\n                            image: value.thumbnail_pic_s,\n                        };\n                    });\n                    return {\n                        status: 'success',\n                        data: list,\n                    };\n                } catch (error) {\n                    return {\n                        status: 'error',\n                        error: error,\n                    };\n                }\n            },\n        },\n        {\n            name: '知乎每日新闻',\n            description: '知乎每日新闻（使用公益API）',\n            url: 'https://v.api.aa1.cn/api/zhihu-news/index.php?aa1=xiarou',\n            async getData() {\n                try {\n                    const response = await fetch(this.url);\n                    const data = await response.json();\n                    const list = data.news.map((value) => {\n                        return {\n                            title: value.title,\n                            hint: value.hint,\n                            url: value.url,\n                            image: value.image,\n                        };\n                    });\n                    return {\n                        status: 'success',\n                        data: list,\n                    };\n                } catch (error) {\n                    return {\n                        status: 'error',\n                        error: error,\n                    };\n                }\n            },\n        },\n    ],\n    setupExecuted: false,\n    selectedSource: 0,\n    setup() {\n        if (this.setupExecuted) {\n            return;\n        }\n        const sourcesListSelectInnerListHtml = this.sources\n            .map((value, index) => {\n                return `<a class=\"a\" onclick=\"closenotice(); news.setSource(${index})\" win12_title=\"${value.description}\">${value.name}</a>`;\n            })\n            .join('\\n');\n        nts['widgets.news.source'].cnt = `\n                <p class=\"tit\">切换新闻源</p>\n                <list class=\"new\">\n                    ${sourcesListSelectInnerListHtml}\n                </list>`;\n        this.refresh();\n        this.setupExecuted = true;\n    },\n    setSource(index) {\n        this.selectedSource = index;\n        this.refresh();\n    },\n    async refresh() {\n        const contentEl = document.querySelector('#widgets>.news>.content');\n        const contentNewsEl = document.querySelector('#widgets>.news>.content>.news-all');\n        this.setFullTip(false, true, '加载中');\n        contentNewsEl.innerHTML = '';\n        const data = await this.sources[this.selectedSource].getData();\n        if (data.status !== 'success') {\n            this.setFullTip(\n                false,\n                false,\n                '载入失败',\n                '无法载入新闻。\\n请检查你的网络设置，或更改新闻源并稍后再试。',\n                '详细信息：' + (data.error ? data.error.message : data.message ? data.message : '未知')\n            );\n            return;\n        }\n        const genCardHTML = async (data, classList = '') => {\n            return `\n<div class=\"card ${classList}\" style=\"background: url(${data.image}) right;\">\n    <p class=\"tit\">${await this.parseToHTMLString(data.title)}</p>\n    <a class=\"a\" onclick=\"openapp(\\'edge\\');window.setTimeout(() => {apps.edge.newtab();apps.edge.goto('${data.url}');}, 300);\">详细信息 &gt;</a>\n</div>\n`;\n        };\n        const topNews = data.data.shift();\n        const topNewsHTML = await genCardHTML(topNews, 'top-news');\n        let contentNews = [''];\n        for (let i = 0; i < data.data.length; i++) {\n            const current = data.data[i];\n            const html = await genCardHTML(current, i % 2 == 0 ? 'card-left' : 'card-right');\n            contentNews.push(html);\n            // 不等待会有严重卡顿，我也不知道为啥\n            await wait(1);\n        }\n        let contentNewsHTML = '';\n        for (let i = 0; i < contentNews.length; i += 2) {\n            contentNewsHTML += `\n<div class=\"line\">${contentNews[i]}${i + 1 < contentNews.length ? contentNews[i + 1] : ''}</div>`;\n            await wait(1);\n        }\n        contentEl.innerHTML = `\n${topNewsHTML}\n<div class=\"news-all\">\n${contentNewsHTML}\n</div>\n`;\n        this.setFullTip(true);\n    },\n    setFullTip(hidden = true, loading = false, tit = '', desc = '', data = '') {\n        let fullTipEl = document.querySelector('#widgets>.news>.full-tip');\n        fullTipEl.querySelector('loading').hidden = !loading;\n        fullTipEl.querySelector('.tit').innerText = tit;\n        fullTipEl.querySelector('.desc').innerText = desc;\n        fullTipEl.querySelector('.info').innerText = data;\n        if (hidden) {\n            fullTipEl.classList.add('hidden');\n        } else {\n            fullTipEl.classList.remove('hidden');\n        }\n    },\n    async parseToHTMLString(str) {\n        let element = document.createElement('span');\n        element.innerText = str;\n        return element.innerHTML;\n    },\n};\n"
  },
  {
    "path": "scripts/setting_getTime.js",
    "content": "//设置页面时间获取逻辑  @Junchen Yi  2023-9-17\n\n// 抱歉，但这确实是多余的 qwq from stsc\n\n\n// // 获取具有class=\"settingTime\"的元素\n// const settingTimeElement = document.querySelector('.settingTime');\n\n// // 更新时间函数\n// function updateTime() {\n//     const now = new Date();\n//     const hours = now.getHours();\n//     const minutes = now.getMinutes().toString().padStart(2, '0'); // 补零\n//     const seconds = now.getSeconds().toString().padStart(2, '0'); // 补零\n\n//     let timeOfDay = '';\n\n//     if (hours < 12) {\n//         timeOfDay = '上午';\n//     } else if (hours < 18) {\n//         timeOfDay = '下午';\n//     } else {\n//         timeOfDay = '晚上';\n//     }\n\n//     // 将时间注入到HTML元素内\n//     settingTimeElement.textContent = `${timeOfDay} ${hours}:${minutes}:${seconds}`;\n// }\n\n// // 初始加载时更新时间\n// updateTime();\n\n// // 每秒钟更新一次时间\n// setInterval(updateTime, 1000);\n"
  },
  {
    "path": "scripts/utils.js",
    "content": "HTMLElement.prototype.$$ = function (selector) {\n    return this.querySelectorAll(selector);\n};\n"
  },
  {
    "path": "shutdown.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh\"> <!-- 优化：添加 lang 属性以指定页面语言 -->\n<head>\n    <meta charset=\"UTF-8\"> <!-- 优化：指定字符集为UTF-8 -->\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"> <!-- 优化：添加 viewport -->\n    <title>关机 - Win12</title>\n    <meta name=\"description\" content=\"Win12正在关机，请稍候...\"> <!-- 优化：修正 meta 描述内容 -->\n    <style>\n        body {\n            background: linear-gradient(130deg, #ad6ecaee, #3b91d8ee);\n            margin: 0; /* 优化：添加 margin 样式，确保页面外边距为0 */\n        }\n\n        loading>svg>circle:first-child {\n            stroke: #fff;\n            fill: none;\n            stroke-width: 2px;\n            stroke-linecap: round;\n            animation: spin-infinite 1.8s linear 0s infinite normal none running;\n            transform-origin: 50% 50%;\n            transition: all .2s ease-in-out 0s;\n        }\n\n        loading>svg>circle:last-child {\n            fill: transparent; /* 优化：将填充颜色设置为透明 */\n        }\n\n        loading>svg {\n            background-color: transparent; /* 优化：将背景颜色设置为透明 */\n            border-radius: 50%;\n        }\n\n        @keyframes spin-infinite {\n            0% {\n                stroke-dasharray: 0.01px, 43.97px;\n                transform: rotate(0deg);\n            }\n\n            50% {\n                stroke-dasharray: 21.99px, 21.99px;\n                transform: rotate(450deg);\n            }\n\n            to {\n                stroke-dasharray: 0.01px, 43.97px;\n                transform: rotate(3turn);\n            }\n        }\n    </style>\n</head>\n<body onload=\"initShutdown()\" onkeydown=\"boot(event)\"> <!-- 优化：将JavaScript函数添加到 onload 事件中 -->\n    <div id=\"backdrop\" style=\"transition: 1.5s; backdrop-filter: blur(30px); width: 100%; height: 100%; position: absolute; top: 0; left: 0; background-color: rgba(111, 111, 111, 0.5); opacity: 0;\"></div> <!-- 优化：修改背景颜色，添加透明度 -->\n    <loading id=\"ld\" style=\"transition: 2s; opacity: 0;\">\n        <svg style=\"position: absolute; left: calc(50% - 25px); top: calc(50% - 35px); width: 50px; height: 50px;\" width=\"50px\" height=\"50px\" viewBox=\"0 0 16 16\">\n            <circle cx=\"8\" cy=\"8\" r=\"7\"></circle> <!-- 优化：修改SVG元素 -->\n            <circle cx=\"8\" cy=\"8\" r=\"6\"></circle> <!-- 优化：修改SVG元素 -->\n        </svg>\n    </loading>\n    <p id=\"ldt\" style=\"transition: 1.5s; opacity: 0; width: 100px; left: calc(50% - 50px); text-align: center; position: absolute; top: calc(50% + 5px); color: #fff; font-size: 20px;\">\n        正在关机\n    </p>\n    <script>\n        let shutdownStatus = false\n        function initShutdown() {\n            document.getElementById('backdrop').style.opacity = 1;\n            document.getElementById('ld').style.opacity = 1;\n            document.getElementById('ldt').style.opacity = 1;\n            setTimeout(() => {\n                document.getElementById('backdrop').style.display = 'none';\n                document.getElementById('ld').style.display = 'none';\n                document.getElementById('ldt').style.display = 'none';\n                document.body.style.background = '#000';\n                shutdownStatus = true;\n            }, 3000);\n        }\n        function boot(event) {\n            if (event.key == 'Enter' && shutdownStatus == true) {\n                window.location.href = 'boot.html'//优化：更改开机跳转位置\n            }\n        }\n    </script>\n</body>\n</html>"
  },
  {
    "path": "sw.js",
    "content": "let dymanic = [\n  'api.github.com',\n  'tjy-gitnub.github.io/win12-theme',\n  'win12server.freehk.svipss.top',\n  'assets.msn.cn'\n]\nthis.addEventListener('fetch', function (event) {\n  if (!/^https?:$/.test(new URL(event.request.url).protocol)) return\n\n  event.respondWith(\n    caches.match(event.request).then(res => {\n      let fl = false;\n      dymanic.forEach(d => {\n        if (event.request.url.indexOf(d) > 0) {\n          fl = true;\n          return;\n        }\n      });\n      if (fl) {\n        console.log('动态请求', event.request.url);\n        return fetch(event.request);\n      }\n      return res ||\n        fetch(event.request)\n          .then(responese => {\n            const responeseClone = responese.clone();\n            caches.open('def').then(cache => {\n              console.log('下载数据', responeseClone.url);\n              cache.put(event.request, responeseClone);\n            })\n            return responese;\n          })\n          .catch(err => {\n            console.log(err);\n          });\n    })\n  )\n});\nconst cacheNames = ['def'];\nlet nochanges = [\n  '/win12/fonts/',\n  '/win12/img/',\n  '/win12/apps/icons/',\n  '/win12/scripts/jq.min.js',\n  '/win12/bootstrap-icons.css',\n]\nlet flag = false;\n\nfunction update(force = false) {\n  caches.keys().then(keys => {\n    if (keys.includes('def')) {\n      caches.open('def').then(cc => {\n        cc.keys().then(key => {\n          key.forEach(k => {\n            let fl = true;\n            if (force) {\n              console.log('删除数据', k.url);\n              return cc.delete(k);\n            }\n            nochanges.forEach(fi => {\n              if (RegExp(fi + '\\\\S+').test(k.url)) {\n                fl = false;\n                return;\n              }\n            });\n            if (fl) {\n              console.log('删除数据', k.url);\n              return cc.delete(k);\n            }\n          });\n        });\n      });\n    }\n  });\n}\n\n\nthis.addEventListener('message', function (e) {\n  if (e.data.head == 'update') {\n    if(e.data.force)update(true);\n    else update();\n  }\n});\nthis.addEventListener('activate', update);\n\n// let dongtai=[\n//   'api.github.com',\n//   'tjy-gitnub.github.io/win12-theme',\n//   'win12server.freehk.svipss.top',\n//   'assets.msn.cn'\n// ]\n// this.addEventListener('fetch', function (event) {\n//   event.respondWith(\n//     caches.match(event.request).then(res => {\n//       let fl=false;\n//       dongtai.forEach(d=>{\n//         if(event.request.url.indexOf(d)>0){\n//           fl=true;\n//           return;\n//         }\n//       });\n//       if(fl){console.log('动态请求',event.request.url);return fetch(event.request);}\n//       return res ||\n//         fetch(event.request)\n//           .then(responese => {\n//             // console.log(event.request);\n//             const responeseClone = responese.clone();\n//             caches.open('def').then(cache => {\n//               console.log('下载数据', responeseClone.url);\n//               cache.put(event.request, responeseClone);\n//             })\n//             return responese;\n//           })\n//           .catch(err => {\n//             console.log(err);\n//           });\n//     })\n//   )\n// });\n// const cacheNames = ['def'];\n// let nochanges = [\n//   '/win12/fonts/',\n//   '/win12/img/',\n//   '/win12/apps/icons/',\n//   '/win12/jq.min.js',\n//   '/win12/bootstrap-icons.css',\n// ]\n// let flag = false;\n// this.addEventListener('activate', function (event) {\n//   flag = true;\n//   console.log('开始更新');\n//   event.waitUntil(\n//     caches.keys().then(keys => {\n//       if (keys.includes('def')) {\n//         caches.open('def').then(cc => {\n//           cc.keys().then(key => {\n//             key.forEach(k => {\n//               let fl = true;\n//               nochanges.forEach(fi => {\n//                 if (RegExp(fi + '\\\\S+').test(k.url)) {\n//                   fl = false;\n//                   return;\n//                 }\n//               });\n//               if (fl) {\n//                 console.log('删除数据', k.url);\n//                 return cc.delete(k);\n//               }\n//             });\n//           })\n//         })\n//       }\n//     })\n//   );\n//   event.waitUntil(\n//     caches.open('def').then(function (cache) {\n//       return cache.addAll([\n//         'bg-dark.svg'\n//       ]);\n//     })\n//   );\n// });\n// this.addEventListener('message', function (e) {\n//   if (e.data.head == 'is_update') {\n//     if (flag) {\n//       e.source.postMessage({\n//         head: 'update'\n//       });\n//       flag = false;\n//     }\n//   }\n// });\n"
  }
]