Repository: tjy-gitnub/win12 Branch: main Commit: b413814161a9 Files: 87 Total size: 963.3 KB Directory structure: gitextract_uat3ea75/ ├── .claude/ │ └── settings.local.json ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── 1-bug_report.yaml │ │ ├── 2-new-proposal.yaml │ │ ├── 3-others.md │ │ └── config.yml │ └── workflows/ │ └── notify-preview-deploy.yml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── apps/ │ ├── LICENSE │ ├── NOTICE.md │ └── style/ │ ├── about.css │ ├── bios.css │ ├── calc.css │ ├── camera.css │ ├── code-editor.css │ ├── copilot.css │ ├── defender.css │ ├── edge.css │ ├── explorer.css │ ├── imgviewer.css │ ├── login.css │ ├── mediaplayer.css │ ├── msstore.css │ ├── notepad.css │ ├── pythonEditor.css │ ├── recognition.css │ ├── run.css │ ├── setting.css │ ├── taskmgr.css │ ├── terminal.css │ ├── whiteboard.css │ └── word.css ├── base.css ├── bios.html ├── bluescreen.html ├── boot.html ├── bootstrap-icons.css ├── changelog.md ├── data/ │ ├── disconnected.html │ ├── disconnected_dark.html │ └── tasks.js ├── desktop.css ├── desktop.html ├── desktop.js ├── fonts/ │ └── LICENSE ├── games/ │ └── minesweeper.html ├── icon/ │ ├── LICENSE │ └── NOTICE.md ├── img/ │ ├── LICENSE │ └── NOTICE.md ├── index.html ├── lang/ │ ├── README_trans.md │ ├── lang.properties │ ├── lang_en.properties │ ├── lang_zh.properties │ ├── lang_zh_CN.properties │ ├── lang_zh_TW.properties │ ├── readme.md │ └── trans.py ├── mainpage.html ├── media/ │ └── LICENSE ├── module/ │ ├── apps.js │ ├── tab.css │ ├── tab.js │ ├── widget.css │ ├── widget.js │ └── window.js ├── pwa/ │ └── manifest.json ├── readme/ │ ├── README_en_us.md │ ├── README_fr_fr.md │ └── README_zh_tw.md ├── reload.html ├── robots.txt ├── scripts/ │ ├── AI Copilot service/ │ │ └── README.md │ ├── Lunar.js │ ├── bios_kernel.js │ ├── boot_kernel.js │ ├── calculator_kernel.js │ ├── jquery.i18n.properties.js │ ├── news.js │ ├── setting_getTime.js │ └── utils.js ├── shutdown.html └── sw.js ================================================ FILE CONTENTS ================================================ ================================================ FILE: .claude/settings.local.json ================================================ { "permissions": { "allow": [ "Bash(gh issue:*)" ] } } ================================================ FILE: .github/ISSUE_TEMPLATE/1-bug_report.yaml ================================================ name: Bug report / 故障报告 description: Please report any vulnerabilities you discover during use to us / 请向我们汇报您在使用过程中发现的漏洞 title: "[Bug]" body: - type: markdown id: introduction attributes: value: | 请使用此模板来报告 bug,并尽可能多地提供信息。 Please use this template while reporting a bug and provide as much info as possible. - type: checkboxes id: prerequisites attributes: label: 先决条件 (Prerequisites) options: - label: | 我已确认这个问题没有在[其他 issues](https://github.com/tjy-gitnub/win12/issues)中提出过。 I am sure that this problem has NEVER been discussed in [other issues](https://github.com/tjy-gitnub/win12/issues). required: true - label: | 我确认我正在使用官方地址 (tjy-gitnub.github.io/win12)。 I confirm that I am using the official url (tjy-gitnub.github.io/win12). required: true - label: | 我确保我遵守行为准则 I have followed the code of conduct required: true - label: | 我已查看了常见问题解答(#735) I have reviewed the Frequently Asked Questions (#735) required: true - type: textarea id: what_happened attributes: label: 发生了什么(What happened) validations: required: true - type: textarea id: expected_behavior attributes: label: 期望的现象(What you expected to happen) validations: required: true - type: textarea id: how_to_reproduce attributes: label: 如何重现此问题(How to reproduce it) validations: required: true - type: input id: os_version attributes: label: 操作系统(OS Version) - type: input id: browser attributes: label: 浏览器(Browser version) - type: textarea id: other_env attributes: label: 其他环境(Other environments) - type: textarea id: others attributes: label: 其他需要说明的事项(Anything else we need to know) ================================================ FILE: .github/ISSUE_TEMPLATE/2-new-proposal.yaml ================================================ name: New Proposal / 提出建议 description: Please provide us with your valuable suggestions / 请向我们提出宝贵的建议 title: "[建议] " body: - type: markdown id: introduction attributes: value: | 欢迎向 Windows12 网页版 提出建议。您的建议将帮助本项目变得更好。 Welcome to submit suggestions to Windows12 Online. Your suggestions will help this project become better. - type: checkboxes id: prerequisites attributes: label: 先决条件 (Prerequisites) options: - label: | 我已确认这个问题没有在[其他 issues](https://github.com/tjy-gitnub/win12/issues)中提出过。 I am sure that this problem has NEVER been discussed in [other issues](https://github.com/tjy-gitnub/win12/issues). required: true - label: | 我确认我正在使用官方地址 (tjy-gitnub.github.io/win12)。 I confirm that I am using the official url (tjy-gitnub.github.io/win12). required: true - label: | 我确保我遵守行为准则 I have followed the code of conduct required: true - type: textarea id: name attributes: label: 描述 description: 请简述您的建议 Please briefly describe your proposal validations: required: true - type: textarea id: upstream attributes: label: 方案 description: 请简述您建议的实现方案 Please briefly describe your proposed implementation validations: required: true - type: textarea id: more_info attributes: label: 备注 (Note) description: 其他补充信息 Additional information validations: required: false ================================================ FILE: .github/ISSUE_TEMPLATE/3-others.md ================================================ --- name: Others / 其他事项 about: For other issues, use this template / 不能归类为上述事项,请用此模版 --- ================================================ FILE: .github/ISSUE_TEMPLATE/config.yml ================================================ blank_issues_enabled: false ================================================ FILE: .github/workflows/notify-preview-deploy.yml ================================================ # 监听 PR 事件,通知下游仓库触发预览部署 name: PR 预览部署 on: pull_request_target: types: [opened, synchronize, reopened] permissions: {} jobs: notify: name: 发送部署通知 runs-on: ubuntu-latest # 跳过草稿 PR if: github.event.pull_request.draft == false steps: - name: 检查 Secret 是否存在 env: TOKEN: ${{ secrets.DOWNSTREAM_PAT }} run: | if [ -z "$TOKEN" ]; then echo "::error::DOWNSTREAM_PAT secret 未配置,请在仓库 Settings → Secrets 中添加" exit 1 fi - name: 构造事件类型 id: event-type run: | # 将 PR 动作映射为下游仓库的 repository_dispatch 事件类型 echo "type=upstream-pr-${{ github.event.action }}" >> "$GITHUB_OUTPUT" - name: 触发下游仓库预览部署 env: TOKEN: ${{ secrets.DOWNSTREAM_PAT }} run: | # 向下游仓库发送 repository_dispatch 请求 curl -fS -X POST \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer $TOKEN" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/tangyuan0821/win12-pr-preview/dispatches \ -d '{ "event_type": "${{ steps.event-type.outputs.type }}", "client_payload": { "pr_number": ${{ github.event.pull_request.number }}, "sha": "${{ github.event.pull_request.head.sha }}" } }' ================================================ FILE: .gitignore ================================================ web.config .vscode .idea .DS_Store ================================================ FILE: CODE_OF_CONDUCT.md ================================================ # 行为准则 >[!NOTE] >简而言之:用户均应当秉持“与人为善、文明和谐”的原则。 Win12 网页版项目社区讲求文明,用户均应当秉持与人为善、开放包容、求同存异、文明和谐、共同进步的原则。 在社区讨论中,请对其他用户展现开放、尊重、善意的态度,并以达成共识为首要目标。当出现激烈的争论时,请保持冷静,不要扰乱社区环境,不要实施人身攻击。 任何来到本项目进行贡献的用户,都应遵守文明规则。在本项目中,“文明”的内涵是广泛的,包括但不仅限于讨论文明以及沟通文明等范畴。 ## 文明行为 我们鼓励的行为包括: * 对其他用户展现开放、包容、善意的态度;尊重不同人的不同主张、意见和感受; * 在讨论中以文明的方式提出自己的主张或建设性意见; * 勇于纠正项目中非正确的事项,消除有关非正确事项的影响。 ## 不文明行为 不文明行为,包括但不限于: * **粗鲁无礼**:无礼、轻蔑、侮辱、谩骂中伤、人身攻击或其他贬损性表述; * **恶意推定**:轻率鲁莽地指控他人行为不当,或在无充分证据前提下预设对方是恶意的; * **不当语气**:讥讽他人或诱使他人作出不文明行为; * **骚扰他人**:跟踪、欺凌、人身威胁、性骚扰、泄露他人隐私等; * **欺诈他人**; * **诽谤他人**:援引他人留言并断章取义,或虚构他人言论、行为,以图降低他人社会评价。 ## 解决不文明行为的方式 当想要做有违文明的事情时,请务必冷静,三思而后行。 如果您遇到他人的不文明行为,我们希望您做到冷静行动(即使这或许很困难)。保持冷静有利于防止负面影响扩大化,也是使他人收手、事态能够很好收场的最好态度。您可以选择拉黑该用户,并不对这种行为做任何答复,原谅并忘掉他们,也可以选择探究诱使其做出不文明行为的原因,并加以解决。 在遇到争议时,您可以尝试解决争议。通过[电子邮件](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“(讨论)页提出。 ## 我们对不文明行为的处理 拥有Collaborator权限的用户有处理用户不文明行为的权力。此类用户对用户不文明行为的处理方法包括但不限于: * 若冲突发生于Issue页面,可以对页面实施锁定,给冲突双方一定的冷静期; * 若可以,限制或禁止存在不文明行为的用户与其他用户讨论; * 若可以,限制或禁止存在冲突的两名或多名用户与其他用户讨论; * 向Github 社区举报该用户的行为。 ================================================ FILE: CONTRIBUTING.md ================================================ # 贡献指南 我们鼓励每个人为Windows 12网页版贡献内容。 若您想贡献本仓库,那您必须仔细阅读本指南的所有内容。您还应当注意本指南中**加粗的文字**和[开发规范](#开发规范)章节的内容。 本仓库仍有很多问题待解决,Issue列表长期处于积压状态。您可以先试着解决[Issue列表](https://github.com/tjy-gitnub/win12/issues)中的已知问题和功能请求。 ## 基本流程 下面是贡献 pull request(下文中简称“PR”)所需的基本步骤。 1. 您可以寻找可改善的任何东西,代码逻辑、格式规范或是页面内容等进行改进。 2. 然后Fork本仓库,将其Clone到本地。 3. 在本地进行修改,完成后Commit。(请尽量一次Commit提交全部内容。可以追加Commits,但尽量不要超过5个Commits。) 4. 将修改推送到您的仓库 5. 再[创建一个Pull Request](https://github.com/tjy-gitnub/win12/pulls)。 6. 然后`坐和放宽`,等待其他人对你的代码进行审查。 >[!TIP] >在此过程中请尽量使用Git命令行、Github Desktop、[https://github.dev](https://github.dev/tjy-gitnub/win12)等方式进行提交。 ## 重要提醒 * 若您的修改具有一定重要性或量级时,请按照以下格式阐述更新内容: ``` v11.4.5 - 更新了xxx (更新来自 @Somebody) - 更新了... - 优化了... - 修复了... ... ``` >[!TIP] > 1. 标题要带有版本号、主要更新内容。 > 2. 内容第一行注明更新来源。 > 3. 内容要用列表的方式阐述更新内容。 >[!NOTE] > 1. **请不要**任意选取版本号。若您不清楚,可以通过[我们的交流群](https://teams.live.com/l/invite/FEA0yrNkE_bAn-ddwI)与我们取得联系并分配到版本号。 > 2. 在更新时,**记住**要在“关于 Windows 12 网页版”应用的更新记录中,添加关于该更新的相关内容。 * **请善用`Update branch`按钮**。点击`Update branch`按钮可将`main`分支的最新更改合并到当前PR中。但无充分理由请勿操作——会误通知关注者“有新变更”,且会消耗[预览机器人](https://github.com/Bedevere-win12-bot)的 GitHub Action 资源。 * 根据中华人民共和国有关法律的规定您**不可以**通过本项目传播违法和违规内容,否则我们将会采取锁定+视情况封禁的处理(温馨提示:时事新闻也不行),同时我们保留在任何时间以一切方式采取法律行动、追究法律责任的权利。 * 若您贡献此项目,则代表您知情并同意:为使得您贡献的内容得到更好的分享及推广,就您在本项目所贡献的内容,您授权我们一项全球范围内的、免费的、非独家的、可再许可的权利;该等内容包括但不限于文字作品、美术作品、图形作品、视听作品、计算机程序源代码等各种著作权法意义上构成“作品”的内容;该等权利包括但不限于复制、翻译、整理、汇编、注释、改编、信息网络传播、发行等各项著作权及其相关权利,且该等权利应至少涵盖对于“Windows12 网页版”项目或以其他方式开发相关内容的一部分或全部的权利及许可。 ### 开发规范 1. 对于HTML文件的规定 详见 `desktop.html` 开头的代码规范,务必认真阅读。 2. 对JS文件的规定 1. 请按照以下代码风格进行开发: ```js var sum = 0; for (var i = 0; i < 10; i++) { sum += i; } console.log(sum); ``` 2. 对于函数名及变量命名,请使用驼峰式命名法,如: - isLoaded - storagedItems 3. 对于类名,请使用帕斯卡命名法(大驼峰式命名法),如: - WindowManager - Widgets 4. 对于代码规范的规定: 对于那些不需要展开的代码,尽量压成一行 ================================================ FILE: LICENSE ================================================ Eclipse Public License - v 2.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 1. DEFINITIONS "Contribution" means: a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and b) in the case of each subsequent Contributor: i) changes to the Program, and ii) additions to the Program; where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution "originates" from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works. "Contributor" means any person or entity that Distributes the Program. "Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions Distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors. "Derivative Works" shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. "Modified Works" shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or Modified Works thereof. "Distribute" means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy. "Source Code" means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files. "Secondary License" means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor. 2. GRANT OF RIGHTS a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works. b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to Distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3). 3. REQUIREMENTS 3.1 If a Contributor Distributes the Program in any form, then: a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license: i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3. 3.2 When the Program is Distributed as Source Code: a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and b) a copy of this Agreement must be included with each copy of the Program. 3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability ("notices") contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices. 4. COMMERCIAL DISTRIBUTION Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 5. NO WARRANTY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. GENERAL If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be Distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to Distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement. Exhibit A - Form of Secondary Licenses Notice "This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}." Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses. If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice. You may add additional accurate notices of copyright ownership. ================================================ FILE: README.md ================================================

Windows 12 网页版

GitHub issues GitHub stars GitHub forks tjy-gitnub%2Fwin12 | Trendshift

English | 简体中文 | Français| 繁體中文

Star History Star History Chart
## 目录 - [Windows 12 网页版](#windows-12-网页版) - [前言](#前言) - [在线体验](#在线体验) - [效果展示](#效果展示) - [前景规划](#前景规划) - [开源声明](#开源声明) - [贡献须知](#贡献须知) - [贡献者](#贡献者) - [资助我们](#资助我们) ## 前言 很久以前 @tjy-gitnub 看到 Windows 12 概念版(Powered by PowerPoint)后深受启发,决定做一个 Windows 12 网页版,就像 [Windows 11 网页版](https://win11.blueedge.me/) 一样。 它拥有精美的 ui 设计,流畅丰富的动画,各种高级的功能。 于是就有了这个项目(是的) > [!NOTE] > 目前移动端适配不太完善,开桌面版网站凑合着用吧 `>v-)o` ## 在线体验 点击[此处](tjy-gitnub.github.io/win12/desktop.html)即可体验。 ## 效果展示 > 新的版本有很多变化,仅供参考,请以实物为准(你点一下 [这里](https://tjy-gitnub.github.io/win12/desktop.html) 就知道了啊,不麻烦`-_-)o` ) ![image](https://tjy-gitnub.github.io/win12/img/start-menu.png) _开始菜单_ ![image](https://tjy-gitnub.github.io/win12/img/colorful-apps.png) _丰富的应用_ ![image](https://tjy-gitnub.github.io/win12/img/dark-mode.png) _深色模式_ ![image](https://tjy-gitnub.github.io/win12/img/ai-copilot.png) _AI Copilot([相关信息](./scripts/AI%20Copilot%20service/README.md))_ ## 前景规划 关于该项目的路径规划: - [x] 基本功能与应用 - [x] 外观整体优化 - [x] 加入特效 - [x] 窗口功能 - [x] 应用完善 - [x] 添加更多个性化方面的设置 - [x] 添加 Edge 应用 - [ ] 为更多应用添加标签页 - [x] 完善小组件,添加到桌面等功能 - [ ] 动态壁纸 - [ ] 更多任务栏的自定义 - [ ] 丰富应用生态,添加 Microsoft Store - [ ] 完善设置及 Windows 更新 下面是一些...呃......畅..想 `~o~)/`: - [x] 建立文件系统 - [ ] 建立自己的可执行文件机制 - [ ] 将 .exe 文件转化并执行 - [ ] 提供更多 api 供应用调用 - [x] 内置浏览器内核,成为应用 - [ ] 将项目更名为 "Windows 12" - [ ] 封装到 Windows 系统中 - [ ] 将启动程序设为此应用 - [ ] 去除多余系统功能,封装成独立的操作系统 - [ ] 将项目更名为 "Doswin 1.0" - [ ] 适配量子计算机 - [x] 接入 AI - [ ] 将项目更名为 "550W" ## 开源声明 Windows12 网页版的内容均采用较为宽松的著作权许可协议授权社会公众使用。 ### 计算机程序源代码 Wndows12 网页版是自由软件,采用Eclipse基金会发行的Eclipse Public License 2.0许可证(网址:)进行许可。在遵守该许可证的前提下,您可以自由使用本项目的源代码。 ### 媒体文件 Windows12 网页版的媒体文件内容(图形作品、美术作品、视听作品)依照依照知识共享 署名-相同方式共享 4.0 协议国际版(CC BY-SA 4.0)公开发表(另有声明的部分除外);在遵守该许可协议的前提下,您可以自由使用本项目内的媒体文件。 相关文件属于合理使用的范畴,应注意使用相关的媒体文件存在法律风险,请在使用前查阅著作权法律法规之规定。 ### 附加条款 > [!CAUTION]
以下条款适用于中华人民共和国(不含香港特别行政区、澳门特别行政区、台湾地区)以及“Windows12 网页版”项目服务器所在地的相关法律、法规、政府规章和其他具有强制性的规定。 1. 任何使用、分享或分发本项目者,必须在项目介绍、文档或相关材料中明确附上原作者信息(谭景元,tjy-gitnub)及原项目链接()。**您不得故意隐瞒、移除或修改原项目中的署名信息、作者信息或项目链接等;不得限制他人查看这些信息**。 2. 将本项目用于商业用途者,必须标明原作者及项目链接,并以 EPL-2.0 协议开源全部相关源代码。 3. 未经修改的源代码不得用于商业用途。 4. 任何使用或分享本项目者,不得移除、隐藏或限制查看本开源声明。 5. 您在发现他人违反前四款所列各项要求时,请及时[向我们报告](https://github.com/tjy-gitnub/win12/issues),并尽可能及时制止相关内容的发布与传输。 6. 若您实施侵权行为,我们将根据法律规定保留记录,且保留在任何时间以一切方式采取法律行动、追究法律责任的权利(包括但不限于依法向执法机关提交报告、向司法机关提出控告、配合执法机关和司法机关调查等)。 ## 贡献须知 详情请见 [贡献指南](./CONTRIBUTING.md)。 本项目使用 i18n 库实现多语言,翻译工作依据[翻译贡献指南](lang/readme.md)进行。 ## 贡献者 核心开发者: tjy-gitnub([Bilibili](https://space.bilibili.com/2010692096/)),NB-group([Bilibili](https://space.bilibili.com/1570243738/)),782([Bilibili](https://space.bilibili.com/1046361194/))(三人当年均为初中生) 项目贡献者:详见[此处](https://github.com/tjy-gitnub/win12/graphs/contributors)(感谢我们出色的贡献者!) ## 资助我们 可以向我们的[爱发电账户](https://afdian.com/a/qstudio)捐款 特别感谢以下赞助者: - CursoR\_光标() - Baymax() ================================================ FILE: apps/LICENSE ================================================ Attribution-ShareAlike 4.0 International ======================================================================= Creative Commons Corporation ("Creative Commons") is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an "as-is" basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. Using Creative Commons Public Licenses Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC- licensed material, or material used under an exception or limitation to copyright. More considerations for licensors: wiki.creativecommons.org/Considerations_for_licensors Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor's permission is not necessary for any reason--for example, because of any applicable exception or limitation to copyright--then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public: wiki.creativecommons.org/Considerations_for_licensees ======================================================================= Creative Commons Attribution-ShareAlike 4.0 International Public License By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. Section 1 -- Definitions. a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. c. BY-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License. d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution and ShareAlike. h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. j. Licensor means the individual(s) or entity(ies) granting rights under this Public License. k. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. l. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. m. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. Section 2 -- Scope. a. License grant. 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: a. reproduce and Share the Licensed Material, in whole or in part; and b. produce, reproduce, and Share Adapted Material. 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 3. Term. The term of this Public License is specified in Section 6(a). 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a) (4) never produces Adapted Material. 5. Downstream recipients. a. Offer from the Licensor -- Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. b. Additional offer from the Licensor -- Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter's License You apply. c. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). b. Other rights. 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 2. Patent and trademark rights are not licensed under this Public License. 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. Section 3 -- License Conditions. Your exercise of the Licensed Rights is expressly made subject to the following conditions. a. Attribution. 1. If You Share the Licensed Material (including in modified form), You must: a. retain the following if it is supplied by the Licensor with the Licensed Material: i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); ii. a copyright notice; iii. a notice that refers to this Public License; iv. a notice that refers to the disclaimer of warranties; v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; b. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and c. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. b. ShareAlike. In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply. 1. The Adapter's License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-SA Compatible License. 2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material. 3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply. Section 4 -- Sui Generis Database Rights. Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. Section 5 -- Disclaimer of Warranties and Limitation of Liability. a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. Section 6 -- Term and Termination. a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 2. upon express reinstatement by the Licensor. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. Section 7 -- Other Terms and Conditions. a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. Section 8 -- Interpretation. a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. ======================================================================= Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” The text of the Creative Commons public licenses is dedicated to the public domain under the CC0 Public Domain Dedication. Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark "Creative Commons" or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org. ================================================ FILE: apps/NOTICE.md ================================================ # 非“自由版权”文件列表 >[!CAUTION] >本列表内所列文件受著作权保护!相关文件属合理使用范畴。
本列表内所列文件可能含有受商标法或其他类似法律、法规保护的内容。 | 文件名称 | 备注| | --- | --- | |disk.png|无| |diskwin.png |无| |folder.png|无| |od.png|是微软公司的商标| |rb.png|无| |thispc.png|无| |tool-copy|无| |tool-cut.png|无| |tool-new.png|无| |tool-paste.png|无| |tool-rename.png|无| |tool-sort.png|无| |tool-view.png|无| |apps.png|无| |blueteeth.png|无| |game.png|无| |help.png|无| |home.png|无| |ms.png|是微软公司的商标| |ms365.png|是微软公司的商标| |network.png|无| |personal.png|无| |safe.png|无| |system.png|无| |time.png|无| |update.png|无| |user.png|无| ================================================ FILE: apps/style/about.css ================================================ #win-about { display: flex; } #win-setting>.menu>list>a { padding: 5px 10px 5px 20px; font-size: 15px; display: flex; margin-bottom: 4px; border-radius: 6px; } #win-about>.menu>list>a>img { height: 20px; width: 20px; margin: 1px 10px 0 0; font-size: 15px; } #win-about>.menu>list>a.check { background-color: var(--hover) !important; } #win-about>.menu { width: 25% !important; overflow: hidden; min-width: 180px; max-width: 300px; padding: 3px 5px 5px 15px; } #win-about>.menu>list { padding-bottom: 50px !important; margin-left: 5px; height: calc(100% - 138px); overflow-y: auto; padding-right: 10px; border-radius: 6px; } #win-about>.menu>list>*>img { margin: 2px 7px 0 0; } #win-about>.cnt { overflow: auto; transform: translate(0, 50%); opacity: 0; width: 0; transition: transform 300ms cubic-bezier(0, 0, 0, 1), opacity 300ms 50ms; padding: 0 5px 60px 0; /* display: none; */ } #win-about>.cnt.show { flex-grow: 1; transform: none; opacity: 1; display: block; } #win-about>.cnt .tit { margin: 8px 0 3px 0; display: flex; } #win-about>.cnt .tit>span { background: linear-gradient(180deg, var(--theme-1), var(--theme-2)); border-radius: 10px; width: 6px; margin: 5px 8px 5px 5px; transition: 200ms; transform: scaleY(0); transform-origin: top; } #win-about>.cnt .tit:hover>span { transform: none; } #win-about>.update>div>details { background-color: var(--card); padding: 10px 10px 0 15px; border-radius: 8px; box-shadow: 0 1px 2px 1px var(--s3d); margin: 12px 10px 0 0; transition: 100ms, height 0ms, padding-bottom 100ms ease-out; overflow: hidden; height: 45px; } :root.corner_squ #win-about>.update>div>details { corner-shape: squircle; border-radius: 20px; } #win-about>.update>div>details[open] { padding-bottom: 10px; height: 100%; } #win-about>.update>div>details:not([open]):hover { filter: brightness(1.2); } #win-about>.update>div>details:active { opacity: 0.6; } #win-about>.update>div>details>summary { font-size: 17px; transition: 200ms; } #win-about>.update>div>details>summary>span { font-weight: 900; } #win-about>.update>div>details>p { margin-left: 10px; } #contri { display: flex; flex-wrap: wrap; } #contri>.a { margin: 3px; background: var(--card); box-shadow: 0 1px 2px var(--shadow); border-radius: 10px; width: 110px; height: 70px; text-align: center; padding-top: 10px; font-size: 13px; transition: 50ms; } #contri>.a:hover { background: var(--hover); } #contri>.a:active { opacity: 0.6; } #contri>.a>.name { font-size: 17px; margin: 0px 6px; /* border: 6px; */ white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } #contri>.a>.cbs>.num { font-size: 15px; font-weight: 550; } #contri>.button { height: max-content; margin: 10px 0 0 10px; } .window.winver{ width: 600px; height: 550px; } #win-winver>.logo{ display: flex; justify-content: center; align-items: center; } #win-winver>.logo>.img{ background: url(../../icon/logo.svg) center; background-size: cover; height: 70px; width: 70px; margin:10px; } #win-winver>.logo>p{ background-image: linear-gradient(100deg, #b660d9,#2983cc); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; font-size: 45px; /* font-weight: 450; */ font-family: 'Microsoft Yahei UI'; margin: 15px; } #win-winver>hr{ width: calc(100% - 20px); margin: 10px; } #win-winver p{ margin: 0 50px; } #win-winver>.mesg:hover{ text-decoration: underline!important; } #win-winver>.mesg:active{ opacity: 0.5; transition: 30ms; } #win-winver>.bottom{ position: absolute; bottom: 80px; } ================================================ FILE: apps/style/bios.css ================================================ @font-face { font-family: 'dos'; src: url(../../fonts/dos.ttf); } body { background-color: #aaaaaa; } html, body { width: 100%; height: 100%; } * { font-family: 'dos', monospace; padding: 0px; margin: 0px; border: 0px; cursor: none; -webkit-user-select: none; -moz-user-select: none; -o-user-select: none; user-select: none; scrollbar-width: none; -ms-overflow-style: none; box-sizing: border-box; } ::-webkit-scrollbar { display: none; } .tit { font-size: 1.2rem; text-align: center; background-color: #4ba7a8; list-style-type: none; margin: 0px; padding: 5px; } body { display: flex; flex-direction: column; } .pages { background-color: #0100a2; padding: 5px; } a { text-decoration: none; } .tab { font-size: 110%; color: #aaaaaa; background-color: #0100a2; margin: 5px; padding: 5px; } .tab.foc { color: #ffffff !important; } .tab.show { color: #0100a2; background-color: #aaaaaa; } .option { color: #0100a2; background-color: #aaaaaa; padding: 0 10px; } .page { margin: 20px; padding: 20px; border: 3.5px solid #000; height: 100%; display: none; overflow-y: auto; } .page.show { display: block !important; } .exit { color: #0100a2; padding: 5px; } .confirm-button { background-color: #ffffff; color: #000000; } #mainPage>.table, #advancedPage>.table, #bootPage>.table, #securityPage>.table { display: grid; grid-template-columns: auto auto; gap: 10px; width: fit-content; } #confirmContainer { width: 100%; height: 100%; position: fixed; top: 0px; left: 0px; display: none; justify-content: center; align-items: center; } #exit_confirm { width: calc(30% + 50px); height: calc(15% + 70px); background-color: #ffffff; padding: 20px 10px; box-shadow: rgb(0, 0, 0) 8px 16px 0px 0px; } #confirm { border: 3.5px solid #000; height: 100%; padding: 20px 10px; text-align: center; display: grid; grid-template-rows: auto auto; } #confirm>*:first-child { align-self: flex-start; } #confirm>*:last-child { align-self: flex-end; } .submenu { padding-left: 20px; display: grid; grid-template-columns: auto auto; gap: 5px; margin-bottom: 15px; } ================================================ FILE: apps/style/calc.css ================================================ @keyframes shine { 0% { border-color: #111; } 49% { border-color: #111; } 51% { border-color: transparent; } 98% { border-color: transparent; } 100% { border-color: #111; } } #win-calc { display: flex; flex-direction: column; padding: 5px; } #calc-input { /* height: 90px; */ border: none; border-right: 2px solid transparent; outline: none; background-color: #00000000; font-size: 35px; text-align: end; color: var(--text); width: 100%; } #win-calc>.container { height: 90px; display: flex; align-items: center; } #calc-input:focus { border-color: #111; animation-name: shine; animation-duration: 1s; animation-iteration-count: infinite; } #win-calc>.keyb { flex-grow: 1; display: grid; grid-template-columns: repeat(4, 1fr); grid-template-rows: repeat(5, 50px); gap: 4px; } #win-calc>.keyb>.b { /* width: 60px; */ height: 50px; font-size: 25px; text-align: center; transition: 40ms; border-radius: 7px; /* border: 1.5px solid #63636330; */ box-shadow: 0px 1px 1px 1px var(--s3d); background: var(--card); padding-top: 5px; /* border: 1.5px solid var(--bd); border-top: 2px solid var(--bd); border-bottom: 1px solid var(--bd); */ /* border-color: var(--bd); */ transform-origin: bottom; } #win-calc>.keyb>.checked { background-color: var(--mm) !important; } #win-calc>.keyb>.b.u { padding-top: 5px; } #win-calc>.keyb>.b.ans { background-image: linear-gradient(120deg, var(--theme-1), var(--theme-2)); border: none; color: #ddd; } #win-calc>.keyb>.b.ans:hover { backdrop-filter: brightness(0.8); } #win-calc>.keyb>span { width: 71px; margin: 5px 5px; height: 71px; } #win-calc>.keyb>.b:hover { background-color: var(--hover); } #win-calc>.keyb>.b:active { opacity: 0.8; transform: scale(0.96); box-shadow: 0px 1px 1px var(--bd); } ================================================ FILE: apps/style/camera.css ================================================ .camera-notice { width: 300px !important; height: 400px !important; } #win-camera { position: relative; } #win-camera>.video { width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; } #win-camera>.control>div { width: 45px; height: 45px; } #win-camera>.control>div>.startbutton { width: 45px; height: 45px; border-radius: 50%; background-color: #ffffffee; backdrop-filter: blur(10px) saturate(1.3); box-shadow: 0 0 0 4px #44444470, 0 0 0 7px #ffffffa0, 1px 1px 15px 7px #00000090; transition: 200ms; } #win-camera>.control>div>.startbutton:hover { background-color: #ffffffc0; } #win-camera>.control { position: absolute; display: flex; align-items: center; justify-content: center; background: #00000010; } #win-camera.h>.control { height: 100%; width: 80px; right: 0px; top: 0px; } #win-camera.v>.control { height: 80px; width: 100%; bottom: 0px; left: 0px; } #win-camera.h video { height: 100%; } #win-camera.v video { width: 100%; } ================================================ FILE: apps/style/code-editor.css ================================================ #win-code-editor { display: flex; flex-direction: column; min-height: 0; user-select: all; } #win-code-editor *::-webkit-scrollbar { background-color: #FFFFFF10; } #win-code-editor * { scroll-behavior: initial !important; } #code-ace-editor { font-size: 15px; line-height: 1.4; width: 100% !important; height: 100% !important; font-weight: 200; } ================================================ FILE: apps/style/copilot.css ================================================ #copilot{ position: fixed; right: -410px; background-color: var(--bg70); /* box-shadow: 1px 2px 25px var(--shadow); */ border: 2px solid #6f6f6f30; width: 400px; height: calc(100% - 70px); top: 10px; border-radius: 14px; overflow: hidden; transition: 300ms cubic-bezier(0.9, 0, 0.1, 1); z-index: 92; display: flex; flex-direction: column; padding-top: 5px; } #copilot.show{ right: 10px; box-shadow: 1px 2px 25px var(--shadow); backdrop-filter: blur(60px) saturate(3) contrast(0.6); /* backdrop-filter: blur(80px) saturate(1.3); */ -webkit-backdrop-filter: blur(60px) saturate(3) contrast(0.6); } #copilot>.titbar{ height: 40px; display: flex; align-items: center; padding: 0 10px; min-height: 40px; } #copilot>.titbar>.text{ font-size: 20px; } #copilot>.titbar>.alr{ flex-grow: 1; display: flex; justify-content: flex-end; } #copilot>.titbar>.alr>.btn{ width: 35px; height: 35px; text-align: center; padding: 6px 0; display: block; } #copilot>.chat{ flex-grow: 1; padding: 10px 15px; overflow-y: auto; overflow-x:hidden !important; scroll-behavior: smooth; } #copilot>.chat>.line{ width: 100%; display: flex; margin-top: 15px; } #copilot>.chat>.line.user{ width: 100%; flex-direction: row-reverse; } @keyframes msg{ 0%{ opacity: 0; transform: translateY(20px); } 100%{ opacity: 1; transform: none; } } #copilot>.chat>.line>.text{ width: max-content; padding: 10px 15px; border-radius: 10px; box-shadow: 0 1px 6px var(--shadow); max-width: calc(100% - 40px); word-break:break-word; animation: msg 400ms cubic-bezier(0,0,0,1); user-select:text; } #copilot>.chat>.line.ai>.text{ background-color: var(--msg); } #copilot>.chat>.line.user>.text{ background: linear-gradient(100deg,#3397e9c0,#024bb1d6); color: #fff; } #copilot>.chat>.line.system>.text{ background: linear-gradient(100deg,#ca3ee0b0,#6f0bbcbe); color: #fff; } #copilot>.chat>.line.ai>.text>.action{ background-color: var(--hover-b); padding: 10px 15px; border-radius: 9px; box-shadow: 0 1px 2px var(--s3d); margin: 10px 5px; } #copilot>.chat>.line.ai>.text>.action>.tit{ font-size: 20px; } #copilot>.inputbox{ height: 60px; display: flex; align-items: center; min-height: 60px; } #copilot>.inputbox.disable{ pointer-events:none; filter: saturate(0.8) brightness(0.9); } #copilot>.inputbox>.input{ margin: 0 10px; flex-grow: 1; height: 40px; } #copilot>.inputbox>.send{ width: 80px; color: #fff; text-align: center; margin-right: 10px; background: linear-gradient(120deg,var(--theme-1),var(--theme-2)); } ================================================ FILE: apps/style/defender.css ================================================ #win-defender icon { font-family: SettingsIcons; font-size: 20px; margin: 0px 20px 0 5px; background-image: linear-gradient(100deg, var(--theme-1), var(--theme-2)); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; filter: saturate(130%) brightness(1.1); } .window.defender { --app-bg-dark: #01081f; --app-bg-before: linear-gradient(180deg, rgba(1, 8, 31, 0) 0%, rgba(1, 8, 31, 1) 100%); --app-bg-before-2: linear-gradient(0deg, rgba(1, 8, 31, 0) 0%, rgba(1, 8, 31, 1) 100%); --app-bg-light: #151c32; --app-logo: #3d7eff; --nav-link: #5e6a81; --nav-link-active: #fff; --list-item-hover: #0c1635; --main-color: #fff; --secondary-color: #5e6a81; --color-light: rgba(52, 129, 210, .2); --warning-bg: #ffe5e5; --warning-icon: #ff8181; --applicant-bg: #e3fff1; --applicant-icon: #61e1a1; --close-bg: #fff8e5; --close-icon: #fdbc64; --draft-bg: #fed8b3; --draft-icon: #e9780e; } #win-defender { width: 100%; height: 100%; display: flex; position: relative; max-width: 1680px; } #win-defender .app-left { flex-basis: 240px; background-color: var(--app-bg-dark); height: 100%; overflow-y: auto; overflow-x: hidden; padding: 24px 0; transition: all 0.4s ease-in; } #win-defender .app-left.show { right: 0; opacity: 1; } #win-defender .app-main { flex: 1; height: 100%; overflow-y: auto; overflow-x: hidden; background-color: var(--app-bg-light); padding: 24px; background: radial-gradient(circle, #051340 1%, #040f32 100%); } #win-defender .app-right { flex-basis: 320px; width: 320px; background-color: var(--app-bg-dark); height: 100%; padding: 64px 0 0 0; display: flex; flex-direction: column; position: relative; transition: all 0.4s ease-in; } #win-defender .app-right:before { content: ""; position: absolute; bottom: 0; height: 48px; width: 100%; background-image: var(--app-bg-before); z-index: 1; } #win-defender .app-right.show { right: 0; opacity: 1; } #win-defender .app-right .close-right { display: none; } #win-defender .app-right-content { flex: 1; height: 100%; overflow-y: auto; overflow-x: hidden; } #win-defender .app-logo { display: flex; align-items: center; color: var(--app-logo); margin-right: 16px; padding: 0 24px; } #win-defender .app-logo span { color: #fff; display: inline-block; line-height: 24px; font-size: 16px; margin-left: 16px; } #win-defender ul { list-style-type: none; padding: 0; } #win-defender a { text-decoration: none; cursor: pointer; } #win-defender button { cursor: pointer; } #win-defender .nav-list { margin-top: 40px; } #win-defender .nav-list-item { margin-bottom: 12px; } #win-defender .nav-list-item:not(.active):hover { background-color: var(--list-item-hover); } #win-defender .nav-list-item.active .nav-list-link { color: var(--nav-link-active); } #win-defender .nav-list-item.active .nav-list-link:after { height: 100%; opacity: 1; } #win-defender .nav-list-item.active svg { stroke: var(--app-logo); } #win-defender .nav-list-link { font-weight: 300; font-size: 14px; line-height: 24px; padding: 8px 24px; color: var(--nav-link); display: flex; align-items: center; position: relative; } #win-defender .nav-list-link svg { margin-right: 12px; } #win-defender .nav-list-link:after { content: ""; height: 100%; width: 2px; background-color: var(--app-logo); right: 0; top: 0; position: absolute; border-radius: 2px; opacity: 0; height: 0; } #win-defender .open-right-area { display: none; justify-content: center; align-items: center; border: none; background-color: var(--app-bg-dark); border-radius: 4px; height: 40px; width: 40px; padding: 0; } #win-defender .main-header-line { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; } #win-defender .main-header-line h1 { color: var(--main-color); margin: 0; font-size: 24px; line-height: 32px; } #win-defender .main-header-line input { border-radius: 4px; background-color: var(--color-light); border: none; border: 1px solid var(--color-light); color: var(--main-color); height: 32px; padding: 0 8px 0 32px; font-size: 14px; 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"); background-position: center left 10px; background-repeat: no-repeat; background-size: 16px; outline: none; transition: 0.2s; width: 100%; max-width: 400px; margin-left: 16px; } #win-defender .main-header-line input:placeholder { font-size: 14px; color: rgba(255, 255, 255, 0.6); } #win-defender .main-header-line input:hover, #win-defender .main-header-line input:focus { border: 1px solid #3481d2; box-shadow: 0 0 0 3px var(--color-light); } #win-defender .chart-row { display: flex; justify-content: space-between; margin: 0 -8px; } #win-defender .chart-row.three .chart-container-wrapper { width: 33.3%; } #win-defender .chart-row.three .chart-container-wrapper .chart-container { justify-content: space-between; } #win-defender .chart-row.two .big { flex: 1; max-width: 77.7%; } #win-defender .chart-row.two .big .chart-container { flex-direction: column; } #win-defender .chart-row.two .small { width: 33.3%; } #win-defender .chart-row.two .small .chart-container { flex-direction: column; } #win-defender .chart-row.two .small .chart-container+.chart-container { margin-top: 16px; } #win-defender .line-chart { width: 100%; margin-top: 24px; } #win-defender .chart-container { width: 100%; border-radius: 10px; background-color: var(--app-bg-dark); padding: 16px; display: flex; align-items: center; } #win-defender .chart-container.applicants { max-height: 336px; overflow-y: auto; } #win-defender .chart-container-wrapper { padding: 21px; } #win-defender .chart-info-wrapper { flex-shrink: 0; flex-basis: 120px; } #win-defender .chart-info-wrapper h2 { color: var(--secondary-color); font-size: 12px; line-height: 16px; font-weight: 600; text-transform: uppercase; margin: 0 0 8px 0; } #win-defender .chart-info-wrapper span { color: var(--main-color); font-size: 24px; line-height: 32px; font-weight: 500; } #win-defender .chart-svg { position: relative; max-width: 90px; min-width: 40px; flex: 1; } #win-defender .circle-bg { fill: none; stroke: #eee; stroke-width: 1.2; } #win-defender .circle { fill: none; stroke-width: 1.6; stroke-linecap: round; -webkit-animation: progress 1s ease-out forwards; animation: progress 1s ease-out forwards; } #win-defender .circular-chart.orange .circle { stroke: #ff9f00; } #win-defender .circular-chart.orange .circle-bg { stroke: #776547; } #win-defender .circular-chart.blue .circle { stroke: #00cfde; } #win-defender .circular-chart.blue .circle-bg { stroke: #557b88; } #win-defender .circular-chart.pink .circle { stroke: #ff7dcb; } #win-defender .circular-chart.pink .circle-bg { stroke: #6f5684; } #win-defender .percentage { fill: #fff; font-size: 0.5em; text-anchor: middle; font-weight: 400; } @-webkit-keyframes progress { 0% { stroke-dasharray: 0 100; } } @keyframes progress { 0% { stroke-dasharray: 0 100; } } #win-defender .chart-container-header { display: flex; justify-content: space-between; align-items: center; width: 100%; margin-bottom: 12px; } #win-defender .chart-container-header h2 { margin: 0; color: var(--main-color); font-size: 12px; line-height: 16px; opacity: 0.8; } #win-defender .chart-container-header span { color: var(--app-logo); font-size: 12px; line-height: 16px; } #win-defender .acquisitions-bar { width: 100%; height: 4px; border-radius: 4px; margin-top: 16px; margin-bottom: 8px; display: flex; } #win-defender .bar-progress { height: 4px; display: inline-block; } #win-defender .bar-progress.applications { background-color: #ff7dcb; } #win-defender .bar-progress.shortlisted { background-color: #00cfde; } #win-defender .bar-progress.on-hold { background-color: #fdac42; } #win-defender .bar-progress.rejected { background-color: #ff5c5c; } #win-defender .progress-bar-info { display: flex; align-items: center; margin-top: 8px; width: 100%; } #win-defender .progress-color { width: 10px; height: 10px; border-radius: 50%; margin-right: 8px; } #win-defender .progress-color.applications { background-color: #ff7dcb; } #win-defender .progress-color.shortlisted { background-color: #00cfde; } #win-defender .progress-color.on-hold { background-color: #fdac42; } #win-defender .progress-color.rejected { background-color: #ff5c5c; } #win-defender .progress-type { color: var(--secondary-color); font-size: 12px; line-height: 16px; } #win-defender .progress-amount { color: var(--secondary-color); font-size: 12px; line-height: 16px; margin-left: auto; } #win-defender .applicant-line { display: flex; align-items: center; width: 100%; margin-top: 12px; } #win-defender .applicant-line img { width: 32px; height: 32px; border-radius: 50%; -o-object-fit: cover; object-fit: cover; margin-right: 10px; flex-shrink: 0; } #win-defender .applicant-info span { color: var(--main-color); font-size: 14px; line-height: 16px; } #win-defender .applicant-info p { margin: 4px 0; font-size: 12px; line-height: 16px; color: var(--secondary-color); } #win-defender .profile-box { display: flex; flex-direction: column; align-items: center; position: relative; } #win-defender .profile-box:before { content: ""; position: absolute; top: 100%; height: 48px; width: 100%; background-image: var(--app-bg-before-2); z-index: 1; } #win-defender .profile-photo-wrapper { width: 80px; height: 80px; overflow: hidden; border-radius: 50%; margin-bottom: 16px; } #win-defender .profile-photo-wrapper img { width: 100%; height: 100%; -o-object-fit: cover; object-fit: cover; } #win-defender .profile-text, #win-defender .profile-subtext { font-size: 12px; line-height: 16px; color: var(--secondary-color); margin: 0 0 8px 0; } #win-defender .profile-text { font-weight: 600; } #win-defender .app-right-section-header { display: flex; justify-content: space-between; align-items: center; padding: 0 16px; margin-top: 16px; } #win-defender .app-right-section-header h2 { font-size: 14px; line-height: 24px; color: var(--secondary-color); } #win-defender .app-right-section-header span { display: inline-block; color: var(--secondary-color); position: relative; } #win-defender .app-right-section-header span.notification-active:before { content: ""; position: absolute; width: 6px; height: 6px; border-radius: 50%; background-color: var(--app-logo); top: -1px; right: -1px; box-shadow: 0 0 0 2px var(--app-bg-dark); } #win-defender .message-line { display: flex; align-items: center; padding: 8px 16px; margin-bottom: 8px; } #win-defender .message-line:hover { background-color: var(--list-item-hover); } #win-defender .message-line img { width: 32px; height: 32px; border-radius: 50%; -o-object-fit: cover; object-fit: cover; margin-right: 8px; } #win-defender .message-text-wrapper { max-width: calc(100% - 48px); } #win-defender .message-text { font-size: 14px; line-height: 16px; color: var(--main-color); margin: 0; opacity: 0.8; width: 100%; } #win-defender .message-subtext { font-size: 12px; line-height: 16px; color: var(--secondary-color); margin: 4px 0 0 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; width: 100%; } #win-defender .activity-line { padding: 8px 16px; display: flex; align-items: flex-start; margin-bottom: 8px; } #win-defender .activity-link { font-size: 12px; line-height: 16px; color: var(--app-logo); text-decoration: underline; } #win-defender .activity-text { font-size: 12px; line-height: 16px; color: var(--secondary-color); width: 100%; margin: 0; } #win-defender .activity-text strong { color: #fff; opacity: 0.4; font-weight: 500; } #win-defender .activity-icon { border-radius: 8px; width: 32px; height: 32px; display: flex; justify-content: center; align-items: center; flex-shrink: 0; margin-right: 8px; } #win-defender .activity-icon.warning { background-color: var(--warning-bg); color: var(--warning-icon); } #win-defender .activity-icon.applicant { background-color: var(--applicant-bg); color: var(--applicant-icon); } #win-defender .activity-icon.close { background-color: var(--close-bg); color: var(--close-icon); } #win-defender .activity-icon.draft { background-color: var(--draft-bg); color: var(--draft-icon); } #win-defender .action-buttons { display: flex; align-items: center; } #win-defender .menu-button { width: 40px; height: 40px; margin-left: 8px; display: none; justify-content: center; align-items: center; padding: 0; background-color: var(--app-bg-dark); border: none; color: var(--main-color); border-radius: 4px; } #win-defender .close-menu { position: absolute; top: 16px; right: 16px; display: none; align-items: center; justify-content: center; border: none; background-color: transparent; padding: 0; color: var(--main-color); cursor: pointer; } @media screen and (max-width: 1350px) { #win-defender .app-right { flex-basis: 240px; width: 240px; } #win-defender .app-left { flex-basis: 200px; } } @media screen and (max-width: 1200px) { #win-defender .app-right { position: absolute; opacity: 0; top: 0; z-index: 2; height: 100%; width: 320px; right: -100%; box-shadow: 0 0 10px 5px rgba(1, 8, 31, 0.4); } #win-defender .app-right .close-right { position: absolute; top: 16px; right: 16px; display: flex; align-items: center; justify-content: center; border: none; background-color: transparent; padding: 0; color: var(--main-color); cursor: pointer; } #win-defender .app-main .open-right-area { display: flex; color: var(--main-color); } } @media screen and (max-width: 1180px) { #win-defender .chart-row.two { flex-direction: column; } #win-defender .chart-row.two .big { max-width: 100%; } #win-defender .chart-row.two .small { display: flex; justify-content: space-between; width: 100%; } #win-defender .chart-row.two .small .chart-container { width: calc(50% - 8px); } #win-defender .chart-row.two .small .chart-container.applicants { margin-top: 0; } } @media screen and (max-width: 920px) { #win-defender .menu-button { display: flex; } #win-defender .app-left { position: absolute; opacity: 0; top: 0; z-index: 2; height: 100%; width: 320px; right: -100%; box-shadow: 0 0 10px 5px rgba(1, 8, 31, 0.4); } #win-defender .close-menu { display: flex; } } @media screen and (max-width: 650px) { #win-defender .chart-row.three { flex-direction: column; } #win-defender .chart-row.three .chart-container-wrapper { width: 100%; } #win-defender .chart-svg { min-height: 60px; min-width: 40px; } } @media screen and (max-width: 520px) { #win-defender .chart-row.two .small { flex-direction: column; } #win-defender .chart-row.two .small .chart-container { width: 100%; } #win-defender .chart-row.two .small .chart-container.applicants { margin-top: 16px; } #win-defender .main-header-line h1 { font-size: 14px; } } ================================================ FILE: apps/style/edge.css ================================================ .window.edge.max>#win-edge { padding-bottom: 55px; } #win-edge { display: flex; flex-direction: column; transition: 50ms; } #win-edge>.tool { display: flex; padding: 6px 7px 2px 7px; } #win-edge>.tool>.a { font-size: 18px; border-radius: 6px; width: 35px; height: 30px; text-align: center; transition: 50ms; margin: 0 1.5px; --top:2px; } #win-edge>.tool>.a.disabled { filter: opacity(0.5); pointer-events: none; } #win-edge>.tool>.a>.bi::before { position: relative; top: var(--top); } #win-edge>.tool>.a:hover { background-color: var(--hover-half); } #win-edge>.tool>input { background-color: var(--hover-half); border-radius: 50px; border: 1.5px solid transparent; padding: 3px 14px 4px 10px; outline: medium; color: var(--text); transition: 100ms, border 0s; height: 30px; margin: 0 2px; } #win-edge>.tool>input.url { flex-grow: 1; } #win-edge>.tool>input.rename:not(.show) { width: 0; padding: 0; border: none; } #win-edge>.tool>input.rename.show { width: 200px; } #win-edge>.tool>input:hover { border-color: #7f7f7f7f; } #win-edge>.tool>input:focus { border-color: var(--href); } #win-edge>iframe { width: calc(100% - 4px); flex-grow: 1; margin: 2px; border-radius: 10px; --bg: var(--bg); --text: var(--text); display: none; } #win-edge>iframe.show { display: block; } .reloading>svg { width: 27px !important; } .reloading { margin-right: -5px; margin-bottom: -4px; animation: reload 100ms; } @keyframes reload { 0% { margin-right: -27px; } 100% { margin-right: -5px; } } .reloading>svg>circle:first-child { stroke: #7f7f7f50; fill: none; stroke-width: 2px; } .reloading>svg>circle:last-child { stroke: #2983cc; stroke-width: 2px; } #voiceBall { aspect-ratio: 1; } ================================================ FILE: apps/style/explorer.css ================================================ .window.explorer>.titbar>.tabs>.tab>p>img { width: 25px; height: 25px; margin-right: 5px; } .window.explorer>.titbar>.tabs>.tab>p { display: flex !important; align-items: center; } #win-explorer { display: flex; flex-direction: column; } #win-explorer>.page { display: flex; flex-grow: 1; overflow: hidden; } #win-explorer>.page>.menu { min-width: 250px; height: 100%; overflow-y: auto; margin-right: 6px; padding-right: 2px; } #win-explorer>.page>.menu>.card { margin: 10px 0 10px 15px; border-radius: 8px; background-color: var(--card); padding: 4px; box-shadow: 0 1px 2px 1px var(--s3d); } #win-explorer>.page>.menu>.card>.title { padding: 6px 10px; font-weight: 550; } #win-explorer>.page>.menu>.card>list>a { padding: 4px 5px 4px 20px; font-size: 15px; border-radius: 7px; transition: 100ms; display: flex; height: 30px; align-items: center; } #win-explorer>.page>.menu>.card>list>a.check { background-color: var(--hover) !important; } #win-explorer>.page>.menu>.pinned>list>a>img { width: 18px; height: 18px; /* margin-top: 2px; */ margin-right: 5px; } #win-explorer>.page>.menu>.tags>list>a>span:first-child { width: 13px; height: 13px; margin-left: 4px; /* margin-top: 4px; */ margin-right: 7px; border-radius: 50%; box-shadow: 0 0 5px var(--shadow); } #win-explorer>.page>.main { flex-grow: 1; height: 100%; display: flex; flex-direction: column; overflow: hidden; padding-left: 2px; } #win-explorer>.page>.main>.tool { width: 100%; height: 42px; display: flex; padding: 0 10px 5px 10px; margin-top: 3px; align-items: center; } #win-explorer>.page>.main>.tool>.b { height: 33px; padding: 6px 8px; border-radius: 7px; transition: 100ms; margin: 0 1px; } #win-explorer>.page>.main>.tool>.b.t { display: flex; align-items: center; font-size: 15px; } #win-explorer>.page>.main>.tool>.b.t>img { display: flex; margin-right: 5px; } #win-explorer>.page>.main>.tool>.b:hover { background-color: var(--hover); } #win-explorer>.page>.main>.tool>.b>img { width: 20px; height: 20px; } #win-explorer>.page>.main>.tool>.hr { width: 2px; height: 25px; background-color: #7f7f7f7f; border-radius: 10px; margin: 5px 3px; } #win-explorer>.page>.main>.content { width: calc(100% - 15px); flex-grow: 1; background-color: var(--card); border-radius: 8px; margin: 0 15px 10px 0; padding: 13px 10px 40px 10px; overflow-y: auto; /* border: 1.5px solid #6f6f6f30; */ box-shadow: 0 1px 2px 1px var(--s3d); } #win-explorer>.path { height: 35px; width: 100%; display: flex; padding: 4px 10px 0 10px; align-items: center; /* margin-bottom: 10px; */ } #win-explorer>.path>.front.disabled, #win-explorer>.path>.back.disabled { filter: opacity(0.5); pointer-events: none; } #win-explorer>.path>.btn { transition: 100ms; font-size: 17px; text-align: center; padding-top: 4px; min-width: 33px; } #win-explorer>.path>.tit { overflow: hidden; display: flex; /* background-color: var(--bg70); */ flex-grow: 1; margin: 0px 10px 0px 5px; border-radius: 7px; height: 32px; /* align-items: center; */ } #win-explorer>.path>.tit>img { width: 22px; height: 22px; margin-top: 2px; } #win-explorer>.path>.tit>.path { display: flex; align-items: center; overflow-y: hidden; /* flex-grow: 1; */ width: calc(100% - 35px); } #win-explorer>.path>.tit>.path::-webkit-scrollbar { height: 2px; } #win-explorer>.path>.tit>.path::-webkit-scrollbar-thumb { background: #7f7f7f70; background-clip: padding-box; border: 0px solid transparent; border-radius: 10px; } #win-explorer>.path>.tit>.path>* { display: block; height: 100%; white-space: nowrap; } #win-explorer>.path>.tit>.path>.arrow { opacity: 0.4; font-size: 14px; line-height: 1; height: 14px; margin: 0 4px; } #win-explorer>.path>.tit>.path>.text { padding: 2px 5px; height: min-content; border-radius: 5px; font-size: 15px; transition: 50ms; } #win-explorer>.path>.tit>.path>.text:hover { background-color: var(--hover); } #win-explorer>.path>.tit>.path>.text:active { opacity: 0.8; } #win-explorer>.path>.tit>.icon { width: 25.6px; margin-top: -1px; margin-left: 3px; margin-right: 5px; background-size: contain; background-position: 50% 50%; background-repeat: no-repeat; } #win-explorer>.path>.search { min-width: 170px; width: 26%; max-width: 400px; } #win-explorer>.path>.search>* { float: right; } #win-explorer>.path>.search>.input { white-space: nowrap; text-overflow: ellipsis; } #win-explorer>.path>.search>input-before { margin-top: 4px; margin-right: -23px; } #win-explorer>.page>.main>.content>.view { width: 100%; height: max-content; display: flex; flex-direction: column; } #win-explorer>.page>.main>.content>.view>.info { color: #888; text-align: center; } #win-explorer>.page>.main>.content>.view>.item { width: 100%; padding: 2px 5px; border-radius: 5px; display: flex; border: 1.5px solid transparent; font-size: 14px; align-items: center; height: 30px; transition: 50ms; } :root.corner_squ #win-explorer>.page>.main>.content>.view>.item { corner-shape: squircle; border-radius: 14px; } #win-explorer>.page>.main>.content>.view>.item:active { /* transform: scale(0.99); */ /* transform-origin: bottom; */ opacity: 0.7; } #win-explorer>.page>.main>.content>.view>.item>img { width: 25px; height: 25px; margin-right: 5px; } #win-explorer>.page>.main>.content>.view>.item.file>img { width: 22px; height: 22px; margin-left: 2px; margin-right: 7px; } #win-explorer>.page>.main>.content>.view>.item:hover { background-color: var(--hover); /* border: 1.5px solid #6f6f6f30; */ box-shadow: 0 1px 2px var(--s3d); } #win-explorer>.page>.main>.content>.view>.item>.input { border-radius: 5px; /* background: none; */ font-size: 14px; border-width: 2px; } :root.corner_squ { #win-explorer>.page>.menu>.card, #win-explorer>.page>.main>.content { corner-shape: squircle; border-radius: 18px; } #win-explorer>.page>.main>.content>.view>.group>.item{ corner-shape: squircle; border-radius: 25px; } } ================================================ FILE: apps/style/imgviewer.css ================================================ #win-imgviewer { display: flex; justify-content: center; align-items: center; background: #1e1e1e; overflow: hidden; height: 100%; } #win-imgviewer>.preview-img { max-width: 100%; max-height: 100%; object-fit: contain; } ================================================ FILE: apps/style/login.css ================================================ #loginback { width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; flex-direction: column; background-image: url('../../img/login.jpg'); background-size: cover; background-repeat: no-repeat; background-position: 50% 50%; transition: filter 500ms, background-color 500ms, opacity 1500ms ease-in-out; position: absolute; width: 100%; height: 100%; opacity: 0; display: none; z-index: 101; } #login { background-color: #eeeeee40; width: 100px; padding: 5.5px 8px; color: #fff; border-radius: 6px; font-size: 15.8px; text-align: center; border: 3px solid #00000000; transition: 50ms; margin-bottom: -40px; z-index: 1; } #login:hover { border-color: #ffffff50; transition: 50ms; } #login:active { filter: brightness(2); scale: 0.97; border-color: #00000000; background-color: #eeeeee70; transition: 80ms; } #login-welc{ height: 100px; display: flex; flex-direction: column; align-items: center; } #loginback>div.user { width: 150px; height: 150px; border-radius: 100%; background-image: url("../../icon/user.svg"); background-size: 65% 65%; background-position: 50% 50%; background-repeat: no-repeat; margin-bottom: 10px; background-color: #ddd; transition: filter 500ms; margin-top: -35px; } #loginback>div.name { color: #fefefe; font-size: 30px; font-family: Arial, Helvetica, sans-serif; margin-bottom: 15px; transition: color 500ms; } #loginback.close, #loginback.close>div.user { filter: brightness(0); /* backdrop-filter: brightness(0); */ } #loginback.close>div.name, #loginback.close #login-after { color: #000 !important; } #loginback.close { background-color: black; } #loginback .power { display: flex; position: absolute; bottom: 20px; right: 20px; /* width: 165px; */ /* justify-content: space-evenly; */ color: #fff; align-items: center; } #loginback .power>* { cursor: pointer; transition: 100ms; font-size: 30px; display: flex; justify-content: center; align-items: center; padding: 7px; border-radius: 7px; } #loginback .power>*:hover { background-color: #ffffff30; } #loginback .power>*:active { opacity: 0.7; } #loginback>.langselect{ position: absolute; bottom: 80px; right: 10px; } #loginback>.langselect>*{ padding: 4px 18px; } #loginback>.langselect>.selected{ pointer-events: none; font-weight: bold; } ================================================ FILE: apps/style/mediaplayer.css ================================================ #win-mediaplayer { display: flex; justify-content: center; align-items: center; background: #0e0e0e; height: 100%; overflow: hidden; } #win-mediaplayer>video { max-width: 100%; max-height: 100%; outline: none; } #win-mediaplayer>audio { width: 80%; } #win-pdfviewer { height: 100%; overflow: hidden; } ================================================ FILE: apps/style/msstore.css ================================================ @font-face { font-family: StoreIcons; src: url("../icons/msstore/icons.ttf"); } /* I love CSS! */ #win-msstore { display: grid; grid-template-columns: 80px auto; & icon { font-family: StoreIcons; } &>.menu { & .m-icon { color: transparent; -webkit-text-stroke: 2px #000; } &>list { margin-left: 5px; overflow-y: auto; padding-right: 10px; border-radius: 6px; height: 100%; & icon { font-size: 1.8em; margin-bottom: 0px; line-height: 1.1; transition: all 500ms; } & .t2 { font-size: 0.7em !important; color: var(--text2); transition: all 500ms; overflow: hidden; opacity: 1.0; } &>a { padding: 5px 10px; height: 59px !important; display: flex; flex-direction: column; justify-content: center; align-items: center; margin-bottom: 4px; border-radius: 6px; transition: all 500ms; overflow: hidden; position: relative; &.check { background-color: var(--hover) !important; & icon { font-size: 2.3em; background-image: linear-gradient(to right bottom, var(--theme-1), var(--theme-2)); -webkit-background-clip: text; background-clip: text; color: #00000022; } & .t2 { opacity: 0.0; margin-bottom: -20px; } } } &>span.focs { height: 26px; margin-top: -47px; } } } &>.page { background-color: var(--bg50); border-radius: 10px 0px 0px 0px; &>.cnt { transition: transform 300ms cubic-bezier(0, 0, 0, 1), opacity 300ms 50ms, height 0ms, padding 0ms; transform: translate(0, 50%); opacity: 0; height: 0px; padding: 0px; overflow: hidden; &.show { height: 100%; transform: none !important; opacity: 1; overflow-y: auto; min-height: 0px; } &.home { &>.container { height: 100%; display: grid; grid-template-rows: auto min-content; padding: 0px 15px 30px 15px; &>.apps { &>.tit { margin-left: 30px; font-size: 1.6em; line-height: 1.5; } &>.app-cards { display: grid; grid-template-columns: auto auto auto; grid-template-rows: auto auto auto; &>* { background-color: var(--hover); margin: 10px; border-radius: 10px; padding: 14px; display: flex; &>.left { width: 70px; height: 70px; background: initial; } &>.right { width: 100%; &>.tit { width: 100%; &>.up { width: 100%; display: flex; align-items: center; justify-content: space-between; &>.type { font-size: 0.85em; padding: 4px 8px; border-radius: 5px; background-color: var(--fill); color: var(--text2); } } } } } } } } } } } } .m-icon { font-family: StoreIcons; } ================================================ FILE: apps/style/notepad.css ================================================ #win-notepad{ overflow: hidden; } #win-notepad>.tool{ width: 100%; height: 35px; padding-top: 5px; margin-bottom: 2px; } #win-notepad>.text-box{ border-radius: 10px 10px 0px 0px; /* width: 100%; */ border: none; background-color: var(--card); opacity: 0.8; transform: translate(0,8px); outline: none; box-shadow: 0 -3px 5px var(--s3d); padding: 10px; resize: none; font-size: 15px; line-height: 1.25; color: var(--text); height: calc(100% - 35px); transition: 200ms; margin: 0 10px; } #win-notepad>.text-box *:not(div):not(br){ border-radius: 8px; outline: 2px solid transparent; transition: 100ms; display: block; } #win-notepad>.text-box *:not(div):not(br):focus{ background: red; } #win-notepad>.text-box *:not(div):not(br):hover{ outline-color: #2983cc; } #win-notepad>.text-box:focus{ transform: none; opacity: 1; box-shadow: 0 -5px 7px var(--s3d); } #win-notepad>.text-box::selection{ background: #2983cc; color: #ddd; } #win-notepad>.text-box.down{ transform: translate(0,100%); } #win-notepad>.tool>a{ border-radius: 10px; margin: -5px 0 0 5px; text-align: center; padding: 3px 5px; display: inline-block; transition: 100ms; } #win-notepad>.tool>a:hover{ background-color: var(--hover); } #win-notepad>.tool>.notepad-md-toggle.active{ background-color: var(--hover-b); } #win-notepad>.md-preview{ border-radius: 10px 10px 0px 0px; border: none; background-color: var(--card); opacity: 0.8; outline: none; box-shadow: 0 -3px 5px var(--s3d); padding: 20px 25px; font-size: 15px; line-height: 1.6; color: var(--text); height: calc(100% - 35px); margin: 0 10px; overflow-y: auto; transform: translate(0,8px); } #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;} #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;} #win-notepad>.md-preview h3{font-size: 1.17em;font-weight: 600;margin: 1em 0;} #win-notepad>.md-preview h4{font-size: 1em;font-weight: 600;margin: 1.33em 0;} #win-notepad>.md-preview p{margin: 0.5em 0;} #win-notepad>.md-preview code{background: var(--hover-b);padding: 2px 6px;border-radius: 4px;font-family: Consolas, monospace;font-size: 0.9em;} #win-notepad>.md-preview pre{background: var(--hover-b);padding: 12px 16px;border-radius: 8px;overflow-x: auto;margin: 0.8em 0;} #win-notepad>.md-preview pre code{background: none;padding: 0;} #win-notepad>.md-preview blockquote{border-left: 4px solid var(--theme-1);padding: 4px 16px;margin: 0.8em 0;opacity: 0.85;} #win-notepad>.md-preview ul,#win-notepad>.md-preview ol{padding-left: 2em;margin: 0.5em 0;} #win-notepad>.md-preview li{margin: 0.25em 0;} #win-notepad>.md-preview a{color: var(--theme-1);text-decoration: underline;} #win-notepad>.md-preview table{border-collapse: collapse;margin: 0.8em 0;} #win-notepad>.md-preview th,#win-notepad>.md-preview td{border: 1px solid var(--hover-b);padding: 6px 12px;} #win-notepad>.md-preview th{background: var(--hover-b);font-weight: 600;} #win-notepad>.md-preview img{max-width: 100%;border-radius: 6px;} #win-notepad>.md-preview hr{border: none;border-top: 1px solid var(--hover-b);margin: 1em 0;} #win-notepad-font>.row { display: flex; justify-content: space-around; height: 266px; } .select-input { display: inline-block; height: 200px; } .select-input#win-notepad-font-type { width: 200px; } .select-input#win-notepad-font-size { width: 80px; } .select-input#win-notepad-font-style { width: 90px; } .select-input#win-notepad-font-style>.value-box{ padding: 5px; } /* #win-notepad-font-size { vertical-align: top; } */ .select-input>input[type=text] { outline: none; width: 100%; background-color: rgba(255, 255, 255, 0.3); border-radius: 10px 10px 0px 0px; border: 2px solid #7f7f7f40; background: var(--card); border-bottom: none; color: var(--text); padding: 3px 6px; /* box-shadow: 2px 2px 5px var(--shadow); */ } .select-input>.description { margin-left: 3px; } .select-input>.value-box { width: 100%; height: 100%; border: 2px solid #7f7f7f40; background: var(--card); border-radius: 0px 0px 10px 10px; border-style: solid; overflow-y: auto; overflow-x: hidden; /* background-color: rgba(255, 255, 255, 0.3); */ /* box-shadow: inset 0px 4px 2.5px var(--shadow); */ display: block; padding: 5px 0 5px 5px; /* box-shadow: 2px 2px 5px var(--shadow); */ } .select-input>.value-box>.option { padding: 3px 7px; } /* .select-input>.value-box>.option { padding: 3px; width: 100%; } */ #win-notepad-font .preview { display: inline-block; width: 150px; height: 150px; margin: 5px 10px;; } #win-notepad-font .preview>.preview-box { display: flex; width: 150px; flex-direction: column; justify-content: center; align-items: center; word-break: keep-all; height: 150px; text-align: center; border: 2px solid #7f7f7f40; background: var(--card); border-width: 2px; overflow: hidden; border-radius: 10px; line-height: 1.25; } ================================================ FILE: apps/style/pythonEditor.css ================================================ #win-pythonEditor *::-webkit-scrollbar { background-color: #FFFFFF10; } ::-webkit-scrollbar:hover { background-color: #ffffff10; } #win-pythonEditor *{ scroll-behavior:initial !important; } #win-pythonEditor { display: grid; grid-template-rows: 60% 40%; min-height: 0px; user-select: all; } .window.pythonEditor .titbar .run { font-size: 17px; padding-top: 4px; } #win-python-ace-editor { font-size: 16px; line-height: 1.25; height: 100% !important; font-weight: 200; } #win-pythonEditor .output { background-color: #0f0f0f; color: #f8f8f2; border: 25px solid #1a1a1a !important; border: none; /* border-radius: 5px; */ padding: 10px; width: 100%; height: 100%; font: 14px / normal 'Consolas', 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'Source Code Pro', 'source-code-pro', monospace; overflow-y: scroll; white-space: pre-wrap; word-wrap: break-word; user-select: auto; } #win-pythonEditor .output::selection { background: #ddd; background-clip: content-box; color: #333; } /* 编辑器 */ .ace_editor.ace_autocomplete.ace_dark.ace-vibrant-ink{ border-radius: 8px; box-shadow: 1px 1px 10px #000; } .ace_autocomplete .ace_layer.ace_marker-layer>.ace_active-line{ border-radius: 5px; background-color: #ffffff30 !important; } .ace_autocomplete .ace_layer.ace_marker-layer>.ace_line-hover{ border-radius: 5px; background: #ffffff20; border-color: var(--href); transition: 100ms; } .ace_autocomplete .ace_layer.ace_text-layer>.ace_line{ padding: 0px 6px; } .ace_autocomplete .ace_layer.ace_text-layer>.ace_line>.ace_completion-highlight{ color: var(--theme-1); } .ace_tooltip{ border-radius: 8px; box-shadow: 1px 1px 10px #000; background-color: #26282c !important; border: 1px #484747 solid; padding: 5px 8px; } ================================================ FILE: apps/style/recognition.css ================================================ .rainbow-container-main { font-size: 11vmin; display: flex; } .draggable { width: 100px; height: 30px; position: absolute; cursor: move; z-index: 98; } .no-drag { cursor: default; } .rainbow-container { z-index: 1; transform: rotate(0deg) translateZ(0); transform-origin: center center; width: 1em; height: 1em; border: 1px solid rgba(255, 255, 255, 0.4); -webkit-animation: rainbow 3s infinite linear; border-radius: 0.5em; box-shadow: 0 0 0.3em 0.05em #2c116e, inset 0.03em 0 0.1em 0.02em #de66e4; transform-style: preserve-3d; perspective: 1em; } @keyframes rainbow { 0% { transform: rotate(0deg) translateZ(0); box-shadow: 0 0 0.3em 0.05em #2c116e, inset 0.03em 0 0.1em 0.02em #de66e4; } 25% { transform: rotate(90deg) translateZ(0); box-shadow: 0 0 0.3em 0.05em #28126a, inset 0.03em 0 0.1em 0.02em #34ceaa; } 50% { transform: rotate(180deg) translateZ(0); box-shadow: 0 0 0.3em 0.05em #28126a, inset 0.03em 0 0.1em 0.02em #19b3f5; } 75% { transform: rotate(270deg) translateZ(0); box-shadow: 0 0 0.3em 0.05em #28126a, inset 0.03em 0 0.1em 0.02em #3d52ac; } 100% { transform: rotate(360deg) translateZ(0); box-shadow: 0 0 0.3em 0.05em #28126a, inset 0.03em 0 0.1em 0.02em #de66e4; } } .rainbow-container { position: relative; } .rainbow-container > div { position: absolute; top: 0.1em; left: 0.1em; width: 0.8em; height: 0.8em; border-radius: 50%; } .rainbow-container .green { background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0) 60%, rgba(115, 213, 186, 0.8) 100%); transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 0); animation: curve-rotate-green 6s infinite linear; } .rainbow-container .pink { background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0) 50%, rgba(215, 115, 229, 0.8) 100%); transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 0); animation: curve-rotate-pink 3s infinite linear; } @-webkit-keyframes curve-rotate-green { 0% { transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 0deg); } 50% { transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 180deg); } 100% { transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 360deg); } } @-moz-keyframes curve-rotate-green { 0% { transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 0deg); } 50% { transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 180deg); } 100% { transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 360deg); } } @-o-keyframes curve-rotate-green { 0% { transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 0deg); } 50% { transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 180deg); } 100% { transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 360deg); } } @keyframes curve-rotate-green { 0% { transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 0deg); } 50% { transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 180deg); } 100% { transform: rotateY(0) skew(14deg) rotate3d(1.1, 1, 0.9, 360deg); } } @-webkit-keyframes curve-rotate-pink { 0% { transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 0deg); } 50% { transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 180deg); } 100% { transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 360deg); } } @-moz-keyframes curve-rotate-pink { 0% { transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 0deg); } 50% { transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 180deg); } 100% { transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 360deg); } } @-o-keyframes curve-rotate-pink { 0% { transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 0deg); } 50% { transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 180deg); } 100% { transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 360deg); } } @keyframes curve-rotate-pink { 0% { transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 0deg); } 50% { transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 180deg); } 100% { transform: rotateY(180deg) skew(14deg) rotate3d(1.1, 1, 0.9, 360deg); } } .footer { position: fixed; bottom: 1em; right: 1em; font-size: 12px; font-style: italic; color: white; } .footer a { color: white; } ================================================ FILE: apps/style/run.css ================================================ #win-run { display: flex !important; flex-direction: column; } #win-run>.top { display: flex; padding: 10px; } #win-run>.top>.icon { min-width: 70px; background-image: url('../../icon/run.svg'); background-position: 50% 50%; background-repeat: no-repeat; background-size: contain; margin-right: 10px; } #win-run>.top>.text { font-size: 15px; line-height: 1.2; } #win-run>.open { display: flex; gap: 15px; padding: 10px 20px 10px 20px; } #win-run>.open>input { flex-grow: 1; width: auto !important; } #win-run>.open>.prompt { margin-top: 3px; } ================================================ FILE: apps/style/setting.css ================================================ @font-face { font-family: SettingsIcons; src: url(../icons/setting/icons.woff2) format("woff2") } #win-setting>.page>.cnt>.title { font-size: 29px; padding: 10px 5px 10px 5px; display: block; margin: 0; } .s-icon { font-family: SettingsIcons; } #win-setting { display: flex; } #win-setting>* { height: 100% } #win-setting>.page { flex-grow: 1 } #win-setting>.menu { width: 30% !important; overflow: hidden; min-width: 280px; /* max-width: 30%; */ padding: 3px 5px 5px 15px; } #win-setting>.menu>.user { display: flex; padding: 10px 10px; border-radius: 10px; margin-bottom: 10px; /* transition: 200ms; */ align-items: center; } :root.corner_squ #win-setting>.menu>.user { corner-shape: squircle; border-radius: 25px; } #win-setting>.menu>.user:hover { background-color: var(--hover); } #win-setting>.menu>.user>div>p:first-child { font-size: 19px; margin-bottom: -7px; } #win-setting>.menu>.user>div>p:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 15px; } #win-setting>.menu>.user>div { padding: 0px 0 0 10px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } #win-setting>.menu>.user>svg { background-color: var(--hover-b); /* box-shadow: 0 0 10px var(--shadow); */ width: 60px; min-width: 60px; height: 60px; border-radius: 50%; padding: 11px; } #win-setting>.menu>list { padding-bottom: 50px !important; margin-left: 5px; margin-top: 50px; height: calc(100% - 138px); overflow-y: auto; padding-right: 10px; border-radius: 6px; } #win-setting>.menu>list>a { padding: 5px 10px 5px 20px; font-size: 15px; display: flex; margin-bottom: 4px; border-radius: 6px; } #win-setting>.menu>list>a:not(.enable) { /* transform: none !important; */ filter: contrast(0.6) opacity(0.3); pointer-events: none; } #win-setting>.menu>list>a.enable:not(.avlb) { filter: opacity(0.5) !important; } #win-setting>.menu>list>a>p { margin: 5px 7px; } #win-setting>.menu>list>a>img { height: 20px; width: 20px; margin: 1px 10px 0 0; } #win-setting>.menu>list>a.check { background-color: var(--hover) !important; } #win-setting>.page { overflow: hidden; padding-left: 15px; padding-right: 5px; margin: 2px 0 0 0; } #win-setting>.page>.cnt { overflow-y: scroll; opacity: 0; height: 0; transition: transform 300ms cubic-bezier(0, 0, 0, 1), opacity 300ms 50ms, height 0ms; transform: translate(0, 50%); } #win-setting>.page>.cnt.show { height: 100%; transform: none; opacity: 1; display: block; } .setting-card { background: var(--card); border-radius: 10px; margin-bottom: 10px; } :root.corner_squ .setting-card { corner-shape: squircle; border-radius: 25px; } .setting-card>.setting-list { padding-bottom: 5px; padding: 20px; } .setting-list { display: flex; flex-direction: column; padding: 0 5px 60px 5px; margin-bottom: 0; border-radius: 10px; width: 100%; } .setting-list>* { width: 100%; color: var(--text); background: var(--card); margin-bottom: 7px; border-radius: 8px; /* border: 1.5px solid #6f6f6f30; */ box-shadow: 0 1px 2px 0px var(--s3d); text-decoration: none; display: flex; padding: 10px 15px; justify-content: center; /* box-shadow: 0 1px 2px 1.5px var(--s3d); */ transition: 100ms; justify-content: space-around; border: 2px solid #00000000; background-clip: padding-box; align-items: center; } :root.corner_squ .setting-list>* { corner-shape: squircle; border-radius: 20px; } .setting-list>a:hover { text-decoration: none; background-color: var(--hover); border-color: var(--hover); } .setting-list>a:active { filter: opacity(0.75); } .setting-list>a.dp { margin-bottom: 1px; z-index: 1; } .setting-list>a.dp.show { /* border-bottom: none; */ border-bottom-left-radius: 0 !important; border-bottom-right-radius: 0 !important; margin-bottom: 1px; box-shadow: 0 0.5px 1px 1px var(--s3d); } .setting-list>a.dp>.bi::before { transition: 150ms; } .setting-list>a.dp:active>.bi::before { transform: scale(0.7); } .setting-list>a.dp.show:active>.bi::before { transform: scale(0.7) rotate(-180deg); } .setting-list>a.dp.show>.bi::before { transform: rotate(-180deg); } .setting-list>div.dp { border-top: none; border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; max-height: 0; transition: max-height 300ms, padding 300ms 100ms, opacity 200ms; overflow: hidden; display: block; padding: 0 15px; opacity: 0; margin:0 0 6px 0; box-shadow: none; } .setting-list>div.dp.show { padding: 10px 15px; transition: max-height 300ms, padding 200ms 50ms, opacity 200ms 100ms; max-height: 1000px; opacity: 1; box-shadow: 0 1px 2px 1px var(--s3d); } .checkbox { width: 40px; height: 20px; border-radius: 10px; background: linear-gradient(90deg, var(--hover-b), var(--hover-b)); transition: 200ms; } .checkbox::before { content: ''; display: block; height: 16px; width: 16px; border-radius: 8px; background: #fff; position: relative; top: 2px; left: 2px; transition: 100ms; transform: scale(0.8); } .checkbox.checked { background: linear-gradient(90deg, var(--theme-1), var(--theme-2)); } .checkbox.checked::before { left: 22px; } .checkbox:hover::before { transform: none; } .checkbox:active::before { width: 20px; } .checkbox.checked:active::before { left: 18px; } div.app-color .color { width: 30px; height: 30px; border-radius: 8px; margin: 3px 0 0 5px; outline: none; border: none; padding: 0; transition: 200ms; } div.app-color .act.color:active { transform: scale(0.8); } div.app-color input[type=color] { width: 0; height: 0; overflow: hidden; border: none; padding: 0; outline: none; margin: 0; } .setting-list>*>icon { font-family: SettingsIcons; font-size: 20px; margin: 10px 20px 10px 5px; background-image: linear-gradient(100deg, var(--theme-1), var(--theme-2)); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; filter: saturate(130%) brightness(1.1); } .setting-list>*>icon.b { font-family: bootstrap-icons; } .setting-list>*>div>p:first-child { font-size: 19px; margin: 3px 0 0 0; } .setting-list>*>div>p:last-child { font-size: 10px; color: #7f7f7f; margin-bottom: 0px; } .setting-list>*>.bi, .setting-list>*>.alr { flex-grow: 1; color: #7f7f7f; font-size: 20px; } .setting-list>*>.alr>* { float: right; margin-right: 20px; } .setting-list>*>.bi::before { position: relative; float: right; right: 5px; } #set-theme { display: flex; flex-wrap: wrap; justify-content: left; } #set-theme>.a { width: 100px; height: 100px; border-radius: 10px; } #set-theme>.a { background-size: cover; color: #fff; text-shadow: 1px 1px 3px #000; text-align: right; padding: 3px 8px; box-shadow: 1px 1px 5px var(--shadow); margin: 7px 7px 0 0; } #set-theme>.a:hover { filter: brightness(1.3) saturate(1.3); } #set-theme>.a:active { opacity: 0.75; } #win-setting>.page>.cnt.update>.lo>#svg5{ width: 80px; margin: 15px 20px 30px 20px; } #win-setting>.page>.cnt.update>.lo{ display: flex; align-items: center; } #win-setting>.page>.cnt.update>.lo div{ flex-grow: 1; font-size: 20px; padding: 20px 5px; } #win-setting>.page>.cnt.update>.lo div>.detail{ flex-grow: 1; font-size: 14px; color: #7f7f7f; } #win-setting>.page>.cnt.update>.lo>.update-main { display: flex; justify-content: center; } #win-setting>.page>.cnt.update>.lo>.update-main>div { display: flex; align-items: center; } #win-setting>.page>.cnt.update>.lo>.update-main>div:first-child { flex-direction: column; align-items: flex-start; } #win-setting>.page>.cnt.update>.lo>.update-main>div:last-child { justify-content: flex-end; } #win-setting>.page>.cnt.update .disabled { opacity: 0.5; pointer-events: none; } .blueteeth-tips-text{ font-size:8px; } .setting-user-svg{ width: 100px; height: 100px; background-color: var(--hover-b); /* box-shadow: 0 0 10px var(--shadow); */ width: 60px; min-width: 60px; height: 60px; border-radius: 50%; padding: 11px; margin-right: 15px; margin-bottom: 15px; } /* 时间 必须样式 @Junchen Yi 2023-9-16 */ .selectLanguageA{ min-height: 67px; display: flex; align-items: center; justify-content: flex-start; filter: opacity(1); } .languageSelect { width: 130px; height: 30px; text-align: left; border-radius: 12px; background: var(--card); color: var(--text); position: absolute; right: 40px; margin-right: -20px; } .languageSelect option { /* 添加样式,例如设置字体颜色和背景颜色 */ color: var(--text); background-color: #fff; padding: 5px; } .settingTimeItem{ margin-left: 30px; margin-bottom: 20px; display: flex; flex-direction: row; flex-wrap: nowrap; align-content: center; justify-content: flex-start; align-items: center; } .settingTime{ font-size: 28px; } /* 时间 必须样式 end @Junchen Yi 2023-9-16 */ ================================================ FILE: apps/style/taskmgr.css ================================================ @font-face { font-family: t-icon; src: url('../icons/taskmgr/icons.ttf'); } .t-icon { font-family: t-icon; } #win-taskmgr { display: grid; grid-template-columns: 280px auto; transition: grid-template-columns 200ms; /* 左侧菜单 */ &>.menu { /* 选项卡列表 */ &>list.focs { margin: 0px 15px 0px 5px; position: relative; height: 100%; &>a { padding: 5px 20px; font-size: 15px; display: flex; gap: 10px; margin-bottom: 3px; overflow: hidden; &>p { overflow-x: auto; display: flex; align-items: center; } &.check { background-color: var(--hover); } } } /* 折叠按钮 */ &>.fold { padding: 5px 20px; margin-left: 5px; display: block; border-radius: 7px; max-width: 58px; margin-bottom: 3px; transition: 80ms, transform 400ms cubic-bezier(0.14, 1.02, 0.17, 0.03) !important; &:hover { color: var(--text); background-color: var(--hover-half); text-decoration: none; box-shadow: 0 1px 2px var(--s3d); } &:active { transform: scale(0.93); filter: opacity(0.75); } } } /* 右侧内容区 */ &>.main { max-height: 100%; min-height: 0px; background-color: var(--bg70); padding: 15px; border-radius: 10px 0px 0px 0px; /* 页面 */ &>.cnt { transition: transform 300ms cubic-bezier(0, 0, 0, 1), opacity 300ms 50ms, height 0ms, padding 0ms; transform: translate(0, 50%); opacity: 0; height: 0px; padding: 0px; overflow: hidden; &>.tit { font-size: 1.2em; } &.show { height: 100%; transform: none !important; opacity: 1; overflow-y: auto; min-height: 0px; } /* 进程页面 */ &.processes { &.show { display: flex; flex-direction: column; } /* 表格 */ &>table { width: 100%; border-spacing: 0px; table-layout: fixed; & th { font-weight: normal !important; font-size: 0.78em; vertical-align: bottom; /* border-left: 1px solid black; */ border-right: 1px solid var(--hr); border-bottom: 1px solid var(--hr); color: var(--text2); padding: 0px 10px; position: relative; &>i { position: absolute; left: 6%; top: 10%; } &>.value { font-size: 1.45em !important; color: var(--text) !important; } &.align-right { text-align: right; width: 95px; transition: background-color 80ms; } &.power { width: 120px; } } & td { border-right: 1px solid var(--hr); padding: 4px 10px; height: 25px; /* line-height: 2; */ &>* { display: inline-block; } & .icon { width: 21px; height: 21px; vertical-align: -5px; margin: 0px 8px; background-size: contain; background-position: 50% 50%; background-repeat: no-repeat; display: inline-block; } &>.text { text-overflow: ellipsis; overflow: hidden; line-clamp: 1; -webkit-line-clamp: 1; display: -webkit-inline-box; -webkit-box-orient: vertical; vertical-align: -5px; /* width: 100%; */ } } & tr.select { background-color: var(--hover); } } } } } } #win-taskmgr>.main>.cnt.processes>table th.align-right:hover { background-color: var(--hover); } #win-taskmgr>.main>.cnt.processes>table tr:not(.title):hover { background-color: var(--hover); } #win-taskmgr>.main>.cnt.processes>table tr { transition: background-color 200ms; } #win-taskmgr>.main>.cnt.processes>table tr.notrans { transition: none !important; } #win-taskmgr>.main>.cnt.performance>.content { display: grid; grid-template-columns: 320px auto; height: 100%; min-height: 0px; } #win-taskmgr>.main>.cnt.performance>.content>.select-menu { margin-right: 20px; max-height: 100%; overflow: auto; } #win-taskmgr>.main>.cnt.performance>.content>.select-menu>* { border-radius: 10px; padding: 12px; margin: 10px 0px; transition: 80ms, transform 400ms cubic-bezier(0.14, 1.02, 0.17, 0.03) !important; display: grid; grid-template-columns: 120px auto; gap: 10px; } #win-taskmgr>.main>.cnt.performance>.content>.select-menu>*:hover { background-color: var(--hover-half); } #win-taskmgr>.main>.cnt.performance>.content>.select-menu>*:active { transform: scale(0.95); } #win-taskmgr>.main>.cnt.performance>.content>.select-menu>*>.right>.tit { font-size: 1.4em; } #win-taskmgr>.main>.cnt.performance>.content>.select-menu>*>.right>.data>* { display: -webkit-inline-box; box-orient: vertical; -webkit-box-orient: vertical; line-clamp: 1; -webkit-line-clamp: 1; text-overflow: ellipsis; overflow: hidden; } #win-taskmgr>.main>.cnt.performance>.content>.select-menu>*>.left { height: 100%; } #win-taskmgr>.main>.cnt.performance>.content>.select-menu>*>.left>* { height: 100%; width: 100%; border: 1px solid; } #win-taskmgr>.main>.cnt.performance>.content>.select-menu>*>.left>.graph-view-cpu { border-color: #2983cc; } #win-taskmgr>.main>.cnt.performance>.content>.select-menu>*>.left>.graph-view-memory { border-color: #660099; } #win-taskmgr>.main>.cnt.performance>.content>.select-menu>*>.left>.graph-view-disk { border-color: #008000; } #win-taskmgr>.main>.cnt.performance>.content>.select-menu>*>.left>.graph-view-wifi { border-color: #8e5829; } #win-taskmgr>.main>.cnt.performance>.content>.select-menu>*>.left>.graph-view-gpu { border-color: #2983cc; } #win-taskmgr>.main>.cnt.performance>.content>.select-menu>.check { background-color: var(--hover); } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph { max-height: 100%; overflow: auto; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>* { transition: transform 300ms cubic-bezier(0, 0, 0, 1), opacity 300ms 50ms, height 0ms; transform: translate(0, 50%); opacity: 0; height: 0px; overflow-y: hidden; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.show { /* display: grid !important; */ /* grid-template-rows: max-content auto max-content; */ height: 100%; transform: none !important; opacity: 1; overflow-y: visible; display: flex; flex-direction: column; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.tit { display: flex; justify-content: space-between; align-items: center; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.graph-msg { display: flex; justify-content: space-between; color: var(--text2); font-size: 0.8em; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.graph-msg.top { margin-top: 10px; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.graph-msg.bottom { margin-bottom: 10px; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.graph, #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.graph2 { /* margin: 20px 0px; */ position: relative; min-height: 120px; height: 100%; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.minor { height: 50px !important; min-height: 50px !important; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.graph>*, #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.graph2>*, #win-taskmgr>.main>.cnt.performance>.content>.performance-graph .graph-gpu svg { width: 100%; height: 100%; position: absolute; top: 0px; left: 0px; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.tit>.left-name { font-size: 2em; display: inline-block; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.tit>.right-message { display: inline-block; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.information { display: grid; grid-template-columns: auto 300px; gap: 20px; font-size: 0.85em; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.information>.left { display: flex; flex-wrap: wrap; gap: 15px; align-items: flex-start; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.information>.left>*>.top { font-size: 0.8em; color: var(--text2); } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.information>.left>*>.value { font-size: 1.44em; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>*>.information>.right>table>tbody>tr>td:first-child { color: var(--text2); padding-right: 20px; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-gpu>.graphs { position: relative; display: grid; grid-template-columns: 50% 50%; grid-template-rows: 50% 50%; height: 100%; min-height: 350px; gap: 10px; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-gpu>.graphs>* { display: flex; flex-direction: column; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-gpu>.graphs>*>.title-gpu { margin-bottom: 10px; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-gpu>.graphs>*>.chart { position: relative; width: 100%; height: 100%; } #win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-gpu>.graphs>* canvas { position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; } ================================================ FILE: apps/style/terminal.css ================================================ .window.terminal-apps { --text: #ddd; --bg: #000000; --bg50: #00000060; --bg70: radial-gradient(rgba(26, 31, 53, 0.96) 25%, rgba(32, 32, 32, 0.96) 100%); --shadow: #000000a0; --card: #72727240; --hover: #aaaaaa40; --hover-half: #ffffff20; --hover-b: #eeeeee0f; --bggrey: #444; --fill:#54545470; --mm: #ffffff50; --contextmeu: #252525bb; --bar: #7272722a; --hr:#333; --unfoc:#202020; --msg:#303030d0; --bd:#ffffff06; --s3d:#11111160; --mica: linear-gradient(140deg,#2d161c,#102d53); } .window.terminal-apps.max>.content { padding-bottom: 55px !important; } .window.terminal-apps>.content { overflow-y: auto !important; overflow-x: hidden !important; padding-bottom: 10px; } .window.terminal-apps>.content>pre { color: #ddd; margin: 0px 15px; font-family: "Consolas", "Monaco", "monospace", system-ui; user-select: text; font-size: 16px; } .window.terminal-apps>.content * { white-space: break-spaces; } .window.terminal-apps>.content *::selection { background: #ddd; background-clip: content-box; color: #333; } .window.terminal-apps>.content>pre>input { background: none; border: none; outline: none; padding: 0; color: #eee; cursor: default; width: 100%; } .window.terminal-apps>pre>input::selection { background: #ddd; background-clip: content-box; color: #333; } ================================================ FILE: apps/style/whiteboard.css ================================================ #win-whiteboard>canvas { background-color: #ffffff88; } :root.dark #win-whiteboard>canvas { background-color: #aaaaaa88; } .window.whiteboard.max>#win-whiteboard>.toolbar { bottom: 60px; } .window.whiteboard.max>#win-whiteboard>.toolbar>.tools { border-radius: 10px !important; } #win-whiteboard>.toolbar { display: flex; justify-content: center; align-items: center; position: absolute; bottom: 0px; width: 100%; transition: bottom 200ms; } #win-whiteboard>.toolbar>.tools { display: flex; border-radius: 10px 10px 0px 0px; justify-content: space-evenly; box-shadow: 0px 0px 10px 3px #00000066; padding: 0px 15px 0px 15px; overflow: hidden; transition: border-radius 200ms; background-color: #ffffff88; } :root.dark #win-whiteboard>.toolbar>.tools { background-color: #aaaaaa88; } #win-whiteboard>.toolbar>.tools>* { margin: 3px 3px 0px 3px; transition: background-color 70ms, top 100ms; border-radius: 10px 10px 0px 0px; position: relative; top: 13.5px; } #win-whiteboard>.toolbar>.tools>.active { top: 6px; background-color: #00000020; } #win-whiteboard>.toolbar>.tools>.eraser, #win-whiteboard>.toolbar>.tools>.delete { width: 76px; display: flex; justify-content: center; padding-top: 5px; } #win-whiteboard>.toolbar>.tools>*:not(.active):hover { background-color: #00000015; } ================================================ FILE: apps/style/word.css ================================================ @font-face { font-family: StoreIcons; src: url("../icons/msstore/icons.ttf"); } #win-word { display: flex; height: 100%; } #win-word>.app-left{ max-width: 125px; min-width: 125px; height: 100%; margin-right: 5px; margin-left: 5px; } #win-word>.app-main { width: 100%; height: 100%; background-color: var(--card); border-radius: 8px 0 0 0; } #win-word>.app-main>* { margin-left: 24px; } #win-word>.app-main>.input { width: 512px !important; margin-bottom: 12px; } #win-word>.app-left>.focs>.home { height: 125px !important; padding: 0px !important; display: flex; justify-content: center; align-items: center; flex-direction: column; margin-bottom: 8px; } #win-word>.app-left>.focs>.back { height: 75px !important; padding: 0px !important; display: none; justify-content: last; align-items: center; gap: 16px; margin-bottom: 8px; } #win-word>.app-left>.focs>.check { background-color: var(--hover) !important; } #win-word>.app-left>.focs>.home>*{ display: block; max-width: 125px; min-width: 125px; font-size:24px; text-align: center; margin: 0; } #win-word>.app-left>.focs>.back>*{ display: block; font-size:24px; margin-left: 12px; } #win-word>.app-left>.focs{ height: 100% !important; } #win-word>.app-main { padding: 12px 12px 0 12px; } #win-word>.app-main>.card-list { width: 100%; display: flex; gap: 8px; } #win-word>.app-main>.card-list>.card { height: 250px !important; padding: 0px !important; width: 150px; display: flex; flex-wrap: wrap; justify-content: center; color: var(--text); transition: 80ms !important; border-radius: 16px; } #win-word>.app-main>.card-list>.card:hover { background-color: var(--hover) !important; } #win-word>.app-main>.card-list>.card>img { height: 175px !important; width: 125px !important; border-radius: 8px; margin: 12.5px; background-color: var(--contextmeu); } .office-icon { font-family: StoreIcons; } .window.word>.pages>.home { height: 100%; position: absolute; left: 150%; opacity: 0; visibility: hidden; width: 100%; 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); } .window.word>.pages>*.show { height: 100%; left: 0 !important; right: 0 !important; position: relative !important; opacity: 1 !important; visibility: visible !important; } .window.word>.pages>.edit { position: absolute; width: 100%; height: 100%; left: 150%; opacity: 0; visibility: hidden; 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); } .window.word>.pages>.edit>.content { overflow:auto; width: 100%; height: calc(100% - 225px); } .window.word>.pages>.edit>.content>.doc { aspect-ratio: 1/1.414; width: 60%; background-color: var(--contextmeu); color: var(--text); margin: auto; padding: 64px; border:none; outline:none; margin-bottom: 24px; overflow: hidden; } .window.word>.pages>.edit>.content>.doc>.table { width: 100%; min-height: 300px; max-height: 900px; height: auto; } .window.word>.pages>.edit>.content>.doc>.table>tr { min-height: 300px; } .window.word>.pages>.edit>.content>.doc>.square { height: 100px; width: 100px; background-color: #646464; } .window.word>.pages>.edit>.ribbon { height: 150px; width: 100%; } .window.word>.pages>.edit>.ribbon>.tab { height: 28px; margin-top: 8px; margin-left: 8px; margin-bottom: 8px; width: 100%; display: flex; gap: 8px; } .window.word>.pages>.edit>.ribbon>.tab>.tab-selected { background-color: #2c579b; height: 2.5px; width: 24px; border-radius: 8px; position:absolute; left: 62px; top: 32px; } .window.word>.pages>.edit>.ribbon>.tab>a { border-radius: 8px; transition: all 80ms; padding: 4px; } .window.word>.pages>.edit>.ribbon>.tab>a:hover { background-color: #88888836; } .window.word>.pages>.edit>.ribbon>.items { box-shadow: 0px 2.5px 2.5px #88888836; height: 100px; width: calc(100% - 16px); margin: auto; border-radius: 8px; background-color: var(--card); display: flex; gap: 4px; align-items: center; } .window.word>.pages>.edit>.ribbon>.items>.item { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; height: 100%; width: 64px; border-radius: 8px; transition: all 0.1s; } .window.word>.pages>.edit>.ribbon>.items>.item:hover { background-color: #88888836; } .window.word>.pages>.edit>.ribbon>.items>.item>p { width: calc(100% - 12px); text-align: center; font-size:medium; } .window.word>.pages>.edit>.ribbon>.items>.item>i { text-align: center; font-size: xx-large !important; } .window.word>.pages>.edit>.ribbon>.tab>h3 { margin-top: 0; margin-bottom: 0; } .window.word>.pages { height: 100%; } ================================================ FILE: base.css ================================================ body { margin: 0; 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; font-size: 1rem; font-weight: 400; line-height: 1.5; color: #212529; text-align: left; background-color: #fff; } *, ::after, ::before { box-sizing: border-box; } html { touch-action: none; font-family: sans-serif; line-height: 1.15; -webkit-text-size-adjust: 100%; -webkit-tap-highlight-color: transparent; } html * { touch-action: auto; } pre { font-family: monospace; } hr { box-sizing: content-box; height: 0; overflow: visible; unicode-bidi: isolate; margin-block-start: 0.5em; margin-block-end: 0.5em; margin-inline-start: auto; margin-inline-end: auto; border: 0; border-top: 1px solid rgba(0,0,0,.1); } [type=button], [type=reset], [type=submit], button { -webkit-appearance: button; appearance: button; } button, select { text-transform: none; } button, input { overflow: visible; } button, input, optgroup, select, textarea { margin: 0; font-family: inherit; font-size: inherit; line-height: inherit; } button { appearance: auto; writing-mode: horizontal-tb !important; text-rendering: auto; letter-spacing: normal; word-spacing: normal; line-height: normal; text-transform: none; text-indent: 0px; text-shadow: none; display: inline-block; text-align: center; align-items: flex-start; cursor: default; box-sizing: border-box; background-color: -internal-light-dark(rgb(239, 239, 239), rgb(59, 59, 59)); margin: 0em; padding: 1px 6px; border-width: 2px; border-style: outset; border-color: buttonborder; border-image: initial; } a:-webkit-any-link { cursor: pointer; text-decoration: none; } ================================================ FILE: bios.html ================================================ Windows 12 BIOS Setup

Save configuration changes and exit now?

System Time:
[11:45:14]
System Date:
[11/4/5141]
BIOS Version:
Win12 BIOS v1.0.0
Processor:
The Wandering Earth (R) NB (R) Quantum Chip 550W @ 8192
Memory Size:
100 GB
CPU Configuration
Memory Configuration
Boot Configuration
Security Configuration
Exit Saving Changes
Exit Discarding Changes
Restore Defaults
================================================ FILE: bluescreen.html ================================================ Windows 12 网页版

.

.

)

你的设备遇到问题,需要重启。
我们只假装收集某些错误信息,然后为你重新蓝屏。

0% 完成

有关此问题的详细信息和可能的解决方案,请访问
https://www.windows.com/stopcode

如果致电支持人员,请向他们提供以下信息:
终止代码: YOU_MAY_DID_NOT_STAR_THIS_PROJECT

================================================ FILE: boot.html ================================================ Windows 12 Web Version

Starting


Press F2 or touch screen to enter SETUP

================================================ FILE: bootstrap-icons.css ================================================ @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"} ================================================ FILE: changelog.md ================================================ # 更新记录 ## v1.0.0~v7.4.2 >[!NOTE] > *v7.4.2之后的更新记录请前往“关于 Windows 12 网页版”应用内查看*
v7.4.2 AI Copilot 3.0!

  -(更新来自@NB-Group)
  -笑死,昨天刚修好就又寄了,这次的船新版本绝对稳定,(理论上)再也不会寄

v7.4.1 AI Copilot 2.0!

  -(更新来自@NB-Group)
  -修复了ai无法使用的问题

v7.4.0 AI Copilot!

  -(更新来自@NB-Group)
  -去掉一些奇怪的东西
  -经过我114年的开发,AI Copilot 2.0诞生了!
  -开源了AI后端的代码
  -细节优化和修复

v7.3.7 细节更改

  -加入一些奇怪的东西
  -细节优化和修复

v7.3.6 语音识别球

  (更新来自@NB-Group)
  -增加语音识别球
  -细节优化和修复

v7.3.5 整顿代码

  -整顿代码,贡献者必须按本文件开头以及CONTRIBUTING.md的规范编辑代码,否则不予合并,感谢理解
  -重绘新增的一些图标
  -细节优化和修复

v7.3.4 Edge更新

  (更新来自@lh11117)
  -Edge 支持全屏
  -Edge 支持收藏夹

v7.3.3 细节优化

  细节优化

v7.3.2 细节更改

  (更新来自 @tjy-gitnub )
  -新增了部分本地化语言功能
  -更新壁纸
  -优化样式
  -优化shutdown命令
  -其他更新与优化
  -修复了点击标签页无法切换焦点的问题
  -各位可以抽时间去看看README.md,一些特殊情况

v7.3.1 Bug修复与细节优化

  -删除changelog.md中重复的字(更新来自 @ZigaoWang )
  -修复BIOS无法正确访问的问题(更新来自 @ludonghengsb )

v7.3.0 桌面小组件、Dock自动隐藏、计算器完善和Windows 更新

  (更新来自 @User782Tec )
  -新增了桌面小组件,可将小组件添加到桌面并调整位置
  -新增了编辑模式,可快捷编辑小组件的位置,并提供了相关的快捷入口
  -新增了窗口全屏且Dock不在使用时自动隐藏的功能
  -为Microsoft Edge浏览器和文件资源管理器新增了后退/前进的功能
  -又双叒叕优化计算器的精度问题与安全性问题
  -重写更新机制,并完善 Windows 更新
  -修复了文件资源管理器中右键文件失效的问题
  -修复了文件资源管理器中无法正确显示文件夹中文件的问题
  -更换了Python Editor的图标
  -完善了开源说明
  -其他细节与修复

v7.2.1 README更新、“关于”应用显示实时Star数量、个性化设置支持保存

  (更新来自 @lh11117 )
  -README更新
  -“关于”应用显示实时Star数量
  -个性化设置支持保存

v7.2.0 优化运行、添加Windows12应用、添加WSA

  (更新来自 @lh11117 )
  -优化运行
  -添加Windows12应用
  -添加WSA
  -添加shutdown命令
  -添加BIOS系统
  -支持桌面图标删除
  -更丰富的文件目录
  -任务管理器支持置顶

v7.1.0 计算器进一步修复、离线页面的深色模式

  (更新来自 @lh11117)
  -进一步修复了计算器精度缺陷和接受输入非法内容的问题
  -为Microsoft Edge浏览器的离线界面添加了深色模式版本
  -其他一些细节修复

v7.0.2 计算器修复

  (更新来自 @cong1223 和 @iewnfod)
  -修复计算器计算加减乘除、平方、平方根等运算的精度问题(来自 @cong1223)
  -只允许calc-input输入数字(来自 @iewnfod)

v7.0.1 资源管理器标签页、离线界面与新闻

  -文件资源管理器的标签页(来自 @tjy-gitnub)
  -新增了Microsoft Edge浏览器的离线界面(来自 @User782Tec)
  -新增新闻(来自 @Nick-DL)
  -优化部分UI
  -细节优化和修复

v7.0.0 AI助手,新增多个应用与功能

  -Windows 12 AI Copilot(@NB-Group提供api, @tjy-gitnub魔改)
  -任务管理器(由 @User782Tec 提供)
  -安全中心(由 @NB-Group 提供)
  -适配文件系统(由 @NB-Group 提供)(别问我为啥现在才出,要问问@NB-Group)
  -窗口云母(Mica)效果(由 @tjy-gitnub 提供,在设置中启用)
  -文件资源管理器导航栏(由 @User782Tec 提供)
  -任务管理器小组件(由 @User782Tec 提供)
  -全新壁纸(由 @tjy-gitnub 提供)
  -新增新闻(来自 @for-the-zero)
  -修复了终端的灾难性bug
  -优化部分UI
  -细节优化和修复

v6.0.0 文件系统,窗口大小,天气小组件,任务栏小组件

  -新增文件系统(由 @NB-Group 之后提供)
  -窗口大小调整功能(由 @User782Tec 提供)
  -保存桌面布局(由 @User782Tec 提供)
  -天气小组件(由 @tjy-gitnub 提供)
  -小组件添加到任务栏(由 @tjy-gitnub 提供,目前仅支持天气小组件)
  -引入全新提示框(由 @tjy-gitnub 提供)
  -新的反馈通道
  -修复了有时开机动画不能正确显示的问题
  -修复了登录界面不显示的问题
  -适配新的主题格式,加速预览图显示
  -细节优化和修复

v5.4.2 灾难性程序错误修复

  -修复pwa将主题获取请求拦截的重大灾难性事故
  -细节优化和修复

v5.4.1 bug修复

  (更新来自 @tjy-gitnub)
  -修复pwa将动态请求拦截的灾难性事故
  -调整大家梦寐以求的开始菜单滚动条
  -新增开始菜单固定项右键取消固定选项
  -适配主题格式的一些更改
  -细节优化和修复

v5.4.0 新版logo与图标,UI优化,自定主题与winver

  (更新来自 @tjy-gitnub,其实我想发v6的)
  -新Logo:新版logo
  -新图标:重绘替换了win11的图标
  -自定主题:支持用户更改和上传自己的主题
  -版本信息:新增winver
  -新UI:加入win11的悬停立体高亮
  -启动优化:加快速度,修复本地因获取电量失败无法启动的问题
  -UI适配:稍稍更改了不适配的UI
  -Bug修复:右键菜单无法关闭
  -代码优化:对某些重复代码整理归纳,引入应用的初始化load配置
  -细节优化和修复

v5.3.1 问题修复

  更新来自 @User782Tec
  -修复了样式不正常的问题
  -修复了部分情况下Edge浏览器中加载动画圆圈位置不正确的问题
  -修复了开始菜单无法滚动的问题
  -修复了控制面板的样式问题

v5.3.0 触控设备适配、“运行”应用、“白板”应用、控制中心与细节修复

  更新来自 @NB-Group 和 @User782Tec
  -新增“运行”应用,可根据输入内容运行命令、打开文件夹或访问网站
  -新增白板应用,可进行作画并保存
  -新增控制中心,可调整显示器亮度
  -新增了右键点击任务栏图标后可以关闭应用的功能
  -新增了将应用固定到开始菜单的功能
  -新增了在Edge浏览器中获取网页标题的功能(此项更新由@NB-Group提供后端,@User782Tec完善前端)
  -适配触控设备在Edge浏览器中进行标签页拖动排序操作
  -修复了Edge浏览器中标签页拖动排序功能中计算位置不正确等的问题
  -修复了部分情况下Edge浏览器中加载动画圆圈位置不正确的问题
  -修复了部分情况下终端不能正常运作的问题(详见由NebulaTechs提出的Issue#87)
  -修复了部分情况下Edge浏览器中无法正确显示标签页的问题
  -其他一些更改
  -格式化部分文档

v5.2.4 Python编辑器

  更新来自 @NB-Group
  -新增 Python 编辑器应用,编辑器自带自动补全,代码高亮和运行功能。

v5.2.3 登录界面优化和Python解释器

  更新来自 @NB-Group 和 @User782Tec
  -改进了登录界面,增加锁定壁纸及电源操作
  -兼容开发环境,在本地开发时不启用缓存和PWA
  -新增了Python解释器(此项更新由@NB-Group提供灵感与框架,@User782Tec完善)
  -修复了终端选择不正常的问题
  -改进了终端,可通过应用标识符来打开应用
  -格式化部分文档

v5.2.2 细节优化

  -对相机外观和代码进行了优化
  -添加登录背景,一些外观优化
  -开源许可的完善
  -一些优化和修复
  -吊一下胃口:v6将使用全新图标(壁纸?),支持自定义主题 >_-)o

v5.2.1 登录界面,开机音效和细节优化

  更新来自 @User782Tec
  -为网站添加Favicon和标题
  -Edge浏览器中,超出标签页范围的文字将会被隐藏以避免文字溢出的问题
  -微调Edge浏览器中加载动画的位置
  -新增了开机音效和登录界面
  -格式化部分文档

v5.2.0 相机应用及细节修复

  更新来自 @User782Tec
  -新增“相机”应用,支持拍照功能
  -优化焦点控制,关闭焦点窗口后,焦点会转移至下面一个窗口,更加符合原生体验
  -计算器优化,优化符号及输入
  -修复桌面批量选择框在左上角出现蓝点的问题
  -修复部分情况下标题栏不显示的问题
  -优化窗口布局
  -修正部分非标准CSS特性
  -格式化部分文档

v5.1.2 细节修复和更改

  -修复关于加载失效的问题
  -设置加载圈圈为主题色
  -添加刷新圈圈动画
  -优化窗口拖拽代码
  -其它一些更改
  -提示:在github项目页的一些公告

v5.1.1 网页加载动画与新增应用

  更新来自 @User782Tec
  -优化了桌面文件拖拽选择选择
  -Edge浏览器中网页加载时的标签页动画
  -增加了点击窗口图标后弹出菜单的功能(部分触控设备不能触发上下文菜单)
  -增加应用 VSCode 与 哔哩哔哩
  -其它: 格式化文档和修复

v5.1.0 标签页拖动排序与云母效果

  -标签页:可拖动标签页排序(仅桌面端)
  -云母效果(试验):在设置中启用并按"用法"操作
  -其它:细节优化和修复

v5.0.2 贡献与Edge标签页

  -贡献:关于应用新增贡献者数据
  -新标签页:对深色模式的适配,较高安全限制浏览器的适配
  -标签页:新增标签页关闭动画
  -兼容性:系统控件的防误触
  -其它:细节优化和修复

v5.0.1 漏洞修复

更新由 @User782Tec 提供
  -修复了 issues #67中的问题
  -修复了关闭所有Edge浏览器中的标签页后仍保留Edge浏览器的问题
  -完善Edge浏览器内输入内容的正则表达式匹配
  -略微修改Edge浏览器中输入框
  -新标签页
  -细节优化和修复

v5.0.0 新增Edge

🎉🎉项目在Github上突破✨100✨stars✨啦!🎊🎈
  -新增:Microsoft Edge应用(可以在Edge应用中提出反馈与建议,谢谢)
  -新增:桌面拖动选择框(没什么大用)
  -返璞归真:取消列表悬停效果
  -丰富:在文件资源管理器中添加了一些文件
  -精简:减小动画数量和幅度
  -修复:关于记事本的另存为问题
  -彩蛋:你发现动态壁纸了吗?
  -其它:细节优化和修复

v4.3.0 其实我想发布成5.0版的

  -搜索菜单重新设计
  -列表悬停立体效果(全局,深色模式可能会明显一点,灵感源于win11,大家可以帮忙找一个浅色模式的边框颜色)
  -新增鼠标悬停提示框(全局)
  -记事本全新设计与功能(向Word努力)
  -计算器新样式
  -新增多开亚克力设置
  -关于应用更新记录动画
  -文件资源管理器的新动画
  -桌面图标点击效果
  -修复设置的小竖条位置问题
  -新闻
  -细节优化和修复

v4.2.0 外观整改

  -新的计算器外观
  -卡片外观优化
  -设置新增菜单前面的小竖线
  -右键菜单阴影特效
  -细节优化和修复

v4.1.0 新的设置项,新背景

  -在设置中添加开关特效的选项
  -背景添加阴影效果
  -设置的一些动画效果
  -一些外观优化
  -细节优化和修复

v4.0.0 记录用户偏好,动画更新,新壁纸,分屏

  -记录用户偏好设置(更新后不保留) @xqwcom
  -没错又是动画更新
  -开始/任务栏/右键菜单/列表/切换等全面动画升级
  -新壁纸(好看吗?)
  -拖动窗口至左右边缘分屏
  -细节优化和修复

v3.9.0 新增主题色设置功能,布局优化

  更新部分来源 @User782Tec 的pr
  -新增系统主题色设置功能
  -记事本字体选择布局优化
  -"关于"应用的改进
  -细节优化和修复

v3.8.0 记事本字体,窗口焦点逻辑改善

  更新主要来源 @User782Tec 的pr
  -详见pull中的详细
  -窗口焦点逻辑改善
  -细节优化和修复

v3.7.0 窗口最大化完善,让颜色更"喜庆"一点

  更新部分来源 @User782Tec 的pr
  -增加最大化窗口下拖还原功能
  -最大化窗口还原后保留之前的位置
  -让系统的色调更"喜庆"一点
  -增加 @iamkezo1 提供的新闻
  -压缩背景图片加速
  -禁用缩放
  -细节优化和修复

v3.6.1 Windows12新年特别版

  -增加主题色控制功能
  -测试新的更新机制
  -细节优化和修复

v3.6.0 更新机制改进,新增office和终端

  -使用新的更新机制,更新速度提升
  -新增终端应用
  -新增Office
  -修改关机后黑屏而不是白屏
  -更新记录仅显示最近的,优化速度
  -细节优化和修复

v3.5.0 窗口层级和焦点控制

  -增加了窗口层级的控制
  -非焦点窗口关闭模糊效果以提速
  -新增 @Planet-xu 提供的新闻
  -修复了下拉菜单停留的问题 @Samtjs
  -细节优化和修复

v3.4.1 移动端适配

  -适配了移动端的双(改成单击)
  -适配了移动端的拖动窗口
  -优化任务栏按钮点击效果
  -更改右键菜单样式
  -下拉菜单悬停展开
  -细节优化和修复

感谢 @User782Tec

v3.4.0 动画优化

  -别问我为什么动画占一个新版
  -基本上所有动画都进行了更新优化
  -修复了上个版本没删完的标题栏问题
  -修改了开始菜单的图标
  -细节优化和修复

v3.3.0 增加计算器小组件

  -增加了计算器小组件
  -修复了小组件新闻图片无法加载的问题
  -移除了上一个版本的新窗口标题栏
  -在一些图标按钮上悬停鼠标显示提示
  -去除了所有链接的左下角链接提示
  -细节优化和修复

v3.2.0 增加小组件菜单

  -增加了小组件(资讯和兴趣)菜单
  -小组件菜单中的新闻内容
  -小组件按钮动画效果
  -应用窗口标题栏样式新增
  -对计算器的计算代码的精简
  -细节优化和修复

v3.1.0 增加文件浏览功能,一些新功能

  -文件资源管理器浏览功能
  -对PWA更新的优化
  -文件资源管理器右键菜单
  -增加应用启动的加载动画
  -增加应用启动初始化
  -记事本新增"编辑"菜单
  -下拉菜单整体优化
  -右键菜单优化
  -在输入框中允许浏览器的右键菜单
  -双击窗口标题栏最大化
  -细节优化和修复

v3.0.0 桌面图标、记事本、可安装到电脑

  -可以在Edge、Chrome等主流浏览器中将Win12安装为pwa应用¹
  -新增桌面图标,并增加桌面右键菜单"刷新"功能
  -可以将开始菜单应用右键添加到桌面
  -新增"记事本"应用
  -新的深色模式切换按钮
  -改进了窗口的外观
  -细节优化和修复
1: 正常会有安装的提示,会在链接栏右上角,安装后可离线使用,有网会自动更新。感谢 @dzc120223 的建议

v2.3.1 bug修复、外观优化

  -修复了拖动窗口图标触发拖拽事件的错误
  -修复了其它拖拽图片的错误
  -右键菜单的外观优化
  -深色模式的可读性优化
  -细节优化和修复

v2.3.0 开始外观优化、日历菜单、任务栏图标动画

  -开始菜单外观优化、更加松散
  -新增任务栏中的日历菜单
  -任务栏图标添加动画效果
  -窗口最小化动画优化
  -右键菜单的完善
  -细节优化和修复

v2.2.0 开始、搜索按钮动画,右键菜单优化,新列表点击效果

  -开始、搜索按钮新增点击动画
  -优化右键菜单
  -桌面右键菜单新增
  -新的列表点击效果
  -任务栏动画效果优化
  -细节优化和修复

v2.1.1 更多右键菜单,win10主题列表悬停效果

  -在开始、任务栏、更新消息支持更多右键菜单
  -右键菜单超出界面的优化
  -列表win10悬停效果
  -点击或右击消息可在窗口中查看详细
  -修复了时间无法显示星期日的问题
  -细节优化

v2.1.0 右键菜单,细节优化更改

  -在窗口标题、桌面、开始菜单支持右键菜单
  -在其它元素上禁用右键菜单
  -列表点击根据鼠标位置偏移
  -新增更新消息图标
  -修复了按钮点击缩小效果不正常显示的问题
  -修复了更新消息在开机前显示的问题
  -细节优化

v2.0.0 深色主题、更新提示、新点击效果、拖至顶部最大化

  -支持深色模式
  -在每次更新后显示更新提示
  -去除原 win10 主题点击、悬停动画
  -新的列表项点击动画
  -将窗口拖至顶部最大化
  -优化开始菜单固定项点击效果

v1.1.4 动画优化、显示时间

  -优化窗口最大最小化动、开始、搜索等动画
  -计算器外观优化
  -"准备"深色主题😏
  -在开始菜单中显示当前的时间
  -一些细节优化

v1.1.3 列表 悬停、点击 效果

  -在开始菜单、设置、关于、文件资源管理器、计算器中使用新的列表悬停、点击效果
  -在任务栏、关于中使用主题色(蓝紫渐变)
  -任务栏应用圆角优化
  -增加任务栏右下角托盘(未完全实现)
  -使启动时不显示鼠标,更加逼真

v1.1.2 外观优化

  -透明效果改善
  -在所有应用中使用主题色(蓝紫渐变)
  -Dock(任务)栏圆角优化
  -在设置中使用新的头像
  -加速窗口动画,更加贴近原生

v1.1.1 外观优化,修复了一些 Bug

  -外观优化,阴影增加
  -修复了开始、搜索菜单关闭时高度会闪一下的问题
  -开始菜单用户头像美化
  -修复了"关于"应用切换标签时文字改变导致动画流畅的问题
  -使页面不能滚动,更加逼真

v1.1.0 增加最小化功能,图标美化

  -新增最小化窗口功能
  -图标部分美化
  -开始、搜索按钮点击动画美化
  -修复计算器 "𝑥²" 键无效的问题
  -修复窗口打开并最大化后最小化不正常的问题
  -修复多次打开应用任务栏显示错误的问题
  -简化js关于拖动窗口的代码

v1.0.1 Bug和一些错别字

  上传了才发现有 Bug 😅

v1.0.0 计算器功能增加,优化体验与开始菜单,新增关于应用

  -使开始菜单和搜索窗口在高度不足的页面中更好地显示,页面高度过小也可能显示不全,还是建议使用电脑
  -计算器增加平方与开方功能
  -开始菜单中不可用应用用灰色显示,更加简洁方便
  -新增 "关于Win12网页版" 应用,包含关于本项目的说明和历史更新记录
  -优化开始菜单和搜索窗口的显示动画
  -优化电脑端按钮的体验

================================================ FILE: data/disconnected.html ================================================ Windows 12 网页版 - 网络连接问题解决方案
你似乎未连接到网络

Web 因你而不同。让我们帮你重新联机!

请尝试以下方法:

  • 检查网络电缆、调制解调器和路由器
  • 重新连接到无线网络

错误代码:ERR_INTERNET_DISCONNECTED。
错误说明:该错误表示您的设备已与互联网断开连接。请检查您的网络连接设备,如网线是否插好,Wi-Fi 是否连接正常,或移动网络是否开启,以确保您的设备能够正常访问互联网。

================================================ FILE: data/disconnected_dark.html ================================================ Windows 12 网页版 - 网络连接问题解决方案
你似乎未连接到网络

Web 因你而不同。让我们帮你重新联机!

请尝试以下方法:

  • 检查网络电缆、调制解调器和路由器
  • 重新连接到无线网络

错误代码:ERR_INTERNET_DISCONNECTED。
错误说明:该错误表示您的设备已与互联网断开连接。请检查您的网络连接设备,如网线是否插好,Wi-Fi 是否连接正常,或移动网络是否开启,以确保您的设备能够正常访问互联网。

================================================ FILE: data/tasks.js ================================================ let taskmgrTasks = [ { name: '任务管理器', icon: 'icon/taskmgr.png', link: 'taskmgr' }, { name: 'Whiteboard', icon: 'icon/whiteboard.png', link: 'whiteboard' }, { name: '相机', icon: 'icon/camera.svg', link: 'camera' }, { name: '哔哩哔哩客户端', icon: 'icon/bilibili.png', link: 'bilibili' }, { name: 'Microsoft Edge', icon: 'icon/edge.svg', link: 'edge' }, { name: 'WebView2运行时组件' }, { name: '设置', icon: 'icon/setting.svg', link: 'setting' }, { name: 'Python Editor(Python程序编辑器)', icon: 'icon/pythonEditor.svg', link: 'pythonEditor' }, { name: '计算器', icon: 'icon/calc.svg', link: 'calc' }, { name: '文件资源管理器', icon: 'icon/explorer.svg', link: 'explorer' }, { name: '关于Windows12', icon: 'icon/about.svg', link: 'about' }, { name: '记事本', icon: 'icon/notepad.svg', link: 'notepad' }, { name: '终端', icon: 'icon/terminal.svg', link: 'terminal' }, { name: 'Microsoft Word Preview', icon: 'icon/word.svg', link: 'word' }, { name: 'Visual Studio Code', icon: 'icon/vscode.png', link: 'vscode' }, { name: 'System' }, { name: 'Windows内存处理系统进程' }, { name: '应用层网关服务' }, { name: 'DCOM DLL Host进程' }, { name: 'Windows内存处理系统进程' }, { name: '应用层网关服务' }, { name: 'Client/Server Runtime Server Subsystem' }, { name: 'DirectDraw Helper' }, { name: 'DCOM DLL Host进程' }, { name: 'IIS Admin Service Helper' }, { name: 'Input Locales' }, { name: 'Windows壳进程' }, { name: '本地安全权限服务' }, { name: 'Machine Debug Manager' }, { name: '多媒体支持进程' }, { name: 'Windows路由进程' }, { name: 'Windows信使服务' }, { name: 'Windows计划任务' }, { name: '远程注册表服务' }, { name: 'RPC Portmapper' }, { name: 'Windows Service Controller' }, { name: 'Session Manager Subsystem' }, { name: 'Microsoft SNMP Agent' }, { name: 'Printer Spooler' }, { name: 'Printer Spooler Service' }, { name: 'Still Image Service' }, { name: 'Service Host Process' }, { name: 'Windows System Process' }, { name: 'Windows Task Optimizer' }, { name: 'TCP/IP Services' }, { name: 'Windows Logon Process' }, { name: 'Windows Management Service' } ] ================================================ FILE: desktop.css ================================================ @import "./bootstrap-icons.css"; @import "./base.css"; /* 注:应用样式请在 /apps/style 中设置,并在 desktop.html 开头引用 */ /* 通用颜色配置,分深浅主题 */ :root { --text: #000; --text2: #444; --bg: #ffffff; --bg50: #ffffff90; --bg70: #fefefeb7; --shadow: #22222230; --card: #efefef75; --hover: #ffffff65; --hover-half: #ffffff40; --hover-b: #1111110f; --bggrey: #eee; --fill: #d3d3d370; --bgul: url('bg.svg'); --mm: #ffffffc0; --contextmeu: #f7f7f7bb; --bar: #efefef37; --hr: #ccc; --unfoc: #eaeaea; --msg: #ffffffe7; --theme-1: #ad6eca; --theme-2: #3b91d8; --href: #2983cc; --bd: #8f8f8f30; --s3d: #99999947; --mica: linear-gradient(215deg, #ffe7f6, #a9c3ff); } :root.dark { --text: #eee; --text2: #aaa; --bg: #000000; --bg50: #00000065; --bg70: #111111c5; --shadow: #000000a0; --card: #72727240; --hover: #aaaaaa30; --hover-half: #ffffff20; --hover-b: #eeeeee0f; --bggrey: #444; --fill: #99999970; --bgul: url('bg-dark.svg'); --mm: #ffffff50; --contextmeu: #292929bb; --bar: #7272722a; --hr: #333; --unfoc: #202020; --msg: #303030d0; --bd: #ffffff06; --s3d: #11111150; --mica: linear-gradient(215deg, #2d161c, #102d53); } :root.notrans *, :root.notrans *::before, :root.notrans *::after { transition: none !important; animation: none !important; } :root.nosd { --shadow: none; } :root.moreblur .window:not(.foc) { background: var(--bg70); background-color: none; backdrop-filter: blur(30px); } body, p { transition: 100ms; } p { margin: 0; } html { position: fixed; height: 100%; width: 100%; } body { background: var(--bgul) center; background-size: cover; height: 100%; font-size: 15.5px; color: var(--text); user-select: none; } html.night { filter: brightness(0) !important; } .a { color: var(--text); text-decoration: none !important; cursor: pointer; } .jump { cursor: alias !important; /* text-decoration: underline; */ color: var(--href); } .jump:hover { color: #999; } .jump:active { color: #666; } hr { background-color: #afafaf50; } ::-webkit-scrollbar { border-radius: 7px; height: 14px; width: 14px; } ::-webkit-scrollbar:hover { background-color: var(--card); } ::-webkit-scrollbar-thumb { background: #7f7f7f70; background-clip: padding-box; border: 6px solid transparent; border-radius: 10px; } ::-webkit-scrollbar-thumb:hover { border: 4px solid transparent; } ::-webkit-scrollbar-corner { display: none; } .act, list:not(.new)>a, #cs>list>a, #datebox>.cont>.body>p, .wg>.titbar>.more, .wg.calc>.content>.b, .button { transition: 80ms !important; } .act:active, list:not(.new)>a:active, #cs>list>a:active, #datebox>.cont>.body>p:active, .wg>.titbar>.more:active, .wg.calc>.content>.b:active, .button:active { /* transform: scale(0.93); */ /* filter: blur(0.5px); */ filter: opacity(0.7); /* transition: transform 500ms cubic-bezier(0.24, 0.86, 0.36, 0.44) !important; */ } /*** 以下通用控件 ***/ .input { background-color: var(--bg50); border: none; border-bottom: 2.5px solid; border-bottom-color: #7f7f7f7f; border-radius: 7px; padding: 3px 5px 3px 8px; outline: medium; width: 100%; color: var(--text); transition: 100ms, border 0s; box-shadow: 0 1px 2px var(--s3d); } :root.corner_squ .input { corner-shape: squircle; border-radius: 15px; } .input:hover { background: var(--contextmeu); } .input:focus { background-color: var(--bg); background-clip: padding-box, border-box; background-origin: padding-box, border-box; background-image: linear-gradient(var(--bg), var(--bg)), linear-gradient(90deg, var(--theme-1), var(--theme-2)); border-bottom-color: transparent; box-shadow: 0 1px 10px var(--s3d); opacity: 1; } input.foc { display: block; height: 0; width: 0; opacity: 0; padding: 0; margin: 0; border: none; outline: none; background: none; } .btn { border: 0px solid; border-radius: 10px; padding: 7px 10px; transition: 100ms; background-color: #00000000; } :root.corner_squ .btn { corner-shape: squircle; border-radius: 20px; } .btn-icon { border: 0px solid; border-radius: 10px; padding: 1px 5px; background-color: #00000000; font-size: 23px; height: 33px; width: 33px; overflow: hidden; /* display: flex; */ } .btn-icon.big { padding: 3px 7px; font-size: 19px; } .btn:hover { background: var(--hover); } .btn:active { /* transform: scale(0.9); */ opacity: 0.7; } .button { background-color: #9f9f9f40; border-radius: 7px; padding: 6px 12px; cursor: pointer; } :root.corner_squ .button { corner-shape: squircle; border-radius: 15px; } .button:hover { filter: brightness(1.2); } .button:active { filter: brightness(1.2) opacity(0.8); } .buttons { display: inline-block; position: absolute; bottom: 20px; right: 15px; } .buttons>* { display: inline-block; padding: 5px 10px; border-radius: 8px; margin: 0px 4px; transition: transform 400ms cubic-bezier(0.14, 1.02, 0.17, 0.03) !important; /* box-shadow: 2px 2px 4px var(--shadow); */ box-shadow: 0 1px 2px 1px var(--s3d); min-width: 55px; text-align: center; } .buttons>*:hover { filter: brightness(1.2); } .buttons>*:active { opacity: 0.7; /* transform: scale(0.85); */ } .buttons>.submit { background-image: linear-gradient(120deg, var(--theme-1), var(--theme-2)); color: #fff; } .buttons>.cancel { background-color: var(--bggrey); } list { display: block; padding-left: 0; margin-bottom: 0; border-radius: 7px; } list>* { width: 100%; color: var(--text); text-align: inherit; border-radius: 7px; position: relative; display: block; padding: 3px 24px; } :root.corner_squ list>* { corner-shape: squircle; border-radius: 20px !important; } list:not(.new)>a { transition: 50ms, transform 400ms cubic-bezier(0.14, 1.02, 0.17, 0.03); } list:not(.new)>a:active { opacity: 0.7; /* transform: scale(0.95); */ } list.new>a { transition: 50ms, opacity 80ms; } list.new>a:active { opacity: 0.7; } list>a:hover { color: var(--text); background-color: var(--hover-half); text-decoration: none; box-shadow: 0 1px 2px var(--s3d); } list>hr { width: calc(100% - 12px); padding: 0 !important; margin: 2px 6px; background-color: #7f7f7f7f; border-radius: 5px; height: 0.75px; cursor: inherit; } list>hr:hover { background-color: #7f7f7f7f; } list>.text { margin: 0; cursor: inherit; border: none; } list>.text:hover { background-color: unset; border: none; } list>span.focs { display: block; width: 4px; height: 20px; background: linear-gradient(0deg, var(--theme-1), var(--theme-2)); background-size: cover; padding: 0; border-radius: 2px; position: relative; margin: -30px 7px 0 7px; z-index: 1; transition: 500ms cubic-bezier(1, 0, 0, 1); /* transform-origin: top; */ } list>span.focs.cl { animation: fcl 200ms cubic-bezier(1, 0.8, 0, 0.2) 160ms; } @keyframes fcl { 0% { transform: none; } 50% { transform: scaleY(0.5); } 100% { transform: none; } } /*** 以下任务栏 ***/ #dock-box { position: fixed; bottom: 10px; height: 40px; display: flex; width: 100%; z-index: 92; padding: 0 5px; justify-content: center; transition: bottom 400ms; } #dock-box.hide { bottom: -60px; } .dock { border-radius: 10px; height: 100%; background-color: var(--contextmeu); backdrop-filter: blur(20px) saturate(1.5); -webkit-backdrop-filter: blur(20px) saturate(1.5); box-shadow: 0 1px 2px #44444460, 0px 3px 25px 1px var(--shadow); padding: 7px 6px; margin: 0 3px; display: flex; transition: 200ms, transform 300ms cubic-bezier(0.14, 1.02, 0.17, 0.03), backdrop-filter, -webkit-backdrop-filter 0ms; bottom: 0; /* transform: scale(1); */ /* border: 1.5px solid #6f6f6f30; */ } :root.corner_squ .dock { corner-shape: squircle; border-radius: 18px; } .dock>* { padding-left: 3px; padding-right: 3px; } /* .dock.about:hover, */ .dock.theme:hover, .dock.date:hover { backdrop-filter: blur(20px) saturate(1.5) brightness(1.2); -webkit-backdrop-filter: blur(20px) saturate(1.5) brightness(1.2); } #toolbar { display: flex; } #taskbar { padding: 3px 2px; transition: 80ms; overflow: hidden; width: 0; } #taskbar>a { border-radius: 10px; height: 34px; width: 38px; transition: 100ms; padding: 4px 5px; display: block; margin: 0; background-clip: padding-box; border-left: 2px solid transparent; border-right: 2px solid transparent; } #taskbar>a:hover { background-color: var(--hover); } #taskbar>a:active>img { transform: scale(0.8); } #taskbar>a>img { width: 26px; height: 26px; transition: 100ms; margin: -1px 0 0 -0.5px; } #taskbar>a:not(.min)>img { animation: task-show 800ms; } @keyframes task-show { 0% { margin-top: -1px; margin-bottom: 0; } 40% { margin-top: -6px; margin-bottom: 5px; transform: scaleY(1.1); transform-origin: bottom; } 60% { margin-top: 1px; margin-bottom: -2px; transform: scaleY(0.8); transform-origin: bottom; } 100% { margin-top: -1px; margin-bottom: 0; } } #taskbar>a.min>img { animation: task-hide 800ms; } @keyframes task-hide { 0% { margin-top: -1px; margin-bottom: 0; } 40% { /* margin-top: 3px; margin-bottom: -4px; */ margin-top: 0px; margin-bottom: -1px; transform: scaleY(0.8); transform-origin: bottom; } 70% { margin-top: -2px; margin-bottom: 1px; transform: scaleY(1.05); transform-origin: bottom; } 100% { margin-top: -1px; margin-bottom: 0; } } #taskbar>a::after { content: ''; display: block; width: 18px; background: linear-gradient(90deg, var(--theme-1), var(--theme-2)); height: 4px; border-radius: 2px; position: relative; bottom: 4px; left: 3.2px; transition: 150ms; } #taskbar>a:not(.foc)::after { background: linear-gradient(90deg, #7f7f7f, #7f7f7f); width: 12px; left: 6px; } #taskbar>a:not(.foc):hover:after { width: 16px; left: 4.2px; } #taskbar>a.foc:hover:after { width: 22px; left: 1.2px; } #taskbar>a.min:hover:after { width: 18px; left: 3.2px; } .dock.date { width: 100px; padding: 0px 5px; display: block; text-align: center; overflow: hidden; } .dock.date:active { transform: scale(0.9); filter: opacity(0.6) !important; } .dock.control { display: flex; justify-content: center; align-items: center; gap: 5px; } .dock.control>icon { font-size: 17px; } .dock.control>* { margin: 0 -2px 0 -1px; } .dock.control:active { transform: scale(0.9); filter: opacity(0.6) !important; } .dock.date>.date { margin-top: -8px; } .dock.date>p { transition: 200ms cubic-bezier(0.9, 0, 0.1, 1); } .dock.date.show>p { margin-top: -50px; } .dock.date>.bi { position: absolute; display: block; text-align: center; left: 0; top: 37px; width: 100%; transition: 200ms cubic-bezier(0.9, 0, 0.1, 1); } .dock.date.show>.bi { top: 7px; } .dock.theme { width: 40px; padding-left: 3.5px; text-align: center; overflow: hidden; box-shadow: 0 0 6px 1px var(--shadow); } .dock.theme:active { transform: scale(0.9); filter: opacity(0.6) !important; } .dock.theme>.dark { position: absolute; height: 30px; width: 30px; top: 5px; left: 40px; transition: 200ms cubic-bezier(0.9, 0, 0.1, 1); opacity: 0; } .dock.theme>.light { height: 30px; width: 30px; position: absolute; top: 5px; left: 5px; transition: 200ms cubic-bezier(0.9, 0, 0.1, 1); opacity: 1; } .dock.theme.dk>.dark { left: 5px; opacity: 1; } .dock.theme.dk>.light { left: -30px; opacity: 0; } .dock-btn { transition: 200ms; width: 32px; height: 26px; overflow: hidden; } .dock-btn:hover, .dock-btn.show { filter: brightness(1.2); } #start-btn>svg.menu { position: relative; top: 27px; transition: 200ms; } #start-btn.show>svg.menu { top: 0; transition-delay: 200ms; } #start-btn>.ico { position: relative; top: -32px; transition: transform 200ms, top 200ms 100ms, left 200ms; left: 0; /* transition-delay: 100ms; */ } #start-btn.show>.ico { transform: scale(0.5); top: -26px; } #search-btn>svg.in { position: relative; display: block; top: -29.6px; left: 2.5px; width: 16px; height: 16px; transition: 200ms; } #search-btn:active { transform: scale(0.85); } #search-btn.show>svg.in { transform: scale(1.1) rotate(360deg); filter: saturate(2) brightness(1.1); } #widgets-btn>svg { display: block; } #widgets-btn:active { transform: scale(0.85); } #widgets-btn>.wid2 { margin-top: -19px; margin-left: 10.5px; height: 20px; transition: 150ms cubic-bezier(0.8, 0, 0.2, 1); transition-delay: 0ms; } #widgets-btn>.wid3 { margin-top: 13px; margin-left: -2px; height: 31px; transition: 100ms cubic-bezier(0.8, 0, 0.2, 1); transition-delay: 100ms; } #widgets-btn>.wid4 { margin-top: 4px; margin-left: 11.5px; height: 12px; transition: 200ms cubic-bezier(0.8, 0, 0.2, 1); transition-delay: 180ms; } #widgets-btn.show>.wid2 { margin-top: -28px; } #widgets-btn.show>.wid3 { margin-top: -20.5px; } #widgets-btn.show>.wid4 { margin-top: -14px; } #copilot-btn>img { width: 24px; transition: 200ms cubic-bezier(0, 0, 0, 1); } #copilot-btn:active { transform: scale(0.85) rotate(-20deg); } #copilot-btn.show:active { transform: scale(0.85) rotate(20deg); } #copilot-btn.show>img { transform: rotate(420deg); } /*** 以下开始等菜单 ***/ #start-menu { display: none; position: fixed; bottom: -600px; height: 594px; max-height: calc(100% - 120px); width: 900px; left: calc(50% - 450px); border-radius: 20px; background: var(--bg70); backdrop-filter: blur(60px) saturate(3) contrast(0.8); /* backdrop-filter: blur(80px) saturate(1.3); */ -webkit-backdrop-filter: blur(60px) saturate(3) contrast(0.8); opacity: 0.5; transition: 200ms; box-shadow: 3px 3px 25px 1px var(--shadow); border: 1.5px solid #6f6f6f30; z-index: 91; padding: 2px 4px; bottom: 60px; transform: translateY(650px); } :root.corner_squ { #start-menu, #search-win, #datebox, #control, #widgets { corner-shape: squircle; border-radius: 45px; } } #start-menu.show-begin { display: flex; } #start-menu.show { display: flex; opacity: 1; transform: none !important; } #start-menu.max { left: 0; bottom: 0; transform: translateY(100%); width: 100%; max-height: 100%; height: 100%; border-radius: 0; transition: 200ms cubic-bezier(0.9, 0, 0.1, 1); } #start-menu.max>#startmenu-l>#startmenu-user { margin-bottom: 60px; top: 10px; } #start-menu.max>#startmenu-r>.tuijian>.apps>* { width: 25%; } #startmenu-l { min-width: 310px; height: 100%; padding: 0 5px 0 10px; transition: 400ms; display: flex; flex-direction: column; } #start-menu.max>#startmenu-l { min-width: 300px; width: 22%; } #startmenu-l>.input { padding-left: 30px; } input-before { display: block; font-size: 15px; height: 0; margin-top: -29px; margin-left: 8px; margin-bottom: 10px; color: var(--text); } #startmenu-l>list { margin-left: 5px; margin-top: 40px; flex-grow: 1; overflow: auto; padding-bottom: 40px; } #startmenu-l>list>a { padding: 3px 5px 3px 10px; font-size: 15px; display: flex; align-items: center; } #startmenu-l>list>a>p { margin: 5px 0 5px 10px; } #startmenu-l>list>a>img { height: 28px; width: 28px; } #startmenu-l>list>.text { padding-left: 10px; font-size: 16px; height: 35px; } #startmenu-r { flex-grow: 1; overflow: hidden; padding-bottom: 10px; display: flex; flex-direction: column; } #startmenu-r>* { opacity: 0; transition: transform 200ms cubic-bezier(0, 0, 0, 1), opacity 200ms 30ms; transform: translate(0, 50px); } #start-menu.show>#startmenu-r>* { transform: none; opacity: 1; } #startmenu-r>.row1 { display: flex; transition-delay: 200ms; } #startmenu-r>.row1>.tool { width: 200px; padding: 5px 10px 0 0; transition: 300ms; display: flex; flex-direction: column; align-items: end; } /* #startmenu-r>.row1>.tool>* { float: right; } */ #startmenu-r>.row1>.tool>.pw { display: flex; justify-content: right; align-items: center; } #startmenu-r>.row1>.tool>.pw>.btn-icon.power { overflow: hidden; display: flex; width: 33px; padding: 0; /* padding-left: 0; */ } /* #startmenu-r>.row1>.tool>.pw>.btn-icon.power:active { opacity: 0.7; } */ #startmenu-r>.row1>.tool>.pw>.power.show { width: 100px; background-color: var(--hover-b); /* box-shadow: 3px 3px 6px var(--shadow); */ } #startmenu-r>.row1>.tool>.pw>.power.show>span.bi-power { opacity: 0.7; transform: scale(0.7); } #startmenu-r>.row1>.tool>.pw>.btn-icon.show:hover { background-color: var(--hover-b); } #startmenu-r>.row1>.tool>.pw>.btn-icon.power>.bi { /* position: relative; */ height: 33px; padding-left: 5px; padding-right: 5px; transition: 200ms; } #startmenu-r>.row1>.tool>.pw>.btn-icon.power>i.bi-power { border-radius: 10px 0 0 10px; } #startmenu-r>.row1>.tool>.pw>.btn-icon.power>i.bi-arrow-counterclockwise { border-radius: 0 10px 10px 0; } /* #startmenu-r>.row1>.tool>.pw>.btn-icon>.bi-arrow-counterclockwise::before { position: relative; top: 1.15px; } */ /* #startmenu-r>.row1>.tool>.btn-icon>.bi-power::before { position: relative; top: -2px; } */ #startmenu-r>.row1>.tool>.pw>.btn-icon.show>i { background-color: var(--hover-h); } #startmenu-r>.row1>.tool>.pw>.btn-icon.show>i:hover { background-color: var(--hover); } #start-menu.max>#startmenu-r>.row1>.tool { margin-left: 100px; margin-right: 50px; } #startmenu-r>.row1>.folder, #startmenu-r>.pinned, #startmenu-r>.tuijian { background-color: var(--card); box-shadow: 0px 1px 8px var(--s3d); border-radius: 10px; padding: 10px; } :root.corner_squ { #startmenu-r>.row1>.folder, #startmenu-r>.pinned, #startmenu-r>.tuijian { corner-shape: squircle; border-radius: 20px; } } #startmenu-r>.row1>.folder { display: flex; margin: 15px 15px; flex-grow: 1; } #startmenu-r>.row1>.folder>.sm-app { height: 72px; } #startmenu-r>.pinned { margin-right: 10px; margin-left: 15px; transition-delay: 300ms; height: 220px; display: flex; flex-direction: column; } #startmenu-r>.pinned>.apps { display: flex; flex-wrap: wrap; padding-left: 10px; overflow: auto; flex-grow: 1; } #startmenu-r>.pinned>.title { padding: 5px 0 5px 10px; font-size: 18px; font-weight: 530; display: flex; } #startmenu-r>.pinned>.title>* { width: 100%; } #startmenu-r>.tuijian { margin: 15px 10px 0 15px; transition-delay: 450ms; flex-grow: 1; display: flex; overflow: hidden; flex-direction: column; } #startmenu-r>.tuijian>.apps { display: flex; flex-wrap: wrap; padding-left: 15px; overflow: auto; } #startmenu-r>.tuijian>.apps>* { transition: 80ms; } #startmenu-r>.tuijian>.title { padding: 5px 0 5px 10px; font-size: 18px; font-weight: 530; display: flex; } #startmenu-r>.tuijian>.title>* { width: 100%; } #startmenu-user { height: 100px; width: 100px; border-radius: 50%; position: relative; top: -50px; left: calc(50% - 50px); background-color: var(--bggrey); font-size: 80px; box-shadow: 3px 3px 6px var(--shadow); transition: 200ms 100ms; } #startmenu-user>svg { position: relative; top: -8px; left: 15px; width: 70px; height: 70px; } .more-btn { background-image: linear-gradient(100deg, var(--theme-1), var(--theme-2)); color: #fff; border-radius: 5px; font-size: 12px; float: right; padding: 6px 10px; transition: 100ms; line-height: 1; display: flex; align-items: center; } .more-btn:hover { filter: brightness(1.2); } .more-btn>.bi { font-size: 10px; } .sm-app { width: 85px; height: 80px; border-radius: 10px; text-align: center; transition: 80ms; padding: 0 3px; color: #888; cursor: inherit; } :root.corner_squ .sm-app { corner-shape: squircle; border-radius: 20px; } .sm-app.enable { color: var(--text); cursor: pointer; } .sm-app.enable:hover { background-color: var(--hover); } .sm-app.enable>*:first-child { filter: brightness(1); } .sm-app>*:first-child { height: 40px; width: 40px; margin-top: 8px; transition: 80ms; filter: contrast(0.3) brightness(0.7); text-shadow: 3px 3px 5px var(--shadow); } .sm-app>*:last-child { margin-top: -3px; transition: 80ms; font-size: 11px; line-height: 13px; } .sm-app:hover { background-color: unset; } .sm-app:active>*:first-child { transform: scale(0.8); } .sm-app.enable:active>*:first-child { filter: brightness(0.8) opacity(0.8); } .tj-obj { width: 50%; height: 55px; border-radius: 10px; transition: 80ms; padding: 0 3px; display: flex; padding: 10px 3px 10px 10px; overflow: hidden; } :root.corner_squ .tj-obj { corner-shape: squircle; border-radius: 20px; } .tj-obj>img { height: 35px; width: 35px; transition: 200ms; } .tj-obj>div>*:first-child { margin: 3px 0 2px 5px; font-size: 15px; line-height: 13px; white-space: nowrap; } .tj-obj>div>*:last-child { font-size: 10px; line-height: 13px; margin-left: 6px; color: #7f7f7f; } .tj-obj:hover { background-color: var(--hover); } #search-win { display: none; position: fixed; bottom: -500px; height: 500px; max-height: calc(90% - 120px); width: 600px; left: calc(50% - 300px); border-radius: 20px; background: var(--bg70); backdrop-filter: blur(60px) saturate(3) contrast(0.8); /* backdrop-filter: blur(80px) saturate(1.3); */ -webkit-backdrop-filter: blur(60px) saturate(3) contrast(0.8); opacity: 0.8; transition: 200ms; box-shadow: 3px 3px 15px 1px var(--shadow); border: 1.5px solid #6f6f6f30; z-index: 91; padding: 15px; } #search-win.show-begin { display: flex; flex-direction: column; } #search-win.show { max-height: calc(100% - 120px); height: 594px; display: flex; flex-direction: column; bottom: 60px; opacity: 1; } #search-win>.input { padding-left: 30px; } #search-win>.tab { display: flex; margin-top: 25px; margin-bottom: 10px; } #search-win>.tab>a { padding: 4px 7px 3px 7px; margin: 0 1px; text-align: center; border-radius: 10px; transition: 100ms; } #search-win>.tab>a:hover, #search-win>.tab>a.now { background-color: var(--hover); } #search-win>.tab>a.now::after { content: ''; display: block; position: relative; bottom: 0; background-image: linear-gradient(90deg, var(--theme-1), var(--theme-2)); width: calc(100% - 6px); left: 3px; height: 3px; border-radius: 10px; } #search-win>.ans { display: flex; flex-grow: 1; overflow-y: auto; } #search-win>.ans>.list { width: 250px; height: 100%; margin-right: 5px; overflow: auto; } #search-win>.ans>.list>list>a { padding: 5px 5px 0px 10px; display: flex; } #search-win>.ans>.list>list>a:active { transform: scale(0.97); } #search-win>.ans>.list>list>a>.bi { display: block; margin-right: 3px; font-size: 24px; margin-top: -5px; background-image: linear-gradient(100deg, var(--theme-1), var(--theme-2)); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; } #search-win>.ans>.list>list>a>img { height: 25px; width: 25px; margin: 0px 5px 7px 0; } #search-win>.ans>.view { flex-grow: 1; border-radius: 10px; background: var(--card); padding: 3px; /* box-shadow: 0 3px 10px var(--s3d); */ border: 1.5px solid #6f6f6f30; display: none; overflow: auto; margin: 2px 5px 5px 0; } #search-win>.ans>.view.show { display: block; } #search-win>.ans>.view>.fname>.bi { font-size: 70px; display: block; margin: 30px 0 5px 0; text-align: center; } #search-win>.ans>.view>.fname>.name { font-size: 18px; text-align: center; } #search-win>.ans>.view>.fname>.type { font-size: 13px; text-align: center; opacity: 0.5; margin-bottom: 5px; } #search-win>.ans>.view>.option>list { margin: 10px; } #search-win>.ans>.view>.option>list>a { border-radius: 6px; transition: 70ms !important; padding: 4px 12px; font-size: 14px; } #search-win>.ans>.view>.option>list>a:active { transform: scale(0.97); } #widgets { display: none; position: fixed; bottom: -600px; height: 600px; max-height: calc(90% - 50px); width: 1000px; left: calc(50% - 500px); border-radius: 20px; background: var(--bg70); backdrop-filter: blur(60px) saturate(3) contrast(0.8); /* backdrop-filter: blur(80px) saturate(1.3); */ -webkit-backdrop-filter: blur(60px) saturate(3) contrast(0.8); transition: 200ms; box-shadow: 3px 3px 15px 1px var(--shadow); border: 1.5px solid #6f6f6f30; z-index: 91; padding: 10px 0; } #widgets.show-begin { display: flex; } #widgets.show { bottom: 60px; } #widgets>div { width: calc(50% - 0.5px); padding: 0 10px; } #widgets>.hr { width: 1px; height: calc(100% - 20px); margin-top: 10px; background-color: var(--hover-b); } #widgets>div>.bar { height: 32px; display: flex; background-color: var(--bar); box-shadow: 0 1px 3px var(--shadow); border-radius: 10px; padding-left: 10px; justify-content: space-between; align-items: center; } #widgets>div>.bar>.tit { width: 100px; font-size: 18px; } #widgets>div>.content { height: calc(100% - 35px); margin-top: 8px; } #widgets>.widgets>.content { overflow: auto; } #widgets>.widgets>.content>.grid { display: grid; justify-content: center; gap: 10px; grid-template-columns: repeat(auto-fill, 83px); grid-template-rows: repeat(auto-fill, 83px); height: 100%; grid-auto-flow: row; } #widgets>.widgets>.content>.grid>.wg { transition: 100ms; background-color: var(--card) !important; } #widgets>.widgets>.content>.template { display: none; } #widgets>.news { overflow: hidden; } #widgets>.news>.full-tip { /* position: absolute; top: 0; bottom: 0; left: 0; right: 0; */ width: 100%; height: 100%; display: flex; flex-direction: column; justify-content: center; align-items: center; } #widgets>.news>.full-tip.hidden { display: none; } #widgets>.news>.full-tip>* { margin-bottom: 10px; } #widgets>.news>.full-tip>.tit { font-weight: bold; font-size: large; } #widgets>.news>.full-tip>.info { font-size: small; } #widgets>.news>.content { overflow: auto; } #widgets>.news>.content .line { margin-top: 10px; display: grid; gap: 10px; grid-template-columns: repeat(5, 83px); /* grid-template-rows: repeat(1, 114px); */ } #widgets>.news>.content .card { border-radius: 10px; transition: 10ms; background-image: linear-gradient(#00000000, #111 90%); background-size: cover; grid-row: 1; display: flex; flex-direction: column; justify-content: flex-end; align-items: flex-start; padding: 10px; height: 175px; } #widgets>.news>.content .card-left { grid-column: 1 / 4; } #widgets>.news>.content .card-right { grid-column: 4 / 6; } #widgets>.news>.content .line:nth-child(even) .card-left { grid-column: 1 / 3; } #widgets>.news>.content .line:nth-child(even) .card-right { grid-column: 3 / 6; } #widgets>.news>.content .card:hover { box-shadow: 1px 1px 7px var(--shadow); filter: brightness(0.95); } #widgets>.news>.content .card>.tit { color: white; font-size: 18px; line-height: 1.2; margin-bottom: 10px; transition: 100ms; text-shadow: 0 0 8px #000; } #widgets>.news>.content .card>.a { color: #9dd0fb; font-size: 17px; text-shadow: 0 0 3px #000; } #widgets>.news>.content .card>.a:hover { border-bottom: 2px solid; } #widgets>.news>.content .card.top-news { color: #fff; background-color: var(--bgul); } #widgets>.news>.content .card.top-news>.tit { font-size: 20px; } /*** 以下任务栏各面板 ***/ #datebox, #control { display: none; position: fixed; bottom: -450px; height: 450px; width: 350px; border-radius: 20px; background-color: var(--bg50); backdrop-filter: blur(50px) saturate(3) contrast(0.8); -webkit-backdrop-filter: blur(50px) saturate(3) contrast(0.8); transition: 200ms; box-shadow: 3px 3px 15px 1px var(--shadow); border: 1.5px solid #6f6f6f30; z-index: 91; padding: 10px; } #control { height: 250px; } .dock.control * { fill: var(--text); color: var(--text) !important; } #control>.cont>.top { display: grid; grid-template-rows: auto auto; grid-template-columns: auto auto auto; gap: 15px; height: 160px; margin-top: 10px; padding: 0px 7.5px 0px 7.5px; } #control>.cont>.top>div { width: 100%; height: 100%; display: grid; grid-template-rows: 70% 30%; gap: 5px; } #control>.cont>.top>div>.icon { width: 100%; height: 100%; background-color: var(--hover-b); border-radius: 10px; display: flex; justify-content: center; align-items: center; transition: 70ms, transform 400ms cubic-bezier(0.14, 1.02, 0.17, 0.03); } #control>.cont>.top>div>.icon.active { background-image: linear-gradient(120deg, var(--theme-1), var(--theme-2)); } #control>.cont>.top>div>.icon.active>icon { color: #ffffff; } #control icon { background-image: linear-gradient(120deg, var(--theme-1), var(--theme-2)); -webkit-background-clip: text; background-clip: text; color: transparent; font-size: 18px; } #control>.cont>.top>div>.tit { font-size: 85%; text-align: center; } #control>.cont>.top>div>.icon:hover { filter: brightness(1.1); } #control>.cont>.top>div>.icon:hover { background-color: var(--card); } #control>.cont>.top>div>.icon:active { transform: scale(0.93); } #control>.cont>.bottom { padding: 20px; } #control>.cont>.bottom>.brightness>.icon { margin-right: 10px; vertical-align: -0.3em; display: inline-block; } #control>.cont>.bottom>.brightness>.icon>icon { font-size: 20px !important; } #control>.cont>.bottom>.brightness>.range-container { width: calc(100% - 43px); height: 4.5px; background-image: linear-gradient(100deg, var(--theme-1), var(--theme-2)); border-radius: 7px; display: inline-block; } #control>.cont>.bottom>.brightness>.range-container>.after { border-radius: 0px 7px 7px 0px !important; } #control>.cont>.bottom>.brightness>.range-container>.after { height: 4.5px; position: relative; background-color: var(--bg); bottom: 0px; width: 0px; border-radius: 7px; } #control>.cont>.bottom>.brightness>.range-container>.slider-btn { height: 20px; border-radius: 10px; background-image: linear-gradient(to top, var(--theme-1), var(--theme-2)); position: relative; width: 20px; bottom: 12px; margin-left: 100%; transform: translateX(-10px); border: solid var(--msg); border-width: 5px; transition: 0ms, border-width 100ms; } #control>.cont>.bottom>.brightness>.range-container>.slider-btn:hover, #control>.cont>.bottom>.brightness>.range-container.active>.slider-btn { /* filter: brightness(0.8); */ border-width: 3.5px; } #control>.cont>.bottom>.brightness>.range-container>.slider-btn:active { border-width: 6px; } #datebox.show-begin, #control.show-begin { display: flex; flex-direction: column; } #datebox.show, #control.show { display: flex; flex-direction: column; bottom: 60px; } #datebox>.tit { padding: 3px 5px; margin: 0; } #datebox>.tit>.time { font-size: 35px; line-height: 50px; height: 50px; /* padding: inherit; */ } #datebox>.tit>.date, #datebox>.tit>#lunar { margin-left: 5px; } #datebox>.cont { width: 100%; flex-grow: 1; } #datebox>.cont>.head { width: 100%; display: flex; } #datebox>.cont>.head>p { width: 46.5px; text-align: center; } #datebox>.cont>.body { display: flex; flex-wrap: wrap; margin-top: 5px; } #datebox>.cont>.body>* { width: 46.5px; height: 46.5px; border-radius: 50%; text-align: center; padding-top: 10px; } #datebox>.cont>.body>p.today { background: linear-gradient(120deg, var(--theme-1), var(--theme-2)); color: #eee; } #datebox>.cont>.body>p:hover { background-color: var(--hover); } /*** 以下桌面 ***/ #desktop { position: absolute; top: 0; left: 0; width: 100%; height: calc(100% - 50px); z-index: 0; display: flex; flex-direction: column; flex-wrap: wrap; align-content: flex-start; transition: 30ms; justify-content: flex-start; align-items: baseline; } #desktop>div { width: 85px; height: 84px; text-overflow: ellipsis; border-radius: 7px; text-align: center; margin: 8px 10px 2px 10px; padding: 0 3px 3px 3px; z-index: 3; transition: 80ms; } :root.corner_squ #desktop>div { corner-shape: squircle; border-radius: 15px; } #desktop>div:hover { background-color: var(--hover); } #desktop>div:active { opacity: 0.7; } #desktop>div>img { width: 65px; height: 65px; } #desktop>div.b>img { width: 40px; height: 40px; margin: 5px; } #desktop>div>p { line-height: 15px; font-size: 13px; color: #fff; text-shadow: 2px 2px 4px var(--shadow), 0 0 3px #000; margin-top: -6px; } #desktop>.selection { position: fixed; border: 2px solid var(--href); /* border-image: linear-gradient(120deg, var(--theme-1), var(--theme-2)) 4; */ border-radius: 5px; background-color: var(--hover-half); display: none; } #desktop-widgets { display: grid; /* justify-content: center; */ gap: 10px; grid-template-columns: repeat(auto-fill, 83px); grid-template-rows: repeat(auto-fill, 83px); position: absolute; top: 0; right: 0; width: 100%; height: calc(100% - 50px); /* width: max-content; */ grid-auto-flow: row; direction: rtl; padding: 20px; pointer-events: none; } #desktop-widgets * { direction: ltr; pointer-events: auto; } #desktop-widgets>* { background-color: var(--bg70); backdrop-filter: blur(180px) saturate(1.5); filter: none; -webkit-backdrop-filter: blur(80px) saturate(1.5); box-shadow: 3px 3px 20px 3px var(--shadow); transition: all 500ms; } #desktop-widgets>*.moving { transition: none; } #desktop-widgets>*.moving>.content { opacity: 0.5; } #desktop-widgets>*.notrans { transition: none !important; } #desktop-widgets>.widgets-move { display: none; background-color: #3daee922; border: 1px solid #3daee9; border-radius: 10px; backdrop-filter: none; -webkit-backdrop-filter: none; box-shadow: none; } #desktop-widgets>.widgets-move.show { display: block; } #desktop-widgets.edit>* .content * { pointer-events: none; } #desktop-widgets.edit>* { cursor: grab; } #desktop-widgets.edit>*>.content { transition: opacity 500ms; } #desktop-widgets.edit>*>.content:hover { opacity: 0.5; } #desktop-editbar-container { width: 100%; position: fixed; top: -50px; left: 0px; display: flex; justify-content: center; align-items: center; transition: top 500ms; } #desktop-editbar-container.show { top: 0px; } #desktop-editbar { background-color: var(--bg70); backdrop-filter: blur(180px) saturate(1.5); filter: none; -webkit-backdrop-filter: blur(80px) saturate(1.5); box-shadow: 3px 3px 20px 3px var(--shadow); border-radius: 0px 0px 8px 8px; display: flex; gap: 13px; padding: 4px 20px; } #desktop-editbar>* { transition: background-color 80ms; padding: 1px 7px; border-radius: 5px; } #desktop-editbar>*:hover { background-color: var(--hover); } /*** 以下右键菜单 ***/ #cm { display: none; position: absolute; z-index: 101; border-radius: 10px; border: 1.5px solid #6f6f6f30; background: var(--contextmeu); backdrop-filter: blur(25px) saturate(2); min-width: 200px; overflow: hidden; padding: 0px 6px; max-height: 0; width: max-content; transition: 110ms, max-height 200ms ease-in-out, top 100ms, left 100ms, padding 200ms ease-in-out, box-shadow 500ms; opacity: 0; } :root.corner_squ #cm { corner-shape: squircle; border-radius: 25px; } #cm.show { max-height: 100%; padding: 6px; box-shadow: 3px 3px 25px 0px var(--shadow); opacity: 1; } #cm>list { transform: translate(0, -50%); opacity: 0; transition: transform 200ms ease-in-out, opacity 150ms 50ms; } #cm.show>list { opacity: 1; transform: none; } #cm.show-begin { display: block; } #cm>list>a { padding: 4.5px 12px; margin: 1px 0; border-radius: 6px; font-size: 15px; display: flex; line-height: 19px; } #cm>list>a>.bi { font-size: 17px; margin-right: 10px; display: block; } #cm>list>a>info { float: right; text-align: end; color: #888; flex-grow: 1; } #cm>list>*:not(hr):hover { background-color: var(--hover-b); } /*** 以下下拉菜单 ***/ #dp { display: none; position: absolute; box-shadow: 3px 3px 6px 1px var(--shadow); z-index: 101; border-radius: 10px; border: 1.5px solid #6f6f6f30; background: var(--contextmeu); backdrop-filter: blur(20px) saturate(2); min-width: 200px; overflow: hidden; transition: max-height 200ms ease-in-out; padding: 4px; max-height: 0; } #dp.show-begin { display: block; transition: max-height 200ms ease-in-out; } #dp.show { max-height: 100%; } #dp>list>a { padding: 4.5px 10px; margin: 0; transition: 80ms; border-radius: 7px; font-size: 14px; display: flex; line-height: 19px; } #dp>list>a>info { float: right; text-align: end; color: #888; flex-grow: 1; } #dp>list>a>.bi { font-size: 19px; margin-right: 4px; display: block; } #dp>list>*:not(hr):hover { background-color: var(--hover-b); } /*** 以下悬停提示 ***/ #descp { position: fixed; background: var(--contextmeu); border-radius: 6px; box-shadow: 2px 2px 10px var(--shadow); z-index: 102; border: 1.5px solid #4f4f4f30; backdrop-filter: blur(15px) saturate(2); font-size: 13px; padding: 5px 10px; margin: 0; transition: opacity 100ms; opacity: 0; display: none; } :root.corner_squ #descp { corner-shape: squircle; border-radius: 15px; } #descp.show { opacity: 1; } #descp.show-begin { display: block; } /*** 以下消息 ***/ .msg { background-color: var(--bg70); backdrop-filter: blur(50px) saturate(130%); position: fixed; right: -430px; bottom: 60px; width: 430px; min-height: 150px; z-index: 100; border-radius: 10px; box-shadow: 3px 3px 6px 1px var(--shadow); padding: 10px 20px; font-size: 15px; display: flex; transition: 400ms 200ms cubic-bezier(0.9, 0, 0.1, 1), transform 200ms; cursor: pointer; border: 1.5px solid #6f6f6f30; transform: scale(0.9); } .msg:hover { transition: 80ms; background-color: var(--msg); } .msg.show { right: 20px; transform: none; } .msg>.main { flex-grow: 1; } .msg>.hide { height: 35px; width: 35px; min-width: 35px; padding-left: 6px; margin-right: -5px; border-radius: 5px; font-size: 23px; transition: 100ms; } .msg>.hide:hover { padding-left: 0; } .msg>.hide:active { padding-left: 25px; transform: scale(0.9); } .msg:not(.show)>.hide { padding-left: 25px; } .msg>.main>.tit { font-size: 20px; margin-bottom: 5px; transition: 100ms; } .msg>.main>.cont { padding-left: 10px; transition: 100ms; } /*** 以下提示对话框 ***/ #notice-back { top: 0; left: 0; width: 100%; height: 100%; background-color: #00000070; position: fixed; z-index: 99; justify-content: center; align-items: center; display: none; } #notice-back.show { display: flex; } #notice { overflow: hidden; backdrop-filter: blur(20px); display: block; position: absolute; min-width: 300px; min-height: 100px; background: var(--msg); /* left: 30%; */ border-radius: 12px; box-shadow: 0 1px 2px #44444460, 0 1px 30px var(--shadow); border: 1px solid var(--hr); transition: 200ms !important; opacity: 0; transform: scale(0.94) translateY(20px); } :root.corner_squ #notice { corner-shape: squircle; border-radius: 20px; } #notice.show { opacity: 1; transform: none; } #notice>.cnt { padding: 15px 20px 30px 20px; } #notice>.cnt>.tit { font-size: 30px; } #notice>.cnt>list { margin-top: 10px; } #notice>.cnt>list>* { padding: 4px 10px; } #notice>.cnt>list>a:hover { background-color: var(--hover-b); } #notice>.btns { min-height: 60px; background: var(--unfoc); display: flex; flex-direction: row-reverse; align-items: center; padding-right: 15px; border-top: 1.5px solid var(--hr); } #notice>.btns>.btn { margin-left: 10px; background-color: var(--msg); min-width: 100px; text-align: center; border-radius: 8px; transition: 50ms; box-shadow: 0 1px 3px 1px var(--s3d); } :root.corner_squ #notice>.btns>.btn { corner-shape: squircle; border-radius: 15px; } #notice>.btns>.btn.main { color: #fff; background-color: var(--href); } #notice>.btns>.btn:hover { filter: brightness(1.2); } #notice>.btns>.btn:active { transform: none; opacity: 0.7; } /*** 以下窗口相关 ***/ .window { position: absolute; height: 80%; width: 70%; transform: scale(0.7); background-color: var(--unfoc); border-radius: 10px; border: 1.5px solid #6f6f6f30; display: none; opacity: 0; transition: cubic-bezier(0.9, 0, 0.1, 1) 200ms; overflow: hidden; box-shadow: 2px 2px 5px var(--shadow); z-index: 90; } :root.mica .window.foc { /* background: url(bg-dark-mica.jpg) no-repeat fixed center; */ background: var(--mica) no-repeat fixed center; background-size: cover; backdrop-filter: none; -webkit-backdrop-filter: none; background-color: unset; background-color: var(--unfoc); } :root.corner_squ .window { corner-shape: squircle; border-radius: 20px; } .window.foc>.titbar { opacity: 1; } .window.foc { background: var(--bg70); backdrop-filter: saturate(3.5) contrast(0.8) blur(60px); filter: none; -webkit-backdrop-filter: saturate(3.5) contrast(0.8) blur(60px); box-shadow: 3px 3px 20px 3px var(--shadow); } .window.webapp { background: none; backdrop-filter: none; } .window.webapp>.titbar { outline: var(--href) solid 2px; margin-bottom: 1px; background-color: var(--unfoc); opacity: 1; } .window.webapp.load, .window.webapp.content { background: var(--unfoc); } .window.webapp.foc>.titbar { background-color: var(--bg70); backdrop-filter: blur(80px) saturate(1.3); --webkit-backdrop-filter: blur(80px) saturate(1.3); } :root.mica .window.webapp.foc>.titbar { background: none; backdrop-filter: none; --webkit-backdrop-filter: none; } .window.min { top: calc(95%) !important; left: 15% !important; transform: scale(0.3) !important; transition: cubic-bezier(0.9, 0, 0.1, 1) 200ms, top 200ms 100ms, backdrop-filter background-color 0s; } .window.show-begin { display: flex; flex-direction: column; } .window.show { transform: none; height: 80%; width: 70%; opacity: 1; display: flex; flex-direction: column; } .window>.loadback { height: 100%; width: 100%; position: absolute; display: none; } .window>.loadback>.icon { height: 90px; width: 90px; margin: 30px; } .window.load>.loadback { display: flex; align-items: center; justify-content: center; flex-direction: column; } .window.load>.content { opacity: 0; } .window.calc { height: 395px; width: 262px; } .window.notepad-fonts { height: 500px; width: 430px; } .window.run { width: 420px; height: 220px; left: 20px; bottom: 60px; } .window.notrans { transition: none !important; } .window>.titbar { min-height: 38px; /* background-color: green; */ padding: 0 0 0 9px; display: flex; position: initial; color: var(--text); opacity: 0.5; overflow: hidden; } .window>.titbar>p { font-size: 15px; margin-top: 9px; flex-grow: 1; } .window>.titbar>.icon { margin: 9px 8px 0 3px; height: 22px; width: 22px; } .window>.titbar>div { width: max-content; min-width: max-content; } .window>.content { width: 100%; height: 100%; min-height: 0px !important; } /* 问题:当我打开edge浏览器,并点击窗口最大化时,窗口确实覆盖了整个屏幕。但是在edge打开某个网页时, 窗口并没有覆盖到任务栏的位置,底下有一排巨大的空隙。 我把100%的高度设置为120%,好像问题就解决了? 我是小白,改着玩的,不知道会不会有其他bug发生,大佬们多多指教。 github-red2026 */ /* 定义当窗口处于最大状态时的样式 */ .window.max { width: 100% !important; height: 100% !important; /* 定位属性,确保窗口从屏幕的左上角开始 */ left: 0 !important; top: 0 !important; /* 移除圆角和边框,使窗口边缘与屏幕边缘无缝对接 */ border-radius: 0; border: none; /* 定义过渡效果,确保窗口在最大化时有平滑的过渡 */ transition: cubic-bezier(0.9, 0, 0.1, 1) 200ms, top 200ms 100ms, backdrop-filter, background 0ms; } .window.left { left: 0 !important; top: 0 !important; width: 50% !important; height: 100% !important; } .window.right { left: 50% !important; top: 0 !important; width: 50% !important; height: 100% !important; } /* 窗口控件 */ .wbtg { /* height: 100%; */ height: 33px; float: right; width: 45px; text-align: center; padding-top: 6px; font-size: 13px; transition: 50ms; border-radius: 3px; } .wbtg.red { border-top-right-radius: 10px; } .wbtg:hover { background-color: var(--hover-b); } .wbtg:active { opacity: 0.6; } .wbtg.red:hover { background-color: #d80d1c; color: #fff; } .window.max .wbtg.red { border-top-right-radius: 3px; } #window-fill { background-color: var(--fill); backdrop-filter: blur(25px); display: none; position: fixed; transition: all 200ms; margin: 10px; border-radius: 10px; box-shadow: 0 0 10px 1px var(--shadow); border: 1.5px solid #6f6f6f30; } #window-fill.top { width: 0; height: 0; top: 0; left: 50%; display: block; } #window-fill.top.fill { width: calc(100% - 20px); height: calc(100% - 20px); top: 0; left: 0; } #window-fill.left { width: 0; height: 0; top: 50%; left: 0; display: block; } #window-fill.left.fill { width: calc(50% - 20px); height: calc(100% - 20px); top: 0; left: 0; } #window-fill.right { width: 0; height: 0; top: 50%; left: 100%; display: block; } #window-fill.right.fill { width: calc(50% - 20px); height: calc(100% - 20px); top: 0; left: 50%; } .window>.resize-bar { z-index: 1 !important; } .window.max>.resize-bar { display: none !important; } .window>.resize-bar>.resize-knob { position: absolute; } .window>.resize-bar>.resize-knob.top { left: 7px; top: 0px; height: 7px; width: calc(100% - 14px); cursor: ns-resize; } .window>.resize-bar>.resize-knob.bottom { left: 7px; bottom: 0px; height: 7px; width: calc(100% - 14px); cursor: ns-resize; } .window>.resize-bar>.resize-knob.left { top: 7px; left: 0px; height: calc(100% - 14px); width: 7px; cursor: ew-resize; } .window>.resize-bar>.resize-knob.right { top: 7px; right: 0px; height: calc(100% - 14px); width: 7px; cursor: ew-resize; } .window>.resize-bar>.resize-knob.top-left { top: 0px; left: 0px; width: 7px; height: 7px; cursor: nwse-resize; } .window>.resize-bar>.resize-knob.bottom-right { bottom: 0px; right: 0px; width: 7px; height: 7px; cursor: nwse-resize; } .window>.resize-bar>.resize-knob.bottom-left { bottom: 0px; left: 0px; width: 7px; height: 7px; cursor: nesw-resize; } .window>.resize-bar>.resize-knob.top-right { top: 0px; right: 0px; width: 7px; height: 7px; cursor: nesw-resize; } /** 一些奇怪的东西 **/ .window.whiteboard>.titbar>p { color: #000 !important; ; } :root.dark .window.whiteboard>.titbar>p { text-shadow: 0 0 5px #fff, 0 0 5px #fff; } .save-item { white-space: nowrap; padding: 5px; border-radius: 5px; padding-top: 3px; } .save-item:hover { background-color: #aaa; cursor: pointer; transition: .3s; } body>.container { display: none; /* 默认隐藏 */ flex-direction: column; align-items: center; gap: 20px; text-align: center; position: fixed; z-index: 102; height: 100%; width: 100%; background: var(--bg70); justify-content: center; align-items: center; backdrop-filter: blur(50px) saturate(5); -webkit-backdrop-filter: blur(80px) saturate(1.5); } body>.container>.image-container { position: relative; width: 10%; height: 10%; left: 6%; } body>.container>.image-container>.svg { position: absolute; top: 0; left: 0; width: 100%; } .translucent { opacity: 0.5; } .rotating { animation-delay: 0.6s !important; animation: rotate 1s cubic-bezier(0.77, 0.02, 0.16, 1.04); transform-origin: 0% 100%; animation-fill-mode: forwards; } @keyframes rotate { from { transform: rotate(0deg); } to { transform: rotate(-90deg); } } #taskbar-preview { position: fixed; bottom: 60px; background: var(--card-bg); backdrop-filter: blur(20px) saturate(1.5); -webkit-backdrop-filter: blur(20px) saturate(1.5); box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 8px; padding: 12px; display: none; z-index: 10000; transition: all 0.2s ease-out; opacity: 0; transform: translateY(10px); pointer-events: none; } #taskbar-preview.show { display: block; opacity: 1; transform: translateY(0); } #taskbar-preview .preview-title { font-size: 13px; margin-bottom: 10px; display: flex; align-items: center; color: var(--text); opacity: 0.9; } #taskbar-preview .preview-title img { width: 16px; height: 16px; margin-right: 8px; } #taskbar-preview .preview-content { width: 280px; height: 180px; background: var(--hover); border-radius: 6px; overflow: hidden; border: 1px solid rgba(255, 255, 255, 0.05); } #taskbar-preview .preview-content img { width: 100%; height: 100%; object-fit: cover; pointer-events: none; } ================================================ FILE: desktop.html ================================================ Windows 12 网页版
半透明图标 旋转图标
横屏以获得最佳体验

小组件

--℃

-- 体感温度 --℃

50%

内存

50%

新闻

我们不对新闻内容负责

Windows 12 Copilot

AI Copilot 震撼回归,无地域限制,遥遥领先于微软

开始对话

使用前请先点击右上 "" 查看使用注意事项


WLAN
蓝牙
飞行模式
护眼模式
移动热点
辅助功能

12:29:19

星期一, 2022年09月22日




12:34:56

2022/10/01

无法处理桌面图标,请使用相对正常的浏览器访问。

Cannot process desktop icons, please use a relatively normal browser to access

添加小组件
个性化

快跑!

你的电脑即将爆炸

Windows 安全中心

安全性概览

网络流量使用

20.5 M
30%

网络速度

99 M/S
99M/S

入侵病毒清除

所有病毒均被清除

100%

电脑受病毒攻击频率

过去 30 天

网络通信比例

这个月
请求成功 80%
请求失败 5%
请求发出后无响应 19%
含有病毒 1%

请求记录

今天 仅展示最近5次请求
Https-Get

Get url : tjy-gitnub.github......

Https-Post

Post url :api.github.com/r......

Https-Get

Get url :cdn.jsdelivr.net/p......

Https-Get

Get url :win12server.freeh......

Https-Get

Get url :github.com/tjy-g......

Microsoft Store

热门免费应用 >
Visual Studio Code
免费下载
开发
原神
免费下载
游戏
我的世界
免费下载
游戏
Krita
免费下载
设计
VirtualBox
免费下载
工具
LibreOffice
免费下载
办公

设置

主页

Desktop-PingGai

瓶盖

重命名


所有功能尽在 Microsoft 账户
登录后,即可在设备上使用你最喜爱的 Microsoft 应用和服务。可以备份设备、让设备更安全,并使用 Microsoft 365 应用版和云储存空间。

推荐设置
最近使用的和常用的设置

蓝牙设备
管理、添加和删除设备

个性化设备

个性化

颜色

设置 Windows 的主题色

当前颜色


自定义颜色

主题

(!消耗大量 github api 限度!) 设置 Windows 的主题 想要上传自己的主题?

平滑圆角

启用平滑圆角

动画

系统界面元素过渡动画

阴影

为系统界面元素添加阴影效果

多窗口透明

为所有窗口开启透明效果,而不是仅用于焦点窗口 详细

Mica效果

为焦点窗口开启mica效果

开机音乐

是否启用开机音乐

语音输入球

是否启用语音输入球

隐私和安全性

清除桌面图标

这将清除用户自定义的所有图标

Token 管理

添加或删除 GitHub Access Token

保存 Token
清除 Token
查看 Token
您可以在这里填入您的Github Access Token来提高Github API限制访问次数,即可以更好地使用 Windows 更新、主题等功能。您的 Token 仅会存放在本地浏览器中,该数据不会传输至服务端,也更不会外泄,但请您妥善保管好自己的 Token。

计算器

关于 Win12 网页版

Windows 12 网页版

简介

  Windows 12 网页版是一个开源项目,由星源原创,使用 HTML、CSS 和 JavaScript,在网络上模拟、创新操作系统。

  此项目已发布至 GitHub,点击此处查看

  若您对于该项目有任何意见或建议,请在 GitHub 上提交 issues,您的问题会被尽可能快地解决。

  原创作者星源,点击以了解详细

开源说明

  此项目是一个开源项目,采用Eclipse基金会发行的Eclipse Public License 2.0许可证(网址:https://www.eclipse.org/legal/epl-2.0/)进行许可。在遵守该许可证的前提下,您可以自由使用本项目的源代码。

  根据许可,你可以对该项目进行传播、分发、修改以及二次发布,包括个人和商业用途。

  但您必须给出源码来源,包括作者,项目链接等,必须使用相同的协议开源。

  不是在该项目基础上进行增加、修改的,仅参考源码的,不需要开源,但也仅供学习用途。

特别感谢

  特别感谢 @NB-Group,他为本项目的后端开发做出了重要贡献!

贡献者

  感谢所有项目的贡献者(实时数据,计算方法:即为 Commits 次数)

Star

  感谢所有支持我们的人

其它

  此项目基于目前 Windows 版本创造,与微软的 Windows 12 正式版本不一致。

  此项目绝不附属于微软,且不应与微软操作系统或产品混淆,这也不是 Windows365 cloud PC。

  本项目中微软、Windows 和其他示范产品是微软公司的商标。本项目中 Android 是谷歌公司的商标。

  若您在本项目(网址为tjy-gitnub.github.io/win12/)之外的网站看到此页面,那么您可能正在浏览一个镜像网站。若欲造访原始页面,请点击这里

更新记录

v10.2.0 平滑圆角

  -(更新来自 @tjy-gitnub)
  -修复一些沉积问题
  -引入平滑圆角(需较新浏览器)
  -细节优化和修复

v10.1.0 增加对农历的支持

  -(更新来自 @stxttkx & @lingbopro)
  -现已可以显示农历日期。

v10.0.9 修复了一些已知问题

  -(更新来自 @tangyuan0821)
  -修复了一些已知问题。

v10.0.8 添加Word

  -(更新来自 @HHCL233)
  -添加Word应用

v10.0.7 优化关机后行为和设置的部分UI

  -(更新来自 @HHCL233)
  -删除设置中Windows更新页的重复元素
  -设置中系统页的重命名支持打开重命名窗口
  -关于Windows12应用的侧边栏更改为类似设置侧边栏的样式
  -支持在关机后按下回车重新开机

v10.0.6 优化部分应用

  -(更新来自 @HHCL233)
  -添加一个没用的重命名电脑窗口
  -更改“扫雷”名称并重新分类至Web应用下
  -将“开始菜单”的“Copilot”点击行为和任务栏“Copilot”点击行为一致(不会再打开窗口化Copilot)
  -支持通过“开始菜单”的“更多”查看推荐项目
  -“任务管理器”的进程占用颜色现在会跟随主题色
  -“文件资源管理器”中不可打开的侧边栏项现在打开会显示“你没有权限打开此文件”

v10.0.5.1 灾难性错误修复

  -(更新来自 @tangyuan0821)
  -修复繁体中文页面无法加载的问题

v10.0.5 设置优化

  -(更新来自 @tangyuan0821)
  - 对 “设置” 应用中的部分表述进行了优化,使其更契合微软的风格
  - 在“设置”中增加了“Windows预览体验计划”
  - 其他细微之处的更新

v10.0.4 扫雷

  -(更新来自 @kjmjh)
  -更新了扫雷

v10.0.3 终端彩蛋命令和系统工具

  -添加新的终端命令:cls、help、hello、matrix、snow、dance、systeminfo 和 starwars
  -增加互动和趣味彩蛋效果,如黑客帝国代码雨、下雪、窗口跳舞和星球大战文字滚动
  -添加系统信息显示和基础终端实用工具
  -增强终端用户体验,添加趣味和实用命令

v10.0.2 细节优化和修复

  -(更新来自 @tjy-gitnub)
  -Copilot 每日对话限制
  -细节优化和修复

v10.0.1 繁體中文語言支持

  -(更新来自 @tjy-gitnub)
  -添加繁中語言支持
  -细节优化和修复
  无偿请求帮助我们翻译此项目!详见项目主页

v10.0.0 AI Copilot 回归,走向国际化

  -(更新来自 @NB-Group)
  重启AI Copilot!
  -(更新来自 @tjy-gitnub)
  -部分英语翻译
  -细节优化和修复

v9.2.1 修复一些问题

  -(更新来自 @tjy-gitnub)
  -拆解 desktop.js
  -细节优化和修复

v9.2.0 整理

  -(更新来自 @tjy-gitnub)
  修改大量积累的 bug
  -关于开始菜单全屏的问题
  -关于小组件的大量问题
  -标签页的移动端适配问题
  -天气小组件 api 失效的问题
  新增和完善部分内容
  -鼠标中键关闭标签页
  -登录界面的美化
  -细节优化和修复

v9.1.2 任务栏预览

  -(更新来自 @fzlzjerry)
  -加入任务栏窗口预览

v9.1.1 移动端适配

  -(更新来自@NB-Group)
  - 在移动端竖屏体验时将会提示“横屏以获得最佳体验”

v9.1.0 真正的在线新闻功能!

  -(更新来自@lingbopro)
  - 现在在小组件面板里有真正从网络实时获取的新闻!
    (可能会出现卡顿,触发方式薛定谔)
  - 顺便重构了一下新闻部分

v9.0.0 窗口背景材质超级大升级!

  -(更新来自@NB-Group)
  - 新材质(仿win11 Mica)非常高级!
  - 将设置的UI更新了

v8.1.0 整理

  -(更新来自@tjy-gitnub)
  - 代码整理
  - 修复一些问题

v8.0.0

  -(更新来自@User782Tec)
  -使用svg矢量图优化了任务管理器性能图表的绘制
  -加入了半成品的Microsoft Store
  -其他一些细微之处的更新

更多

记事本

终端

				Microsoft Windows [版本 12.0.39035.7324]
				(c) Microsoft Corporation。保留所有权利。
			

			
C:\Windows\System32> 

Python 3.10.2

				Python 3.10.2  [MSC v.1912 64 bit (AMD64)] :: Anaconda, Inc. on win32
				Type "help", "copyright", "credits" or "license" for more information.
			

			
>>> 

Microsoft Edge

星源 Bing

Visual Studio Code

哔哩哔哩

AI Chat

扫雷

手机连接(适用于 Android™️ 的 Windows 子系统)

Python Editor

相机

Windows 12

提示

  欢迎使用“相机”应用!本应用由 User782Tec 开发, tjy-gitnub 维护。
  在使用中,此应用将会获取访问您摄像头的权限(用于进行拍摄照片等操作)。此应用不会将任何您的个人信息(包括所拍摄的照片)上传至服务器,更不会泄露给他人。
  若您不同意上述协议,则将不能使用此应用。

运行

Windows 将根据你所输入的名称,为你打开相应的程序、文件夹、文档或 Internet 资源。
打开:

Whiteboard

关于 Windows


Microsoft Windows

版本 25H2 (OS 内部版本 24612.1896)

© Microsoft Corporation。保留所有权利。

Windows12 专业版操作系统及其用户界面受美国和其他国家/地区的商标法和其他待颁布或已颁布的知识产权法保护。

根据Microsoft软件许可条款,许可如下用户使用本产品

Administrator

上面都是胡扯,切勿当真(双击隐藏此消息)

代码编辑器

图片查看器

媒体播放器

PDF 查看器

任务管理器

进程


进程名称
11.4%
CPU
11.4%
内存
11.4%
硬盘
电源使用情况

无筛选结果
请尝试使用其他名称、发布者或 PID 键入以进行筛选。


重置筛选器

性能


CPU
11.4%
10GHz
内存
11.4 / 100GB
11.4%
磁盘
SSD
1.14%
Wi-Fi
WLAN
发送: 1145 接收: 1145 Mbps
GPU 0
NBidia GeForce RTX 4090Ti
1%
CPU
The Wandering Earth (R) NB (R) Quantum Chip 550W @ 8192
% 利用率
100%
60 秒
0
利用率
11.4%
速度
1024.53 GHz
进程
1145
线程
114514
句柄
114514191918
正常运行时间
0:11:45:14
基准速度: 10.0 GHz
插槽: 1
内核: 32
逻辑处理器: 32
虚拟化: 已启用
L1缓存: 512 MB
L2缓存: 2.1 GB
L3缓存: 5.5 GB
内存
100GB
内存使用量
100GB
60 秒
0
内存组合
使用中(已压缩)
11.4 GB
可用
88.6 GB
已提交
12 / 100 GB
已缓存
5.5 GB
分页缓冲池
1 GB
非分页缓冲池
365 MB
速度: 4514MHz
已使用插槽: 2 / 2
外形规格: Row of chips
为硬件保留的内存:200MB
磁盘 0 (C: D:)
NB++ 360G
活动时间
100%
60 秒
0
磁盘传输速率
100 MB/秒
活动时间
1.14%
平均响应时间
0.014 毫秒
读取速度
14 KB/秒
写入速度
114 KB/秒
容量: 359 GB
已格式化: 359 GB
系统磁盘:
页面文件:
类型: SSD
Wi-Fi
NB Wireless LAN 802.11ac
吞吐量
100 Mbps
60 秒
0
发送
114 Mbps
接收
114 Mbps
适配器名称: WLAN
SSID: NB Network
连接类型: 802.11ac
IPv4地址: 114.514.19.81
IPv6地址: 2CBB::2CBB:2CBB:2CBB:2CBB
信号强度:
GPU
NBidia GeForce RTX 9090Ti
3D
Copy
Video Decode
Video Processing
专用 GPU 内存利用率
16 GB
共享 GPU 内存利用率
32 GB
利用率
1.1%
专用 GPU 内存
0.1 GB / 2 GB
共享 GPU 内存
1.1 GB / 16 GB
GPU 内存
1.2 / 18 GB
驱动程序版本: 11.45.14.19
驱动程序日期: 2025 / 1 / 5
DirectX 版本 12 (FL 12.1)
物理位置: PCI 总线 0、设备 14 、功能 0

设置


窗口管理

反馈

发送反馈

Word Preview

新建

空白文档

空白文档

最近

你最近尚未打开任何文档。

主标题

方形

表格

空白页

================================================ FILE: desktop.js ================================================ 'use strict'; /* Windows 12 网页版 GitHub: tjy-gitnub/win12 */ /********** 禁止格式化此文档! **********/ console.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; '); // 好高级,还能这样?? function loadlang(code) { $.i18n.properties({ name: 'lang', path: 'lang/', // 目录 language: code, mode: 'map', callback: function() { $('[data-i18n]').each(function() { // 标签的内容 // console.log($(this).data("i18n")); // console.log($.i18n.prop($(this).data("i18n"))); // if($.i18n.prop($(this).data("i18n"))!=$(this).html())console.log($(this).data("i18n"),$(this).html()); $(this).html($.i18n.prop($(this).data("i18n"))); }); $('[data-i18n-attr]').each(function() { // 标签的属性 // 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"))); $(this).attr($(this).data("i18n-attr"),$.i18n.prop($(this).data("i18n-key"))); }); } }); } let nl='zh-TW'; let langc={ 'zh-CN':'zh-CN', 'zh-cn':'zh-CN', 'zh-hans':'zh-CN', 'zh-Hans':'zh-CN', 'zh-TW':'zh-TW', 'zh-tw':'zh-TW', 'zh-hant':'zh-TW', 'zh-Hant':'zh-TW', 'zh-HK':'zh-TW', 'zh-hk':'zh-TW', 'zh':'zh-CN', 'en':'en', 'en-US':'en', 'en-us':'en', 'en-GB':'en', 'en-gb':'en' } let langcode,lang=(txt,id)=>{ return $.i18n.prop(id); }; if(localStorage.getItem('lang')!=null){ if(localStorage.getItem('lang')=='hans' || localStorage.getItem('lang')=='zh_cn' || localStorage.getItem('lang')=='zh-cn'){ localStorage.setItem('lang','zh-CN'); } }else{ if(navigator.language in langc) localStorage.setItem('lang',langc[navigator.language]); else localStorage.setItem('lang','en'); } langcode=localStorage.getItem('lang'); if(document.querySelectorAll('#loginback>.langselect>.'+langcode).length!=0){ $('#loginback>.langselect>.'+langcode).addClass('selected') }else{ $('#loginback>.langselect>.en').addClass('selected') } if(langcode!='zh-CN') loadlang(langcode); if(langcode=='zh-CN'){ lang=(txt,id)=>{ // if(txt!=$.i18n.prop(id))console.log(id,txt); return txt; }; } console.log('?') // 函数 lang(txt,id) /// langcode==zh_cn 下返回 txt, /// 否则返回语言 properties 文件中键 id 对应的值。 /// 用例: lang('设置','setting.name') // // 为开发方便,故不将简体中文纳入语言考虑 // 后端服务器 const server = 'http://win12server.freehk.svipss.top/'; const pages = { 'get-title': '', // 获取标题 }; const page = $('html')[0]; function disableIframes() { $('iframe:not(.nochanges)').css('pointer-events', 'none'); $('iframe:not(.nochanges)').css('touch-action', 'none'); } function enableIframes() { $('iframe:not(.nochanges)').css('pointer-events', 'auto'); $('iframe:not(.nochanges)').css('touch-action', 'auto'); } async function api(index, nobase=false) { if (!nobase) index='https://api.github.com/' +index; const token = localStorage.getItem('token'); if (token) { const headers = new Headers(); headers.append('Authorization', token); const res = await fetch( index, {headers: headers}); return res; } else { const res = await fetch( index); return res; } } page.addEventListener('mousedown', disableIframes); page.addEventListener('touchstart', disableIframes); page.addEventListener('mouseup', enableIframes); page.addEventListener('touchend', enableIframes); page.addEventListener('touchcancel', enableIframes); page.addEventListener('click',(event)=>{ if($('#start-menu').hasClass('show')&&!$(event.target).closest('#start-menu').length){ hide_startmenu(); } }); //开始菜单收回 // 上古代码,列表前的小竖线 document.querySelectorAll('list.focs').forEach(li => { li.addEventListener('click', () => { let _ = li.$$('span.focs')[0], la = li.$$('a.check')[0], las = li.$$('a'); if (_.dataset.type == 'abs') { $(_).addClass('cl'); $(_).css('top', (la.getBoundingClientRect().top - li.parentElement.getBoundingClientRect().top) + 'px'); setTimeout(() => { $(_).removeClass('cl'); }, 500); } else { $(_).addClass('cl'); $(_).css('top', la.offsetTop - las[las.length - 1].offsetTop); $(_).css('left', la.offsetLeft - li.offsetLeft); setTimeout(() => { $(_).removeClass('cl'); }, 500); } }); }); // 禁止拖拽图片 $('img').on('dragstart', () => { return false; }); // 右键菜单 $('html').on('contextmenu', () => { return false; }); function stop(e) { e.stopPropagation(); return false; } $('input,textarea,*[contenteditable=true]').on('contextmenu', (e) => { stop(e); return true; }); // 给桌面上的图标加右键菜单 function addMenu() { var parentDiv = $('#desktop')[0]; var childDivs = parentDiv.$$('#div'); for (var i = 0; i < childDivs.length; i++) { if (i <= 4) {//win12内置的5个图标不添加 continue; } let div = childDivs[i]; div.setAttribute('iconIndex', i - 5); div.addEventListener('contextmenu', (event) => { if (div.getAttribute('appname') != undefined) { return showcm(event, 'desktop.icon', [div.getAttribute('appname'), div.getAttribute('iconIndex')]); } return false; }, useCapture = true); } } var run_cmd = ''; const nomax = { 'calc': 0 , 'notepad-fonts': 0, 'camera-notice': 0, 'winver': 0, 'run': 0, 'wsa': 0 }; const nomin = { 'notepad-fonts': 0, 'camera-notice': 0, 'run': 0 }; var topmost = []; var sys_setting = [1, 1, 1, 0, 1, 1, 1]; var use_music = true; var use_mic_voice = true; // 右键菜单 /* 参考 desktop.html 开头信息 每个标识对应一个列表,每一项为一个右键菜单中显示的项,可以有以下形式: 1. 'text', 文本信息 2. ['text','script'], 分别为显示内容,点击执行的代码 3. arg => { ... return ... } 形参 arg 为 showcm() 方法第三个位置的用以传参的参数内容, 返回内容或为 'null' 表示跳过此项,或参考条目 2 的格式 */ const cms = { 'save-bar':[ arg => { return [' 移除', `removeEdgeSaveUrl('${arg}')`]; } ], 'titbar': [ arg => { if (arg in nomax) { return 'null'; } if ($('.window.' + arg).hasClass('max')) { return [' '+lang('还原','window.restore'), `maxwin('${arg}')`]; } else { return [' '+lang('最大化','window.max'), `maxwin('${arg}')`]; } }, arg => { if (arg in nomin) { return 'null'; } else { return [' '+lang('最小化','window.min'), `minwin('${arg}')`]; } }, arg => { if (arg in nomin) { return [' '+lang('关闭','close'), `hidewin('${arg}', 'configs')`]; } else { return [' '+lang('关闭','close'), `hidewin('${arg}')`]; } }, ], 'taskbar': [ arg => { return [' '+lang('关闭','close'), `hidewin('${arg}')`]; } ], 'desktop': [ [` ${lang('刷新','refresh')} F5`, '$(\'#desktop\').css(\'opacity\',\'0\');setTimeout(()=>{$(\'#desktop\').css(\'opacity\',\'1\');},100);setIcon();'], [' '+lang('切换主题','desktop.tgltheme'), 'toggletheme()'], ` ${lang('在 Github 中查看此项目','desktop.vogithub')}`, arg => { if (edit_mode) { return [' '+lang('退出编辑模式','desktop.exitedit'), 'editMode();']; } else if (!edit_mode) { return [' '+lang('进入编辑模式','desktop.enteredit'), 'editMode();']; } }, [' '+lang('关于 Win12 网页版','about.name'), '$(\'#win-about>.about\').addClass(\'show\');$(\'#win-about>.update\').removeClass(\'show\');openapp(\'about\');if($(\'.window.about\').hasClass(\'min\'))minwin(\'about\');'], [' '+lang('个性化','psnl'), 'openapp(\'setting\');$(\'#win-setting > div.menu > list > a.enable.appearance\')[0].click()'] ], 'desktop.icon': [ arg => { return [' '+lang('打开','open'), 'openapp(`' + arg[0] + '`)']; }, arg => { if (arg[1] >= 0) { return [' '+lang('删除','del'), 'desktopItem.splice(' + (arg[1]) + ', 1);saveDesktop();setIcon();addMenu();']; } else { return 'null'; } } ], 'winx': [ arg => { if ($('#start-menu').hasClass('show')) { return [' 关闭开始菜单', 'hide_startmenu()']; } else { return [' 打开开始菜单', `$('#start-btn').addClass('show'); if($('#search-win').hasClass('show')){$('#search-btn').removeClass('show'); $('#search-win').removeClass('show');setTimeout(() => {$('#search-win').removeClass('show-begin'); }, 200);}$('#start-menu').addClass('show-begin');setTimeout(() => {$('#start-menu').addClass('show'); }, 0);`]; } }, '
', [' '+lang('设置','setting.name'), 'openapp(\'setting\')'], [' '+lang('运行','run.name'), 'openapp(\'run\')'], [' '+lang('文件资源管理器','explorer.name'), 'openapp(\'explorer\')'], [' 搜索', `$('#search-btn').addClass('show');hide_startmenu(); $('#search-win').addClass('show-begin');setTimeout(() => {$('#search-win').addClass('show'); $('#search-input').focus();}, 0);`], '
', [' 关机', 'window.location=\'shutdown.html\''], [' 重启', 'window.location=\'reload.html\''], ], 'smapp': [ arg => { return [' '+lang('打开','open'), `openapp('${arg[0]}');hide_startmenu();`]; }, arg => { return [' 在桌面创建链接', 'var s=`

' + arg[1] + '

`;$(\'#desktop\').append(s);desktopItem[desktopItem.length]=s;addMenu();saveDesktop();']; }, arg => { return [' 取消固定', `$('#startmenu-r>.pinned>.apps>.sm-app.${arg[0]}').remove()`]; } ], 'smlapp': [ arg => { return [' '+lang('打开','open'), `openapp('${arg[0]}');hide_startmenu();`]; }, arg => { return [' 在桌面创建链接', 'var s=`

' + arg[1] + '

`;$(\'#desktop\').append(s);desktopItem[desktopItem.length]=s;addMenu();saveDesktop();']; }, arg => { return [' 固定到开始菜单', 'pinapp(\'' + arg[0] + '\', \'' + arg[1] + '\', \'openapp("' + arg[0] + '");hide_startmenu();\')']; } ], 'msgupdate': [ [' 查看详细', `openapp('about');if($('.window.about').hasClass('min')) minwin('about');$('#win-about>.about').removeClass('show');$('#win-about>.update').addClass('show'); $('#win-about>.update>div>details:first-child').attr('open','open')`], [' 关闭', '$(\'.msg.update\').removeClass(\'show\')'] ], 'explorer.folder': [ arg => { return [' '+lang('打开','open'), `apps.explorer.goto('${arg}')`]; }, arg => { return [' 在新标签页中打开', `apps.explorer.newtab('${arg}');`]; }, arg => { if ($('#win-explorer>.path>.tit>.path>div.text').length > 1) return [' '+lang('删除','del'), `apps.explorer.del('${arg}')`]; return 'null'; }, arg => { if ($('#win-explorer>.path>.tit>.path>div.text').length > 1) return [' 复制', `apps.explorer.copy_or_cut('${arg}','copy')`]; return 'null'; }, arg => { if ($('#win-explorer>.path>.tit>.path>div.text').length > 1) return [' 剪切', `apps.explorer.copy_or_cut('${arg}','cut')`]; return 'null'; }, arg => { if ($('#win-explorer>.path>.tit>.path>div.text').length > 1) return [' 重命名', `apps.explorer.rename('${arg}')`]; return 'null'; } ], 'explorer.file': [ arg => { const drive = arg.split('/')[0]; if (apps.explorer.mounts[drive]) return [' ' + lang('打开','open'), `apps.explorer.openMountedFile('${arg}')`]; return [' 打开(目前毛用没有)', '']; }, arg => { if ($('#win-explorer>.path>.tit>.path>div.text').length > 1) return [' '+lang('删除','del'), `apps.explorer.del('${arg}')`]; return 'null'; }, arg => { if ($('#win-explorer>.path>.tit>.path>div.text')[0].innerHTML != '此电脑') return [' 复制', `apps.explorer.copy_or_cut('${arg}','copy')`]; return 'null'; }, arg => { if ($('#win-explorer>.path>.tit>.path>div.text').length > 1) return [' 剪切', `apps.explorer.copy_or_cut('${arg}','cut')`]; }, arg => { if ($('#win-explorer>.path>.tit>.path>div.text').length > 1) return [' 重命名', `apps.explorer.rename('${arg}')`]; return 'null'; } ], 'explorer.content': [ arg => { if ($('#win-explorer>.path>.tit>.path>div.text').length > 1) return [' 新建文件', 'apps.explorer.add($(\'#win-explorer>.path>.tit\')[0].dataset.path,\'新建文本文档.txt\')']; return 'null'; }, arg => { if ($('#win-explorer>.path>.tit>.path>div.text').length > 1) return [' 新建文件夹', 'apps.explorer.add($(\'#win-explorer>.path>.tit\')[0].dataset.path,\'新建文件夹\',type=\'files\')']; return 'null'; }, arg => { if ($('#win-explorer>.path>.tit>.path>div.text').length > 1) return [' 粘贴', 'apps.explorer.paste($(\'#win-explorer>.path>.tit\')[0].dataset.path,\'新建文件夹\',type=\'files\')']; return 'null'; }, arg => { if ($('#win-explorer>.path>.tit>.path>div.text').length > 1) return [' 刷新', 'apps.explorer.goto($(\'#win-explorer>.path>.tit\')[0].dataset.path, false)']; return [' 刷新', 'apps.explorer.reset()']; }, arg => { if ($('#win-explorer>.path>.tit>.path>div.text').length <= 1 && apps.explorer.fsApiSupported) return [' 挂载本地文件夹', 'apps.explorer.mountDrive()']; return 'null'; } ], 'explorer.mounted': [ arg => [' 打开', `apps.explorer.goto('${arg}')`], arg => [' 卸载', `apps.explorer.unmountDrive('${arg}')`] ], 'explorer.tab': [ arg => { return [' 关闭标签页', `m_tab.close('explorer',${arg})`]; } ], 'edge.tab': [ arg => { return [' 命名标签页', `apps.edge.c_rename(${arg})`]; }, arg => { return [' 关闭标签页', `m_tab.close('edge',${arg})`]; } ], 'taskmgr.processes': [ arg => { return [' 结束任务', `apps.taskmgr.taskkill('${arg}')`]; } ] }; function showcm(e, cl, arg) { if ($('#cm').hasClass('show-begin')) { setTimeout(() => { $('#cm').css('left', e.clientX); $('#cm').css('top', e.clientY); let h = ''; cms[cl].forEach(item => { if (typeof (item) == 'function') { arg.event = e; ret = item(arg); if (ret == 'null') return true; h += `${ret[0]}\n`; } else if (typeof (item) == 'string') { h += item + '\n'; } else { h += `${item[0]}\n`; } }); $('#cm>list')[0].innerHTML = h; $('#cm').addClass('show-begin'); $('#cm>.foc').focus(); // .foc是用来模拟焦点的,将焦点放在右键菜单上 setTimeout(() => { $('#cm').addClass('show'); }, 0); setTimeout(() => { if (e.clientY + $('#cm')[0].offsetHeight > $('html')[0].offsetHeight) { $('#cm').css('top', e.clientY - $('#cm')[0].offsetHeight); } if (e.clientX + $('#cm')[0].offsetWidth > $('html')[0].offsetWidth) { $('#cm').css('left', $('html')[0].offsetWidth - $('#cm')[0].offsetWidth - 5); } }, 200); }, 200); return; } $('#cm').css('left', e.clientX); $('#cm').css('top', e.clientY); let h = ''; cms[cl].forEach(item => { if (typeof (item) == 'function') { let ret = item(arg); if (ret == 'null') { return true; }; h += `${ret[0]}\n`; } else if (typeof (item) == 'string') { h += item + '\n'; } else { h += `${item[0]}\n`; } }); $('#cm>list')[0].innerHTML = h; $('#cm').addClass('show-begin'); $('#cm>.foc').focus(); setTimeout(() => { $('#cm').addClass('show'); }, 0); setTimeout(() => { if (e.clientY + $('#cm')[0].offsetHeight > $('html')[0].offsetHeight) { $('#cm').css('top', e.clientY - $('#cm')[0].offsetHeight); } if (e.clientX + $('#cm')[0].offsetWidth > $('html')[0].offsetWidth) { $('#cm').css('left', $('html')[0].offsetWidth - $('#cm')[0].offsetWidth - 5); } }, 200); } $('#cm>.foc').blur(() => { let x = event.target.parentNode; $(x).removeClass('show'); setTimeout(() => { $(x).removeClass('show-begin'); }, 200); }); let font_window = false; // 下拉菜单 const dps = { 'notepad.file': [ [' 新建', `hidedp(true);apps.notepad._mountedFileHandle=null;$('#win-notepad>.text-box').addClass('down'); setTimeout(()=>{$('#win-notepad>.text-box').val('');$('#win-notepad>.text-box').removeClass('down')},200);`], [' 保存 Ctrl+S', `hidedp(true);apps.notepad.saveMounted();`], [' 另存为', `hidedp(true);$('#win-notepad>.save').attr('href', window.URL.createObjectURL(new Blob([$('#win-notepad>.text-box').html()]))); $('#win-notepad>.save')[0].click();`], '
', [' 退出', 'isOnDp=false;hidedp(true);hidewin(\'notepad\')'], ], 'notepad.edit': [ [' 复制 Ctrl+C', 'document.execCommand(\'copy\')'], [' 粘贴 Ctrl+V', 'document.execCommand(\'paste\')'], [' 剪切 Ctrl+X', 'document.execCommand(\'cut\')'], '
', [' 撤销 Ctrl+Z', 'document.execCommand(\'undo\')'], [' 重做 Ctrl+Y', 'document.execCommand(\'redo\')'], ], 'notepad.view': [ [' 插入正常字块', 'hidedp(true);$(\'#win-notepad>.text-box\')[0].innerHTML+=\'

T

\''], [' 插入主标题', 'hidedp(true);$(\'#win-notepad>.text-box\')[0].innerHTML+=\'

H1

\''], [' 插入次标题', 'hidedp(true);$(\'#win-notepad>.text-box\')[0].innerHTML+=\'

H2

\''], [' 插入副标题', 'hidedp(true);$(\'#win-notepad>.text-box\')[0].innerHTML+=\'

H3

\''], [' 插入下划线', 'hidedp(true);$(\'#win-notepad>.text-box\')[0].innerHTML+=\'U\''], [' 插入删除线', 'hidedp(true);$(\'#win-notepad>.text-box\')[0].innerHTML+=\'S\''], [' 插入斜体字', 'hidedp(true);$(\'#win-notepad>.text-box\')[0].innerHTML+=\'I\''], [' 插入加粗字', 'hidedp(true);$(\'#win-notepad>.text-box\')[0].innerHTML+=\'B\''], '
', [' 字体', 'font_window=true;hidedp(true);showwin(\'notepad-fonts\');apps.notepadFonts.reset();'], ] }; function playWindowsBackground() { var audio = new Audio('./media/Windows Background.wav'); audio.play(); } let dpt = null, isOnDp = false; $('#dp')[0].onmouseover = () => { isOnDp = true; }; $('#dp')[0].onmouseleave = () => { isOnDp = false; hidedp(); }; function showdp(e, cl, arg) { if ($('#dp').hasClass('show-begin')) { $('#dp').removeClass('show'); setTimeout(() => { $('#dp').removeClass('show-begin'); }, 200); if (e != dpt) { setTimeout(() => { showdp(e, cl, arg); }, 400); } return; } // dpt = e; const off = $(e).offset(); $('#dp').css('left', off.left); $('#dp').css('top', off.top + e.offsetHeight); let h = ''; dps[cl].forEach(item => { if (typeof (item) == 'function') { let ret = item(arg); if (ret == 'null') { return true; } h += `${ret[0]}\n`; } else if (typeof (item) == 'string') { h += item + '\n'; } else { h += `${item[0]}\n`; } }); $('#dp>list')[0].innerHTML = h; $('#dp').addClass('show-begin'); setTimeout(() => { $('#dp').addClass('show'); }, 0); setTimeout(() => { if (off.top + e.offsetHeight + $('#dp')[0].offsetHeight > $('html')[0].offsetHeight) { $('#dp').css('top', off.top - $('#dp')[0].offsetHeight); } if (off.left + $('#dp')[0].offsetWidth > $('html')[0].offsetWidth) { $('#dp').css('left', $('html')[0].offsetWidth - $('#dp')[0].offsetWidth - 5); } }, 200); } function hidedp(force = false) { setTimeout(() => { if (isOnDp && !force) { return; } $('#dp').removeClass('show'); setTimeout(() => { $('#dp').removeClass('show-begin'); }, 200); }, 100); } // 悬停提示 document.querySelectorAll('*[win12_title]:not(.notip)').forEach(a => { a.addEventListener('mouseenter', showdescp); a.addEventListener('mouseleave', hidedescp); }); function showdescp(e) { $(e.target).attr('data-descp', 'waiting'); setTimeout(() => { if ($(e.target).attr('data-descp') == 'hide') { return; } $(e.target).attr('data-descp', 'show'); $('#descp').css('left', e.clientX + 15); $('#descp').css('top', e.clientY + 20); $('#descp').text($(e.target).attr('win12_title')); $('#descp').addClass('show-begin'); setTimeout(() => { if (e.clientY + $('#descp')[0].offsetHeight + 20 >= $('html')[0].offsetHeight) { $('#descp').css('top', e.clientY - $('#descp')[0].offsetHeight - 10); } if (e.clientX + $('#descp')[0].offsetWidth + 15 >= $('html')[0].offsetWidth) { $('#descp').css('left', e.clientX - $('#descp')[0].offsetWidth - 10); } $('#descp').addClass('show'); }, 100); }, 500); } function hidedescp(e) { $('#descp').removeClass('show'); $(e.target).attr('data-descp', 'hide'); setTimeout(() => { $('#descp').removeClass('show-begin'); }, 100); } // 提示窗 /* 参考 desktop.html 开头信息, 格式、功能较简单,自行研究,不作赘述*/ const nts = { 'about': { cnt: lang(`

Windows 12 网页版

Windows 12 网页版是一个开放源项目,
希望让用户在网络上预先体验 Windows 12,
内容可能与 Windows 12 正式版本不一致。
使用标准网络技术,例如 HTML, CSS 和 JS
此项目绝不附属于微软,且不应与微软操作系统或产品混淆,
这也不是 Windows365 cloud PC
本项目中微软、Windows和其他示范产品是微软公司的商标
本项目中 Android 是谷歌公司的商标。

`,'nts.about'), btn: [ { type: 'main', text: lang(lang('关闭','close'),'close'), js: 'closenotice();' }, { type: 'detail', text: lang('更多','more'), js: 'closenotice();openapp(\'about\');if($(\'.window.about\').hasClass(\'min\'))minwin(\'about\');$(\'.dock.about\').removeClass(\'show\')' }, ] }, 'feedback': { cnt: `

${lang('反馈','nts.feedback.name')}

${lang('我们非常注重用户的体验与反馈','nts.feedback.txt')}

${lang('在github上提交issue (需要github账户)','nts.feedback.github')} `, btn: [ { type: 'main', text: lang(lang('关闭','close'),'close'), js: 'closenotice();' }, ] }, 'widgets': { cnt: `

${lang('添加小组件','nts.addwg')}

${lang('计算器','calc.name')} ${lang('天气','nts.addwg.weather')} ${lang('系统性能监视器','nts.addwg.monitor')} `, btn: [ { type: 'cancel', text: lang('取消','cancel'), js: 'closenotice();' } ] }, 'ZeroDivision': {//计算器报错窗口 // 甚至还报错我真的哭死,直接输入框显示error啥的不就完了。。 cnt: lang(`

错误

除数不得等于0

`,'calc.error.zero'), btn: [ { type: 'main', text: lang('确定','ok'), js: 'closenotice();' }, ] }, 'Can-not-open-file': { cnt: '

' + run_cmd + `

Windows 找不到文件 '` + run_cmd + '\'。请确定文件名是否正确后,再试一次。

', btn: [ { type: 'main', text: lang('确定','ok'), js: 'closenotice();' }, { type: 'detail', text: '在 Micrsoft Edge 中搜索', js: 'closenotice();openapp(\'edge\');window.setTimeout(() => {apps.edge.newtab();apps.edge.goto(' + run_cmd + ');}, 300);' } ] }, 'widgets.monitor': { cnt: `

切换监视器类型

CPU利用率 内存使用率 磁盘活动时间 网络吞吐量-接收 网络吞吐量-发送 GPU利用率 `, btn: [ { type: 'cancel', text: lang('取消','cancel'), js: 'closenotice();' } ] }, 'widgets.desktop': { cnt: `

添加桌面小组件

计算器 天气 系统性能监视器 `, btn: [ { type: 'cancel', text: lang('取消','cancel'), js: 'closenotice();' } ] }, 'widgets.news.source': { cnt: `

切换新闻源

新闻源未加载,请检查网络连接 `, btn: [{ type: 'cancel', text: lang('取消','cancel'), js: 'closenotice();' }], }, 'duplication file name': { cnt: `

错误

文件名重复

`, btn: [ { type: 'cancel', text: lang('取消','cancel'), js: 'closenotice();' } ] }, 'about-copilot': { cnt: `

关于 Windows 12 Copilot

你可以使用此 AI 助手帮助你更快地完成工作,此AI助手基于 Qwen3-Max 模型 (有人用Win12工作?)
也请适当使用,不要谈论敏感、违规话题,
请有身为一个人类最基本的道德底线。
在此特别感谢云智api(yunzhiapi.cn)为本项目提供赞助!

状态监测
云智API官网 `, btn: [ { type: 'main', text: lang('确定','ok'), js: 'closenotice();' }, ] }, 'shutdown': { cnt: `

即将注销你的登录

Windows 将在 114514 分钟后关闭。

`, btn: [ { type: 'main', text: lang('关闭','close'), js: 'closenotice();' } ] }, 'setting.update': { cnt: `

更新已就绪

请重启电脑以应用更新

`, btn: [ { type: 'main', text: '立即重启', js: 'location.href = `./reload.html`;' }, { type: 'detail', text: '稍后重启', js: 'closenotice();' } ] }, 'recognition' : { cnt: `

语音输入法使用须知

本语音输入法由@nb-group开发
使用的语音识别api 仅可在使用 Chromium 内核的浏览器上使用,
包括Microsoft Edge,Google Chrome等,
api(理论上)完全离线.
我们绝不会窃取您的输入信息,请放心使用。

每次语音识别都会重新申请一下麦克风,这是浏览器的问题,
可以在浏览器设置里选择始终允许。

哦对了,关掉提示窗口之后再点一次语音球才能开始识别。

`, btn: [ { type: 'main', text: lang('确定','ok'), js: 'closenotice();' }, ] }, 'setting.down': { cnt: `

下载完毕

请立即重新启动以应用更改

`, btn: [ { type: 'main', text: '重新启动', js: 'closenotice(); setTimeout(() => {window.location=`reload.html`;},200);' } ] }, 'whiteboard-saveas': { cnt: `

${lang('另存为','whiteboard.saveas.title')}

${lang('请输入文件名:','whiteboard.saveas.prompt')}

`, btn: [ { type: 'main', text: lang('保存','whiteboard.saveas.save'), js: 'apps.whiteboard.doSaveAs();' }, { type: 'detail', text: lang('取消','whiteboard.saveas.cancel'), js: 'closenotice();' } ] }, 'no-files-permission': { cnt: lang(`

文件资源管理器

你没有权限打开该文件,请向文件的所有者或管理员申请权限

`), btn: [ { type: 'main', text: lang(lang('关闭','close'),'close'), js: 'closenotice();' } ] }, 'rename-pc': { cnt: `

重命名你的电脑

你可以使用字母、连字符和数字的组合

`, btn: [ { type: 'main', text: lang('保存','pc.saveas.save'), js: '' }, { type: 'detail', text: lang('取消','pc.saveas.cancel'), js: 'closenotice();' } ] }, 'no-files-permission': { cnt: lang(`

文件资源管理器

你没有权限打开该文件,请向文件的所有者或管理员申请权限

`), btn: [ { type: 'main', text: lang(lang('关闭','close'),'close'), js: 'closenotice();' } ] }, 'rename-pc': { cnt: `

重命名你的电脑

你可以使用字母、连字符和数字的组合

`, btn: [ { type: 'main', text: lang('保存','pc.saveas.save'), js: 'closenotice();' }, { type: 'detail', text: lang('取消','pc.saveas.cancel'), js: 'closenotice();' } ] }, 'word-open-files-fail': { cnt: lang(`

打开失败

Word在试图打开文件时遇到错误

`), btn: [ { type: 'main', text: lang(lang('关闭','close'),'close'), js: 'closenotice();' } ] }, 'fs-api-unsupported': { cnt: lang(`

不支持的功能

您的浏览器不支持文件系统访问 API。请使用 Chrome 或 Edge 浏览器。

`, 'nts.fs-api-unsupported'), btn: [ { type: 'main', text: lang('确定','ok'), js: 'closenotice();' } ] }, 'fs-mount-error': { cnt: lang(`

挂载失败

无法挂载本地文件夹,权限可能被拒绝。

`, 'nts.fs-mount-error'), btn: [ { type: 'main', text: lang('确定','ok'), js: 'closenotice();' } ] }, 'unsupported-file-type': { cnt: lang(`

无法打开文件

没有找到可以打开此类型文件的应用程序。

`, 'nts.unsupported-file-type'), btn: [ { type: 'main', text: lang('确定','ok'), js: 'closenotice();' } ] }, 'file-read-error': { cnt: lang(`

读取失败

无法读取文件内容,权限可能已过期。

`, 'nts.file-read-error'), btn: [ { type: 'main', text: lang('确定','ok'), js: 'closenotice();' } ] }, 'file-write-error': { cnt: lang(`

保存失败

无法写入文件,权限可能已过期。

`, 'nts.file-write-error'), btn: [ { type: 'main', text: lang('确定','ok'), js: 'closenotice();' } ] }, }; function shownotice(name) { $('#notice>.cnt').html(nts[name].cnt); let tmp = ''; nts[name].btn.forEach(btn => { tmp += `${btn.text}`; }); $('#notice>.btns').html(tmp); $('#notice-back').addClass('show'); setTimeout(() => { $('#notice').addClass('show'); }, 200); } function closenotice() { $('#notice').removeClass('show'); setTimeout(() => { $('#notice-back').removeClass('show'); }, 200); } function closeVideo() { var video = apps.camera.video if (video) { try { var stream = video.srcObject; var tracks = stream.getTracks(); tracks.forEach(function (track) { track.stop(); }); video.srcObject = null; } catch (error) {} } } var shutdown_task = []; //关机任务,储存在这个数组里 // 为什么要数组? // 运行的指令 function runcmd(cmd, inTerminal=false) { if (cmd.slice(0, 3) == 'cmd') { run_cmd = cmd; if (!inTerminal) { openapp('terminal'); } return true; } else if (cmd === 'cls') { if (inTerminal) { $('#win-terminal>.text-cmd').html(''); } return true; } else if (cmd === 'help') { if (inTerminal) { $('#win-terminal>.text-cmd').append(` ${lang('有关某个命令的详细信息,请键入 HELP 命令名','terminal.help.title')} DIR ${lang('显示目录中的文件和子目录列表','terminal.help.dir')} LS ${lang('显示目录中的文件和子目录列表 (DIR的别名)','terminal.help.ls')} DEL ${lang('删除一个或多个文件','terminal.help.del')} CD ${lang('显示当前目录的名称或将其更改','terminal.help.cd')} CLS ${lang('清除屏幕','terminal.help.cls')} HELP ${lang('提供 Windows 命令的帮助信息','terminal.help.help')} SYSTEMINFO ${lang('显示系统信息','terminal.help.systeminfo')} SHUTDOWN ${lang('关闭计算机','terminal.help.shutdown')} CMD ${lang('打开新的命令提示符窗口','terminal.help.cmd')} EXIT ${lang('退出命令提示符程序','terminal.help.exit')} ${lang('彩蛋命令:','terminal.help.easter')} HELLO ${lang('打个招呼','terminal.help.hello')} MATRIX ${lang('黑客帝国特效','terminal.help.matrix')} SNOW ${lang('下雪特效','terminal.help.snow')} DANCE ${lang('让窗口跳舞','terminal.help.dance')} STARWARS ${lang('原力觉醒','terminal.help.starwars')} `); } return true; } else if (cmd === 'dir' || cmd === 'ls') { if (inTerminal) { $('#win-terminal>.text-cmd').append(` 驱动器 C 中的卷没有标签。 卷的序列号是 3E47-2B9A C:\\Windows\\System32 的目录 ${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()} . ${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()} .. 2023/10/01 10:30:00 1,024 calc.exe 2023/10/01 10:30:00 512 cmd.exe 2023/10/01 10:30:00 2,048 notepad.exe 2023/10/01 10:30:00 4,096 taskmgr.exe 2023/10/01 10:30:00 256 winver.exe 5 个文件 7,936 字节 2 个目录 21,474,836,480 可用字节 `); } return true; } else if (cmd.startsWith('del ')) { if (inTerminal) { const fileName = cmd.substring(4).trim(); if (fileName.toLowerCase().includes('system32') || fileName.toLowerCase().includes('windows') || fileName.toLowerCase().includes('program files')) { $('#win-terminal>.text-cmd').append(`错误: 拒绝访问。无法删除系统关键文件或目录。\n`); } else { $('#win-terminal>.text-cmd').append(`找不到文件 "${fileName}"。\n`); } } return true; } else if (cmd.startsWith('cd ')) { if (inTerminal) { const path = cmd.substring(3).trim(); if (path === '..') { $('#win-terminal>.text-cmd').append(`C:\\Windows\n`); } else if (path === '\\' || path === '/') { $('#win-terminal>.text-cmd').append(`C:\\\n`); } else { $('#win-terminal>.text-cmd').append(`C:\\Windows\\System32\\${path}\n`); } } return true; } else if (cmd.toLowerCase() === 'hello') { if (inTerminal) { const greetings = [ '你好呀! 今天也是元气满满的一天呢! (◍•ᴗ•◍)', 'Hello! 欢迎来到 Windows 12! ╰(*°▽°*)╯', '嗨! 很高兴见到你! (。♥‿♥。)', '你好! 我是 Windows 12 终端, 有什么可以帮你的吗? (❁´◡`❁)' ]; $('#win-terminal>.text-cmd').append(greetings[Math.floor(Math.random() * greetings.length)] + '\n'); } return true; } else if (cmd.toLowerCase() === 'matrix') { if (inTerminal) { const chars = 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン1234567890'; // 哈?(from stsc) let matrix = ''; // 创建一个专门的容器来放置 matrix 效果 const matrixContainer = $('
'); $('#win-terminal>.text-cmd').append(matrixContainer); for (let i = 0; i < 15; i++) { let line = ''; for (let j = 0; j < 50; j++) { const rand = Math.random(); if (rand < 0.3) { line += `${chars[Math.floor(Math.random() * chars.length)]}`; } else if (rand < 0.4) { line += `${chars[Math.floor(Math.random() * chars.length)]}`; } else { line += `${chars[Math.floor(Math.random() * chars.length)]}`; } } matrix += line + '\n'; } matrixContainer.html(matrix); // 添加动画效果 const interval = setInterval(() => { const newLine = Array.from({length: 50}, () => { const rand = Math.random(); if (rand < 0.3) { return `${chars[Math.floor(Math.random() * chars.length)]}`; } else if (rand < 0.4) { return `${chars[Math.floor(Math.random() * chars.length)]}`; } else { return `${chars[Math.floor(Math.random() * chars.length)]}`; } }).join(''); const matrixContent = matrixContainer.html().split('\n'); matrixContent.shift(); matrixContent.push(newLine); matrixContainer.html(matrixContent.join('\n')); }, 100); // 10秒后停止动画并移除容器 setTimeout(() => { clearInterval(interval); setTimeout(() => { matrixContainer.fadeOut(500, function() { $(this).remove(); }); }, 500); }, 10000); } return true; } else if (cmd.toLowerCase() === 'snow') { if (inTerminal) { $('#win-terminal>.text-cmd').append('让整个屏幕下雪吧! ❄️\n'); if (!$('#snow-container').length) { $('body').append(`
`); } const snowflakes = ['❄', '❅', '❆', '✻', '✼', '❉']; const pileFlakes = ['❄', '❅', '❆']; const colors = ['#fff', '#eef', '#ddf']; let pileCount = 0; let lastPilePosition = 50; // 用于记录上一个堆积位置 function createSnowflake() { const flake = snowflakes[Math.floor(Math.random() * snowflakes.length)]; const color = colors[Math.floor(Math.random() * colors.length)]; const size = Math.random() * 1.2 + 0.6; const left = Math.random() * 100; const fallDuration = 3 + Math.random() * 2; const $snowflake = $(`${flake}`); $('#snow-container').append($snowflake); setTimeout(() => { const rotation = Math.random() * 360; const finalLeft = left + (Math.random() - 0.5) * 20; $snowflake.css({ transform: `rotate(${rotation}deg) translateZ(0)`, top: '90%', left: `${finalLeft}%` }); }, 50); setTimeout(() => { $snowflake.css({ transition: 'all 0.5s ease-out', opacity: 0 }); if (pileCount < 200) { const pileFlake = pileFlakes[Math.floor(Math.random() * pileFlakes.length)]; const pileSize = Math.random() * 0.4 + 0.3; // 减小堆积雪花的大小 // 计算新的堆积位置,使其更自然 const deviation = (Math.random() - 0.5) * 30; lastPilePosition = Math.max(10, Math.min(90, lastPilePosition + deviation)); const pileLeft = lastPilePosition; // 计算堆积高度,使其形成自然的山形 const baseHeight = Math.sin((pileLeft - 50) * Math.PI / 180) * 20; const pileHeight = Math.max(0, 20 - Math.abs(pileLeft - 50) / 2.5 + baseHeight); const $pile = $(`${pileFlake}`); $('#snow-pile').append($pile); setTimeout(() => { $pile.css({ transform: `scale(1) translateZ(${Math.random() * 50}px) rotate(${Math.random() * 30 - 15}deg)`, opacity: 0.85 }); }, 50); pileCount++; } setTimeout(() => $snowflake.remove(), 500); }, fallDuration * 1000); } // 持续创建新雪花 const snowInterval = setInterval(() => { if ($('#snow-container .snowflake').length < 100) { createSnowflake(); } }, 200); // 30秒后停止动画并缓慢消失 setTimeout(() => { clearInterval(snowInterval); // 让所有堆积的雪花缓慢消失 $('#snow-pile span').each(function(i) { const $pile = $(this); setTimeout(() => { $pile.css({ transition: 'all 0.5s ease-in', opacity: 0, transform: 'scale(0) translateY(10px)' }); }, Math.random() * 2000); }); // 让飘落的雪花消失 $('#snow-container .snowflake').each(function(i) { const $flake = $(this); setTimeout(() => { $flake.css({ transition: 'all 1s ease-in', opacity: 0 }); }, Math.random() * 2000); }); setTimeout(() => { $('#snow-container').fadeOut(1000, function() { $(this).remove(); }); }, 2500); }, 30000); } return true; } else if (cmd.toLowerCase() === 'dance') { if (inTerminal) { $('#win-terminal>.text-cmd').append('窗口开始跳舞啦! ♪(^∇^*)\n'); const windows = $('.window:not(.min)'); const danceSteps = [ { transform: 'rotate(5deg) translateY(-10px)' }, { transform: 'rotate(-5deg) translateY(0px)' }, { transform: 'rotate(5deg) translateX(10px)' }, { transform: 'rotate(-5deg) translateX(-10px)' }, { transform: 'rotate(0deg) translate(0, 0)' } ]; windows.each(function() { const win = $(this); let danceCount = 0; const danceInterval = setInterval(() => { danceCount++; win.css({ transition: 'transform 0.3s ease-in-out', transform: danceSteps[danceCount % danceSteps.length].transform }); // 跳舞15次后停止 if (danceCount >= 15) { clearInterval(danceInterval); win.css({ transition: 'transform 0.5s ease-out', transform: 'none' }); } }, 300); }); } return true; } else if (cmd === 'systeminfo') { if (inTerminal) { const d = new Date(); $('#win-terminal>.text-cmd').append(` 主机名: WIN12-WEB OS 名称: Microsoft Windows 12 网页版 OS 版本: 12.0.39035.7324 OS 制造商: Microsoft Corporation OS 配置: 主要工作站 OS 构建类型: Multiprocessor Free 注册的所有人: Web User 注册的组织: Web Organization 产品 ID: 12345-67890-09876-54321 初始安装日期: ${d.toLocaleDateString()} 系统启动时间: ${d.toLocaleString()} 系统制造商: Web Browser 系统型号: Virtual Machine 系统类型: x64-based PC 处理器: AMD64 Family Web Browser BIOS 版本: Web Browser Virtual BIOS Windows 目录: C:\\Windows 系统目录: C:\\Windows\\System32 启动设备: \\Device\\HarddiskVolume1 系统区域设置: zh-cn;中文(中国) 输入法区域设置: zh-cn;中文(中国) 时区: (UTC+08:00)北京,重庆,香港特别行政区,乌鲁木齐 物理内存总量: 8,192 MB 可用的物理内存: 4,096 MB 虚拟内存: 最大值: 16,384 MB 虚拟内存: 可用: 12,288 MB 虚拟内存: 使用中: 4,096 MB 页面文件位置: C:\\pagefile.sys 域: WORKGROUP 登录服务器: \\\\WIN12-WEB 修补程序: 0 个修补程序已安装 网卡: 1 个 NIC 已安装 [01]: Ethernet Browser Adapter `); } return true; } else if (cmd in apps) { openapp(cmd); return true; } else if (cmd.replace('.exe', '') in apps) { openapp(cmd.replace('.exe', '')); return true; } else if (cmd.includes('shutdown')) {//关机指令 by fzlzjerry // 保存当前命令以供后续使用 run_cmd = cmd; // 将命令按空格分割成数组以便解析参数 var cmds = cmd.split(' '); // 检查命令是否为shutdown或shutdown.exe if ((cmds[0] == 'shutdown') || (cmds[0] == 'shutdown.exe')) { // 如果没有参数,显示帮助信息 if (cmds.length == 1) { // 如果不是在终端中执行,则打开终端 if(!inTerminal){ openapp('terminal'); $('#win-terminal').html('
');
                }
                // 显示帮助信息
                $('#win-terminal>.text-cmd').append(`
shutdown [-s] [-r] [-f] [-a] [-t time]
-s:关机
-r:重启
-f:注销
-a:取消之前的操作
-t time:指定在 time秒 后操作

其余不多做介绍了` + (inTerminal?'' : `
请按任意键继续. . .`));
                if (!inTerminal) {
                    $('#win-terminal>pre>input').focus();
                }
                return true;
            }
            
            // 初始化参数变量
            let hasTime = false;      // 是否指定了时间
            let timeValue = 0;        // 延迟时间值(秒)
            let operation = '';       // 操作类型(关机/重启/注销)
            let forceMode = false;    // 是否为强制模式(不显示通知)

            // 检查并解析时间参数 (-t 或 /t)
            if (cmds.includes('-t') || cmds.includes('/t')) {
                const timeFlag = cmds.includes('-t') ? '-t' : '/t';
                const timeIndex = cmds.indexOf(timeFlag);
                // 检查时间参数是否有效
                if (timeIndex < cmds.length - 1 && !isNaN(cmds[timeIndex + 1])) {
                    hasTime = true;
                    timeValue = parseInt(cmds[timeIndex + 1]);
                } else {
                    // 时间参数无效时显示错误信息
                    $('#win-terminal>.text-cmd').append(`错误: 无效的时间参数\n`);
                    return true;
                }
            }

            // 检查是否为强制模式 (-f 或 /f)
            if (cmds.includes('-f') || cmds.includes('/f')) {
                forceMode = true;
            }

            // 检查是否为取消操作 (-a 或 /a)
            if (cmds.includes('-a') || cmds.includes('/a')) {
                // 如果有正在进行的关机任务
                if (shutdown_task.length > 0) {
                    // 清除所有关机任务
                    for (let task of shutdown_task) {
                        if (task != null) {
                            try {
                                clearTimeout(task);
                            } catch (err) { console.log(err); }
                        }
                    }
                    shutdown_task = [];
                    // 显示取消通知
                    nts['shutdown'] = {
                        cnt: `
                        

注销已取消

计划的关闭已取消。

`, btn: [ { type: 'main', text: lang('关闭','close'), js: 'closenotice();' }, ] }; shownotice('shutdown'); } else { // 如果没有正在进行的关机任务,显示错误信息 $('#win-terminal>.text-cmd').append(`错误: 没有正在进行的关机操作\n`); } return true; } // 确定操作类型 if (cmds.includes('-s') || cmds.includes('/s')) { operation = 'shutdown'; // 关机 } else if (cmds.includes('-r') || cmds.includes('/r')) { operation = 'restart'; // 重启 } else if (cmds.includes('-f') || cmds.includes('/f')) { operation = 'logoff'; // 注销 } else { // 如果没有指定有效的操作类型,显示错误信息 $('#win-terminal>.text-cmd').append(`错误: 无效的操作参数\n`); return true; } // 计算延迟时间和显示文本 const delay = hasTime ? timeValue * 1000 : 0; // 将秒转换为毫秒 const timeString = hasTime ? calcTimeString(timeValue) : '立即'; // 准备通知内容 nts['shutdown'] = { cnt: `

即将${operation === 'restart' ? '重启' : operation === 'logoff' ? '注销' : '关机'}

Windows 将在 ${timeString} 后${operation === 'restart' ? '重启' : operation === 'logoff' ? '注销' : '关机'}。

`, btn: [ { type: 'main', text: lang('关闭','close'), js: 'closenotice();' }, ] }; // 创建定时任务 const task = setTimeout(() => { // 根据操作类型跳转到相应页面 if (operation === 'restart') { window.location.href = './reload.html'; } else if (operation === 'logoff') { window.location.href = './login.html'; } else { window.location.href = './shutdown.html'; } }, delay); // 将任务添加到任务列表 shutdown_task.push(task); // 如果不是强制模式,显示通知 if (!forceMode) { shownotice('shutdown'); } return true; } } else if (cmd.toLowerCase() === 'starwars') { if (inTerminal) { $('#win-terminal>.text-cmd').append('原力与你同在... ⚔️\n'); // 创建星球大战容器 const starWarsContainer = $('
'); $('#win-terminal>.text-cmd').append(starWarsContainer); // 添加星球大战文本 const text = ` Episode XII WIN12 STRIKES BACK 在遥远的未来,一个充满 科技的银河系中... Windows操作系统已经 进化到了第12代。 然而,这个系统不仅仅 是一个操作系统,它是 一个充满原力的存在。 此刻,一股神秘的力量 正在你的电脑中觉醒... 你,就是那个被选中的人, 将带领这个系统走向新的 纪元... 愿原力与你同在! `; const crawl = $(`
`); crawl.html(text); starWarsContainer.append(crawl); // 添加动态背景星星 for (let i = 0; i < 200; i++) { const size = Math.random() * 2 + 1; const speed = Math.random() * 3 + 1; const star = $(`
`); starWarsContainer.append(star); } // 添加CSS动画 const style = $(``); starWarsContainer.append(style); // 30秒后清理 setTimeout(() => { starWarsContainer.fadeOut(2000, function() { $(this).remove(); }); }, 30000); } return true; } return false; } // 语音球 var voiceBall = document.getElementById("voiceBall"); var nbFlag = true; var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; var isDragging = false; voiceBall.addEventListener("mousedown", dragMouseDown); voiceBall.addEventListener("mouseup", stopDrag); function dragMouseDown(e) { e.preventDefault(); pos3 = e.clientX; pos4 = e.clientY; document.addEventListener("mousemove", elementDrag); isDragging = false; } function elementDrag(e) { e.preventDefault(); pos1 = pos3 - e.clientX; pos2 = pos4 - e.clientY; pos3 = e.clientX; pos4 = e.clientY; voiceBall.style.top = (voiceBall.offsetTop - pos2) + "px"; voiceBall.style.left = (voiceBall.offsetLeft - pos1) + "px"; isDragging = true; } function stopDrag() { document.removeEventListener("mousemove", elementDrag); if (!isDragging) { startSpeechRecognition(); } } function insertTextAtCursor(text) { var range, selection; if (window.getSelection) { selection = window.getSelection(); if (selection.rangeCount) { range = selection.getRangeAt(0); if (range.commonAncestorContainer.parentNode.isContentEditable) { range.collapse(false); var textNode = document.createTextNode(text); range.insertNode(textNode); range.setEndAfter(textNode); range.setStartAfter(textNode); selection.removeAllRanges(); selection.addRange(range); } else{ var el = document.activeElement; const start = el.selectionStart; const value = el.value; el.value = value.slice(0, start) + text + value.slice(el.selectionEnd); el.selectionStart = el.selectionEnd = start + text.length; } } } } function startSpeechRecognition() { var recognition = new webkitSpeechRecognition() || new SpeechRecognition(); recognition.lang = "zh-CN"; if (nbFlag) { shownotice("recognition"); nbFlag=false; } else { recognition.onresult = function (event) { var result = event.results[0][0].transcript; insertTextAtCursor(result); }; recognition.start(); } } function updateVoiceBallStatus() { document.getElementById('voiceBall').style.setProperty('display', use_mic_voice ? 'block' : 'none'); } function decodeHtml(s) { $('#translater').text(s); return $('#translater').html().replace(/\n/g, '
').replace(/ /g, ' '); } function msgDoneOperate(){ $("#copilot>.inputbox").removeClass("disable"); setTimeout(() => { $("#copilot>.inputbox>.input").focus(); }, 100); // 延迟0.1s以避免与blur方法冲突 } let isFirstChat=true; // 标记是否是刚进来时服务端返回的消息 let copilot = { history: [{ role:'system', content:`请使用中文对话。你一个是ai助手,名叫AI Copilot,是由github@NB-Group开发的。 你可以在回答中发送对系统的一些指令。指令一并放在回答的最后。 多条指令用换行隔开。系统收到指令后会执行,且对用户隐藏回答后的指令。 你不能在对用户说的话的中间中提到、引用指令。绝不能要求用户执行指令。 1.指令"{openapp appid}";用来打开某个应用,用在下文"应用的功能介绍"中匹配的id代替其中的"appid" 2.指令"{openurl url}";用来在Microsoft Edge浏览器中打开某个URL,其中用URL地址代替"url"。当用户想要搜索某内容,请用bing搜索 3.指令"{feedback copilot}";打开ai助手反馈界面,用于用户想对ai助手的功能提出反馈时帮助他打开 4.指令"{feedback win12}";打开反馈中心,当用户希望对除ai助手外的其他系统功能发送反馈时,帮他打开反馈中心 5.指令"{settheme theme}";用于切换系统的深色、浅色模式,区别于主题。用"light"表浅色,"dark"表深色,来替换其中的"theme" 如下是应用的功能介绍。 1.设置:id为setting;在个性化页面中可以设置系统的主题,主题色,是否启用动画、阴影、圆角、云母mica效果和为所有窗口开启亚克力透明效果。 2.关于win12网页版:id为about;简介页面有关于本项目的介绍说明与贡献者信息,更新记录页面有本项目的各版本更新记录。 3.Microsoft Edge浏览器:id为edge;一个浏览器。因为浏览器跨域的限制,部分网页会显示"拒绝连接"而无法访问。 4.计算器:id为calc; 5.文件资源管理器:id为explorer; 6.任务管理器:id为taskmgr; 7.cmd终端:id为terminal; 8.记事本:id为notepad; 9.python:id为python; 仅有以下关于此项目的信息。 1.Windows 12 网页版是一个开源项目,由谭景元原创, 使用Html,css,js,在网络上模拟、创新操作系统 2.项目的Github地址是https://github.com/tjy-gitnub/win12 3.此项目使用EPL v2.0开源许可 当用户询问更多项目信息时,帮助他打开"关于win12网页版"应用。 比如这时用户说"请打开计算器",你会回答什么?` },{ role:'assistant', content:'好的呢,现在我就帮您打开计算器。\n{openapp calc}' },{ role:'system', content:'很好。现在开始与用户对话。' },{ role:'assistant', content:'欢迎使用 Windows 12 Copilot AI助手,有什么可以帮您?' }], init: () => { $('#copilot>.chat').html(''); $('#copilot>.chat').append(`

本 AI 助手基于Qwen3-max模型,目前支持以下操作:
1.打开除webapp外大多应用
2.在浏览器中打开链接、搜索
3.发送对系统、AI助手的反馈
4.切换颜色主题
若您在使用中出现异常可先至状态监测页面(https://status.tangyuan0821.com/status/win12/)查看状态,若确有异常请及时向我们反馈。

`); setTimeout(() => { $('#copilot>.chat').append(`

欢迎使用 Windows 12,有什么可以帮您?

`); $('#copilot>.inputbox').removeClass('disable'); $('#copilot>.chat').scrollTop($('#copilot>.chat')[0].scrollHeight); }, 200); }, send: (t, showusr = true, role='user') => { // 输入验证 if (t.length == 0) { $('#copilot>.chat').append('

请发一些有意义的东西

'); $('#copilot>.chat').scrollTop($('#copilot>.chat')[0].scrollHeight); msgDoneOperate(); return; } $('#copilot>.inputbox').addClass('disable'); // 显示用户消息 if (showusr) { $('#copilot>.chat').append(`

${t}

`); } copilot.history.push({ role: role, content: t }); $('#copilot>.chat').scrollTop($('#copilot>.chat')[0].scrollHeight); // 存储uid const uid = localStorage.getItem('copilot_uid') || (() => { const newUid = Math.floor(100000 + Math.random() * 900000); // 生成 100000-999999 的随机六位数 localStorage.setItem('copilot_uid', newUid.toString()); return newUid; })(); // 构建API请求URL const encodedQuestion = encodeURIComponent(t); const apiUrl = `https://yunzhiapi.cn/vip/win12/qwen3-max/index.php?question=${encodedQuestion}&system=${encodeURIComponent(copilot.history[0].content)}&uid=${uid}`; // API请求 $.ajax({ url: apiUrl, method: 'GET', success: function(responseText) { msgDoneOperate(); // 处理特殊命令 let rt = responseText; let r = []; if (/{.+}/.test(rt)) { r = rt.match(/{.+?}/g) || []; } if (r.length) { for (const i of r) { if (/{openapp .+?}/.test(i)) { let t = i.match(/(?<={openapp ).+(?=})/)[0]; if($('.window.'+t).length){ openapp(t); rt = rt.replace(i, `

打开应用

${$(`.window.${t}>.titbar>p`).text()}

`); }else{ rt = rt.replace(i, `

打开应用

${t} (AI 理解力较差,见谅)

`); } } else if (/{openurl .+?}/.test(i)) { const t = i.match(/(?<={openurl ).+(?=})/)[0]; openapp('edge'); apps.edge.newtab(); apps.edge.goto(t); rt = rt.replace(i, `

打开URL

${decodeHtml(t)}

`); } else if (/{feedback win12}/.test(i)) { shownotice('feedback'); rt = rt.replace(i, '

反馈

关于 Windows 12 网页版

'); } else if (/{feedback copilot}/.test(i)) { shownotice('feedback-copilot'); rt = rt.replace(i, '

反馈

关于 Windows 12 Copilot

'); } else if (/{settheme .+?}/.test(i)) { const t = i.match(/(?<={settheme ).+(?=})/)[0]; if ((t == 'light' && $(':root').hasClass('dark')) || (t == 'dark' && !$(':root').hasClass('dark'))) { toggletheme(); } if(t!='light' && t!='dark') rt = rt.replace(i, `

切换外观模式

${t} 模式 (AI 理解力较差,见谅)

`); else rt = rt.replace(i, `

切换外观模式

${t == 'dark' ? '深色' : '浅色'} 模式

`); } } $('#copilot>.chat').append(`
${rt}
`); } else { $('#copilot>.chat').append(`

${decodeHtml(rt)}

`); } copilot.history.push({ role: 'assistant', content: responseText }); $('#copilot>.chat').scrollTop($('#copilot>.chat')[0].scrollHeight); msgDoneOperate(); }, error: function(error) { console.log(error); $('#copilot>.chat').append('

发生错误,请查看控制台输出或重试

'); $('#copilot>.chat').scrollTop($('#copilot>.chat')[0].scrollHeight); msgDoneOperate(); } }); }, ana: (resp)=>{ } }; // 日期、时间 let da = new Date(); const date = { 'zh-CN':`星期${['日', '一', '二', '三', '四', '五', '六'][da.getDay()]}, ${da.getFullYear()}年${(da.getMonth() + 1).toString().padStart(2, '0')}月${da.getDate().toString().padStart(2, '0')}日`, 'zh-TW':`星期${['日', '一', '二', '三', '四', '五', '六'][da.getDay()]}, ${da.getFullYear()}年${(da.getMonth() + 1).toString().padStart(2, '0')}月${da.getDate().toString().padStart(2, '0')}日`, 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()}` }[langcode]; $('#startmenu-r>.row1>.tool>.date').text(date); $('.dock.date>.date').text(`${da.getFullYear()}/${(da.getMonth() + 1).toString().padStart(2, '0')}/${da.getDate().toString().padStart(2, '0')}`); $('#datebox>.tit>.date').text(date); function loadtime() { let d = new Date(); let time = d.toLocaleTimeString(); $('#startmenu-r>.row1>.tool>.time').text(time); $('.dock.date>.time').text(time); $('#datebox>.tit>.time').text(time); $('.settingTime').text(time); } // apps.setting.theme_get();//提前加载主题 loadtime(); setTimeout(() => { loadtime(); setInterval(loadtime, 1000); }, 1000 - da.getMilliseconds());//修复时间不精准的问题。以前的误差:0-999毫秒;现在:几乎没有 let d = new Date(); let today = new Date().getDate(); let start = 7 - ((d.getDate() - d.getDay()) % 7) + 1; let daysum = new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate(); for (let i = 1; i < start; i++) { $('#datebox>.cont>.body')[0].innerHTML += ''; } for (let i = 1; i <= daysum; i++) { if (i == today) { $('#datebox>.cont>.body')[0].innerHTML += `

${i}

`; continue; } $('#datebox>.cont>.body')[0].innerHTML += `

${i}

`; } function pinapp(id, name, command) { if ($('#startmenu-r>.pinned>.apps>.a.sm-app.' + id).length) return; $('#startmenu-r>.pinned>.apps').append(`

${name}

`); } // 应用方法 // png 格式的图标在此备注,否则以 标识+.svg 的名称自动检索 const icon = { bilibili: 'bilibili.png', vscode: 'vscode.png', // python: 'python.png', winver: 'about.svg', // run: 'run.png', // whiteboard: 'whiteboard.png', taskmgr: 'taskmgr.png', imgviewer: 'files/picture.png', 'code-editor': 'vscode.png', mediaplayer: 'files/vidio.png', pdfviewer: 'files/pdf.svg' }; function geticon(name) { if (icon[name]) return icon[name]; else return name + '.svg'; } function openapp(name) { if (taskmgrTasks.findIndex(elt => elt.link == name) > -1 && apps.taskmgr.tasks.findIndex(elt => elt.link == name) == -1) { apps.taskmgr.tasks.splice(apps.taskmgr.tasks.length, 0, taskmgrTasks.find(elt => elt.link == name)); } if ($('#taskbar>.' + name).length != 0) { if ($('.window.' + name).hasClass('min')) { minwin(name); } focwin(name); return; } $('.window.' + name).addClass('load'); showwin(name); $('#taskbar').attr('count', Number($('#taskbar').attr('count')) + 1); $('#taskbar').append(``); if ($('#taskbar').attr('count') == '1') { $('#taskbar').css('display', 'flex'); } $('#taskbar>.' + name).addClass('foc'); setTimeout(() => { $('#taskbar').css('width', 4 + $('#taskbar').attr('count') * (34 + 4)); }, 0); let tmp = name.replace(/\-(\w)/g, function (all, letter) { return letter.toUpperCase(); }); if (apps[tmp].load && !apps[tmp].loaded) { apps[tmp].loaded = true; apps[tmp].load(); apps[tmp].init(); $('.window.' + name).removeClass('load'); return; } apps[tmp].init(); setTimeout(() => { $('.window.' + name).removeClass('load'); }, Number($('.window.' + name + '>.loadback').attr('data-delay')) || 500); } // 开始菜单一类 //打开任务栏按钮对应的widget // 为啥管这个东西叫 widget?? from stsc function openDockWidget(name){ if(name=="start-menu"){ //打开开始菜单 if($('#start-menu').hasClass('show')){ hide_startmenu(); } else{ $('#start-btn').addClass('show'); if($('#search-win').hasClass('show')){ $('#search-btn').removeClass('show'); $('#search-win').removeClass('show'); setTimeout(() => { $('#search-win').removeClass('show-begin'); }, 200); hide_widgets(); } if($('#widgets').hasClass('show'))hide_widgets(); $('#start-menu').addClass('show-begin'); setTimeout(() => { $('#start-menu').addClass('show'); }, 0); } }else if(name=="search-win"){ //打开搜索框 if ($('#search-win').hasClass('show')) { $('#search-btn').removeClass('show'); $('#search-win').removeClass('show'); setTimeout(() => { $('#search-win').removeClass('show-begin'); }, 200); } else { $('#search-btn').addClass('show'); if($('#start-menu').hasClass('show'))hide_startmenu(); if($('#widgets').hasClass('show'))hide_widgets(); $('#search-win').addClass('show-begin'); setTimeout(() => { $('#search-win').addClass('show'); }, 0); $('#search-input').focus(); } }else if(name=="widgets"){ //打开小组件 if($('#widgets').hasClass('show')){ hide_widgets(); } else{ $('#widgets-btn').addClass('show'); if($('#search-win').hasClass('show')){ $('#search-btn').removeClass('show'); $('#search-win').removeClass('show'); setTimeout(() => { $('#search-win').removeClass('show-begin'); }, 200); } if($('#start-menu').hasClass('show'))hide_startmenu(); $('#widgets').addClass('show-begin'); setTimeout(() => { $('#widgets').addClass('show'); }, 0); $('#widgets-input').focus(); } }else if(name=="control"){ //打开控制 if($('#control').hasClass('show')) { $('#control').removeClass('show'); setTimeout(() => { $('#control').removeClass('show-begin'); }, 200); } else { if ($('#datebox').hasClass('show')) { $('.dock.date').removeClass('show'); $('#datebox').removeClass('show'); setTimeout(() => { $('#datebox').removeClass('show-begin'); }, 200); } $('#control').css('left',$('.a.dock.control').position().left - 123); $('#control').addClass('show-begin'); setTimeout(() => { $('#control').addClass('show'); }, 0); } }else if(name=="datebox"){ //打开时间框 if($('#datebox').hasClass('show')) { $('.dock.date').removeClass('show'); $('#datebox').removeClass('show'); setTimeout(() => { $('#datebox').removeClass('show-begin'); }, 200); } else { if ($('#control').hasClass('show')) { $('#control').removeClass('show'); setTimeout(() => { $('#control').removeClass('show-begin'); }, 200); } $('.dock.date').addClass('show'); $('#datebox').css('left',$('.a.dock.date').position().left-125); $('#datebox').addClass('show-begin'); setTimeout(() => { $('#datebox').addClass('show'); }, 0); } }else{ console.err("openDockWidget()传递的name不正确!"); } } function removeEdgeSaveUrl(classname) { $('.' + classname).remove() } function hide_startmenu() { $('#start-menu').removeClass('show'); $('#start-btn').removeClass('show'); setTimeout(() => { $('#start-menu').removeClass('show-begin'); }, 200); } function hide_widgets() { $('#widgets').removeClass('show'); $('#widgets-btn').removeClass('show'); setTimeout(() => { $('#widgets').removeClass('show-begin'); }, 200); } const FLY_HIDDEN_LIST_KEY = 'control_status_fly_hidden_list' function controlStatus(name) { if (this.classList.contains('active')) { this.classList.remove('active'); if (name == 'wifi') { wifiStatus = false; } if (name == 'fly') { flyStatus = false if (localStorage.getItem(FLY_HIDDEN_LIST_KEY)) { const flyHiddenData = JSON.parse(localStorage.getItem(FLY_HIDDEN_LIST_KEY)) const flyHiddenList = Array.isArray(flyHiddenData) ? flyHiddenData : [] flyHiddenList.forEach(item => { const dom = $(`#control .${item} .icon`) if (!dom.hasClass('active')) { dom.addClass('active') } }) localStorage.removeItem(FLY_HIDDEN_LIST_KEY) } } } else if (!this.classList.contains('active')) { this.classList.add('active'); if (name == 'wifi') { wifiStatus = true; } if (name == 'fly') { flyStatus = true const hiddenList = ['btn1', 'btn2', 'btn5'] const hiddenDiffList = [] hiddenList.forEach(item => { const dom = $(`#control .${item} .icon`) if (dom.hasClass('active')) { dom.removeClass('active') hiddenDiffList.push(item) } }) localStorage.setItem(FLY_HIDDEN_LIST_KEY, JSON.stringify(hiddenDiffList)) } } if (name == 'dark') { $('html').toggleClass('night'); if ($('html').hasClass('night')) { setTimeout(() => { alert('别看屏幕了,去休息眼睛吧~'); }, 200); } } } // 控制面板 亮度调整 function dragBrightness(e) { const container = $('#control>.cont>.bottom>.brightness>.range-container')[0]; const after = $('#control>.cont>.bottom>.brightness>.range-container>.after')[0]; const slider = $('#control>.cont>.bottom>.brightness>.range-container>.slider-btn')[0]; const viewport = container.getBoundingClientRect().left; const width = Number(window.getComputedStyle(container, null).width.split('px')[0]); move(e); page.onmousemove = move; page.ontouchmove = move; container.classList.add('active'); function move(e) { let clientX; if (e.type.match('mouse')) { clientX = e.clientX; } else if (e.type.match('touch')) { clientX = e.touches[0].clientX; } var _offset = clientX - viewport; const limit=2; // 亮度条件限制 if (_offset < 0) { _offset = 0; } else if (_offset > limit*width) { _offset = limit*width; } slider.style.marginLeft = _offset + 'px'; after.style.left = _offset + 'px'; after.style.width = width - _offset + 'px'; if (_offset / width > 0.3 && _offset / width < limit) { page.style.filter = `brightness(${_offset / width})`; } else if (_offset / width < limit){ page.style.filter = 'brightness(0.3)'; }else{ page.style.filter = `brightness(${limit})`; } } function up() { container.classList.remove('active'); page.onmouseup = null; page.ontouchend = null; page.ontouchcancel = null; page.onmousemove = null; page.ontouchmove = null; } page.onmouseup = up; page.ontouchend = up; page.ontouchcancel = up; } // 控制面板 电量监测 if (navigator.getBattery) { navigator.getBattery().then((battery) => { // 检查battery对象和level属性是否存在且有效 if (battery && typeof battery.level === 'number' && !isNaN(battery.level)) { const batteryLevel = Math.max(0, Math.min(1, battery.level)); // 确保在0-1范围内 const batteryWidth = 18 * batteryLevel + 5; const pathElement = $('.a.dock.control>svg>path')[0]; if (pathElement) { pathElement.outerHTML = ``; // 检查addEventListener是否存在 if (battery.addEventListener && typeof battery.addEventListener === 'function') { battery.addEventListener('levelchange', () => { if (battery && typeof battery.level === 'number' && !isNaN(battery.level)) { const updatedLevel = Math.max(0, Math.min(1, battery.level)); const updatedWidth = 18 * updatedLevel + 5; const updatedPathElement = $('.a.dock.control>svg>path')[0]; if (updatedPathElement) { updatedPathElement.outerHTML = ``; } } }); } } } }).catch((error) => { // 静默处理错误,电池API在某些浏览器中不可用是正常的 console.log('电池API不可用:', error); }); } // 任务管理器 记录硬件运行时间 if (localStorage.getItem('cpuRunningTime')) { apps.taskmgr.cpuRunningTime = localStorage.getItem('cpuRunningTime'); } window.setInterval(() => { apps.taskmgr.cpuRunningTime++; localStorage.setItem('cpuRunningTime', apps.taskmgr.cpuRunningTime); }, 1000); var wifiStatus = true; // 飞行模式 var flyStatus = false; // 选择框 let chstX, chstY; function ch(e) { $('#desktop>.selection').css('left', Math.min(chstX, e.clientX)); $('#desktop>.selection').css('width', Math.abs(e.clientX - chstX)); $('#desktop>.selection').css('display', 'block'); $('#desktop>.selection').css('top', Math.min(chstY, e.clientY)); $('#desktop>.selection').css('height', Math.abs(e.clientY - chstY)); } $('#desktop')[0].addEventListener('mousedown', e => { chstX = e.clientX; chstY = e.clientY; this.onmousemove = ch; }); window.addEventListener('mouseup', e => { this.onmousemove = null; $('#desktop>.selection').css('left', 0); $('#desktop>.selection').css('top', 0); $('#desktop>.selection').css('display', 'none'); $('#desktop>.selection').css('width', 0); $('#desktop>.selection').css('height', 0); }); let isDark = false; // 个性化主题 function toggletheme() { $('.dock.theme').toggleClass('dk'); // var darkControl = $(`#control .btn4 .icon`) $(':root').toggleClass('dark'); if ($(':root').hasClass('dark')) { $('.window.whiteboard>.titbar>p').text('Blackboard'); setData('theme', 'dark'); isDark = true; // darkControl.addClass('active') } else { $('.window.whiteboard>.titbar>p').text('Whiteboard'); setData('theme', 'light'); isDark = false; // darkControl.removeClass('active') } } // Only set theme based on system preference if no user preference is stored if (localStorage.getItem('theme') === null) { if (window.matchMedia('(prefers-color-scheme: dark)').matches) { //是深色 $('.dock.theme').toggleClass('dk'); $(':root').toggleClass('dark'); $('.window.whiteboard>.titbar>p').text('Blackboard'); localStorage.setItem('theme', 'dark'); isDark = true; } else { // 不是深色 $('.window.whiteboard>.titbar>p').text('Whiteboard'); localStorage.setItem('theme', 'light'); } } // 桌面图标的初始化 let desktopItem = []; function saveDesktop() { const data = { desktop: JSON.stringify(desktopItem), topmost: JSON.stringify(topmost), sys_setting: JSON.stringify(sys_setting), root_class: $(':root').attr('class') }; Object.entries(data).forEach(([key, value]) => { localStorage.setItem(key, value); }); } function setIcon() { // return; if (!Array.isArray(JSON.parse(localStorage.getItem('desktop')))){ setData('desktop','[]') } if (Array.isArray(JSON.parse(localStorage.getItem('desktop')))) { $('#desktop')[0].innerHTML = `

${lang('此电脑','explorer.thispc')}

${lang('设置','setting.name')}

${lang('关于 Win12 网页版','about.name')}

Microsoft Edge

${lang('反馈中心','feedback.name')}

`; desktopItem = JSON.parse(localStorage.getItem('desktop')); desktopItem.forEach((item) => { $('#desktop')[0].innerHTML += item; }); addMenu(); } if (Array.isArray(JSON.parse(localStorage.getItem('topmost')))) { topmost = JSON.parse(localStorage.getItem('topmost')); if (topmost.includes('taskmgr')) { $('#tsk-setting-topmost')[0].checked = true; } } if (Array.isArray(JSON.parse(localStorage.getItem('sys_setting')))) { var sys_setting_back = JSON.parse(localStorage.getItem('sys_setting')); if (/^(1|0)+$/.test(sys_setting_back.join(''))/* 只含有0和1 */) { sys_setting = sys_setting_back; for (var i = 0; i < sys_setting.length; i++) { document.getElementById('sys_setting_' + (i + 1))?.setAttribute("class", 'a checkbox' + (sys_setting[i] ? ' checked' : '')); //设置class属性 if (i == 5) { use_music = sys_setting[i] ? true : false; } if (i == 6) { use_mic_voice = sys_setting[i] ? true : false; } } } } if (localStorage.getItem('root_class')) { $(':root')[0].className = localStorage.getItem('root_class') + ' ' + (isDark ? 'dark' : ''); } if(sys_setting[0]){ $(':root').addClass('corner_squ'); } } // 原神,启动! document.getElementsByTagName('body')[0].onload = () => { setTimeout(() => { $('#loadback').addClass('hide'); }, 500); setTimeout(() => { $('#loadback').css('display', 'none'); }, 1000); apps.webapps.init(); //getdata if (localStorage.getItem('theme') == 'dark') { $(':root').addClass('dark'); $('.dock.theme').addClass('dk'); $('.window.whiteboard>.titbar>p').text('Blackboard'); isDark = true; } else { $(':root').removeClass('dark'); $('.dock.theme').removeClass('dk'); $('.window.whiteboard>.titbar>p').text('Whiteboard'); isDark = false; } if (localStorage.getItem('color1')) { $(':root').css('--theme-1', localStorage.getItem('color1')); $(':root').css('--theme-2', localStorage.getItem('color2')); } setIcon();//加载桌面图标 // 所以这个东西为啥要在开机的时候加载? // 不应该在python.init里面吗? // (async function () { // apps.python.pyodide = await loadPyodide(); // apps.python.pyodide.runPython(` // import sys // import io // `); // })(); // apps.pythonEditor.load(); // apps.notepadFonts.load(); // apps.whiteboard.load(); document.querySelectorAll('.window').forEach(w => { let qw = $(w), wc = w.classList[1]; // window: onmousedown="focwin('explorer')" ontouchstart="focwin('explorer')" qw.attr('onmousedown', `focwin('${wc}')`); qw.attr('ontouchstart', `focwin('${wc}')`); // titbar: oncontextmenu="return showcm(event,'titbar','edge')" ondblclick="maxwin('edge')" qw = $(`.window.${wc}>.titbar`); qw.attr('oncontextmenu', `return showcm(event,'titbar','${wc}')`); if (!(wc in nomax)) { qw.attr('ondblclick', `maxwin('${wc}')`); } // icon: onclick="return showcm(event,'titbar','explorer')" qw = $(`.window.${wc}>.titbar>.icon`); qw.attr('onclick', `let os=$(this).offset();stop(event);return showcm({clientX:os.left-5,clientY:os.top+this.offsetHeight+3},'titbar','${wc}')`); qw.mousedown(stop); $(`.window.${wc}>.titbar>div>.wbtg`).mousedown(stop); }); document.querySelectorAll('.window>div.resize-bar').forEach(w => { for (const n of ['top', 'bottom', 'left', 'right', 'top-right', 'top-left', 'bottom-right', 'bottom-left']) { w.insertAdjacentHTML('afterbegin', `
`); } }); $.getJSON('https://tjy-gitnub.github.io/win12-theme/def.json').then(j=>{ if(j.sp){ $(':root').css('--bgul',j.bg); if(j.spth){ $(':root').css('--theme-1',j.th1); $(':root').css('--theme-2',j.th2); $(':root').css('--href', j.href); } if(j.death){ $('html').css('filter','saturate(0)'); } } }); updateVoiceBallStatus(); // loadlang(); checkOrientation(); }; let autoUpdate = true; function checkUpdate() { const sha = localStorage.getItem('sha'); api('repos/tjy-gitnub/win12/commits').then(res => { res.json().then(json => { if (sha != json[0].sha && sha) { localStorage.setItem('update', true); sendToSw({ head: 'update' }); } localStorage.setItem('sha', json[0].sha); }); }); } if (localStorage.getItem('autoUpdate') == undefined) { localStorage.setItem('autoUpdate', true); } else { autoUpdate = (autoUpdate == 'true'); } // PWA 应用 let setData; if (!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')) { $('#loginback').css('opacity', '1'); $('#loginback').css('display', 'flex'); shownotice('about'); navigator.serviceWorker.register('sw.js', { updateViaCache: 'none', scope: './' }).then(reg => { reg.update(); reg.addEventListener('updatefound', () => { // 正在安装的新的 SW const newWorker = reg.installing; console.log('dsk-发现更新'); // newWorker.state; // // "installing" - 安装事件被触发,但还没完成 // // "installed" - 安装完成 // // "activating" - 激活事件被触发,但还没完成 // // "activated" - 激活成功 // // "redundant" - 废弃,可能是因为安装失败,或者是被一个新版本覆盖 }); }); // navigator.serviceWorker.controller.postMessage({ // head: 'is_update' // }); // navigator.serviceWorker.addEventListener('message', function (e) { // checkUpdate(); if (localStorage.getItem('autoUpdate') == 'true') { checkUpdate(); } if (localStorage.getItem('update') == 'true') { $('.msg.update>.main>.tit').html(' ' + $('#win-about>.cnt.update>div>details:first-child>summary').text()); $('.msg.update>.main>.cont').html($('#win-about>.cnt.update>div>details:first-child>p').html()); $('#loadbackupdate').css('display', 'block'); localStorage.setItem('update', false); $('.msg.update').addClass('show'); } // }); // 使用说明见 desktop.html 开头 setData=(k, v)=>{ localStorage.setItem(k, v); } } else { setData=(k, v)=>{ console.log('setData 被禁用'); } } function sendToSw(msg) { navigator.serviceWorker.controller.postMessage(msg); } /** * 将秒数换算为可读的时间格式 * @param {number} second 秒数 * @returns 将秒数格式化为 1 天 8 小时 43 分钟 26 秒类似的格式 */ function calcTimeString(second) { let timeStr = ''; const days = Math.floor(second / (24 * 60 * 60)); const hours = Math.floor(second % (24 * 60 * 60) / 3600); const minutes = Math.floor(second % 3600 / 60); const seconds = second % 60; if (days > 0) { timeStr += ' ' + days + ' 天'; } if (hours > 0) { timeStr += ' ' + hours + ' 小时'; } if (minutes > 0) { timeStr += ' ' + minutes + ' 分钟'; } if (seconds > 0) { timeStr += ' ' + seconds + ' 秒'; } return timeStr === '' ? ' 0 秒' : timeStr; } //监听全局按键 function setupGlobalKey(){ $(document).keydown(function (event) { if (event.keyCode == 116/*F5被按下(刷新)*/) { event.preventDefault();/*取消默认刷新行为*/ $('#desktop').css('opacity', '0'); setTimeout(() => { $('#desktop').css('opacity', '1'); }, 100); setIcon(); return; } //按下徽标键 if (event.metaKey && event.ctrlKey) { //打开或关闭开始菜单 openDockWidget("start-menu"); } }); } setupGlobalKey(); function isMobileDevice() { return /Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent); } function checkOrientation() { const container = document.getElementById('orientation-warning'); const isPortrait = window.matchMedia("(orientation: portrait)").matches; if (isMobileDevice() && isPortrait) { container.style.display = "flex"; // 显示提示 } else { container.style.display = "none"; // 隐藏提示 } } // 监听屏幕方向变化 window.addEventListener("resize", checkOrientation); window.addEventListener("orientationchange", checkOrientation); // 任务栏悬停预览窗口 by @fzlzjerry let previewTimeout; function showTaskbarPreview(name, event) { clearTimeout(previewTimeout); const preview = document.getElementById('taskbar-preview'); if (!preview) { const previewEl = document.createElement('div'); previewEl.id = 'taskbar-preview'; previewEl.innerHTML = `
`; document.body.appendChild(previewEl); } const win = $(`.window.${name}`); if (win.length && !win.hasClass('min')) { const preview = $('#taskbar-preview'); const taskbarItem = $(event.currentTarget); const itemRect = taskbarItem[0].getBoundingClientRect(); // Set window title and icon const titleImg = win.find('.titbar img.icon').attr('src'); const title = win.find('.titbar p').text() || win.find('.titbar span').text(); preview.find('.preview-title img').attr('src', titleImg); preview.find('.preview-title span').text(title); // Create simplified window preview const previewWindow = preview.find('.preview-content .preview-window'); previewWindow.empty(); // Clone important window elements for preview const content = win.find('.content').clone(); content.find('script').remove(); // Remove any scripts content.find('iframe').remove(); // Remove iframes // Scale down the content content.css({ transform: 'scale(0.2)', transformOrigin: 'top left', width: '500%', // 1/0.2 = 5 height: '500%' }); previewWindow.append(content); preview.addClass('show'); // Set preview position console.log(content[0].offsetWidth* 0.2); preview.css({ left: itemRect.left - ( content[0].offsetWidth* 0.2 / 2), bottom: '60px' }); } } function hideTaskbarPreview() { previewTimeout = setTimeout(() => { $('#taskbar-preview').removeClass('show'); }, 200); } // Add hover events to taskbar items $(document).on('mouseenter', '#taskbar>a', function(e) { const name = this.className.split(' ')[0]; showTaskbarPreview(name, e); }); $(document).on('mouseleave', '#taskbar>a', function() { hideTaskbarPreview(); }); // Add hover events to preview $(document).on('mouseenter', '#taskbar-preview', function() { clearTimeout(previewTimeout); }); $(document).on('mouseleave', '#taskbar-preview', function() { hideTaskbarPreview(); }); ================================================ FILE: fonts/LICENSE ================================================ Attribution-ShareAlike 4.0 International ======================================================================= Creative Commons Corporation ("Creative Commons") is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an "as-is" basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. Using Creative Commons Public Licenses Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC- licensed material, or material used under an exception or limitation to copyright. More considerations for licensors: wiki.creativecommons.org/Considerations_for_licensors Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor's permission is not necessary for any reason--for example, because of any applicable exception or limitation to copyright--then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public: wiki.creativecommons.org/Considerations_for_licensees ======================================================================= Creative Commons Attribution-ShareAlike 4.0 International Public License By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. Section 1 -- Definitions. a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. c. BY-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License. d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution and ShareAlike. h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. j. Licensor means the individual(s) or entity(ies) granting rights under this Public License. k. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. l. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. m. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. Section 2 -- Scope. a. License grant. 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: a. reproduce and Share the Licensed Material, in whole or in part; and b. produce, reproduce, and Share Adapted Material. 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 3. Term. The term of this Public License is specified in Section 6(a). 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a) (4) never produces Adapted Material. 5. Downstream recipients. a. Offer from the Licensor -- Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. b. Additional offer from the Licensor -- Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter's License You apply. c. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). b. Other rights. 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 2. Patent and trademark rights are not licensed under this Public License. 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. Section 3 -- License Conditions. Your exercise of the Licensed Rights is expressly made subject to the following conditions. a. Attribution. 1. If You Share the Licensed Material (including in modified form), You must: a. retain the following if it is supplied by the Licensor with the Licensed Material: i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); ii. a copyright notice; iii. a notice that refers to this Public License; iv. a notice that refers to the disclaimer of warranties; v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; b. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and c. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. b. ShareAlike. In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply. 1. The Adapter's License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-SA Compatible License. 2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material. 3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply. Section 4 -- Sui Generis Database Rights. Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. Section 5 -- Disclaimer of Warranties and Limitation of Liability. a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. Section 6 -- Term and Termination. a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 2. upon express reinstatement by the Licensor. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. Section 7 -- Other Terms and Conditions. a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. Section 8 -- Interpretation. a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. ======================================================================= Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” The text of the Creative Commons public licenses is dedicated to the public domain under the CC0 Public Domain Dedication. Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark "Creative Commons" or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org. ================================================ FILE: games/minesweeper.html ================================================ win12扫雷
0
0
================================================ FILE: icon/LICENSE ================================================ Attribution-ShareAlike 4.0 International ======================================================================= Creative Commons Corporation ("Creative Commons") is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an "as-is" basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. Using Creative Commons Public Licenses Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC- licensed material, or material used under an exception or limitation to copyright. More considerations for licensors: wiki.creativecommons.org/Considerations_for_licensors Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor's permission is not necessary for any reason--for example, because of any applicable exception or limitation to copyright--then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public: wiki.creativecommons.org/Considerations_for_licensees ======================================================================= Creative Commons Attribution-ShareAlike 4.0 International Public License By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. Section 1 -- Definitions. a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. c. BY-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License. d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution and ShareAlike. h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. j. Licensor means the individual(s) or entity(ies) granting rights under this Public License. k. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. l. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. m. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. Section 2 -- Scope. a. License grant. 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: a. reproduce and Share the Licensed Material, in whole or in part; and b. produce, reproduce, and Share Adapted Material. 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 3. Term. The term of this Public License is specified in Section 6(a). 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a) (4) never produces Adapted Material. 5. Downstream recipients. a. Offer from the Licensor -- Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. b. Additional offer from the Licensor -- Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter's License You apply. c. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). b. Other rights. 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 2. Patent and trademark rights are not licensed under this Public License. 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. Section 3 -- License Conditions. Your exercise of the Licensed Rights is expressly made subject to the following conditions. a. Attribution. 1. If You Share the Licensed Material (including in modified form), You must: a. retain the following if it is supplied by the Licensor with the Licensed Material: i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); ii. a copyright notice; iii. a notice that refers to this Public License; iv. a notice that refers to the disclaimer of warranties; v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; b. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and c. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. b. ShareAlike. In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply. 1. The Adapter's License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-SA Compatible License. 2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material. 3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply. Section 4 -- Sui Generis Database Rights. Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. Section 5 -- Disclaimer of Warranties and Limitation of Liability. a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. Section 6 -- Term and Termination. a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 2. upon express reinstatement by the Licensor. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. Section 7 -- Other Terms and Conditions. a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. Section 8 -- Interpretation. a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. ======================================================================= Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” The text of the Creative Commons public licenses is dedicated to the public domain under the CC0 Public Domain Dedication. Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark "Creative Commons" or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org. ================================================ FILE: icon/NOTICE.md ================================================ # 非“自由版权”文件列表 >[!CAUTION] >本列表内所列文件受著作权保护!相关文件属合理使用范畴。
本列表内所列文件可能含有受商标法或其他类似法律、法规保护的内容。 | 文件名称 | 备注| | --- | --- | |bilibili.png|是上海宽娱数码科技有限公司的商标| |office.png|是微软公司的商标| |vscode.png|是微软公司的商标| |wsa.png|无| |excel.png|无| |exefile.png|无| |explorer.png|无| |img.png|无| |music.png|无| |picture.png|无| |ppt.png|无| |txt.png|无| |vidio.png|无| |word.png|无| |pythonEditor.svg|是JetBrains s.r.o.的商标| |python.svg|是Python软件基金会的商标| |word.svg|是微软公司的商标| ================================================ FILE: img/LICENSE ================================================ Attribution-ShareAlike 4.0 International ======================================================================= Creative Commons Corporation ("Creative Commons") is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an "as-is" basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. Using Creative Commons Public Licenses Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC- licensed material, or material used under an exception or limitation to copyright. More considerations for licensors: wiki.creativecommons.org/Considerations_for_licensors Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor's permission is not necessary for any reason--for example, because of any applicable exception or limitation to copyright--then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public: wiki.creativecommons.org/Considerations_for_licensees ======================================================================= Creative Commons Attribution-ShareAlike 4.0 International Public License By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. Section 1 -- Definitions. a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. c. BY-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License. d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution and ShareAlike. h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. j. Licensor means the individual(s) or entity(ies) granting rights under this Public License. k. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. l. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. m. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. Section 2 -- Scope. a. License grant. 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: a. reproduce and Share the Licensed Material, in whole or in part; and b. produce, reproduce, and Share Adapted Material. 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 3. Term. The term of this Public License is specified in Section 6(a). 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a) (4) never produces Adapted Material. 5. Downstream recipients. a. Offer from the Licensor -- Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. b. Additional offer from the Licensor -- Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter's License You apply. c. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). b. Other rights. 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 2. Patent and trademark rights are not licensed under this Public License. 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. Section 3 -- License Conditions. Your exercise of the Licensed Rights is expressly made subject to the following conditions. a. Attribution. 1. If You Share the Licensed Material (including in modified form), You must: a. retain the following if it is supplied by the Licensor with the Licensed Material: i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); ii. a copyright notice; iii. a notice that refers to this Public License; iv. a notice that refers to the disclaimer of warranties; v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; b. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and c. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. b. ShareAlike. In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply. 1. The Adapter's License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-SA Compatible License. 2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material. 3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply. Section 4 -- Sui Generis Database Rights. Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. Section 5 -- Disclaimer of Warranties and Limitation of Liability. a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. Section 6 -- Term and Termination. a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 2. upon express reinstatement by the Licensor. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. Section 7 -- Other Terms and Conditions. a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. Section 8 -- Interpretation. a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. ======================================================================= Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” The text of the Creative Commons public licenses is dedicated to the public domain under the CC0 Public Domain Dedication. Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark "Creative Commons" or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org. ================================================ FILE: img/NOTICE.md ================================================ # 非“自由版权”文件列表 >[!CAUTION] >本列表内所列文件受著作权保护!相关文件属合理使用范畴。
本列表内所列文件可能含有受商标法或其他类似法律、法规保护的内容。 | 文件名称 | 备注| | --- | --- | |earth.webp|无| |Bing.svg|是微软公司的商标| |office.png|无| |win11.jpg|无| |win13.jpg|无| |yq.jpg|无| |earth.webp|无| |mc.jpg|无| |corsiri.svg|无| ================================================ FILE: index.html ================================================ ================================================ FILE: lang/README_trans.md ================================================ # trans.py 使用说明 ## 简介 / Introduction 这是一个简单的交互式标注工具,用来给 HTML 标签插入 `data-i18n` 属性,并把翻译键值写入属性文件(`.properties`)。 This 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`). ## 用法 / Usage - 启动后会询问起始行号(1-based),直接回车从第 1 行开始。
After startup, you will be prompted for the starting line number (1‑based). Press Enter directly to start from line 1. - 上下方向键:切换行。
Up/down arrow keys: Switch lines. - 左右方向键:移动光标位置(插入位置)。
Left/right arrow keys: Move the cursor position (insertion point). - 回车:跳到下一行。
Enter: Jump to the next line. - 按 `Space` 或 `/`:进入输入模式,写入 `data-i18n`。
Press Space or /: Enter input mode and write data-i18n. - 按 `Esc`:保存并退出。
Press Esc: Save and exit. ## 输入模式 / Input Mode 输入格式支持两种 Two input formats are supported: - `key=value`:在当前行插入 `data-i18n="key"`,并把 `key=value` 追加写入属性文件。
`key=value`: Inserts `data-i18n="key"` at the current line, and appends `key=value` to the properties file. - `key`:只插入 `data-i18n="key"`,不写入属性文件。
`key`: Only inserts `data-i18n="key"` without writing to the properties file. 输入完成后会自动跳到下一行。
After completing the input, it will automatically jump to the next line. ## 示例 / Examples 在光标处输入 Enter the following at the cursor position: ``` app.title=Windows 12 ``` 会把当前 HTML 行改为 This will modify the current HTML line to: ```html ... data-i18n="app.title" ... ``` 并在属性文件追加 And append the following to the properties file: ``` app.title=Windows 12 ``` ## 反馈 / Feedback 如若发现任何问题,欢迎通过提交issues向我们提交反馈。
If you find any issues, feel free to submit feedback to us via GitHub Issues. ================================================ FILE: lang/lang.properties ================================================ # Base language file for jQuery i18n properties # This file is intentionally minimal to prevent 404 errors ================================================ FILE: lang/lang_en.properties ================================================ updating=Updating cover-hp=Landscape for the best experience login=Login welcome=Welcome stmenu-avlb=Available stmenu-webapp=Webapps bilibili.name=Bilibili wsa.name=Windows Subsystem for Android™ folder.doc=Documents folder.pic=Pictures folder.mus=Music stmenu-pinned=Pinned stmenu-allapp=All feedback.name=Feedback Hub stmenu-tj=Recommended stmenu-tj-f1=How to use bottle caps scientifically.pptx stmenu-tj-t1=5 minutes ago stmenu-tj-f2=Coca Cola bottle cap.jpg stmenu-tj-t2=7 minutes ago stmenu-tj-f3=Bottle cap construction diagram.jpg stmenu-tj-t3=16 minutes ago stmenu-tj-f4=The structure and function of bottle caps.docx stmenu-tj-t4=24 minutes ago stmenu-tj-f5=The thickness of Coca Cola bottle caps.xlsx stmenu-tj-t5=35 minutes ago sch-app=Apps sch-doc=Documents sch-web=Web sch-setting=Settings sch-folder=Folders sch-photo=Photos sch-tj=Recommended sch-open=Open sch-opfl=Open file location sch-cpp=Copy path sch-ph=Type here to serach widget=Widgets widget-news=News widget-news-res=We are not responsible for news content. ctrl-blue=Bluetooth ctrl-air=Airplane mode ctrl-eye=Eye protection ctrl-hotspot=Mobile hotspot ctrl-acc=Accessibility data-week=

Mon

Tue

Wed

Thu

Fri

Sat

Sun

editmd-add=Add widget psnl=Personalize home=Home apply=Apply ok=OK cancel=Cancel all=All more=More close=Close refresh=Refresh open=Open del=Delete desktop.tgltheme=Toggle color mode desktop.vogithub=View on Github desktop.exitedit=Exit editing mode desktop.enteredit=Enter editing mode nts.about=

Windows 12 Online

Windows 12 Online is an open source project,
which aims to provide users with a pre experience of Windows 12 online
It is not consistent with official version of Windows 12.
Using standard network technologies such as HTML, CSS and JS.
This project is not affiliated with Microsoft and should not be
confused with Microsoft products.
It is also not Windows365 cloud PC.
Microsoft, Windows, and other demonstration products in this project
are trademarks of Microsoft Corporation.
Android in this project is a trademark of Google Inc.

nts.feedback.name=Feedback nts.feedback.txt=We place great emphasis on user experience and feedback. nts.feedback.github=Submit an issue on GitHub (requires a GitHub account) nts.addwg=Add a widget nts.addwg.weather=Weather nts.addwg.monitor=Resource monitor nts.fs-api-unsupported=

Unsupported Feature

Your browser does not support the File System Access API. Please use Chrome or Edge.

nts.fs-mount-error=

Mount Failed

Unable to mount local folder. Permission may have been denied.

nts.unsupported-file-type=

Cannot Open File

No application found to open this file type.

nts.file-read-error=

Read Failed

Unable to read file contents. Permission may have expired.

nts.file-write-error=

Save Failed

Unable to write file. Permission may have expired.

window.restore=Restore window.min=Minimize window.max=Maximize window.close=Close # calc calc.name=Calculator calc.error.zero=

Error

The divisor cannot be 0

# defender defender.name=Windows Security defender.virus=Virus & threat protection defender.account=Account protection defender.firewall=Firewall & network protection defender.device=Device security defender.glance=Security at a glance defender.network=Network usage defender.speed=Network speed defender.clearv=Intrusion virus clearance defender.allvc=All viruses have been cleared. defender.freq=Frequency of virus attacks defender.netreq=Network requests defender.netreq-thismonth=This month defender.recreq=Request record # msstore msstore.apps=Apps msstore.games=Gaming msstore.download=Downloads msstore.topfree=Top free apps > msstore.free=Free msstore.devtool=Developer tools msstore.genimp=Genshin Impact msstore.game=Game msstore.mc=Minecraft msstore.design=Multimedia design msstore.tool=Utilities & tools msstore.business=Business # setting setting.name=Settings setting.usrname=Starry bottle setting.sch=Find a setting setting.system=System setting.device=Bluetooth & devices setting.network=Network & internet setting.psnl=Personalization setting.psnl.color=Colors setting.psnl.color-dt=Set accent color in Windows setting.psnl.color.now=Now setting.psnl.color.custom=Custom color setting.psnl.theme=Themes setting.psnl.theme-dt=(!Consuming a large amount of GitHub API limits!) Set the theme for Windows. Do you want to upload your own theme? setting.psnl.round=Rounded corner setting.psnl.round-dt=Set whether to enable rounded corners in Windows. setting.psnl.animation=Animation effects setting.psnl.animation-dt=Set whether to enable animation effects setting.psnl.shadow=Shadow setting.psnl.shadow-dt=Set whether to enable shadow effect setting.psnl.alltransp=Transparency effects for all windows setting.psnl.alltransp-dt=Enable transparency effects for all windows, not just for the focus window For details setting.psnl.mica=Mica effects (Beta) setting.psnl.mica-dt=Enable mica effects for the focus window setting.psnl.startup-sound=Sound effect after startup setting.psnl.startup-sound-dt=Set whether to play the sound effect after startup setting.psnl.ball=Voice input ball setting.psnl.ball-dt=Set whether to enable the voice input ball setting.apps=Apps setting.accounts=Accounts setting.timelang=Time & Languages setting.game=Gaming setting.acc=Accessibility setting.privacy=Privacy & security setting.update=Windows Update # edge edge.name=Microsoft Edge edge.schbing=Search in Bing or enter an address edge.rename=Rename this tab # explorer explorer.name=File Explorer explorer.pinned=Pinned explorer.quickacc=Quick access explorer.thispc=This PC explorer.bin=Recycle Bin explorer.tag=Tags explorer.tag.red=Red explorer.tag.blue=Blue explorer.tag.yellow=Yellow explorer.tag.green=Green explorer.tag.orange=Orange explorer.tag.purple=Purple explorer.tag.pink=Pink explorer.new=New explorer.sort=Sort explorer.view=View explorer.mount=Mount local folder # about about.name=About Win12 Online about.intro=Introduction about.update=Update log about.intro.name=Windows 12 Online about.intro.intro=Introduction about.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. about.intro.intro.p2=This project has been published on GitHub, Click here to view. about.intro.intro.p3=If you have any comments or suggestions, please send issues on Github, your problem will be solved as soon as possible. about.intro.intro.p4=About the author, Starry Source, click for more information. about.intro.os=Open Source License about.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. about.intro.os.p2=According to the licence, you can disseminate, distribute, modify and re publish the project, including personal and commercial purposes. about.intro.os.p3=But you must indicate the source of the code, including the author, project link, etc., and the code must be open source. about.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. about.intro.thank=Thanks about.intro.thank.p1=Special thanks to @NB-Group, who has made important contributions to the back-end development of this project! about.intro.contri=Contributors about.intro.contri.p1=Thanks to all project contributors (real-time data, by the number of Commits) about.intro.star.p1=Thank you to all those who have supported us. about.intro.others=Others about.intro.others.p1=This project is based on the current version of Windows and is not consistent with official version of Windows 12. about.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. about.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. about.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 here. about.update.name=Update log # notepad notepad.name=Notepad notepad.file=File notepad.edit=Edit notepad.format=Format # terminal terminal.name=Terminal # word word.name=Microsoft Word Preview # camera camera.name=Camera camera.notice=Notice camera.notice.txt=Camera is developed by User782Tec and will be maintained by tjy-gitnub.
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.
If you don’t agree to the above, you will not be able to use Camera. camera.notice.agree=Agree and continue camera.notice.disag=Disagree # run run.name=Run run.txt=Type the name of a program, folder, document, or Internet resource, and Windows will open it for you. run.open=Open # winver winver.name=About Windows winver.p1=Version 25H2 (OS Build 24612.1896) winver.p2=© Microsoft Corporation. All rights reserved. winver.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. winver.p4=This product is licensed under the Microsoft Software License Terms to: winver.p5=The above is all nonsense, don’t take it seriously (double-click to hide this message) # taskmgr taskmgr.name=Task Manager taskmgr.processes=Processes taskmgr.performance=Performance taskmgr.settings=Settings taskmgr.processes.title=Processes taskmgr.processes.name=Process name taskmgr.processes.cpu=CPU taskmgr.processes.memory=Memory taskmgr.processes.disk=Disk taskmgr.processes.power=Power usage taskmgr.processes.no-results=No filter results
Try typing with other names, publishers, or PIDs for filtering. taskmgr.processes.reset-filter=Reset filter taskmgr.performance.title=Performance taskmgr.performance.memory=Memory taskmgr.performance.disk=Disk taskmgr.performance.wifi=Wi-Fi taskmgr.performance.wifi-speed=Sent: 1145 Receive: 1145 Mbps taskmgr.settings.title=Settings taskmgr.settings.window-management=Window management taskmgr.settings.stay-on-top=Stay on top taskmgr.settings.feedback=Feedback taskmgr.settings.send-feedback=Send feedback # copilot copilot.start=Start the conversation copilot.p=Please click "" on the top right to check the precautions before use. This copilot may not communicate in your language. copilot.send=Send # terminal commands terminal.help.title=For more information on a specific command, type HELP command-name terminal.help.dir=Display a list of files and subdirectories in a directory terminal.help.ls=Display a list of files and subdirectories in a directory (alias for DIR) terminal.help.del=Delete one or more files terminal.help.cd=Display the name of or change the current directory terminal.help.cls=Clear the screen terminal.help.help=Provide help information for Windows commands terminal.help.systeminfo=Display system information terminal.help.shutdown=Shut down the computer terminal.help.cmd=Open a new command prompt window terminal.help.exit=Exit the command prompt program terminal.help.easter=Easter egg commands: terminal.help.hello=Say hello terminal.help.matrix=Matrix effect terminal.help.snow=Snow effect terminal.help.dance=Make windows dance terminal.help.starwars=The Force Awakens # whiteboard whiteboard.saveas.title=Save As whiteboard.saveas.prompt=Enter filename: whiteboard.saveas.save=Save whiteboard.saveas.cancel=Cancel ================================================ FILE: lang/lang_zh.properties ================================================ # Base language file for jQuery i18n properties # This file is intentionally minimal to prevent 404 errors ================================================ FILE: lang/lang_zh_CN.properties ================================================ updating=休对故人思故国,且将新火试新茶
正在更新 cover-hp=横屏以获得最佳体验 login=登录 welcome=欢迎 stmenu-avlb=可用 stmenu-webapp=Web 应用 bilibili.name=哔哩哔哩 wsa.name=适用于 Android™ 的 Windows 子系统 folder.doc=文档 folder.pic=图片 folder.mus=音乐 stmenu-pinned=已固定 stmenu-allapp=所有应用 feedback.name=反馈中心 stmenu-tj=推荐的项目 stmenu-tj-f1=科学地使用瓶盖.pptx stmenu-tj-t1=5 分钟前 stmenu-tj-f2=可口可乐瓶盖.jpg stmenu-tj-t2=7 分钟前 stmenu-tj-f3=瓶盖构造图.jpg stmenu-tj-t3=16 分钟前 stmenu-tj-f4=瓶盖的构造及作用.docx stmenu-tj-t4=24 分钟前 stmenu-tj-f5=可口可乐瓶盖厚度.xlsx stmenu-tj-t5=35 分钟前 sch-app=应用 sch-doc=文档 sch-web=网页 sch-setting=设置 sch-folder=文件夹 sch-photo=照片 sch-tj=推荐 sch-open=打开 sch-opfl=打开文件所在位置 sch-cpp=复制路径 sch-ph=在这里输入你要搜索的内容 widget=小组件 widget-news=新闻 widget-news-res=我们不对新闻内容负责 ctrl-blue=蓝牙 ctrl-air=飞行模式 ctrl-eye=护眼 ctrl-hotspot=移动热点 ctrl-acc=辅助功能 data-week=

editmd-add=添加小组件 psnl=个性化 home=主页 apply=应用 ok=确定 cancel=取消 all=全部 more=更多 close=关闭 refresh=刷新 open=打开 del=删除 desktop.tgltheme=切换主题 desktop.vogithub=在 Github 中查看此项目 desktop.exitedit=退出编辑模式 desktop.enteredit=进入编辑模式 nts.about=

Windows 12 网页版

Windows 12 网页版是一个开放源项目,
希望让用户在网络上预先体验 Windows 12,
内容可能与 Windows 12 正式版本不一致。
使用标准网络技术,例如 HTML, CSS 和 JS
此项目绝不附属于微软,且不应与微软操作系统或产品混淆,
这也不是 Windows365 cloud PC
本项目中微软、Windows和其他示范产品是微软公司的商标
本项目中 Android 是谷歌公司的商标。

nts.feedback.name=反馈 nts.feedback.txt=我们非常注重用户的体验与反馈 nts.feedback.github=在github上提交issue (需要github账户) nts.addwg=添加小组件 nts.addwg.weather=天气 nts.addwg.monitor=系统性能监视器 nts.fs-api-unsupported=

不支持的功能

您的浏览器不支持文件系统访问 API。请使用 Chrome 或 Edge 浏览器。

nts.fs-mount-error=

挂载失败

无法挂载本地文件夹,权限可能被拒绝。

nts.unsupported-file-type=

无法打开文件

没有找到可以打开此类型文件的应用程序。

nts.file-read-error=

读取失败

无法读取文件内容,权限可能已过期。

nts.file-write-error=

保存失败

无法写入文件,权限可能已过期。

window.restore=还原 window.min=最小化 window.max=最大化 window.close=关闭 # calc calc.name=计算器 calc.error.zero=

错误

除数不得等于0

# defender defender.name=Windows 安全中心 defender.virus=病毒威胁与防护 defender.account=账户防护 defender.firewall=防火墙和网络防护 defender.device=设备安全性 defender.glance=安全性概览 defender.network=网络流量使用 defender.speed=网络速度 defender.clearv=入侵病毒清除 defender.allvc=所有病毒均被清除 defender.freq=电脑受病毒攻击频率 defender.netreq=网络通信比例 defender.netreq-thismonth=这个月 defender.recreq=请求记录 # msstore msstore.apps=应用 msstore.games=游戏 msstore.download=下载 msstore.topfree=热门免费应用 > msstore.free=免费下载 msstore.devtool=开发 msstore.genimp=原神 msstore.game=游戏 msstore.mc=我的世界 msstore.design=设计 msstore.tool=工具 msstore.business=办公 # setting setting.name=设置 setting.usrname=星瓶 setting.sch=查找设置 setting.system=系统 setting.device=蓝牙和其他设备 setting.network=网络和 Internet setting.psnl=个性化 setting.psnl.color=颜色 setting.psnl.color-dt=设置 Windows 的主题色 setting.psnl.color.now=当前颜色 setting.psnl.color.custom=自定义颜色 setting.psnl.theme=主题 setting.psnl.theme-dt=(!消耗大量 github api 限度!) 设置 Windows 的主题 想要上传自己的主题? setting.psnl.round=平滑圆角 setting.psnl.round-dt=启用平滑圆角(需要较新浏览器。若发现圆角过大,请关闭此功能) setting.psnl.animation=动画 setting.psnl.animation-dt=系统界面元素过渡动画 setting.psnl.shadow=阴影 setting.psnl.shadow-dt=为系统界面元素添加阴影效果 setting.psnl.alltransp=多窗口透明 setting.psnl.alltransp-dt=为所有窗口开启透明效果,而不是仅用于焦点窗口 详细 setting.psnl.mica=Mica效果 setting.psnl.mica-dt=为焦点窗口开启mica效果 setting.psnl.startup-sound=开机音乐 setting.psnl.startup-sound-dt=是否启用开机音乐 setting.psnl.ball=语音输入球 setting.psnl.ball-dt=是否启用语音输入球 setting.apps=应用 setting.accounts=账户 setting.timelang=时间和语言 setting.game=游戏 setting.acc=辅助功能 setting.privacy=隐私和安全性 setting.update=Windows 更新 # edge edge.schbing=在必应中搜索,或输入一个网址 edge.rename=为标签页命名 # explorer explorer.name=文件资源管理器 explorer.pinned=已固定 explorer.quickacc=快速访问 explorer.thispc=此电脑 explorer.bin=回收站 explorer.tag=标签 explorer.tag.red=红色 explorer.tag.blue=蓝色 explorer.tag.yellow=黄色 explorer.tag.green=绿色 explorer.tag.orange=橙色 explorer.tag.purple=紫色 explorer.tag.pink=粉色 explorer.new=新建 explorer.sort=排序方式 explorer.view=布局 explorer.mount=挂载本地文件夹 # about about.name=关于 Win12 网页版 about.intro=简介 about.update=更新记录 about.intro.name=Windows 12 网页版 about.intro.intro=简介 about.intro.intro.p1=  Windows 12 网页版是一个开源项目,由星源原创,使用 HTML、CSS 和 JavaScript,在网络上模拟、创新操作系统。 about.intro.intro.p2=  此项目已发布至 GitHub,点击此处查看。 about.intro.intro.p3=  若您对于该项目有任何意见或建议,请在 GitHub 上提交 issues,您的问题会被尽可能快地解决。 about.intro.intro.p4=  原创作者星源,点击以了解详细。 about.intro.os=开源说明 about.intro.os.p1=  此项目是一个开源项目。此项目使用 EPL v2.0 开源许可。开源许可是具有法律效力的合同,请自觉遵守开源许可,尊重他人劳动。 about.intro.os.p2=  根据许可,你可以对该项目进行传播、分发、修改以及二次发布,包括个人和商业用途。 about.intro.os.p3=  但您必须给出源码来源,包括作者,项目链接等,必须使用相同的协议开源。 about.intro.os.p4=  不是在该项目基础上进行增加、修改的,仅参考源码的,不需要开源,但也仅供学习用途。 about.intro.thank=特别感谢 about.intro.thank.p1=  特别感谢 @NB-Group,他为本项目的后端开发做出了重要贡献! about.intro.contri=贡献者 about.intro.contri.p1=  感谢所有项目的贡献者(实时数据,计算方法:即为 Commits 次数) about.intro.star.p1=  感谢所有支持我们的人。 about.intro.others=其它 about.intro.others.p1=  此项目基于目前 Windows 版本创造,与微软的 Windows 12 正式版本不一致。 about.intro.others.p2=  此项目绝不附属于微软,且不应与微软操作系统或产品混淆,这也不是 Windows365 cloud PC。 about.intro.others.p3=  本项目中微软、Windows 和其他示范产品是微软公司的商标。本项目中 Android 是谷歌公司的商标。 about.intro.others.p4=  若您在本项目(网址为tjy-gitnub.github.io/win12/desktop.html)之外的网站看到此页面,那么您可能正在浏览一个镜像网站。若欲造访原始页面,请点击这里。 about.update.name=更新记录 # notepad notepad.name=记事本 notepad.file=文件 notepad.edit=编辑 notepad.format=格式 # terminal terminal.name=终端 # word word.name=Microsoft Word Preview # camera camera.name=相机 camera.notice=提示 camera.notice.txt=  欢迎使用“相机”应用!本应用由 User782Tec 开发, tjy-gitnub 维护。
  在使用中,此应用将会获取访问您摄像头的权限(用于进行拍摄照片等操作)。此应用不会将任何您的个人信息(包括所拍摄的照片)上传至服务器,更不会泄露给他人。  若您不同意上述协议,则将不能使用此应用。 camera.notice.agree=同意并继续 camera.notice.disag=不同意 # run run.name=运行 run.txt=Windows 将根据你所输入的名称,为你打开相应的程序、文件夹、文档或 Internet 资源。 run.open=打开: # winver winver.name=关于 Windows winver.p1=版本 25H2 (OS 内部版本 24612.1896) winver.p2=© Microsoft Corporation。保留所有权利。 winver.p3=Windows12 专业版操作系统及其用户界面受美国和其他国家/地区的商标法和其他待颁布或已颁布的知识产权法保护。 winver.p4=根据Microsoft软件许可条款,许可如下用户使用本产品 winver.p5=上面都是胡扯,切勿当真(双击隐藏此消息) # taskmgr taskmgr.name=任务管理器 # copilot copilot.start=开始对话 copilot.p=使用前请先点击右上 "" 查看使用注意事项 copilot.send=发送 ================================================ FILE: lang/lang_zh_TW.properties ================================================ updating=休對故人思故國,且將新火試新茶
正在更新 cover-hp=請轉為橫向檢視以獲得最佳體驗 login=登入 welcome=歡迎 stmenu-avlb=可用 stmenu-webapp=Web 應用程式 bilibili.name=嗶哩嗶哩 wsa.name=Windows Subsystem for Android™ folder.doc=檔案 folder.pic=圖片 folder.mus=音樂 stmenu-pinned=已釘選 stmenu-allapp=全部 feedback.name=意見反應中樞 stmenu-tj=建議專案 stmenu-tj-f1=科學地使用瓶蓋.pptx stmenu-tj-t1=5 分鐘前 stmenu-tj-f2=可口可樂瓶蓋.jpg stmenu-tj-t2=7 分鐘前 stmenu-tj-f3=瓶蓋構造圖.jpg stmenu-tj-t3=16 分鐘前 stmenu-tj-f4=瓶蓋的構造及作用.docx stmenu-tj-t4=24 分鐘前 stmenu-tj-f5=可口可樂瓶蓋厚度.xlsx stmenu-tj-t5=35 分鐘前 sch-app=應用程式 sch-doc=檔案 sch-web=網頁 sch-setting=設定 sch-folder=資料夾 sch-photo=相片 sch-tj=建議 sch-open=開放 sch-opfl=開放檔案位置 sch-cpp=複製路徑 sch-ph=在這裡輸入以進行搜尋 widget=小工具 widget-news=新聞 widget-news-res=我們不對新聞內容負責 ctrl-blue=藍牙 ctrl-air=飛行模式 ctrl-eye=護眼 ctrl-hotspot=行動熱點 ctrl-acc=協助功能 data-week=

editmd-add=添加小工具 psnl=個人化 home=首頁 apply=套用 ok=確定 cancel=取消 all=全部 more=更多 close=關閉 refresh=重新整理 open=開啟 del=刪除 desktop.tgltheme=切換佈景主題 desktop.vogithub=在 GitHub 檢視此專案 desktop.exitedit=結束編輯模式 desktop.enteredit=進入編輯模式 nts.about=

Windows 12 網頁版

Windows 12 網頁版是一個開放源專案,
希望讓使用者在網路上預先體驗 Windows 12,
內容可能與 Windows 12 正式版本不一致。
使用標準網路技術,例如 HTML, CSS 和 JS
此專案絕不附屬於微軟,且不應與微軟操作系統或產品混淆,
這也不是 Windows365 cloud PC
本專案中微軟、Windows和其他示範產品是微軟公司的商標
本專案中 Android 是谷歌公司的商標。

nts.feedback.name=意見反應 nts.feedback.txt=我們非常注重使用者的體驗與反應 nts.feedback.github=在github上提交issue (需要github帳戶) nts.addwg=添加小工具 nts.addwg.weather=天氣 nts.addwg.monitor=系統性能監視器 nts.fs-api-unsupported=

不支援的功能

您的瀏覽器不支援檔案系統存取 API。請使用 Chrome 或 Edge 瀏覽器。

nts.fs-mount-error=

掛載失敗

無法掛載本地資料夾,權限可能被拒絕。

nts.unsupported-file-type=

無法開啟檔案

找不到可以開啟此類型檔案的應用程式。

nts.file-read-error=

讀取失敗

無法讀取檔案內容,權限可能已過期。

nts.file-write-error=

儲存失敗

無法寫入檔案,權限可能已過期。

window.restore=還原 window.min=最小化 window.max=最大化 window.close=關閉 # calc calc.name=小算盤 calc.error.zero=

錯誤

除數不得等於0

# defender defender.name=Windows 安全性 defender.virus=病毒與威脅防護 defender.account=帳戶防護 defender.firewall=防火牆和網路保護 defender.device=裝置安全性 defender.glance=安全性概覽 defender.network=網路流量使用 defender.speed=網路速度 defender.clearv=入侵病毒清除 defender.allvc=所有病毒均被清除 defender.freq=電腦受病毒攻擊頻率 defender.netreq=網路通信比例 defender.netreq-thismonth=這個月 defender.recreq=請求記錄 # msstore msstore.apps=應用程式 msstore.games=遊戲 msstore.download=下載 msstore.topfree=熱門免費應用程式 > msstore.free=免費下載 msstore.devtool=開發 msstore.genimp=原神 msstore.game=遊戲 msstore.mc=Minecraft msstore.design=設計 msstore.tool=工具 msstore.business=商務 # setting setting.name=設定 setting.usrname=星瓶 setting.sch=尋找設定 setting.system=系統 setting.device=藍牙與裝置 setting.network=網路和網際網路 setting.psnl=個人化 setting.psnl.color=色彩 setting.psnl.color-dt=設定 Windows 的佈景主題色彩 setting.psnl.color.now=目前色彩 setting.psnl.color.custom=自訂色彩 setting.psnl.theme=主題 setting.psnl.theme-dt=(!消耗大量 github api 限度!) 設置 Windows 的主題 想要上載自己的主題? setting.psnl.round=圓角 setting.psnl.round-dt=設置系統界面中是否啟用圓角 setting.psnl.animation=動畫 setting.psnl.animation-dt=系統界面元素過渡動畫 setting.psnl.shadow=陰影 setting.psnl.shadow-dt=為系統界面元素添加陰影效果 setting.psnl.alltransp=多窗口透明 setting.psnl.alltransp-dt=為所有窗口開啟透明效果,而不是僅用於焦點窗口 詳細 setting.psnl.mica=Mica效果 (實驗) setting.psnl.mica-dt=為焦點窗口開啟mica效果 反饋 setting.psnl.startup-sound=開機音樂 setting.psnl.startup-sound-dt=是否啟用開機音樂 setting.psnl.ball=語音輸入球 setting.psnl.ball-dt=是否啟用語音輸入球 setting.apps=應用程式 setting.accounts=帳戶 setting.timelang=時間和語言 setting.game=遊戲 setting.acc=協助工具 setting.privacy=隱私權與安全性 setting.update=Windows Update # edge edge.schbing=在必應中搜索,或輸入一個網址 edge.rename=為標籤頁命名 # explorer explorer.name=檔案總管 explorer.pinned=已釘選 explorer.quickacc=快速存取 explorer.thispc=本機 explorer.bin=資源回收筒 explorer.tag=標籤 explorer.tag.red=紅色 explorer.tag.blue=藍色 explorer.tag.yellow=黃色 explorer.tag.green=綠色 explorer.tag.orange=橙色 explorer.tag.purple=紫色 explorer.tag.pink=粉色 explorer.new=新增 explorer.sort=排序 explorer.view=檢視 explorer.mount=掛載本地資料夾 # about about.name=關於 Win12 網頁版 about.intro=簡介 about.update=更新歷程記錄 about.intro.name=Windows 12 網頁版 about.intro.intro=簡介 about.intro.intro.p1=  Windows 12 網頁版是一個開源專案,由星源創作,使用 HTML、CSS 和 JavaScript,在網絡上模擬、創新操作系統。 about.intro.intro.p2=  此專案已發布至 GitHub,點擊此處查看。 about.intro.intro.p3=  若您對於該專案有任何意見或建議,請在 GitHub 上提交 issues,您的問題會被盡可能快地解決。 about.intro.intro.p4=  原創作者星源,點擊以瞭解詳細。 about.intro.os=開源說明 about.intro.os.p1=  此專案是一個開源專案。此專案使用 EPL v2.0 開源許可。開源許可是具有法律效力的合同,請自覺遵守開源許可,尊重他人勞動。 about.intro.os.p2=  根據許可,你可以對該專案進行傳播、分發、修改以及二次發布,包括個人和商業用途。 about.intro.os.p3=  但您必須給出源碼來源,包括作者,專案鏈接等,必須使用相同的協議開源。 about.intro.os.p4=  不是在該專案基礎上進行增加、修改的,僅參考源碼的,不需要開源,但也僅供學習用途。 about.intro.thank=特別感謝 about.intro.thank.p1=  特別感謝 @NB-Group,他為本專案的後端開發做出了重要貢獻! about.intro.contri=貢獻者 about.intro.contri.p1=  感謝所有專案的貢獻者(即時數據,計算方法:即為 Commits 次數) about.intro.star.p1=  感謝所有支持我們的人。 about.intro.others=其它 about.intro.others.p1=  此專案基於目前 Windows 版本創造,與微軟的 Windows 12 正式版本不一致。 about.intro.others.p2=  此專案絕不附屬於微軟,且不應與微軟操作系統或產品混淆,這也不是 Windows365 cloud PC。 about.intro.others.p3=  本專案中微軟、Windows 和其他示範產品是微軟公司的商標。本專案中 Android 是谷歌公司的商標。 about.intro.others.p4=  若您在本專案(網址為tjy-gitnub.github.io/win12/desktop.html)之外的網站看到此頁面,那麼您可能正在瀏覽一個鏡像網站。若欲造訪原始頁面,請點擊這裡。 about.update.name=更新歷程記錄 # notepad notepad.name=記事本 notepad.file=檔案 notepad.edit=編輯 notepad.format=檢視 # terminal terminal.name=終端機 # word word.name=Microsoft Word Preview # camera camera.name=相機 camera.notice=提示 camera.notice.txt=  歡迎使用“相機”應用!本應用由 User782Tec 開發, tjy-gitnub 維護。
  在使用中,此應用程式將會獲取訪問您攝像頭的權限(用於進行拍攝相片等操作)。此應用程式不會將任何您的個人信息(包括所拍攝的相片)上傳至服務器,更不會洩露給他人。  若您不同意上述協議,則將不能使用此應用程式。 camera.notice.agree=同意並繼續 camera.notice.disag=不同意 # run run.name=執行 run.txt=輸入程式、資料夾、文件或網際網路資源的名稱,Windows 會自動開啟。 run.open=開啟 # winver winver.name=關於 Windows winver.p1=版本 25H2 (OS 組建 24612.1896) winver.p2=© Microsoft Corporation。保留所有權利。 winver.p3=Windows 12 專業版 作業系統及其使用者介面受美國及其他國家/地區之商標及其他已立案和立案中的智慧財產權法保護。 winver.p4=此產品依據 Microsoft 軟體許可條款中規定,使用權屬於: winver.p5=上面都是胡扯,不可當真(雙擊隱藏此消息) # taskmgr taskmgr.name=工作管理員 # copilot copilot.start=開始對話 copilot.p=使用前請先點擊右上 "" 查看使用注意事項。此 Copilot 可能不以你使用的語言回答。 copilot.send=發送 # terminal commands terminal.help.title=有關某個命令的詳細資訊,請鍵入 HELP 命令名 terminal.help.dir=顯示目錄中的檔案和子目錄清單 terminal.help.ls=顯示目錄中的檔案和子目錄清單 (DIR的別名) terminal.help.del=刪除一個或多個檔案 terminal.help.cd=顯示目前目錄的名稱或將其變更 terminal.help.cls=清除螢幕 terminal.help.help=提供 Windows 命令的説明資訊 terminal.help.systeminfo=顯示系統資訊 terminal.help.shutdown=關閉電腦 terminal.help.cmd=開啟新的命令提示字元視窗 terminal.help.exit=結束命令提示字元程式 terminal.help.easter=彩蛋命令: terminal.help.hello=打個招呼 terminal.help.matrix=駭客任務特效 terminal.help.snow=下雪特效 terminal.help.dance=讓視窗跳舞 terminal.help.starwars=原力覺醒 # whiteboard whiteboard.saveas.title=另存為 whiteboard.saveas.prompt=請輸入檔案名稱: whiteboard.saveas.save=儲存 whiteboard.saveas.cancel=取消 ================================================ FILE: lang/readme.md ================================================ # 翻译贡献指南 开始翻译前,**务必[联系我们](https://teams.live.com/l/invite/FEA0yrNkE_bAn-ddwI),并征得同意**,以了解是否还有其他人正在翻译,避免重复劳动和合并冲突。
Before 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. ## 条件 / Requirements 1. 有中文基础
Basic proficiency in Chinese 2. 有一定的目标语言的基础 / 愿意将自己的 Windows 11 系统调成目标语言
Basic proficiency in the target language / willing to set your Windows 11 system to the target language 3. 有代码基础
Basic coding knowledge ## 方法 / Method 项目使用 i18n 库实现多语言,可上网查阅,或自行研究已有翻译的部分 The project uses an i18n library for multi-language support. You can refer to online resources or study existing translated sections. ### 已有成果 / Existing Resources 0. 务必理解 `desktop.js` 开头语言处理部分,熟悉原理
Make sure you understand the language handling logic at the beginning of desktop.js and are familiar with the mechanism. 1. 此目录下 `trans.py`的使用说明见[此](README_trans.md)
See [this](README_trans.md) for the usage instructions of trans.py in this directory. 2. `desktop.js` 中有 `lang(txt,id)`,详见注释
desktop.js includes the lang(txt, id) function — see the comments for details. ### 注意 / Notes 部分代码形如 Some code like: ```html 文本 ``` 可能不便于设置属性,可对纯文本部分添加 `` 标签,例可改为 may not be suitable for direct attribute assignment: ```html 文本 ``` 顺便把 `lang_zh_cn` 文件一同完善,感激不尽。
Please also help improve the lang_zh_cn file — we would greatly appreciate it. ### 加分项 / Bonus Points 1. 与 Windows 11 一致的部分,应符合(尽量)最新版的原生语言内容
For parts that match Windows 11, try to use the latest official native wording. 2. 不一致的,应避免机器翻译
For non‑matching parts, avoid machine translation. ## 酬劳 / Rewards 有且仅有 Only these: 1. Github 贡献点
GitHub contribution points 2. 来自开发者的由衷感谢 >u-)o
Sincere gratitude from the developer >u-)o ================================================ FILE: lang/trans.py ================================================ # Windows 12 网页版是一个开放源项目,希望让用户在网络上预先体验 Windows 12. # @author tangyuan0821 tjy-gitnub # @license EPL v2 # @link from msvcrt import getch, kbhit from pathlib import Path import sys from colorama import init init(autoreset=True) black=30 red=31 green=32 yellow=33 blue=34 pink=35 cyan=36 white=37 fullchar='█' def color(what,text=None,bg=None,bold=False,underline=False,blink=False,fanxian=False,disnone=False): clist=[] clist.append(str(text)) if text else None clist.append(str(bg+10)) if bg else None clist.append('1') if bold else None clist.append('4') if underline else None clist.append('5') if blink else None clist.append('7') if fanxian else None clist.append('8') if disnone else None return '\033['+';'.join(clist)+'m'+what+'\033[0m' def clear(): print("\x1b[2J\x1b[H", end='') clear_c = "\x1b[2J\x1b[H" clear_line_c = "\r\033[K" SCRIPT_DIR = Path(__file__).resolve().parent DEFAULT_HTML = SCRIPT_DIR.parent / "desktop.html" DEFAULT_PROPS = SCRIPT_DIR / "lang_en.properties" def clamp(value: int, low: int, high: int) -> int: return max(low, min(value, high)) def load_lines(path: Path): return path.read_text(encoding='utf8').split('\n') def save_lines(path: Path, lines): path.write_text('\n'.join(lines), encoding='utf8') def append_property(path: Path, key: str, value: str): with path.open('a', encoding='utf8') as fh: fh.write(f"{key}={value}\n") def display_context(lines, index: int): clear() start = max(0, index - 7) end = min(len(lines), index + 8) for idx in range(start, end): line = lines[idx] print(color(line, blue) if idx == index else line) print('------------------------------------\n') def prompt_start_line(total: int) -> int: raw = input('Start line (1-based, default 1): ').strip() if raw == '': return 0 try: line_no = int(raw) - 1 except ValueError: line_no = 0 return clamp(line_no, 0, max(0, total - 1)) def main(): html_path = Path(sys.argv[1]).resolve() if len(sys.argv) > 1 else DEFAULT_HTML props_path = Path(sys.argv[2]).resolve() if len(sys.argv) > 2 else DEFAULT_PROPS if not html_path.exists(): print(f"HTML file not found: {html_path}") return lines = load_lines(html_path) if not lines: print('HTML file is empty, nothing to edit.') return index = prompt_start_line(len(lines)) pos = len(lines[index]) while 0 <= index < len(lines): display_context(lines, index) pos = clamp(pos, 0, len(lines[index])) while True: print(clear_line_c + f"{index + 1}/{len(lines)} {lines[index][:pos]}|{lines[index][pos:]}", end='', flush=True) g = getch() if g in (b'\r', b'\n'): index = clamp(index + 1, 0, len(lines) - 1) pos = len(lines[index]) break elif g == b'\x1b': if kbhit(): seq = getch() if seq in (b'[', b'O'): code = getch() if code == b'A': # Up index = clamp(index - 1, 0, len(lines) - 1) pos = len(lines[index]) break elif code == b'B': # Down index = clamp(index + 1, 0, len(lines) - 1) pos = len(lines[index]) break elif code == b'C': # Right pos = clamp(pos + 1, 0, len(lines[index])) elif code == b'D': # Left pos = clamp(pos - 1, 0, len(lines[index])) else: save_lines(html_path, lines) return elif g in (b'\xe0', b'\x00'): direction = getch() if direction == b'K': # Left pos = clamp(pos - 1, 0, len(lines[index])) elif direction == b'M': # Right pos = clamp(pos + 1, 0, len(lines[index])) elif direction == b'H': # Up index = clamp(index - 1, 0, len(lines) - 1) pos = len(lines[index]) break elif direction == b'P': # Down index = clamp(index + 1, 0, len(lines) - 1) pos = len(lines[index]) break elif g in (b' ', b'/'): print('') raw = input('> ').strip() if not raw: continue if '=' in raw: key, value = raw.split('=', 1) key, value = key.strip(), value.strip() else: key, value = raw.strip(), None if not key: continue insert = f' data-i18n="{key}"' lines[index] = lines[index][:pos] + insert + lines[index][pos:] save_lines(html_path, lines) if value is not None: append_property(props_path, key, value) index = clamp(index + 1, 0, len(lines) - 1) pos = len(lines[index]) break if index == len(lines) - 1 and g in (b'\r', b'\n'): save_lines(html_path, lines) return if __name__ == '__main__': main() ================================================ FILE: mainpage.html ================================================ Win12浏览器
================================================ FILE: media/LICENSE ================================================ Attribution-ShareAlike 4.0 International ======================================================================= Creative Commons Corporation ("Creative Commons") is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an "as-is" basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. Using Creative Commons Public Licenses Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC- licensed material, or material used under an exception or limitation to copyright. More considerations for licensors: wiki.creativecommons.org/Considerations_for_licensors Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor's permission is not necessary for any reason--for example, because of any applicable exception or limitation to copyright--then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public: wiki.creativecommons.org/Considerations_for_licensees ======================================================================= Creative Commons Attribution-ShareAlike 4.0 International Public License By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. Section 1 -- Definitions. a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. c. BY-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License. d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution and ShareAlike. h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. j. Licensor means the individual(s) or entity(ies) granting rights under this Public License. k. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. l. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. m. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. Section 2 -- Scope. a. License grant. 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: a. reproduce and Share the Licensed Material, in whole or in part; and b. produce, reproduce, and Share Adapted Material. 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 3. Term. The term of this Public License is specified in Section 6(a). 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a) (4) never produces Adapted Material. 5. Downstream recipients. a. Offer from the Licensor -- Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. b. Additional offer from the Licensor -- Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter's License You apply. c. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). b. Other rights. 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 2. Patent and trademark rights are not licensed under this Public License. 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. Section 3 -- License Conditions. Your exercise of the Licensed Rights is expressly made subject to the following conditions. a. Attribution. 1. If You Share the Licensed Material (including in modified form), You must: a. retain the following if it is supplied by the Licensor with the Licensed Material: i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); ii. a copyright notice; iii. a notice that refers to this Public License; iv. a notice that refers to the disclaimer of warranties; v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; b. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and c. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. b. ShareAlike. In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply. 1. The Adapter's License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-SA Compatible License. 2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material. 3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply. Section 4 -- Sui Generis Database Rights. Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. Section 5 -- Disclaimer of Warranties and Limitation of Liability. a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. Section 6 -- Term and Termination. a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 2. upon express reinstatement by the Licensor. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. Section 7 -- Other Terms and Conditions. a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. Section 8 -- Interpretation. a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. ======================================================================= Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” The text of the Creative Commons public licenses is dedicated to the public domain under the CC0 Public Domain Dedication. Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark "Creative Commons" or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org. ================================================ FILE: module/apps.js ================================================ // 应用功能 let apps = { setting: { init: () => { $('#win-setting>.menu>list>a.home')[0].click(); $('#win-setting>.page>.cnt.update>.setting-list>div:last-child>.alr>a.checkbox')[localStorage.getItem('autoUpdate') == 'true' ? 'addClass' : 'removeClass']('checked'); apps.setting.checkUpdate(); }, page: (name) => { $('#win-setting>.page>.cnt.' + name).scrollTop(0); $('#win-setting>.page>.cnt.show').removeClass('show'); $('#win-setting>.page>.cnt.' + name).addClass('show'); $('#win-setting>.menu>list>a.check').removeClass('check'); $('#win-setting>.menu>list>a.' + name).addClass('check'); }, theme_get: () => { $('#set-theme').html(` `); // 实时获取主题 api('repos/tjy-gitnub/win12-theme/contents').then(res => {res.json().then(cs => { console.log(cs); cs.forEach(c => { if (c.type == 'dir') { api(c.url,true).then(res => {res.json().then(cnt => { $('#set-theme').html(''); cnt.forEach(cn => { if (cn.name == 'theme.json') { $.getJSON('https://tjy-gitnub.github.io/win12-theme/' + cn.path).then(inf => { $('#set-theme>loading').remove(); $('#set-theme').append(`${c.name}`); }); } }); })}); } }); })}); $('#set-theme').append(`默认主题`); }, theme_set: (infp) => { api('repos/tjy-gitnub/win12-theme/contents/' + infp).then(res => {res.json().then(cnt => { // console.log('https://api.github.com/repos/tjy-gitnub/win12-theme/contents/' + infp); cnt.forEach(cn => { if (cn.name == 'theme.json') { $.getJSON('https://tjy-gitnub.github.io/win12-theme/' + cn.path).then(inf => { let infjs = inf; cnt.forEach(fbg => { console.log(fbg, infjs); if (fbg.name == infjs.bg) { $(':root').css('--bgul', `url('https://tjy-gitnub.github.io/win12-theme/${fbg.path}')`); $(':root').css('--theme-1', infjs.color1); $(':root').css('--theme-2', infjs.color2); $(':root').css('--href', infjs.href); // $('#set-theme').append(`${c.name}`); } }); }); } }); })}); }, // 无法正常运行,待调试 checkUpdate: () => { $('#win-setting>.page>.cnt.update>.lo>.update-main .notice')[0].innerText = '开发者暂未完善此功能'; $('#win-setting>.page>.cnt.update>.lo>.update-main .detail')[0].innerHTML = 'Windows 更新已被禁用'; $('#win-setting>.page>.cnt.update>.setting-list>.update-now').addClass('disabled'); $('#win-setting>.page>.cnt.update>.lo>.update-main>div:last-child').addClass('disabled'); // Simulate the previous functionality for backward compatibility but disable actual updates setTimeout(() => { $('#win-setting>.page>.cnt.update>.lo>.update-main .notice')[0].innerText = '开发者暂未完善此功能'; $('#win-setting>.page>.cnt.update>.lo>.update-main .detail')[0].innerText = 'Windows 更新已被禁用'; // $('#win-setting>.page>.cnt.update>.setting-list>.update-now>div>p:first-child')[0].innerText = '开发者暂未完善此功能'; // $('#win-setting>.page>.cnt.update>.setting-list>.update-now>div>p:last-child')[0].innerText = 'Windows 更新已被禁用'; // Keep buttons disabled as requested $('#win-setting>.page>.cnt.update>.setting-list>.update-now').addClass('disabled'); $('#win-setting>.page>.cnt.update>.lo>.update-main>div:last-child').addClass('disabled'); }, 1000); }, }, msstore: { init: () => { $('#win-msstore>.menu>list>a.home')[0].click(); }, page: (name) => { $('#win-msstore>.page>.cnt.' + name).scrollTop(0); $('#win-msstore>.page>.cnt.show').removeClass('show'); $('#win-msstore>.page>.cnt.' + name).addClass('show'); $('#win-msstore>.menu>list>a.check').removeClass('check'); $('#win-msstore>.menu>list>a.' + name).addClass('check'); } }, run: { init: () => { $('#win-run>.open>input').val(run_cmd); //在windows中,运行输入的内容会被保留 window.setTimeout(() => { $('#win-run>.open>input').focus(); $('#win-run>.open>input').select(); }, 300); }, run: (cmd) => { if (!runcmd(cmd)) { if (cmd != '') { try { cmd = cmd.replace(/\/$/, ''); var pathl = cmd.split('/'); let tmp = apps.explorer.path; let valid = true; pathl.forEach(name => { if (Object.prototype.hasOwnProperty.call(tmp['folder'], name)) { tmp = tmp['folder'][name]; } else { valid = false; return false; } }); if (valid == true) { run_cmd = cmd; openapp('explorer'); window.setTimeout(() => { apps.explorer.goto(cmd); }, 300); } else { nts['Can-not-open-file'] = { cnt: '

' + cmd + `

Windows 找不到文件 '` + cmd + '\'。请确定文件名是否正确后,再试一次。

', btn: [ { type: 'main', text: '确定', js: 'closenotice();showwin(\'run\');$(\'#win-run>.open>input\').select();' }, { 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);' } ] }; shownotice('Can-not-open-file'); } } catch { nts['Can-not-open-file'] = { cnt: '

' + cmd + `

Windows 找不到文件 '` + cmd + '\'。请确定文件名是否正确后,再试一次。

', btn: [ { type: 'main', text: '确定', js: 'closenotice();showwin(\'run\');$(\'#win-run>.open>input\').select();' }, { 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);' } ] }; shownotice('Can-not-open-file'); } } } } }, taskmgr: { sortType: 'cpu', sortOrder: 'up-down', tasks: structuredClone(taskmgrTasks), cpu: 0, cpuChart: null, cpuBg: null, memory: 0, memoryChart: null, memoryBg: null, memory2Elt: null, cpuRunningTime: 0, disk: 0, diskChart: null, diskBg: null, disk2Chart: null, disk2Bg: null, diskSpeed: { read: 0, write: 0 }, wifi: { receive: 0, send: 0 }, wifiChart: null, wifiBg: null, gpu: { d3: 0, copy: 0, videod: 0, videop: 0, usage: 0 }, gpuChart: [null, null, null, null], gpuBg: [null, null, null, null], gpu2Chart: [null, null], gpu2Bg: [null, null], gpuMemory: { private: 0, public: 0 }, gpu3Chart: null, processList: [], handle: 0, foldHide: false, delay: 0, remove: () => { apps.taskmgr.loaded = false; window.clearInterval(apps.taskmgr.handle); if (apps.taskmgr.preLoaded == true) { apps.taskmgr.preLoaded = false; apps.taskmgr.load(false); } else { apps.taskmgr.preLoaded = false; } }, init: () => { window.setTimeout(() => { $('#win-taskmgr>.menu>list.focs>a')[0].click(); }, 200); }, fold: () => { if (!apps.taskmgr.foldHide) { window.setTimeout(() => { $('#win-taskmgr>.menu>.focs>a>p').hide(); }, 50); $('#win-taskmgr')[0].style.gridTemplateColumns = '78px auto'; } else { window.setTimeout(() => { $('#win-taskmgr>.menu>.focs>a>p').show(); }, 100); $('#win-taskmgr')[0].style.gridTemplateColumns = '320px auto'; } apps.taskmgr.foldHide = !apps.taskmgr.foldHide; }, load: (init_all = true) => { if (init_all == true) { const performance = $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph')[0]; performance.$$('.graph-cpu>.information>.left>div:nth-child(3)>.value')[0].innerText = apps.taskmgr.tasks.length; apps.taskmgr.cpuChart = performance.$$('.graph-cpu>.graph>.chart')[0]; apps.taskmgr.cpuBg = performance.$$('.graph-cpu>.graph>.bg')[0]; apps.taskmgr.cpuBg.innerHTML = ''; apps.taskmgr.cpuChart.innerHTML = ''; apps.taskmgr.memoryChart = performance.$$('.graph-memory>.graph>.chart')[0]; apps.taskmgr.memoryBg = performance.$$('.graph-memory>.graph>.bg')[0]; apps.taskmgr.memoryBg.innerHTML = ''; apps.taskmgr.memoryChart.innerHTML = ''; apps.taskmgr.memory2Elt = performance.$$('.graph-memory>.graph2>.chart')[0]; apps.taskmgr.diskChart = performance.$$('.graph-disk>.graph>.chart')[0]; apps.taskmgr.diskBg = performance.$$('.graph-disk>.graph>.bg')[0]; apps.taskmgr.diskBg.innerHTML = ''; apps.taskmgr.diskChart.innerHTML = ''; apps.taskmgr.disk2Chart = performance.$$('.graph-disk>.graph2>.chart')[0]; apps.taskmgr.disk2Bg = performance.$$('.graph-disk>.graph2>.bg')[0]; apps.taskmgr.disk2Bg.innerHTML = ''; apps.taskmgr.disk2Chart.innerHTML = ''; apps.taskmgr.wifiChart = performance.$$('.graph-wifi>.graph>.chart')[0]; apps.taskmgr.wifiBg = performance.$$('.graph-wifi>.graph>.bg')[0]; apps.taskmgr.wifiChart.innerHTML = ''; apps.taskmgr.wifiBg.innerHTML = ''; apps.taskmgr.gpu3Chart = performance.$$('.graph-gpu>.graphs>svg')[0]; apps.taskmgr.gpu3Chart.innerHTML = ''; for (var i = 1; i <= 4; i++) { apps.taskmgr.gpuChart[i-1] = performance.$$('.graph-gpu>.graphs>.graph' + i + '>.chart>.chart')[0]; apps.taskmgr.gpuChart[i-1].innerHTML = ''; apps.taskmgr.gpuBg[i-1] = performance.$$('.graph-gpu>.graphs>.graph' + i + '>.chart>.bg')[0]; apps.taskmgr.gpuBg[i-1].innerHTML = ''; } for (var i = 1; i <= 2; i++) { apps.taskmgr.gpu2Chart[i-1] = performance.$$('.graph-gpu>.gpu2-' + i + '>.chart')[0]; apps.taskmgr.gpu2Bg[i-1] = performance.$$('.graph-gpu>.gpu2-' + i + '>.bg')[0]; apps.taskmgr.gpu2Bg[i-1].innerHTML = ''; apps.taskmgr.gpu2Chart[i-1].innerHTML = ''; } } if (apps.taskmgr.preLoaded != true && apps.taskmgr.loaded != true) { apps.taskmgr.gpuMemory.private = Number((Math.random() * 4).toFixed(2)); apps.taskmgr.gpuMemory.public = Number((Math.random() * 4).toFixed(2)); apps.taskmgr.generateProcesses(); apps.taskmgr.sort(); apps.taskmgr.loadProcesses(); apps.taskmgr.performanceLoad(); } if (init_all == true) { apps.taskmgr.gpuMemory.private = Number((Math.random() * 4).toFixed(2)); apps.taskmgr.gpuMemory.public = Number((Math.random() * 4).toFixed(2)); apps.taskmgr.loadProcesses(); apps.taskmgr.generateProcesses(); apps.taskmgr.sort(); apps.taskmgr.performanceLoad(); apps.taskmgr.drawGrids(); apps.taskmgr.handle = window.setInterval(() => { apps.taskmgr.loadProcesses(); apps.taskmgr.generateProcesses(); apps.taskmgr.sort(); apps.taskmgr.performanceLoad(); apps.taskmgr.loadGraph(); apps.taskmgr.gridLine(); apps.taskmgr.memory2Elt.style.width = apps.taskmgr.memory + '%'; }, 1000); } else if (apps.taskmgr.loaded != true && apps.taskmgr.preLoaded != true) { apps.taskmgr.handle = window.setInterval(() => { apps.taskmgr.loadProcesses(); apps.taskmgr.generateProcesses(); apps.taskmgr.sort(); apps.taskmgr.performanceLoad(); }, 1000); } }, page: (name) => { $('#win-taskmgr>.main>.cnt.' + name).scrollTop(0); $('#win-taskmgr>.main>.cnt.show').removeClass('show'); $('#win-taskmgr>.main>.cnt.' + name).addClass('show'); $('#win-taskmgr>.menu>list.focs>a.check').removeClass('check'); $('#win-taskmgr>.menu>list.focs>a.' + name).addClass('check'); if (!(name == 'processes' || name == '404')) { document.getElementById('tsk-search').style.display = 'none'; } else { document.getElementById('tsk-search').style.display = ''; } }, graph: (name) => { $('#win-setting>.page>.cnt.' + name).scrollTop(0); $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.show').removeClass('show'); $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.' + name).addClass('show'); $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu>.check').removeClass('check'); $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu>.' + name).addClass('check'); }, generateProcesses: () => { let processList = []; let max = 100 / apps.taskmgr.tasks.length; let cpusum = 0, memorysum = 0, disksum = 0, diskUsing = Number(Math.random()) > 0.7/*, color = window.getComputedStyle(page, null).getPropertyValue('--href')*/; var search_len = 0; for (const elt of apps.taskmgr.tasks) { let cpu = Number((Math.random() * max).toFixed(1)), 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)), disk = Number((Math.random() * max).toFixed(1)) > (max / 1.2) && diskUsing ? max * Number(Math.random().toFixed(1)) : 0; cpusum = Number((cpusum + cpu).toFixed(1)); memorysum = Number((memorysum + memory).toFixed(1)); disksum = Number((disksum + disk).toFixed(1)); if (document.getElementById('tsk-search').value != '' && document.getElementById('tsk-search').style.display == '' && (!elt.name.toLowerCase().includes(document.getElementById('tsk-search').value.toLowerCase()))) { continue; } processList.splice(processList.length, 0, { name: elt.name, icon: elt.icon || '', system: elt.system, cpu: cpu, memory: memory, disk: disk }); search_len++; } if (search_len == 0) { apps.taskmgr.page('404'); } else { if ($('#tsk-search').val() != '' && $('#tsk-search')[0].style.display == '') { apps.taskmgr.page('processes'); } } apps.taskmgr.cpu = cpusum; apps.taskmgr.memory = memorysum; apps.taskmgr.disk = disksum; apps.taskmgr.processList = processList; }, loadProcesses: (processList = apps.taskmgr.processList) => { const processContainer = $('#win-taskmgr>.main>.cnt.processes tbody.view')[0]; const values = $('#win-taskmgr>.main>.cnt.processes thead>tr>th>.value'); const cpu = values[0], memory = values[1], disk = values[2]; let selected; if ($('#win-taskmgr>.main>.cnt.processes tbody.view>tr.select>td:first-child>.text')[0]) { selected = $('#win-taskmgr>.main>.cnt.processes tbody.view>tr.select>td:first-child>.text')[0].innerText; } let max = 100 / apps.taskmgr.tasks.length; processContainer.innerHTML = ''; for (const elt of processList) { const newElt = document.createElement('tr'); newElt.classList.add('notrans'); newElt.innerHTML = `
${elt.name}
${elt.cpu.toFixed(1)}%${elt.memory.toFixed(1)}%${elt.disk.toFixed(1)}%${['非常低', '非常低', '非常低', '低', '中'][Math.floor(Math.random() * 5)]}`; if (elt.name == selected) { newElt.classList.add('select'); } processContainer.appendChild(newElt); newElt.onclick = function () { apps.taskmgr.selectProcess(this); }; newElt.oncontextmenu = function (e) { return showcm(e, 'taskmgr.processes', elt.name); }; window.setTimeout(() => { newElt.classList.remove('notrans'); }, 100); } cpu.innerText = apps.taskmgr.cpu.toFixed(1) + '%'; memory.innerText = apps.taskmgr.memory.toFixed(1) + '%'; disk.innerText = apps.taskmgr.disk.toFixed(1) + '%'; }, sort: (processList = apps.taskmgr.processList, type = apps.taskmgr.sortType, order = apps.taskmgr.sortOrder) => { processList.sort((a, b) => { if (a[type] > b[type]) { return order == 'up-down' ? -1 : 1; } else if (a[type] <= b[type]) { return order == 'up-down' ? 1 : -1; } }); apps.taskmgr.processList = processList; }, performanceLoad: () => { $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-cpu>.information>.left>div:nth-child(1)>.value')[0].innerText = `${apps.taskmgr.cpu.toFixed(1)}%`; $('#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`; $('#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))}`; $('#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))}`; let sec = apps.taskmgr.cpuRunningTime; let min = Math.floor(sec / 60); sec %= 60; let hour = Math.floor(min / 60); min %= 60; let day = Math.floor(hour / 24); hour %= 24; $('#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}`; $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu>.graph-cpu>.right>.data>.value1')[0].innerText = `${apps.taskmgr.cpu.toFixed(1)}%`; $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu>.graph-cpu>.right>.data>.value2')[0].innerText = `${(3200 / 100 * apps.taskmgr.cpu).toFixed(1)}GHz`; $('#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)`; $('#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`; $('#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`; $('#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`; $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu>.graph-memory>.right>.data>.value1')[0].innerText = `${apps.taskmgr.memory.toFixed(1)} / 100 GB`; $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu>.graph-memory>.right>.data>.value2')[0].innerText = `${apps.taskmgr.memory.toFixed(1)}%`; apps.taskmgr.diskSpeed.read = apps.taskmgr.disk != 0 ? (Math.random() * 100).toFixed(2) : 0; apps.taskmgr.diskSpeed.write = apps.taskmgr.disk != 0 ? (Math.random() * 100).toFixed(2) : 0; $('#win-taskmgr>.main>.cnt.performance>.content>.performance-graph>.graph-disk>.information>.left>div:nth-child(1)>.value')[0].innerText = `${apps.taskmgr.disk}%`; $('#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} 毫秒`; $('#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/秒'}`; $('#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/秒'}`; $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu>.graph-disk>.right>.data>.value2')[0].innerText = `${apps.taskmgr.disk}%`; $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu>.graph-gpu>.right>.data>.value2')[0].innerText = `${apps.taskmgr.gpu.usage.toFixed(1)}%`; apps.taskmgr.gpu.d3 = Number((Math.random() * 15).toFixed(2)); apps.taskmgr.gpu.copy = Number((Math.random() * 15).toFixed(2)); apps.taskmgr.gpu.videop = Number((Math.random() * 15).toFixed(2)); apps.taskmgr.gpu.videod = Number((Math.random() * 15).toFixed(2)); apps.taskmgr.gpu.usage = Number(((apps.taskmgr.gpu.d3 + apps.taskmgr.gpu.copy + apps.taskmgr.gpu.videop + apps.taskmgr.gpu.videod) / 4).toFixed(1)); apps.taskmgr.wifi.receive = Number((Math.random() * 100).toFixed(2)); apps.taskmgr.wifi.send = Number((Math.random() * 100).toFixed(2)); $('#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`; $('#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`; $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu>.graph-wifi>.right>.data>.value2')[0].innerText = `发送: ${apps.taskmgr.wifi.send} 接收: ${apps.taskmgr.wifi.receive} Mbps`; }, drawGraph: (chart, data, nth = 0) => { var path = $(chart.querySelectorAll('path')[nth]).attr('d'); path = path.replace(/ L 6000 1000$/, ''); var pathl = path.split(' '); var newPath = ''; var sum = 0, head = 0; for (var i = 0; i < pathl.length; i += 3) { const arg = pathl[i]; if (arg == 'M' && Number(pathl[i + 1]) > 0) { pathl[i + 1] = Number(pathl[i + 1]) - 100; pathl[i + 2] = pathl[i + 2]; } else if (arg == 'M' && Number(pathl[i + 1]) <= 0) { pathl[i + 1] = 0; pathl[i + 2] = 1000; } else if (arg == 'L') { if (sum == 0) { head = i; } else if (sum >= 60) { pathl.splice(head, 3); sum--; i -= 3; } pathl[i + 1] = Number(pathl[i + 1]) - 100; sum++; } } pathl.push('L', '6000', 1000 - data, 'L', '6000', '1000'); window.setTimeout(() => { $(chart.querySelectorAll('path')[nth]).attr('d', ''); for (const arg of pathl) { if (!(arg === '')) { newPath += arg + ' '; } } newPath = newPath.substring(0, newPath.length - 1); $(chart.querySelectorAll('path')[nth]).attr('d', newPath); }, apps.taskmgr.delay); }, loadGraph: () => { apps.taskmgr.drawGraph(apps.taskmgr.cpuChart, apps.taskmgr.cpu * 10); apps.taskmgr.drawGraph(apps.taskmgr.memoryChart, apps.taskmgr.memory * 10); apps.taskmgr.drawGraph(apps.taskmgr.diskChart, apps.taskmgr.disk * 10); apps.taskmgr.drawGraph(apps.taskmgr.disk2Chart, apps.taskmgr.diskSpeed.read * 10, 0); apps.taskmgr.drawGraph(apps.taskmgr.disk2Chart, apps.taskmgr.diskSpeed.write * 10, 1); apps.taskmgr.drawGraph(apps.taskmgr.wifiChart, apps.taskmgr.wifi.receive * 10, 0); apps.taskmgr.drawGraph(apps.taskmgr.wifiChart, apps.taskmgr.wifi.send * 10, 1); for (var i = 0; i < 4; i++) { apps.taskmgr.drawGraph(apps.taskmgr.gpuChart[i], apps.taskmgr.gpu[['d3', 'copy', 'videop', 'videod'][i]] * 10); } for (var i = 0; i < 2; i++) { apps.taskmgr.drawGraph(apps.taskmgr.gpu2Chart[i], apps.taskmgr.gpuMemory[['private', 'public'][i]] * (i == 1 ? (1000 / 32) : (1000 / 16))); } apps.taskmgr.drawGraph(apps.taskmgr.gpu3Chart, apps.taskmgr.gpu.usage * 10); const menu = $('#win-taskmgr>.main>.cnt.performance>.content>.select-menu')[0]; menu.$$('.graph-cpu svg')[0].innerHTML = apps.taskmgr.cpuChart.innerHTML; menu.$$('.graph-memory svg')[0].innerHTML = apps.taskmgr.memoryChart.innerHTML; menu.$$('.graph-disk svg')[0].innerHTML = apps.taskmgr.diskChart.innerHTML; menu.$$('.graph-wifi svg')[0].innerHTML = apps.taskmgr.wifiChart.innerHTML; menu.$$('.graph-gpu svg')[0].innerHTML = apps.taskmgr.gpu3Chart.innerHTML; }, changeSort: (elt, type) => { for (const _elt of $('#win-taskmgr>.main>.cnt.processes thead>tr>th>i')) { _elt.className = 'bi'; } if (apps.taskmgr.sortOrder == 'up-down' && apps.taskmgr.sortType == type) { elt.className = 'bi bi-chevron-up'; apps.taskmgr.sortOrder = 'down-up'; apps.taskmgr.sort(apps.taskmgr.processList, type, 'down-up'); } else { elt.className = 'bi bi-chevron-down'; apps.taskmgr.sortOrder = 'up-down'; apps.taskmgr.sortType = type; apps.taskmgr.sort(apps.taskmgr.processList, type, 'up-down'); } }, gridLine: () => { apps.taskmgr.changeGrids(apps.taskmgr.memoryBg); apps.taskmgr.changeGrids(apps.taskmgr.cpuBg); apps.taskmgr.changeGrids(apps.taskmgr.diskBg); apps.taskmgr.changeGrids(apps.taskmgr.disk2Bg); apps.taskmgr.changeGrids(apps.taskmgr.wifiBg); apps.taskmgr.gpuBg.forEach(function (chart) { apps.taskmgr.changeGrids(chart); }); apps.taskmgr.gpu2Bg.forEach(function (chart) { apps.taskmgr.changeGrids(chart); }); }, selectProcess: (elt) => { $('#win-taskmgr>.main>.cnt.processes tbody.view>.select').removeClass('select'); $(elt).addClass('select'); }, taskkill: (name) => { if (name == 'System') { window.location = 'bluescreen.html'; } else { apps.taskmgr.tasks.splice(apps.taskmgr.tasks.findIndex(elt => elt.name == name), 1); if (taskmgrTasks.find(elt => elt.name == name).link != null) { hidewin(taskmgrTasks.find(elt => elt.name == name).link); } } }, initgrids: (chart) => { const column = chart.querySelector('g.col'), row = chart.querySelector('g.row'); for (var i = 0; i <= 20; i++) { column.innerHTML += ``; } for (var i = 0; i <= 10; i++) { row.innerHTML += ``; } }, drawGrids: () => { apps.taskmgr.initgrids(apps.taskmgr.cpuBg); apps.taskmgr.initgrids(apps.taskmgr.diskBg); apps.taskmgr.initgrids(apps.taskmgr.memoryBg); apps.taskmgr.initgrids(apps.taskmgr.disk2Bg); apps.taskmgr.initgrids(apps.taskmgr.wifiBg); for (var i = 0; i < 4; i++) { apps.taskmgr.initgrids(apps.taskmgr.gpuBg[i]); } for (var i = 0; i < 2; i++) { apps.taskmgr.initgrids(apps.taskmgr.gpu2Bg[i]); } }, changeGrids: (chart) => { const grid = chart.querySelectorAll('g.col>path'); for (const elt of grid) { let path = $(elt).attr('d').split(' '); for (var i = 0; i < path.length; i++) { if (path[i] == 'M' || path[i] == 'L') { var cur = Number(path[i+1]); cur -= 100; if (cur < 0) { cur = (300 - (-cur)) + 6000; } path[i+1] = String(cur); } } $(elt).attr('d', ''); let tmp = ''; for (const comp of path) { tmp += comp + ' '; } $(elt).attr('d', tmp); console.log($(elt).attr('d')); } } }, whiteboard: { canvas: null, ctx: null, windowResizeObserver: null, color: 'red', init: () => { apps.whiteboard.ctx.lineJoin = 'round'; apps.whiteboard.ctx.lineCap = 'round'; apps.whiteboard.changeColor(apps.whiteboard.color); if ($(':root').hasClass('dark')) { $('.window.whiteboard>.titbar>p').text('Blackboard'); } else { $('.window.whiteboard>.titbar>p').text('Whiteboard'); } }, changeColor: (color) => { apps.whiteboard.color = color; if (color == 'eraser') { apps.whiteboard.ctx.strokeStyle = 'black'; apps.whiteboard.ctx.lineWidth = 35; apps.whiteboard.ctx.globalCompositeOperation = 'destination-out'; } else { apps.whiteboard.ctx.strokeStyle = color; apps.whiteboard.ctx.globalCompositeOperation = 'source-over'; apps.whiteboard.ctx.lineWidth = 8; } }, changePen: function () { const pens = $('#win-whiteboard>.toolbar>.tools>*'); for (const elt of pens) { elt.classList.remove('active'); } this.classList.add('active'); apps.whiteboard.changeColor(this.dataset.color); }, load: () => { apps.whiteboard.canvas = $('#win-whiteboard>canvas')[0]; apps.whiteboard.ctx = apps.whiteboard.canvas.getContext('2d'); apps.whiteboard.windowResizeObserver = new ResizeObserver(apps.whiteboard.resize); apps.whiteboard.windowResizeObserver.observe($('.window.whiteboard')[0], { box: 'border-box' }); }, resize: () => { try { const imgData = apps.whiteboard.ctx.getImageData(0, 0, apps.whiteboard.canvas.width, apps.whiteboard.canvas.height); apps.whiteboard.canvas.width = $('#win-whiteboard')[0].clientWidth; apps.whiteboard.canvas.height = $('#win-whiteboard')[0].clientHeight; apps.whiteboard.ctx.putImageData(imgData, 0, 0); } catch { apps.whiteboard.canvas.width = $('#win-whiteboard')[0].clientWidth; apps.whiteboard.canvas.height = $('#win-whiteboard')[0].clientHeight; } apps.whiteboard.init(); }, draw: (e) => { let offsetX, offsetY, left = $('#win-whiteboard')[0].getBoundingClientRect().left, top = $('#win-whiteboard')[0].getBoundingClientRect().top; if (e.type.match('mouse')) { offsetX = e.clientX - left, offsetY = e.clientY - top; } else if (e.type.match('touch')) { offsetX = e.touches[0].clientX - left, offsetY = e.touches[0].clientY - top; } apps.whiteboard.ctx.beginPath(); apps.whiteboard.ctx.moveTo(offsetX, offsetY); page.onmousemove = apps.whiteboard.drawing; page.ontouchmove = apps.whiteboard.drawing; page.onmouseup = apps.whiteboard.up; page.ontouchend = apps.whiteboard.up; page.ontouchcancel = apps.whiteboard.up; }, drawing: (e) => { let offsetX, offsetY, left = $('#win-whiteboard')[0].getBoundingClientRect().left, top = $('#win-whiteboard')[0].getBoundingClientRect().top; if (e.type.match('mouse')) { offsetX = e.clientX - left, offsetY = e.clientY - top; } else if (e.type.match('touch')) { offsetX = e.touches[0].clientX - left, offsetY = e.touches[0].clientY - top; } apps.whiteboard.ctx.lineTo(offsetX, offsetY); apps.whiteboard.ctx.stroke(); }, up: () => { apps.whiteboard.ctx.stroke(); page.onmousemove = null; page.ontouchmove = null; page.onmouseup = null; page.ontouchend = null; page.ontouchcancel = null; }, download: () => { const url = apps.whiteboard.canvas.toDataURL(); $('#win-whiteboard>a.download')[0].href = url; $('#win-whiteboard>a.download')[0].click(); }, saveAs: () => { // Show filename input dialog using notice system shownotice('whiteboard-saveas'); }, doSaveAs: () => { // Execute the actual save with the filename from the notice input const fileName = document.getElementById('whiteboard-filename').value.trim() || `Whiteboard_${new Date().toISOString().slice(0,10)}`; const url = apps.whiteboard.canvas.toDataURL(); const link = document.createElement('a'); link.href = url; link.download = fileName.endsWith('.png') ? fileName : fileName + '.png'; document.body.appendChild(link); link.click(); document.body.removeChild(link); closenotice(); }, delete: () => { apps.whiteboard.ctx.clearRect(0, 0, apps.whiteboard.canvas.width, apps.whiteboard.canvas.height); } }, // webapp 即将网页嵌套作为应用内容,格式参考 desktop.html 中 vscode, bilibili webapps: { apps: ['vscode', 'bilibili','copilot','minesweeper'], init: () => { for (const app of apps.webapps.apps) { apps[app].load(); } } }, vscode: { init: () => { return null; }, load: () => { // 不能改成 vscode.dev, 别问,问就算用不了 $('#win-vscode')[0].insertAdjacentHTML('afterbegin', ''); } }, bilibili: { init: () => { return null; }, load: () => { $('#win-bilibili')[0].insertAdjacentHTML('afterbegin', ''); } }, 'copilot': { init: () => { return null; }, load: () => { $('#win-copilot')[0].insertAdjacentHTML('afterbegin', ''); } }, 'minesweeper': { init: () => { return null; }, load: () => { $('#win-minesweeper')[0].insertAdjacentHTML('afterbegin', ''); } }, defender: { init: () => { return null; }, load: () => { var chart = $('#chart')[0].getContext('2d'), gradient = chart.createLinearGradient(0, 0, 0, 450); gradient.addColorStop(0, 'rgba(0, 199, 214, 0.32)'); gradient.addColorStop(0.3, 'rgba(0, 199, 214, 0.1)'); gradient.addColorStop(1, 'rgba(0, 199, 214, 0)'); var data = { labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], datasets: [{ label: '病毒攻击次数', backgroundColor: gradient, pointBackgroundColor: '#00c7d6', borderWidth: 1, borderColor: '#0e1a2f', data: [60, 45, 80, 30, 35, 55, 25, 80, 40, 50, 80, 50] }] }; var options = { responsive: true, maintainAspectRatio: true, animation: { easing: 'easeInOutQuad', duration: 520 }, scales: { yAxes: [{ ticks: { fontColor: '#5e6a81' }, gridLines: { color: 'rgba(200, 200, 200, 0.08)', lineWidth: 1 } }], xAxes: [{ ticks: { fontColor: '#5e6a81' } }] }, elements: { line: { tension: 0.4 } }, legend: { display: false }, point: { backgroundColor: '#00c7d6' }, tooltips: { titleFontFamily: 'Poppins', backgroundColor: 'rgba(0,0,0,0.4)', titleFontColor: 'white', caretSize: 5, cornerRadius: 2, xPadding: 10, yPadding: 10 } }; var chartInstance = new Chart(chart, { type: 'line', data: data, options: options }); } }, camera: { init: () => { if (!localStorage.getItem('camera')) { showwin('camera-notice'); return null; } if (localStorage.getItem('camera')) { apps.camera.streaming = false; apps.camera.video = $('#win-camera video')[0]; apps.camera.canvas = $('#win-camera canvas')[0]; apps.camera.context = apps.camera.canvas.getContext('2d'); apps.camera.context.fillStyle = '#aaa'; apps.camera.downloadLink = $('#win-camera a')[0]; // apps.camera.control = document.querySelector('#win-camera>.control') navigator.mediaDevices.getUserMedia({ video: true, audio: false }) .then(stream => { apps.camera.video.srcObject = stream; apps.camera.video.play(); }) .catch(() => { hidewin('camera'); }); apps.camera.video.addEventListener('canplay', () => { if (!apps.camera.streaming) { apps.camera.aspectRatio = apps.camera.video.videoWidth / apps.camera.video.videoHeight; apps.camera.canvas.width = apps.camera.video.videoWidth; apps.camera.canvas.height = apps.camera.video.videoHeight; apps.camera.windowResizeObserver = new ResizeObserver(apps.camera.resize); apps.camera.windowResizeObserver.observe($('.window.camera')[0], { box: 'border-box' }); apps.camera.streaming = true; } }); } else { hidewin('camera'); } }, clearCanvas: () => { apps.camera.context.fillRect(0, 0, canvas.width, canvas.height); }, takePhoto: () => { apps.camera.context.drawImage(apps.camera.video, 0, 0, apps.camera.canvas.width, apps.camera.canvas.height); apps.camera.downloadLink.href = apps.camera.canvas.toDataURL('image/png'); apps.camera.downloadLink.download = 'photo.png'; apps.camera.downloadLink.click(); }, notice: () => { if (!localStorage.getItem('camera')) { showwin('camera-notice'); } else { openapp('camera'); } }, resize: () => { let w = $('#win-camera')[0].offsetWidth, h = $('#win-camera')[0].offsetHeight; if (w / apps.camera.aspectRatio <= h) { if (!$('#win-camera').hasClass('v')) { $('#win-camera').removeClass('h'); $('#win-camera').addClass('v'); } } else if (w / apps.camera.aspectRatio >= h) { if (!$('#win-camera').hasClass('h')) { $('#win-camera').removeClass('v'); $('#win-camera').addClass('h'); } } }, remove: () => { apps.camera.video.srcObject.getTracks().forEach((t) => { t.stop(); }); apps.camera.video.srcObject = null; } }, explorer: { mounts: {}, nextDriveLetter: 'E', fsApiSupported: ('showDirectoryPicker' in window), init: () => { apps.explorer.tabs = []; apps.explorer.len = 0; apps.explorer.newtab(); // apps.explorer.reset(); apps.explorer.Process_Of_Select = ''; apps.explorer.is_use = 0;//千万不要删除它,它依托bug运行 apps.explorer.is_use2 = 0;//千万不要删除它,它依托bug运行 apps.explorer.old_name = ''; apps.explorer.clipboard = null; if (!apps.explorer.fsApiSupported) $('#explorer-mount-btn').hide(); document.addEventListener('keydown', function (event) { if (event.key === 'Delete' && $('.window.foc')[0].classList[1] == 'explorer') { apps.explorer.del(apps.explorer.Process_Of_Select); } }); }, mountDrive: async () => { if (!apps.explorer.fsApiSupported) { shownotice('fs-api-unsupported'); return; } try { const dirHandle = await window.showDirectoryPicker({ mode: 'readwrite' }); const letter = apps.explorer.nextDriveLetter + ':'; apps.explorer.nextDriveLetter = String.fromCharCode( apps.explorer.nextDriveLetter.charCodeAt(0) + 1); apps.explorer.mounts[letter] = dirHandle; apps.explorer.path.folder[letter] = { folder: {}, file: [], _mounted: true, _handle: dirHandle }; if (!apps.explorer.tabs[apps.explorer.now][2].length) apps.explorer.reset(); } catch (e) { if (e.name !== 'AbortError') shownotice('fs-mount-error'); } }, openMountedFile: async (path) => { var pathl = path.split('/'); var fileName = pathl[pathl.length - 1]; var ext = fileName.split('.').pop().toLowerCase(); let tmp = apps.explorer.path; for (let i = 0; i < pathl.length - 1; i++) { tmp = tmp['folder'][pathl[i]]; } var fileObj = tmp['file'].find(f => f.name === fileName); if (!fileObj || !fileObj._mounted || !fileObj._handle) return; try { const file = await fileObj._handle.getFile(); const codeExts = ['js', 'ts', 'jsx', 'tsx', 'css', 'scss', 'less', 'html', 'htm', 'xml', 'json', 'yaml', 'yml', 'py', 'java', 'c', 'cpp', 'h', 'cs', 'go', 'rs', 'rb', 'php', 'sh', 'bat', 'ps1', 'sql', 'svg']; const notepadExts = ['txt', 'log', 'md', 'csv', 'ini', 'cfg']; if (codeExts.includes(ext)) { const text = await file.text(); apps.codeEditor.open(text, fileName, fileObj._handle); } else if (notepadExts.includes(ext)) { const text = await file.text(); apps.notepad._mountedFileHandle = fileObj._handle; if ($('#taskbar>.notepad').length != 0) { $('#win-notepad>.text-box')[0].innerText = text; if ($('.window.notepad').hasClass('min')) minwin('notepad'); focwin('notepad'); } else { apps.notepad._pendingContent = text; openapp('notepad'); } apps.notepad.setMdMode(ext === 'md'); } else if (['png', 'jpg', 'jpeg', 'bmp', 'gif', 'webp', 'ico'].includes(ext)) { const url = URL.createObjectURL(file); apps.imgviewer.open(url, fileName); } else if (['mp4', 'webm', 'mov', 'avi', 'mkv', 'flv', 'wmv'].includes(ext)) { const url = URL.createObjectURL(file); apps.mediaplayer.open(url, fileName, 'video'); } else if (['mp3', 'wav', 'flac', 'ogg', 'aac', 'wma', 'm4a'].includes(ext)) { const url = URL.createObjectURL(file); apps.mediaplayer.open(url, fileName, 'audio'); } else if (ext === 'pdf') { const url = URL.createObjectURL(file); apps.pdfviewer.open(url, fileName); } else { shownotice('unsupported-file-type'); } } catch (e) { shownotice('file-read-error'); } }, unmountDrive: (letter) => { delete apps.explorer.mounts[letter]; delete apps.explorer.path.folder[letter]; if (!apps.explorer.tabs[apps.explorer.now][2].length) apps.explorer.reset(); else if (apps.explorer.tabs[apps.explorer.now][2].startsWith(letter)) apps.explorer.reset(); }, populateFromHandle: async (dirHandle, targetObj) => { targetObj.folder = {}; targetObj.file = []; for await (const entry of dirHandle.values()) { if (entry.kind === 'directory') { targetObj.folder[entry.name] = { folder: {}, file: [], _mounted: true, _handle: entry }; } else { const ext = entry.name.split('.').pop().toLowerCase(); let ico = 'icon/files/none.png'; if (['txt', 'log', 'md', 'csv', 'ini', 'cfg'].includes(ext)) ico = 'icon/files/txt.png'; else if (['js', 'ts', 'jsx', 'tsx', 'css', 'scss', 'less', 'html', 'htm', 'xml', 'json', 'yaml', 'yml', 'py', 'java', 'c', 'cpp', 'h', 'cs', 'go', 'rs', 'rb', 'php', 'sh', 'bat', 'ps1', 'sql'].includes(ext)) ico = 'icon/files/txt.png'; else if (['png', 'jpg', 'bmp', 'jpeg', 'gif', 'webp', 'svg', 'ico', 'tiff'].includes(ext)) ico = 'icon/files/picture.png'; else if (['doc', 'docx', 'rtf', 'odt'].includes(ext)) ico = 'icon/files/word.png'; else if (['xls', 'xlsx', 'ods'].includes(ext)) ico = 'icon/files/excel.png'; else if (['ppt', 'pptx', 'odp'].includes(ext)) ico = 'icon/files/ppt.png'; else if (['mp3', 'wav', 'flac', 'ogg', 'aac', 'wma', 'm4a'].includes(ext)) ico = 'icon/files/music.png'; else if (['mp4', 'avi', 'mkv', 'mov', 'wmv', 'webm', 'flv'].includes(ext)) ico = 'icon/files/vidio.png'; else if (['exe', 'msi'].includes(ext)) ico = 'icon/files/exefile.png'; else if (['zip', 'rar', '7z', 'tar', 'gz'].includes(ext)) ico = 'icon/files/none.png'; else if ('pdf' === ext) ico = 'icon/files/pdf.svg'; targetObj.file.push({ name: entry.name, ico: ico, command: '', _handle: entry, _mounted: true }); } } }, tabs: [], now: null, len: 0, newtab: (path = '') => { m_tab.newtab('explorer', ''); apps.explorer.tabs[apps.explorer.tabs.length - 1][2] = path; apps.explorer.initHistory(apps.explorer.tabs[apps.explorer.tabs.length - 1][0]); apps.explorer.checkHistory(apps.explorer.tabs[apps.explorer.tabs.length - 1][0]); m_tab.tab('explorer', apps.explorer.tabs.length - 1); // } }, settab: (t, i) => { return `

${t[1]}

`; }, tab: (c, load = true) => { if (load) { console.log(c); if (!apps.explorer.tabs[c][2].length) apps.explorer.reset(); else apps.explorer.goto(apps.explorer.tabs[c][2]); } apps.explorer.checkHistory(apps.explorer.tabs[c][0]); }, reset: (clear = true) => { let resetHtml = `

设备和驱动器

本地磁盘 (C:)

32.6 GB 可用, 共 143 GB

本地磁盘 (D:)

185.3 GB 可用, 共 216 GB

`; for (let letter in apps.explorer.mounts) { const handle = apps.explorer.mounts[letter]; resetHtml += `

${handle.name} (${letter})

本地文件夹

`; } resetHtml += `
`; $('#win-explorer>.page>.main>.content>.view')[0].innerHTML = resetHtml; $('#win-explorer>.path>.tit')[0].innerHTML = '
此电脑
>
'; // if(rename){ m_tab.rename('explorer', ' 此电脑'); apps.explorer.tabs[apps.explorer.now][2] = ''; if (clear) { apps.explorer.delHistory(apps.explorer.tabs[apps.explorer.now][0]); apps.explorer.pushHistory(apps.explorer.tabs[apps.explorer.now][0], '此电脑'); } // } }, select: (path, id) => { var elements = document.querySelectorAll('#win-explorer > .main > .content > .view > .select'); for (var i = 0; i < elements.length; i++) { elements[i].classList.remove('select'); } apps.explorer.Process_Of_Select = path; var element = document.getElementById(id); element.classList.add('select'); apps.explorer.is_use += 1; }, copy_or_cut: (path, operate) => { //operate只能为copy或cut var pathl = path.split('/'); var name = pathl[pathl.length - 1]; pathl.pop(); let tmp = apps.explorer.path; pathl.forEach(name => { tmp = tmp['folder'][name]; }); if (Object.keys(tmp['folder']).includes(name)) { apps.explorer.clipboard = ['folder', [name], tmp['folder'][name]]; if (operate == 'cut') { delete tmp['folder'][name]; } } else { for (var i = 0; i < tmp['file'].length; i++) { if (tmp['file'][i]['name'] == name) { apps.explorer.clipboard = ['file', tmp['file'][i]]; if (operate == 'cut') { tmp['file'].splice(i, 1); // Use splice instead of delete } break; } } } apps.explorer.goto($('#win-explorer>.path>.tit')[0].dataset.path, false); }, paste: (path) => { if (!apps.explorer.clipboard) { return; } var pathl = path.split('/'); let tmp = apps.explorer.path; pathl.forEach(name => { if (!tmp['folder'][name]) { return; } tmp = tmp['folder'][name]; }); var clipboard = apps.explorer.clipboard; if (clipboard[0] == 'file') { // Check for duplicate file name if (tmp['file'].some(file => file.name === clipboard[1].name)) { shownotice('duplication file name'); return; } tmp['file'].push({...clipboard[1]}); // Create a copy of the file object } else { // Check for duplicate folder name if (tmp['folder'][clipboard[1][0]]) { shownotice('duplication file name'); return; } tmp['folder'][clipboard[1][0]] = JSON.parse(JSON.stringify(clipboard[2])); // Deep copy the folder } apps.explorer.goto(path); }, del_select: () => { if (apps.explorer.is_use >= 1 && apps.explorer.is_use2 != apps.explorer.is_use) { apps.explorer.is_use2 = apps.explorer.is_use; return; } var elements = document.querySelectorAll('#win-explorer>.page>.main>.content>.view>.change'); console.log(elements); for (var i = 0; i < elements.length; i++) { var name_1, icon_; elements[i].classList.remove('change'); let aTag = elements[i]; var on = apps.explorer.old_name; let inputTag = aTag.querySelector('#new_name'); var pathl = $('#win-explorer>.path>.tit')[0].dataset.path.split('/'); let tmp = apps.explorer.path; pathl.forEach(name => { tmp = tmp['folder'][name]; }); if (inputTag.value == '' || apps.explorer.traverseDirectory(tmp, inputTag.value) || on == inputTag.value) { if (apps.explorer.traverseDirectory(tmp, inputTag.value) && on != inputTag.value) { shownotice('duplication file name'); } var element = document.getElementById('new_name'); element.parentNode.removeChild(element); aTag.innerHTML += on; continue; } name_1 = inputTag.value.split('.'); if (name_1[0].indexOf('/') > -1) alert('恭喜你发现了这个bug,但是太懒了不想修qwq'); console.log(name_1); if (name_1[1] == 'txt') { icon_ = 'icon/files/txt.png'; } else if (name_1[1] == 'png' || name_1[1] == 'jpg' | name_1[1] == 'bmp') { icon_ = 'icon/files/picture.png'; } else { icon_ = 'icon/files/none.png'; } //这边可以适配更多的文件类型 aTag.innerHTML += inputTag.value; var isMountedRename = !!apps.explorer.mounts[pathl[0]]; for (var j = 0; j < tmp['file'].length; j++) { if (tmp['file'][j]['name'] == on) { tmp['file'][j]['name'] = inputTag.value; tmp['file'][j]['ico'] = icon_; if (isMountedRename && tmp._handle) { tmp._handle.getFileHandle(on).then(h => h.move ? h.move(inputTag.value) : null ).catch(() => {}); } } } const keys = Object.keys(tmp['folder']); for (var i = 0; i < keys.length; i++) { if (keys[i] == on) { keys[i] = inputTag.value; tmp['folder'][inputTag.value] = tmp['folder'][on]; delete tmp['folder'][on]; } } element = document.getElementById('new_name'); element.parentNode.removeChild(element); apps.explorer.goto($('#win-explorer>.path>.tit')[0].dataset.path, false); } apps.explorer.is_use2 = apps.explorer.is_use; elements = document.querySelectorAll('#win-explorer>.page>.main>.content>.view>.select'); for (var i = 0; i < elements.length; i++) { elements[i].classList.remove('select'); } apps.explorer.Process_Of_Select = ''; }, goto: (path, clear = true) => { if (path == '此电脑') { apps.explorer.reset(clear); return null; } var pathl = path.split('/'); if (apps.explorer.mounts[pathl[0]]) { apps.explorer._gotoAsync(path, clear, !clear); } else { apps.explorer._gotoSync(path, clear); } }, _gotoAsync: async (path, clear, forceRefresh = false) => { $('#win-explorer>.page>.main>.content>.view')[0].innerHTML = '

加载中...

'; var pathl = path.split('/'); let tmp = apps.explorer.path; try { for (let i = 0; i < pathl.length; i++) { tmp = tmp['folder'][pathl[i]]; const needLoad = Object.keys(tmp.folder).length === 0 && tmp.file.length === 0; if (tmp._mounted && tmp._handle && (needLoad || (forceRefresh && i === pathl.length - 1))) { await apps.explorer.populateFromHandle(tmp._handle, tmp); } } apps.explorer._gotoSync(path, clear); } catch (e) { $('#win-explorer>.page>.main>.content>.view')[0].innerHTML = '

无法读取此文件夹。

'; } }, _gotoSync: (path, clear = true) => { apps.explorer.Process_Of_Select = ''; $('#win-explorer>.page>.main>.content>.view')[0].innerHTML = ''; var pathl = path.split('/'); var pathqwq = ''; var index_ = 0; let tmp = apps.explorer.path; $('#win-explorer>.path>.tit')[0].dataset.path = path; $('#win-explorer>.path>.tit>.path')[0].innerHTML = '
此电脑
>
'; $('#win-explorer>.path>.tit>.icon')[0].style.marginTop = '0px'; if (pathl[pathl.length - 1] == 'C:') { $('#win-explorer>.path>.tit>.icon')[0].style.backgroundImage = 'url("apps/icons/explorer/diskwin.svg")'; $('#win-explorer>.path>.tit>.icon')[0].style.marginTop = '2.5px'; m_tab.rename('explorer', '' + pathl[pathl.length - 1]); } else if (pathl[pathl.length - 1] == 'D:') { $('#win-explorer>.path>.tit>.icon')[0].style.backgroundImage = 'url("apps/icons/explorer/disk.svg")'; m_tab.rename('explorer', '' + pathl[pathl.length - 1]); } else if (apps.explorer.mounts[pathl[pathl.length - 1]]) { $('#win-explorer>.path>.tit>.icon')[0].style.backgroundImage = 'url("apps/icons/explorer/disk.svg")'; m_tab.rename('explorer', '' + pathl[pathl.length - 1]); } else { $('#win-explorer>.path>.tit>.icon')[0].style.backgroundImage = 'url("apps/icons/explorer/folder.svg")'; m_tab.rename('explorer', '' + pathl[pathl.length - 1]); } // if(rename){ apps.explorer.tabs[apps.explorer.now][2] = path; // } pathl.forEach(name => { pathqwq += name; $('#win-explorer>.path>.tit>.path')[0].innerHTML += `
${name}
>
`; tmp = tmp['folder'][name]; pathqwq += '/'; }); var path_ = path; if (Object.keys(tmp['folder']) == 0 && tmp['file'].length == 0) { $('#win-explorer>.page>.main>.content>.view')[0].innerHTML = '

此文件夹为空。

'; } else { let ht = ''; for (let folder in tmp['folder']) { ht += ` ${folder}`; index_ += 1; } if (tmp['file']) { tmp['file'].forEach(file => { let cmd = file['command']; if (file._mounted && file._handle) { cmd = `apps.explorer.openMountedFile('${path_}/${file['name']}')`; } ht += ` ${file['name']}`; index_ += 1; }); } $('#win-explorer>.page>.main>.content>.view')[0].innerHTML = ht; } if (pathl.length == 1) { $('#win-explorer>.path>.goback').attr('onclick', 'apps.explorer.reset()'); } else { $('#win-explorer>.path>.goback').attr('onclick', `apps.explorer.goto('${path.substring(0, path.length - pathl[pathl.length - 1].length - 1)}')`); } if (clear) { apps.explorer.delHistory(apps.explorer.tabs[apps.explorer.now][0]); apps.explorer.pushHistory(apps.explorer.tabs[apps.explorer.now][0], $('#win-explorer>.path>.tit')[0].dataset.path); } apps.explorer.checkHistory(apps.explorer.tabs[apps.explorer.now][0]); }, add: (path, name_, type = 'file', command = '', icon = '') => { //type为文件类型,只有文件夹files和文件file var pathl = path.split('/'); var icon_ = ''; var isMounted = !!apps.explorer.mounts[pathl[0]]; let tmp = apps.explorer.path; pathl.forEach(name => { tmp = tmp['folder'][name]; }); if (tmp == null) { tmp = { folder: {}, file: [] }; } if (apps.explorer.traverseDirectory(tmp, name_)) { shownotice('duplication file name'); return; } // 检查是否是文件夹 if (type === 'folder') { if (icon !== '') { icon_ = icon; } else { icon_ = 'icon/folder.png'; } try { if (isMounted && tmp._handle) { tmp.folder[name_] = { folder: {}, file: [], _mounted: true }; tmp._handle.getDirectoryHandle(name_, { create: true }).then(h => { tmp.folder[name_]._handle = h; }).catch(() => shownotice('file-write-error')); } else { tmp.folder[name_] = { folder: {}, file: [] }; } } catch { tmp = { folder: {}, file: [] }; tmp.folder[name_] = { folder: {}, file: [] }; } return; } // 处理文件 const name_1 = name_.split('.'); if (name_1.length < 2) { icon_ = 'icon/files/none.png'; } else if (name_1[1] === 'txt') { icon_ = 'icon/files/txt.png'; if (command === '') { command = 'openapp(\'notepad\')'; } } else if (['png', 'jpg', 'bmp'].includes(name_1[1])) { icon_ = 'icon/files/picture.png'; } else { icon_ = 'icon/files/none.png'; } if (icon !== '') { icon_ = icon; } try { if (isMounted && tmp._handle) { var fileEntry = { name: name_, ico: icon_, command: '', _mounted: true }; tmp.file.push(fileEntry); tmp._handle.getFileHandle(name_, { create: true }).then(h => { fileEntry._handle = h; }).catch(() => shownotice('file-write-error')); } else { tmp.file.push({ name: name_, ico: icon_, command: command }); } } catch { tmp = { folder: {}, file: [] }; tmp.file = [{ name: name_, ico: icon_, command: command }]; } apps.explorer.goto(path); apps.explorer.rename(path + '/' + name_); }, rename: (path) => { var pathl = path.split('/'); var name = pathl[pathl.length - 1]; apps.explorer.old_name = name; pathl.pop(); let tmp = apps.explorer.path; pathl.forEach(name => { tmp = tmp['folder'][name]; }); let element = document.querySelector('#' + apps.explorer.get_file_id(name)); let img = element.querySelector('img').outerHTML; element.innerHTML = img; let input = document.createElement('input'); // input.style.cssText = ''; input.id = 'new_name'; input.className = 'input'; input.value = apps.explorer.old_name; element.appendChild(input); setTimeout(() => { $('#new_name').focus(); $('#new_name').select(); }, 200); element.classList.add('change'); var input_ = document.getElementById('new_name'); input_.addEventListener('keyup', function (event) { if (event.key === 'Enter') { event.preventDefault(); apps.explorer.del_select(); } }); }, get_file_id: (name) => { //只能找到已经打开了的文件夹的元素id var elements = document.getElementsByClassName('item'); for (var i = 0; i < elements.length; i++) { var element = elements[i]; if (element.innerText == name) { return element.id; } } }, del: (path) => { var pathl = path.split('/'); var name = pathl[pathl.length - 1]; var isMounted = !!apps.explorer.mounts[pathl[0]]; pathl.pop(); let tmp = apps.explorer.path; pathl.forEach(name => { tmp = tmp['folder'][name]; }); let tmp_file = tmp['file']; for (var i = 0; i < tmp_file.length; i++) { if (tmp_file[i]['name'] == name) { tmp_file.splice(i, 1); } } let tmp_files = tmp['folder']; delete tmp_files[name]; if (isMounted && tmp._handle) { tmp._handle.removeEntry(name, { recursive: true }).catch(() => shownotice('file-write-error')); } apps.explorer.goto(pathl.join('/')); apps.explorer.history.forEach(item => { while (item.includes(path)) { item.splice(item.findIndex(elt => { return elt == path; }), 1); } }); }, traverseDirectory(dir, name) { if (dir['file'] == null && dir['folder'] == null) return false; for (var i = 0; i < dir['file'].length; i++) { if (dir['file'][i]['name'] == name) { return true; } } const keys = Object.keys(dir['folder']); for (var i = 0; i < keys.length; i++) { if (keys[i] == name) { return true; } } return false; }, // 禁止奇奇怪怪的缩进!尽量压行,不要毫无意义地全部格式化和展开! // 给我看蒙了这东西,写的是啥? 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:''},]}}}, history: [], historypt: [], initHistory: (tab) => { apps.explorer.history[tab] = []; apps.explorer.historypt[tab] = -1; }, pushHistory: (tab, u) => { apps.explorer.history[tab].push(u); apps.explorer.historypt[tab]++; }, topHistory: (tab) => { return apps.explorer.history[tab][apps.explorer.historypt[tab]]; }, popHistory: (tab) => { apps.explorer.historypt[tab]--; return apps.explorer.history[tab][apps.explorer.historypt[tab]]; }, incHistory: (tab) => { apps.explorer.historypt[tab]++; return apps.explorer.history[tab][apps.explorer.historypt[tab]]; }, delHistory: (tab) => { apps.explorer.history[tab].splice(apps.explorer.historypt[tab] + 1, apps.explorer.history[tab].length - 1 - apps.explorer.historypt[tab]); }, historyIsEmpty: (tab) => { return apps.explorer.historypt[tab] <= 0; }, historyIsFull: (tab) => { return apps.explorer.historypt[tab] >= apps.explorer.history[tab].length - 1; }, checkHistory: (tab) => { if (apps.explorer.historyIsEmpty(tab)) { $('#win-explorer>.path>.back').addClass('disabled'); } else if (!apps.explorer.historyIsEmpty(tab)) { $('#win-explorer>.path>.back').removeClass('disabled'); } if (apps.explorer.historyIsFull(tab)) { $('#win-explorer>.path>.front').addClass('disabled'); } else if (!apps.explorer.historyIsFull(tab)) { $('#win-explorer>.path>.front').removeClass('disabled'); } }, back: (tab) => { apps.explorer.goto(apps.explorer.popHistory(tab), false); apps.explorer.checkHistory(tab); }, front: (tab) => { apps.explorer.goto(apps.explorer.incHistory(tab), false); apps.explorer.checkHistory(tab); } }, calc: { init: () => { document.getElementById('calc-input').innerHTML = '0'; } }, about: { init: () => { $('#win-about>.about').addClass('show'); $('#win-about>.update').removeClass('show'); if (!($('#contri').length > 1)) apps.about.get(); if (!($('#StarShow').html().includes('刷新'))) apps.about.get_star(); }, run_loading: (expr) => { $(expr).html(` `); }, get: () => { apps.about.run_loading('#contri'); // 实时获取项目贡献者 $.get('https://api.github.com/repos/tjy-gitnub/win12/contributors').then(cs => { setTimeout(() => { $('#contri').html(''); cs.forEach(c => { $('#contri').append(`

${c['login']}

贡献:${c['contributions']}

`); }); $('#contri').append(' 刷新'); }, 200); }); }, get_star: () => { apps.about.run_loading('#StarShow'); const repoFullName = 'tjy-gitnub/win12'; fetch(`https://api.github.com/repos/${repoFullName}`) .then(response => response.json()) .then(data => { setTimeout(() => { const starCount = data.stargazers_count; $('#StarShow').html('

  Star 数量:' + starCount + ' (实时数据)

刷新
'); }, 200); }) .catch(error => { console.error('获取star数量时出错:', error); $('#StarShow').html('

  哎呀!出错了!

重试
'); }); } }, notepad: { _pendingContent: null, _mountedFileHandle: null, _keyBound: false, _isMd: false, _previewing: false, init: () => { apps.notepad._resetPreview(); $('#win-notepad>.text-box').addClass('down'); setTimeout(() => { if (apps.notepad._pendingContent !== null) { $('#win-notepad>.text-box')[0].innerText = apps.notepad._pendingContent; apps.notepad._pendingContent = null; } else { $('#win-notepad>.text-box').val(''); apps.notepad._mountedFileHandle = null; } $('#win-notepad>.text-box').removeClass('down'); }, 200); if (!apps.notepad._keyBound) { apps.notepad._keyBound = true; document.addEventListener('keydown', function (e) { if (e.ctrlKey && e.key === 's' && $('.window.foc')[0]?.classList.contains('notepad')) { e.preventDefault(); apps.notepad.saveMounted(); } }); } }, _resetPreview: () => { apps.notepad._isMd = false; apps.notepad._previewing = false; $('#notepad-md-toggle').hide().removeClass('active').html(' 预览'); $('#notepad-md-preview').hide(); $('#win-notepad>.text-box').show(); }, setMdMode: (enabled) => { apps.notepad._resetPreview(); apps.notepad._isMd = enabled; if (enabled) { $('#notepad-md-toggle').show(); } }, togglePreview: () => { apps.notepad._previewing = !apps.notepad._previewing; if (apps.notepad._previewing) { var text = $('#win-notepad>.text-box')[0].innerText; $('#notepad-md-preview').html(marked.parse(text)).show(); $('#win-notepad>.text-box').hide(); $('#notepad-md-toggle').addClass('active').html(' 编辑'); } else { $('#notepad-md-preview').hide(); $('#win-notepad>.text-box').show(); $('#notepad-md-toggle').removeClass('active').html(' 预览'); } }, saveMounted: async () => { if (!apps.notepad._mountedFileHandle) return; try { const writable = await apps.notepad._mountedFileHandle.createWritable(); await writable.write($('#win-notepad>.text-box')[0].innerText); await writable.close(); } catch (e) { shownotice('file-write-error'); } } }, imgviewer: { init: () => {}, open: (url, name) => { openapp('imgviewer'); $('#win-imgviewer>.preview-img').attr('src', url); $('.window.imgviewer>.titbar>p').text(name || '图片查看器'); } }, mediaplayer: { _blobUrl: null, init: () => {}, open: (url, name, type) => { openapp('mediaplayer'); apps.mediaplayer._blobUrl = url; $('.window.mediaplayer>.titbar>p').text(name || '媒体播放器'); if (type === 'video') { $('#mediaplayer-video').attr('src', url).show()[0].load(); $('#mediaplayer-audio').hide()[0].pause(); $('.window.mediaplayer>.titbar>img').attr('src', 'icon/files/vidio.png'); } else { $('#mediaplayer-audio').attr('src', url).show()[0].load(); $('#mediaplayer-video').hide()[0].pause(); $('.window.mediaplayer>.titbar>img').attr('src', 'icon/files/music.png'); } }, close: () => { $('#mediaplayer-video')[0].pause(); $('#mediaplayer-audio')[0].pause(); if (apps.mediaplayer._blobUrl) { URL.revokeObjectURL(apps.mediaplayer._blobUrl); apps.mediaplayer._blobUrl = null; } hidewin('mediaplayer'); } }, pdfviewer: { _blobUrl: null, init: () => {}, open: (url, name) => { openapp('pdfviewer'); apps.pdfviewer._blobUrl = url; $('#pdfviewer-frame').attr('src', url); $('.window.pdfviewer>.titbar>p').text(name || 'PDF 查看器'); }, close: () => { $('#pdfviewer-frame').attr('src', ''); if (apps.pdfviewer._blobUrl) { URL.revokeObjectURL(apps.pdfviewer._blobUrl); apps.pdfviewer._blobUrl = null; } hidewin('pdfviewer'); } }, codeEditor: { editor: null, _fileHandle: null, _modeMap: { js: 'javascript', jsx: 'jsx', ts: 'typescript', tsx: 'tsx', css: 'css', scss: 'scss', less: 'less', html: 'html', htm: 'html', xml: 'xml', svg: 'svg', json: 'json', yaml: 'yaml', yml: 'yaml', py: 'python', java: 'java', c: 'c_cpp', cpp: 'c_cpp', h: 'c_cpp', cs: 'csharp', go: 'golang', rs: 'rust', rb: 'ruby', php: 'php', sh: 'sh', bat: 'batchfile', ps1: 'powershell', sql: 'sql', md: 'markdown' }, init: () => { return null; }, load: () => { ace.require('ace/ext/language_tools'); apps.codeEditor.editor = ace.edit('code-ace-editor'); apps.codeEditor.editor.setTheme('ace/theme/vibrant_ink'); apps.codeEditor.editor.setOptions({ enableBasicAutocompletion: true, enableSnippets: true, showPrintMargin: false, enableLiveAutocompletion: true, fontSize: 15 }); apps.codeEditor.editor.commands.addCommand({ name: 'save', bindKey: { win: 'Ctrl-S', mac: 'Command-S' }, exec: () => apps.codeEditor.save() }); }, open: (text, fileName, fileHandle) => { apps.codeEditor._fileHandle = fileHandle || null; openapp('code-editor'); var ext = fileName.split('.').pop().toLowerCase(); var mode = apps.codeEditor._modeMap[ext] || 'text'; apps.codeEditor.editor.session.setMode('ace/mode/' + mode); apps.codeEditor.editor.setValue(text, -1); $('.window.code-editor>.titbar>p').text(fileName); }, save: async () => { if (!apps.codeEditor._fileHandle) return; try { const writable = await apps.codeEditor._fileHandle.createWritable(); await writable.write(apps.codeEditor.editor.getValue()); await writable.close(); } catch (e) { shownotice('file-write-error'); } } }, pythonEditor: { editor: null, init: () => { return null; }, run: () => { let result; let output = document.getElementById('output'); try { if (apps.python.pyodide) { let code = apps.pythonEditor.editor.getValue(); apps.python.pyodide.runPython('sys.stdout = io.StringIO()'); apps.python.pyodide.runPython(code); result = apps.python.pyodide.runPython('sys.stdout.getvalue()'); } } catch (e) { result = e.message; } output.innerHTML = result; }, load: () => { if (!apps.python.loaded) { apps.python.loaded = true; apps.python.load(); } ace.require('ace/ext/language_tools'); apps.pythonEditor.editor = ace.edit('win-python-ace-editor'); apps.pythonEditor.editor.session.setMode('ace/mode/python'); apps.pythonEditor.editor.setTheme('ace/theme/vibrant_ink'); apps.pythonEditor.editor.setOptions({ enableBasicAutocompletion: true, enableSnippets: true, showPrintMargin: false, enableLiveAutocompletion: true }); } }, notepadFonts: { sizes: { '初号': '56', '小初': '48', '一号': '34.7', '小一': '32', '二号': '29.3', '小二': '24', '三号': '21.3', '小三': '20', '四号': '18.7', '小四': '16', '五号': '14', '小五': '12' }, styles: { '正常': '', '粗体': 'font-weight: bold;', '斜体': 'font-style: italic;', '粗偏斜体': 'font-weight: bold; font-style: italic;' }, load: () => { apps.notepadFonts.fontvalues = $('#win-notepad-font>.row>#win-notepad-font-type>.value-box>.option'); apps.notepadFonts.sizevalues = $('#win-notepad-font>.row>#win-notepad-font-size>.value-box>.option'); apps.notepadFonts.stylevalues = $('#win-notepad-font>.row>#win-notepad-font-style>.value-box>.option'); apps.notepadFonts.typeinput = $('#win-notepad-font>.row>#win-notepad-font-type>input[type=text]')[0]; apps.notepadFonts.sizeinput = $('#win-notepad-font>.row>#win-notepad-font-size>input[type=text]')[0]; apps.notepadFonts.styleinput = $('#win-notepad-font>.row>#win-notepad-font-style>input[type=text]')[0]; apps.notepadFonts.previewBox = $('#win-notepad-font>.preview>.preview-box'); apps.notepadFonts.textBox = $('.notepad>#win-notepad>.text-box'); for (const elt of apps.notepadFonts.fontvalues) { elt.onclick = function () { apps.notepadFonts.typeinput.value = this.innerText; apps.notepadFonts.preview(); }; elt.setAttribute('style', `font-family: ${elt.innerText};`); } for (const elt of apps.notepadFonts.sizevalues) { elt.onclick = function () { apps.notepadFonts.sizeinput.value = this.innerText; apps.notepadFonts.preview(); }; } for (const elt of apps.notepadFonts.stylevalues) { elt.onclick = function () { apps.notepadFonts.styleinput.value = this.innerText; apps.notepadFonts.preview(); }; elt.setAttribute('style', apps.notepadFonts.styles[elt.innerText]); } apps.notepadFonts.sizeinput.addEventListener('keyup', apps.notepadFonts.preview); apps.notepadFonts.typeinput.addEventListener('keyup', apps.notepadFonts.preview); }, preview: () => { var fontsize = 0; var fontstyle; if (!apps.notepadFonts.sizeinput.value.match(/^[0-9]*$/)) { if (apps.notepadFonts.sizes[apps.notepadFonts.sizeinput.value] != undefined) { fontsize = apps.notepadFonts.sizes[apps.notepadFonts.sizeinput.value]; } } else if (apps.notepadFonts.sizeinput.value.match(/^[0-9]*$/)) { fontsize = apps.notepadFonts.sizeinput.value; } if (apps.notepadFonts.styles[apps.notepadFonts.styleinput.value] != undefined) { fontstyle = apps.notepadFonts.styles[apps.notepadFonts.styleinput.value]; } else if (apps.notepadFonts.styles[apps.notepadFonts.styleinput.value] == undefined) { fontstyle = apps.notepadFonts.styles['正常']; } apps.notepadFonts.previewBox.attr('style', `font-family: ${apps.notepadFonts.typeinput.value} !important; font-size: ${fontsize}px !important;${fontstyle}`); }, commitFont: () => { const styles = window.getComputedStyle(apps.notepadFonts.previewBox[0], null); 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;`); hidewin('notepad-fonts', 'configs'); }, reset: () => { const styles = window.getComputedStyle(apps.notepadFonts.textBox[0], null); apps.notepadFonts.typeinput.value = styles.fontFamily.split(', ')[0]; var fontsize = styles.fontSize.split('px')[0]; var fontweight = styles.fontWeight; var fontstyle = styles.fontStyle; if (fontweight == '700' && fontstyle == 'normal') { apps.notepadFonts.styleinput.value = '粗体'; } else if (fontweight == '400' && fontstyle == 'italic') { apps.notepadFonts.styleinput = '斜体'; } else if (fontweight == '700' && fontstyle == 'italic') { apps.notepadFonts.styleinput.value = '粗偏斜体'; } else if (fontweight == '400' && fontstyle == 'normal') { apps.notepadFonts.styleinput.value = '正常'; } for (const [key, value] of Object.entries(apps.notepadFonts.sizes)) { if (value == fontsize) { fontsize = key; break; } } apps.notepadFonts.sizeinput.value = fontsize; }, }, python: { codeCache: '', prompt: '>>> ', indent: false, load: () => { (async function () { apps.python.pyodide = await loadPyodide(); apps.python.pyodide.runPython(` import sys import io `); })(); }, init: () => { $('#win-python').html(`
Python 3.10.2  [MSC v.1912 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
        

        
>>> 
`); }, run: () => { if (apps.python.pyodide) { const input = $('#win-python>pre>input'); const _code = input.val(); if (_code == 'exit()') { hidewin('python'); input.val(''); } else { const elt = $('#win-python>pre.text-cmd')[0]; const lastChar = _code[_code.length - 1]; var newD = document.createElement('div'); newD.innerText = `${apps.python.prompt}${_code}`; elt.appendChild(newD); if (lastChar != ':' && lastChar != '\\' && ((!apps.python.indent || _code == ''))) { apps.python.prompt = '>>> '; apps.python.codeCache += _code; apps.python.indent = false; const code = apps.python.codeCache; apps.python.codeCache = ''; apps.python.pyodide.runPython('sys.stdout = io.StringIO()'); try { const result = String(apps.python.pyodide.runPython(code)); if (apps.python.pyodide.runPython('sys.stdout.getvalue()')) { var newD = document.createElement('div'); newD.innerText = `${apps.python.pyodide.runPython('sys.stdout.getvalue()')}`; elt.appendChild(newD); } if (result && result != 'undefined') { var newD = document.createElement('div'); if (result == 'false') { newD.innerText = 'False'; } else if (result == 'true') { newD.innerText = 'True'; } else { newD.innerText = result; } elt.appendChild(newD); } } catch (err) { var newD = document.createElement('div'); newD.innerText = `${err.message}`; elt.appendChild(newD); } } else { apps.python.prompt = '... '; if (lastChar == ':') { apps.python.indent = true; } apps.python.codeCache += _code + '\n'; } input.val(''); // 自动聚焦 input.blur(); input.focus(); $('#win-python .prompt')[0].innerText = apps.python.prompt; } } } }, terminal: { historyList: [], historypt: 0, historyTemp: '', isViewingHistory: false, init: () => { $('#win-terminal').html(`
Micrȯsoft Windows [版本 12.0.39035.7324]
(c) Microṡoft Corporation。保留所有杈利。
        

        
C:\\Windows\\System32> 
`); $('#win-terminal>pre>input').focus(); }, handleKeyUp: (event) => { const input = $('#win-terminal input'); if (event.keyCode === 13) { // Enter apps.terminal.run(); } else if (event.keyCode === 38) { // Up arrow apps.terminal.history('up'); } else if (event.keyCode === 40) { // Down arrow apps.terminal.history('down'); } }, run: () => { const elt = $('#win-terminal>pre.text-cmd')[0]; const input = $('#win-terminal input'); const command = input.val().trim(); if (command !== '') { // Add command to history apps.terminal.historyList.push(command); apps.terminal.historypt = apps.terminal.historyList.length; var newD = document.createElement('div'); newD.innerText = `C:\\Windows\\System32> ${command}`; elt.appendChild(newD); if (command === 'exit') { hidewin('terminal'); } else if (!runcmd(command, true)) { var newD = document.createElement('div'); newD.innerText = `"${command}" 不是内部或外部命令,也不是可运行程序或批处理文件`; elt.appendChild(newD); } } input.val(''); input.blur(); input.focus(); }, history: (direction) => { const input = $('#win-terminal input'); if (!apps.terminal.isViewingHistory) { apps.terminal.isViewingHistory = true; apps.terminal.historyTemp = input.val(); } if (direction === 'up' && apps.terminal.historypt > 0) { apps.terminal.historypt--; input.val(apps.terminal.historyList[apps.terminal.historypt]); } else if (direction === 'down') { apps.terminal.historypt++; if (apps.terminal.historypt >= apps.terminal.historyList.length) { apps.terminal.historypt = apps.terminal.historyList.length; apps.terminal.isViewingHistory = false; input.val(apps.terminal.historyTemp); } else { input.val(apps.terminal.historyList[apps.terminal.historypt]); } } } }, search: { rand: [{ name: '农夫山泉瓶盖简介.txt', bi: 'text', ty: '文本文档' }, { name: '瓶盖构造图.png', bi: 'image', ty: 'PNG 文件' }, { name: '瓶盖结构说明.docx', bi: 'richtext', ty: 'Microsoft Word 文档' }, { name: '可口可乐瓶盖.jpg', bi: 'image', ty: 'JPG 文件' }, { name: '可口可乐瓶盖历史.pptx', bi: 'slides', ty: 'Microsoft Powerpoint 演示文稿' }, { name: '瓶盖质量统计分析.xlsx', bi: 'ruled', ty: 'Microsoft Excel 工作表' }, { name: '农夫山泉瓶盖.svg', bi: 'image', ty: 'SVG 文件' }, { name: '瓶盖介绍.doc', bi: 'richtext', ty: 'Microsoft Word 文档' }], search: le => { if (le > 0) { $('#search-win>.ans>.list>list').html( ` ${apps.search.rand[le % 8].name } ${apps.search.rand[(le + 3) % 8].name}`); apps.search.showdetail(le % 8); } else { $('#search-win>.ans>.list>list').html( `

推荐

设置

关于Win12网页版

`); $('#search-win>.ans>.view').removeClass('show'); } }, showdetail: i => { $('#search-win>.ans>.view').addClass('show'); let inf = apps.search.rand[i]; $('#search-win>.ans>.view>.fname>.bi').attr('class', 'bi bi-file-earmark-' + inf.bi); $('#search-win>.ans>.view>.fname>.name').text(inf.name); $('#search-win>.ans>.view>.fname>.type').text(inf.ty); } }, edge: { init: () => { $('#win-edge>iframe').remove(); apps.edge.tabs = []; apps.edge.len = 0; apps.edge.newtab(); }, tabs: [], now: null, len: 0, history: [], historypt: [], reloadElt: '', max: false, fuls: false, b1: false, b2: false, b3: false, newtab: () => { m_tab.newtab('edge', '新建标签页'); apps.edge.initHistory(apps.edge.tabs[apps.edge.tabs.length - 1][0]); apps.edge.pushHistory(apps.edge.tabs[apps.edge.tabs.length - 1][0], 'mainpage.html'); $('#win-edge').append(`