diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..05b5e1d96992069b06b08de19c6679488b2e5151
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,12 @@
+.DS_Store
+*/.DS_Store
+*.pyc
+*.vscode
+/content
+/web-ui/node_modules
+/web-ui/package-lock.json
+public
+layouts/partials/docs/test-list.html
+layouts/partials/docs/test-list2.html
+node_modules
+app/**
\ No newline at end of file
diff --git a/.hugo_build.lock b/.hugo_build.lock
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..1f09a4c9cd311f76a4806090cb8d726c42eb5311
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,157 @@
+FROM swr.cn-north-4.myhuaweicloud.com/opensourceway/openeuler/nginx-hugo:latest as NginxBuilder
+
+FROM swr.cn-north-4.myhuaweicloud.com/opensourceway/openeuler/base:latest
+
+ENV NGINX_CONFIG_FILE /etc/nginx/nginx.conf
+ENV NGINX_CONFIG_PATH /etc/nginx/
+ENV NGINX_PID /var/run/nginx.pid
+ENV NGINX_USER nginx
+ENV NGINX_GROUP nginx
+ENV NGINX_BIN /usr/share/nginx/sbin/
+ENV NGINX_HOME /usr/share/nginx/
+ENV NGINX_EXE_FILE /usr/share/nginx/sbin/nginx
+ENV DST_PATH /etc/nginx/cert
+
+COPY --from=NginxBuilder /usr/share/nginx /usr/share/nginx
+COPY --from=NginxBuilder /usr/share/nginx/sbin/nginx /usr/share/nginx/sbin/nginx
+COPY --from=NginxBuilder /etc/nginx/modules /etc/nginx/modules
+COPY --from=NginxBuilder /etc/nginx/geoip /etc/nginx/geoip
+COPY --from=NginxBuilder /etc/nginx/mime.types /etc/nginx/mime.types
+COPY --from=NginxBuilder /usr/bin/hugo /usr/bin/hugo
+COPY ./deploy/monitor.sh ./deploy/entrypoint.sh /etc/nginx/
+COPY ./deploy/nginx.conf /etc/nginx/nginx.conf.template
+
+RUN mkdir -p /src/
+COPY . /src/website
+
+RUN cd /src/website && hugo -b / --minify && \
+ mkdir -p /usr/share/nginx/www && \
+ cp -rf /src/website/public/* /usr/share/nginx/www/ && \
+ rm -rf /src/*
+
+RUN sed -i "s|repo.openeuler.org|mirrors.nju.edu.cn/openeuler|g" /etc/yum.repos.d/openEuler.repo \
+ && sed -i '/metalink/d' /etc/yum.repos.d/openEuler.repo \
+ && sed -i '/metadata_expire/d' /etc/yum.repos.d/openEuler.repo \
+ && yum update -y \
+ && yum install -y findutils passwd shadow pcre-devel net-tools libmaxminddb libmaxminddb-devel \
+ && find /usr/share/nginx/www -type d -print0| xargs -0 chmod 500 \
+ && find /usr/share/nginx/www -type f -print0| xargs -0 chmod 400 \
+ && touch /var/run/nginx.pid \
+ && groupadd -g 1000 nginx \
+ && useradd -u 1000 -g nginx -s /sbin/nologin nginx \
+ && sed -i '/^PATH="\$HOME\/\.local\/bin:\$HOME\/bin:\$PATH"/d; /^export PATH/d' /home/nginx/.bashrc \
+ && chmod 750 /usr \
+ && chmod 550 /usr/share \
+ && chown -R nginx:nginx /usr/share/nginx \
+ && find /usr/share/nginx -type d -print0 | xargs -0 chmod 500 \
+ && chmod 500 /usr/share/nginx/sbin/nginx \
+ && mkdir -p /var/log/nginx \
+ && mkdir -p /etc/nginx/cert \
+ && chown -R nginx:nginx /etc/nginx/cert \
+ && chmod -R 700 /etc/nginx/cert \
+ && chown -R nginx:nginx /var/log/nginx \
+ && chmod -R 640 /var/log/nginx \
+ && touch /var/log/nginx/error.log \
+ && touch /var/log/nginx/access.log \
+ && chmod 640 /var/log/nginx/error.log \
+ && chmod 640 /var/log/nginx/access.log \
+ && chmod 640 /var/log/dnf.librepo.log \
+ && chmod 640 /var/log/dnf.log \
+ && chmod 640 /var/log/dnf.rpm.log \
+ && chmod 640 /var/log/hawkey.log \
+ && chmod 640 /var/log/*.log \
+ && chmod 440 /etc/nginx/nginx*.conf* \
+ && chown -R nginx:nginx /var/log/nginx/* \
+ && mkdir -p /var/lib/nginx/tmp/client_body \
+ && chown -R nginx:nginx /var/lib/nginx/tmp/client_body \
+ && mkdir -p /var/lib/nginx/tmp/fastcgi \
+ && chown -R nginx:nginx /var/lib/nginx/tmp/fastcgi \
+ && mkdir -p /var/lib/nginx/tmp/proxy \
+ && chown -R nginx:nginx /var/lib/nginx/tmp/proxy \
+ && mkdir -p /var/lib/nginx/tmp/scgi \
+ && chown -R nginx:nginx /var/lib/nginx/tmp/scgi \
+ && mkdir -p /var/lib/nginx/tmp/uwsgi \
+ && chown -R nginx:nginx /var/lib/nginx/tmp/uwsgi \
+ && chmod -R 500 /var/lib/nginx/ \
+ && chmod -R 750 /var/lib/nginx/tmp/proxy \
+ && chown -R nginx:nginx /var/lib/nginx/ \
+ && chown -R nginx:nginx /var/run/nginx.pid \
+ && chmod 640 /var/run/nginx.pid \
+ && chown -R nginx:nginx /etc/nginx \
+ && chmod 550 /etc/nginx \
+ && chmod 550 /etc/nginx/geoip/ \
+ && chmod 440 /etc/nginx/geoip/* \
+ && chmod 550 /etc/nginx/modules \
+ && chmod 440 /etc/nginx/modules/* \
+ && touch /etc/nginx/nginx.conf \
+ && chown nginx:nginx /etc/nginx/nginx.conf \
+ && chmod 640 /etc/nginx/nginx.conf \
+ && chmod 640 /etc/nginx/nginx.conf.template \
+ && chmod 440 /etc/nginx/mime.types \
+ && chmod 700 /var/lib/nginx/tmp/client_body \
+ && lsd() { \
+ local v="$1"; \
+ ls -ld "$v"; \
+ while :; do \
+ v="${v%/*}"; \
+ [[ "$v" && ! -f "$v" ]] || break; \
+ chown root:root "$v"; \
+ done; \
+ }; lsd "$NGINX_HOME" \
+ && lsd() { \
+ local v="$1"; \
+ ls -ld $v; \
+ while :; do \
+ v="${v%/*}"; \
+ [[ "$v" && ! -f "$v" ]] || break; \
+ chmod 550 "$v"; \
+ done; \
+ }; lsd $NGINX_HOME \
+ && lsd() { \
+ local v="$1"; \
+ ls -ld $v; \
+ while :; do \
+ v="${v%/*}"; \
+ [[ "$v" && ! -f "$v" ]] || break; \
+ chown $NGINX_USER:$NGINX_GROUP "$v"; \
+ done; \
+ }; lsd $NGINX_HOME \
+ && rm -rf /usr/share/nginx/html/ \
+ && rm -rf /usr/share/nginx/logs/ \
+ && echo "umask 0027" >> /etc/bashrc \
+ && echo "set +o history" >> /etc/bashrc \
+ && sed -i "s|HISTSIZE=1000|HISTSIZE=0|" /etc/profile \
+ && sed -i "s/PASS_MAX_DAYS.*/PASS_MAX_DAYS 30/" /etc/login.defs \
+ && echo "ALWAYS_SET_PATH yes" >> /etc/login.defs \
+ && chage --maxdays 30 nginx \
+ && passwd -l $NGINX_USER \
+ && yum clean all \
+ && usermod -s /sbin/nologin sync \
+ && usermod -s /sbin/nologin shutdown \
+ && usermod -s /sbin/nologin halt \
+ && echo "export TMOUT=1800 readonly TMOUT" >> /etc/profile \
+ && rm -rf /usr/bin/gdb* \
+ && rm -rf /usr/share/gdb \
+ && rm -rf /usr/share/gcc* \
+ && rm -rf /usr/lib64/python3.11/bdb.py \
+ && rm -rf /usr/lib64/python3.11/pdb.py \
+ && rm -rf /usr/lib64/python3.11/timeit.py \
+ && rm -rf /usr/lib64/python3.11/trace.py \
+ && rm -rf /usr/lib64/python3.11/tracemalloc.py \
+ && rm -rf /usr/share/licenses/glibc \
+ && rm -rf /usr/share/locale/ar \
+ && rm -rf /usr/share/locale/cpp \
+ && yum remove gdb-gdbserver findutils passwd shadow -y
+
+RUN chmod 500 /etc/nginx/monitor.sh \
+ && chmod 500 /etc/nginx/entrypoint.sh \
+ && chown nginx:nginx /etc/nginx/monitor.sh \
+ && chown nginx:nginx /etc/nginx/entrypoint.sh \
+ && sed -i "/PATH=/d" /home/nginx/.bashrc \
+ && source /home/nginx/.bashrc
+
+EXPOSE 8080
+
+USER nginx
+
+ENTRYPOINT ["/etc/nginx/entrypoint.sh"]
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..23105592d19959598be38e568302be19c922bdfe
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,427 @@
+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.
diff --git a/archetypes/default.md b/archetypes/default.md
new file mode 100644
index 0000000000000000000000000000000000000000..00e77bd79be44872c0b29256b03799c2fb00c10d
--- /dev/null
+++ b/archetypes/default.md
@@ -0,0 +1,6 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ .Date }}
+draft: true
+---
+
diff --git a/config.toml b/config.toml
new file mode 100644
index 0000000000000000000000000000000000000000..94b6d2bd9dc10f21e3537ef3cd67dd72f14df01b
--- /dev/null
+++ b/config.toml
@@ -0,0 +1,75 @@
+baseURL = "/"
+title = "openEuler documentation"
+
+disablePathToLower = true
+
+# Site language. Available translations in the theme's `/i18n` directory.
+languageCode = "en-us"
+defaultContentLanguage = "zh"
+defaultContentLanguageInSubdir = true
+# Enable comments by entering your Disqus shortname
+disqusShortname = ""
+# Enable Google Analytics by entering your tracking code
+googleAnalytics = ""
+uglyURLs = true
+buildFuture = true
+[markup]
+ [markup.goldmark]
+ [markup.goldmark.renderer]
+ unsafe = true
+ [markup.goldmark.extensions]
+ typographer = false
+# Define the number of posts per page
+paginate = 10
+
+
+[languages]
+ [languages.en]
+ languageCode = "en"
+ contentDir = "content/en"
+ [languages.en.params]
+ rootSuffix = "openEuler documentation"
+ suffix = "openEuler documentation"
+ [languages.zh]
+ languageCode = "zh"
+ contentDir = "content/zh"
+ [languages.zh.params]
+ rootSuffix = "openEuler文档 | openEuler社区官网"
+ suffix = "openEuler文档 | openEuler社区"
+
+
+[params]
+ resourceURL = "/"
+ defaultKeywords = ["devows", "hugo", "go", "openEuler"]
+ author = "Site template made by devcows Modified by openEuler team"
+ defaultDescription = "Select the version and chapter of the openEuler documentation you want to view."
+ email = "contact@openeuler.io"
+
+ ### DOC Configurations
+ BookEditPath= 'blob/master/content'
+ BookDateFormat = 'Jan 2, 2019'
+ enableGitInfo = true
+ BookMenuBundle = '/menu'
+ bookHidden = true
+ bookFlatSection = true
+ BookMenuBundleActiveLinkColor = '\#004ed0'
+ showInnovation = true
+ languageZh = "中文"
+ languageEn = "English"
+
+ ltsText = "LTS"
+ version_88 = "23.03"
+ version_89 = "22.03 LTS SP1"
+ version_90 = "22.09"
+ version_91 = "22.03 LTS"
+ version_92 = "20.03 LTS SP3"
+ version_93 = "21.09"
+ version_94 = "20.03 LTS SP2"
+ version_95 = "21.03"
+ version_96 = "20.03 LTS SP1"
+ version_97 = "20.09"
+ version_98 = "20.03 LTS"
+
+
+ notFound = "404"
+
diff --git a/data/docsversion/93.yaml b/data/docsversion/93.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..f2f6e71dbed13611b360e2432db0b38fb29ca891
--- /dev/null
+++ b/data/docsversion/93.yaml
@@ -0,0 +1,25 @@
+version : "21.09"
+index: "93"
+display: 'flex'
+zhmodule:
+ - {name: "了解",class: "know",link: [{title: "法律声明",href: "/zh/docs/20.03_LTS_SP2/docs/Releasenotes/法律声明.html"},{title: "发行说明",href: "/zh/docs/20.03_LTS_SP2/docs/Releasenotes/release_notes.html"}]}
+ - {name: "安装",class: "install",link: [{title: "快速入门",href: "/zh/docs/20.03_LTS_SP2/docs/Quickstart/quick-start.html"},{title: "安装指南",href: "/zh/docs/20.03_LTS_SP2/docs/Installation/installation.html"}]}
+ - {name: "管理",class: "manage",link: [{title: "管理员指南",href: "/zh/docs/20.03_LTS_SP2/docs/Administration/administration.html"}]}
+ - {name: "开发",class: "develop",link: [{title: "应用开发指南",href: "/zh/docs/20.03_LTS_SP2/docs/ApplicationDev/application-development.html"}]}
+ - {name: "使用",class: "use",link: [{title: "HA用户指南",href: "/zh/docs/20.03_LTS_SP2/docs/desktop/ha.html"},{title: "A-Tune用户指南",href: "/zh/docs/20.03_LTS_SP2/docs/A-Tune/A-Tune.html"},{title: "容器用户指南",href: "/zh/docs/20.03_LTS_SP2/docs/Container/container.html"},{title: "桌面环境用户指南",href: "/zh/docs/20.03_LTS_SP2/docs/desktop/desktop.html"},{title: "虚拟化用户指南",href: "/zh/docs/20.03_LTS_SP2/docs/Virtualization/virtualization.html"},{title: "安全加固指南",href: "/zh/docs/20.03_LTS_SP2/docs/SecHarden/secHarden.html"}]}
+ - {name: "迁移",class: "migrate",link: [{title: "K8S迁移指南",href: "/zh/docs/20.03_LTS_SP2/docs/thirdparty_migration/k8sinstall.html"},{title: "OpenStack 安装",href: "/zh/docs/20.03_LTS_SP2/docs/thirdparty_migration/openstack.html"},{title: "Spring Framework 迁移指导",href: "/zh/docs/20.03_LTS_SP2/docs/thirdparty_migration/springframework.html"}]}
+enmodule:
+ - {name: "About",class: "know",link: [{title: "Terms of Use",href: "/en/docs/20.03_LTS_SP2/docs/Releasenotes/terms-of-use.html"},{title: "Release Notes",href: "/en/docs/20.03_LTS_SP2/docs/Releasenotes/release_notes.html"}]}
+ - {name: "Install",class: "install",link: [{title: "Quick Start",href: "/en/docs/20.03_LTS_SP2/docs/Quickstart/quick-start.html"},{title: "Installation Guide",href: "/en/docs/20.03_LTS_SP2/docs/Installation/Installation.html"}]}
+ - {name: "Mgmt",class: "manage",link: [{title: "Administrator Guide",href: "/en/docs/20.03_LTS_SP2/docs/Administration/administration.html"}]}
+ - {name: "Dev",class: "develop",link: [{title: "Application Development Guide",href: "/en/docs/20.03_LTS_SP2/docs/ApplicationDev/application-development.html"}]}
+ - {name: "Use",class: "use",link: [{title: "HA User Guide",href: "/en/docs/20.03_LTS_SP2/docs/desktop/HAuserguide.html"},{title: "A-Tune User Guide",href: "/en/docs/20.03_LTS_SP2/docs/A-Tune/A-Tune.html"},{title: "Container User Guide",href: "/en/docs/20.03_LTS_SP2/docs/Container/container.html"},{title: "Desktop Environment User Guide",href: "/en/docs/20.03_LTS_SP2/docs/desktop/desktop.html"},{title: "Virtualization User Guide",href: "/en/docs/20.03_LTS_SP2/docs/Virtualization/virtualization.html"},{title: "Security Hardening Guide",href: "/en/docs/20.03_LTS_SP2/docs/SecHarden/secHarden.html"}]}
+ - {name: "Porting",class: "migrate",link: [{title: "Guide to Porting Kubernetes to openEuler",href: "/en/docs/20.03_LTS_SP2/docs/thirdparty_migration/k8sinstall.html"},{title: "OpenStack Installation",href: "/en/docs/20.03_LTS_SP2/docs/thirdparty_migration/openstack-train.html"},{title: "Guide to Porting Spring Framework to openEuler",href: "/en/docs/20.03_LTS_SP2/docs/thirdparty_migration/springframework.html"}]}
+rumodule:
+ - {name: "About",class: "know",link: [{title: "Terms of Use",href: "/en/docs/20.03_LTS_SP2/docs/Releasenotes/terms-of-use.html"},{title: "Release Notes",href: "/en/docs/20.03_LTS_SP2/docs/Releasenotes/release_notes.html"}]}
+ - {name: "Install",class: "install",link: [{title: "Quick Start",href: "/en/docs/20.03_LTS_SP2/docs/Quickstart/quick-start.html"},{title: "Installation Guide",href: "/en/docs/20.03_LTS_SP2/docs/Installation/Installation.html"}]}
+ - {name: "Mgmt",class: "manage",link: [{title: "Administrator Guide",href: "/en/docs/20.03_LTS_SP2/docs/Administration/administration.html"}]}
+ - {name: "Dev",class: "develop",link: [{title: "Application Development Guide",href: "/en/docs/20.03_LTS_SP2/docs/ApplicationDev/application-development.html"}]}
+ - {name: "Use",class: "use",link: [{title: "HA User Guide",href: "/en/docs/20.03_LTS_SP2/docs/desktop/HAuserguide.html"},{title: "A-Tune User Guide",href: "/en/docs/20.03_LTS_SP2/docs/A-Tune/A-Tune.html"},{title: "Container User Guide",href: "/en/docs/20.03_LTS_SP2/docs/Container/container.html"},{title: "Desktop Environment User Guide",href: "/en/docs/20.03_LTS_SP2/docs/desktop/desktop.html"},{title: "Virtualization User Guide",href: "/en/docs/20.03_LTS_SP2/docs/Virtualization/virtualization.html"},{title: "Security Hardening Guide",href: "/en/docs/20.03_LTS_SP2/docs/SecHarden/secHarden.html"}]}
+ - {name: "Porting",class: "migrate",link: [{title: "Guide to Porting Kubernetes to openEuler",href: "/en/docs/20.03_LTS_SP2/docs/thirdparty_migration/k8sinstall.html"},{title: "OpenStack Installation",href: "/en/docs/20.03_LTS_SP2/docs/thirdparty_migration/openstack-train.html"},{title: "Guide to Porting Spring Framework to openEuler",href: "/en/docs/20.03_LTS_SP2/docs/thirdparty_migration/springframework.html"}]}
+ - {name: "Porting",class: "migrate",link: [{title: "Guide to Porting Kubernetes to openEuler",href: "/en/docs/20.03_LTS_SP2/docs/thirdparty_migration/k8sinstall.html"},{title: "OpenStack Installation",href: "/en/docs/20.03_LTS_SP2/docs/thirdparty_migration/openstack.html"},{title: "Guide to Porting Spring Framework to openEuler",href: "/en/docs/20.03_LTS_SP2/docs/thirdparty_migration/springframework.html"}]}
diff --git a/data/docsversion/94.yaml b/data/docsversion/94.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..62fe3f5e1685eec38cd324c13afd211ff0071eb1
--- /dev/null
+++ b/data/docsversion/94.yaml
@@ -0,0 +1,25 @@
+version : "20.03 LTS SP2"
+index: "94"
+display: 'none'
+zhmodule:
+ - {name: "了解",class: "know",link: [{title: "法律声明",href: "/zh/docs/20.03_LTS_SP2/docs/Releasenotes/法律声明.html"},{title: "发行说明",href: "/zh/docs/20.03_LTS_SP2/docs/Releasenotes/release_notes.html"}]}
+ - {name: "安装",class: "install",link: [{title: "快速入门",href: "/zh/docs/20.03_LTS_SP2/docs/Quickstart/quick-start.html"},{title: "安装指南",href: "/zh/docs/20.03_LTS_SP2/docs/Installation/installation.html"}]}
+ - {name: "管理",class: "manage",link: [{title: "管理员指南",href: "/zh/docs/20.03_LTS_SP2/docs/Administration/administration.html"}]}
+ - {name: "开发",class: "develop",link: [{title: "应用开发指南",href: "/zh/docs/20.03_LTS_SP2/docs/ApplicationDev/application-development.html"}]}
+ - {name: "使用",class: "use",link: [{title: "HA用户指南",href: "/zh/docs/20.03_LTS_SP2/docs/desktop/ha.html"},{title: "A-Tune用户指南",href: "/zh/docs/20.03_LTS_SP2/docs/A-Tune/A-Tune.html"},{title: "容器用户指南",href: "/zh/docs/20.03_LTS_SP2/docs/Container/container.html"},{title: "桌面环境用户指南",href: "/zh/docs/20.03_LTS_SP2/docs/desktop/desktop.html"},{title: "虚拟化用户指南",href: "/zh/docs/20.03_LTS_SP2/docs/Virtualization/virtualization.html"},{title: "安全加固指南",href: "/zh/docs/20.03_LTS_SP2/docs/SecHarden/secHarden.html"}]}
+ - {name: "迁移",class: "migrate",link: [{title: "K8S迁移指南",href: "/zh/docs/20.03_LTS_SP2/docs/thirdparty_migration/k8sinstall.html"},{title: "OpenStack 安装",href: "/zh/docs/20.03_LTS_SP2/docs/thirdparty_migration/openstack.html"},{title: "Spring Framework 迁移指导",href: "/zh/docs/20.03_LTS_SP2/docs/thirdparty_migration/springframework.html"}]}
+enmodule:
+ - {name: "About",class: "know",link: [{title: "Terms of Use",href: "/en/docs/20.03_LTS_SP2/docs/Releasenotes/terms-of-use.html"},{title: "Release Notes",href: "/en/docs/20.03_LTS_SP2/docs/Releasenotes/release_notes.html"}]}
+ - {name: "Install",class: "install",link: [{title: "Quick Start",href: "/en/docs/20.03_LTS_SP2/docs/Quickstart/quick-start.html"},{title: "Installation Guide",href: "/en/docs/20.03_LTS_SP2/docs/Installation/Installation.html"}]}
+ - {name: "Mgmt",class: "manage",link: [{title: "Administrator Guide",href: "/en/docs/20.03_LTS_SP2/docs/Administration/administration.html"}]}
+ - {name: "Dev",class: "develop",link: [{title: "Application Development Guide",href: "/en/docs/20.03_LTS_SP2/docs/ApplicationDev/application-development.html"}]}
+ - {name: "Use",class: "use",link: [{title: "HA User Guide",href: "/en/docs/20.03_LTS_SP2/docs/desktop/HAuserguide.html"},{title: "A-Tune User Guide",href: "/en/docs/20.03_LTS_SP2/docs/A-Tune/A-Tune.html"},{title: "Container User Guide",href: "/en/docs/20.03_LTS_SP2/docs/Container/container.html"},{title: "Desktop Environment User Guide",href: "/en/docs/20.03_LTS_SP2/docs/desktop/desktop.html"},{title: "Virtualization User Guide",href: "/en/docs/20.03_LTS_SP2/docs/Virtualization/virtualization.html"},{title: "Security Hardening Guide",href: "/en/docs/20.03_LTS_SP2/docs/SecHarden/secHarden.html"}]}
+ - {name: "Porting",class: "migrate",link: [{title: "Guide to Porting Kubernetes to openEuler",href: "/en/docs/20.03_LTS_SP2/docs/thirdparty_migration/k8sinstall.html"},{title: "OpenStack Installation",href: "/en/docs/20.03_LTS_SP2/docs/thirdparty_migration/openstack-train.html"},{title: "Guide to Porting Spring Framework to openEuler",href: "/en/docs/20.03_LTS_SP2/docs/thirdparty_migration/springframework.html"}]}
+rumodule:
+ - {name: "About",class: "know",link: [{title: "Terms of Use",href: "/en/docs/20.03_LTS_SP2/docs/Releasenotes/terms-of-use.html"},{title: "Release Notes",href: "/en/docs/20.03_LTS_SP2/docs/Releasenotes/release_notes.html"}]}
+ - {name: "Install",class: "install",link: [{title: "Quick Start",href: "/en/docs/20.03_LTS_SP2/docs/Quickstart/quick-start.html"},{title: "Installation Guide",href: "/en/docs/20.03_LTS_SP2/docs/Installation/Installation.html"}]}
+ - {name: "Mgmt",class: "manage",link: [{title: "Administrator Guide",href: "/en/docs/20.03_LTS_SP2/docs/Administration/administration.html"}]}
+ - {name: "Dev",class: "develop",link: [{title: "Application Development Guide",href: "/en/docs/20.03_LTS_SP2/docs/ApplicationDev/application-development.html"}]}
+ - {name: "Use",class: "use",link: [{title: "HA User Guide",href: "/en/docs/20.03_LTS_SP2/docs/desktop/HAuserguide.html"},{title: "A-Tune User Guide",href: "/en/docs/20.03_LTS_SP2/docs/A-Tune/A-Tune.html"},{title: "Container User Guide",href: "/en/docs/20.03_LTS_SP2/docs/Container/container.html"},{title: "Desktop Environment User Guide",href: "/en/docs/20.03_LTS_SP2/docs/desktop/desktop.html"},{title: "Virtualization User Guide",href: "/en/docs/20.03_LTS_SP2/docs/Virtualization/virtualization.html"},{title: "Security Hardening Guide",href: "/en/docs/20.03_LTS_SP2/docs/SecHarden/secHarden.html"}]}
+ - {name: "Porting",class: "migrate",link: [{title: "Guide to Porting Kubernetes to openEuler",href: "/en/docs/20.03_LTS_SP2/docs/thirdparty_migration/k8sinstall.html"},{title: "OpenStack Installation",href: "/en/docs/20.03_LTS_SP2/docs/thirdparty_migration/openstack-train.html"},{title: "Guide to Porting Spring Framework to openEuler",href: "/en/docs/20.03_LTS_SP2/docs/thirdparty_migration/springframework.html"}]}
+ - {name: "Porting",class: "migrate",link: [{title: "Guide to Porting Kubernetes to openEuler",href: "/en/docs/20.03_LTS_SP2/docs/thirdparty_migration/k8sinstall.html"},{title: "OpenStack Installation",href: "/en/docs/20.03_LTS_SP2/docs/thirdparty_migration/openstack.html"},{title: "Guide to Porting Spring Framework to openEuler",href: "/en/docs/20.03_LTS_SP2/docs/thirdparty_migration/springframework.html"}]}
diff --git a/data/docsversion/95.yaml b/data/docsversion/95.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..a73d136df1df64f592dca0d3b0592879884eddfa
--- /dev/null
+++ b/data/docsversion/95.yaml
@@ -0,0 +1,22 @@
+version : "21.03"
+index: "95"
+display: 'none'
+zhmodule:
+ - {name: "了解",class: "know",link: [{title: "法律声明",href: "/zh/docs/21.03/docs/Releasenotes/法律声明.html"},{title: "发行说明",href: "/zh/docs/21.03/docs/Releasenotes/release_notes.html"}]}
+ - {name: "安装",class: "install",link: [{title: "快速入门",href: "/zh/docs/21.03/docs/Quickstart/quick-start.html"},{title: "安装指南",href: "/zh/docs/21.03/docs/Installation/installation.html"},{title: "第三方软件安装指南",href: "/zh/docs/21.03/docs/thirdparty_migration/thidrparty.html"}]}
+ - {name: "管理",class: "manage",link: [{title: "管理员指南",href: "/zh/docs/21.03/docs/Administration/administration.html"}]}
+ - {name: "迁移",class: "migrate",link: [{title: "内核热升级用户指南",href: "/zh/docs/21.03/docs/KernelLiveUpgrade/KernelLiveUpgrade.html"}]}
+ - {name: "使用",class: "use",link: [{title: "A-Tune用户指南",href: "/zh/docs/21.03/docs/A-Tune/A-Tune.html"},{title: "容器用户指南",href: "/zh/docs/21.03/docs/Container/container.html"},{title: "虚拟化用户指南",href: "/zh/docs/21.03/docs/Virtualization/virtualization.html"},{title: "安全加固指南",href: "/zh/docs/21.03/docs/SecHarden/secHarden.html"},{title: "桌面环境用户指南",href: "/zh/docs/21.03/docs/desktop/desktop.html"},{title: "StratoVirt用户指南",href: "/zh/docs/21.03/docs/StratoVirt/StratoVirtGuide.html"},{title: "Kubernetes 集群部署指南",href: "/zh/docs/21.03/docs/Kubernetes/Kubernetes.html"}]}
+ - {name: "开发",class: "develop",link: [{title: "应用开发指南",href: "/zh/docs/21.03/docs/ApplicationDev/application-development.html"},{title: "工具集用户指南",href: "/zh/docs/21.03/docs/userguide/overview.html"},{title: "secGear开发指南",href: "/zh/docs/21.03/docs/secGear/secGear.html"}]}
+enmodule:
+ - {name: "About",class: "know",link: [{title: "Terms of Use",href: "/en/docs/21.03/docs/Releasenotes/terms-of-use.html"},{title: "Release Notes",href: "/en/docs/21.03/docs/Releasenotes/release_notes.html"}]}
+ - {name: "Mgmt",class: "manage",link: [{title: "Administrator Guide",href: "/en/docs/21.03/docs/Administration/administration.html"}]}
+ - {name: "Install",class: "install",link: [{title: "Quick Start",href: "/en/docs/21.03/docs/Quickstart/quick-start.html"},{title: "Installation Guide",href: "/en/docs/21.03/docs/Installation/Installation.html"},{title: "Third-Party Software Porting Guide",href: "/en/docs/21.03/docs/thirdparty_migration/thidrparty.html"}]}
+ - {name: "Dev",class: "develop",link: [{title: "Application Development Guide",href: "/en/docs/21.03/docs/ApplicationDev/application-development.html"},{title: "openEuler Toolset User Guide",href: "/en/docs/21.03/docs/userguide/overview.html"}]}
+ - {name: "Use",class: "use",link: [{title: "A-Tune User Guide",href: "/en/docs/21.03/docs/A-Tune/A-Tune.html"},{title: "Container User Guide",href: "/en/docs/21.03/docs/Container/container.html"},{title: "Virtualization User Guide",href: "/en/docs/21.03/docs/Virtualization/virtualization.html"},{title: "Security Hardening Guide",href: "/en/docs/21.03/docs/SecHarden/secHarden.html"},{title: "Desktop Environment User Guide",href: "/en/docs/21.03/docs/desktop/desktop.html"},{title: "StratoVirt User Guide",href: "/en/docs/21.03/docs/StratoVirt/StratoVrit_guidence.html"}]}
+rumodule:
+ - {name: "О версии",class: "know",link: [{title: "Условия использования",href: "/en/docs/21.03/docs/Releasenotes/terms-of-use.html"},{title: "Примечания к релизу",href: "/en/docs/21.03/docs/Releasenotes/release_notes.html"}]}
+ - {name: "Управление",class: "manage",link: [{title: "Руководство администратора",href: "/en/docs/21.03/docs/Administration/administration.html"}]}
+ - {name: "Установка",class: "install",link: [{title: "Быстрый запуск",href: "/en/docs/21.03/docs/Quickstart/quick-start.html"},{title: "Руководство по установке",href: "/en/docs/21.03/docs/Installation/Installation.html"},{title: "Third-Party Software Porting Guide",href: "/en/docs/21.03/docs/thirdparty_migration/thidrparty.html"}]}
+ - {name: "Разработка",class: "develop",link: [{title: "Руководство по разработке приложений",href: "/en/docs/21.03/docs/ApplicationDev/application-development.html"},{title: "openEuler Toolset User Guide",href: "/en/docs/21.03/docs/userguide/overview.html"}]}
+ - {name: "Использование",class: "use",link: [{title: "Руководство пользователя A-Tune",href: "/en/docs/21.03/docs/A-Tune/A-Tune.html"},{title: "Container User Guide",href: "/en/docs/21.03/docs/Container/container.html"},{title: "Руководство пользователя платформы виртуализации",href: "/en/docs/21.03/docs/Virtualization/virtualization.html"},{title: "Руководство по усилению мер безопасности",href: "/en/docs/21.03/docs/SecHarden/secHarden.html"},{title: "Desktop Environment User Guide",href: "/en/docs/21.03/docs/desktop/desktop.html"},{title: "Руководство пользователя платформы виртуализации StratoVirt",href: "/en/docs/21.03/docs/StratoVirt/StratoVrit_guidence.html"}]}
\ No newline at end of file
diff --git a/data/docsversion/96.yaml b/data/docsversion/96.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..3ef7e434a2b8ac9a788820bdf9d9542f63e4010b
--- /dev/null
+++ b/data/docsversion/96.yaml
@@ -0,0 +1,24 @@
+version : "20.03 LTS SP1"
+index: "96"
+display: 'none'
+zhmodule:
+ - {name: "了解",class: "know",link: [{title: "法律声明",href: "/zh/docs/20.03_LTS_SP1/docs/Releasenotes/法律声明.html"},{title: "发行说明",href: "/zh/docs/20.03_LTS_SP1/docs/Releasenotes/release_notes.html"}]}
+ - {name: "安装",class: "install",link: [{title: "快速入门",href: "/zh/docs/20.03_LTS_SP1/docs/Quickstart/quick-start.html"},{title: "安装指南",href: "/zh/docs/20.03_LTS_SP1/docs/Installation/installation.html"}]}
+ - {name: "管理",class: "manage",link: [{title: "管理员指南",href: "/zh/docs/20.03_LTS_SP1/docs/Administration/administration.html"}]}
+ - {name: "开发",class: "develop",link: [{title: "应用开发指南",href: "/zh/docs/20.03_LTS_SP1/docs/ApplicationDev/application-development.html"}]}
+ - {name: "使用",class: "use",link: [{title: "HA用户指南",href: "/zh/docs/20.03_LTS_SP1/docs/desktop/HAuserguide.html"},{title: "A-Tune用户指南",href: "/zh/docs/20.03_LTS_SP1/docs/A-Tune/A-Tune.html"},{title: "容器用户指南",href: "/zh/docs/20.03_LTS_SP1/docs/Container/container.html"},{title: "桌面环境用户指南",href: "/zh/docs/20.03_LTS_SP1/docs/desktop/desktop.html"},{title: "虚拟化用户指南",href: "/zh/docs/20.03_LTS_SP1/docs/Virtualization/virtualization.html"},{title: "安全加固指南",href: "/zh/docs/20.03_LTS_SP1/docs/SecHarden/secHarden.html"}]}
+ - {name: "迁移",class: "migrate",link: [{title: "K8S迁移指南",href: "/zh/docs/20.03_LTS_SP1/docs/thirdparty_migration/k8sinstall.html"},{title: "OpenStack 迁移",href: "/zh/docs/20.03_LTS_SP1/docs/thirdparty_migration/openstack-train.html"},{title: "Spring Framework 迁移指导",href: "/zh/docs/20.03_LTS_SP1/docs/thirdparty_migration/springframework.html"}]}
+enmodule:
+ - {name: "About",class: "know",link: [{title: "Terms of Use",href: "/en/docs/20.03_LTS_SP1/docs/Releasenotes/terms-of-use.html"},{title: "Release Notes",href: "/en/docs/20.03_LTS_SP1/docs/Releasenotes/release_notes.html"}]}
+ - {name: "Install",class: "install",link: [{title: "Quick Start",href: "/en/docs/20.03_LTS_SP1/docs/Quickstart/quick-start.html"},{title: "Installation Guide",href: "/en/docs/20.03_LTS_SP1/docs/Installation/Installation.html"}]}
+ - {name: "Mgmt",class: "manage",link: [{title: "Administrator Guide",href: "/en/docs/20.03_LTS_SP1/docs/Administration/administration.html"}]}
+ - {name: "Dev",class: "develop",link: [{title: "Application Development Guide",href: "/en/docs/20.03_LTS_SP1/docs/ApplicationDev/application-development.html"}]}
+ - {name: "Use",class: "use",link: [{title: "HA User Guide",href: "/en/docs/20.03_LTS_SP1/docs/desktop/HAuserguide.html"},{title: "A-Tune User Guide",href: "/en/docs/20.03_LTS_SP1/docs/A-Tune/A-Tune.html"},{title: "Container User Guide",href: "/en/docs/20.03_LTS_SP1/docs/Container/container.html"},{title: "Desktop Environment User Guide",href: "/en/docs/20.03_LTS_SP1/docs/desktop/desktop.html"},{title: "Virtualization User Guide",href: "/en/docs/20.03_LTS_SP1/docs/Virtualization/virtualization.html"},{title: "Security Hardening Guide",href: "/en/docs/20.03_LTS_SP1/docs/SecHarden/secHarden.html"}]}
+ - {name: "Porting",class: "migrate",link: [{title: "Guide to Porting Kubernetes to openEuler",href: "/en/docs/20.03_LTS_SP1/docs/thirdparty_migration/k8sinstall.html"},{title: "Guide to Porting OpenStack-Train to openEuler",href: "/en/docs/20.03_LTS_SP1/docs/thirdparty_migration/openstack-train.html"},{title: "Guide to Porting Spring Framework to openEuler",href: "/en/docs/20.03_LTS_SP1/docs/thirdparty_migration/springframework.html"}]}
+rumodule:
+ - {name: "О версии",class: "know",link: [{title: "Условия использования",href: "/en/docs/20.03_LTS_SP1/docs/Releasenotes/terms-of-use.html"},{title: "Примечания к релизу",href: "/en/docs/20.03_LTS_SP1/docs/Releasenotes/release_notes.html"}]}
+ - {name: "Установка",class: "install",link: [{title: "Быстрый запуск",href: "/en/docs/20.03_LTS_SP1/docs/Quickstart/quick-start.html"},{title: "Руководство по установке",href: "/en/docs/20.03_LTS_SP1/docs/Installation/Installation.html"}]}
+ - {name: "Управление",class: "manage",link: [{title: "Руководство администратора",href: "/en/docs/20.03_LTS_SP1/docs/Administration/administration.html"}]}
+ - {name: "Разработка",class: "develop",link: [{title: "Руководство по разработке приложений",href: "/en/docs/20.03_LTS_SP1/docs/ApplicationDev/application-development.html"}]}
+ - {name: "Использование",class: "use",link: [{title: "HA User Guide",href: "/en/docs/20.03_LTS_SP1/docs/desktop/HAuserguide.html"},{title: "Руководство пользователя A-Tune",href: "/en/docs/20.03_LTS_SP1/docs/A-Tune/A-Tune.html"},{title: "Container User Guide",href: "/en/docs/20.03_LTS_SP1/docs/Container/container.html"},{title: "Desktop Environment User Guide",href: "/en/docs/20.03_LTS_SP1/docs/desktop/desktop.html"},{title: "Руководство пользователя платформы виртуализации",href: "/en/docs/20.03_LTS_SP1/docs/Virtualization/virtualization.html"},{title: "Руководство по усилению мер безопасности",href: "/en/docs/20.03_LTS_SP1/docs/SecHarden/secHarden.html"}]}
+ - {name: "Перенос",class: "migrate",link: [{title: "Guide to Porting Kubernetes to openEuler",href: "/en/docs/20.03_LTS_SP1/docs/thirdparty_migration/k8sinstall.html"},{title: "Guide to Porting OpenStack-Train to openEuler",href: "/en/docs/20.03_LTS_SP1/docs/thirdparty_migration/openstack-train.html"},{title: "Guide to Porting Spring Framework to openEuler",href: "/en/docs/20.03_LTS_SP1/docs/thirdparty_migration/springframework.html"}]}
\ No newline at end of file
diff --git a/data/docsversion/97.yaml b/data/docsversion/97.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..da19ff212ec3f10d2229b29a6a06483ae1c89171
--- /dev/null
+++ b/data/docsversion/97.yaml
@@ -0,0 +1,15 @@
+version : "20.09"
+index: "97"
+display: 'none'
+zhmodule:
+ - {name: "了解",class: "know",link: [{title: "法律声明",href: "/zh/docs/20.09/docs/Releasenotes/法律声明.html"},{title: "发行说明",href: "/zh/docs/20.09/docs/Releasenotes/release_notes.html"}]}
+ - {name: "安装",class: "install",link: [{title: "快速入门",href: "/zh/docs/20.09/docs/Quickstart/quick-start.html"},{title: "安装指南",href: "/zh/docs/20.09/docs/Installation/installation.html"}]}
+ - {name: "管理",class: "manage",link: [{title: "管理员指南",href: "/zh/docs/20.09/docs/Administration/administration.html"}]}
+ - {name: "开发",class: "develop",link: [{title: "应用开发指南",href: "/zh/docs/20.09/docs/ApplicationDev/application-development.html"},{title: "工具集用户指南",href: "/zh/docs/20.09/docs/userguide/overview.html"}]}
+ - {name: "使用",class: "use",link: [{title: "安全加固指南",href: "/zh/docs/20.09/docs/SecHarden/secHarden.html"},{title: "虚拟化用户指南",href: "/zh/docs/20.09/docs/Virtualization/virtualization.html"},{title: "容器用户指南",href: "/zh/docs/20.09/docs/Container/container.html"},{title: "A-Tune用户指南",href: "/zh/docs/20.09/docs/A-Tune/A-Tune.html"},{title: "StratoVirt用户指南",href: "/zh/docs/20.09/docs/StratoVirt/StratoVirtGuide.html"}]}
+enmodule:
+ - {name: "About",class: "know",link: [{title: "Terms of Use",href: "/en/docs/20.09/docs/Releasenotes/terms-of-use.html"},{title: "Release Notes",href: "/en/docs/20.09/docs/Releasenotes/release_notes.html"}]}
+ - {name: "Install",class: "install",link: [{title: "Quick Start",href: "/en/docs/20.09/docs/Quickstart/quick-start.html"},{title: "Installation Guide",href: "/en/docs/20.09/docs/Installation/Installation.html"}]}
+ - {name: "Mgmt",class: "manage",link: [{title: "Administrator Guide",href: "/en/docs/20.09/docs/Administration/administration.html"}]}
+ - {name: "Dev",class: "develop",link: [{title: "Application Development Guide",href: "/en/docs/20.09/docs/ApplicationDev/application-development.html"},{title: "openEuler Toolset User Guide",href: "/en/docs/20.09/docs/userguide/overview.html"}]}
+ - {name: "Use",class: "use",link: [{title: "Security Hardening Guide",href: "/en/docs/20.09/docs/SecHarden/secHarden.html"},{title: "Virtualization User Guide",href: "/en/docs/20.09/docs/Virtualization/virtualization.html"},{title: "Container User Guide",href: "/en/docs/20.09/docs/Container/container.html"},{title: "A-Tune User Guide",href: "/en/docs/20.09/docs/A-Tune/A-Tune.html"},{title: "StratoVirt User Guide",href: "/en/docs/20.09/docs/StratoVirt/StratoVrit_guidence.html"}]}
\ No newline at end of file
diff --git a/data/docsversion/98.yaml b/data/docsversion/98.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..9a766e94aa53e69f0920af736aca54d0fb7837e1
--- /dev/null
+++ b/data/docsversion/98.yaml
@@ -0,0 +1,21 @@
+version : "20.03 LTS"
+index: "98"
+display: 'none'
+zhmodule:
+ - {name: "了解",class: "know",link: [{title: "法律声明",href: "/zh/docs/20.03_LTS/docs/Releasenotes/法律声明.html"},{title: "发行说明",href: "/zh/docs/20.03_LTS/docs/Releasenotes/release_notes.html"}]}
+ - {name: "安装",class: "install",link: [{title: "快速入门",href: "/zh/docs/20.03_LTS/docs/Quickstart/quick-start.html"},{title: "安装指南",href: "/zh/docs/20.03_LTS/docs/Installation/installation.html"}]}
+ - {name: "管理",class: "manage",link: [{title: "管理员指南",href: "/zh/docs/20.03_LTS/docs/Administration/administration.html"}]}
+ - {name: "开发",class: "develop",link: [{title: "应用开发指南",href: "/zh/docs/20.03_LTS/docs/ApplicationDev/application-development.html"}]}
+ - {name: "使用",class: "use",link: [{title: "安全加固指南",href: "/zh/docs/20.03_LTS/docs/SecHarden/secHarden.html"},{title: "虚拟化用户指南",href: "/zh/docs/20.03_LTS/docs/Virtualization/virtualization.html"},{title: "容器用户指南",href: "/zh/docs/20.03_LTS/docs/Container/container.html"},{title: "A-Tune用户指南",href: "/zh/docs/20.03_LTS/docs/A-Tune/A-Tune.html"}]}
+enmodule:
+ - {name: "About",class: "know",link: [{title: "Terms of Use",href: "/en/docs/20.03_LTS/docs/Releasenotes/terms-of-use.html"},{title: "Release Notes",href: "/en/docs/20.03_LTS/docs/Releasenotes/release_notes.html"}]}
+ - {name: "Install",class: "install",link: [{title: "Quick Start",href: "/en/docs/20.03_LTS/docs/Quickstart/quick-start.html"},{title: "Installation Guide",href: "/en/docs/20.03_LTS/docs/Installation/Installation.html"}]}
+ - {name: "Mgmt",class: "manage",link: [{title: "Administrator Guide",href: "/en/docs/20.03_LTS/docs/Administration/administration.html"}]}
+ - {name: "Dev",class: "develop",link: [{title: "Application Development Guide",href: "/en/docs/20.03_LTS/docs/ApplicationDev/application-development.html"}]}
+ - {name: "Use",class: "use",link: [{title: "Security Hardening Guide",href: "/en/docs/20.03_LTS/docs/SecHarden/secHarden.html"},{title: "Virtualization User Guide",href: "/en/docs/20.03_LTS/docs/Virtualization/virtualization.html"},{title: "Container User Guide",href: "/en/docs/20.03_LTS/docs/Container/container.html"},{title: "A-Tune User Guide",href: "/en/docs/20.03_LTS/docs/A-Tune/A-Tune.html"}]}
+rumodule:
+ - {name: "О версии",class: "know",link: [{title: "Условия использования",href: "/en/docs/20.03_LTS/docs/Releasenotes/terms-of-use.html"},{title: "Примечания к релизу",href: "/en/docs/20.03_LTS/docs/Releasenotes/release_notes.html"}]}
+ - {name: "Установка",class: "install",link: [{title: "Быстрый запуск",href: "/en/docs/20.03_LTS/docs/Quickstart/quick-start.html"},{title: "Руководство по установке",href: "/en/docs/20.03_LTS/docs/Installation/Installation.html"}]}
+ - {name: "Управление",class: "manage",link: [{title: "Руководство администратора",href: "/en/docs/20.03_LTS/docs/Administration/administration.html"}]}
+ - {name: "Разработка",class: "develop",link: [{title: "Руководство по разработке приложений",href: "/en/docs/20.03_LTS/docs/ApplicationDev/application-development.html"}]}
+ - {name: "Использование",class: "use",link: [{title: "Руководство по усилению мер безопасности",href: "/en/docs/20.03_LTS/docs/SecHarden/secHarden.html"},{title: "Руководство пользователя платформы виртуализации",href: "/en/docs/20.03_LTS/docs/Virtualization/virtualization.html"},{title: "Container User Guide",href: "/en/docs/20.03_LTS/docs/Container/container.html"},{title: "Руководство пользователя A-Tune",href: "/en/docs/20.03_LTS/docs/A-Tune/A-Tune.html"}]}
\ No newline at end of file
diff --git a/deploy/docs-builder.sh b/deploy/docs-builder.sh
new file mode 100644
index 0000000000000000000000000000000000000000..4412280d8905525d87a344aea0a707faffb9e5a9
--- /dev/null
+++ b/deploy/docs-builder.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+if [ -d "./docs" ]; then
+ rm -rf ./docs
+fi
+if [ -d "./website" ]; then
+ rm -rf ./website
+fi
+mkdir website
+
+git clone https://gitee.com/openeuler/docs-centralized
+cd ./docs
+git checkout -b website origin/website
+cp -r * ../website
+
+for r in $(git branch -r --list "origin/stable2-*")
+do
+ b=${r##*origin/stable2-}
+ git checkout -b $b $r
+
+ mkdir -p ../website/content/zh/docs/$b
+ cp -r ./docs/zh/* ../website/content/zh/docs/$b/
+
+ mkdir -p ../website/content/en/docs/$b
+ cp -r ./docs/en/* ../website/content/en/docs/$b/
+
+ if [ -d "./docs/ru" ]; then
+ mkdir -p ../website/content/ru/docs/$b
+ cp -r ./docs/ru/* ../website/content/ru/docs/$b/
+ fi
+
+ cd ..
+ cd ./docs
+done
+cd ..
+pwd
+
diff --git a/deploy/entrypoint.sh b/deploy/entrypoint.sh
new file mode 100644
index 0000000000000000000000000000000000000000..c0ccd9e42256ccb96c56194422e84f05c16d4575
--- /dev/null
+++ b/deploy/entrypoint.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+# 使用 ifconfig 获取主机的 IP 地址(假设是 eth0 接口)
+LOCAL_IP=$(ifconfig eth0 | grep inet | awk '{ print $2 }' | head -n 1)
+
+# 使用 awk 替换 nginx.conf.template 中的环境变量
+echo "Replacing LOCAL_IP in nginx.conf"
+awk -v ip="$LOCAL_IP" '{gsub(/\${LOCAL_IP}/, ip); print}' /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf
+bash /etc/nginx/monitor.sh $DET_URL $DST_PATH &
+/usr/share/nginx/sbin/nginx -g 'daemon off;'
\ No newline at end of file
diff --git a/deploy/monitor.sh b/deploy/monitor.sh
new file mode 100644
index 0000000000000000000000000000000000000000..d84c1bc8aa3a6504483d3d8879244e142708b2e9
--- /dev/null
+++ b/deploy/monitor.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+# this script is for website monitoring,
+# when website is up, delete all cert file.
+
+HOST=$1
+DST_PATH=$2
+
+delete_file() {
+ if [ -d $DST_PATH ]; then
+ echo "found $DST_PATH" > /dev/stdout
+ rm -rf $DST_PATH/*
+ else
+ echo "$DST_PATH not found" > /dev/stdout
+ fi
+}
+
+while true;
+do
+ sleep 20
+ RET=$(curl -k -s -w "%{http_code}\n" -o /dev/null $HOST)
+ if [ $RET == "200" ]; then
+ echo "website is up!!!" > /dev/stdout
+ delete_file
+ if [ $? -eq 0 ]; then
+ echo "successful delete file, exit" > /dev/stdout
+ break
+ else
+ echo "failed to delete file" > /dev/stdout
+ fi
+ else
+ echo "waiting for website up, http_status: $RET" > /dev/stdout
+ fi
+done
\ No newline at end of file
diff --git a/deploy/nginx.conf b/deploy/nginx.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5e3044d4f59bbf7caabbcee85435769ae3c1ee4a
--- /dev/null
+++ b/deploy/nginx.conf
@@ -0,0 +1,124 @@
+user $NGINX_USER;
+error_log /dev/stdout info;
+pid /var/run/nginx.pid;
+worker_processes auto;
+worker_rlimit_nofile 65535;
+events {
+ use epoll;
+ worker_connections 65535;
+}
+
+
+http {
+ include /etc/nginx/mime.types;
+
+ log_format main '[$time_local] remote_addr: $http_x_real_ip, request: "$request", '
+ 'status: $status, body_bytes_sent: $body_bytes_sent, http_referer: "$http_referer", '
+ 'http_user_agent: "$http_user_agent"';
+
+ access_log /dev/stdout main;
+
+ server_tokens off;
+ autoindex off;
+
+ port_in_redirect off;
+ absolute_redirect off;
+
+ client_header_buffer_size 1k;
+ large_client_header_buffers 4 8k;
+ client_body_buffer_size 16k;
+ client_max_body_size 50m;
+
+ client_header_timeout 10;
+ client_body_timeout 10;
+ client_body_in_file_only off;
+ keepalive_timeout 10 30;
+ send_timeout 10;
+
+ proxy_hide_header X-Powered-By;
+
+
+ limit_conn_zone $http_x_real_ip zone=limitperip:10m;
+ limit_req_zone $http_x_real_ip zone=frontendratelimit:10m rate=2000r/s;
+ limit_req_zone $http_x_real_ip zone=ratelimit:10m rate=200r/s;
+ underscores_in_headers on;
+
+ gzip on;
+ gzip_min_length 1k;
+ gzip_buffers 4 16k;
+ gzip_comp_level 5;
+ gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/javascript application/x-httpd-php application/json;
+ gzip_vary on;
+
+ server {
+ listen ${LOCAL_IP}:8080 ssl;
+ server_name localhost;
+ charset utf-8;
+ limit_conn limitperip 10;
+ ssl_session_tickets off;
+ ssl_session_timeout 10s;
+ ssl_session_cache shared:SSL:10m;
+
+ ssl_certificate "cert/server.crt";
+ ssl_certificate_key "cert/server.key";
+ ssl_password_file "cert/abc.txt";
+ ssl_dhparam "cert/dhparam.pem";
+ ssl_ecdh_curve auto;
+ ssl_protocols TLSv1.2;
+ ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384";
+ ssl_prefer_server_ciphers on;
+ ssl_stapling on;
+ ssl_stapling_verify on;
+
+ resolver 8.8.8.8 8.8.4.4 valid=60s;
+ resolver_timeout 5s;
+
+ if ($request_method !~ ^(GET|HEAD|POST)$) {
+ return 444;
+ }
+
+ location ~ /\. {
+ deny all;
+ return 404;
+ }
+ location / {
+ proxy_set_header X-Forwarded-For $http_x_real_ip;
+ proxy_set_header Host $host;
+
+ add_header X-XSS-Protection "1; mode=block";
+ add_header X-Frame-Options DENY;
+ add_header X-Content-Type-Options nosniff;
+ add_header Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval' https://hm.baidu.com https://unpkg.com/@opensig/; object-src 'none'; frame-src 'none'";
+ add_header Cache-Control "no-cache,no-store,must-revalidate";
+ add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
+ add_header Pragma no-cache;
+ add_header Expires 0;
+
+ # 静态资源缓存
+ location ~* ^/(css|js|img)(/|$) {
+ add_header X-XSS-Protection "1; mode=block";
+ add_header X-Frame-Options DENY;
+ add_header X-Content-Type-Options nosniff;
+ add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
+ add_header Content-Security-Policy "script-src 'self'; object-src 'none'; frame-src 'none'";
+ add_header Cache-Control "public,max-age=1209600";
+ expires 14d;
+ }
+
+ root /usr/share/nginx/www;
+ index index.html index.htm;
+ }
+
+ error_page 401 402 403 405 406 407 413 414 /error.html;
+ error_page 500 501 502 503 504 505 /error.html;
+ error_page 404 /404.html;
+
+ location = /error.html {
+ root /usr/share/nginx/www;
+ }
+
+ location = /404.html {
+ root /usr/share/nginx/www;
+ }
+ }
+}
diff --git a/i18n/en/en.toml b/i18n/en/en.toml
new file mode 100644
index 0000000000000000000000000000000000000000..989612b3dabfb9670dcb3792f9e618cd7306dba5
--- /dev/null
+++ b/i18n/en/en.toml
@@ -0,0 +1,388 @@
+#list page
+[lts_version]
+other = "Long-Term Supported Versions"
+
+[innovation_version]
+other = "Innovation Versions"
+
+[archive_version]
+other = "Archived Versions (No Longer Maintained)"
+
+[document_home]
+other = "Documentation"
+
+[hot_document]
+other = "Hot documents"
+
+[login_text]
+other = "Login"
+
+[logout_text]
+other = "Logout"
+
+[zone_text]
+other = "User Center"
+
+[container_header]
+other = "Installation Guide"
+
+[container_link]
+other = "/en/docs/22.03_LTS_SP2/docs/Installation/Installation.html"
+
+[secGear_header]
+other = "Administrator Guide"
+
+[secGear_link]
+other = "/en/docs/22.03_LTS_SP2/docs/Administration/administration.html"
+
+[StratoVirt_header]
+other = "Container User Guide"
+
+[StratoVirt_link]
+other = "/en/docs/22.03_LTS_SP2/docs/Container/container.html"
+
+[A-Tune_header]
+other = "A-Tune User Guide"
+
+[A-Tune_link]
+other = "/en/docs/22.03_LTS_SP2/docs/A-Tune/A-Tune.html"
+
+[A-Ops_header]
+other = "A-Ops User Guide"
+
+[A-Ops_link]
+other = "/en/docs/22.03_LTS_SP2/docs/A-Ops/overview.html"
+
+[Security_header]
+other = "Security Hardening Guide"
+
+[Security_link]
+other = "/en/docs/22.03_LTS_SP2/docs/SecHarden/secHarden.html"
+
+
+[document]
+other = "Document"
+
+[version_selection]
+other = "Version selection"
+
+[version_text]
+other = "Version"
+
+[current_lang]
+other = "English"
+
+[search]
+other = "search"
+
+[search_placeholder]
+other = "Input content"
+
+[search_no_data_tip]
+other = "No content found."
+
+[quick_links]
+other = "Quick links"
+
+[kunpeng_community]
+other = "Kunpeng community"
+
+[document_link]
+other = "Documentation"
+
+[openeuler_document]
+other = "openEuler Documentation"
+
+[catalog_text]
+other = "Content"
+
+[other_text]
+other = "Reference Links"
+
+[know_88_1]
+other = "/en/docs/23.03/docs/Releasenotes/terms-of-use.html"
+[know_89_1]
+other = "/en/docs/22.03_LTS_SP1/docs/Releasenotes/terms-of-use.html"
+[know_90_1]
+other = "/en/docs/22.09/docs/Releasenotes/terms-of-use.html"
+[know_91_1]
+other = "/en/docs/22.03_LTS/docs/Releasenotes/terms-of-use.html"
+[know_92_1]
+other = "/en/docs/20.03_LTS_SP3/docs/Releasenotes/terms-of-use.html"
+[know_93_1]
+other = "/en/docs/21.09/docs/Releasenotes/terms-of-use.html"
+[know_94_1]
+other = "/en/docs/20.03_LTS_SP2/docs/Releasenotes/terms-of-use.html"
+[know_95_1]
+other = "/en/docs/21.03/docs/Releasenotes/terms-of-use.html"
+[know_96_1]
+other = "/en/docs/20.03_LTS_SP1/docs/Releasenotes/terms-of-use.html"
+[know_97_1]
+other = "/en/docs/20.09/docs/Releasenotes/terms-of-use.html"
+[know_98_1]
+other = "/en/docs/20.03_LTS/docs/Releasenotes/terms-of-use.html"
+[version_88]
+other = "23.03"
+[version_89]
+other = "22.03 LTS SP1"
+[version_90]
+other = "22.09"
+[version_91]
+other = "22.03 LTS"
+[version_92]
+other = "20.03 LTS SP3"
+[version_93]
+other = "21.09"
+[version_94]
+other= "20.03 LTS SP2"
+[version_95]
+other = "21.03"
+[version_96]
+other = "20.03 LTS SP1"
+[version_97]
+other= "20.09"
+[version_98]
+other = "20.03 LTS"
+[atom]
+other = "openEuler is an open source project incubated and operated by the OpenAtom Foundation."
+
+[copy_right]
+other = "Copyright © 2025 openEuler. All rights reserved."
+
+[attention]
+other = "WeChat Subscription"
+
+[source_code]
+other = "View source on Gitee"
+
+[feedbook]
+other = "Feedback"
+
+[previous]
+other = "Previous"
+
+[next]
+other = "Next"
+
+[evaluate]
+other = "Rating"
+
+#bug start
+
+[issue_detail]
+other = "View Details"
+
+[issue_1]
+other = "Specifications and Common Mistakes"
+
+[issue_1_1]
+other = "Misspellings or punctuation mistakes;"
+
+[issue_1_2]
+other = "Incorrect links, empty cells, or wrong formats;"
+
+[issue_1_3]
+other = "Chinese characters in English context;"
+
+[issue_1_4]
+other = "Minor inconsistencies between the UI and descriptions;"
+
+[issue_1_5]
+other = "Low writing fluency that does not affect understanding;"
+
+[issue_1_6]
+other = "Incorrect version numbers, including software package names and version numbers on the UI."
+
+[issue_2]
+other = "Usability"
+
+[issue_2_1]
+other = "Incorrect or missing key steps;"
+
+[issue_2_2]
+other = "Missing prerequisites or precautions;"
+
+[issue_2_3]
+other = "Ambiguous figures, tables, or texts;"
+
+[issue_2_4]
+other = "Unclear logic, such as missing classifications, items, and steps."
+
+[issue_3]
+other = "Correctness"
+
+[issue_3_1]
+other = "Technical principles, function descriptions, or specifications inconsistent with those of the software;"
+
+[issue_3_2]
+other = "Incorrect schematic or architecture diagrams;"
+
+[issue_3_3]
+other = "Incorrect commands or command parameters;"
+
+[issue_3_4]
+other = "Incorrect code;"
+
+[issue_3_5]
+other = "Commands inconsistent with the functions;"
+
+[issue_3_6]
+other = "Wrong screenshots."
+
+[issue_4]
+other = "Risk Warnings"
+
+[issue_4_1]
+other = "Lack of risk warnings for operations that may damage the system or important data."
+
+[issue_5]
+other = "Content Compliance"
+
+[issue_5_1]
+other = "Contents that may violate applicable laws and regulations or geo-cultural context-sensitive words and expressions;"
+
+[issue_5_2]
+other = "Copyright infringement."
+
+[issue_title]
+other = "Bug Catching"
+
+[issue_participantion]
+other = "Click to submit bugs"
+
+[issue_part]
+other = "Buggy Content"
+
+[issue_part_placeholder]
+other = "Copy and paste the buggy document content here."
+
+[issue_reason]
+other = "Bug Description"
+
+[issue_reason_placeholder]
+other = "Describe the bug so that we can quickly locate the problem."
+
+[issue_submit_type]
+other = "Submit As"
+
+[issue_submit_type1]
+other = "Issue"
+
+[issue_submit_type2]
+other = "PR"
+
+[issue_tip1]
+other = "It's a little complicated...."
+
+[issue_tip2]
+other = "I'd like to ask someone."
+
+[PR_tip1]
+other = "Just a small problem."
+
+[PR_tip2]
+other = "I can fix it online!"
+
+[issue_type]
+other = "Bug Type"
+
+[satisfaction]
+other = "How satisfied are you with this document"
+
+[low_score]
+other = "Not satisfied at all"
+
+[high_score]
+other = "Very satisfied"
+
+[join_reason]
+other = "请问是什么原因让您参与到这个问题中"
+
+[own_job]
+other = "本职工作"
+
+[job_wanted]
+other = "求职"
+
+[technology]
+other = "技术兴趣"
+
+[study]
+other = "学习"
+
+[email]
+other = "Your email address"
+
+[text_email]
+other = "We may contact you through email in regard to the bug fixing solution. You will also be notified through email if you win any prize during the activity."
+
+[email_placeholder]
+other = "Your email address"
+
+[login_tip]
+other = "Error 500 reported.Log in to Gitee first."
+
+[submit_tip]
+other = "Click to create an issue. An issue template will be automatically generated based on your feedback."
+
+[privacy_text]
+other = "By submitting the contents, you fully understand and agree to the terms of the openEuler "
+
+[privacy_link]
+other = "Privacy Policy."
+
+[btn_submit]
+other = "Submit"
+
+[licensed_1]
+other = "Licensed under"
+
+[licensed_2]
+other = "the MulanPSL2"
+
+[back]
+other = "Back to Top"
+
+[questionnaire]
+other = "Bug Catching"
+
+#bug end
+
+#search page
+
+[result_1]
+other = " "
+
+[result_2]
+other = " search results about "
+
+[result_3]
+other = " are found"
+
+[hot_docs_version]
+other = "20.03 LTS"
+
+[cancel]
+other = "cancel"
+
+[atom-text]
+other = "openEuler is an open source project incubated and operated by the OpenAtom Foundation."
+[brand]
+other = "Trademark"
+[privacy]
+other = "Privacy Policy"
+[legal]
+other = "Legal Notice"
+[cookies]
+other = "About Cookies"
+[lang]
+other = "en"
+[openEuler]
+other = "https://www.openeuler.org/en/"
+[version_tip]
+other = "Documents vary with versions, Select one as required."
+
+[approval1]
+other = "J. ICP B. No. 2020036654-1"
+[approval2]
+other = "J.G.W.A.B. No. 11030102011597"
\ No newline at end of file
diff --git a/i18n/zh/zh.toml b/i18n/zh/zh.toml
new file mode 100644
index 0000000000000000000000000000000000000000..f8e896fd77bcc3c31de2bc7132dea1f311fd7bac
--- /dev/null
+++ b/i18n/zh/zh.toml
@@ -0,0 +1,400 @@
+#list page
+[lts_version]
+other = "长期支持版本"
+
+[innovation_version]
+other = "社区创新版本"
+
+[archive_version]
+other = "归档版本(停止维护)"
+
+[document_home]
+other = "文档首页"
+
+[version_text]
+other = "版本"
+
+[current_lang]
+other = "中文"
+
+[search]
+other = "搜索"
+
+[search_placeholder]
+other = "请输入搜索内容"
+
+[search_no_data_tip]
+other = "未搜索到内容"
+
+[document_link]
+other = "Documentation"
+
+[openeuler_document]
+other = "openEuler Documentation"
+
+[login_text]
+other = "登录"
+
+[logout_text]
+other = "退出登录"
+
+[zone_text]
+other = "个人中心"
+
+[catalog_text]
+other = "目录"
+
+
+[other_text]
+other = "友好社区"
+
+[know_88_1]
+other = "/zh/docs/23.03/docs/Releasenotes/%E6%B3%95%E5%BE%8B%E5%A3%B0%E6%98%8E.html"
+[know_89_1]
+other = "/zh/docs/22.03_LTS_SP1/docs/Releasenotes/%E6%B3%95%E5%BE%8B%E5%A3%B0%E6%98%8E.html"
+[know_90_1]
+other = "/zh/docs/22.09/docs/Releasenotes/%E6%B3%95%E5%BE%8B%E5%A3%B0%E6%98%8E.html"
+[know_91_1]
+other = "/zh/docs/22.03_LTS/docs/Releasenotes/%E6%B3%95%E5%BE%8B%E5%A3%B0%E6%98%8E.html"
+[know_92_1]
+other = "/zh/docs/20.03_LTS_SP3/docs/Releasenotes/%E6%B3%95%E5%BE%8B%E5%A3%B0%E6%98%8E.html"
+[know_93_1]
+other = "/zh/docs/21.09/docs/Releasenotes/%E6%B3%95%E5%BE%8B%E5%A3%B0%E6%98%8E.html"
+[know_94_1]
+other = "/zh/docs/20.03_LTS_SP2/docs/Releasenotes/%E6%B3%95%E5%BE%8B%E5%A3%B0%E6%98%8E.html"
+[know_95_1]
+other = "/zh/docs/21.03/docs/Releasenotes/%E6%B3%95%E5%BE%8B%E5%A3%B0%E6%98%8E.html"
+[know_96_1]
+other = "/zh/docs/20.03_LTS_SP1/docs/Releasenotes/%E6%B3%95%E5%BE%8B%E5%A3%B0%E6%98%8E.html"
+[know_97_1]
+other = "/zh/docs/20.09/docs/Releasenotes/%E6%B3%95%E5%BE%8B%E5%A3%B0%E6%98%8E.html"
+[know_98_1]
+other = "/zh/docs/20.03_LTS/docs/Releasenotes/%E6%B3%95%E5%BE%8B%E5%A3%B0%E6%98%8E.html"
+[version_88]
+other = "23.03"
+[version_89]
+other = "22.03 LTS SP1"
+[version_90]
+other = "22.09"
+[version_91]
+other = "22.03 LTS"
+[version_92]
+other = "20.03 LTS SP3"
+[version_93]
+other = "21.09"
+[version_94]
+other= "20.03 LTS SP2"
+[version_95]
+other = "21.03"
+[version_96]
+other = "20.03 LTS SP1"
+[version_97]
+other= "20.09"
+[version_98]
+other = "20.03 LTS"
+
+
+[hot_document]
+other = "热门文档"
+
+[container_header]
+other = "安装指南"
+
+[container_link]
+other = "/zh/docs/22.03_LTS_SP2/docs/Installation/installation.html"
+
+[secGear_header]
+other = "管理员指南"
+
+[secGear_link]
+other = "/zh/docs/22.03_LTS_SP2/docs/Administration/administration.html"
+
+[StratoVirt_header]
+other = "容器用户指南"
+
+[StratoVirt_link]
+other = "/zh/docs/22.03_LTS_SP2/docs/Container/container.html"
+
+[A-Tune_header]
+other = "A-Tune 用户指南"
+
+[A-Tune_link]
+other = "/zh/docs/22.03_LTS_SP2/docs/A-Tune/A-Tune.html"
+
+[A-Ops_header]
+other = "A-Ops 用户指南"
+
+[A-Ops_link]
+other = "/zh/docs/22.03_LTS_SP2/docs/A-Ops/overview.html"
+
+[Security_header]
+other = "安全加固指南"
+
+[Security_link]
+other = "/zh/docs/22.03_LTS_SP2/docs/SecHarden/secHarden.html"
+
+
+[document]
+other = "文档"
+
+[version_selection]
+other = "版本选择"
+
+[quick_links]
+other = "快速链接"
+
+[kunpeng_community]
+other = "鲲鹏社区"
+
+[atom]
+other = "openEuler 是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目"
+
+[copy_right]
+other = "版权所有 © 2025 openEuler 保留一切权利"
+
+[licensed_1]
+other = "遵循"
+
+[licensed_2]
+other = "木兰宽松许可证第2版(MulanPSL2)"
+
+[attention]
+other = "扫码关注公众号"
+
+[source_code]
+other = "在Gitee上查看源文件"
+
+[feedbook]
+other = "反馈问题"
+
+[previous]
+other = "上一篇"
+
+[next]
+other = "下一篇"
+
+[evaluate]
+other = "评价"
+
+#bug start
+
+[issue_detail]
+other = "查看详情"
+
+[issue_1]
+other = "规范和低错类"
+
+[issue_1_1]
+other = "错别字或拼写错误;标点符号使用错误;"
+
+[issue_1_2]
+other = "链接错误、空单元格、格式错误;"
+
+[issue_1_3]
+other = "英文中包含中文字符;"
+
+[issue_1_4]
+other = "界面和描述不一致,但不影响操作;"
+
+[issue_1_5]
+other = "表述不通顺,但不影响理解;"
+
+[issue_1_6]
+other = "版本号不匹配:如软件包名称、界面版本号;"
+
+[issue_2]
+other = "易用性"
+
+[issue_2_1]
+other = "关键步骤错误或缺失,无法指导用户完成任务;"
+
+[issue_2_2]
+other = "缺少必要的前提条件、注意事项等;"
+
+[issue_2_3]
+other = "图形、表格、文字等晦涩难懂;"
+
+[issue_2_4]
+other = "逻辑不清晰,该分类、分项、分步骤的没有给出;"
+
+[issue_3]
+other = "正确性"
+
+[issue_3_1]
+other = "技术原理、功能、规格等描述和软件不一致,存在错误;"
+
+[issue_3_2]
+other = "原理图、架构图等存在错误;"
+
+[issue_3_3]
+other = "命令、命令参数等错误;"
+
+[issue_3_4]
+other = "代码片段错误;"
+
+[issue_3_5]
+other = "命令无法完成对应功能;"
+
+[issue_3_6]
+other = "界面错误,无法指导操作;"
+
+[issue_4]
+other = "风险提示"
+
+[issue_4_1]
+other = "对重要数据或系统存在风险的操作,缺少安全提示;"
+
+[issue_5]
+other = "内容合规"
+
+[issue_5_1]
+other = "违反法律法规,涉及政治、领土主权等敏感词;"
+
+[issue_5_2]
+other = "内容侵权;"
+
+[issue_title]
+other = "文档捉虫"
+
+[issue_participantion]
+other = "点击参与文档捉虫"
+
+[issue_part]
+other = "“有虫”文档片段"
+
+[issue_part_placeholder]
+other = "点击输入将“有虫”文档复制,粘贴到此处。"
+
+[issue_reason]
+other = "问题描述"
+
+[issue_reason_placeholder]
+other = "点击输入详细问题描述,以帮助我们快速定位问题。"
+
+[issue_submit_type]
+other = "提交类型"
+
+[issue_submit_type1]
+other = "issue"
+
+[issue_submit_type2]
+other = "PR"
+
+[issue_tip1]
+other = "有点复杂..."
+
+[issue_tip2]
+other = "找人问问吧。"
+
+[PR_tip1]
+other = "小问题,全程线上修改..."
+
+[PR_tip2]
+other = "一键搞定!"
+
+[issue_type]
+other = "问题类型"
+
+[satisfaction]
+other = "您对文档的总体满意度"
+
+[low_score]
+other = "非常不满意"
+
+[high_score]
+other = "非常满意"
+
+[join_reason]
+other = "请问是什么原因让您参与到这个问题中"
+
+[own_job]
+other = "本职工作"
+
+[job_wanted]
+other = "求职"
+
+[technology]
+other = "技术兴趣"
+
+[study]
+other = "学习"
+
+[email]
+other = "您的邮箱"
+
+[text_email]
+other = "我们可能针对您提出的问题,向您发送邮件反馈进行方案。如有获奖信息,也会通过此方式通知您。"
+
+[email_placeholder]
+other = "点击输入您的邮箱"
+
+[login_tip]
+other = "封印500报错,需保持gitee在登录状态"
+
+[submit_tip]
+other = "根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。"
+
+[privacy_text]
+other = "您理解并同意,您填写并提交的内容,即视为您已充分阅读并同意openEuler的"
+
+[privacy_link]
+other = "《隐私政策》"
+
+[btn_submit]
+other = "提交"
+
+[back]
+other = "返回顶部"
+
+[questionnaire]
+other = "文档捉虫"
+
+#bug end
+
+#search page
+
+[result_1]
+other = "一共有"
+
+[result_2]
+other = "个关于"
+
+[result_3]
+other = "的结果"
+
+[hot_docs_version]
+other = "20.03 LTS"
+
+[relative]
+other = "关于openEuler"
+
+[website]
+other = "openEuler官网"
+
+[other_link]
+other = "友情链接"
+
+[cancel]
+other = "取消"
+
+[atom-text]
+other = "openEuler 是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目"
+[brand]
+other = "品牌"
+[privacy]
+other = "隐私政策"
+[legal]
+other = "法律声明"
+[cookies]
+other = "关于cookies"
+[lang]
+other = "zh"
+[openEuler]
+other = "https://www.openeuler.org/zh/"
+[version_tip]
+other = "不同版本内容存在差异,请选择对应版本文档。"
+
+[approval1]
+other = "京ICP备2020036654号-1"
+[approval2]
+other = "京公网安备 11030102011597 号"
\ No newline at end of file
diff --git a/layouts/404.html b/layouts/404.html
new file mode 100644
index 0000000000000000000000000000000000000000..c7c1a7da351ae944c9e98c097accf2c5adab8534
--- /dev/null
+++ b/layouts/404.html
@@ -0,0 +1,17 @@
+
+
+
+{{ partial "head.html" . }}
+
+
+
+
+
+
+
{{ .Site.Params.notFound }}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layouts/docs/baseof.html b/layouts/docs/baseof.html
new file mode 100644
index 0000000000000000000000000000000000000000..ea6b3379beb18cd0d4c789f97673d15fa10cac1a
--- /dev/null
+++ b/layouts/docs/baseof.html
@@ -0,0 +1,151 @@
+
+
+ {{ partial "head.html" . }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $versionArr := split $.File.Path "docs\\" }}
+ {{ $version := index $versionArr 1}}
+ {{ $version := split $version "\\" }}
+ {{ $version := index $version 0}}
+ {{ $lang := .Site.LanguageCode}}
+
+ {{ partial "nav.html" . }}
+ {{ partial "version.html" . }}
+
+
+
+
+
+ {{ template "main" . }}
+ {{ partial "inside-nav.html"}}
+ {{ partial "turn.html"}}
+
+
+
+ {{ partial "pcfooter.html" . }}
+
+
+
+
+
+
+
+
+
{{ i18n "cancel" }}
+
+
+
+
+
+
+
{{ i18n "search_no_data_tip" }}
+
+
+
+
+
+
+
+
+ {{ partial "scripts.html" . }}
+
+
+
+
+
+
diff --git a/layouts/docs/list.html b/layouts/docs/list.html
new file mode 100644
index 0000000000000000000000000000000000000000..2d49b3bcdf65e7ecd2e1ace4c94295032dc73c2e
--- /dev/null
+++ b/layouts/docs/list.html
@@ -0,0 +1,5 @@
+{{ define "main" }}
+
+ {{- .Content -}}
+
+{{ end }}
\ No newline at end of file
diff --git a/layouts/docs/single.html b/layouts/docs/single.html
new file mode 100644
index 0000000000000000000000000000000000000000..5abc3641e44222321443f67be461347cf0fd05dc
--- /dev/null
+++ b/layouts/docs/single.html
@@ -0,0 +1,10 @@
+{{ define "main" }}
+
+ {{ $pt := replaceRE "href=\"([^http].*\\.md)\"" "href=\"${1}.html\"" .Content }}
+ {{ $pt1 := (replace $pt ".md.html" ".html") }}
+ {{ $pt2 := (replace $pt1 ".md#" ".html#") }}
+ {{ $st := (replace $pt2 "‘" "'") }}
+ {{ $ot := (replace $st "’" "'") }}
+ {{- $ot | safeHTML -}}
+
+{{ end }}
\ No newline at end of file
diff --git a/layouts/index.html b/layouts/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..98e2d627db07a55dfb018fea112c193572072fa0
--- /dev/null
+++ b/layouts/index.html
@@ -0,0 +1,258 @@
+
+
+
+{{ partial "head.html" . }}
+
+
+
+
+
+
+
+
+
+
+
+ {{i18n "lts_version"}}
+
+
+
+
+ {{ if .Site.Params.showInnovation }}
+
+
+ {{i18n "innovation_version"}}
+
+
+
+
+ {{ end }}
+
+
+ {{i18n "archive_version"}}
+
+
+
+
+
+
+
+
+
+ {{ partial "doc_hot.html" . }}
+ {{ if eq .Site.LanguageCode "zh"}}
+ {{ partial "doc_map.html" . }}
+ {{ end }}
+ {{ if eq .Site.LanguageCode "en"}}
+ {{ partial "doc_map_22.03_LTS_SP1_en.html" . }}
+ {{ end }}
+
+ {{ partial "pcfooter.html" . }}
+
+
+
+
+
+
+
+
+
+
+
+
{{ i18n "cancel" }}
+
+
+
+
+
+
{{ i18n "search_no_data_tip" }}
+
+
+
+
+
+
+
+
LEARNING
+
{{i18n "document"}}
+
+
+
+
+
{{ i18n "version_text" }}
+
+
+ {{ partial "doc_hot.html" . }}
+ {{ if eq .Site.LanguageCode "zh"}}
+ {{ partial "doc_map.html" . }}
+ {{ end }}
+ {{ if eq .Site.LanguageCode "en"}}
+ {{ partial "doc_map_22.03_LTS_SP1_en.html" . }}
+ {{ end }}
+
+ {{ partial "float-mobile.html" . }}
+ {{ partial "pcfooter.html" . }}
+
+
+
{{ partial "svg/icon-tip.html" . }}
+
+ {{ partial "svg/icon-done-solid.html" . }}
+
+
+
+ {{ partial "inside-nav.html" . }}
+ {{ partial "scripts.html" . }}
+
+
+
+
+
\ No newline at end of file
diff --git a/layouts/partials/doc_hot.html b/layouts/partials/doc_hot.html
new file mode 100644
index 0000000000000000000000000000000000000000..9507a2ec452e1ab93d0175aaf4fbacf3713adbe1
--- /dev/null
+++ b/layouts/partials/doc_hot.html
@@ -0,0 +1,28 @@
+
+
+
+
HOT
+
{{i18n "container_header"}}
+
+
+
HOT
+
{{i18n "secGear_header"}}
+
+
+
HOT
+
{{i18n "StratoVirt_header"}}
+
+
+
HOT
+
{{i18n "A-Tune_header"}}
+
+
+
HOT
+
{{i18n "A-Ops_header"}}
+
+
+
HOT
+
{{i18n "Security_header"}}
+
+
+
\ No newline at end of file
diff --git a/layouts/partials/doc_map.html b/layouts/partials/doc_map.html
new file mode 100644
index 0000000000000000000000000000000000000000..46205d6f6bb282ccde00e7d24fed6064abe3beac
--- /dev/null
+++ b/layouts/partials/doc_map.html
@@ -0,0 +1,202 @@
+
+
+
流程与规范
+
+
学习
+
+
+
+
+
+
+
+
+
diff --git a/layouts/partials/doc_map_22.03_LTS_SP1_en.html b/layouts/partials/doc_map_22.03_LTS_SP1_en.html
new file mode 100644
index 0000000000000000000000000000000000000000..c534e8cad011da81d031bf068173a2df728e1323
--- /dev/null
+++ b/layouts/partials/doc_map_22.03_LTS_SP1_en.html
@@ -0,0 +1,239 @@
+
+
+
+ Getting Started
+
+
+
+ Server
+
+
+
+ Installation
+
+
+
+ System Management
+
+
+
+ Network
+
+
+
+ Maintenance
+
+
+
+ Security
+
+
+
+ Performance
+
+
+
+ Toolchain
+
+
+
+
+ Service
+
+
+
+ Desktop
+
+
+
+ Embedded
+
+
+
+ Cloud Computing
+
+
+
+ Virtualization
+
+
+
+ Cloud Native
+
+
+
+ Edge Computing
+
+
+
+
+
+
+ Package Management
+
+
+
+
+
+
+
+ Integration Test
+
+
+
+
+
+ OS Upgrade and Porting
+
+
+
+
+
+ Image Tailoring
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layouts/partials/docs/docsVersion.html b/layouts/partials/docs/docsVersion.html
new file mode 100644
index 0000000000000000000000000000000000000000..c632e3a9d55c170b347850345a075b9f775c2c46
--- /dev/null
+++ b/layouts/partials/docs/docsVersion.html
@@ -0,0 +1,60 @@
+
+{{ $version := "1.0.0"}}
+{{ $versionArr := split $.File.Path "docs/" }}
+{{ $version := index $versionArr 1}}
+{{ $version := split $version "/" }}
+{{ $version := index $version 0}}
+{{ $lang := .Site.LanguageCode}}
+
+
+
+
{{ i18n "doc_version"}}
+
+
+ {{ range .Site.Data.docsVersion }}
+ {{ if eq $lang "zh-cn" }}
+ {{.version}}
+ {{ else }}
+ {{.version}}
+ {{ end }}
+ {{ end }}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layouts/partials/docs/menu-bundle.html b/layouts/partials/docs/menu-bundle.html
new file mode 100644
index 0000000000000000000000000000000000000000..1e4365bc65b60b65c3b8898c11bcf428f6902db3
--- /dev/null
+++ b/layouts/partials/docs/menu-bundle.html
@@ -0,0 +1,24 @@
+{{ template "hrefhack" . }}
+{{ $version := .File.Dir }}
+{{ $versionArr := split $version "docs" }}
+{{ $versionArr := index $versionArr 1 }}
+{{ $versionArr := split $versionArr "/" }}
+{{ $versionArr := index $versionArr 1 }}
+{{ $versionArr := string $versionArr }}
+{{ $versionArr := delimit (slice "docs" $versionArr) "/"}}
+{{ $versionArr := delimit (slice $versionArr "menu" ) "/"}}
+{{ $versionArr := string $versionArr}}
+{{ with .Site.GetPage $versionArr}}
+ {{- .Content -}}
+{{ end }}
+
+
+{{ define "hrefhack" }}
+ {{ $attrEq := "$=" }}
+ {{ $attrVal := .RelPermalink }}
+ {{ if eq .RelPermalink "/" }}
+ {{ $attrEq = "=" }}
+ {{ $attrVal = .Permalink }}
+ {{ end }}
+{{ end }}
+
diff --git a/layouts/partials/docs/menu-filetree.html b/layouts/partials/docs/menu-filetree.html
new file mode 100644
index 0000000000000000000000000000000000000000..abc6fd945b9711c3d41b9564847297660b7b47d5
--- /dev/null
+++ b/layouts/partials/docs/menu-filetree.html
@@ -0,0 +1,59 @@
+{{ $bookSection := default "docs" .Site.Params.BookSection }}
+{{ if eq $bookSection "*" }}
+ {{ .Scratch.Set "BookSections" .Site.Sections }}
+{{ else }}
+ {{ $bookSections := where .Site.Sections "Section" $bookSection }}
+ {{ .Scratch.Set "BookSections" $bookSections }}
+{{ end }}
+
+
+{{ $sections := .Scratch.Get "BookSections" }}
+{{/* If there is only one section to render then render its children, else render all sections */}}
+{{ if eq (len $sections) 1 }}
+ {{ with index $sections 0 }}
+ {{ template "book-section-children" (dict "Section" . "CurrentPage" $.Permalink) }}
+ {{ end }}
+{{ else }}
+
+ {{ range where $sections "Params.bookhidden" "!=" true }}
+ {{ template "book-section" (dict "Section" . "CurrentPage" $.Permalink) }}
+ {{ end }}
+
+{{ end }}
+
+{{ define "book-section" }}
+{{ with .Section }}
+
+ {{ if .Content }}
+ {{ template "book-page-link" (dict "Page" . "CurrentPage" $.CurrentPage) }}
+ {{ else }}
+ {{ partial "docs/title" . }}
+ {{ end }}
+
+ {{ template "book-section-children" (dict "Section" . "CurrentPage" $.CurrentPage) }}
+
+{{ end }}
+{{ end }}
+
+{{ define "book-section-children" }}
+{{ with .Section }}
+
+ {{ range where .Sections "Params.bookhidden" "!=" true }}
+ {{ template "book-section" (dict "Section" . "CurrentPage" $.CurrentPage) }}
+ {{ end }}
+ {{ range where .Pages "Params.bookhidden" "!=" true }}
+
+ {{ template "book-page-link" (dict "Page" . "CurrentPage" $.CurrentPage) }}
+
+ {{ end }}
+
+{{ end }}
+{{ end }}
+
+{{ define "book-page-link" }}
+{{ with .Page }}
+
+ {{ partial "docs/title" . }}
+
+{{ end }}
+{{ end }}
diff --git a/layouts/partials/docs/menu.html b/layouts/partials/docs/menu.html
new file mode 100644
index 0000000000000000000000000000000000000000..75481a8165bc9383882f95e31c7c3559bdd05535
--- /dev/null
+++ b/layouts/partials/docs/menu.html
@@ -0,0 +1,21 @@
+
+
+
+
diff --git a/layouts/partials/docs/search.html b/layouts/partials/docs/search.html
new file mode 100644
index 0000000000000000000000000000000000000000..cab6c1510ea59ab8337d3b045b32e1089a712370
--- /dev/null
+++ b/layouts/partials/docs/search.html
@@ -0,0 +1,7 @@
+{{ if default true .Site.Params.BookSearch }}
+
+{{ end }}
diff --git a/layouts/partials/docs/title.html b/layouts/partials/docs/title.html
new file mode 100644
index 0000000000000000000000000000000000000000..127230697e62cf412079d0166875903791f96167
--- /dev/null
+++ b/layouts/partials/docs/title.html
@@ -0,0 +1,11 @@
+{{ $title := "" }}
+
+{{ if .Title }}
+ {{ $title = .Title }}
+{{ else if and .IsSection .File }}
+ {{ $sections := split (trim .File.Dir "/") "/" }}
+ {{ $title = index ($sections | last 1) 0 | humanize | title }}
+{{ else if and .IsPage .File }}
+ {{ $title = .File.BaseFileName | humanize | title }}
+{{ end }}
+
diff --git a/layouts/partials/float-mobile.html b/layouts/partials/float-mobile.html
new file mode 100644
index 0000000000000000000000000000000000000000..99813d55c51e9016706dc2040783a69ea7036b68
--- /dev/null
+++ b/layouts/partials/float-mobile.html
@@ -0,0 +1,19 @@
+
+
+
+
+ {{ partial "svg/icon-smile-mobile.html" . }}
+
+
+ 您对
+ openEuler文档
+ 的整体满意度如何?
+
+
+
{{ partial "svg/icon-cancel.html" . }}
+
+
+
+ {{ partial "float-popup.html" . }}
+
+
diff --git a/layouts/partials/float-popup.html b/layouts/partials/float-popup.html
new file mode 100644
index 0000000000000000000000000000000000000000..d0d8fa31ff0159b304a81f1181bd0640aaefcc1a
--- /dev/null
+++ b/layouts/partials/float-popup.html
@@ -0,0 +1,42 @@
+
diff --git a/layouts/partials/float.html b/layouts/partials/float.html
new file mode 100644
index 0000000000000000000000000000000000000000..80520f3e2980e58434c5b7c28cc74127a7eeb21b
--- /dev/null
+++ b/layouts/partials/float.html
@@ -0,0 +1,55 @@
+
+
+
{{i18n "issue_title"}}
+
{{ partial "svg/icon-close.html" . }}
+
+
+
+
+
+ {{ partial "svg/icon-headset.html" . }}
+
+
+
+
+
+
+
{{ partial "svg/icon-top.html" . }}
+
+
diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html
new file mode 100644
index 0000000000000000000000000000000000000000..80aaecc0cfe39783f331d438e898db736247bb96
--- /dev/null
+++ b/layouts/partials/footer.html
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/layouts/partials/h5_footer.html b/layouts/partials/h5_footer.html
new file mode 100644
index 0000000000000000000000000000000000000000..2095031c5fdf0654ade3c16b5683bdeb048265d5
--- /dev/null
+++ b/layouts/partials/h5_footer.html
@@ -0,0 +1,15 @@
+
diff --git a/layouts/partials/head.html b/layouts/partials/head.html
new file mode 100644
index 0000000000000000000000000000000000000000..b9eb2e9130976e4975a20f8454f319db8b284812
--- /dev/null
+++ b/layouts/partials/head.html
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+ {{ $versionArr := split $.File.Path "docs/" }}
+ {{ $version := index $versionArr 1}}
+ {{ $version := split $version "/" }}
+ {{ $version := index $version 0}}
+ {{ $title := "" }}
+ {{ if .Title }}
+ {{ $title = .Title }}
+ {{ else if and .IsSection .File }}
+ {{ $sections := split (trim .File.Dir "/") "/" }}
+ {{ $title = index ($sections | last 1) 0 | title }}
+ {{ else if and .IsPage .File }}
+ {{ $title = .File.BaseFileName }}
+ {{ end }}
+ {{ $path := "" }}
+ {{ with .File }}
+ {{ $path = .Path }}
+ {{ else }}
+ {{ $path = .Path }}
+ {{ end }}
+ {{ $suffix := "" }}
+ {{ if $path }}
+ {{ $suffix = site.Params.suffix }}
+ {{ else }}
+ {{ $suffix = site.Params.rootSuffix }}
+ {{ end }}
+ {{ if $version}}
+ {{ $title }} | {{ $suffix }} | v{{ $version }}
+ {{ else }}
+ {{ $title }} | {{ $suffix }}
+ {{ end }}
+ {{ if default .Summary .Description }}
+
+ {{ else if .Site.Params.DefaultDescription }}
+
+ {{ end }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ if ne .Site.LanguageCode "ru"}}
+
+ {{ end }}
+
+
+
+
+
\ No newline at end of file
diff --git a/layouts/partials/inside-nav.html b/layouts/partials/inside-nav.html
new file mode 100644
index 0000000000000000000000000000000000000000..51cc524bf53d3f151028fb000d0f6fa83965fd6b
--- /dev/null
+++ b/layouts/partials/inside-nav.html
@@ -0,0 +1,90 @@
+
+
+ {{ partial "float.html" . }}
+
\ No newline at end of file
diff --git a/layouts/partials/link.html b/layouts/partials/link.html
new file mode 100644
index 0000000000000000000000000000000000000000..6422c2b02c2c65b35c0229df77ebd4e616f041d6
--- /dev/null
+++ b/layouts/partials/link.html
@@ -0,0 +1,38 @@
+
\ No newline at end of file
diff --git a/layouts/partials/nav.html b/layouts/partials/nav.html
new file mode 100644
index 0000000000000000000000000000000000000000..34d01d9d7adb133d6e54befa8ff5b9034736e185
--- /dev/null
+++ b/layouts/partials/nav.html
@@ -0,0 +1,100 @@
+
+
+
+
diff --git a/layouts/partials/pcfooter.html b/layouts/partials/pcfooter.html
new file mode 100644
index 0000000000000000000000000000000000000000..08b91fba2703c4c570ce59001066b905cc16bed5
--- /dev/null
+++ b/layouts/partials/pcfooter.html
@@ -0,0 +1,62 @@
+
\ No newline at end of file
diff --git a/layouts/partials/scripts.html b/layouts/partials/scripts.html
new file mode 100644
index 0000000000000000000000000000000000000000..7d40414eb8f49bebaae27b129f0e46ad91112cca
--- /dev/null
+++ b/layouts/partials/scripts.html
@@ -0,0 +1,233 @@
+{{ template "_internal/google_analytics.html" . }}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layouts/partials/search.html b/layouts/partials/search.html
new file mode 100644
index 0000000000000000000000000000000000000000..3ebbe8f7ca9d0adf94d639d26c0b949951e192ef
--- /dev/null
+++ b/layouts/partials/search.html
@@ -0,0 +1,9 @@
+
+
+
{{ i18n "openeuler_document" }}
+
+
+
+
+
+
diff --git a/layouts/partials/slider.html b/layouts/partials/slider.html
new file mode 100644
index 0000000000000000000000000000000000000000..4f5f6d25cf65de80cf7e6c12edcd4d45cbb76d6b
--- /dev/null
+++ b/layouts/partials/slider.html
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/layouts/partials/svg/icon-cancel.html b/layouts/partials/svg/icon-cancel.html
new file mode 100644
index 0000000000000000000000000000000000000000..c5015077f4f49b05b4a39cdc32eff2429a26bc3f
--- /dev/null
+++ b/layouts/partials/svg/icon-cancel.html
@@ -0,0 +1,3 @@
+
+
+
diff --git a/layouts/partials/svg/icon-chat.html b/layouts/partials/svg/icon-chat.html
new file mode 100644
index 0000000000000000000000000000000000000000..256cae7d4b3ff0ca0d79d038092610bef1cd1cf4
--- /dev/null
+++ b/layouts/partials/svg/icon-chat.html
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/layouts/partials/svg/icon-close.html b/layouts/partials/svg/icon-close.html
new file mode 100644
index 0000000000000000000000000000000000000000..11b02eaa148017b1134351f780629790cac0de9e
--- /dev/null
+++ b/layouts/partials/svg/icon-close.html
@@ -0,0 +1,13 @@
+
+ 编组 3备份
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layouts/partials/svg/icon-done-solid.html b/layouts/partials/svg/icon-done-solid.html
new file mode 100644
index 0000000000000000000000000000000000000000..3e3c8059e3bf56611a4bb92b7bba81576ecb7aea
--- /dev/null
+++ b/layouts/partials/svg/icon-done-solid.html
@@ -0,0 +1,3 @@
+
+
+
diff --git a/layouts/partials/svg/icon-down.html b/layouts/partials/svg/icon-down.html
new file mode 100644
index 0000000000000000000000000000000000000000..d6dae06ebda25081b4c34d8de3dd7770da769650
--- /dev/null
+++ b/layouts/partials/svg/icon-down.html
@@ -0,0 +1,4 @@
+
+ chevron-down
+
+
\ No newline at end of file
diff --git a/layouts/partials/svg/icon-headset.html b/layouts/partials/svg/icon-headset.html
new file mode 100644
index 0000000000000000000000000000000000000000..3b7014cf7003c1b0bc1f74d855ee50809f473e29
--- /dev/null
+++ b/layouts/partials/svg/icon-headset.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/layouts/partials/svg/icon-quickissue_dark.html b/layouts/partials/svg/icon-quickissue_dark.html
new file mode 100644
index 0000000000000000000000000000000000000000..4d304206cf31ee3cc3e9dc886368431b37aaaa18
--- /dev/null
+++ b/layouts/partials/svg/icon-quickissue_dark.html
@@ -0,0 +1,22 @@
+
+ quickissue
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layouts/partials/svg/icon-quickissue_light.html b/layouts/partials/svg/icon-quickissue_light.html
new file mode 100644
index 0000000000000000000000000000000000000000..5ba964d3854ce3674940f4b26915ca812c1494a4
--- /dev/null
+++ b/layouts/partials/svg/icon-quickissue_light.html
@@ -0,0 +1,17 @@
+
+ quickissue
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layouts/partials/svg/icon-right.html b/layouts/partials/svg/icon-right.html
new file mode 100644
index 0000000000000000000000000000000000000000..9efa7301f93288565e618feabc180cbe2d57d6ed
--- /dev/null
+++ b/layouts/partials/svg/icon-right.html
@@ -0,0 +1,6 @@
+
+ arrow-right
+
+
+
\ No newline at end of file
diff --git a/layouts/partials/svg/icon-robot.html b/layouts/partials/svg/icon-robot.html
new file mode 100644
index 0000000000000000000000000000000000000000..f28e7ad24c792bc15abeaa924d4aa04d3f121e49
--- /dev/null
+++ b/layouts/partials/svg/icon-robot.html
@@ -0,0 +1,22 @@
+
+ icon/robot
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layouts/partials/svg/icon-robot_dark.html b/layouts/partials/svg/icon-robot_dark.html
new file mode 100644
index 0000000000000000000000000000000000000000..8a627d8a42f8ac3ce6ffb488b3f6b6f5348c94db
--- /dev/null
+++ b/layouts/partials/svg/icon-robot_dark.html
@@ -0,0 +1,29 @@
+
+ icon/robot
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layouts/partials/svg/icon-smile-mobile.html b/layouts/partials/svg/icon-smile-mobile.html
new file mode 100644
index 0000000000000000000000000000000000000000..af950c8fac9aba8360780dc54348f6be787cb939
--- /dev/null
+++ b/layouts/partials/svg/icon-smile-mobile.html
@@ -0,0 +1,19 @@
+
+ 编组 7
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layouts/partials/svg/icon-smile.html b/layouts/partials/svg/icon-smile.html
new file mode 100644
index 0000000000000000000000000000000000000000..40599af1e17d7ff9ec5881f909cf761e30652f94
--- /dev/null
+++ b/layouts/partials/svg/icon-smile.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/layouts/partials/svg/icon-tip.html b/layouts/partials/svg/icon-tip.html
new file mode 100644
index 0000000000000000000000000000000000000000..0ed03dd97b3def02fe254b3341f9b61766ffb085
--- /dev/null
+++ b/layouts/partials/svg/icon-tip.html
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/layouts/partials/svg/icon-top.html b/layouts/partials/svg/icon-top.html
new file mode 100644
index 0000000000000000000000000000000000000000..c571f630a2260ffb113b2de326a2c1603b0300f1
--- /dev/null
+++ b/layouts/partials/svg/icon-top.html
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/layouts/partials/turn.html b/layouts/partials/turn.html
new file mode 100644
index 0000000000000000000000000000000000000000..7a030e01b8b3e63ac0007761ae4c4da732f60dcb
--- /dev/null
+++ b/layouts/partials/turn.html
@@ -0,0 +1,9 @@
+
diff --git a/layouts/partials/version.html b/layouts/partials/version.html
new file mode 100644
index 0000000000000000000000000000000000000000..c2fb295c6d16723a86f3a3c347913d4cd817b75d
--- /dev/null
+++ b/layouts/partials/version.html
@@ -0,0 +1,12 @@
+
+
+
{{i18n "lts_version"}}
+
+
+ {{ if .Site.Params.showInnovation }}
+
+
{{i18n "innovation_version"}}
+
+
+ {{ end }}
+
\ No newline at end of file
diff --git a/static/404.html b/static/404.html
new file mode 100644
index 0000000000000000000000000000000000000000..a95dda065f3845fcd19b60c14710b11b81b82d5b
--- /dev/null
+++ b/static/404.html
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+ openEuler
+
+
+
+
+
+
+
404 Page Not Found
+
+
+
+
\ No newline at end of file
diff --git a/static/baidu_verify_codeva-tt9d17tf7q.html b/static/baidu_verify_codeva-tt9d17tf7q.html
new file mode 100644
index 0000000000000000000000000000000000000000..933f5351fe91495dfabfa1d4f45859d63715d3b2
--- /dev/null
+++ b/static/baidu_verify_codeva-tt9d17tf7q.html
@@ -0,0 +1 @@
+cf91c6ab8434dfe93b419f38e63eef6d
\ No newline at end of file
diff --git a/static/css/common.css b/static/css/common.css
new file mode 100644
index 0000000000000000000000000000000000000000..55d5bc9f2645d9fff5798668eab832739466a730
--- /dev/null
+++ b/static/css/common.css
@@ -0,0 +1,689 @@
+html,
+body {
+ background-color: var(--e-color-bg1);
+ font-family: 'PingFang SC', 'Microsoft YaHei', 'Helvetica', 'Arial', sans-serif;
+}
+
+code,
+pre {
+ font-family: 'SFMono-Regular', 'Menlo', 'Monaco', 'Consolas', 'Liberation Mono', monospace;
+}
+#content {
+ min-height: calc(100vh - 260px);
+}
+
+i {
+ background-repeat: no-repeat;
+ background-size: cover;
+ background-position: center center;
+}
+
+.hide {
+ display: none;
+}
+
+.show {
+ display: block;
+}
+
+/* 404 */
+
+.not-found {
+ position: relative;
+ margin-top: 180px !important;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.not-found img {
+ width: 400px;
+ height: 400px;
+ display: block;
+}
+
+.not-found span {
+ font-size: 48px;
+ line-height: 48px;
+ color: #000;
+ font-weight: 400;
+}
+
+/* 导航栏 */
+.nav-box {
+ width: calc(100% - 300px);
+ height: 60px;
+ position: fixed;
+ top: 0;
+ left: 300px;
+ z-index: 1001;
+ background-color: var(--e-color-bg1);
+}
+@media screen and (max-width: 1100px) {
+ .nav-box {
+ width: 100vw;
+ left: 0;
+ background-color: var(--e-color-bg2);
+ }
+}
+.nav-box::after {
+ content: "";
+ display: block;
+ width: calc(100% - 128px);
+ height: 1px;
+ margin: 0 auto;
+ background-color: var(--e-color-division1);
+}
+@media screen and (max-width: 1100px) {
+ .nav-box::after {
+ display: none;
+ }
+}
+
+.nav-box .nav-menu {
+ display: flex;
+ width: 100%;
+ align-items: center;
+ padding: 0 64px;
+ max-width: 1620px;
+}
+@media screen and (min-width: 1958px) {
+ .nav-box .nav-menu {
+ max-width: none;
+ }
+}
+.nav-box .nav-menu .docs-a .home-bread{
+ cursor: pointer;
+}
+.nav-box .nav-menu .left {
+ width: 300px;
+ padding: 0 40px 0;
+ background-color: var(--e-color-kleinblue5);
+ min-width: 300px;
+}
+.nav-box .nav-menu .left img {
+ width: 139px;
+ height: 32px;
+ position: relative;
+ top: 53px;
+}
+.nav-box .nav-menu .left .nav-box .nav-menu .nav-menu .h5-right {
+ display: none;
+}
+#version-option {
+ background-color: var(--e-color-bg1);
+ position: fixed;
+ width: calc(100% - 300px);
+ padding: 0 64px;
+ top: 60px;
+ left: 300px;
+ z-index: 9;
+ display: flex;
+ box-shadow: var(--e-shadow-l2);
+ max-height: 0;
+ overflow: hidden;
+ transition: max-height 0.5s;
+ box-sizing: border-box;
+}
+#version-option.show{
+ max-height: 240px;
+}
+@media screen and (max-width: 1100px) {
+ #version-option{
+ display: none;
+ }
+}
+#version-option p{
+ font-size: 14px;
+ color: var(--e-color-text1);
+}
+#version-option .long-time,
+#version-option .innovate {
+ margin-right: 120px;
+}
+#version-option >div{
+ padding:40px 0;
+}
+#version-option .version-list{
+ display: grid;
+ grid-template-columns: repeat(2,1fr);
+ column-gap: 60px;
+}
+#version-option .innovate .version-list{
+ width: 150px;
+}
+#version-option .version-list li{
+ padding-top: 16px;
+ white-space: nowrap;
+}
+
+.nav-menu a img {
+ display: block;
+ height: 60px;
+}
+
+.nav-menu .left a img {
+ display: block;
+ width: 300px;
+ height: 60px;
+}
+
+.h5_nav_left #img {
+ display: block;
+ width: 154px;
+ height: auto;
+}
+
+.nav-menu > div .home {
+ color: var(--e-color-text1);
+ line-height: 16px;
+ font-size: 16px;
+ display: inline-block;
+ margin-left: 20px;
+ cursor: pointer;
+}
+
+#nav-search {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+}
+
+.search-active {
+ box-shadow: var(--e-shadow-l2);
+ border-radius: 6px;
+ height: 32px;
+ padding: 0 12px;
+ border: 1px solid var(--e-color-brand1);
+}
+
+#nav-search input {
+ width: 0;
+ font-size: 14px;
+ line-height: 16px;
+ border: 0;
+}
+
+#nav-search input:focus {
+ outline: 0;
+}
+
+#nav-search > div {
+ position: relative;
+}
+
+#nav-search > div ul {
+ position: absolute;
+ top: 24px;
+ left: 0;
+ width: 100%;
+ z-index: 200;
+ background: #ffffff;
+}
+.nav-menu .search-box {
+ display: flex;
+ align-items: center;
+}
+#nav-search .icon-search,
+.nav-menu .search-box .icon-search {
+ display: block;
+ width: 24px;
+ height: 24px;
+ cursor: pointer;
+ position: relative;
+}
+.light .icon-search {
+ background: url(../img/search/search.svg) no-repeat 100%/100%;
+}
+.dark .icon-search {
+ background: url(../img/search/search-dark.svg) no-repeat 100%/100%;
+}
+
+.white_search {
+ display: block;
+ width: 24px;
+ height: 24px;
+ background-image: url("../img/search/search.svg");
+ cursor: pointer;
+}
+.dark .white_search {
+ background-image: url("../img/search/search-dark.svg");
+}
+
+.icon-earth {
+ display: inline-block;
+ width: 24px;
+ height: 24px;
+ background-image: url("../img/common/earth.svg");
+ cursor: pointer;
+ margin-right: 12px;
+ vertical-align: bottom;
+}
+
+.icon-tick {
+ display: inline-block;
+ width: 24px;
+ height: 24px;
+ background-image: url("../img/common/tick.svg");
+ cursor: pointer;
+ margin-right: 16px;
+ vertical-align: bottom;
+}
+.icon-down {
+ display: block;
+ width: 12px;
+ height: 12px;
+}
+.light .icon-down {
+ background-image: url("../img/common/icon-down-light.svg");
+}
+.dark .icon-down {
+ background-image: url("../img/common/icon-down-dark.svg");
+}
+
+.web-lang {
+ margin-left: 20px;
+}
+
+.nav-menu > div #lang {
+ width: 113px;
+ height: 60px;
+ position: absolute;
+ font-size: 16px;
+ font-weight: 400;
+ color: var(--e-color-text1);
+ line-height: 16px;
+ margin-left: 80px;
+ padding: 8px 15px 8px 12px;
+ display: flex;
+ justify-content: space-around;
+ box-sizing: border-box;
+ align-items: center;
+ right: 147px;
+}
+.nav-menu > div #lang .active {
+ color: var(--e-color-brand1);
+}
+.nav-menu > div #lang {
+ width: auto;
+ position: relative;
+ padding-left: 0;
+ padding-right: 0;
+ top: 0;
+ right: 0;
+ margin-left: 32px;
+}
+.nav-menu > div #lang span {
+ margin-right: 8px;
+ white-space: nowrap;
+}
+
+.nav-menu > div .option,
+
+.nav-menu > div .option {
+ width: 134px;
+}
+
+.nav-menu > div .angle {
+ position: absolute;
+ top: -6px;
+ left: 50%;
+ width: 10px;
+ height: 10px;
+ border-top: 1px solid rgba(0, 47, 167, 0.5);
+ border-left: 1px solid rgba(0, 47, 167, 0.5);
+ background: var(--e-color-bg2);
+ margin: 0 0 0 -5px;
+ transform: rotate(45deg);
+ z-index: 2;
+}
+
+/* 搜索部分 */
+
+.search-docs {
+ width: 100%;
+ height: 400px;
+ background: var(--e-color-brand1);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ margin-top: 60px;
+}
+
+.search-docs > div {
+ display: flex;
+ flex-direction: column;
+}
+
+.search-docs > div img {
+ display: block;
+ width: 319px;
+ height: 144px;
+ margin: 0 auto;
+}
+
+.search-docs > div h1 {
+ font-size: 36px;
+ color: #ffffff;
+ line-height: 40px;
+ margin: 20px auto 30px auto;
+}
+
+.search-docs > div .input {
+ position: relative;
+}
+
+.search-docs > div .input input {
+ width: 800px;
+ height: 60px;
+ background: var(--e-color-bg2);
+ border-radius: 8px;
+ padding: 20px 54px 20px 24px;
+ font-size: 20px;
+ color: rgba(0, 0, 0, 0.7);
+ line-height: 20px;
+ border: 0;
+}
+
+.search-docs > div .input input:focus {
+ outline: 0;
+}
+
+.search-docs > div .icon-search {
+ position: absolute;
+ width: 28px;
+ height: 28px;
+ right: 26px;
+ top: 16px;
+}
+
+.h5 {
+ display: none;
+}
+
+.nav-box .nav-menu .h5_nav_left {
+ display: none;
+}
+
+#result-container {
+ display: none;
+}
+
+#result-container {
+ display: none;
+ position: fixed;
+ top: 0px;
+ right: 0px;
+ background: var(--e-color-bg2);
+ width: 37.5%;
+ min-height: 100vh;
+ z-index: 9999;
+ padding: 30px 60px 110px 60px;
+}
+
+#result-container > .search-header {
+ width: 100%;
+ display: flex;
+ position: relative;
+}
+
+#result-container > hr {
+ width: 100%;
+ height: 1px;
+ border: 1px solid rgba(0, 0, 0, 0.5);
+}
+
+.baseof_mask {
+ display: none;
+ position: fixed;
+ background: #000000;
+ opacity: 0.1;
+ width: 100%;
+ height: 100vh;
+ text-align: center;
+ line-height: 100vh;
+ top: 0;
+ left: 0;
+ z-index: 9;
+}
+.baseof_mask img {
+ display: none;
+ box-sizing: content-box;
+ width: 100px;
+ background-color: #000;
+}
+
+#result-container > .search-header > input {
+ width: 100%;
+ height: 40px;
+ padding-left: 40px;
+ background: var(--e-color-bg-secondary);
+ border: 1px solid transparent;
+ color: var(--e-color-text1);
+}
+#result-container > .search-header > input:focus {
+ outline: none;
+}
+#result-container > .search-header > i {
+ width: 21px;
+ height: 21px;
+ position: absolute;
+ display: inline-block;
+ top: 10px;
+ left: 10px;
+}
+
+.result-style {
+ height: 90vh !important;
+ overflow-y: auto !important;
+ width: 100% !important;
+}
+
+.nav-menu > div .mobile {
+ display: none;
+}
+
+@media screen and (max-width: 1100px) {
+ #result-container {
+ display: none;
+ }
+ .nav-box .nav-menu {
+ height: 100%;
+ }
+
+ .nav-box .nav-menu .h5_nav_left {
+ display: flex;
+ align-items: center;
+ }
+
+ .nav-box .nav-menu .left {
+ display: none;
+ }
+
+ #app {
+ display: block !important;
+ background-color: var(--e-color-bg1);
+ }
+ .h5 {
+ display: block;
+ }
+ .not-found {
+ margin-top: 40px !important;
+ }
+ .not-found img {
+ width: 265px;
+ height: 272px;
+ margin: 30px auto 0 auto;
+ }
+
+ .not-found span {
+ font-size: 24px;
+ line-height: 34px;
+ text-align: center;
+ }
+ /* 搜索框 */
+ .h5-search {
+ display: flex !important;
+ flex-direction: row;
+ justify-content: space-between;
+ }
+ .h5-search input {
+ flex-grow: 2;
+ height: 24px;
+ margin-right: 16px;
+ background: var(--e-color-bg1);
+ padding: 3px 32px;
+ font-size: 12px;
+ font-weight: 400;
+ color: var(--e-color-text1);
+ line-height: 14px;
+ border: 1px solid rgba(0, 0, 0, 0.3);
+ }
+
+ .h5-search input:focus {
+ outline: 0;
+ }
+
+ .h5-search .search-btn {
+ width: 44px;
+ height: 32px;
+ border-radius: 4px;
+ font-size: 12px;
+ color: #ffffff;
+ line-height: 32px;
+ text-align: center;
+ }
+
+ #result-container .no-data {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ margin-top: 60px;
+ font-size: 16px;
+ line-height: 24px;
+ }
+
+ #result-container .no-data .empty-img {
+ width: 200px;
+ }
+
+ #result-container .no-data .empty-tip {
+ margin-top: 16px;
+ font-size: 16px;
+ line-height: 24px;
+ color: var(--o-color-text1);
+ }
+
+ /* 导航栏 */
+ .nav-menu > .right,
+ .nav-menu > div .home {
+ display: none;
+ }
+
+ .nav-box {
+ padding: 0 16px;
+ height: 48px;
+ }
+
+ .nav-menu .h5-right {
+ display: flex;
+ flex-direction: row;
+ margin-right: 10px;
+ }
+
+ .nav-menu .h5-right i {
+ display: block;
+ width: 21px;
+ height: 21px;
+ }
+
+ .nav-menu .h5-right .icon-lang {
+ display: none;
+ background-image: url("../img/common/lang.png");
+ position: relative;
+ }
+
+ .nav-menu .h5-right .icon-home {
+ background-image: url("../img/common/icon-home.svg");
+ margin: 0 7px 0 32px;
+ }
+
+ .nav-menu > div .option {
+ width: 90px;
+ box-shadow: 0px 3px 10px 0px rgba(0, 0, 0, 0.1);
+ left: -34px;
+ top: 28px;
+ padding: 18px 0 20px 0;
+ }
+
+ /* 搜索 */
+ .search-docs {
+ height: 300px;
+ margin-top: 70px;
+ }
+ .search-docs > div {
+ flex-direction: column-reverse;
+ }
+ .search-docs > div img {
+ width: 266px;
+ height: 120px;
+ }
+ .search-docs > div h1 {
+ width: 166px;
+ height: 80px;
+ font-size: 24px;
+ font-weight: bold;
+ margin: 0 auto 20px auto;
+ text-align: center;
+ }
+ .search-docs > div .input {
+ display: none;
+ }
+
+ /* 底部 */
+ .footer-wrapper .footer-content {
+ flex-direction: column;
+ height: 270px;
+ justify-content: center;
+ }
+
+ .footer-content .footer-left p {
+ font-size: 14px;
+ margin-top: 10px;
+ }
+
+ .footer-content .footer-left {
+ margin-bottom: 20px;
+ }
+
+ .footer-content .footer-left p:last-of-type {
+ display: none;
+ }
+
+ .footer-content .footer-right p {
+ text-align: center;
+ }
+
+ .footer-content .footer-right p:last-of-type {
+ display: block;
+ margin-top: 20px;
+ }
+
+ .nav-menu > div .mobile {
+ display: inline;
+ margin-left: -29px;
+ }
+}
+
+.search-result {
+ overflow-y: auto;
+ max-height: 98vh;
+ background-color: var(--e-color-bg2);
+}
+#result-container .search-result ul {
+ padding-top: 40px;
+}
+
+i {
+ font-style: normal;
+}
diff --git a/static/css/cookie.css b/static/css/cookie.css
new file mode 100644
index 0000000000000000000000000000000000000000..a87aa2ed7ddf73603a846132a210d536addeeba7
--- /dev/null
+++ b/static/css/cookie.css
@@ -0,0 +1,340 @@
+/* cookie管理 */
+.cookie-notice {
+ position: fixed;
+ bottom: 0;
+ z-index: 10000;
+ width: 100%;
+}
+.cookie-notice-content {
+ background-color: rgba(var(--o-mixedgray-1), 0.9);
+ backdrop-filter: blur(5px);
+ box-shadow: var(--o-shadow-1);
+}
+.content-wrapper {
+ --header-nav-height: 80px;
+ --header-menu-height: 60px;
+ --header-mobile-nav: 48px;
+ --header-height: calc(var(--header-nav-height) + var(--header-menu-height));
+ --footer-height: 96px;
+ --header-padding: 64px;
+ --content-padding: 12px;
+ --content-max-width: 1440px;
+ --nav-side: 428px;
+ padding-left: var(--content-padding);
+ padding-right: var(--content-padding);
+ margin: 0 auto;
+ max-width: var(--content-max-width);
+}
+.cookie-notice-wrap {
+ padding-top: 24px;
+ padding-bottom: 24px;
+ display: flex;
+ justify-content: space-between;
+ position: relative;
+ align-items: center;
+}
+.cookie-notice-left {
+ width: 60%;
+}
+.cookie-title {
+ font-size: 16px;
+ line-height: 24px;
+ color: var(--o-color-info1);
+ font-weight: 500;
+}
+.cookie-desc {
+ font-size: 12px;
+ line-height: 18px;
+ color: var(--o-color-info2);
+ margin-top: 8px;
+}
+.cookie-notice-right {
+ display: flex;
+ align-items: center;
+ margin-top: 12px;
+}
+.o-button {
+ border: 1px solid var(--o-color-primary1);
+ color: var(--o-color-primary1);
+ line-height: 30px;
+ padding: 0 16px;
+ display: inline-block;
+ background: none;
+ font-size: 14px;
+ border-radius: 32px;
+ cursor: pointer;
+ transition: all var(--o-duration-s) var(--o-easing-standard);
+}
+.o-button:hover {
+ color: var(--o-color-white);
+ background-color: var(--o-color-primary1);
+}
+.o-button:active {
+ color: var(--o-color-white);
+ border: 1px solid var(--o-color-primary3);
+ background-color: var(--o-color-primary3);
+}
+.o-button + button {
+ margin-left: 16px;
+}
+
+.o-layer-dialog {
+ position: fixed;
+ inset: 0;
+ z-index: 1011;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+.o-dialog {
+ z-index: 1011;
+}
+.o-layer-mask {
+ position: absolute;
+ inset: 0;
+ background-color: var(--o-color-mask1);
+ z-index: -1;
+}
+.o-dlg-main {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ padding: 24px;
+ background-color: var(--o-color-fill2);
+ width: 930px;
+ min-height: 424px;
+ max-height: 730px;
+ border-radius: 16px;
+ box-shadow: var(--o-shadow-1);
+}
+
+.o-dlg-header {
+ font-size: 32px;
+ color: var(--o-color-info1);
+ line-height: 44px;
+ text-align: center;
+ margin-bottom: 12px;
+}
+.o-dialog-closed,
+.cookie-close {
+ position: absolute;
+ top: 8px;
+ right: 8px;
+ height: 24px;
+ width: 24px;
+ cursor: pointer;
+ mask-image: url(../img/common/icon-close-light.svg);
+ -webkit-mask-image: url(../img/common/icon-close-light.svg);
+ mask-size: cover;
+ -webkit-mask-size: cover;
+ background-color: var(--o-color-info2);
+ transition: all 0.25s cubic-bezier(0, 0, 0, 1);
+}
+.o-dialog-closed:hover,
+.cookie-close:hover,
+.evaluate-close:hover {
+ transform: rotate(180deg);
+ background-color: var(--o-color-primary1);
+}
+
+@media screen and (max-width: 840px) {
+ .cookie-notice-wrap {
+ flex-direction: column;
+ align-items: center;
+ padding: 16px;
+ }
+ .cookie-notice-left {
+ width: 100%;
+ }
+ .cookie-title {
+ font-size: 16px;
+ line-height: 24px;
+ text-align: center;
+ }
+ .cookie-notice-right button {
+ width: 100%;
+ display: block;
+ margin: 12px 0 0 !important;
+ line-height: 26px;
+ }
+ .cookie-notice-right {
+ flex-direction: column;
+ align-items: center;
+ width: 100%;
+ margin: 0;
+ }
+}
+
+.o-layer-dialog {
+ position: fixed;
+ inset: 0;
+ z-index: 1011;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+.o-dialog {
+ z-index: 1011;
+}
+.o-layer-mask {
+ position: absolute;
+ inset: 0;
+ background-color: var(--o-color-mask1);
+ z-index: -1;
+}
+.o-dlg-main {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ padding: 24px;
+ background-color: var(--o-color-fill2);
+ width: 930px;
+ min-height: 424px;
+ max-height: 730px;
+ border-radius: 16px;
+ box-shadow: var(--o-shadow-1);
+}
+.o-dlg-header {
+ font-size: 32px;
+ color: var(--o-color-info1);
+ line-height: 44px;
+ text-align: center;
+ margin-bottom: 12px;
+}
+.o-dialog-closed,
+.cookie-close {
+ position: absolute;
+ top: 8px;
+ right: 8px;
+ height: 24px;
+ width: 24px;
+ cursor: pointer;
+ mask-image: url(../img/common/icon-close-light.svg);
+ -webkit-mask-image: url(../img/common/icon-close-light.svg);
+ mask-size: cover;
+ -webkit-mask-size: cover;
+ background-color: var(--o-color-info2);
+ transition: all 0.25s cubic-bezier(0, 0, 0, 1);
+}
+.o-dialog-closed:hover,
+.cookie-close:hover,
+.evaluate-close:hover {
+ transform: rotate(180deg);
+ background-color: var(--o-color-primary1);
+}
+
+@media screen and (min-width: 1200px) {
+ .o-dialog-small .o-dlg-main {
+ width: 450px;
+ min-height: auto;
+ }
+
+ .o-dialog-small .o-dlg-header {
+ font-size: 24px;
+ line-height: 32px;
+ font-weight: 500;
+ }
+
+ .o-dialog-small .o-dlg-main {
+ padding: 32px;
+ }
+ .privacy-content .o-button {
+ line-height: 38px;
+ font-size: 16px;
+ }
+ .privacy-detail {
+ font-size: 16px;
+ line-height: 24px;
+ color: var(--o-color-info1);
+ }
+}
+
+.o-scroller-container {
+ overflow-y: auto;
+ max-height: 400px;
+}
+.manage-content {
+ padding: 12px 0;
+}
+.manage-item .item-header {
+ display: flex;
+ align-items: center;
+}
+.manage-item .item-header .item-title {
+ font-size: 20px;
+ line-height: 28px;
+ color: var(--o-color-info1);
+ font-weight: 500;
+}
+.manage-item .item-extra {
+ font-size: 14px;
+ line-height: 22px;
+ color: var(--o-color-info3);
+ margin-left: 24px;
+ display: flex;
+ align-items: center;
+}
+.manage-item .item-detail {
+ margin-top: 16px;
+ font-size: 16px;
+ line-height: 24px;
+ color: var(--o-color-info2);
+}
+.manage-item + .manage-item {
+ margin-top: 24px;
+}
+.manage-action {
+ margin-top: 24px;
+ text-align: center;
+}
+
+input[is="o-switch"] {
+ padding: 0;
+ -webkit-appearance: none;
+ display: inline-flex;
+ outline: none !important;
+ outline-offset: 0 !important;
+ box-sizing: border-box;
+ background-clip: content-box;
+ width: 42px;
+ height: 20px;
+ border: 2px solid var(--o-color-info4);
+ border-radius: 26px;
+ color: var(--o-color-info4);
+ background-color: var(--o-color-info4);
+ font-size: 0;
+ transition: all 0.2s;
+ cursor: pointer;
+ -webkit-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-tap-highlight-color: transparent;
+}
+input[is="o-switch"]:checked {
+ color: var(--o-color-primary1);
+ border-color: var(--o-color-primary1);
+ background-color: var(--o-color-primary1);
+}
+input[is="o-switch"]::before {
+ content: "";
+ flex: 0;
+ transition: flex 0.2s;
+}
+
+input[is="o-switch"]::after {
+ content: "";
+ width: 16px;
+ height: 16px;
+ border-radius: 100%;
+ background-color: #fff;
+ opacity: 1;
+ visibility: visible;
+}
+
+input[is="o-switch"]:active {
+ box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.1);
+}
+
+input[is="o-switch"]:checked::before {
+ flex: 1;
+}
diff --git a/static/css/doc_map.css b/static/css/doc_map.css
new file mode 100644
index 0000000000000000000000000000000000000000..b87e32a65bcbd1d147d058dc9c7972ee7736002b
--- /dev/null
+++ b/static/css/doc_map.css
@@ -0,0 +1,141 @@
+.doc-map {
+ padding: 0 120px;
+ padding-bottom: 64px;
+ margin-top: 32px;
+}
+.line-title {
+ margin-top: 24px;
+ padding: 16px 24px;
+ font-size: 24px;
+ line-height: 36px;
+ font-weight: 500;
+ color: var(--e-color-white);
+ background-size: 100% 100%;
+}
+.line-title:nth-of-type(1) {
+ margin-top: 0;
+}
+
+.secondary-title {
+ margin: 12px 0 16px;
+ color: var(--e-color-text1);
+ line-height: 28px;
+ font-size: 20px;
+}
+.secondary-title:first-child {
+ margin-top: 0;
+}
+.bg-1 {
+ background-image: url(../img/doc-map/bg-1.png);
+}
+.line-main {
+ margin-top: 16px;
+ padding: 24px;
+ background-color: var(--e-color-bg2);
+}
+.link-list {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 12px 80px;
+ font-size: 18px;
+ padding-bottom: 16px;
+ border-bottom: 1px solid var(--e-color-border2);
+}
+.no-border {
+ padding-bottom: 0;
+ border: none;
+}
+.tool-left {
+ display: flex;
+ align-items: center;
+}
+.tool-item {
+ display: flex;
+ justify-content: space-between;
+ padding: 28px 0;
+ border-top: 1px solid var(--e-color-border2);
+ font-size: 16px;
+ color: var(--e-color-text4);
+ border-bottom: none;
+}
+.tool-item:last-child {
+ padding-bottom: 0;
+}
+.tool-item .tool-right {
+ display: flex;
+ gap: 24px;
+}
+.download-btn {
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ padding: 4px 16px;
+ border: 1px solid var(--e-color-border3);
+ font-size: 14px;
+ color: var(--e-color-brand1);
+}
+
+.download-btn svg {
+ transition: all 0.3s;
+ margin-left: 8px;
+ width: 12px;
+}
+.hover-transform:hover svg {
+ transform: translateX(4px);
+}
+.software-download svg {
+ transform: rotate(90deg);
+}
+@media screen and (max-width: 1620px) {
+ .doc-map {
+ margin-right: 0;
+ }
+}
+
+@media screen and (max-width: 1100px) {
+ .doc-map {
+ margin-top: 40px;
+ padding: 0 16px;
+ transform: none;
+ }
+ .map-title {
+ font-size: 16px;
+ text-align: center;
+ line-height: normal;
+ }
+ .line-title {
+ margin-top: 16px;
+ padding: 12px;
+ font-size: 14px;
+ line-height: normal;
+ }
+ .line-title:first-child {
+ margin-top: 24px;
+ }
+ .line-main {
+ margin-top: 8px;
+ padding: 12px;
+ }
+ .line-main .link-list {
+ font-size: 12px;
+ gap: 8px 16px;
+ }
+ .secondary-title {
+ margin-bottom: 8px;
+ font-size: 12px;
+ line-height: normal;
+ }
+ .download-btn {
+ padding: 4px 8px;
+ font-size: 12px;
+ }
+ .download-btn:hover svg {
+ transform: none;
+ }
+ .line-main .tool-item {
+ padding: 8px 0;
+ }
+ .line-main .tool-item:last-child {
+ padding-bottom: 0;
+ }
+}
diff --git a/static/css/docdetail.css b/static/css/docdetail.css
new file mode 100644
index 0000000000000000000000000000000000000000..7f1b5e1d2c93c2fafee7d7edffd27580fd6446ff
--- /dev/null
+++ b/static/css/docdetail.css
@@ -0,0 +1,876 @@
+/* 详情页面样式 */
+/* 版本选择 */
+
+#app .left {
+ background-color: var(--e-color-kleinblue5);
+ position: fixed;
+ left: 0;
+ top: 0;
+ height: 100vh;
+ z-index: 10;
+}
+@media screen and (max-width: 1100px) {
+ #app .left {
+ width: 60vw;
+ position: fixed;
+ left: 0;
+ top: 0;
+ z-index: 9999;
+ background-color: var(--e-color-bg2);
+ transform: translateX(-100%);
+ transition: all 0.5s;
+ }
+ #app .left::-webkit-scrollbar {
+ width: 0px;
+ }
+ #app .show-left {
+ transform: translateX(0);
+ }
+}
+#menu-box {
+ width: 300px;
+ height: calc(100vh - 60px);
+}
+#menu-box .pc-logo {
+ width: 260px;
+ padding-left: 40px;
+ padding-top: 16px;
+ padding-bottom: 12px;
+}
+#menu-box .pc-logo img {
+ height: 32px;
+ cursor: pointer;
+}
+@media screen and (max-width: 1100px) {
+ #menu-box {
+ top: 0;
+ z-index: 9999;
+ padding-top: 0;
+ }
+ #menu-box::-webkit-scrollbar {
+ width: 0;
+ }
+ #menu-box .pc-logo {
+ display: none;
+ }
+}
+
+#right-style .right-nav {
+ display: flex;
+ align-items: center;
+ margin-left: 32px;
+}
+#version-select {
+ height: 40px;
+ font-size: 18px;
+ line-height: 40px;
+ color: var(--e-color-brand1);
+ box-sizing: border-box;
+ cursor: pointer;
+ position: relative;
+}
+#version-select .version-menu {
+ width: 24px;
+ height: 24px;
+ background-image: url(../img/common/more-version.svg);
+}
+#version-select .option {
+ width: 220px;
+ position: absolute;
+ left: -1px;
+ top: 39px;
+ z-index: 99;
+ overflow: hidden;
+ background-color: var(--e-color-kleinblue7);
+ height: 0;
+ transition: all 0.2s;
+}
+#version-select .option-active {
+ height: 168px;
+ overflow-y: scroll;
+}
+#version-select .option-active::-webkit-scrollbar {
+ width: 4px;
+ height: 8px;
+ position: relative;
+ right: 4px;
+ background-color: var(--e-color-kleinblue7);
+}
+#version-select .option-active::-webkit-scrollbar-button {
+ width: 0;
+ height: 0;
+}
+#version-select .option-active::-webkit-scrollbar-thumb {
+ width: 4px;
+ height: 4px;
+ border-radius: 2px;
+ background-color: #406fe7;
+}
+
+#version-select .option li {
+ font-size: 16px;
+ display: block;
+ cursor: pointer;
+ color: #ffffff;
+ line-height: 24px;
+ box-sizing: border-box;
+ position: relative;
+ z-index: 3;
+}
+#version-select .option li a {
+ display: block;
+ padding-left: 8px;
+ padding-top: 8px;
+ color: #ffffff;
+}
+#version-select .option .active a {
+ color: #feb32a;
+}
+#version-select .option li:nth-last-of-type(1) {
+ padding-bottom: 8px;
+}
+
+#version-select .option li:hover a {
+ color: #feb32a;
+}
+
+#version-select .angle {
+ position: absolute;
+ top: -6px;
+ left: 50%;
+ width: 10px;
+ height: 10px;
+ border-top: 1px solid rgba(0, 47, 167, 0.5);
+ border-left: 1px solid rgba(0, 47, 167, 0.5);
+ background: var(--e-color-bg2);
+ margin: 0 0 0 -5px;
+ transform: rotate(45deg);
+ z-index: 2;
+}
+
+/* 左侧导航栏 */
+
+#docstreeview {
+ height: calc(100vh - 240px);
+ overflow-x: hidden;
+ overflow-y: scroll;
+}
+@media screen and (max-width: 1100px) {
+ #docstreeview {
+ height: calc(100vh - 164px);
+ color: var(--e-color-text1);
+ }
+ #docstreeview a {
+ color: var(--e-color-text1);
+ }
+}
+
+.jstree-open .jstree-ocl,
+.jstree-closed .jstree-ocl {
+ display: inline-block;
+ font-size: 12px;
+ z-index: 88;
+ cursor: pointer;
+ transition: all 0.2s;
+}
+
+#menu-box .jstree-node > .jstree-anchor {
+ display: inline-block;
+}
+
+#menu-box .jstree-node[aria-level="1"] > .jstree-anchor {
+ max-width: 200px;
+}
+#menu-box .jstree-node[aria-level="2"] > .jstree-anchor {
+ max-width: 200px;
+}
+
+#menu-box .jstree-node[aria-level="3"] > .jstree-anchor {
+ max-width: 200px;
+}
+
+#menu-box .jstree-node[aria-level="4"] > .jstree-anchor {
+ max-width: 200px;
+}
+
+#menu-box .jstree-node[aria-level="5"] > .jstree-anchor {
+ max-width: 200px;
+}
+
+#menu-box .jstree-node > .jstree-anchor,
+#menu-box .jstree-node > .jstree-anchor p a {
+ font-size: var(--o-font-size-h8);
+ color: var(--e-color-white);
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+#menu-box .jstree-node > .jstree-anchor > p > a {
+ display: inline-block;
+ max-width: 200px;
+ margin-left: 0;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+#docstreeview > ul > li > ul > li a {
+ font-size: var(--o-font-size-text) !important;
+}
+#menu-box .jstree-node > .jstree-anchor:focus,
+#menu-box .jstree-node > .jstree-anchor p {
+ outline: 0;
+}
+
+.jstree-node .jstree-children {
+ padding: 20px 0 0 0;
+}
+@media screen and (max-width: 1100px) {
+ .jstree-node .jstree-children {
+ padding: 0;
+ }
+ .jstree-open .jstree-ocl,
+ .jstree-closed .jstree-ocl {
+ margin-right: 0;
+ }
+}
+
+#menu-box .jstree-open > .jstree-anchor,
+#menu-box .jstree-node > .jstree-anchor.jstree-clicked {
+ color: #feb32a !important;
+}
+@media screen and (max-width: 1100px) {
+ #menu-box .jstree-open > .jstree-anchor,
+ #menu-box .jstree-node > .jstree-anchor.jstree-clicked {
+ color: var(--e-color-brand1) !important;
+ }
+}
+
+#docstreeview::-webkit-scrollbar-track {
+ border-radius: 8px;
+ background-color: #caeaff;
+ width: 0;
+}
+#docstreeview::-webkit-scrollbar {
+ border-radius: 8px;
+ width: 0;
+ background-color: #f5f5f5;
+}
+#docstreeview::-webkit-scrollbar-thumb {
+ border-radius: 4px;
+ background: rgba(0, 47, 167, 0.1);
+}
+
+/* 头部链接 */
+.top-link {
+ flex-grow: 2;
+ height: 60px;
+}
+.top-link .link-container {
+ display: flex;
+ flex-direction: row-reverse;
+ align-items: center;
+ justify-content: space-between;
+}
+
+#version-select {
+ font-size: 16px;
+}
+.docs-a a,
+.docs-a span {
+ font-size: 12px;
+ color: var(--e-color-text1);
+ line-height: 16px;
+}
+.docs-a a {
+ color: var(--e-color-text4);
+}
+.docs-a a:nth-last-of-type(1) {
+ color: var(--e-color-text1);
+}
+@media screen and (max-width: 1100px) {
+ .docs-a a,
+ .docs-a span {
+ font-size: 12px;
+ }
+ .docs-a > i {
+ width: 16px !important;
+ }
+}
+
+.docs-a > i {
+ display: inline-block;
+ width: 16px;
+ height: 16px;
+ background-image: url("../img/common/icon-chevron-right-gray.svg");
+ background-repeat: no-repeat;
+ background-size: cover;
+ background-position: center center;
+}
+.docs-a > i:nth-last-of-type(1) {
+ background-image: url("../img/common/icon-chevron-right.svg");
+}
+.dark .docs-a > i {
+ background-image: url("../img/common/icon-chevron-dark-gray.svg");
+}
+.dark .docs-a > i:nth-last-of-type(1) {
+ background-image: url("../img/common/icon-chevron-right-dark.svg");
+}
+#prev a,
+#next a,
+#toc-list a {
+ color: var(--e-color-text1);
+}
+.prev-next {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ grid-template-areas: "A B C";
+ width: 100%;
+ max-width: 1174px;
+}
+.prev-next #prev,
+#h5-menu ul .h5-prev {
+ grid-area: A;
+}
+.prev-next #next,
+#h5-menu ul .h5-next {
+ grid-area: C;
+ width: 100%;
+ justify-content: end;
+}
+.prev-next .disabled {
+ display: none;
+}
+@media (max-width: 1100px) {
+ .prev-next {
+ display: none;
+ }
+}
+.prev-next::-webkit-scrollbar {
+ width: 0;
+}
+.prev-next > div {
+ display: flex;
+ justify-content: space-between;
+}
+#prev a,
+#next a {
+ display: flex;
+ align-items: center;
+}
+#prev a span,
+#next a span {
+ line-height: 22px;
+}
+#source,
+#feedbook,
+#prev,
+#next {
+ cursor: pointer;
+}
+.icon-prev,
+.icon-next {
+ height: 100%;
+ display: flex;
+ align-items: center;
+ color: var(--e-color-brand1);
+}
+.icon-prev {
+ width: 16px;
+ transform: rotateZ(180deg);
+ margin-right: 8px;
+}
+.icon-next {
+ width: 16px;
+ margin-left: 8px;
+}
+
+.link-container .top-right {
+ display: flex;
+ flex-direction: row;
+ height: 100%;
+}
+
+.top-link .prev-next .icon-prev,
+.top-link .prev-next .icon-next,
+.top-link .other-link .source-code,
+.top-link .other-link .feedbook {
+ display: inline-block;
+ width: 16px;
+ height: 16px;
+ margin-bottom: -3px;
+ margin-right: 6px;
+}
+.top-link .other-link .source-code,
+.top-link .other-link .feedbook {
+ margin-bottom: 0;
+}
+.top-link .other-link a span {
+ color: var(--e-color-text1);
+}
+.top-link .other-link a:hover span {
+ color: var(--e-color-brand1);
+}
+
+.top-link .prev-next .icon-next {
+ margin-right: 0;
+ margin-left: 6px;
+}
+#prev:hover a,
+#next:hover a {
+ color: var(--e-color-brand1);
+}
+
+.top-link .prev-next span,
+.top-link .other-link span {
+ font-size: 16px;
+ color: var(--e-color-brand1);
+ line-height: 16px;
+ white-space: nowrap;
+}
+.top-link .other-link a {
+ display: flex;
+ align-items: center;
+}
+
+.top-link .prev-next .icon-prev {
+ background-image: url("../img/detail/icon-prev.svg");
+}
+
+.top-link .prev-next .icon-next {
+ background-image: url("../img/detail/icon-next.svg");
+}
+
+.top-link .other-link {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+}
+
+.light .top-link .other-link .source-code {
+ background-image: url("../img/detail/source-code-light.svg");
+}
+.dark .top-link .other-link .source-code {
+ background-image: url("../img/detail/source-code-dark.svg");
+}
+
+.light .top-link .other-link .feedbook {
+ background-image: url("../img/detail/feedback-light.svg");
+}
+.dark .top-link .other-link .feedbook {
+ background-image: url("../img/detail/feedback-dark.svg");
+}
+
+/* 中间文档 */
+
+#docsMenu {
+ animation: fadeIn 0.8s linear;
+ -webkit-animation: fadeIn 0.8s linear;
+}
+@keyframes fadeIn {
+ 0% {
+ opacity: 0;
+ }
+ 50% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ display: block;
+ }
+}
+
+#page {
+ font-size: 14px;
+ color: #36383d;
+ line-height: 24px;
+ margin-top: 60px;
+ padding-top: 40px;
+ max-width: 1460px;
+ padding: 40px 64px 64px;
+ min-height: calc(100vh - 320px);
+}
+
+@media screen and (max-width: 1100px) {
+ #page {
+ padding: 98px 0 0px 0;
+ }
+}
+
+@media screen and (max-width: 1950px) {
+ #page {
+ margin-right: 340px;
+ }
+}
+
+#h5-menu ul {
+ display: none;
+}
+
+#h5-menu-top {
+ display: none;
+}
+
+@media screen and (max-width: 1100px) {
+ .top-link,
+ #title-evaluate {
+ display: none;
+ }
+ #menu-box {
+ transition: all 0.2s;
+ }
+ #h5-menu-top {
+ display: block;
+ }
+
+ #h5-menu {
+ position: fixed;
+ width: 100vw;
+ top: 48px;
+ z-index: 99;
+ }
+
+ #page {
+ margin: 90px auto 0;
+ padding: 0 16px;
+ padding-top: 16px;
+ width: 100%;
+ box-sizing: border-box;
+ }
+
+ #h5-menu ul {
+ width: 100%;
+ height: 44px;
+ background: var(--e-color-bg2);
+ box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.1);
+ padding: 12px 16px;
+ display: grid;
+ grid-template-columns: repeat(3,1fr);
+ grid-template-areas: "A B C";
+ font-size: 14px;
+ color: var(--e-color-brand1);
+ line-height: 24px;
+ }
+ #h5-menu ul .h5-sersion{
+ grid-area: B;
+ white-space:nowrap
+ }
+
+ #h5-menu a span {
+ color: var(--e-color-brand1);
+ }
+ #h5-menu a i {
+ width: 14px;
+ height: 14px;
+ }
+ #h5-menu a span {
+ color: var(--e-color-text1);
+ font-size: 12px;
+ }
+ #h5-menu a .icon-next {
+ margin-left: 8px;
+ }
+
+ #h5-menu a .icon-prev {
+ margin-right: 8px;
+ }
+
+ #h5-menu-top .container {
+ width: 100%;
+ }
+ #page {
+ width: 100%;
+ box-sizing: border-box;
+ }
+ .docscontainer {
+ height: auto !important;
+ }
+
+ #menu-box {
+ background: var(--e-color-bg2);
+ width: 100%;
+ height: 100vh;
+ }
+
+ #version-select {
+ display: none;
+ }
+
+ #h5-menu-top p {
+ font-size: 14px;
+ color: var(--e-color-text1);
+ line-height: 24px;
+ text-align: center;
+ position: relative;
+ }
+
+ #h5-menu-top p .icon-close {
+ display: block;
+ background-image: url("../img/menu/icon-close-h5.svg");
+ position: absolute;
+ width: 12px;
+ height: 12px;
+ right: 20px;
+ top: 6px;
+ }
+ .menu-select-box .select-box .icon-down {
+ background-image: url(../img/menu/icon-down-h5.svg) !important;
+ margin-left: 0;
+ }
+ #menu-box .jstree-node > .jstree-anchor,
+ #menu-box .jstree-node > .jstree-anchor p a {
+ color: var(--e-color-text1);
+ }
+ #docstreeview {
+ margin-top: 0;
+ }
+}
+
+.menu-select-box {
+ height: 60px;
+}
+@media screen and (max-width: 1100px) {
+ .menu-select-box {
+ height: 38px;
+ }
+ #h5-menu-top .menu-select-box {
+ height: auto;
+ margin-top: 0;
+ padding-top: 30px;
+ }
+}
+
+.menu-select-box .select-box .option {
+ top: 46px !important;
+}
+
+.menu-select-box .select-box .icon-down {
+ margin-right: -19px !important;
+}
+
+@media screen and (max-width: 1100px) {
+ .searcher {
+ display: none;
+ z-index: 2000;
+ position: fixed;
+ overflow: scroll;
+ background-color: var(--e-color-bg2);
+ top: 48px;
+ max-height: 80vh;
+ width: 100%;
+ }
+
+ .h5_search_container {
+ display: flex;
+ margin-top: 80px;
+ width: 315px;
+ flex-direction: row;
+ justify-content: space-between;
+ }
+ .h5_search_container input {
+ width: 256px;
+ height: 32px;
+ background: var(--e-color-bg2);
+ border-radius: 4px;
+ padding: 9px 12px;
+ font-size: 12px;
+ font-weight: 400;
+ color: var(--e-color-text1);
+ line-height: 14px;
+ border: 1px solid rgba(0, 0, 0, 0.3);
+ }
+ .h5_search_container input:focus {
+ outline: 0;
+ }
+
+ .h5_search_container .h5_search_btn {
+ width: 44px;
+ height: 32px;
+ background: var(--e-color-brand1);
+ border-radius: 4px;
+ font-size: 12px;
+ color: #ffffff;
+ line-height: 32px;
+ text-align: center;
+ }
+
+ .h5_left span {
+ position: relative;
+ left: -30px;
+ font-size: 16px;
+ }
+
+ .h5_left a img {
+ width: 154px;
+ height: auto;
+ }
+
+ .h5-right .icon-lang {
+ margin-right: 33px;
+ }
+
+ .app-mobile > img {
+ margin-top: 90px;
+ }
+
+ .h5_versions {
+ padding-left: 30px;
+ padding-right: 30px;
+ margin-top: 40px;
+ }
+
+ .h5_versions > span {
+ font-size: 16px;
+ }
+
+ #h5_versions {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-around;
+ flex-wrap: wrap;
+ margin-top: 20px;
+ }
+
+ #h5_versions div {
+ width: 40%;
+ height: 40px;
+ background: var(--e-color-bg2);
+ box-shadow: 0px 3px 10px 0px rgba(0, 0, 0, 0.1);
+ border-radius: 8px;
+ font-size: 14px;
+ font-weight: normal;
+ color: var(--e-color-brand1);
+ text-align: center;
+ }
+
+ .hot_documentation {
+ display: flex;
+ flex-direction: column;
+ margin-top: 20px;
+ margin-left: 30px;
+ }
+
+ .hot_documentation div {
+ width: 315px;
+ height: auto;
+ padding: 30px;
+ text-align: left;
+ margin-top: 30px;
+ background: var(--e-color-bg2);
+ box-shadow: 0px 3px 10px 0px rgba(0, 0, 0, 0.1);
+ border-radius: 8px;
+ }
+
+ .hot_documentation div a {
+ font-size: 16px;
+ font-weight: normal;
+ color: var(--e-color-brand1);
+ line-height: 26px;
+ }
+
+ .hot_documentation div span {
+ font-size: 14px;
+ font-weight: normal;
+ color: #00000080;
+ line-height: 24px;
+ margin-top: 20px;
+ }
+
+ .h5_community {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ margin-left: 30px;
+ margin-right: 30px;
+ margin-top: 20px;
+ }
+
+ .h5_community div {
+ width: 145px;
+ height: 40px;
+ text-align: center;
+ background: var(--e-color-bg2);
+ box-shadow: 0px 3px 10px 0px rgba(0, 0, 0, 0.1);
+ border-radius: 8px;
+ padding-top: 8px;
+ }
+
+ .h5_community div a {
+ font-size: 14px;
+ font-weight: normal;
+ color: var(--e-color-brand1);
+ line-height: 24px;
+ }
+
+ .search-result {
+ margin-left: 16px;
+ margin-right: 16px;
+ }
+
+ .h5_content {
+ margin-top: 60px;
+ }
+
+ .mask-mobile {
+ background-color: rgba(0, 0, 0, 0.4);
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ z-index: 1000;
+ height: calc(100vh);
+ display: none;
+ }
+ .h5-searcher {
+ display: block;
+ }
+}
+
+.h5-searcher {
+ display: none;
+}
+
+pre {
+ position: relative;
+}
+
+.btn_pre_copy {
+ cursor: pointer;
+ width: 24px;
+ height: 24px;
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ background-image: url(/img/common/copy.png);
+ background-repeat: no-repeat;
+ background-size: 100% 100%;
+}
+
+.btn_pre_copy:hover {
+ background-image: url(/img/common/copied.png);
+ background-repeat: no-repeat;
+}
+
+code {
+ padding: 0 4px;
+}
+
+code[class*="language-"] {
+ display: block;
+ overflow-x: auto;
+ padding: 30px;
+}
+code.hljs {
+ padding: 30px;
+}
+
+#right-style {
+ display: flex;
+ flex-grow: 1;
+ justify-content: space-between;
+ align-items: center;
+}
+@media screen and (min-width: 1980px) {
+ #h5-menu-top .select-box {
+ right: 190px !important;
+ }
+}
diff --git a/static/css/docsearch.css b/static/css/docsearch.css
new file mode 100644
index 0000000000000000000000000000000000000000..452c901dd8e251404b1d74d43c524231c6c361a6
--- /dev/null
+++ b/static/css/docsearch.css
@@ -0,0 +1,220 @@
+/* 搜索页面样式 */
+
+.h5-search {
+ display: none;
+}
+
+.search-result {
+ min-height: calc(100vh - 460px);
+ padding-bottom: 200px;
+ margin-top: var(--o-spacing-h2);
+ border-top: 1px solid var(--e-color-division1);
+ scrollbar-width: none;
+ -ms-overflow-style: none
+}
+
+.search-result .no-data {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ margin-top: 60px;
+ font-size: 16px;
+ line-height: 24px;
+}
+
+.search-result .no-data .empty-img {
+ width: 180px;
+}
+
+.search-result .no-data .empty-tip {
+ margin-top: 16px;
+ font-size: 16px;
+ line-height: 24px;
+ color: var(--o-color-text1);
+}
+
+.search-result::-webkit-scrollbar{
+ display: none;
+}
+@media screen and (max-width: 1100px){
+ .search-result{
+ margin-top: 0;
+ border-top:none;
+ padding-bottom: 40px;
+ }
+}
+.h5-search-result{
+ display: none;
+}
+.search-result::-webkit-scrollbar-track {
+ border-radius:10px;
+ background-color:#CAEAFF;
+}
+
+.search-result::-webkit-scrollbar {
+ width:6px;
+ background-color:#F5F5F5;
+}
+
+.search-result::-webkit-scrollbar-thumb {
+ border-radius:4px;
+ background: rgba(0, 47, 167, 0.1);
+}
+
+.search-result .main-text,
+.search-result .res-title span,
+.search-result .res-desc span {
+ color: var(--e-color-brand1);
+}
+
+
+.search-result>ul>li {
+ margin-bottom: 40px;
+}
+
+.search-result .title,.search-result ul li .res-title {
+ font-size: 20px;
+ color: var(--e-color-text1);line-height: 28px;
+}
+.search-result ul li .res-title {
+ cursor: pointer;
+}
+
+.search-result ul li .res-desc {
+ font-size: 14px;
+ color: var(--e-color-text4);
+ line-height: 22px;
+ margin: 16px 0 8px 0;
+}
+.right-nav .search-result ul li .res-desc{
+ margin: 16px 0;
+}
+
+.search-result ul li .res-vers {
+ font-size: 12px;
+ color: var(--e-color-text4);
+ line-height: 18px;
+}
+
+.search-result ul li .res-vers span {
+ color: var(--e-color-text4);
+}
+
+#pagination ._pages ._home,
+#pagination ._pages ._last {
+ display: none;
+}
+
+#baseof-pagination ._pages ._home,
+#baseof-pagination ._pages ._last {
+ display: none;
+}
+
+#web-pagination ._pages ._home,
+#web-pagination ._pages ._last {
+ display: none;
+}
+
+#pagination ._pages ._next_,
+#pagination ._pages ._prev_,
+#pagination ._pages ._pages_li_1{
+ background-color: var(--o-pagination-bg-color);
+ margin: 0 5px;
+}
+
+#baseof-pagination ._pages ._next_,
+#baseof-pagination ._pages ._prev_,
+#baseof-pagination ._pages ._pages_li_1{
+ background-color: var(--o-pagination-bg-color);
+ margin: 0 5px;
+}
+
+#web-pagination ._pages ._next_,
+#web-pagination ._pages ._prev_,
+#web-pagination ._pages ._pages_li_1{
+ background-color:var(--o-pagination-bg-color);
+ margin: 0 5px;
+}
+
+#pagination ._page_container ._pages {
+ margin-left: 10px;
+}
+
+#baseof-pagination ._page_container ._pages {
+ margin-left: 10px;
+}
+
+#web-pagination ._page_container ._pages {
+ margin-left: 10px;
+}
+
+
+@media screen and (max-width: 1100px) {
+
+
+ .body_content .h5-search {
+ position: relative;
+ margin-top: 40px;
+ }
+
+ .search-page div>input {
+ border: 1px solid var(--e-color-brand1);
+ }
+
+ .search-result .title,.search-result ul li .res-title {
+ font-size: 14px;
+ color: var(--e-color-text1); line-height: 22px;
+ }
+
+ .search-result ul li .res-vers {
+ font-size: 14px;
+ line-height: 24px;
+ }
+
+ .search-result .title {
+ padding: 17px 0 9px 0;
+ border-bottom: 1px solid var(--e-color-text1);
+ }
+
+ .search-result ul li .res-desc {
+ margin: 8px 0;
+ font-size: 12px;
+ line-height: 18px;
+ }
+
+ .search-result>ul>li {
+ margin-bottom: 16px;
+ padding-top: 16px;
+ }
+ .search-result>ul>li~li{
+ border-top: 1px solid var(--e-color-division1);
+ }
+
+ .search-result {
+ display: none;
+ }
+}
+.right-nav #result-container .search-result ul {
+ padding-top: 40px;
+}
+.h5-search-result::-webkit-scrollbar{
+ display: none !important;
+}
+
+.h5-search-result .no-data-mobile {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ margin-top: 16px;
+}
+
+.h5-search-result .no-data-mobile .empty-img-mobile {
+ width: 160px;
+}
+
+.h5-search-result .no-data-mobile .empty-tip-mobile {
+ margin-top: 8px;
+ font-size: 14px;
+ line-height: 24px;
+ color: var(--o-color-text1);
+}
\ No newline at end of file
diff --git a/static/css/float.css b/static/css/float.css
new file mode 100644
index 0000000000000000000000000000000000000000..cb0f323c00774c30b99fc65eba8e6789c0710738
--- /dev/null
+++ b/static/css/float.css
@@ -0,0 +1,1354 @@
+.float-wrap {
+ position: fixed;
+ right: 40px;
+ bottom: 200px;
+ width: 48px;
+}
+[lang="en"] .float-wrap {
+ width: 68px;
+}
+.float-wrap .bug-box {
+ display: none;
+ width: 100%;
+ background-image: url(../img/float/bug-bg.png);
+ background-size: 100%;
+ margin-bottom: 12px;
+ box-shadow: var(--e-shadow-l2);
+ position: relative;
+ user-select: none;
+ border-radius: 4px;
+}
+.float-wrap .bug-box.is-close {
+ display: none !important;
+}
+.float-wrap .bug-box .bug-text {
+ width: 100%;
+ height: 100%;
+ font-size: 14px;
+ line-height: 16px;
+ color: white;
+ padding: 20px 17px;
+ cursor: pointer;
+}
+[lang="en"] .float-wrap .bug-box .bug-text {
+ text-align: center;
+ padding: 20px 4px;
+ line-height: 18px;
+}
+.float-wrap .bug-box .icon-close {
+ position: absolute;
+ right: 0;
+ top: 0;
+ transform: translate(50%, -50%);
+ display: none;
+ cursor: pointer;
+}
+.float-wrap .bug-box:hover .icon-close {
+ /* display: block; */
+}
+.float-wrap .bug-box:hover {
+ background-image: url(../img/float/bug-bg-hover.png);
+}
+[lang="en"] .float-wrap .nav-box1 {
+ display: none;
+}
+#content .float-wrap .nav-box1 .item-nav:nth-of-type(1) {
+ display: none;
+}
+.float-wrap #slider-box {
+ position: absolute;
+ border-radius: 3px;
+ height: 6px;
+}
+.float-wrap #slider-box .input {
+ border-radius: 2px;
+ overflow: hidden;
+}
+.slider-container {
+ width: 80%;
+ margin: 50px auto;
+ text-align: center;
+ position: relative;
+}
+
+.slider-track {
+ width: 100%;
+ height: 8px;
+ background-color: var(--e-color-bg-secondary);
+ border-radius: 4px;
+ position: relative;
+ cursor: pointer;
+}
+@media screen and (max-width: 1100px) {
+ .slider-track {
+ margin-top: 10px;
+ height: 14px;
+ border-radius: 7px;
+ }
+}
+.slider-track .mark {
+ width: 0;
+ height: 100%;
+ border-radius: 4px;
+ background-image: linear-gradient(90deg, #62b2f6 0%, #002fa7 100%);
+ overflow: hidden;
+ position: absolute;
+ left: 0;
+ top: 50%;
+ transform: translateY(-50%);
+ z-index: 8;
+}
+.slider-track .mark .item-box {
+ display: grid;
+ align-items: center;
+ grid-template-columns: repeat(10, 1fr);
+ height: 100%;
+}
+.slider-track .mark-item:nth-of-type(1) {
+ transform: translateX(2px);
+}
+.slider-track .mark-item:nth-last-of-type(1) {
+ transform: translateX(-2px);
+ position: absolute;
+ right: 3px;
+ top: 50%;
+ transform: translateY(-50%);
+}
+.slider-track .mark .item-box .mark-item {
+ background-color: white;
+ width: 2px;
+ height: 2px;
+}
+.slider-track .pre-mark {
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ left: 0;
+ top: 50%;
+ z-index: 7;
+ transform: translateY(-50%);
+ display: grid;
+ grid-template-columns: repeat(10, 1fr);
+ align-items: center;
+}
+.slider-track .pre-mark .mark-item {
+ background-color: var(--e-color-bg6);
+ width: 2px;
+ height: 2px;
+ border-radius: 1px;
+}
+
+.slider-handle {
+ width: 20px;
+ height: 20px;
+ background-color: #007bff;
+ border-radius: 50%;
+ position: absolute;
+ top: 50%;
+ left: 0%;
+ transform: translate(-50%, -50%);
+ cursor: pointer;
+ background: linear-gradient(90deg, #62b2f6 0%, #002fa7 100%);
+ border: 6px solid var(--e-color-bg2);
+ box-shadow: var(--e-shadow-l2);
+ z-index: 9;
+ transition: scale 0.3s;
+}
+.slider-handle:hover {
+ transform: translate(-50%, -50%) scale(1.2);
+}
+/* huakuai */
+
+.float-wrap .item-nav {
+ width: 48px;
+ height: 48px;
+ padding: 12px;
+ position: relative;
+ cursor: pointer;
+ user-select: none;
+}
+.float-wrap .item-nav .icon-box {
+ width: 24px;
+ height: 24px;
+ color: var(--e-color-text1);
+}
+.float-wrap .nav-box1 .item-nav .icon-box:hover {
+ color: var(--e-color-brand1);
+}
+.float-wrap .nav-box1 {
+ background-color: var(--e-color-bg2);
+ box-shadow: var(--e-shadow-l2);
+ border-radius: 4px;
+}
+.float-wrap .nav-box1 .item-nav:nth-of-type(1) + .item-nav::before {
+ display: block;
+ content: "";
+ height: 1px;
+ width: 16px;
+ background-color: var(--e-color-bg4);
+ position: absolute;
+ left: 50%;
+ top: 0;
+ transform: translate(-50%);
+}
+[lang="en"] .float-wrap .nav-box2 {
+ width: 100%;
+ height: 68px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+.float-wrap .nav-box2.item-nav {
+ margin-top: 12px;
+ background-color: var(--e-color-bg2);
+ box-shadow: var(--e-shadow-l2);
+ border-radius: 4px;
+}
+.float-wrap .nav-box2 .icon-box {
+ width: 24px;
+ height: 24px;
+ color: var(--e-color-text1);
+}
+.float-wrap .nav-box2 .icon-box:hover {
+ color: var(--e-color-brand1);
+}
+
+.o-popup1 {
+ position: absolute;
+ width: 360px;
+ top: 0;
+ right: 64px;
+ background-color: var(--e-color-bg2);
+ padding: 16px 30px;
+ transition: all 0.5s;
+ transform: scale(0);
+ transform-origin: 100% 50%;
+ box-shadow: var(--e-shadow-l2);
+ cursor: default;
+ border-radius: 4px;
+}
+.float-wrap .nav-box1 .item-nav .o-popup1.active {
+ transform: scale(1);
+}
+.o-popup1.show {
+ transform: scale(1);
+}
+.o-popup1 .icon-cancel {
+ position: absolute;
+ top: 5px;
+ right: 10px;
+ cursor: pointer;
+ color: var(--e-color-text1);
+}
+.o-popup1 .icon-cancel svg {
+ width: 24px;
+ height: 24px;
+}
+.o-popup1 .slider .slider-title {
+ font-size: 14px;
+ line-height: 20px;
+ color: var(--e-color-text1);
+ text-align: center;
+}
+.o-popup1 .slider .slider-title .title-name {
+ font-weight: 600;
+}
+.o-popup1 .slider .slider-body {
+ margin-top: 30px;
+ position: relative;
+}
+@media screen and (max-width: 1100px) {
+ .o-popup1 .slider .slider-body {
+ margin-top: 18px;
+ }
+}
+.o-popup1 .slider .slider-body .slider-tip {
+ position: absolute;
+ width: 28px;
+ height: 20px;
+ line-height: 20px;
+ text-align: center;
+ color: var(--e-color-text1);
+ font-size: 12px;
+ left: 0px;
+ top: -32px;
+ box-shadow: var(--e-shadow-l2);
+ transform: translateX(-50%);
+ display: none;
+}
+@media screen and (max-width: 1100px) {
+ .o-popup1 .slider .slider-body .slider-tip {
+ display: none !important;
+ }
+}
+.o-popup1 .slider .slider-body .slider-tip .slide-btn-tip {
+ width: 28px;
+ height: 20px;
+ line-height: 20px;
+ text-align: center;
+ font-size: 12px;
+ color: var(--e-color-text1);
+ background-color: var(--e-color-bg2);
+ box-shadow: var(--e-shadow-l2);
+ position: absolute;
+ top: -30px;
+ transform: translateX(-50%);
+ left: v-bind(scorePosition);
+}
+.o-popup1 .slider .slider-body .slider-tip::after {
+ border-color: var(--e-color-bg2) transparent transparent;
+ border-style: solid;
+ border-width: 8px 8px 0;
+ bottom: -5px;
+ content: "";
+ display: block;
+ height: 0;
+ position: absolute;
+ right: 6px;
+ width: 0;
+}
+
+.o-popup1 .slider .grade-info {
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+ font-size: 12px;
+ color: var(--e-color-text4);
+ margin-top: 14px;
+}
+@media screen and (max-width: 1100px) {
+ .o-popup1 .slider .grade-info span {
+ scale: 0.84;
+ }
+}
+.o-popup1 .reason {
+ margin-top: 16px;
+ display: none;
+}
+.o-popup1 .reason .input-area {
+ border: 1px solid var(--e-color-border2);
+ padding: 8px 16px;
+ height: 88px;
+ font-size: 12px;
+ line-height: 18px;
+ position: relative;
+ border-radius: 4px;
+}
+@media screen and (max-width: 1100px) {
+ .o-popup1 .reason .input-area {
+ font-size: 14px;
+ }
+}
+.o-popup1 .reason .input-area:hover {
+ border: 1px solid var(--e-color-brand1);
+}
+.o-popup1 .reason .input-area.is-focus {
+ border: 1px solid var(--e-color-brand1);
+}
+.o-popup1 .reason .input-area textarea {
+ width: 100%;
+ height: 100%;
+ border: none;
+ outline: none;
+ resize: none;
+ background-color: var(--e-color-bg2);
+ color: var(--e-color-text1);
+ border-radius: 4px;
+}
+.o-popup1 .reason .input-area p {
+ text-align: right;
+ color: var(--e-color-text4);
+ position: absolute;
+ right: 6px;
+ bottom: 6px;
+}
+.o-popup1 .reason .more-info {
+ margin-top: 8px;
+ color: var(--e-color-text4);
+ font-size: 12px;
+ line-height: 18px;
+ text-align: center;
+}
+.o-popup1 .reason .submit-btn {
+ margin-top: 16px;
+ text-align: center;
+}
+@media screen and (max-width: 1100px) {
+ .o-popup1 .reason .submit-btn {
+ display: none;
+ }
+}
+
+.o-popup1 .reason .submit-btn button {
+ padding: 6px 26px;
+ border: 1px solid var(--e-color-border1);
+ border-color: var(--e-color-border1);
+ color: var(--e-color-text1);
+ background-color: transparent;
+ cursor: pointer;
+ border-radius: 16px;
+}
+.o-popup1 .reason .submit-btn button:hover {
+ background-color: var(--e-color-brand1);
+ color: white;
+}
+
+.float-wrap .o-popup2 {
+ position: absolute;
+ top: 0;
+ right: 64px;
+ width: 240px;
+ padding: 24px;
+ background-color: var(--e-color-bg2);
+ transition: all 0.5s;
+ transform: scale(0);
+ transform-origin: 100% 50%;
+ box-shadow: var(--e-shadow-l2);
+ cursor: default;
+ border-radius: 4px;
+}
+.float-wrap .nav-box1 .item-nav:nth-of-type(2):hover .o-popup2 {
+ transform: scale(1);
+}
+.float-wrap .o-popup2 .pop-item {
+ display: flex;
+ color: var(--e-color-text1);
+}
+.float-wrap .o-popup2 .pop-item .icon-dark {
+ display: none;
+}
+.dark .float-wrap .o-popup2 .pop-item .icon-dark {
+ display: block;
+}
+.dark .float-wrap .o-popup2 .pop-item .icon-light {
+ display: none;
+}
+.float-wrap .o-popup2 .pop-item ~ .pop-item {
+ margin-top: 18px;
+}
+.float-wrap .o-popup2 .pop-item .o-icon svg {
+ width: 32px;
+ height: 32px;
+}
+.float-wrap .o-popup2 .pop-item .text {
+ margin-left: 12px;
+ text-align: left;
+}
+.float-wrap .o-popup2 .pop-item .text .text-name {
+ font-size: 14px;
+ line-height: 32px;
+ font-weight: 600;
+}
+.float-wrap .o-popup2 .pop-item .text .text-name a {
+ color: var(--e-color-text1);
+}
+.float-wrap .o-popup2 .pop-item .text .text-name a:hover {
+ color: var(--e-color-brand1);
+}
+.float-wrap.o-popup2 .pop-item .text .text-tip {
+ font-size: 12px;
+ line-height: 18px;
+ color: var(--e-color-text3);
+}
+#float-tip {
+ position: fixed;
+ width: 400px;
+ font-size: 20px;
+ text-align: center;
+ top: -100px;
+ left: 50vw;
+ transform: translateX(-50%);
+ padding: 24px;
+ background-color: var(--e-color-bg2);
+ box-shadow: var(--e-shadow-l2);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 6px;
+ transition: top 0.5s;
+}
+@media screen and (max-width: 1100px) {
+ #float-tip {
+ width: 260px;
+ }
+}
+#float-tip.show {
+ top: 80px;
+}
+#float-tip .tip-icon {
+ display: flex;
+ align-items: center;
+}
+#float-tip .success-icon {
+ color: #6dc335;
+}
+#float-tip .error-icon {
+ color: red;
+ display: flex;
+ align-items: center;
+ width: 24px;
+ margin-right: 6px;
+}
+#float-tip .tip-text {
+ color: var(--e-color-text1);
+}
+#float-tip.success-tip .error-icon {
+ display: none;
+}
+#float-tip.error-tip .success-icon {
+ display: none;
+}
+
+/* 捉虫样式 */
+#title-evaluate {
+ position: relative;
+ z-index: 1002;
+}
+@media screen and (max-width: 1100px) {
+ #title-evaluate {
+ display: none;
+ }
+}
+.bug-hide {
+ display: none;
+}
+
+#title-evaluate .text-email,
+#title-evaluate .privacy-box .checkbox-item {
+ color: var(--e-color-text4);
+ position: relative;
+}
+
+#title-evaluate .evaluate {
+ width: 170px;
+ height: 60px;
+ text-align: center;
+ line-height: 60px;
+ background-size: 100% 100%;
+ background-image: url("../img/detail/border.png");
+}
+
+.alert {
+ position: fixed;
+ padding: 40px 64px;
+ display: none;
+ left: 50%;
+ top: 50%;
+ max-height: 90vh;
+ width: 1000px;
+ overflow-x: visible;
+ overflow-y: auto;
+ font-size: 14px;
+ transform: translate(-50%, -50%);
+ background-color: var(--e-color-bg2);
+ box-shadow: var(--e-shadow-l5);
+ z-index: 1;
+}
+
+.alert::-webkit-scrollbar-track {
+ border-radius: 8px;
+ background-color: #caeaff;
+}
+
+.alert::-webkit-scrollbar {
+ display: none;
+ border-radius: 8px;
+ width: 6px;
+ background-color: #f5f5f5;
+}
+
+.alert::-webkit-scrollbar-thumb {
+ border-radius: 4px;
+ background: rgba(0, 47, 167, 0.1);
+}
+
+.alert .title-h2 {
+ font-size: 22px;
+ text-align: center;
+ color: var(--e-color-text1);
+}
+.alert .title-h2 {
+ width: 100%;
+ display: flex;
+ justify-content: center;
+}
+
+.alert .title-h2 .help-icon {
+ width: 16px;
+ height: 16px;
+ position: relative;
+ top: -4px;
+ left: 8px;
+ background-image: url("/img/common/help.png");
+ background-repeat: no-repeat;
+ background-size: 100% 100%;
+}
+
+.alert .title-h3 {
+ position: relative;
+ display: inline-block;
+ font-size: 18px;
+ color: var(--e-color-text1);
+ margin-top: 24px;
+}
+.alert .tip-box {
+ position: absolute;
+ top: 0;
+ right: 0;
+ display: none;
+ padding: 5px 10px;
+ width: max-content;
+ transform: translateX(110%);
+ font-size: 18px;
+ background-color: rgba(218, 35, 25, 1);
+ color: rgba(255, 255, 255, 1);
+ z-index: 2;
+}
+.alert .tip-box.email-en {
+ top: 24px;
+ left: -88px;
+}
+.alert .text-email {
+ display: inline-block;
+}
+
+.alert .evaluates {
+ display: flex;
+ align-items: center;
+ margin-top: 12px;
+}
+.alert .email {
+ margin-top: 24px;
+}
+.alert .evaluates .issue {
+ position: relative;
+ margin-right: 10px;
+ cursor: pointer;
+ padding: 3px 15px;
+ font-size: 14px;
+ border: 1px solid transparent;
+ box-sizing: border-box;
+ color: var(--e-color-text4);
+}
+
+.alert .evaluates.en .issue {
+ padding: 3px 8px;
+}
+
+.alert .evaluates .active-border {
+ border: 1px solid var(--e-color-brand1);
+ color: var(--e-color-brand1);
+}
+
+.btn-submit {
+ position: relative;
+}
+.textarea-box p {
+ color: var(--e-color-text4);
+ text-align: right;
+}
+.alert .issue .issue-detail,
+.btn-submit .submit-tip {
+ position: absolute;
+ top: -20px;
+ left: -16px;
+ padding: 8px 10px;
+ width: 260px;
+ color: #777777;
+ text-align: left;
+ font-size: 12px;
+ background-color: var(--e-color-bg2);
+ transform: translateY(-100%) scale(0);
+ border: 1px solid var(--e-color-brand1);
+ z-index: 1;
+ transition: all 0.5s;
+ display: block;
+}
+.btn-submit .pr-submit-tip {
+ width: 392px !important;
+ height: 234px !important;
+ background-image: url(../img/detail/pr-tip.gif);
+ background-size: 100% 100%;
+}
+.btn-submit .tip-show {
+ transform: translateY(-100%) scale(1);
+}
+.alert .issue:hover .issue-detail {
+ transform: translateY(-100%) scale(1);
+}
+.alert .submit-type {
+ display: flex;
+ width: 100%;
+ margin-top: 16px;
+ padding-bottom: 12px;
+ border-bottom: 1px solid var(--e-color-division1);
+}
+.alert .submit-type .active-submit {
+ border: 1px solid var(--e-color-brand1);
+ color: var(--e-color-brand1);
+}
+.alert .submit-type .type-issue {
+ margin-right: 20px;
+ position: relative;
+}
+.alert .submit-type .type-issue .issue-tip,
+.alert .submit-type .type-PR .PR-tip {
+ padding: 8px 10px;
+ background-color: var(--e-color-bg2);
+ border: 1px solid var(--e-color-brand1);
+ color: var(--e-color-text4);
+ position: absolute;
+ bottom: 46px;
+ left: -30px;
+ display: block;
+ transform: scale(0);
+ transition: all 0.5s;
+}
+.alert .submit-type .type-issue .issue-tip p,
+.alert .submit-type .type-PR .PR-tip p {
+ white-space: nowrap;
+}
+.alert .submit-type .type-issue:hover .issue-tip,
+.alert .submit-type .type-PR:hover .PR-tip {
+ transform: scale(1);
+}
+.alert .submit-type .type-issue .issue-tip::before,
+.alert .submit-type .type-PR .PR-tip::before {
+ content: " ";
+ border-top: 12px solid var(--e-color-brand1);
+ border-left: 12px solid transparent;
+ border-right: 12px solid transparent;
+ position: absolute;
+ bottom: -12px;
+ left: 40px;
+}
+.alert .submit-type .type-issue .issue-tip::after,
+.alert .submit-type .type-PR .PR-tip::after {
+ content: " ";
+ border-top: 12px solid var(--e-color-bg2);
+ border-left: 12px solid transparent;
+ border-right: 12px solid transparent;
+ position: absolute;
+ bottom: -11px;
+ left: 40px;
+}
+.alert .submit-type .type-title,
+.alert .evaluates .issue-title {
+ color: var(--e-color-text1);
+ margin-right: 24px;
+ display: block;
+ padding: 3px 0;
+}
+.alert .submit-type > span + span {
+ color: var(--e-color-text4);
+ display: block;
+ padding: 3px 15px;
+ cursor: pointer;
+ border: 1px solid transparent;
+ position: relative;
+}
+.alert .submit-type span .tip {
+ position: absolute;
+ bottom: 30px;
+ background-color: var(--e-color-bg2);
+}
+
+.btn-submit .submit-tip {
+ padding: 10px 15px;
+ line-height: 25px;
+ width: 280px;
+}
+
+@keyframes rainbowSlide {
+ 100% {
+ background-position: -400% 0;
+ }
+}
+
+.main-tip {
+ flex: 1;
+ display: flex;
+ padding-left: 10px;
+ font-size: 16px;
+ color: var(--e-color-text1);
+ text-align: center;
+ position: relative;
+ height: 30px;
+ line-height: 30px;
+ background-color: black;
+ color: white;
+}
+
+.issue-detail::before,
+.issue-detail::after,
+.score-detail::after,
+.score-detail::before,
+.submit-tip::after,
+.submit-tip::before {
+ content: " ";
+ border-top: 12px solid var(--e-color-brand1);
+ border-left: 12px solid transparent;
+ border-right: 12px solid transparent;
+ position: absolute;
+ bottom: -12px;
+ left: 40px;
+}
+
+.issue-detail::after,
+.submit-tip::after {
+ border-top: 12px solid var(--e-color-bg2);
+ bottom: -11px;
+}
+
+.score-detail::after,
+.score-detail::before {
+ border-top: 4px solid var(--e-color-brand1);
+ border-left: 4px solid transparent;
+ border-right: 4px solid transparent;
+ left: 10px;
+ bottom: -4px;
+}
+
+.score-detail::after {
+ border-top: 4px solid var(--e-color-bg2);
+ bottom: -3px;
+}
+.issue-detail p {
+ position: relative;
+ margin-bottom: 8px;
+ padding-left: 10px;
+}
+
+.alert .satisfaction {
+ display: flex;
+ justify-items: start;
+ align-items: center;
+ color: #8f9091;
+ margin-top: 16px;
+}
+.alert .privacy-box {
+ margin-top: 24px;
+ display: flex;
+ justify-content: center;
+}
+.alert .satisfaction .score-box {
+ display: flex;
+ align-items: center;
+}
+
+.satisfaction .score-box .score {
+ position: relative;
+ cursor: pointer;
+ margin-left: 10px;
+ width: 30px;
+ height: 30px;
+ text-align: center;
+ transition: all 0.3s;
+ color: var(--e-color-text4);
+ line-height: 30px;
+ background-color: var(--e-color-bg4);
+}
+.satisfaction .score-box .score:hover {
+ color: var(--e-color-brand1);
+ background-color: var(--e-color-kleinblue10);
+}
+
+.score:hover .score-detail {
+ transform: translateY(-100%) scale(1);
+}
+
+.score .score-detail {
+ position: absolute;
+ display: block;
+ padding: 0 5px;
+ width: max-content;
+ top: -7px;
+ color: var(--e-color-text1);
+ background-color: var(--e-color-bg2);
+ border: 1px solid var(--e-color-brand1);
+ transform: translateY(-100%) scale(0);
+ transition: all 0.5s;
+}
+
+.score-box .score:last-child {
+ margin-right: 10px;
+}
+
+.satisfaction .score-box .active {
+ color: var(--e-color-brand1);
+ background-color: var(--e-color-kleinblue10);
+}
+.alert .textarea-box {
+ margin-top: 16px;
+ min-height: 100px;
+}
+.alert .main-input {
+ width: 100%;
+ outline: none;
+ min-height: 100px;
+ padding: 8px 10px;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ border: 1px solid #cbd5de;
+ overflow: auto;
+ resize: none;
+ -webkit-transition: all 0.2s;
+ transition: all 0.2s;
+ background-color: var(--e-color-bg1);
+ color: var(--e-color-text1);
+}
+::-moz-placeholder {
+ color: var(--e-color-text4);
+}
+:-ms-input-placeholder {
+ color: var(--e-color-text4);
+}
+::-webkit-input-placeholder {
+ color: var(--e-color-text4);
+}
+
+.alert .main-input:focus {
+ border-color: var(--e-color-brand1);
+}
+
+.checkbox-list {
+ display: flex;
+}
+
+/* .checkbox-item input[type="radio"] {
+ cursor: pointer;
+ width: 16px;
+ display: none;
+ margin-right: 10px;
+ outline: none;
+} */
+
+.checkbox-item {
+ cursor: pointer;
+ position: relative;
+ display: flex;
+ align-items: center;
+ margin-left: 50px;
+}
+
+.checkbox-item:first-child {
+ margin-left: 0;
+}
+
+.privacy-item .checkbox-item {
+ margin: 0;
+ text-align: center;
+}
+
+.privacy-box a {
+ color: var(--e-color-brand1);
+ font-size: inherit;
+ text-decoration: none;
+}
+
+.label {
+ cursor: pointer;
+ padding-left: 25px;
+ font-size: 16px;
+}
+
+/* 设置未选中样式 */
+input[type="checkbox"] {
+ position: relative;
+ width: 16px;
+ height: 16px;
+ border: 1px solid var(--e-color-division1);
+ /* 取消默认样式 */
+ -webkit-appearance: none;
+}
+/* 设置选中样式 */
+input:not([is=o-switch])[type="checkbox"]:checked {
+ background-color: var(--e-color-brand1);
+}
+input:not([is=o-switch])[type="checkbox"]:checked::after {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 14px;
+ height: 14px;
+ border: none;
+ text-align: center;
+ background-position: center center;
+ background-repeat: no-repeat;
+ background-size: contain;
+ background-image: url(../img/common/icon-checkbox.svg);
+}
+
+.other-question {
+ margin: 0 6px;
+ border: 0;
+ width: 35px;
+ outline: none;
+ border-bottom: solid 1px;
+ background-color: transparent;
+ font-size: inherit;
+}
+
+.feedback {
+ cursor: pointer;
+ position: fixed;
+ display: none;
+ width: 32px;
+ border-radius: 5px;
+ z-index: 1;
+}
+.feedback img {
+ display: block;
+ width: 100%;
+}
+
+.evaluate-box {
+ opacity: 0;
+ position: absolute;
+ left: -180px;
+ top: 0;
+ padding-right: 12px;
+ transform: translateX(100px);
+ z-index: -1;
+ transition: all 0.5s;
+}
+
+.btn-submit {
+ position: relative;
+ display: block;
+ width: 150px;
+ height: 40px;
+ font-size: 18px;
+ line-height: 40px;
+ margin: 20px auto 0;
+ text-align: center;
+ background-color: var(--e-color-brand1);
+ color: #fff;
+}
+.btn-submit > span {
+ display: inline-block;
+ width: 100%;
+ height: 100%;
+ cursor: pointer;
+}
+.alert .icon-close {
+ position: absolute;
+ cursor: pointer;
+ display: block;
+ background-image: url("../img/detail/close.png");
+ width: 16px;
+ height: 16px;
+ right: 25px;
+ top: 25px;
+}
+.alert-mask {
+ width: 100vw;
+ height: 100vh;
+ background-color: rgba(0, 0, 0, 0.3);
+}
+
+#title-evaluate .right-nav {
+ position: fixed;
+ display: none;
+ width: 64px;
+ height: 192px;
+ bottom: 326px;
+ right: 10vw;
+ max-height: calc(100vh - 157px);
+ box-shadow: var(--e-shadow-l4);
+}
+
+.right-nav .nav-item {
+ cursor: pointer;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding: 12px;
+ width: 64px;
+ height: 64px;
+ text-align: center;
+ overflow: hidden;
+ transition: all 0.3s;
+ background-size: 100% 100%;
+ background-repeat: no-repeat;
+ background-color: var(--e-color-bg2);
+}
+
+.right-nav .nav-item:first-child {
+ cursor: move;
+}
+
+#title-evaluate .nav-item a {
+ font-size: 14px;
+ color: var(--e-color-text1);
+}
+.right-nav .nav-item:hover {
+ overflow: visible;
+ background-color: var(--e-color-brand1);
+ color: white !important;
+}
+.right-nav .nav-item:hover a {
+ color: white !important;
+}
+.right-nav .nav-item:nth-child(1) {
+ background: url("../img/common/编组 14.svg") no-repeat var(--e-color-brand1);
+ background-size: 40px 40px;
+ background-position: center;
+}
+.dark .right-nav .nav-item:nth-child(1) {
+ background: url("../img/common/编组 14.svg") no-repeat var(--e-color-bg2);
+ background-position: center;
+}
+
+.right-nav .nav-item:nth-child(2) {
+ background-image: url("../img/detail/inside2.png");
+}
+
+.right-nav .nav-item:nth-child(3) {
+ position: relative;
+ background-image: url("../img/detail/inside3.png");
+ color: var(--e-color-text1);
+}
+#title-evaluate .nav-item:nth-child(3):hover .evaluate-box {
+ transform: translateX(0);
+ opacity: 1;
+}
+.right-nav .nav-item:nth-child(4) {
+ background-image: url("../img/detail/inside4.png");
+}
+
+#title-evaluate .evaluate span {
+ font-size: 14px;
+ color: var(--e-color-text1);
+ line-height: 17px;
+}
+
+#title-evaluate .evaluate i {
+ display: inline-block;
+ width: 16px;
+ height: 16px;
+ background-image: url("../img/detail/icon-star.svg");
+ cursor: pointer;
+ margin-bottom: -2px;
+ position: relative;
+}
+
+#title-evaluate .evaluate i > div {
+ width: 60px;
+ height: 20px;
+ box-shadow: 0px 6px 20px 0px rgba(0, 0, 0, 0.1);
+ background-repeat: no-repeat;
+ background-size: cover;
+ background-position: center center;
+ position: absolute;
+ top: 22px;
+ left: -21px;
+ display: none;
+}
+
+#title-evaluate .evaluate i[key="1"] > div {
+ background-image: url("../img/detail/1-star.png");
+}
+
+#title-evaluate .evaluate i[key="2"] > div {
+ background-image: url("../img/detail/2-star.png");
+}
+
+#title-evaluate .evaluate i[key="3"] > div {
+ background-image: url("../img/detail/3-star.png");
+}
+
+#title-evaluate .evaluate i[key="4"] > div {
+ background-image: url("../img/detail/4-star.png");
+}
+
+#title-evaluate .evaluate i[key="5"] > div {
+ background-image: url("../img/detail/5-star.png");
+}
+
+#title-evaluate .evaluate .active {
+ background-image: url("../img/detail/active-star.svg");
+}
+.shake1 {
+ animation: shake1 0.1s linear infinite;
+}
+
+.shake {
+ animation: shake 1.5s linear infinite;
+}
+@keyframes shake {
+ 0%,
+ 100% {
+ transform: translateX(110%);
+ }
+ 10% {
+ transform: translateX(110%);
+ }
+ 15%,
+ 25%,
+ 35% {
+ transform: translateX(110%);
+ }
+ 20%,
+ 30%,
+ 40% {
+ transform: translateX(120%);
+ }
+ 45% {
+ transform: translateX(110%);
+ }
+ 50% {
+ transform: translateX(120%);
+ }
+ 55%,
+ 90% {
+ transform: translateX(110%);
+ }
+}
+
+@keyframes shake1 {
+ 0%,
+ 100% {
+ transform: translateX(5px);
+ }
+ 10% {
+ transform: translateX(5px);
+ }
+ 15%,
+ 25%,
+ 35% {
+ transform: translateX(-5px);
+ }
+ 20%,
+ 30%,
+ 40%,
+ 50% {
+ transform: translateX(-5px);
+ }
+ 55%,
+ 90% {
+ transform: translateX(5px);
+ }
+}
+/* 移动端nss评分 */
+.float-mobile {
+ position: sticky;
+ bottom: 16px;
+ width: 100%;
+ padding: 0 16px;
+ margin-bottom: 16px;
+ z-index: 9;
+ display: none;
+}
+.float-mobile .float-head {
+ height: 40px;
+ padding: 12px;
+ margin: 0 auto;
+ background: linear-gradient(90deg, #d7e8f7 0%, #c4cfe8 100%);
+ border-radius: 8px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+}
+.float-mobile .float-head .head-title {
+ display: flex;
+ height: 100%;
+ align-items: center;
+ font-size: 12px;
+ line-height: 16px;
+ white-space: nowrap;
+}
+.float-mobile .float-head .head-title .icon-smile {
+ margin-right: 8px;
+}
+.float-mobile .float-head .head-title .title-name {
+ font-weight: 600;
+}
+.float-mobile .icon-box {
+ display: flex;
+}
+.float-mobile .float-head .icon-cancel {
+ position: absolute;
+ display: flex;
+ right: 12px;
+ top: 50%;
+ transform: translateY(-50%);
+}
+.float-mobile .float-head .icon-cancel svg {
+ width: 16px;
+ height: 16px;
+}
+.float-mobile .float-content {
+ position: fixed;
+ left: 0;
+ top: 0;
+ width: 100vw;
+ height: 100vh;
+ z-index: 9;
+ display: none;
+}
+.float-mobile .float-content .float-mask {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.4);
+}
+.float-mobile .float-content .o-popup1 {
+ position: absolute;
+ top: auto;
+ bottom: 0px;
+ left: 0;
+ border-radius: 8px 8px 0px 0px;
+ transform: scale(1);
+ width: 100%;
+}
+.float-mobile .float-content .o-popup1 .icon-cancel {
+ display: none;
+}
+.o-popup1 .slider-tip-mb {
+ display: none;
+}
+.float-mobile .float-content .o-popup1 .slider-tip-mb {
+ display: flex;
+ position: relative;
+ height: 18px;
+}
+.float-mobile .float-content .o-popup1 .slider-tip-mb .tip-item {
+ position: absolute;
+ font-size: 14px;
+ transform: translateX(-50%);
+ color: var(--e-color-text1);
+}
+.float-mobile .float-content .o-popup1 .slider-tip-mb .tip-item.active {
+ font-size: 16px;
+}
+.float-mobile .float-content .submit-btn-mb {
+ display: flex;
+ margin-top: 12px;
+}
+.float-mobile .float-content .submit-btn-mb .o-button {
+ flex-grow: 1;
+ border: none;
+ background-color: transparent;
+ font-size: 16px;
+ line-height: 24px;
+ position: relative;
+ color: var(--e-color-text1);
+}
+.float-mobile .float-content .submit-btn-mb .o-button.forbidden {
+ color: var(--e-color-text5);
+}
+.float-mobile .float-content .submit-btn-mb .o-button:nth-of-type(1):after {
+ display: block;
+ content: "";
+ width: 1px;
+ height: 100%;
+ background-color: var(--e-color-text5);
+ position: absolute;
+ right: 0;
+ top: 0;
+}
diff --git a/static/css/h5_footer.css b/static/css/h5_footer.css
new file mode 100644
index 0000000000000000000000000000000000000000..9409a299aae035b6fe636c7064092c582c2fa925
--- /dev/null
+++ b/static/css/h5_footer.css
@@ -0,0 +1,61 @@
+.h5_footer {
+ display: none;
+}
+
+@media screen and (max-width: 1100px) {
+ .h5_footer {
+ display: block;
+ text-align: center;
+ padding-top: 30px;
+ padding-bottom: 30px;
+ background: var(--e-color-bg2);
+ }
+ .h5_footer p{
+ color: var(--e-color-text1);
+ }
+ .h5_footer div:nth-child(1) {
+ margin-bottom: 10px;
+ }
+ .h5_footer>div:nth-child(2){
+ margin-top: 70px;
+ }
+ .h5_footer div:nth-child(1) p {
+ font-size: 12px;
+ margin: 0 50px 20px;
+ }
+
+ .h5_footer div:nth-child(1) img {
+ width: 189px;
+ height: 40px;
+ }
+
+ .h5_footer div:nth-child(2) p {
+ margin-top: 10px;
+ font-size: 14px;
+ color: var(--e-color-text1); line-height: 16px;
+
+ }
+
+ .h5_footer div:nth-child(3) {
+ margin-top: 20px;
+ }
+
+ .h5_footer div:nth-child(3) img {
+ width: 78px;
+ height: 78px;
+ }
+
+ .h5_footer div:nth-child(3) p:nth-child(2) {
+ margin-top: 10px;
+ font-size: 12px;
+ font-weight: normal;
+ color: var(--e-color-text1); line-height: 12px;
+ }
+
+ .h5_footer div:nth-child(3) p:nth-child(3) {
+ margin-top: 20px;
+ font-size: 12px;
+ font-weight: normal;
+ color: var(--e-color-text1); line-height: 12px;
+ }
+}
\ No newline at end of file
diff --git a/static/css/highlightjs-theme.css b/static/css/highlightjs-theme.css
new file mode 100644
index 0000000000000000000000000000000000000000..ac82fe3f10f159132409ef75072b72f2586046d8
--- /dev/null
+++ b/static/css/highlightjs-theme.css
@@ -0,0 +1,203 @@
+pre,
+code {
+ font-family: 'SFMono-Regular', 'Menlo', 'Monaco', 'Consolas', 'Liberation Mono', monospace;
+}
+
+pre code.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 1em
+}
+
+code.hljs {
+ padding: 3px 5px
+}
+
+.hljs {
+ color: white;
+ background: #2b2b2f;
+}
+
+.dark .hljs {
+ background: #2b2b2f;
+}
+
+/*
+
+Atom One Light by Daniel Gamage
+Original One Light Syntax theme from https://github.com/atom/one-light-syntax
+
+base: #fafafa
+mono-1: #383a42
+mono-2: #686b77
+mono-3: #a0a1a7
+hue-1: #0184bb
+hue-2: #4078f2
+hue-3: #a626a4
+hue-4: #50a14f
+hue-5: #e45649
+hue-5-2: #c91243
+hue-6: #986801
+hue-6-2: #c18401
+
+*/
+
+.hljs-comment,
+.hljs-quote {
+ color: #a0a1a7;
+ font-style: italic
+}
+
+.hljs-doctag,
+.hljs-formula,
+.hljs-keyword {
+ color: #a626a4
+}
+
+.hljs-deletion,
+.hljs-name,
+.hljs-section,
+.hljs-selector-tag,
+.hljs-subst {
+ color: #e45649
+}
+
+.hljs-literal {
+ color: #0184bb
+}
+
+.hljs-addition,
+.hljs-attribute,
+.hljs-meta .hljs-string,
+.hljs-regexp,
+.hljs-string {
+ color: #50a14f
+}
+
+.hljs-attr,
+.hljs-number,
+.hljs-selector-attr,
+.hljs-selector-class,
+.hljs-selector-pseudo,
+.hljs-template-variable,
+.hljs-type,
+.hljs-variable {
+ color: #986801
+}
+
+.hljs-bullet,
+.hljs-link,
+.hljs-meta,
+.hljs-selector-id,
+.hljs-symbol,
+.hljs-title {
+ color: #4078f2
+}
+
+.hljs-built_in,
+.hljs-class .hljs-title,
+.hljs-title.class_ {
+ color: #c18401
+}
+
+.hljs-emphasis {
+ font-style: italic
+}
+
+.hljs-strong {
+ font-weight: 700
+}
+
+.hljs-link {
+ text-decoration: underline
+}
+
+/*
+
+Atom One Dark by Daniel Gamage
+Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax
+
+base: #282c34
+mono-1: #abb2bf
+mono-2: #818896
+mono-3: #5c6370
+hue-1: #56b6c2
+hue-2: #61aeee
+hue-3: #c678dd
+hue-4: #98c379
+hue-5: #e06c75
+hue-5-2: #be5046
+hue-6: #d19a66
+hue-6-2: #e6c07b
+
+*/
+
+.dark .hljs-comment,
+.dark .hljs-quote {
+ color: #5c6370;
+ font-style: italic
+}
+
+.dark .hljs-doctag,
+.dark .hljs-formula,
+.dark .hljs-keyword {
+ color: #c678dd
+}
+
+.dark .hljs-deletion,
+.dark .hljs-name,
+.dark .hljs-section,
+.dark .hljs-selector-tag,
+.dark .hljs-subst {
+ color: #e06c75
+}
+
+.dark .hljs-literal {
+ color: #56b6c2
+}
+
+.dark .hljs-addition,
+.dark .hljs-attribute,
+.dark .hljs-meta .hljs-string,
+.dark .hljs-regexp,
+.dark .hljs-string {
+ color: #98c379
+}
+
+.dark .hljs-attr,
+.dark .hljs-number,
+.dark .hljs-selector-attr,
+.dark .hljs-selector-class,
+.dark .hljs-selector-pseudo,
+.dark .hljs-template-variable,
+.dark .hljs-type,
+.dark .hljs-variable {
+ color: #d19a66
+}
+
+.dark .hljs-bullet,
+.dark .hljs-link,
+.dark .hljs-meta,
+.dark .hljs-selector-id,
+.dark .hljs-symbol,
+.dark .hljs-title {
+ color: #61aeee
+}
+
+.dark .hljs-built_in,
+.dark .hljs-class .hljs-title,
+.dark .hljs-title.class_ {
+ color: #e6c07b
+}
+
+.dark .hljs-emphasis {
+ font-style: italic
+}
+
+.dark .hljs-strong {
+ font-weight: 700
+}
+
+.dark .hljs-link {
+ text-decoration: underline
+}
\ No newline at end of file
diff --git a/static/css/index.css b/static/css/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..bd16cfd5dfee3202ed305846353e9b80cce050bd
--- /dev/null
+++ b/static/css/index.css
@@ -0,0 +1,761 @@
+#app {
+ width: 100vw;
+ height: 100vh;
+ display: flex;
+ flex-direction: row;
+ background-color: var(--e-color-bg1);
+}
+
+#app > #left {
+ position: sticky;
+ top: 0;
+ left: 0;
+ width: 300px;
+ min-width: 300px;
+ background-color: var(--e-color-kleinblue5);
+ overflow: auto;
+ height: 100vh;
+ min-height: 100vh;
+}
+#app > #left .left {
+ width: 100%;
+ padding-top: 16px;
+ padding-bottom: 12px;
+ padding-left: 40px;
+}
+
+#app > #left img {
+ height: 32px;
+}
+
+#app > #left > ul,
+#app > #left > .version-title {
+ margin-left: 40px;
+ margin-right: 40px;
+ margin-top: 24px;
+}
+#app > #left > .version-title {
+ margin-top: 53px;
+ font-size: 18px;
+ color: #fff;
+ display: flex;
+ align-items: center;
+}
+#app > #left .version-list {
+ padding-left: 12px;
+}
+#app > #left .version-list a {
+ color: #ffffff;
+ display: block;
+ width: 100%;
+ height: 100%;
+ font-size: 14px;
+}
+#app > #left .version-list li {
+ padding-bottom: 16px;
+}
+#app > #left .long-time {
+ margin-top: 40px;
+}
+#app > #left .select-version {
+ color: #fff;
+ padding: 0 40px;
+}
+#app > #left .select-version .select-version-title {
+ width: 100%;
+ display: flex;
+ padding: 16px 0;
+ align-items: center;
+ justify-content: space-between;
+ line-height: 24px;
+ cursor: pointer;
+}
+#app > #left .long-time .long-title {
+ padding-top: 0;
+}
+#app > #left .select-version .select-version-title .icon-down {
+ flex-shrink: 0;
+ background-image: url(../img/common/icon-down-dark.svg);
+ transition: all 0.5s;
+ cursor: pointer;
+}
+#app > #left .select-version .select-version-title .icon-down.show {
+ transform: rotate(180deg);
+}
+#app > #left .select-version .select-version-title::before {
+ display: none;
+}
+#app > #left .select-version .version-list {
+ max-height: 0;
+ transition: max-height 0.5s;
+ overflow: hidden;
+}
+#app > #left .select-version .version-list.show {
+ max-height: 400px;
+}
+
+#app > #right {
+ width: calc(100vw - 300px);
+ overflow-x: hidden;
+ background-color: var(--e-color-bg1);
+}
+
+#app > #right > header {
+ width: calc(100vw - 300px);
+ font-size: 18px;
+ height: 60px;
+ background-color: #fff;
+}
+
+#app > #right > header div #lang {
+ border: none;
+ cursor: pointer;
+}
+#app > #right > header div #lang:hover .option {
+ display: block;
+}
+#app > #right .index-content {
+ width: calc(100% - 260px);
+}
+@media screen and (max-width: 1480px) {
+ #app > #right .index-content {
+ width: 100%;
+ }
+}
+
+#search_header {
+ display: flex;
+ flex-direction: row;
+ background-color: var(--e-color-bg1);
+ justify-content: space-between;
+ align-items: center;
+ padding-left: 120px;
+ padding-right: 120px;
+}
+
+#search_header div:nth-child(1) {
+ width: 48%;
+}
+
+#search_header div:nth-child(1) span {
+ font-size: 36px;
+ line-height: 48px;
+ color: var(--e-color-text1);
+ font-weight: 300;
+}
+
+.search_right {
+ width: 48%;
+ margin-top: 85px;
+ margin-bottom: 85px;
+ display: flex;
+ justify-content: end;
+ align-items: center;
+}
+
+.search_right img {
+ width: 100%;
+}
+
+#search-input {
+ position: relative;
+}
+
+#search-input input {
+ width: 78%;
+ font-size: var(--o-font-size-text);
+ height: 48px;
+ background: var(--e-color-bg-secondary);
+ border: 1px solid transparent;
+ padding-left: 40px;
+ color: var(--e-color-text1);
+}
+#search-input input::-webkit-input-placeholder {
+ font-size: var(--o-font-size-text);
+ line-height: 48px;
+ font-weight: 300;
+}
+#search-input input:focus {
+ outline: 1px solid var(--e-color-brand1);
+}
+.index-result {
+ background-color: var(--e-color-bg1);
+}
+.index-result {
+ padding-top: 40px;
+}
+#search-input i {
+ position: absolute;
+ left: 8px;
+ top: 12px;
+ display: inline-block;
+ width: 24px;
+ height: 24px;
+ background: url(../img/search/search.svg) no-repeat 100%/100%;
+}
+.dark #search-input i {
+ background: url(../img/search/search-dark.svg) no-repeat 100%/100%;
+}
+
+#search_content {
+ padding-left: 120px;
+ padding-right: 140px;
+ background-color: var(--e-color-bg1);
+ display: none;
+}
+
+#search_content hr {
+ width: 99%;
+ height: 1px;
+ background-color: #80000000;
+}
+.hot-document {
+ padding-top: 40px;
+ padding-left: 120px;
+ padding-right: 120px;
+}
+@media screen and (max-width: 1100px) {
+ .hot-document {
+ margin-top: 40px;
+ padding: 0 16px;
+ }
+}
+h1 {
+ text-align: left;
+ color: var(--e-color-text1);
+ font-size: 36px;
+ line-height: 48px;
+ font-weight: 300;
+}
+
+#document_content {
+ width: 100%;
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 16px;
+}
+
+@media screen and (max-width: 1540px) {
+ #document_content {
+ grid-template-columns: repeat(2, 1fr);
+ }
+}
+@media screen and (max-width: 350px) {
+ #document_content {
+ grid-template-columns: repeat(1, 1fr);
+ }
+}
+
+#document_content > div {
+ width: 100%;
+ height: 100%;
+ padding: 24px 40px;
+ box-shadow: var(--e-shadow-l2);
+ background-color: var(--e-color-bg2);
+ cursor: pointer;
+ position: relative;
+}
+@media screen and (max-width: 1100px) {
+ #document_content > div {
+ padding: 24px;
+ }
+}
+#document_content > div .lable-hot {
+ position: absolute;
+ right: 8px;
+ top: 0;
+ color: #ffffff;
+ background: linear-gradient(135deg, #fb4953 0%, #c7000b 100%);
+ padding: 2px 5px;
+ font-size: var(--o-font-size-tip);
+ line-height: var(--o-font-size-tip);
+}
+#document_content > div .hot-name {
+ color: var(--e-color-brand1);
+ font-size: var(--o-font-size-h8);
+}
+@media screen and (max-width: 1100px) {
+ #document_content > div .hot-name {
+ font-size: 14px;
+ }
+ #document_content > div .lable-hot {
+ font-size: 12px;
+ line-height: 14px;
+ padding: 2px 5px;
+ }
+}
+#document_content > div:hover {
+ box-shadow: var(--e-shadow-l2_hover);
+}
+
+#document_content a {
+ color: var(--e-color-text1);
+ font-size: 18px;
+ line-height: 26px;
+}
+
+.app-mobile {
+ display: none;
+}
+
+.hot_version {
+ display: flex !important;
+ justify-content: space-between !important;
+ align-items: center;
+ width: 100% !important;
+ padding: 0px !important;
+ background-color: #1a000000 !important;
+ box-shadow: none !important;
+}
+
+#document_content .hot-docs-desc {
+ color: var(--e-color-text1);
+ margin-top: var(--o-spacing-h5);
+ font-size: var(--o-font-size-text);
+ line-height: var(--o-line-height-text);
+}
+
+.hot_version > span {
+ background: linear-gradient(225deg, #feb32a 0%, #f6d365 100%);
+ line-height: var(--o-line-height-text);
+ padding: 0 8px;
+ font-size: var(--o-font-size-tip);
+}
+.hot_version p {
+ color: var(--e-color-text1);
+ font-size: var(--o-font-size-h7);
+ line-height: var(--o-line-height-text);
+}
+.nav-menu {
+ box-shadow: var(--e-shadow-l1);
+}
+@media screen and (max-width: 1100px) {
+ .h5_footer {
+ display: block !important;
+ background-color: var(--e-color-bg2);
+ }
+ .h5-nav-menu {
+ width: 100vw;
+ height: 48px;
+ padding: 12px 16px;
+ position: fixed;
+ left: 0;
+ top: 0;
+ z-index: 9;
+ background-color: var(--e-color-bg2);
+ }
+ .app-mobile .h5_content {
+ background-color: var(--e-color-bg1);
+ padding-bottom: 40px;
+ }
+ .h5-nav-menu .h5-logo {
+ width: 137px;
+ height: 23px;
+ background: url(../img/common/logo-mobile.svg) no-repeat 100%/100%;
+ }
+ .dark .h5-nav-menu .h5-logo {
+ background: url(../img/common/logo-pc.png) no-repeat 100%/100%;
+ }
+ #app {
+ display: none !important;
+ }
+
+ .app-mobile {
+ display: block;
+ position: relative;
+ background-color: var(--e-color-bg1);
+ }
+
+ .searcher {
+ display: none;
+ z-index: 2000;
+ position: fixed;
+ overflow: scroll;
+ background-color: #fff;
+ top: 48px;
+ max-height: 80vh;
+ width: 100%;
+ }
+
+ .h5_search_container {
+ display: flex;
+ margin-top: 80px;
+ width: 315px;
+ flex-direction: row;
+ justify-content: space-between;
+ }
+ .h5_search_container input {
+ width: 256px;
+ height: 32px;
+ background: var(--e-color-bg2);
+ border-radius: 4px;
+ padding: 9px 12px;
+ font-size: 12px;
+ font-weight: 400;
+ color: var(--e-color-text1);
+ line-height: 14px;
+ border: 1px solid rgba(0, 0, 0, 0.3);
+ }
+
+ .h5_search_container input:focus {
+ outline: 0;
+ }
+
+ .h5_search_container .h5_search_btn {
+ width: 44px;
+ height: 32px;
+ background: var(--e-color-brand1);
+ border-radius: 4px;
+ font-size: 12px;
+ color: #ffffff;
+ line-height: 32px;
+ text-align: center;
+ }
+
+ .container {
+ height: 70px;
+ margin: 0 auto;
+ }
+
+ .h5_left span {
+ position: relative;
+ left: -30px;
+ font-size: 16px;
+ }
+
+ .h5_left a img {
+ width: 154px;
+ height: auto;
+ }
+
+ .h5-right .icon-lang {
+ margin-right: 33px;
+ }
+
+ .app-mobile > img {
+ margin-top: 90px;
+ }
+
+ .h5_versions {
+ padding-left: 16px;
+ padding-right: 16px;
+ margin-top: 40px;
+ text-align: center;
+ }
+
+ .h5_versions > span {
+ font-weight: 300;
+ font-size: 16px;
+ color: var(--e-color-text1);
+ }
+
+ #h5_versions {
+ margin-top: 24px;
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ grid-gap: 20px;
+ }
+
+ #h5_versions li {
+ width: 100%;
+ height: 28px;
+ box-shadow: 0px 3px 10px 0px rgba(0, 0, 0, 0.1);
+ font-size: 14px;
+ font-weight: normal;
+ background-color: var(--e-color-brand1);
+ line-height: 28px;
+ text-align: center;
+ }
+ #h5_versions li a {
+ display: inline-block;
+ width: 100%;
+ height: 100%;
+ color: #fff;
+ font-weight: 400;
+ }
+
+ h3 {
+ margin-top: 40px;
+ font-size: 16px;
+ font-weight: 300;
+ text-align: center;
+ color: var(--e-color-text1);
+ }
+
+ .hot_documentation {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ margin-top: 20px;
+ padding: 0 16px;
+ }
+
+ .hot_documentation div {
+ width: 100%;
+ height: auto;
+ padding: 12px;
+ text-align: left;
+ margin-top: 16px;
+ background: var(--e-color-bg2);
+ box-shadow: 0px 3px 10px 0px rgba(0, 0, 0, 0.1);
+ }
+ .hot_documentation div .hot_version {
+ margin-top: 0;
+ margin-bottom: 4px;
+ }
+ .hot_documentation div .hot_version p {
+ color: var(--e-color-text1);
+ font-weight: 500;
+ font-size: 14px;
+ line-height: 22px;
+ line-height: var(--o-line-height-text);
+ }
+ .hot_documentation div .hot_version span {
+ margin-top: 0;
+ font-size: 12px;
+ font-weight: 400;
+ height: 14px;
+ line-height: 14px;
+ padding: 0 4px;
+ color: #000000;
+ }
+ .hot_documentation div a {
+ font-size: 16px;
+ font-weight: normal;
+ color: var(--e-color-brand1);
+ line-height: 26px;
+ }
+
+ .hot_documentation > div > span {
+ font-size: 12px;
+ font-weight: normal;
+ color: var(--e-color-text4);
+ line-height: 18px;
+ }
+
+ .h5_community {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ padding: 0 16px;
+ margin-top: 20px;
+ }
+
+ .h5_community div {
+ height: 40px;
+ text-align: center;
+ background: #fbfbfb;
+ box-shadow: 0px 3px 10px 0px rgba(0, 0, 0, 0.1);
+ border-radius: 8px;
+ padding-top: 8px;
+ margin-bottom: 30px;
+ }
+
+ .h5_community div a {
+ font-size: 14px;
+ font-weight: normal;
+ color: var(--e-color-brand1);
+ line-height: 24px;
+ }
+
+ .h5-search {
+ width: 100vw;
+ height: 48px;
+ padding: 12px 16px;
+ background: var(--e-color-bg2);
+ position: fixed;
+ left: 0;
+ top: 0;
+ font-size: 14px;
+ }
+
+ .h5-search .icon-search {
+ position: absolute;
+ left: 24px;
+ top: 16px;
+ display: inline-block;
+ width: 16px;
+ height: 16px;
+ background: url(../img/search/search.svg) no-repeat 100%/100%;
+ }
+ .h5-search .icon-clear {
+ position: absolute;
+ right: 72px;
+ top: 16px;
+ display: none;
+ width: 16px;
+ height: 16px;
+ background: url(../img/common/icon-close-light.svg) no-repeat 100%/100%;
+ }
+ .dark .h5-search .icon-clear {
+ background: url(../img/common/icon-close-dark.svg) no-repeat 100%/100%;
+ }
+
+ .dark .h5-search .icon-search {
+ background: url(../img/search/search-dark.svg) no-repeat 100%/100%;
+ }
+ .h5-search .cancel-btn {
+ color: var(--e-color-text1);
+ line-height: 24px;
+ }
+
+ .search-result {
+ padding: 0 16px;
+ padding-bottom: 16px;
+ }
+
+ .h5_content .h5_banner {
+ width: 100%;
+ height: 126px;
+ background-image: url("/img/common/banner-bg.png");
+ background-size: cover;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 0 24px;
+ margin-top: 48px;
+ }
+ .h5_content .h5_banner .banner-text {
+ position: relative;
+ width: 103px;
+ height: 28px;
+ }
+ .h5_content .h5_banner .banner-text .title-bg {
+ color: #2e4fb0;
+ font-size: 20px;
+ position: absolute;
+ opacity: 0.8;
+ z-index: 1;
+ }
+ .h5_content .h5_banner .banner-text .title {
+ color: #fff;
+ font-size: 20px;
+ line-height: 28px;
+ position: absolute;
+ top: 8px;
+ z-index: 2;
+ }
+ .h5_content .h5_banner .banner-iii {
+ height: 94px;
+ }
+ .mask-mobile {
+ background-color: rgba(0, 0, 0, 0.4);
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ z-index: 1000;
+ }
+
+ .hot_documentation {
+ margin-top: 0;
+ }
+}
+
+.index-result {
+ max-height: unset !important;
+}
+.app-mobile .h5_nav {
+ position: fixed;
+ left: -61%;
+ top: 0;
+ width: 60%;
+ height: 100vh;
+ z-index: 99999;
+ background-color: var(--e-color-bg2);
+ transition: all 0.5s;
+}
+.app-mobile .h5_nav_show {
+ left: 0;
+}
+.h5_nav .option {
+ width: 100%;
+ background-color: var(--e-color-bg1);
+ transition: all 0.2s;
+ overflow: scroll;
+ max-height: 0;
+}
+.h5_nav .option-show {
+ max-height: 432px;
+}
+.h5_nav .option a {
+ display: block;
+ padding: 8px 16px;
+ font-size: 14px;
+ line-height: 22px;
+ color: var(--e-color-text1);
+}
+.h5_nav .option li:nth-of-type(1) a {
+ padding-top: 16px;
+}
+.h5_nav .option li:nth-last-of-type(1) a {
+ padding-bottom: 16px;
+}
+.h5_nav .h5-logo {
+ padding: 22px 0 0 16px;
+ display: flex;
+ justify-content: space-between;
+ width: 100%;
+}
+.h5_nav .h5-logo .logo-img {
+ width: 137px;
+ height: 23px;
+ background: url(../img/common/logo-mobile.svg) no-repeat 100%/100%;
+}
+.dark .h5_nav .h5-logo .logo-img {
+ background: url(../img/common/logo-pc.png) no-repeat 100%/100%;
+}
+.h5_nav .h5-logo .icon-close {
+ width: 24px;
+ height: 24px;
+ margin-right: 16px;
+ background: url(../img/common/icon-close-light.svg) no-repeat 100%/100%;
+ cursor: pointer;
+}
+.dark .h5_nav .h5-logo .icon-close {
+ background: url(../img/common/icon-close-dark.svg) no-repeat 100%/100%;
+}
+.h5_nav .icon-servision {
+ width: 16px;
+ height: 16px;
+ transform: rotateZ(0deg);
+ background: url(../img/common/icon-chevron-right.svg) no-repeat 100%/100%;
+ cursor: pointer;
+}
+.dark .h5_nav .icon-servision {
+ background: url(../img/common/icon-chevron-right-dark.svg) no-repeat 100%/100%;
+}
+.h5_nav .open {
+ transform: rotateZ(-90deg);
+}
+.h5_nav .container {
+ height: auto;
+ padding: 22px 16px 0 16px;
+}
+.h5_nav .container .select-version .select-version-title {
+ display: flex;
+ width: 100%;
+ justify-content: space-between;
+ color: var(--e-color-text1);
+ font-size: 14px;
+ padding: 12px 0;
+}
+.h5_nav .container .select-version .select-version-title::before {
+ display: none;
+}
+.h5_nav .container .select-version .version-list {
+ max-height: 0;
+ transition: all 0.5s;
+ overflow: hidden;
+}
+.h5_nav .container .select-version .version-list.show {
+ max-height: 200px;
+ overflow: scroll;
+}
+.h5_nav .container .select-version .version-list li {
+ padding-bottom: 12px;
+}
+.h5_nav .container .select-version .version-list li a {
+ font-size: 12px;
+ color: var(--e-color-text1);
+}
diff --git a/static/css/login.css b/static/css/login.css
new file mode 100644
index 0000000000000000000000000000000000000000..0ddc5863a787dc131b9a288d36abab7aaacaacea
--- /dev/null
+++ b/static/css/login.css
@@ -0,0 +1,106 @@
+#opt_user:hover .user-menu-list {
+ display: block;
+}
+#opt_user .user-menu-list {
+ display: none;
+}
+#opt_user .user-menu-list {
+ width: 112px;
+ position: absolute;
+ top: 40px;
+ background: var(--e-color-bg2);
+ padding: 0 var(--o-spacing-h5);
+ cursor: pointer;
+ z-index: 99;
+ border: none;
+}
+#opt_user .user-menu-list .user-item {
+ display: block;
+ line-height: var(--o-line-height-h3);
+ text-align: center;
+ font-size: var(--o-font-size-text);
+ color: var(--e-color-text1);
+ border-bottom: 1px solid var(--o-color-division);
+ height: 48px;
+ line-height: 48px;
+}
+#opt_user .user-menu-list .user-item:hover {
+ color: var(--e-color-brand1);
+}
+#opt_user .user-menu-list .user-item :last-child {
+ border-bottom: 0 none;
+}
+#opt_user .user-menu-list .user-item .active,
+#opt_user .user-menu-list .user-item :hover {
+ color: var(--e-color-brand1);
+}
+.h5-nav-menu .h5-right {
+ display: flex;
+ align-items: center;
+}
+#opt_user {
+ position: relative;
+ margin-left: 32px;
+}
+@media screen and (max-width:1100px) {
+ #opt_user {
+ margin-left: 16px;
+ }
+}
+.nav-menu #opt_user {
+ height: 60px;
+ display: flex;
+ align-items: center;
+}
+#opt_user .opt-info {
+ display: flex;
+ align-items: center;
+ width: 112px;
+ cursor: pointer;
+ position: relative;
+}
+#opt_user .opt-info .opt-img {
+ position: relative;
+}
+#opt_user .opt-info .opt-img .img {
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ vertical-align: middle;
+ display: none;
+}
+#opt_user .opt-info .opt-img .empty-img {
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ vertical-align: middle;
+}
+#opt_user .opt-info .opt-name {
+ margin-left: 8px;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ font-size: 14px;
+ color: var(--e-color-text1);
+}
+#opt_user .login {
+ text-align: center;
+ cursor: pointer;
+ font-size: 14px;
+ color: var(--e-color-text1);
+ display: none;
+}
+#opt_user .login .icon-user {
+ display: inline-block;
+ width: 24px;
+ height: 24px;
+ background-image: url("../img/common/icon-user.svg");
+ background-repeat: no-repeat;
+ background-size: 100% 100%;
+}
+.dark #opt_user .login .icon-user {
+ display: inline-block;
+ width: 24px;
+ height: 24px;
+ background-image: url("../img/common/icon-user-dark.svg");
+}
diff --git a/static/css/markdown.css b/static/css/markdown.css
new file mode 100644
index 0000000000000000000000000000000000000000..f2bb8198ad6f20ea3d4389c70404a8782beb3ae2
--- /dev/null
+++ b/static/css/markdown.css
@@ -0,0 +1,305 @@
+@charset "UTF-8";
+.markdown {
+ max-width: 1174px;
+ padding: 0 0 40px 0;
+ margin: 0 auto;
+ --e-color-table: var(--e-color-border2);
+}
+#markdown blockquote {
+ border-radius: 6px;
+ background-color: rgba(203, 217, 255, 0.2);
+ border-left: 6px solid #002fa7;
+ padding: 20px;
+}
+#markdown blockquote img {
+ vertical-align: top;
+}
+.markdown > *:first-child {
+ margin-top: 0 !important;
+}
+@media (max-width: 1439px) {
+ .markdown {
+ width: calc(100% - 48px);
+ }
+}
+@media (max-width: 1100px) {
+ .markdown {
+ width: 100%;
+ }
+}
+@media (max-width: 768px) {
+ .markdown {
+ width: 100%;
+ padding: var(--o-spacing-h5);
+ margin-bottom: var(--o-spacing-h2);
+ background-color: var(--e-color-bg2);
+ box-shadow: var(--e-shadow-sl1);
+ margin-top: 16px;
+ }
+}
+.markdown ol,
+.markdown ul {
+ list-style: inherit;
+}
+#markdown ol {
+ list-style: decimal;
+}
+.markdown a {
+ word-break: break-all;
+}
+.markdown h1,
+.markdown h2,
+.markdown h3,
+.markdown h4,
+.markdown h5,
+.markdown h6 {
+ color: var(--e-color-text1);
+ font-weight: normal;
+}
+.markdown h1 a,
+.markdown h2 a,
+.markdown h3 a,
+.markdown h4 a,
+.markdown h5 a,
+.markdown h6 a {
+ display: none;
+}
+.markdown hr {
+ margin: var(--o-spacing-h1) 0;
+ border: none;
+ height: 1px;
+ background-color: var(--e-color-division1);
+}
+@media screen and (max-width: 768px) {
+ .markdown hr {
+ margin: var(--o-spacing-h4) 0;
+ }
+}
+.markdown h1 {
+ margin-top: var(--o-spacing-h1);
+ margin-bottom: var(--o-spacing-h2);
+ font-size: var(--o-font-size-h3);
+ line-height: var(--o-line-height-h3);
+ font-weight: 300;
+}
+@media screen and (max-width: 768px) {
+ .markdown h1 {
+ margin: var(--o-spacing-h3) 0 var(--o-spacing-h4);
+ font-size: var(--o-font-size-h7);
+ line-height: var(--o-line-height-h7);
+ }
+}
+.markdown h2 {
+ margin-bottom: var(--o-spacing-h3);
+ font-size: var(--o-font-size-h5);
+ line-height: var(--o-line-height-h5);
+ padding-top: 0;
+}
+.markdown h1::before{
+ content: "";
+ display: block;
+ width: 100%;
+ height: 60px;
+ margin-top: -60px;
+ overflow: hidden;
+}
+.markdown h2::before,.markdown h3::before {
+ content: "";
+ display: block;
+ width: 100%;
+ height: 60px;
+ overflow: hidden;
+}
+.markdown h2::before{
+ margin-top: -40px;
+}
+.markdown h3::before{
+ margin-top: -28px;
+}
+@media screen and (max-width: 768px) {
+ .markdown h2 {
+ margin: 0 0 var(--o-spacing-h5);
+ font-size: var(--o-font-size-h8);
+ line-height: var(--o-line-height-h8);
+ padding-top: 0;
+ }
+ .markdown h1::before{
+ height: 92px;
+ margin-top: -92px;
+ }
+ .markdown h2::before{
+ height: 92px;
+ margin-top: -72px;
+ }
+ .markdown h3::before{
+ height: 92px;
+ margin-top: -76px;
+ }
+}
+.markdown h3 {
+ padding-top: 0;
+ font-size: var(--o-font-size-h7);
+ line-height: var(--o-line-height-h8);
+}
+@media screen and (max-width: 768px) {
+ .markdown h3 {
+ padding-top: 0;
+ font-size: var(--o-font-size-text);
+ line-height: var(--o-line-height-text);
+ }
+}
+.markdown h4 {
+ margin-top: var(--o-spacing-h4);
+ font-size: var(--o-font-size-h8);
+ line-height: var(--o-font-size-h8);
+}
+@media screen and (max-width: 768px) {
+ .markdown h4 {
+ margin-top: var(--o-spacing-h6);
+ font-size: var(--o-font-size-tip);
+ line-height: var(--o-line-height-tip);
+ }
+}
+.markdown h5 {
+ margin-top: var(--o-spacing-h5);
+ font-size: var(--o-font-size-text);
+ line-height: var(--o-font-size-text);
+}
+.markdown h6 {
+ margin-top: var(--o-spacing-h5);
+ font-size: var(--o-font-size-text);
+ line-height: var(--o-font-size-text);
+}
+.markdown p,
+.markdown ul,
+.markdown ol {
+ margin-top: var(--o-spacing-h8);
+ margin-bottom: var(--o-spacing-h8);
+ font-size: var(--o-font-size-text);
+ font-weight: normal;
+ color: var(--e-color-text4);
+ line-height: var(--o-line-height-text);
+ word-break: break-word;
+}
+@media screen and (max-width: 768px) {
+ .markdown p,
+ .markdown ul,
+ .markdown ol {
+ font-size: var(--o-font-size-tip);
+ overflow: scroll;
+ }
+ .markdown table p {
+ margin-top: 0;
+ margin-bottom: 0;
+ }
+ .markdown table tr td p,
+ .markdown table tr th p {
+ padding: 8px 0;
+ }
+}
+.markdown ul,
+.markdown ol {
+ padding-left: 1.5em;
+}
+.markdown ul li::marker,
+.markdown ol li::marker {
+ color: var(--e-color-text1);
+}
+
+.markdown table {
+ width: 100%;
+ font-size: var(--o-font-size-text);
+ table-layout: fixed;
+ word-break: break-word;
+ border-collapse: collapse;
+ padding: 0;
+ line-height: var(--o-line-height-text);
+}
+.markdown table tr {
+ height: 54px;
+ color: var(--e-color-text4);
+ border-bottom: 1px solid var(--e-color-table);
+}
+.markdown table tr th {
+ padding-left: var(--o-spacing-h3);
+ text-align: left;
+ font-weight: 500;
+ font-size: var(--o-font-size-h8);
+ line-height: var(--o-line-height-h8);
+ background-color: var(--e-color-bg4);
+ color: var(--e-color-text1);
+}
+@media screen and (max-width: 768px) {
+ .markdown table tr th {
+ font-size: var(--o-font-size-text);
+ padding-left: var(--o-spacing-h5);
+ }
+ .markdown table tr th:nth-of-type(1) {
+ width: 30vw !important;
+ }
+}
+.markdown table tr td {
+ padding-left: var(--o-spacing-h3);
+ line-height: var(--o-line-height-text);
+}
+.markdown table tr pre {
+ white-space: pre-wrap;
+}
+.markdown table tr pre .btn_pre_copy{
+ display: none;
+}
+.markdown table tr td p,
+.markdown table tr th p {
+ padding: 16px 0;
+ min-height: 54px;
+ line-height: 22px;
+}
+@media screen and (max-width: 768px) {
+ .markdown table tr td {
+ padding-left: var(--o-spacing-h6);
+ font-size: var(--o-font-size-tip);
+ }
+}
+.markdown strong {
+ font-weight: bold;
+}
+.markdown img {
+ max-width: 100%;
+}
+.markdown div[class*="language-"] {
+ position: relative;
+ margin: 8px 0;
+ background-color: var(--e-color-bg1);
+ box-shadow: var(--e-shadow-sl1);
+ overflow-x: auto;
+}
+.markdown [class*="language-"] code,
+.markdown [class*="language-"] pre {
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+ -webkit-hyphens: none;
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+}
+.markdown [class*="language-"] pre {
+ position: relative;
+ z-index: 1;
+ margin: 0;
+ padding: 24px 64px;
+ background: 0 0;
+ overflow-x: auto;
+}
+.markdown [class*="language-"] code {
+ padding: 0;
+ line-height: var(--o-line-height-text);
+ font-size: var(--o-font-size-text);
+ color: #eee;
+}
+
diff --git a/static/css/o_theme_dark.css b/static/css/o_theme_dark.css
new file mode 100644
index 0000000000000000000000000000000000000000..d6e3f8ac6d28c7e0d5b751a409cf4b795f9abaa0
--- /dev/null
+++ b/static/css/o_theme_dark.css
@@ -0,0 +1 @@
+[class="dark"]{--o-white:255,255,255;--o-black:0,0,0;--o-kleinblue-1:14,26,69;--o-kleinblue-2:18,34,87;--o-kleinblue-3:29,51,119;--o-kleinblue-4:42,72,158;--o-kleinblue-5:57,97,202;--o-kleinblue-6:73,122,248;--o-kleinblue-7:110,148,243;--o-kleinblue-8:140,171,234;--o-kleinblue-9:176,199,241;--o-kleinblue-10:215,227,248;--o-yellow-1:81,46,9;--o-yellow-2:121,75,15;--o-yellow-3:161,107,22;--o-yellow-4:202,143,30;--o-yellow-5:242,183,38;--o-yellow-6:245,202,80;--o-yellow-7:247,219,122;--o-yellow-8:250,234,166;--o-yellow-9:252,246,210;--o-yellow-10:254,251,237;--o-orange-1:77,24,0;--o-orange-2:120,42,1;--o-orange-3:163,68,8;--o-orange-4:207,97,19;--o-orange-5:250,130,33;--o-orange-6:251,143,43;--o-orange-7:252,174,91;--o-orange-8:253,202,139;--o-orange-9:254,227,188;--o-orange-10:255,248,237;--o-red-1:77,0,17;--o-red-2:115,3,24;--o-red-3:153,9,31;--o-red-4:192,17,37;--o-red-5:230,28,43;--o-red-6:235,35,45;--o-red-7:240,82,85;--o-red-8:245,132,130;--o-red-9:250,183,180;--o-red-10:255,234,232;--o-green-1:0,77,42;--o-green-2:2,102,53;--o-green-3:10,127,66;--o-green-4:22,152,80;--o-green-5:36,177,95;--o-green-6:51,193,104;--o-green-7:90,208,131;--o-green-8:135,224,163;--o-green-9:185,239,200;--o-green-10:240,255,244;--o-amber-1:77,30,0;--o-amber-2:116,51,0;--o-amber-3:154,76,0;--o-amber-4:193,105,0;--o-amber-5:231,137,0;--o-amber-6:236,165,47;--o-amber-7:241,191,96;--o-amber-8:245,215,147;--o-amber-9:250,237,200;--o-amber-10:253,247,232;--o-lime-1:53,70,0;--o-lime-2:82,105,0;--o-lime-3:112,141,1;--o-lime-4:143,176,2;--o-lime-5:175,211,5;--o-lime-6:184,220,48;--o-lime-7:196,229,95;--o-lime-8:212,237,145;--o-lime-9:231,246,198;--o-lime-10:244,251,231;--o-light-green-1:33,60,7;--o-light-green-2:51,90,11;--o-light-green-3:70,119,16;--o-light-green-4:91,149,21;--o-light-green-5:112,179,27;--o-light-green-6:184,220,48;--o-light-green-7:166,209,103;--o-light-green-8:195,225,148;--o-light-green-9:225,240,199;--o-light-green-10:242,247,231;--o-teal-1:0,60,48;--o-teal-2:0,90,71;--o-teal-3:0,119,93;--o-teal-4:0,149,113;--o-teal-5:0,179,133;--o-teal-6:39,194,152;--o-teal-7:84,209,173;--o-teal-8:135,225,197;--o-teal-9:192,240,224;--o-teal-10:228,247,241;--o-cyan-1:0,52,60;--o-cyan-2:0,79,90;--o-cyan-3:0,107,119;--o-cyan-4:0,137,149;--o-cyan-5:39,186,194;--o-cyan-6:84,205,209;--o-cyan-7:92,208,212;--o-cyan-8:135,223,225;--o-cyan-9:192,240,240;--o-cyan-10:228,247,247;--o-light-blue-1:0,47,76;--o-light-blue-2:0,72,115;--o-light-blue-3:0,99,153;--o-light-blue-4:0,127,191;--o-light-blue-5:0,156,229;--o-light-blue-6:47,178,234;--o-light-blue-7:96,198,239;--o-light-blue-8:147,218,245;--o-light-blue-9:200,237,250;--o-light-blue-10:232,247,252;--o-blue-1:0,43,97;--o-blue-2:0,61,133;--o-blue-3:0,80,169;--o-blue-4:0,100,204;--o-blue-5:0,122,240;--o-blue-6:49,151,243;--o-blue-7:98,178,246;--o-blue-8:149,205,249;--o-blue-9:202,231,252;--o-blue-10:233,245,254;--o-mixedgray-1:0,0,0;--o-mixedgray-2:18,18,20;--o-mixedgray-3:26,26,28;--o-mixedgray-4:36,36,39;--o-mixedgray-5:43,43,47;--o-mixedgray-6:53,53,57;--o-mixedgray-7:63,63,67;--o-mixedgray-8:85,85,88;--o-mixedgray-9:118,118,122;--o-mixedgray-10:156,156,159;--o-mixedgray-11:181,181,185;--o-mixedgray-12:208,208,210;--o-mixedgray-13:235,235,238;--o-mixedgray-14:255,255,255;--o-indigo-1:5,19,101;--o-indigo-2:10,28,118;--o-indigo-3:16,38,138;--o-indigo-4:23,50,159;--o-indigo-5:31,63,179;--o-indigo-6:66,96,194;--o-indigo-7:106,131,209;--o-indigo-8:150,170,225;--o-indigo-9:209,218,241;--o-indigo-10:232,236,247;--o-violet-1:34,0,109;--o-violet-2:39,2,130;--o-violet-3:46,7,150;--o-violet-4:53,13,171;--o-violet-5:61,20,191;--o-violet-6:97,62,201;--o-violet-7:150,130,223;--o-violet-8:182,169,233;--o-violet-9:217,210,244;--o-violet-10:240,237,250;--o-purple-1:60,0,97;--o-purple-2:77,0,118;--o-purple-3:95,0,138;--o-purple-4:114,0,159;--o-purple-5:135,2,179;--o-purple-6:161,41,194;--o-purple-7:187,85,209;--o-purple-8:211,136,225;--o-purple-9:234,192,240;--o-purple-10:245,228,247;--o-pink-1:81,0,51;--o-pink-2:117,0,70;--o-pink-3:153,0,86;--o-pink-4:188,0,100;--o-pink-5:224,0,112;--o-pink-6:230,46,132;--o-pink-7:236,95,156;--o-pink-8:243,146,184;--o-pink-9:249,199,217;--o-pink-10:252,232,239;--o-color-white:rgb(var(--o-white));--o-color-black:rgb(var(--o-black));--o-color-primary1:rgb(var(--o-kleinblue-6));--o-color-primary2:rgb(var(--o-kleinblue-5));--o-color-primary3:rgb(var(--o-kleinblue-7));--o-color-primary4:rgb(var(--o-kleinblue-4));--o-color-primary1-light:rgb(var(--o-kleinblue-2));--o-color-primary2-light:rgb(var(--o-kleinblue-3));--o-color-primary3-light:rgb(var(--o-kleinblue-4));--o-color-primary4-light:rgb(var(--o-kleinblue-1));--o-color-success1:rgb(var(--o-green-6));--o-color-success2:rgb(var(--o-green-4));--o-color-success3:rgb(var(--o-green-7));--o-color-success4:rgb(var(--o-green-3));--o-color-success1-light:rgb(var(--o-green-2));--o-color-success2-light:rgb(var(--o-green-3));--o-color-success3-light:rgb(var(--o-green-4));--o-color-success4-light:rgb(var(--o-green-1));--o-color-warning1:rgb(var(--o-orange-6));--o-color-warning2:rgb(var(--o-orange-4));--o-color-warning3:rgb(var(--o-orange-7));--o-color-warning4:rgb(var(--o-orange-3));--o-color-warning1-light:rgb(var(--o-orange-2));--o-color-warning2-light:rgb(var(--o-orange-3));--o-color-warning3-light:rgb(var(--o-orange-4));--o-color-warning4-light:rgb(var(--o-orange-1));--o-color-danger1:rgb(var(--o-red-6));--o-color-danger2:rgb(var(--o-red-4));--o-color-danger3:rgb(var(--o-red-7));--o-color-danger4:rgb(var(--o-red-3));--o-color-danger1-light:rgb(var(--o-red-2));--o-color-danger2-light:rgb(var(--o-red-3));--o-color-danger3-light:rgb(var(--o-red-4));--o-color-danger4-light:rgb(var(--o-red-1));--o-color-fill1:rgb(var(--o-mixedgray-3));--o-color-fill2:rgb(var(--o-mixedgray-4));--o-color-fill3:rgb(var(--o-mixedgray-5));--o-color-control1:rgba(var(--o-mixedgray-14),0.25);--o-color-control2:rgba(var(--o-mixedgray-14),0.6);--o-color-control3:rgba(var(--o-mixedgray-14),0.8);--o-color-control4:rgba(var(--o-mixedgray-14),0.15);--o-color-control1-light:rgb(var(--o-mixedgray-7),1.0);--o-color-control2-light:rgb(var(--o-mixedgray-5),1);--o-color-control3-light:rgb(var(--o-mixedgray-6),1);--o-color-control4-light:rgb(var(--o-mixedgray-5),1);--o-color-control-light:rgb(var(--o-mixedgray-4),1.0);--o-color-info1:rgba(var(--o-mixedgray-14),1.0);--o-color-info2:rgba(var(--o-mixedgray-14),0.8);--o-color-info3:rgba(var(--o-mixedgray-14),0.6);--o-color-info4:rgba(var(--o-mixedgray-14),0.4);--o-color-info1-inverse:rgba(var(--o-mixedgray-1),1.0);--o-color-info2-inverse:rgba(var(--o-mixedgray-1),0.8);--o-color-info3-inverse:rgba(var(--o-mixedgray-1),0.6);--o-color-info4-inverse:rgba(var(--o-mixedgray-1),0.4);--o-color-mask1:rgba(var(--o-mixedgray-1),0.4);--o-color-mask2:rgba(var(--o-mixedgray-4),0.2);--o-color-link1:rgba(var(--o-kleinblue-6));--o-color-link2:rgba(var(--o-kleinblue-5));--o-color-link3:rgba(var(--o-kleinblue-7));--o-color-link4:rgba(var(--o-kleinblue-4));--o-shadow-1:0 3px 8px rgba(var(--o-mixedgray-1),0.08);--o-shadow-2:0 2px 24px rgba(var(--o-mixedgray-1),0.15);--o-shadow-3:0 8px 40px rgba(var(--o-mixedgray-1),0.1);--o-gap-1:4px;--o-gap-2:8px;--o-gap-3:12px;--o-gap-4:16px;--o-gap-5:24px;--o-gap-6:32px;--o-gap-7:40px;--o-gap-8:48px;--o-gap-9:64px;--o-gap-10:72px;--o-control_size-2xs:14px;--o-control_size-xs:16px;--o-control_size-s:24px;--o-control_size-m:32px;--o-control_size-l:40px;--o-control_size-xl:48px;--o-control_size-2xl:56px;--o-icon_size-xs:16px;--o-icon_size-s:20px;--o-icon_size-m:24px;--o-icon_size-l:32px;--o-icon_size-xl:40px;--o-icon_size-2xl:48px;--o-icon_size-3xl:56px;--o-icon_size-4xl:64px;--o-icon_size_control-xs:16px;--o-icon_size_control-s:20px;--o-icon_size_control-m:24px;--o-icon_size_control-l:32px;--o-icon_size_control-xl:40px;--o-font_size-display1:56px;--o-font_size-display2:48px;--o-font_size-display3:40px;--o-font_size-h1:32px;--o-font_size-h2:24px;--o-font_size-h3:22px;--o-font_size-h4:20px;--o-font_size-text1:16px;--o-font_size-text2:18px;--o-font_size-tip1:14px;--o-font_size-tip2:12px;--o-line_height-display1:80px;--o-line_height-display2:64px;--o-line_height-display3:56px;--o-line_height-h1:44px;--o-line_height-h2:32px;--o-line_height-h3:30px;--o-line_height-h4:28px;--o-line_height-text1:24px;--o-line_height-text2:26x;--o-line_height-tip1:22px;--o-line_height-tip2:18px;--o-radius-xs:4px;--o-radius-s:8px;--o-radius-m:12px;--o-radius-l:16px;--o-radius-xl:24px;--o-radius_control-xs:4px;--o-radius_control-s:8px;--o-radius_control-m:12px;--o-radius_control-l:16px;--o-duration-s:200ms;--o-duration-m1:250ms;--o-duration-m2:300ms;--o-duration-m3:400ms;--o-duration-l:500ms;--o-duration-xl:1000ms;--o-easing-linear:cubic-bezier(0,0,1,1);--o-easing-standard:cubic-bezier(0.2,0,0,1);--o-easing-standard-in:cubic-bezier(0,0,0,1);--o-easing-standard-out:cubic-bezier(0.3,0,1,1);--o-easing-emphasized:cubic-bezier(0.2,0,0,1);--o-easing-emphasized-in:cubic-bezier(0.3,0,0.8,0.15);--o-easing-emphasized-out:cubic-bezier(0.05,0.7,0.1,1)}
\ No newline at end of file
diff --git a/static/css/o_theme_light.css b/static/css/o_theme_light.css
new file mode 100644
index 0000000000000000000000000000000000000000..a7e048abad84ca4094c073e8a06d05a29bafa472
--- /dev/null
+++ b/static/css/o_theme_light.css
@@ -0,0 +1 @@
+:root,[class="light"]{--o-white:255,255,255;--o-black:0,0,0;--o-kleinblue-1:235,241,250;--o-kleinblue-2:206,219,245;--o-kleinblue-3:132,161,220;--o-kleinblue-4:81,119,202;--o-kleinblue-5:37,81,185;--o-kleinblue-6:0,47,167;--o-kleinblue-7:0,39,147;--o-kleinblue-8:0,31,126;--o-kleinblue-9:0,24,126;--o-kleinblue-10:0,18,85;--o-yellow-1:254,252,233;--o-yellow-2:252,248,202;--o-yellow-3:249,237,149;--o-yellow-4:246,224,98;--o-yellow-5:243,207,49;--o-yellow-6:240,188,6;--o-yellow-7:200,147,0;--o-yellow-8:160,109,0;--o-yellow-9:120,76,0;--o-yellow-10:80,47,0;--o-orange-1:255,246,232;--o-orange-2:254,226,186;--o-orange-3:253,202,140;--o-orange-4:252,176,95;--o-orange-5:251,147,50;--o-orange-6:250,115,5;--o-orange-7:207,88,3;--o-orange-8:163,64,2;--o-orange-9:120,42,1;--o-orange-10:77,24,0;--o-red-1:255,234,232;--o-red-2:250,185,182;--o-red-3:245,136,134;--o-red-4:240,87,90;--o-red-5:235,43,52;--o-red-6:230,0,18;--o-red-7:192,0,22;--o-red-8:153,0,23;--o-red-9:115,0,21;--o-red-10:77,0,17;--o-green-1:232,255,238;--o-green-2:177,239,195;--o-green-3:128,224,158;--o-green-4:84,208,127;--o-green-5:45,193,101;--o-green-6:11,177,81;--o-green-7:7,152,72;--o-green-8:4,127,63;--o-green-9:2,102,53;--o-green-10:0,77,42;--o-amber-1:253,247,232;--o-amber-2:250,237,200;--o-amber-3:245,215,147;--o-amber-4:241,191,96;--o-amber-5:236,165,47;--o-amber-6:231,137,0;--o-amber-7:193,105,0;--o-amber-8:154,76,0;--o-amber-9:116,51,0;--o-amber-10:77,30,0;--o-lime-1:243,250,230;--o-lime-2:229,244,195;--o-lime-3:208,233,140;--o-lime-4:191,223,89;--o-lime-5:177,212,42;--o-lime-6:167,201,0;--o-lime-7:136,168,0;--o-lime-8:107,134,0;--o-lime-9:78,101,0;--o-lime-10:51,67,0;--o-light-green-1:242,247,231;--o-light-green-2:225,240,199;--o-light-green-3:195,225,148;--o-light-green-4:166,209,103;--o-light-green-5:138,194,62;--o-light-green-6:112,179,27;--o-light-green-7:91,149,21;--o-light-green-8:70,119,16;--o-light-green-9:51,90,11;--o-light-green-10:33,60,7;--o-teal-1:228,247,241;--o-teal-2:192,240,224;--o-teal-3:135,225,197;--o-teal-4:84,209,173;--o-teal-5:39,194,152;--o-teal-6:0,179,133;--o-teal-7:0,149,113;--o-teal-8:0,119,93;--o-teal-9:0,90,71;--o-teal-10:0,60,48;--o-cyan-1:228,247,247;--o-cyan-2:192,240,240;--o-cyan-3:135,223,225;--o-cyan-4:84,205,209;--o-cyan-5:39,186,194;--o-cyan-6:0,167,179;--o-cyan-7:0,137,149;--o-cyan-8:0,107,119;--o-cyan-9:0,79,90;--o-cyan-10:0,52,60;--o-light-blue-1:232,247,252;--o-light-blue-2:200,237,250;--o-light-blue-3:147,218,245;--o-light-blue-4:96,198,239;--o-light-blue-5:47,178,234;--o-light-blue-6:0,156,229;--o-light-blue-7:0,127,191;--o-light-blue-8:0,99,153;--o-light-blue-9:0,72,115;--o-light-blue-10:0,47,76;--o-blue-1:233,245,254;--o-blue-2:202,231,252;--o-blue-3:149,205,249;--o-blue-4:98,178,246;--o-blue-5:49,151,243;--o-blue-6:0,122,240;--o-blue-7:0,100,204;--o-blue-8:0,80,169;--o-blue-9:0,61,133;--o-blue-10:0,43,97;--o-mixedgray-1:255,255,255;--o-mixedgray-2:243,243,245;--o-mixedgray-3:237,237,240;--o-mixedgray-4:232,232,235;--o-mixedgray-5:222,222,227;--o-mixedgray-6:212,212,217;--o-mixedgray-7:186,186,191;--o-mixedgray-8:149,149,157;--o-mixedgray-9:111,111,117;--o-mixedgray-10:85 ,85,92;--o-mixedgray-11:61,61,66;--o-mixedgray-12:37,37,41;--o-mixedgray-13:21,21,23;--o-mixedgray-14:0,0,0;--o-indigo-1:232,236,247;--o-indigo-2:200,211,240;--o-indigo-3:150,170,225;--o-indigo-4:106,131,209;--o-indigo-5:66,96,194;--o-indigo-6:31,63,179;--o-indigo-7:23,50,159;--o-indigo-8:16,38,138;--o-indigo-9:10,28,118;--o-indigo-10:5,19,101;--o-violet-1:234,231,249;--o-violet-2:206,199,242;--o-violet-3:163,147,229;--o-violet-4:124,100,217;--o-violet-5:90,58,204;--o-violet-6:61,20,191;--o-violet-7:53,13,171;--o-violet-8:46,7,150;--o-violet-9:39,2,130;--o-violet-10:34,0,109;--o-purple-1:245,228,247;--o-purple-2:234,192,240;--o-purple-3:211,136,225;--o-purple-4:187,85,209;--o-purple-5:161,41,194;--o-purple-6:135,2,179;--o-purple-7:114,0,159;--o-purple-8:95,0,138;--o-purple-9:77,0,118;--o-purple-10:60,0,97;--o-pink-1:252,232,239;--o-pink-2:249,199,217;--o-pink-3:243,146,184;--o-pink-4:236,95,156;--o-pink-5:230,46,132;--o-pink-6:224,0,112;--o-pink-7:188,0,100;--o-pink-8:153,0,86;--o-pink-9:117,0,70;--o-pink-10:81,0,51;--o-color-white:rgb(var(--o-white));--o-color-black:rgb(var(--o-black));--o-color-primary1:rgb(var(--o-kleinblue-6));--o-color-primary2:rgb(var(--o-kleinblue-4));--o-color-primary3:rgb(var(--o-kleinblue-7));--o-color-primary4:rgb(var(--o-kleinblue-3));--o-color-primary1-light:rgb(var(--o-kleinblue-2));--o-color-primary2-light:rgb(var(--o-kleinblue-3));--o-color-primary3-light:rgb(var(--o-kleinblue-4));--o-color-primary4-light:rgb(var(--o-kleinblue-1));--o-color-success1:rgb(var(--o-green-6));--o-color-success2:rgb(var(--o-green-4));--o-color-success3:rgb(var(--o-green-7));--o-color-success4:rgb(var(--o-green-3));--o-color-success1-light:rgb(var(--o-green-2));--o-color-success2-light:rgb(var(--o-green-3));--o-color-success3-light:rgb(var(--o-green-4));--o-color-success4-light:rgb(var(--o-green-1));--o-color-warning1:rgb(var(--o-orange-6));--o-color-warning2:rgb(var(--o-orange-4));--o-color-warning3:rgb(var(--o-orange-7));--o-color-warning4:rgb(var(--o-orange-3));--o-color-warning1-light:rgb(var(--o-orange-2));--o-color-warning2-light:rgb(var(--o-orange-3));--o-color-warning3-light:rgb(var(--o-orange-4));--o-color-warning4-light:rgb(var(--o-orange-1));--o-color-danger1:rgb(var(--o-red-6));--o-color-danger2:rgb(var(--o-red-4));--o-color-danger3:rgb(var(--o-red-7));--o-color-danger4:rgb(var(--o-red-3));--o-color-danger1-light:rgb(var(--o-red-2));--o-color-danger2-light:rgb(var(--o-red-3));--o-color-danger3-light:rgb(var(--o-red-4));--o-color-danger4-light:rgb(var(--o-red-1));--o-color-fill1:rgb(var(--o-mixedgray-2));--o-color-fill2:rgb(var(--o-mixedgray-1));--o-color-fill3:rgb(var(--o-mixedgray-3));--o-color-control1:rgba(var(--o-mixedgray-14),0.25);--o-color-control2:rgba(var(--o-mixedgray-14),0.6);--o-color-control3:rgba(var(--o-mixedgray-14),0.8);--o-color-control4:rgba(var(--o-mixedgray-14),0.1);--o-color-control1-light:rgb(var(--o-mixedgray-5),1.0);--o-color-control2-light:rgba(var(--o-kleinblue-1),1);--o-color-control3-light:rgba(var(--o-kleinblue-2),1);--o-color-control4-light:rgb(var(--o-mixedgray-3),1);--o-color-control-light:rgb(var(--o-mixedgray-1),1.0);--o-color-info1:rgba(var(--o-mixedgray-14),1.0);--o-color-info2:rgba(var(--o-mixedgray-14),0.8);--o-color-info3:rgba(var(--o-mixedgray-14),0.6);--o-color-info4:rgba(var(--o-mixedgray-14),0.4);--o-color-info1-inverse:rgba(var(--o-mixedgray-1),1.0);--o-color-info2-inverse:rgba(var(--o-mixedgray-1),0.8);--o-color-info3-inverse:rgba(var(--o-mixedgray-1),0.6);--o-color-info4-inverse:rgba(var(--o-mixedgray-1),0.4);--o-color-mask1:rgba(var(--o-mixedgray-14),0.4);--o-color-mask2:rgba(var(--o-mixedgray-1),0.2);--o-color-link1:rgba(var(--o-kleinblue-6));--o-color-link2:rgba(var(--o-kleinblue-4));--o-color-link3:rgba(var(--o-kleinblue-7));--o-color-link4:rgba(var(--o-kleinblue-3));--o-shadow-1:0 3px 8px rgba(var(--o-mixedgray-9),0.08);--o-shadow-2:0 2px 24px rgba(var(--o-mixedgray-9),0.15);--o-shadow-3:0 8px 40px rgba(var(--o-mixedgray-9),0.1);--o-gap-1:4px;--o-gap-2:8px;--o-gap-3:12px;--o-gap-4:16px;--o-gap-5:24px;--o-gap-6:32px;--o-gap-7:40px;--o-gap-8:48px;--o-gap-9:64px;--o-gap-10:72px;--o-control_size-2xs:14px;--o-control_size-xs:16px;--o-control_size-s:24px;--o-control_size-m:32px;--o-control_size-l:40px;--o-control_size-xl:48px;--o-control_size-2xl:56px;--o-icon_size-xs:16px;--o-icon_size-s:20px;--o-icon_size-m:24px;--o-icon_size-l:32px;--o-icon_size-xl:40px;--o-icon_size-2xl:48px;--o-icon_size-3xl:56px;--o-icon_size-4xl:64px;--o-icon_size_control-xs:16px;--o-icon_size_control-s:20px;--o-icon_size_control-m:24px;--o-icon_size_control-l:32px;--o-icon_size_control-xl:40px;--o-font_size-display1:56px;--o-font_size-display2:48px;--o-font_size-display3:40px;--o-font_size-h1:32px;--o-font_size-h2:24px;--o-font_size-h3:22px;--o-font_size-h4:20px;--o-font_size-text1:16px;--o-font_size-text2:18px;--o-font_size-tip1:14px;--o-font_size-tip2:12px;--o-line_height-display1:80px;--o-line_height-display2:64px;--o-line_height-display3:56px;--o-line_height-h1:44px;--o-line_height-h2:32px;--o-line_height-h3:30px;--o-line_height-h4:28px;--o-line_height-text1:24px;--o-line_height-text2:26px;--o-line_height-tip1:22px;--o-line_height-tip2:18px;--o-radius-xs:4px;--o-radius-s:8px;--o-radius-m:12px;--o-radius-l:16px;--o-radius-xl:24px;--o-radius_control-xs:4px;--o-radius_control-s:8px;--o-radius_control-m:12px;--o-radius_control-l:16px;--o-duration-s:200ms;--o-duration-m1:250ms;--o-duration-m2:300ms;--o-duration-m3:400ms;--o-duration-l:500ms;--o-duration-xl:1000ms;--o-easing-linear:cubic-bezier(0,0,1,1);--o-easing-standard:cubic-bezier(0.2,0,0,1);--o-easing-standard-in:cubic-bezier(0,0,0,1);--o-easing-standard-out:cubic-bezier(0.3,0,1,1);--o-easing-emphasized:cubic-bezier(0.2,0,0,1);--o-easing-emphasized-in:cubic-bezier(0.3,0,0.8,0.15);--o-easing-emphasized-out:cubic-bezier(0.05,0.7,0.1,1)}
\ No newline at end of file
diff --git a/static/css/pagination.css b/static/css/pagination.css
new file mode 100644
index 0000000000000000000000000000000000000000..480b93caf9c488a1fce87f99c646270b4e8a4228
--- /dev/null
+++ b/static/css/pagination.css
@@ -0,0 +1,105 @@
+
+
+* {
+ margin: 0;
+ padding: 0;
+}
+
+._page_container {
+ margin-top: 50px;
+ font-size: 13px;
+ height: 28px;
+ line-height: 28px;
+ user-select: none;
+ color: var(--e-color-text1);
+}
+
+._page_container input[type=number] {
+ -moz-appearance: textfield;
+}
+
+._page_container input[type=number]::-webkit-inner-spin-button,
+._page_container input[type=number]::-webkit-outer-spin-button {
+ -webkit-appearance: none;
+ margin: 0;
+}
+
+._page_container ._pages {
+ display: inline-block;
+}
+
+._page_container ._pages li {
+ display: inline-block;
+ list-style: none;
+ vertical-align: top;
+ font-weight: bold;
+ min-width: 30px;
+ text-align: center;
+ cursor: pointer;
+ color: var(--e-color-text1);
+}
+
+._page_container ._pages li:hover {
+ color: var(--e-color-brand1);
+}
+
+._page_container ._pages li:first-child,
+._page_container ._pages li:last-child {
+ font-size: 14px;
+}
+
+._page_container ._pages ._prev,
+._page_container ._pages ._next,
+._page_container ._pages ._home,
+._page_container ._pages ._last {
+ font-size: 12px;
+ font-weight: normal;
+ padding: 0 8px;
+}
+
+._page_container ._jumper {
+ display: inline-block;
+ color: #606266;
+ margin-left: 10px;
+}
+
+._page_container ._jumper ._count {
+ margin-right: 10px;
+}
+
+._page_container ._jumper ._jumper_input {
+ display: inline-block;
+ font-size: 14px;
+ color: #606266;
+ width: 50px;
+ height: 26px;
+ text-align: center;
+ margin: 0 5px;
+ padding: 3px;
+ border: 1px solid #dcdfe6;
+ border-radius: 4px;
+ background: none;
+ outline: none;
+ box-sizing: border-box;
+}
+
+._page_container ._jumper ._jumper_input:focus {
+ border-color: var(--e-color-brand1);
+}
+
+._active_1 {
+ color: #fff !important;
+ background-color: var(--e-color-brand1) !important;
+}
+
+._active_2 {
+ color: var(--e-color-brand1) !important;
+}
+
+._disabled {
+ cursor: not-allowed !important;
+}
+
+._disabled_c {
+ color: #c0c4cc !important;
+}
\ No newline at end of file
diff --git a/static/css/pcfooter.css b/static/css/pcfooter.css
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/static/css/reset.css b/static/css/reset.css
new file mode 100644
index 0000000000000000000000000000000000000000..3b5377fa6cdb89c2e5503f8e4f4e5a0457081e82
--- /dev/null
+++ b/static/css/reset.css
@@ -0,0 +1,154 @@
+html {
+ box-sizing: border-box;
+}
+
+*,
+*:before,
+*:after {
+ box-sizing: inherit;
+}
+
+body,
+div,
+dl,
+dt,
+dd,
+ul,
+ol,
+li,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+pre,
+form,
+fieldset,
+input,
+textarea,
+p,
+blockquote,
+th,
+td {
+ margin: 0;
+ padding: 0;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+fieldest,
+img {
+ border: 0;
+}
+
+address,
+caption,
+cite,
+code,
+dfn,
+em,
+strong,
+th,
+var {
+ font-style: normal;
+ font-weight: normal;
+}
+
+ol,
+ul {
+ list-style: none;
+}
+
+caption,
+th {
+ text-align: left;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-weight: normal;
+}
+
+p:before,
+q:after {
+ content: "";
+}
+
+abbr,
+acronym {
+ border: 0;
+}
+
+/*定位*/
+.tl {
+ text-align: left;
+}
+
+.tc {
+ text-align: center;
+}
+
+.tr {
+ text-align: right;
+}
+
+.bc {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.fl {
+ float: left;
+}
+
+.fr {
+ float: right;
+}
+
+.cb {
+ clear: both;
+}
+
+.cl {
+ clear: left;
+}
+
+.cr {
+ clear: right;
+}
+
+.clearfix:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+.clearfix {
+ display: inline-block;
+}
+
+.fade-in {
+ opacity: 0;
+ transition: 0.8s all ease-out;
+ transform: scale(0.8);
+}
+#hm_t_undefined {
+ display: none;
+}
+
+a {
+ text-decoration: none;
+ color: var(--e-color-brand1);
+}
+
+
diff --git a/static/css/revision_new.css b/static/css/revision_new.css
new file mode 100644
index 0000000000000000000000000000000000000000..4a7e523da834466c9f8b9b89f903cc8591d1704f
--- /dev/null
+++ b/static/css/revision_new.css
@@ -0,0 +1,1139 @@
+#content {
+ width: calc(100% - 300px);
+ background-color: var(--e-color-bg1);
+ margin-left: 300px;
+}
+@media screen and (max-width: 1100px) {
+ #content {
+ width: 100%;
+ margin-left: 0;
+ }
+ #markdown {
+ margin-top: 16px;
+ }
+}
+.markdown {
+ margin-left: 0 !important;
+ margin-right: 0 !important;
+}
+
+.detail-footer {
+ margin-left: 300px;
+}
+.h5_footer .atom-img {
+ margin: 0 auto;
+}
+.h5_footer .footer-logo {
+ width: 134px;
+ height: 28px;
+ margin: 0 auto;
+}
+.detail-footer .atom-img,
+.h5_footer .atom-img {
+ width: 274px;
+ height: 58px;
+ background-image: url(../img/common/atom.png);
+ background-repeat: no-repeat;
+ background-size: 100% 100%;
+}
+@media screen and (max-width: 1100px) {
+ .detail-footer .atom-img,
+ .h5_footer .atom-img {
+ width: 189px;
+ height: 40px;
+ }
+}
+.dark .detail-footer .atom-img,
+.dark .h5_footer .atom-img {
+ background-image: url(../img/common/atom-logo-dark.svg);
+}
+.detail-footer .footer-logo {
+ width: 134px;
+ height: 28px;
+}
+.detail-footer .footer-logo {
+ background-image: url(/img/common/footerLogo.png);
+ background-size: 100% 100%;
+ background-repeat: no-repeat;
+}
+.dark .detail-footer .footer-logo {
+ background-image: url(/img/common/footer-logo-dark.png);
+}
+.top-link > .link-container {
+ height: 100%;
+}
+#page .content {
+ max-width: 1040px;
+ position: relative;
+}
+.docs-a {
+ display: flex;
+ align-items: center;
+ height: 18px;
+ font-size: var(--o-font-size-tip);
+ line-height: var(--o-line-height-tip);
+}
+@media screen and (max-width: 1100px) {
+ .docs-a a {
+ font-size: 12px;
+ }
+ #page .content {
+ max-width: 100%;
+ margin: 0 auto;
+ }
+ #docstreeview > ul li {
+ position: relative;
+ }
+ #docstreeview > ul > li > i {
+ position: absolute;
+ right: 16px;
+ top: 7px;
+ }
+ #docstreeview > ul > li > ul > li > i {
+ position: absolute;
+ right: 16px;
+ top: 14px;
+ }
+}
+#docstreeview > ul > li {
+ width: 100%;
+}
+
+#docstreeview > ul > li a {
+ width: 220px;
+ margin: 0 40px;
+ position: relative;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ padding-right: 10px;
+}
+#docstreeview > ul > li > a {
+ height: 53px;
+ display: block;
+ line-height: 53px;
+}
+@media screen and (max-width: 1100px) {
+ #docstreeview > ul > li > a {
+ padding: 8px 0;
+ line-height: normal;
+ height: auto;
+ }
+}
+#docstreeview > ul > li > a::before {
+ position: absolute;
+ top: 0;
+ width: 100%;
+ height: 1px;
+ content: "";
+ background-color: #fff;
+ opacity: 0.1;
+}
+#docstreeview > ul > li:nth-of-type(1) > a::before {
+ background-color: transparent;
+}
+#docstreeview > ul > li > ul {
+ background-color: var(--e-color-kleinblue4);
+}
+#docstreeview > ul > li ul {
+ padding-top: 8px;
+ padding-bottom: 24px;
+}
+@media screen and (max-width: 1100px) {
+ #docstreeview > ul > li ul {
+ padding-bottom: 8px;
+ }
+}
+#docstreeview > ul > li ul li {
+ padding-top: 16px;
+}
+.jstree-closed,
+.jstree-open {
+ position: relative;
+}
+.jstree-icon {
+ color: #ffffff;
+ position: absolute;
+ right: 40px;
+ top: 20px;
+}
+#docstreeview > ul > li ul li i {
+ top: 20px;
+}
+.jstree-open > a > .jstree-icon {
+ color: #feb32a;
+ transition: all 0.5s;
+ transform: rotateZ(-90deg);
+}
+.jstree-leaf > .jstree-icon {
+ display: none !important;
+}
+@media screen and (max-width: 1100px) {
+ .prev-next {
+ display: none;
+ }
+}
+.theme-change {
+ margin-left: 32px;
+ display: flex;
+ align-items: center;
+}
+.theme-change i {
+ display: block;
+ width: 24px;
+ height: 24px;
+ cursor: pointer;
+ position: relative;
+ background-color: var(--theme-title);
+ mask-size: cover;
+ -webkit-mask-size: cover;
+}
+
+.theme-change i.light {
+ background-image: url(../img/common/moon.svg);
+ background-repeat: no-repeat;
+ background-size: 100% 100%;
+}
+.theme-change i.dark {
+ mask-image: url(../img/common/sun.svg);
+ -webkit-mask-image: url(../img/common/sun.svg);
+ background-color: #ffffff;
+ background-repeat: no-repeat;
+ background-size: 100% 100%;
+}
+#lang {
+ cursor: pointer;
+}
+#lang .lang-menu-link {
+ display: flex;
+ align-items: center;
+ font-size: var(--o-font-size-text);
+ color: var(--e-color-text1);
+ cursor: pointer;
+ height: 100%;
+}
+#lang:hover .lang-menu-list {
+ display: block;
+}
+#lang .lang-menu-list {
+ width: 84px;
+ position: absolute;
+ top: 46px;
+ left: -40px;
+ background: var(--e-color-bg2);
+ padding: 0 var(--o-spacing-h5);
+ cursor: pointer;
+ z-index: 99;
+ border: none;
+ display: none;
+}
+#lang .lang-menu-list .lang-item {
+ display: block;
+ line-height: var(--o-line-height-h3);
+ text-align: center;
+ font-size: var(--o-font-size-text);
+ color: var(--e-color-text1);
+ border-bottom: 1px solid var(--o-color-division);
+ height: 48px;
+ line-height: 48px;
+}
+#lang .lang-menu-list .lang-item:hover {
+ color: var(--e-color-brand1);
+}
+#lang .lang-menu-list .lang-item :last-child {
+ border-bottom: 0 none;
+}
+#lang .lang-menu-list .lang-item .active,
+#lang .lang-menu-list .lang-item :hover {
+ color: var(--e-color-brand1);
+}
+@media screen and (max-width: 1100px) {
+ #lang {
+ display: none;
+ }
+}
+.index-right {
+ display: flex;
+ width: 100%;
+ padding-right: 120px;
+ justify-content: flex-end;
+ background-color: var(--e-color-bg2);
+ box-shadow: var(--e-shadow-l1);
+}
+.h5-nav-menu {
+ display: none;
+ height: 100%;
+}
+@media screen and (max-width: 1100px) {
+ .h5-nav-menu {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ }
+ .pc-nav-menu {
+ display: none !important;
+ }
+}
+.h5_nav_left {
+ width: 24px;
+ height: 24px;
+ cursor: pointer;
+}
+.light .h5_nav_left {
+ background-image: url(../img/common/more-light.svg);
+}
+.dark .h5_nav_left {
+ background-image: url(../img/common/more-dark.svg);
+}
+@media screen and (max-width: 1100px) {
+ #docstreeview > ul li a {
+ margin: 0 16px;
+ margin-right: 0;
+ width: 65%;
+ font-size: var(--o-font-size-text);
+ }
+ #docstreeview > ul > li > ul > li a {
+ padding: 0;
+ }
+ #docstreeview > ul > li:nth-of-type(1) {
+ border: none;
+ }
+ #docstreeview > ul > li > a {
+ border: none;
+ }
+ #menu-box .jstree-node > .jstree-anchor,
+ #menu-box .jstree-node > .jstree-anchor p a {
+ font-size: 14px !important;
+ }
+ #menu-box .jstree-node > .jstree-anchor > p > a {
+ margin-left: 0;
+ }
+ #docstreeview > ul > li > ul {
+ background-color: var(--e-color-bg1);
+ padding: 0;
+ }
+ #docstreeview > ul > li ul li:nth-of-type(1) {
+ padding-top: 16px;
+ }
+ #docstreeview > ul > li ul li {
+ padding-top: 16px;
+ }
+ #docstreeview > ul > li ul li:nth-last-child(1) {
+ padding-bottom: 0;
+ }
+ #docstreeview > ul > li > ul > li:nth-last-child(1) {
+ padding-bottom: 16px;
+ }
+ .jstree-icon {
+ top: 0;
+ right: -10px;
+ }
+ .jstree-children .jstree-icon {
+ top: 6px;
+ right: 16px;
+ }
+ #docstreeview > ul > li > ul > li > i {
+ margin-right: 0;
+ }
+ #docstreeview > ul > li > ul > li i {
+ top: 14px;
+ }
+
+ #h5-menu-top .option {
+ background-color: var(--e-color-bg1);
+ }
+ #h5-menu-top .option a {
+ display: block;
+ margin-left: 16px;
+ padding-top: 16px;
+ }
+
+ #h5-menu-top .option li:nth-last-of-type(1) a {
+ padding-bottom: 16px;
+ }
+ #h5-menu-top .option {
+ height: 0;
+ overflow: scroll;
+ transition: all 0.2s;
+ }
+ #h5-menu-top .option-show {
+ height: 288px;
+ }
+ #h5-menu-top .h5-logo {
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+ padding: 22px 0 0 16px;
+ }
+ #h5-menu-top .h5-logo .icon-close {
+ width: 24px;
+ height: 24px;
+ margin-right: 16px;
+ }
+ #h5-menu-top .container{
+ padding: 0 16px;
+ }
+ #h5-menu-top .container .select-version .select-version-title {
+ display: flex;
+ width: 100%;
+ justify-content: space-between;
+ color: var(--e-color-text1);
+ font-size: 14px;
+ padding: 12px 0;
+}
+#h5-menu-top .container .select-version .select-version-title::before {
+ display: none;
+}
+#h5-menu-top .container .select-version .version-list {
+ max-height: 0;
+ transition: all 0.5s;
+ overflow: hidden;
+}
+#h5-menu-top .container .select-version .version-list.show {
+ max-height: 200px;
+ overflow: scroll;
+}
+#h5-menu-top .container .select-version .version-list li {
+ padding-bottom: 12px;
+}
+#h5-menu-top .container .select-version .version-list li a {
+ font-size: 12px;
+ color: var(--e-color-text1);
+}
+ .light .icon-close {
+ background-image: url(../img/common/icon-close-light.svg);
+ }
+ .dark .icon-close {
+ background-image: url(../img/common/icon-close-dark.svg);
+ }
+ .icon-servision {
+ margin-right: 17px;
+ width: 24px;
+ height: 24px;
+ background-image: url(../img/common/down.svg);
+ background-size: 16px 16px;
+ position: absolute;
+ right: 0px;
+ }
+ .dark .icon-servision {
+ background-image: url(../img/common/down-dark.svg);
+ }
+ .icon-open {
+ transform: scale(0.8) rotateZ(0deg);
+ }
+ #h5-menu-top .option a {
+ color: var(--e-color-text1);
+ font-size: 14px;
+ }
+ #h5-menu-top .option .active {
+ color: var(--e-color-brand1);
+ }
+ .jstree-closed > .jstree-icon {
+ background-image: url(../img/common/icon-down-dark.svg);
+ }
+ .jstree-open > .jstree-icon {
+ background-image: url(../img/common/icon-down-dark.svg);
+ }
+ .dark .jstree-closed > .jstree-icon {
+ background-image: url(../img/common/icon-down-dark.svg);
+ }
+ .dark .jstree-open > .jstree-icon {
+ background-image: url(../img/common/icon-down-dark.svg);
+ }
+}
+#h5-menu .h5-sersion {
+ text-align: center;
+ color: var(--e-color-text1);
+}
+.jstree-node i {
+ width: 12px;
+ height: 12px;
+}
+.jstree-closed > .jstree-icon {
+ background-image: url(../img/common/icon-down-dark.svg);
+}
+.jstree-open > .jstree-icon {
+ transform: rotateZ(180deg);
+ background-image: url(../img/common/icon-down-dark.svg);
+}
+@media screen and (max-width: 1100px) {
+ .jstree-closed > .jstree-icon {
+ background-image: url(../img/common/down.svg);
+ background-size: 16px 16px;
+ transform: rotateZ(0deg);
+ }
+ .jstree-open > .jstree-icon {
+ background-image: url(../img/common/down.svg);
+ background-size: 16px 16px;
+ transform: rotateZ(0deg);
+ }
+ .jstree-node a {
+ display: flex;
+ }
+}
+.h5-theme-lang {
+ display: none;
+}
+.h5-theme-lang i.light {
+ background-image: url(../img/common/moon.svg);
+}
+.theme-change i.dark {
+ mask-image: url(../img/common/sun.svg);
+ -webkit-mask-image: url(../img/common/sun.svg);
+ background-color: #ffffff;
+}
+@media screen and (max-width: 1100px) {
+ .h5-theme-lang {
+ display: flex;
+ }
+}
+.h5-theme-lang {
+ position: absolute;
+ left: 0;
+ bottom: 2px;
+ width: 100%;
+ padding: 16px 24px 16px 16px;
+
+ background-color: var(--e-color-bg2);
+ justify-content: space-between;
+}
+.h5-theme-lang .lang {
+ display: flex;
+}
+.h5-theme-lang .lang a {
+ color: var(--e-color-text1);
+ font-size: 12px;
+ line-height: 22px;
+ display: flex;
+ align-items: center;
+}
+.h5-theme-lang .lang .active {
+ color: var(--e-color-brand1);
+}
+
+.h5-theme-lang .lang a + a::before {
+ content: "";
+ display: inline-block;
+ height: 12px;
+ width: 1px;
+ margin: 0 8px;
+ background-color: var(--e-color-border1);
+}
+.h5-theme-lang .theme-change i {
+ width: 16px;
+ height: 16px;
+}
+.h5-mask {
+ display: none;
+}
+@media screen and (max-width: 1100px) {
+ .h5-mask {
+ position: fixed;
+ left: 0;
+ top: 0;
+ width: 100vw;
+ height: 100vh;
+ background-color: rgba(45, 47, 51, 0.1);
+ z-index: 1002;
+ }
+ #menu-box,
+ #menu-box .h5-logo,
+ #menu-box .menu-select-box,
+ #docstreeview {
+ background-color: var(--e-color-bg2);
+ }
+}
+.h5-nav-menu .h5-logo {
+ width: 137px;
+ height: 23px;
+ background: url(../img/common/logo-mobile.svg) no-repeat 100%/100%;
+}
+.dark .h5-nav-menu .h5-logo {
+ background: url(../img/common/logo-pc.png) no-repeat 100%/100%;
+}
+.h5-search {
+ width: 100vw;
+ height: 48px;
+ padding: 12px 16px;
+ background: var(--e-color-bg1);
+ position: fixed;
+ left: 0;
+ top: 0;
+ font-size: 14px;
+}
+.h5-search .icon-search {
+ position: absolute;
+ left: 24px;
+ top: 16px;
+ display: inline-block;
+ width: 16px;
+ height: 16px;
+ background: url(../img/search/search.svg) no-repeat 100%/100%;
+}
+.h5-search input {
+ flex-grow: 2;
+ height: 24px;
+ margin-right: 16px;
+ background: var(--e-color-bg-secondary);
+ padding: 3px 32px;
+ font-size: 12px;
+ font-weight: 400;
+ color: var(--e-color-text1);
+ line-height: 14px;
+ border: none;
+}
+.h5-search .cancel-btn {
+ color: var(--e-color-text1);
+ line-height: 24px;
+}
+.dark .h5-search .icon-search {
+ background: url(../img/search/search-dark.svg) no-repeat 100%/100%;
+}
+.h5-search .icon-clear {
+ position: absolute;
+ right: 72px;
+ top: 16px;
+ display: none;
+ width: 16px;
+ height: 16px;
+ background: url(../img/common/icon-close-light.svg) no-repeat 100%/100%;
+}
+.dark .h5-search .icon-clear {
+ background: url(../img/common/icon-close-dark.svg) no-repeat 100%/100%;
+}
+
+#h5-menu-top .h5-logo .logo-img {
+ width: 137px;
+ height: 23px;
+ background: url(../img/common/logo-mobile.svg) no-repeat 100%/100%;
+}
+.dark #h5-menu-top .h5-logo .logo-img {
+ background: url(../img/common/logo-pc.png) no-repeat 100%/100%;
+}
+.top-link .other-link a:nth-of-type(2) {
+ margin-left: 40px;
+}
+.footer {
+ background: var(--e-color-greyblack1);
+}
+
+@media (max-width: 1100px) {
+ .footer.migration {
+ margin-left: 0;
+ margin-top: 0;
+ }
+}
+.footer .app-content {
+ padding-bottom: 0;
+}
+.footer .atom {
+ text-align: center;
+ padding: var(--o-spacing-h3) 0 var(--o-spacing-h4);
+ position: relative;
+ border-bottom: 1px solid rgba(229, 229, 229, 0.12);
+}
+@media (max-width: 1440px) {
+ .footer .atom {
+ padding: var(--o-spacing-h4) 0;
+ }
+}
+@media (max-width: 1100px) {
+ .footer .atom {
+ padding: var(--o-spacing-h4) var(--o-spacing-h5);
+ }
+}
+.footer .atom-text {
+ font-size: var(--o-font-size-h6);
+ font-weight: 400;
+ color: #fff;
+ line-height: var(--o-line-height-h6);
+}
+@media (max-width: 1440px) {
+ .footer .atom-text {
+ font-size: var(--o-font-size-text);
+ line-height: var(--o-line-height-text);
+ }
+}
+.footer .atom-logo {
+ height: 48px;
+ margin-top: 16px;
+}
+@media (max-width: 1100px) {
+ .footer .atom-logo {
+ height: 38px;
+ }
+}
+.footer-content {
+ background: v-bind("footBg.pc") no-repeat bottom center;
+}
+@media (max-width: 767px) {
+ .footer-content {
+ background: v-bind("footBg.mo") no-repeat bottom center;
+ }
+}
+.footer-content .inner {
+ display: flex;
+ align-items: end;
+ justify-content: space-between;
+ padding: 18px 0 32px;
+ position: relative;
+ min-height: 118px;
+}
+@media (max-width: 1400px) {
+ .footer-content .inner {
+ padding: var(--o-spacing-h6) 0;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: center;
+ }
+}
+.footer-content .app-content {
+ padding: 0 64px;
+}
+@media (max-width: 1100px) {
+ .footer-content .app-content {
+ padding: 0 var(--o-spacing-h5);
+ }
+}
+.footer-logo {
+ flex: 1;
+}
+.footer-logo img {
+ width: 130px;
+ height: 46px;
+}
+.footer-logo .show-pc {
+ display: block;
+}
+.footer-logo .show-mo {
+ display: none;
+}
+@media (max-width: 1400px) {
+ .footer-logo {
+ text-align: center;
+ margin: 16px 0;
+ }
+ .footer-logo .show-pc {
+ display: none;
+ }
+ .footer-logo .show-mo {
+ width: 86px;
+ display: inline-block;
+ height: 20px;
+ }
+}
+.footer .copyright {
+ display: flex;
+ align-items: center;
+ font-size: var(--o-font-size-text);
+ color: rgba(255, 255, 255, 0.6);
+ margin-top: var(--o-spacing-h9);
+}
+.footer .approval-wrap {
+ display: flex;
+ align-items: center;
+}
+.footer .approval1 {
+ margin-left: 8px;
+ color: rgba(255, 255, 255, 0.6);
+}
+.footer .approval1:hover {
+ color: rgba(255, 255, 255, 1);
+}
+.footer .police-img {
+ width: 16px;
+ height: 16px;
+ margin: 0 8px;
+}
+@media (max-width: 1700px) {
+ .footer .copyright {
+ flex-direction: column;
+ }
+ .footer .approval-wrap {
+ margin-top: 4px;
+ }
+}
+@media (max-width: 1400px) {
+ .footer .copyright {
+ font-size: var(--o-font-size-tip);
+ line-height: var(--o-line-height-tip);
+ margin-top: var(--o-spacing-h10);
+ }
+}
+.footer .license {
+ font-size: var(--o-font-size-text);
+ color: #fff;
+ margin-top: var(--o-spacing-h9);
+}
+@media (max-width: 1400px) {
+ .footer .license {
+ margin-top: var(--o-spacing-h6);
+ }
+}
+@media (max-width: 800px) {
+ .footer .footer-option-item {
+ font-size: 10px;
+ }
+ .footer .license {
+ font-size: 10px;
+ }
+ .footer .copyright {
+ font-size: 10px;
+ }
+}
+.footer .license span {
+ color: var(--e-color-text4);
+}
+.footer .footer-option {
+ text-align: center;
+}
+.footer .footer-option .link {
+ color: #fff;
+ font-size: var(--o-font-size-text);
+ display: inline-block;
+ padding: 0 var(--o-spacing-h6);
+ border-right: 1px solid #fff;
+}
+.footer .footer-option .link:last-child {
+ border-right: 0;
+}
+@media (max-width: 1400px) {
+ .footer .footer-option .link {
+ font-size: var(--o-font-size-tip);
+ line-height: var(--o-line-height-tip);
+ padding: 0 var(--o-spacing-h9);
+ }
+}
+@media (max-width: 1400px) {
+ .footer .footer-option {
+ order: -1;
+ }
+}
+.footer .footer-right {
+ flex: 1;
+}
+.footer .footer-right .code-box {
+ display: flex;
+ justify-content: right;
+ gap: 16px;
+ margin-bottom: 16px;
+}
+[lang="zh"] .footer .footer-right .isen{
+ display: none;
+}
+[lang="en"] .footer .footer-right .code-box,[lang="en"] .footer .footer-right .iszh{
+ display: none;
+}
+[lang="en"] .footer .footer-right .isen{
+ display: flex;
+}
+
+.footer .footer-right .code-box .code-pop {
+ cursor: pointer;
+ position: relative;
+ height: 20px;
+ display: block;
+}
+.footer .footer-right .code-box .code-pop > img {
+ height: 100%;
+ object-fit: cover;
+}
+.footer .footer-right .code-box .code-pop .code-layer {
+ position: absolute;
+ top: -105px;
+ left: -32px;
+ z-index: 99;
+ display: none;
+ background: #fff;
+ padding: 6px;
+}
+.footer .footer-right .code-box .code-pop .code-layer img {
+ width: 78px;
+ height: 78px;
+}
+.footer .footer-right .code-box .code-pop .code-layer .txt {
+ font-size: 12px;
+ color: #fff;
+ display: none;
+}
+.footer .footer-right .code-box .code-pop .code-layer::after {
+ border: 10px solid transparent;
+ content: "";
+ border-top-color: #fff;
+ position: absolute;
+ bottom: -20px;
+ left: 50%;
+ transform: translateX(-50%);
+ display: block;
+}
+@media (max-width: 800px) {
+ .footer .footer-right .code-box .code-pop .code-layer {
+ display: block;
+ position: initial;
+ background: none;
+ padding: 0;
+ text-align: center;
+ }
+ .footer .footer-right .code-box .code-pop .code-layer::after {
+ display: none !important;
+ }
+ .footer .footer-right .code-box .code-pop .code-layer .txt {
+ display: block;
+ }
+}
+.footer .footer-right .code-box .code-pop:hover .code-layer {
+ display: block;
+}
+@media (max-width: 800px) {
+ .footer .footer-right .code-box .code-pop {
+ height: auto;
+ }
+ .footer .footer-right .code-box .code-pop > img {
+ display: none;
+ }
+}
+@media (max-width: 1100px) {
+ .footer .footer-right .code-box {
+ justify-content: center;
+ margin-top: 24px;
+ }
+}
+.footer .footer-right .footer-links {
+ display: flex;
+ justify-content: right;
+ align-items: center;
+ gap: 16px;
+}
+.footer .footer-right .footer-links .links-logo {
+ height: 16px;
+}
+.footer .footer-right .footer-links .links-logo img {
+ height: 100%;
+ object-fit: cover;
+}
+@media (max-width: 1100px) {
+ .footer .footer-right .footer-links {
+ justify-content: center;
+ }
+}
+@media (max-width: 800px) {
+ .footer .footer-right .footer-links {
+ display: flex;
+ text-align: center;
+ }
+ .footer .footer-right .footer-links .img {
+ height: 16px;
+ }
+}
+.footer .footer-right .footer-links.iszh {
+ gap: 10px;
+}
+.footer .footer-right .footer-links.iszh .links-logo {
+ height: 14px;
+}
+.footer .footer-right .footer-links.iszh .links-logo:first-child {
+ height: 18px;
+}
+@media (max-width: 800px) {
+ .footer .footer-right .footer-links.iszh {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ text-align: center;
+ margin-top: 40px;
+ }
+ .footer .footer-right .footer-links.iszh .img {
+ height: 16px;
+ }
+}
+.footer .footer-right p {
+ color: #fff;
+ font-size: var(--o-font-size-tip);
+ margin-top: var(--o-spacing-h8);
+}
+.footer .email {
+ color: #fff;
+ font-size: var(--o-font-size-text);
+}
+@media (max-width: 1400px) {
+ .footer .email {
+ font-size: var(--o-font-size-tip);
+ }
+}
+#menu-box #version-select {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ width: 220px;
+ color: #fff;
+ font-size: var(--o-font-size-h8);
+ margin-top: 40px;
+ margin-bottom: 32px;
+ margin-left: 40px;
+ padding: 0 8px;
+}
+@media screen and (max-width: 1100px) {
+ #menu-box #version-select {
+ display: none;
+ }
+}
+#menu-box #version-select > span {
+ color: #feb32a;
+}
+#menu-box #version-select .version-tip {
+ position: absolute;
+ width: auto;
+ white-space: nowrap;
+ padding: 0 8px;
+ bottom: 38px;
+ left: 178px;
+ font-size: 14px;
+ line-height: 32px;
+ background-color: var(--e-color-bg2);
+ border: 1px solid var(--e-color-kleinblue5);
+ color: var(--e-color-text1);
+ z-index: 99;
+ transition: transform 0.2s;
+ transform: scale(0);
+}
+#menu-box #version-select .version-tip.ru {
+ display: none;
+}
+#menu-box #version-select .version-tip::after {
+ content: "";
+ display: block;
+ border-left: 8px solid var(--e-color-kleinblue5);
+ border-top: 8px solid var(--e-color-bg2);
+ border-right: 8px solid var(--e-color-kleinblue5);
+ border-bottom: 8px solid var(--e-color-kleinblue5);
+ position: absolute;
+ left: 10px;
+ top: 32px;
+}
+#menu-box #version-select:hover .version-tip {
+ transform: scale(1);
+}
+.book-toc {
+ position: fixed;
+ right: 4vw;
+ top: 100px;
+ width: 200px;
+ height: calc(100vh - 426px);
+ overflow-y: scroll;
+}
+.book-toc::before {
+ display: block;
+ content: "";
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 1px;
+ height: 100%;
+ background-color: var(--e-color-division1);
+}
+
+.book-toc::-webkit-scrollbar {
+ width: 6px;
+}
+.book-toc::-webkit-scrollbar-thumb{
+ border-radius: 4px;
+ background-color: var(--e-color-bg4);
+}
+.book-toc #toc-list li a{
+ display: block;
+ position: relative;
+ line-height: 40px;
+ padding-left: 16px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ color: var(--e-color-text1);
+}
+.book-toc #toc-list li a:hover{
+ color: var(--e-color-brand1);
+}
+.book-toc #toc-list .active{
+ color: var(--e-color-brand1);
+}
+.book-toc #toc-list .active::before{
+ content: "";
+ display: inline-block;
+ width: 1px;
+ height: 100%;
+ background-color: var(--e-color-brand1);
+ position: absolute;
+ left: 0px;
+ top:0;
+}
+@media screen and (max-width:1480px) {
+ .book-toc{
+ display: none;
+ }
+}
+
+.footer {
+ margin-top: 0;
+}
+.page-content {
+ width: 100%;
+ max-width: 1174px;
+}
+.prev-next .version {
+ display: none;
+}
+@media (max-width: 1100px) {
+ .prev-next .version {
+ display: block;
+ }
+}
+.h5-prev,
+.h5-next,
+.h5-prev a,
+.h5-next a,
+.h5-prev a i,
+.h5-next a i {
+ display: flex;
+ align-items: center;
+}
+#h5-menu ul .disabled{
+ display: none;
+}
+#h5-menu-box {
+ position: fixed;
+ left: 0;
+ top: 0;
+ z-index: 9999;
+ background-color: var(--e-color-bg2);
+ height: 100vh;
+ width: 65vw;
+ transition: all 0.5s;
+ display: none;
+ transform: translateX(-100%);
+}
+
+.h5-docs-a {
+ display: none;
+}
+@media screen and (max-width: 1100px) {
+ .h5-docs-a {
+ display: flex;
+ align-items: center;
+ }
+}
+.dark img {
+ filter: brightness(0.8) grayscale(0.2) contrast(1.2);
+}
+#menu-box .jstree-node[aria-level="3"],
+#menu-box .jstree-node[aria-level="4"],
+#menu-box .jstree-node[aria-level="5"],
+#menu-box .jstree-node[aria-level="6"] {
+ padding-left: 16px;
+}
+.feedback .bug-icon-dark {
+ display: none;
+}
+.dark .feedback .bug-icon {
+ display: none;
+}
+.dark .feedback .bug-icon-dark {
+ display: inline-block;
+}
diff --git a/static/css/theme.css b/static/css/theme.css
new file mode 100644
index 0000000000000000000000000000000000000000..585a092e3f074d81c856d50000819c69182cddaf
--- /dev/null
+++ b/static/css/theme.css
@@ -0,0 +1,290 @@
+/* // 颜色 */
+:root {
+ /**
+ * 基础色盘
+ */
+
+ /* // 克莱因蓝 */
+ --e-color-kleinblue1: #000412;
+ --e-color-kleinblue2: #000827;
+ --e-color-kleinblue3: #0c2360;
+ --e-color-kleinblue4: #00288d;
+ --e-color-kleinblue5: #002fa7;
+ --e-color-kleinblue6: #0d3cb4;
+ --e-color-kleinblue7: #2555cd;
+ --e-color-kleinblue8: #406fe7;
+ --e-color-kleinblue9: #5988ff;
+ --e-color-kleinblue10: #b2c0e4;
+
+ /* // 中性色 */
+ --e-color-neutral1: #121212;
+ --e-color-neutral2: #151515;
+ --e-color-neutral3: #2d2d2d;
+ --e-color-neutral4: #3f3f3f;
+ --e-color-neutral5: #555555;
+ --e-color-neutral6: #707070;
+ --e-color-neutral7: #848484;
+ --e-color-neutral8: #999999;
+ --e-color-neutral9: #b2b2b2;
+ --e-color-neutral10: #cccccc;
+ --e-color-neutral11: #e5e5e5;
+
+ /* // 红色 */
+ --e-color-red1: #850d09;
+ --e-color-red2: #b4110c;
+ --e-color-red3: #e4160f;
+ --e-color-red4: #f13b35;
+ --e-color-red5: #f3524d;
+ --e-color-red6: #ff5f5a;
+ --e-color-red7: #ff7873;
+ --e-color-red8: #ff928d;
+ --e-color-red9: #ffaba6;
+ --e-color-red10: #ffd2af;
+
+ /* // 黄色 */
+ --e-color-yellow1: #754c01;
+ --e-color-yellow2: #a86d01;
+ --e-color-yellow3: #dabe01;
+ --e-color-yellow4: #feaa11;
+ --e-color-yellow5: #feb32a;
+ --e-color-yellow6: #ffc037;
+ --e-color-yellow7: #ffd950;
+ --e-color-yellow8: #fff36a;
+ --e-color-yellow9: #ffff83;
+ --e-color-yellow10: #ffe1aa;
+
+ /* // 绿色 */
+ --e-color-green1: #1f370f;
+ --e-color-green2: #355f1a;
+ --e-color-green3: #4b8725;
+ --e-color-green4: #62af30;
+ --e-color-green5: #6dc335;
+ --e-color-green6: #7ad042;
+ --e-color-green7: #93e95b;
+ --e-color-green8: #adff75;
+ --e-color-green9: #c6ff8e;
+ --e-color-green10: #c5e7ae;
+
+ /* // 橙色 */
+ --e-color-orange1: #9b370e;
+ --e-color-orange2: #b54f00;
+ --e-color-orange3: #e86600;
+ --e-color-orange4: #ff801c;
+ --e-color-orange5: #ff8e36;
+ --e-color-orange6: #ff9b43;
+ --e-color-orange7: #ffb45c;
+ --e-color-orange8: #ffce76;
+ --e-color-orange9: #ffcf8f;
+ --e-color-orange10: #ffd2af;
+
+ /* // 灰蓝色 */
+ --e-color-greyblue1: #e5e8f0;
+ --e-color-greyblue2: #f7f8fa;
+ --e-color-greyblue3: #f5f6f8;
+
+ /* // 灰黑色 */
+ --e-color-greyblack1: #1e1e1e;
+ --e-color-greyblack2: #242424;
+ --e-color-greyblack3: #2e2e2e;
+ --e-color-greyblack4: #383838;
+
+ /* // 白色 */
+ --e-color-white: #ffffff;
+
+ /* // 黑色 */
+ --e-color-black: #000000;
+
+ /* // 透明 */
+ --e-color-transparent: transparent;
+
+ /**
+ * 状态颜色 && 功能颜色
+ */
+
+ /* // 成功色 */
+ --e-color-success1: var(--e-color-green5);
+ --e-color-success2: var(--e-color-green7);
+ --e-color-success3: var(--e-color-green10);
+
+ /* // 告警色 */
+ --e-color-warning1: var(--e-color-orange5);
+ --e-color-warning2: var(--e-color-orange7);
+ --e-color-warning3: var(--e-color-orange10);
+
+ /* // 错误色 */
+ --e-color-error1: var(--e-color-red5);
+ --e-color-error2: var(--e-color-red7);
+ --e-color-error3: var(--e-color-red10);
+
+ /* // 品牌色 */
+ --e-color-brand1: var(--e-color-kleinblue5);
+ --e-color-brand2: var(--e-color-kleinblue8);
+ --e-color-brand3: var(--e-color-kleinblue4);
+ --e-color-brand4: var(--e-color-kleinblue6);
+ --e-color-brand5: var(--e-color-kleinblue10);
+ --e-color-brand6: var(--e-color-kleinblue10);
+
+ /* // 文字颜色 */
+ --e-color-text1: var(--e-color-black);
+ --e-color-text2: var(--e-color-white);
+ --e-color-text3: var(--e-color-neutral4);
+ --e-color-text4: var(--e-color-neutral6);
+ --e-color-text5: var(--e-color-neutral11);
+
+ /* // 背景色 */
+ --e-color-bg1: var(--e-color-greyblue3);
+ --e-color-bg2: var(--e-color-white);
+ --e-color-bg3: var(--e-color-greyblue2);
+ --e-color-bg4: var(--e-color-greyblue1);
+ --e-color-bg5: var(--e-color-white);
+ --e-color-bg6: rgba(0, 0, 0, 0.5);
+ --e-color-bg-secondary: var(--e-color-neutral11);
+
+ /* // 链接色 */
+ --e-color-link1: var(--e-color-kleinblue5);
+ --e-color-link2: var(--e-color-kleinblue8);
+ --e-color-link3: var(--e-color-kleinblue4);
+ --e-color-link4: var(--e-color-kleinblue6);
+ --e-color-link5: var(--e-color-kleinblue10);
+ --e-color-link6: var(--e-color-kleinblue10);
+
+ /* // 边框颜色 */
+ --e-color-border1: var(--e-color-neutral6);
+ --e-color-border2: var(--e-color-neutral11);
+ --e-color-border3: var(--e-color-kleinblue5);
+
+ /* // 分割线颜色 */
+ --e-color-division1: var(--e-color-neutral11);
+
+ /* // 填充色,用于阴影容器背景 */
+ --e-color-fill1: var(--e-color-white);
+ --e-color-fill2: var(--e-color-white);
+ --e-color-fill2_hover: var(--e-color-white);
+ --e-color-fill3: var(--e-color-white);
+ --e-color-fill4: var(--e-color-white);
+ --e-color-fill5: var(--e-color-white);
+
+ --e-shadow-l1: 0 1px 5px rgba(45, 47, 51, 0.1);
+ --e-shadow-l2: 0 1px 5px rgba(45, 47, 51, 0.1);
+ --e-shadow-l2_hover: 0 6px 18px rgba(0, 47, 167, 0.14);
+ --e-shadow-l3: 0 6px 18px rgba(45, 47, 51, 0.14);
+ --e-shadow-l4: 0 10px 32px rgba(45, 47, 51, 0.18);
+ --e-shadow-l5: 0 12px 42px rgba(45, 47, 51, 0.24);
+ --e-icon-bg:var(--e-color-black);
+
+ /* 字体font-size */
+ --o-font-size-h1: 64px;
+ --o-font-size-h2: 54px;
+ --o-font-size-h3: 36px;
+ --o-font-size-h4: 28px;
+ --o-font-size-h5: 24px;
+ --o-font-size-h6: 20px;
+ --o-font-size-h7: 18px;
+ --o-font-size-h8: 16px;
+ --o-font-size-text: 14px;
+ --o-font-size-tip: 12px;
+
+ /* 字体line-height */
+ --o-line-height-h1: 84px;
+ --o-line-height-h2: 76px;
+ --o-line-height-h3: 48px;
+ --o-line-height-h4: 36px;
+ --o-line-height-h5: 32px;
+ --o-line-height-h6: 28px;
+ --o-line-height-h7: 26px;
+ --o-line-height-h8: 24px;
+ --o-line-height-text: 22px;
+ --o-line-height-tip: 18px;
+
+ /* 间距 */
+ --o-spacing-h1: 64px;
+ --o-spacing-h2: 40px;
+ --o-spacing-h3: 32px;
+ --o-spacing-h4: 24px;
+ --o-spacing-h5: 16px;
+ --o-spacing-h6: 12px;
+ --o-spacing-h7: 10px;
+ --o-spacing-h8: 8px;
+ --o-spacing-h9: 6px;
+ --o-spacing-h10: 4px;
+
+ /* 分页器颜色 */
+ --o-pagination-bg-color:var(--e-color-text5);
+}
+.dark {
+ /* // 成功色 */
+ --e-color-success1: var(--e-color-yellowgreen5);
+ --e-color-success2: var(--e-color-yellowgreen7);
+ --e-color-success3: var(--e-color-yellowgreen2);
+
+ /* // 告警色 */
+ --e-color-warning1: var(--e-color-orange5);
+ --e-color-warning2: var(--e-color-orange7);
+ --e-color-warning3: var(--e-color-orange1);
+
+ /* // 错误色 */
+ --e-color-error1: var(--e-color-red5);
+ --e-color-error2: var(--e-color-red7);
+ --e-color-error3: var(--e-color-red1);
+
+ /* // 品牌色 */
+ --e-color-brand1: var(--e-color-kleinblue8);
+ --e-color-brand2: var(--e-color-kleinblue9);
+ --e-color-brand3: var(--e-color-kleinblue5);
+ --e-color-brand4: var(--e-color-kleinblue7);
+ --e-color-brand5: var(--e-color-kleinblue3);
+ --e-color-brand6: var(--e-color-kleinblue3);
+
+ /* // 文字颜色 */
+ --e-color-text1: var(--e-color-white);
+ --e-color-text2: var(--e-color-black);
+ --e-color-text3: var(--e-color-neutral11);
+ --e-color-text4: var(--e-color-neutral9);
+ --e-color-text5: var(--e-color-neutral5);
+
+ /* // 背景色 */
+ --e-color-bg1: var(--e-color-neutral1);
+ --e-color-bg2: var(--e-color-greyblack1);
+ --e-color-bg3: var(--e-color-greyblack2);
+ --e-color-bg4: var(--e-color-greyblack3);
+ --e-color-bg5: var(--e-color-greyblack3);
+ --e-color-bg6: rgba(0, 0, 0, 0.5);
+ --e-color-bg-secondary: var(--e-color-neutral5);
+
+ /* // 链接色 */
+ --e-color-link1: var(--e-color-kleinblue8);
+ --e-color-link2: var(--e-color-kleinblue9);
+ --e-color-link3: var(--e-color-kleinblue5);
+ --e-color-link4: var(--e-color-kleinblue7);
+ --e-color-link5: var(--e-color-kleinblue3);
+ --e-color-link6: var(--e-color-kleinblue3);
+
+ /* // 边框颜色 */
+ --e-color-border1: var(--e-color-neutral9);
+
+ /* // 分割线颜色 */
+ --e-color-division1: var(--e-color-neutral3);
+
+ /* // 填充色,用于阴影容器背景 */
+ --e-color-fill1: var(--e-color-greyblack1);
+ --e-color-fill2: var(--e-color-greyblack1);
+ --e-color-fill2_hover: var(--e-color-greyblack2);
+ --e-color-fill3: var(--e-color-greyblack2);
+ --e-color-fill4: var(--e-color-greyblack3);
+ --e-color-fill5: var(--e-color-greyblack4);
+
+ /**
+ * 阴影
+ */
+ --e-shadow-l1: 0 1px 7px rgba(0, 0, 0, 0.3);
+ --e-shadow-l2: 0 1px 7px rgba(0, 0, 0, 0.3);
+ --e-shadow-l2_hover: 0 6px 18px rgba(0, 0, 0, 0.42);
+ --e-shadow-l3: 0 6px 18px rgba(0, 0, 0, 0.42);
+ --e-shadow-l4: 0 10px 32px rgba(0, 0, 0, 0.54);
+ --e-shadow-l5: 0 12px 42px rgba(0, 0, 0, 0.72);
+
+ --e-icon-bg:var(--e-color-white);
+
+ /* 分页器颜色 */
+ --o-pagination-bg-color:var(--e-color-text5);
+}
diff --git a/static/error.html b/static/error.html
new file mode 100644
index 0000000000000000000000000000000000000000..d3ad9540943cd9d6cb3bba18b92dfcd29c10c0f7
--- /dev/null
+++ b/static/error.html
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+ openEuler
+
+
+
+
+
+
+
Error
+
+
+
+
\ No newline at end of file
diff --git a/static/favicon.ico b/static/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..ba6134a0ab94b8dd83d098e059d3c4dd93dd1041
Binary files /dev/null and b/static/favicon.ico differ
diff --git a/static/fonts/Roboto-BoldCondensed.ttf b/static/fonts/Roboto-BoldCondensed.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..d7ea8833ba369ec975846497e5fa05741295eacf
Binary files /dev/null and b/static/fonts/Roboto-BoldCondensed.ttf differ
diff --git a/static/fonts/Roboto-Regular.ttf b/static/fonts/Roboto-Regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..7d9a6c4c32d7e920b549caf531e390733496b6e0
Binary files /dev/null and b/static/fonts/Roboto-Regular.ttf differ
diff --git a/static/img/404-banner.png b/static/img/404-banner.png
new file mode 100644
index 0000000000000000000000000000000000000000..3439bb5a684a321cd198dd29ded5cc82d0157288
Binary files /dev/null and b/static/img/404-banner.png differ
diff --git a/static/img/common/atom-logo-dark.svg b/static/img/common/atom-logo-dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..de481f914c5dc865acc07a6d2dbabfaadfb39394
--- /dev/null
+++ b/static/img/common/atom-logo-dark.svg
@@ -0,0 +1,52 @@
+
+
+ 切片
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/common/atom.png b/static/img/common/atom.png
new file mode 100644
index 0000000000000000000000000000000000000000..ffacbb460fc4f34790bec9db34185405ff7b705d
Binary files /dev/null and b/static/img/common/atom.png differ
diff --git a/static/img/common/banner-bg.png b/static/img/common/banner-bg.png
new file mode 100644
index 0000000000000000000000000000000000000000..86b2aa3bbc9e18241bd7500153083f230b932a30
Binary files /dev/null and b/static/img/common/banner-bg.png differ
diff --git a/static/img/common/banner-iii.png b/static/img/common/banner-iii.png
new file mode 100644
index 0000000000000000000000000000000000000000..5fd6704539b678d1cdb674502a351234ff412ebd
Binary files /dev/null and b/static/img/common/banner-iii.png differ
diff --git a/static/img/common/copied.png b/static/img/common/copied.png
new file mode 100644
index 0000000000000000000000000000000000000000..10e8b7592be3c856fdd731996baa6a96596c0797
Binary files /dev/null and b/static/img/common/copied.png differ
diff --git a/static/img/common/copy-success.png b/static/img/common/copy-success.png
new file mode 100644
index 0000000000000000000000000000000000000000..d3694238614b09653ab8f825a49e906d551aa88f
Binary files /dev/null and b/static/img/common/copy-success.png differ
diff --git a/static/img/common/copy.png b/static/img/common/copy.png
new file mode 100644
index 0000000000000000000000000000000000000000..543227e536299041b590430ff73b5a075e03a93f
Binary files /dev/null and b/static/img/common/copy.png differ
diff --git a/static/img/common/docs-banner.png b/static/img/common/docs-banner.png
new file mode 100644
index 0000000000000000000000000000000000000000..d2d9068526ca1bf9f4a138bd1d5e927067d56a0c
Binary files /dev/null and b/static/img/common/docs-banner.png differ
diff --git a/static/img/common/down-dark.svg b/static/img/common/down-dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..20783d6654dca824768f11eab6af8ecbef156d05
--- /dev/null
+++ b/static/img/common/down-dark.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/common/down.svg b/static/img/common/down.svg
new file mode 100644
index 0000000000000000000000000000000000000000..03eaa06d8e0562e4708f8460dbf869c2f3383570
--- /dev/null
+++ b/static/img/common/down.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/common/earth.svg b/static/img/common/earth.svg
new file mode 100644
index 0000000000000000000000000000000000000000..be26a120f31de9231cf326f60442001c7bddbb95
--- /dev/null
+++ b/static/img/common/earth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/common/footer-logo-dark.png b/static/img/common/footer-logo-dark.png
new file mode 100644
index 0000000000000000000000000000000000000000..8e3bb6ba95d1a2f019ba2390fec222dbf13d67a5
Binary files /dev/null and b/static/img/common/footer-logo-dark.png differ
diff --git a/static/img/common/footer-logo.png b/static/img/common/footer-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..a7a1f28ff53132ca991eb82e7ee5a0f9af2498a9
Binary files /dev/null and b/static/img/common/footer-logo.png differ
diff --git a/static/img/common/footerLogo.png b/static/img/common/footerLogo.png
new file mode 100644
index 0000000000000000000000000000000000000000..3970ba14501824ac925acdf81c9e0892a6076594
Binary files /dev/null and b/static/img/common/footerLogo.png differ
diff --git a/static/img/common/help-dark.png b/static/img/common/help-dark.png
new file mode 100644
index 0000000000000000000000000000000000000000..7a3bf7b97fd4a99ef9cda47c938e3554c67c0980
Binary files /dev/null and b/static/img/common/help-dark.png differ
diff --git a/static/img/common/help.png b/static/img/common/help.png
new file mode 100644
index 0000000000000000000000000000000000000000..215eeb918134cc37b7d7783bdb49cc29b8afb364
Binary files /dev/null and b/static/img/common/help.png differ
diff --git a/static/img/common/help.svg b/static/img/common/help.svg
new file mode 100644
index 0000000000000000000000000000000000000000..fc381bdb4b458de9ddec269d2a0639c78390d887
--- /dev/null
+++ b/static/img/common/help.svg
@@ -0,0 +1 @@
+
diff --git a/static/img/common/icon-arrow-left1.svg b/static/img/common/icon-arrow-left1.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e0392c33c67fa4cfb48c2fabd07a183b9c751b82
--- /dev/null
+++ b/static/img/common/icon-arrow-left1.svg
@@ -0,0 +1,4 @@
+
+arrow-left
+
+
diff --git a/static/img/common/icon-arrow-right-open.svg b/static/img/common/icon-arrow-right-open.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b8943345ee92dc066ced162f8fbbb1cfa62b807d
--- /dev/null
+++ b/static/img/common/icon-arrow-right-open.svg
@@ -0,0 +1,4 @@
+
+arrow-triangle-solid-right
+
+
diff --git a/static/img/common/icon-arrow-right.svg b/static/img/common/icon-arrow-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..19da8bfc1c87d72ef8b135bc4fe394f5a1ccf836
--- /dev/null
+++ b/static/img/common/icon-arrow-right.svg
@@ -0,0 +1,4 @@
+
+arrow-triangle-solid-right
+
+
diff --git a/static/img/common/icon-arrow-right1.svg b/static/img/common/icon-arrow-right1.svg
new file mode 100644
index 0000000000000000000000000000000000000000..fe354712fa0b695bcec903346b4b22c1a0597e7d
--- /dev/null
+++ b/static/img/common/icon-arrow-right1.svg
@@ -0,0 +1,4 @@
+
+arrow-right
+
+
diff --git a/static/img/common/icon-checkbox.svg b/static/img/common/icon-checkbox.svg
new file mode 100644
index 0000000000000000000000000000000000000000..42363722472fc9c67088d597996b313e7aa258f7
--- /dev/null
+++ b/static/img/common/icon-checkbox.svg
@@ -0,0 +1,5 @@
+
+
+
+
\ No newline at end of file
diff --git a/static/img/common/icon-chevron-dark-gray.svg b/static/img/common/icon-chevron-dark-gray.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f6b45d49a39573880b3225680ce3635715f493b4
--- /dev/null
+++ b/static/img/common/icon-chevron-dark-gray.svg
@@ -0,0 +1,4 @@
+
+chevron-right
+
+
diff --git a/static/img/common/icon-chevron-right-dark.svg b/static/img/common/icon-chevron-right-dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..42bf762865d9daa93a56094f78885d71bd76a67d
--- /dev/null
+++ b/static/img/common/icon-chevron-right-dark.svg
@@ -0,0 +1,4 @@
+
+chevron-right
+
+
diff --git a/static/img/common/icon-chevron-right-gray.svg b/static/img/common/icon-chevron-right-gray.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c4f09b3a796aded6961ed56d9310dc898078ef6d
--- /dev/null
+++ b/static/img/common/icon-chevron-right-gray.svg
@@ -0,0 +1,4 @@
+
+chevron-right
+
+
diff --git a/static/img/common/icon-chevron-right.svg b/static/img/common/icon-chevron-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b2ddf739080111e1adea1e197ebc8bb677561ae1
--- /dev/null
+++ b/static/img/common/icon-chevron-right.svg
@@ -0,0 +1,4 @@
+
+chevron-right
+
+
diff --git a/static/img/common/icon-close-dark.svg b/static/img/common/icon-close-dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b2b7dafa69fbd45ec0dd70dd697fc370ff4c2520
--- /dev/null
+++ b/static/img/common/icon-close-dark.svg
@@ -0,0 +1,11 @@
+
+
+ 切片
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/common/icon-close-light.svg b/static/img/common/icon-close-light.svg
new file mode 100644
index 0000000000000000000000000000000000000000..3c5c8b49feffab03aeab34a1593894370b94a3f9
--- /dev/null
+++ b/static/img/common/icon-close-light.svg
@@ -0,0 +1,11 @@
+
+
+ 切片
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/common/icon-down-dark.svg b/static/img/common/icon-down-dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d07deeb7f290188ee06009736f3783597d3e2022
--- /dev/null
+++ b/static/img/common/icon-down-dark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/common/icon-down-light.svg b/static/img/common/icon-down-light.svg
new file mode 100644
index 0000000000000000000000000000000000000000..76726bc5dcbba55e9c70616eaf2d2ab0cece08fc
--- /dev/null
+++ b/static/img/common/icon-down-light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/common/icon-home.svg b/static/img/common/icon-home.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5421beb90b72970eb62ddb6532f657a1cd46644a
--- /dev/null
+++ b/static/img/common/icon-home.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/common/icon-user-dark.svg b/static/img/common/icon-user-dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..94d4bce5828b850f387780dd6c8690719b2c51fe
--- /dev/null
+++ b/static/img/common/icon-user-dark.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/static/img/common/icon-user.svg b/static/img/common/icon-user.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6c118c5f34c22c90a2d8b43774f12938fa5a417b
--- /dev/null
+++ b/static/img/common/icon-user.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/static/img/common/lang.png b/static/img/common/lang.png
new file mode 100644
index 0000000000000000000000000000000000000000..1b5204d3e6f2f3b2c70399d89ed4ae41af19ee0a
Binary files /dev/null and b/static/img/common/lang.png differ
diff --git a/static/img/common/logo-doc.svg b/static/img/common/logo-doc.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bcc286d60d44e17679deeacc8f0b47d228ee1046
--- /dev/null
+++ b/static/img/common/logo-doc.svg
@@ -0,0 +1,39 @@
+
+
+ openEuler Docs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/common/logo-h5.png b/static/img/common/logo-h5.png
new file mode 100644
index 0000000000000000000000000000000000000000..7036008f3676cd488a8bf894509938dbaa625c45
Binary files /dev/null and b/static/img/common/logo-h5.png differ
diff --git a/static/img/common/logo-mobile.svg b/static/img/common/logo-mobile.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a2768dde6ac655e286ff59f1e63db6524489390a
--- /dev/null
+++ b/static/img/common/logo-mobile.svg
@@ -0,0 +1,35 @@
+
+
+ openEuler Docs -mb
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/common/logo-pc.png b/static/img/common/logo-pc.png
new file mode 100644
index 0000000000000000000000000000000000000000..7212ce32cb3a612fa97a5e45d8ac29af7ded3f40
Binary files /dev/null and b/static/img/common/logo-pc.png differ
diff --git a/static/img/common/logo.png b/static/img/common/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..3451f6040123c1b68af1e05ab9a7cf70bf28a2de
Binary files /dev/null and b/static/img/common/logo.png differ
diff --git a/static/img/common/logo.svg b/static/img/common/logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..291baca7d896b6d9ed122e9574f880cc9da48463
--- /dev/null
+++ b/static/img/common/logo.svg
@@ -0,0 +1,29 @@
+
+
+ 切片
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/common/moon.svg b/static/img/common/moon.svg
new file mode 100644
index 0000000000000000000000000000000000000000..95896c10fc817e6b896d3b35a37d042a7848571c
--- /dev/null
+++ b/static/img/common/moon.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/static/img/common/more-dark.svg b/static/img/common/more-dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..64b40dadd9c4515638fe64dfa45c59bd857519f3
--- /dev/null
+++ b/static/img/common/more-dark.svg
@@ -0,0 +1,11 @@
+
+
+ 切片
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/common/more-light.svg b/static/img/common/more-light.svg
new file mode 100644
index 0000000000000000000000000000000000000000..63c80690cfe28f0fb2cfe9a5c0d622d9250ebe9d
--- /dev/null
+++ b/static/img/common/more-light.svg
@@ -0,0 +1,11 @@
+
+
+ 切片
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/common/more-version.svg b/static/img/common/more-version.svg
new file mode 100644
index 0000000000000000000000000000000000000000..84e4f2f56ce288ed94a291bf89e4ae04fe2a922a
--- /dev/null
+++ b/static/img/common/more-version.svg
@@ -0,0 +1,11 @@
+
+
+ 切片
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/common/new-banner1.png b/static/img/common/new-banner1.png
new file mode 100644
index 0000000000000000000000000000000000000000..0ba3458ec1fe1d90d820313a2d9962125f44b4c4
Binary files /dev/null and b/static/img/common/new-banner1.png differ
diff --git a/static/img/common/new-banner2.png b/static/img/common/new-banner2.png
new file mode 100644
index 0000000000000000000000000000000000000000..e0c16fe64484c7816ae58eae7dae5856cbc61c60
Binary files /dev/null and b/static/img/common/new-banner2.png differ
diff --git a/static/img/common/openEuler Docs-dark.svg b/static/img/common/openEuler Docs-dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..352c1506c9a1d0becacbae8ba9c06b75bd4357f4
--- /dev/null
+++ b/static/img/common/openEuler Docs-dark.svg
@@ -0,0 +1,37 @@
+
+
+ openEuler Docs-dark
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/common/qrcode.png b/static/img/common/qrcode.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea524b978506fb77676aee485d468f2af3abd51a
Binary files /dev/null and b/static/img/common/qrcode.png differ
diff --git a/static/img/common/rectangle.png b/static/img/common/rectangle.png
new file mode 100644
index 0000000000000000000000000000000000000000..1616d998b50cc9300df4bfc9bb456563219f8a4a
Binary files /dev/null and b/static/img/common/rectangle.png differ
diff --git a/static/img/common/search.svg b/static/img/common/search.svg
new file mode 100644
index 0000000000000000000000000000000000000000..108cf6cd0a9dcfaa9e9df04c0e5c355989d47b73
--- /dev/null
+++ b/static/img/common/search.svg
@@ -0,0 +1,13 @@
+
+
+ 切片
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/common/sun.svg b/static/img/common/sun.svg
new file mode 100644
index 0000000000000000000000000000000000000000..9974cf9ea63792ad3ed2904a2d71fe6f41083578
--- /dev/null
+++ b/static/img/common/sun.svg
@@ -0,0 +1,5 @@
+
+
+sun
+
+
diff --git a/static/img/common/tick.svg b/static/img/common/tick.svg
new file mode 100644
index 0000000000000000000000000000000000000000..102ff540c1250d6f505530b2d7c106e5c9f64e74
--- /dev/null
+++ b/static/img/common/tick.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/common/white_search.svg b/static/img/common/white_search.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7262831cf3653e7d11150967d14e3970a1824cfa
--- /dev/null
+++ b/static/img/common/white_search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git "a/static/img/common/\347\274\226\347\273\204 14.svg" "b/static/img/common/\347\274\226\347\273\204 14.svg"
new file mode 100644
index 0000000000000000000000000000000000000000..5af5c160fd71d11233cde52ae8974141b47db0dd
--- /dev/null
+++ "b/static/img/common/\347\274\226\347\273\204 14.svg"
@@ -0,0 +1,16 @@
+
+
+ 编组 14
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/detail/1-star.png b/static/img/detail/1-star.png
new file mode 100644
index 0000000000000000000000000000000000000000..e884f794dfb2353384089d998deb69c79dcee300
Binary files /dev/null and b/static/img/detail/1-star.png differ
diff --git a/static/img/detail/2-star.png b/static/img/detail/2-star.png
new file mode 100644
index 0000000000000000000000000000000000000000..bd6fe43e8c93ffadc4c8ee554129cd523f4eba51
Binary files /dev/null and b/static/img/detail/2-star.png differ
diff --git a/static/img/detail/3-star.png b/static/img/detail/3-star.png
new file mode 100644
index 0000000000000000000000000000000000000000..e358627c195e7ed1d88b8b4012154fac7ac37730
Binary files /dev/null and b/static/img/detail/3-star.png differ
diff --git a/static/img/detail/4-star.png b/static/img/detail/4-star.png
new file mode 100644
index 0000000000000000000000000000000000000000..5a123104e12393b9ed75a9c4c6a6e9f05ef4ce2a
Binary files /dev/null and b/static/img/detail/4-star.png differ
diff --git a/static/img/detail/5-star.png b/static/img/detail/5-star.png
new file mode 100644
index 0000000000000000000000000000000000000000..e610da92bec88b7e40d55ef34adf3548b7afdf98
Binary files /dev/null and b/static/img/detail/5-star.png differ
diff --git a/static/img/detail/active-star.svg b/static/img/detail/active-star.svg
new file mode 100644
index 0000000000000000000000000000000000000000..48cefff865eb32efb6eff76724fd14184c8e799a
--- /dev/null
+++ b/static/img/detail/active-star.svg
@@ -0,0 +1,26 @@
+
+
+ yellow star
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/detail/blue-down.svg b/static/img/detail/blue-down.svg
new file mode 100644
index 0000000000000000000000000000000000000000..596658e9bf44f8f2620b5d4afb377d053bf21dfa
--- /dev/null
+++ b/static/img/detail/blue-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/detail/blue-left.svg b/static/img/detail/blue-left.svg
new file mode 100644
index 0000000000000000000000000000000000000000..676a4e05ef7d9f72267d2fb85e6843a4cb9c4926
--- /dev/null
+++ b/static/img/detail/blue-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/detail/blue-right.svg b/static/img/detail/blue-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c0026e5145c4b4212c8388218404f0e5dcbe4583
--- /dev/null
+++ b/static/img/detail/blue-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/detail/bug-dark.svg b/static/img/detail/bug-dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e83c80f86420cbd7eb3525f051a0506d31177ebb
--- /dev/null
+++ b/static/img/detail/bug-dark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/detail/bug.svg b/static/img/detail/bug.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c79e15da1c4c20bae6667e713c1bf7477d1a1d80
--- /dev/null
+++ b/static/img/detail/bug.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/detail/close.png b/static/img/detail/close.png
new file mode 100644
index 0000000000000000000000000000000000000000..17ef570eba49512a8ba36b45201d19900fa4a3c6
Binary files /dev/null and b/static/img/detail/close.png differ
diff --git a/static/img/detail/feedback-dark.svg b/static/img/detail/feedback-dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..202cefa8891e0818d741240120cf215ad582e7c0
--- /dev/null
+++ b/static/img/detail/feedback-dark.svg
@@ -0,0 +1,13 @@
+
+
+ 切片
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/detail/feedback-light.svg b/static/img/detail/feedback-light.svg
new file mode 100644
index 0000000000000000000000000000000000000000..187ae2a9be2f6a866d59e071e083f3afad917770
--- /dev/null
+++ b/static/img/detail/feedback-light.svg
@@ -0,0 +1,13 @@
+
+
+ 切片
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/detail/feedback.png b/static/img/detail/feedback.png
new file mode 100644
index 0000000000000000000000000000000000000000..5e25bf075e270c7f3131d6b42d201115b345ef40
Binary files /dev/null and b/static/img/detail/feedback.png differ
diff --git a/static/img/detail/icon-next.svg b/static/img/detail/icon-next.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b191f0edd4bab48510d39a324042c9c79965dd32
--- /dev/null
+++ b/static/img/detail/icon-next.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/detail/icon-prev.svg b/static/img/detail/icon-prev.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e32628038ff9d9b7bce5c8a389221bb9e1982342
--- /dev/null
+++ b/static/img/detail/icon-prev.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/detail/icon-right.svg b/static/img/detail/icon-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..03411b6e9143b4b79e84674d55be159cdcaeff2b
--- /dev/null
+++ b/static/img/detail/icon-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/detail/icon-star.svg b/static/img/detail/icon-star.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f3c1f69d4eefa0fa51f63c67cb8131c8157628f7
--- /dev/null
+++ b/static/img/detail/icon-star.svg
@@ -0,0 +1,17 @@
+
+
+ star
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/detail/inside1.png b/static/img/detail/inside1.png
new file mode 100644
index 0000000000000000000000000000000000000000..ebb25ce3648b878b7f53d6a2b2edba6fd2ba3b74
Binary files /dev/null and b/static/img/detail/inside1.png differ
diff --git a/static/img/detail/inside2.png b/static/img/detail/inside2.png
new file mode 100644
index 0000000000000000000000000000000000000000..8f711e1323f4cf78e06aa3d8efae7eeaaf5c9c56
Binary files /dev/null and b/static/img/detail/inside2.png differ
diff --git a/static/img/detail/inside3.png b/static/img/detail/inside3.png
new file mode 100644
index 0000000000000000000000000000000000000000..e43c762faded4bab570e2cae9220d64f56ec0e91
Binary files /dev/null and b/static/img/detail/inside3.png differ
diff --git a/static/img/detail/loading.gif b/static/img/detail/loading.gif
new file mode 100644
index 0000000000000000000000000000000000000000..7cbb36c7a64f6bfb1c15cd3dc23e3b39f25d639a
Binary files /dev/null and b/static/img/detail/loading.gif differ
diff --git a/static/img/detail/pr-tip.gif b/static/img/detail/pr-tip.gif
new file mode 100644
index 0000000000000000000000000000000000000000..d1513dc9585eddaf71de19f4a182e31c54ddec6e
Binary files /dev/null and b/static/img/detail/pr-tip.gif differ
diff --git a/static/img/detail/slash.png b/static/img/detail/slash.png
new file mode 100644
index 0000000000000000000000000000000000000000..dbf51d2615f4295fc8cf21aca99e93c24c1f6926
Binary files /dev/null and b/static/img/detail/slash.png differ
diff --git a/static/img/detail/source-code-dark.svg b/static/img/detail/source-code-dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..562e9cef22e4ed643f79b6f4edd2fddefac3db3f
--- /dev/null
+++ b/static/img/detail/source-code-dark.svg
@@ -0,0 +1,13 @@
+
+
+ 切片
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/detail/source-code-light.svg b/static/img/detail/source-code-light.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f4693d19221595136e3665e0c3835fb09cd0ba42
--- /dev/null
+++ b/static/img/detail/source-code-light.svg
@@ -0,0 +1,13 @@
+
+
+ 切片
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/detail/source-code.png b/static/img/detail/source-code.png
new file mode 100644
index 0000000000000000000000000000000000000000..3bded45d126466d1a3e1847a129f2e65a2390a5f
Binary files /dev/null and b/static/img/detail/source-code.png differ
diff --git a/static/img/detail/v-icon-down.svg b/static/img/detail/v-icon-down.svg
new file mode 100644
index 0000000000000000000000000000000000000000..3be45974a1e64f09fe4ac0ee6b17a4cd6e258747
--- /dev/null
+++ b/static/img/detail/v-icon-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/doc-map/bg-1.png b/static/img/doc-map/bg-1.png
new file mode 100644
index 0000000000000000000000000000000000000000..e110b3349ddf7136a4ca6a2257dff01f64c6d7d0
Binary files /dev/null and b/static/img/doc-map/bg-1.png differ
diff --git a/static/img/float/bug-bg-hover.png b/static/img/float/bug-bg-hover.png
new file mode 100644
index 0000000000000000000000000000000000000000..e8d115425299e0996b5dbc637028d38e4c6bc079
Binary files /dev/null and b/static/img/float/bug-bg-hover.png differ
diff --git a/static/img/float/bug-bg.png b/static/img/float/bug-bg.png
new file mode 100644
index 0000000000000000000000000000000000000000..2ba900e87f7674406ad1f6c0226201adce746d9e
Binary files /dev/null and b/static/img/float/bug-bg.png differ
diff --git a/static/img/float/icon-chat.svg b/static/img/float/icon-chat.svg
new file mode 100644
index 0000000000000000000000000000000000000000..256cae7d4b3ff0ca0d79d038092610bef1cd1cf4
--- /dev/null
+++ b/static/img/float/icon-chat.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/static/img/float/icon-headset.svg b/static/img/float/icon-headset.svg
new file mode 100644
index 0000000000000000000000000000000000000000..3b7014cf7003c1b0bc1f74d855ee50809f473e29
--- /dev/null
+++ b/static/img/float/icon-headset.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/float/icon-quickissue_dark.svg b/static/img/float/icon-quickissue_dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..aa96a900d696d21e2f3bd0ce851023849083c7c9
--- /dev/null
+++ b/static/img/float/icon-quickissue_dark.svg
@@ -0,0 +1,23 @@
+
+
+ quickissue
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/float/icon-quickissue_light.svg b/static/img/float/icon-quickissue_light.svg
new file mode 100644
index 0000000000000000000000000000000000000000..fcbc82c6d729c925711ffb9c32d76de38b096d97
--- /dev/null
+++ b/static/img/float/icon-quickissue_light.svg
@@ -0,0 +1,18 @@
+
+
+ quickissue
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/float/icon-robot_dark.svg b/static/img/float/icon-robot_dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..872ccd7915d7409c502eb36d4056c506e20af1ce
--- /dev/null
+++ b/static/img/float/icon-robot_dark.svg
@@ -0,0 +1,30 @@
+
+
+ icon/robot
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/float/icon-robot_light.svg b/static/img/float/icon-robot_light.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5dfeac4d444f98e19d263aa33bb875a09be0dbec
--- /dev/null
+++ b/static/img/float/icon-robot_light.svg
@@ -0,0 +1,23 @@
+
+
+ icon/robot
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/float/icon-smile.svg b/static/img/float/icon-smile.svg
new file mode 100644
index 0000000000000000000000000000000000000000..40599af1e17d7ff9ec5881f909cf761e30652f94
--- /dev/null
+++ b/static/img/float/icon-smile.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/float/icon-top.svg b/static/img/float/icon-top.svg
new file mode 100644
index 0000000000000000000000000000000000000000..78c70910229ad999e9acca74e89cb8f14d8b20c8
--- /dev/null
+++ b/static/img/float/icon-top.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/footer/51cto.png b/static/img/footer/51cto.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad23c8864144205ec040b464cd9f27ce63d2a2d8
Binary files /dev/null and b/static/img/footer/51cto.png differ
diff --git a/static/img/footer/atom-logo.png b/static/img/footer/atom-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..17451ffc7b013e3c7c3ceae5f362b695e1c96b8e
Binary files /dev/null and b/static/img/footer/atom-logo.png differ
diff --git a/static/img/footer/atom-logo.svg b/static/img/footer/atom-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0cce03d0379659ecc5f3ec9113f747633ec0f287
--- /dev/null
+++ b/static/img/footer/atom-logo.svg
@@ -0,0 +1,16 @@
+
+
+ 开放原子开源基金会
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/footer/bilibili.png b/static/img/footer/bilibili.png
new file mode 100644
index 0000000000000000000000000000000000000000..c7c07526ce6be5b436aa14774af78ff29c9a407b
Binary files /dev/null and b/static/img/footer/bilibili.png differ
diff --git a/static/img/footer/code-xzs.png b/static/img/footer/code-xzs.png
new file mode 100644
index 0000000000000000000000000000000000000000..e78a9836a8e294921ad2da821bdb9daa384e87d9
Binary files /dev/null and b/static/img/footer/code-xzs.png differ
diff --git a/static/img/footer/code-zgz.png b/static/img/footer/code-zgz.png
new file mode 100644
index 0000000000000000000000000000000000000000..ba38aaee5973fac8246cfa37ff0f1d5bc92e193d
Binary files /dev/null and b/static/img/footer/code-zgz.png differ
diff --git a/static/img/footer/csdn.png b/static/img/footer/csdn.png
new file mode 100644
index 0000000000000000000000000000000000000000..f4fd71d08f709f03832ceb8889154d75b2556ff0
Binary files /dev/null and b/static/img/footer/csdn.png differ
diff --git a/static/img/footer/footer-logo2-mo.png b/static/img/footer/footer-logo2-mo.png
new file mode 100644
index 0000000000000000000000000000000000000000..80f97536b255acb11f11412c2ee3b3a836e21a43
Binary files /dev/null and b/static/img/footer/footer-logo2-mo.png differ
diff --git a/static/img/footer/footer-logo2.png b/static/img/footer/footer-logo2.png
new file mode 100644
index 0000000000000000000000000000000000000000..a7a1f28ff53132ca991eb82e7ee5a0f9af2498a9
Binary files /dev/null and b/static/img/footer/footer-logo2.png differ
diff --git a/static/img/footer/img-gzh.png b/static/img/footer/img-gzh.png
new file mode 100644
index 0000000000000000000000000000000000000000..afc3f345e603e73aa297c656ee2e15b085945b18
Binary files /dev/null and b/static/img/footer/img-gzh.png differ
diff --git a/static/img/footer/img-xzs.png b/static/img/footer/img-xzs.png
new file mode 100644
index 0000000000000000000000000000000000000000..de17acbd32440e608d227645a2d9b4425cb0bda8
Binary files /dev/null and b/static/img/footer/img-xzs.png differ
diff --git a/static/img/footer/infoq.png b/static/img/footer/infoq.png
new file mode 100644
index 0000000000000000000000000000000000000000..d1d02c1e374b67d79b2594713da02e353d529696
Binary files /dev/null and b/static/img/footer/infoq.png differ
diff --git a/static/img/footer/juejin.png b/static/img/footer/juejin.png
new file mode 100644
index 0000000000000000000000000000000000000000..245b8384eb0c7994cc42984ed749dd5046344017
Binary files /dev/null and b/static/img/footer/juejin.png differ
diff --git a/static/img/footer/linkededin.png b/static/img/footer/linkededin.png
new file mode 100644
index 0000000000000000000000000000000000000000..27bc45cd6fa985d810be1fbef72adec6bdb94c52
Binary files /dev/null and b/static/img/footer/linkededin.png differ
diff --git a/static/img/footer/oschina.png b/static/img/footer/oschina.png
new file mode 100644
index 0000000000000000000000000000000000000000..1551d3b87509c33f0a7b1259581bfb9e9ccdd8ad
Binary files /dev/null and b/static/img/footer/oschina.png differ
diff --git a/static/img/footer/police.png b/static/img/footer/police.png
new file mode 100644
index 0000000000000000000000000000000000000000..116368e79ceab8617d988f4aa4b5a722dbff185b
Binary files /dev/null and b/static/img/footer/police.png differ
diff --git a/static/img/footer/reddit.png b/static/img/footer/reddit.png
new file mode 100644
index 0000000000000000000000000000000000000000..2c271e15f8277b89f3b25e185355059cedf199a8
Binary files /dev/null and b/static/img/footer/reddit.png differ
diff --git a/static/img/footer/twitter.png b/static/img/footer/twitter.png
new file mode 100644
index 0000000000000000000000000000000000000000..85250f67567808cba96ca3d40afae320feb21490
Binary files /dev/null and b/static/img/footer/twitter.png differ
diff --git a/static/img/footer/youtube.png b/static/img/footer/youtube.png
new file mode 100644
index 0000000000000000000000000000000000000000..2d0cc8a902ef1271c0f1af45444b400a0d2d2e92
Binary files /dev/null and b/static/img/footer/youtube.png differ
diff --git a/static/img/list/develop.png b/static/img/list/develop.png
new file mode 100644
index 0000000000000000000000000000000000000000..1bcadb654f115492cbca20dbf64722552e014f4e
Binary files /dev/null and b/static/img/list/develop.png differ
diff --git a/static/img/list/earth.png b/static/img/list/earth.png
new file mode 100644
index 0000000000000000000000000000000000000000..cab17ab95dc4fad3bb52da02529a8b69a247e7ad
Binary files /dev/null and b/static/img/list/earth.png differ
diff --git a/static/img/list/earth.svg b/static/img/list/earth.svg
new file mode 100644
index 0000000000000000000000000000000000000000..81445f6de97272b482f14ea0acd2763b438c74ce
--- /dev/null
+++ b/static/img/list/earth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/list/install.png b/static/img/list/install.png
new file mode 100644
index 0000000000000000000000000000000000000000..7f93028de3e23a71fb73a03f1cb7384a5f278aa7
Binary files /dev/null and b/static/img/list/install.png differ
diff --git a/static/img/list/konw.png b/static/img/list/konw.png
new file mode 100644
index 0000000000000000000000000000000000000000..b91cec41a5893c1f18a56501fa17dfb617f44662
Binary files /dev/null and b/static/img/list/konw.png differ
diff --git a/static/img/list/kunpeng.png b/static/img/list/kunpeng.png
new file mode 100644
index 0000000000000000000000000000000000000000..d7672d12bec4db5b2c6143109b843eb74bfdbbb3
Binary files /dev/null and b/static/img/list/kunpeng.png differ
diff --git a/static/img/list/kunpeng2.png b/static/img/list/kunpeng2.png
new file mode 100644
index 0000000000000000000000000000000000000000..69bb1915c8823acc01e4a8e6430c97325f845ad6
Binary files /dev/null and b/static/img/list/kunpeng2.png differ
diff --git a/static/img/list/manage.png b/static/img/list/manage.png
new file mode 100644
index 0000000000000000000000000000000000000000..9828a1c8459dc23b3a98c31ae674ca15be62698e
Binary files /dev/null and b/static/img/list/manage.png differ
diff --git a/static/img/list/migrate.png b/static/img/list/migrate.png
new file mode 100644
index 0000000000000000000000000000000000000000..b25c5d49e97a2a7270cc6b6e15ea87652229f8ce
Binary files /dev/null and b/static/img/list/migrate.png differ
diff --git a/static/img/list/use.png b/static/img/list/use.png
new file mode 100644
index 0000000000000000000000000000000000000000..28e13f38d0014e29907fa435635bb4284d68b19f
Binary files /dev/null and b/static/img/list/use.png differ
diff --git a/static/img/menu/icon-close-h5.svg b/static/img/menu/icon-close-h5.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c1c8cc4a48682f033daad30fe861025564976472
--- /dev/null
+++ b/static/img/menu/icon-close-h5.svg
@@ -0,0 +1,26 @@
+
+
+ icon_delete
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/menu/icon-down-h5.svg b/static/img/menu/icon-down-h5.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5acffc442e44a1bcdfa838a52b843c3d2b28b5dc
--- /dev/null
+++ b/static/img/menu/icon-down-h5.svg
@@ -0,0 +1,17 @@
+
+
+ icon_down
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/menu/icon-right-h5.svg b/static/img/menu/icon-right-h5.svg
new file mode 100644
index 0000000000000000000000000000000000000000..51a0e2f108b249e2c21c9e61883dc362d7a6ad23
--- /dev/null
+++ b/static/img/menu/icon-right-h5.svg
@@ -0,0 +1,38 @@
+
+
+ icon_right
+
+
+
+
+ 在计算机技术中,虚拟化是一种资源管理技术,它
+ 将计算机的各种实体资源(处理器、内存、磁盘、
+ 网络适配器等)予以抽象,转换后呈现并可供分
+ 割、组合为一个或多个计算机配置环境。这种资源
+ 管理技术打破了实体结构不可分割的障碍,使这些
+ 资源在虚拟化后不受现有资源的架设方式、地域或
+ 物理配置限制,从而让用户可以更好地应用计算机
+ 硬件资源,提高资源利用率。
+ 虚拟化使得一台物理服务器上可以运行多台虚拟
+ 机,虚拟机共享物理机的处理器、内存、I/O资源
+ 等,但逻辑上虚拟机之间是互相隔离的。在虚拟化
+ 技术中,通常将这个物理服务器称为宿主机,宿主
+ 机上运行的虚拟机也叫客户机,虚拟机内部运行的
+ 操作系统称为客户机操作系统。在宿主机和虚拟机
+ 之间存在一层叫虚拟化层的软件,用于实现虚拟硬
+ 件的模拟,通常这个虚拟化层被称为虚拟机监视
+ 器。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/menu/menu-icon-down-h5.svg b/static/img/menu/menu-icon-down-h5.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6ff8c7e274f6d9c55a3db86124253e1702843435
--- /dev/null
+++ b/static/img/menu/menu-icon-down-h5.svg
@@ -0,0 +1,41 @@
+
+
+ icon_down
+
+
+
+
+ 在计算机技术中,虚拟化是一种资源管理技术,它
+ 将计算机的各种实体资源(处理器、内存、磁盘、
+ 网络适配器等)予以抽象,转换后呈现并可供分
+ 割、组合为一个或多个计算机配置环境。这种资源
+ 管理技术打破了实体结构不可分割的障碍,使这些
+ 资源在虚拟化后不受现有资源的架设方式、地域或
+ 物理配置限制,从而让用户可以更好地应用计算机
+ 硬件资源,提高资源利用率。
+ 虚拟化使得一台物理服务器上可以运行多台虚拟
+ 机,虚拟机共享物理机的处理器、内存、I/O资源
+ 等,但逻辑上虚拟机之间是互相隔离的。在虚拟化
+ 技术中,通常将这个物理服务器称为宿主机,宿主
+ 机上运行的虚拟机也叫客户机,虚拟机内部运行的
+ 操作系统称为客户机操作系统。在宿主机和虚拟机
+ 之间存在一层叫虚拟化层的软件,用于实现虚拟硬
+ 件的模拟,通常这个虚拟化层被称为虚拟机监视
+ 器。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/img/search/icon-close.svg b/static/img/search/icon-close.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a6283f200902e1a0f27652f458996ff01de6157a
--- /dev/null
+++ b/static/img/search/icon-close.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/search/no-data.png b/static/img/search/no-data.png
new file mode 100644
index 0000000000000000000000000000000000000000..617c47ddff63f2af076d5a12964a8c4434e1dd6f
Binary files /dev/null and b/static/img/search/no-data.png differ
diff --git a/static/img/search/search-dark.svg b/static/img/search/search-dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..dda6ee8d7d6202ef24774757a9f9399876dcb858
--- /dev/null
+++ b/static/img/search/search-dark.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/static/img/search/search.svg b/static/img/search/search.svg
new file mode 100644
index 0000000000000000000000000000000000000000..acf0139ccd51f91f50ca27acd473296c224f0591
--- /dev/null
+++ b/static/img/search/search.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/static/js/analytics.js b/static/js/analytics.js
new file mode 100644
index 0000000000000000000000000000000000000000..21f6bf406105bb7679a9b3b223ab8babff9e45a7
--- /dev/null
+++ b/static/js/analytics.js
@@ -0,0 +1,6 @@
+window.dataLayer = window.dataLayer || [];
+function gtag() {
+ dataLayer.push(arguments);
+}
+gtag("js", new Date());
+gtag("config", "UA-181761489-1");
diff --git a/static/js/common.js b/static/js/common.js
new file mode 100644
index 0000000000000000000000000000000000000000..81213ef45092713ca838cd9f07eccf79fb834878
--- /dev/null
+++ b/static/js/common.js
@@ -0,0 +1,242 @@
+/**
+ * @file 文档详情及首页通用相关脚本
+ */
+$(function ($) {
+ $(document).ready(function () {
+ const lang = location.href.split("/")[3];
+ $(
+ "#h5-menu .h5-next i,#h5-menu .h5-prev i"
+ ).html(`
+arrow-right
+
+
+`);
+ $(
+ ".pc-prev .icon-prev,.pc-next .icon-next"
+ ).html(`
+arrow-right
+
+
+`);
+ // 根据目前语言激活语言切换相应颜色
+ $(function ($) {
+ if (lang === "zh") {
+ $(`a[href='/zh/']`).addClass("active");
+ } else if (lang === "en") {
+ $(`a[href='/en/']`).addClass("active");
+ } else {
+ $(`a[href='/ru/']`).addClass("active");
+ }
+ });
+ // 生成当前页的二级目录导航
+ $(function ($) {
+ let titleList;
+ if ($("#markdown h2").length) {
+ titleList = $("#markdown h2");
+ } else if ($(".doc-map-main h2").length) {
+ titleList = $(".doc-map-main h2");
+ } else {
+ return;
+ }
+ let tocList = "";
+ let tempList = [];
+ let tempList2 = [];
+ Object.keys(titleList).forEach((key) => {
+ if (titleList[key].id) {
+ if (!tempList.includes(titleList[key].id)) {
+ tempList.push(titleList[key].id);
+ tempList2.push(titleList[key]);
+ }
+ }
+ });
+ Object.keys(tempList2).forEach((key, index) => {
+ if (parseInt(key) === key * 1) {
+ tocList =
+ tocList +
+ `${tempList2[key].textContent} `;
+ }
+ });
+ $("#toc-list").append(tocList);
+ let targetUrlArr = [];
+ let targetUrl = [];
+ $(".book-toc #toc-list a[href]").each(function () {
+ targetUrlArr.push($($(this).attr("href")));
+ });
+ targetUrl = targetUrlArr.filter(function (item) {
+ return $(window).scrollTop() + 160 > item.offset().top;
+ });
+ if (targetUrl.length) {
+ $(".book-toc #toc-list a[href]").removeClass("active");
+ $(
+ "a[href='#" + targetUrl[targetUrl.length - 1].attr("id") + "']"
+ ).addClass("active");
+ } else if ($(".book-toc #toc-list a[href]").length) {
+ $(".book-toc #toc-list a[href]").removeClass("active");
+ $(".book-toc #toc-list a[href]").eq(0).addClass("active");
+ }
+ });
+ // 根据滚动激活导航状态
+ function handleScrollEvent(element) {
+ $(element).scroll(function () {
+ const targetUrlArr = [];
+ $(".book-toc #toc-list li a[href]").each(function () {
+ targetUrlArr.push($($(this).attr("href")));
+ });
+ targetUrl = targetUrlArr.filter(function (item) {
+ if (element === "#right") {
+ if ($(element).scrollTop() < 61) {
+ return $(element).scrollTop() > item.offset().top;
+ } else {
+ return $(element).scrollTop() - 200 > item.offset().top;
+ }
+ } else {
+ return $(element).scrollTop() + 60 > item.offset().top;
+ }
+ });
+ if (targetUrl.length) {
+ $(".book-toc #toc-list a[href]").removeClass("active");
+ $(".book-toc #toc-list a[href]")
+ .eq(targetUrl.length - 1)
+ .addClass("active");
+ }
+ });
+ }
+ handleScrollEvent(window);
+ handleScrollEvent("#right");
+ // 获取 cookie
+ function getCustomCookie(key) {
+ const name = `${encodeURIComponent(key)}=`;
+ const decodedCookies = decodeURIComponent(document.cookie);
+ const cookies = decodedCookies.split('; ');
+ for (let cookie of cookies) {
+ if (cookie.startsWith(name)) {
+ return cookie.substring(name.length);
+ }
+ }
+
+ return null;
+ }
+ // 设置 cookie
+ function setCustomCookie(key, value, day = 1, domain = location.hostname) {
+ const expires = new Date();
+ expires.setTime(expires.getTime() + day * 24 * 60 * 60 * 1000);
+ const cookie = `${encodeURIComponent(key)}=${encodeURIComponent(
+ value
+ )}; expires=${expires.toUTCString()}; path=/; domain=${domain}`;
+ document.cookie = cookie;
+ }
+ // 换肤
+ (function () {
+ const domain = '.openeuler.org';
+ const APPEARANCE_KEY = 'openEuler-theme-appearance';
+ const themeStyle = getCustomCookie(APPEARANCE_KEY);
+ const _body = $('html');
+ if (!themeStyle) {
+ $('.theme-change i').removeClass('light dark').addClass('light');
+ $('.nav-menu a .h5-logo').removeClass('dark');
+ _body.removeClass('light dark').addClass('light');
+ } else {
+ $('.theme-change i').removeClass('light dark').addClass(themeStyle);
+ $('.nav-menu a .h5-logo').addClass(themeStyle);
+ _body.removeClass('light dark').addClass(themeStyle);
+ }
+ $('.theme-change i').click(function () {
+ if ($(this).hasClass('light')) {
+ $('.nav-menu a .h5-logo').addClass('dark');
+ $(this).addClass('dark').removeClass('light');
+ setCustomCookie(APPEARANCE_KEY, 'dark', 180, domain);
+ _body.addClass('dark').removeClass('light');
+ } else {
+ $('.nav-menu a .h5-logo').removeClass('dark');
+ $(this).addClass('light').removeClass('dark');
+ setCustomCookie(APPEARANCE_KEY, 'light', 180, domain);
+ _body.addClass('light').removeClass('dark');
+ }
+ });
+ })();
+ // 点击logo回到文档首页
+ $("#h5-menu-top .h5-logo .logo-img,.nav-box .h5-logo,.pc-logo").click(
+ () => {
+ window.open(`/${lang}/`, "_self");
+ }
+ );
+ // 点击版本出现版本选择
+ $(".app-mobile .h5_nav .icon-servision").click(function () {
+ $(this).toggleClass("open");
+ $(".app-mobile .h5_nav .option").toggleClass("option-show");
+ });
+ // 控制移动端菜单栏的显示
+ $(".app-mobile .h5_nav_left").click(function () {
+ $(".app-mobile .h5_nav").addClass("h5_nav_show");
+ $(".mask-mobile").css("display", "block");
+ $(".mask-mobile").css("height", "100vh");
+ $(".mask-mobile").css("position", "fixed");
+ });
+ $(".app-mobile .icon-close").click(function () {
+ $(".app-mobile .h5_nav").removeClass("h5_nav_show");
+ $(".mask-mobile").css("display", "none");
+ });
+ // 根据语言控制版本选择的显示
+ $("#h5-menu-top .option").addClass(`option-${lang}`);
+ // 尾部点击跳转
+ // 首页卡片点击事件
+ $("#document_content>div,.h5_content .hot_documentation>div").click(
+ function () {
+ window.open($(this).attr("href"), "_blank");
+ }
+ );
+ // 给较长的导航栏文字增加title start
+ function addNavTitle() {
+ $(".jstree-anchor").mouseenter(function () {
+ if ($(this)[0].scrollWidth > $(this)[0].offsetWidth) {
+ $(this).attr("title", $(this).text());
+ }
+ });
+ }
+ addNavTitle();
+ // 观察导航栏节点是否发生变化
+ if ($(".jstree-anchor").length) {
+ const mutation = new MutationObserver(addNavTitle);
+ const config = { childList: true, subtree: true };
+ const targetNode = document.getElementById("docstreeview");
+ mutation.observe(targetNode, config);
+ }
+ // 给较长的导航栏文字增加title end
+ // 控制左侧导航栏滚动
+ $(document).ready(function () {
+ const firstNavElement = $("#docstreeview>ul>li:nth-of-type(1)");
+ const checkedElement = $(".jstree-clicked");
+ if (firstNavElement.length && checkedElement.length) {
+ const firstNavTop = firstNavElement.offset().top;
+ const checkedTop = checkedElement.offset().top;
+ $("#docstreeview")
+ .stop()
+ .animate(
+ {
+ scrollTop: checkedTop - firstNavTop,
+ },
+ 100
+ );
+ }
+ });
+ // 根据目前语言激活语言切换相应颜色
+ $(function ($) {
+ $(".long-time .long-title").click(function () {
+ $(".long-time .long-title .icon-down").toggleClass("show");
+ $(".long-time .version-list").toggleClass("show");
+ });
+ $(".innovate .innovate-title").click(function () {
+ $(".innovate .innovate-title .icon-down").toggleClass("show");
+ $(".innovate .version-list").toggleClass("show");
+ });
+ $(".archive .archive-title").click(function () {
+ $(".archive .archive-title .icon-down").toggleClass("show");
+ $(".archive .version-list").toggleClass("show");
+ });
+ });
+ // 点击面包屑的回到文档首页
+ $(".nav-box .docs-a .home-bread,.h5-docs-a .home-bread").click(() => {
+ window.open(`/${lang}/`, "_self");
+ });
+ });
+});
diff --git a/static/js/cookie-notice.js b/static/js/cookie-notice.js
new file mode 100644
index 0000000000000000000000000000000000000000..c48f547e69510f6f94cac38f6fa31cc7d0e44700
--- /dev/null
+++ b/static/js/cookie-notice.js
@@ -0,0 +1,430 @@
+$(function () {
+ // cookie管理
+ const body = $("body");
+ const pathname = window.location.pathname;
+ const isEn = pathname.includes("/en/");
+ const COOKIE_DOMAIN = ".openeuler.org";
+ // 弹窗
+ const ODialog = (function () {
+ let elemDialog;
+
+ // 创建按钮
+ const createButtons = (btns) => {
+ let btnTemp = "";
+ btns.forEach((item) => {
+ btnTemp += `${item.label} `;
+ });
+ return btnTemp;
+ };
+ // 按钮事件
+ const bindBtnsEvent = (btns) => {
+ btns.forEach((item) => {
+ const btn = elemDialog.querySelector(`.${item.id}`);
+ btn.addEventListener("click", (e) => {
+ hide();
+ item.onClick();
+ });
+ });
+ };
+
+ // 初始化事件
+ const initEvents = (shadeClose, closable) => {
+ // 点击遮罩
+ elemDialog.addEventListener("click", (e) => {
+ if (shadeClose && e.target.className.includes("o-layer-mask")) {
+ hide();
+ }
+ });
+ // 点击关闭按钮
+ if (closable) {
+ const closed = elemDialog.querySelector(".o-dialog-closed");
+ closed.addEventListener("click", hide);
+ }
+ };
+
+ // 显示对话框
+ const createDialog = (options) => {
+ const {
+ title,
+ size = "medium",
+ closable = true,
+ content,
+ dlgActions,
+ shadeClose = true,
+ } = options;
+
+ const isBtns = dlgActions && dlgActions.length > 0;
+
+ const dom = `
+
+
+
+
+
${content}
+ ${
+ isBtns
+ ? `
${createButtons(
+ dlgActions
+ )}
`
+ : ""
+ }
+
+
`;
+
+ const newDialog = document.createElement("div");
+ newDialog.classList.add("o-layer-dialog");
+ newDialog.innerHTML = dom;
+ document.body.appendChild(newDialog);
+
+ elemDialog = newDialog;
+
+ if (isBtns) {
+ bindBtnsEvent(dlgActions);
+ }
+ initEvents(shadeClose, closable);
+ };
+
+ // 隐藏
+ const hide = () => {
+ if (elemDialog) {
+ elemDialog.remove();
+ elemDialog = null;
+ }
+ };
+
+ return {
+ show: createDialog,
+ hide,
+ };
+ })();
+
+ const cookieNotice = {
+ COOKEY_KEY: "agreed-cookiepolicy",
+ COOKIE_AGREED_STATUS: {
+ NOT_SIGNED: "0", // 未签署
+ ALL_AGREED: "1", // 同意所有cookie
+ NECCESSARY_AGREED: "2", // 仅同意必要cookie
+ },
+ locale: {
+ title: !isEn
+ ? "openEuler社区重视您的隐私"
+ : "openEuler Community Respects Your Privacy",
+ desc: !isEn
+ ? "我们在本网站上使用Cookie,包括第三方Cookie,以便网站正常运行和提升浏览体验。单击“全部接受”即表示您同意这些目的;单击“全部拒绝”即表示您拒绝非必要的Cookie;单击“管理Cookie”以选择接受或拒绝某些Cookie。需要了解更多信息或随时更改您的 Cookie 首选项,请参阅我们的 "
+ : 'This site uses cookies from us and our partners to improve your browsing experience and make the site work properly. By clicking "Accept All", you consent to the use of cookies. By clicking "Reject All", you disable the use of unnecessary cookies. You can manage your cookie settings by clicking "Manage Cookies". For more information or to change your cookie settings, please refer to our',
+ cookie: !isEn ? "《关于cookies》。" : "About Cookies.",
+ cookieHref: `https://www.openeuler.org/${isEn ? 'en' : 'zh'}/other/cookies/`,
+ action: [
+ {
+ btn: "全部接受",
+ btnEn: "Accept All",
+ type: "all",
+ },
+ {
+ btn: "全部拒绝",
+ btnEn: "Reject All",
+ type: "refuse",
+ },
+ {
+ btn: " 管理Cookie ",
+ btnEn: " Manage Cookies ",
+ type: "manage",
+ },
+ ],
+ manageTitle: !isEn ? "管理Cookie" : "Manage Cookies",
+ necessaryTitle: !isEn ? "必要Cookie" : "Strictly Necessary Cookies",
+ necessaryDesc: !isEn
+ ? "这些Cookie是网站正常工作所必需的,不能在我们的系统中关闭。它们通常仅是为了响应您的服务请求而设置的,例如登录或填写表单。您可以将浏览器设置为阻止Cookie来拒绝这些Cookie,但网站的某些部分将无法正常工作。这些Cookie不存储任何个人身份信息。"
+ : "These cookies are necessary for the site to work properly and cannot be switched off. They are usually only set in response to actions made by you which amount to a request for services, such as logging in or filling in forms. You can set the browser to block these cookies, but that can make parts of the site not work. These cookies do not store any personally identifiable information.",
+ statisticsTitle: !isEn ? "统计分析Cookie" : "Analytics Cookies",
+ statisticsDesc: !isEn
+ ? "我们将根据您的同意使用和处理这些非必要Cookie。这些Cookie允许我们获得摘要统计数据,例如,统计访问量和访问者来源,便于我们改进我们的网站。"
+ : "We will use these cookies only with your consent. These cookies help us make improvements by collecting statistics such as the number of visits and traffic sources.",
+ enabled: !isEn ? "始终启用" : "Always active",
+ manageAction: [
+ {
+ btn: "保存并接受",
+ btnEn: "Save and Accept",
+ type: "save",
+ },
+ {
+ btn: "全部接受",
+ btnEn: "Accept All",
+ type: "allow-all",
+ },
+ ],
+ },
+ isNoticeVisible: true,
+ removeCustomCookie(key) {
+ document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; domain=${location.hostname}; path=/`;
+ },
+ disableOA() {
+ import("./modules/analytics.js")
+ .then(({ disableOA }) => disableOA())
+ .catch(() => {})
+ .finally(() => {
+ const prefix = "oa-openEuler";
+ const keys = [];
+ for (let i = 0; i < localStorage.length; i++) {
+ const key = localStorage.key(i);
+ if (key.startsWith(prefix)) {
+ keys.push(key);
+ }
+ }
+ keys.forEach(k => localStorage.removeItem(k));
+ });
+ },
+ // 移除百度统计相关脚本、storage和cookie
+ removeHM() {
+ const scripts = document.querySelectorAll('script.analytics-script');
+ scripts.forEach((script) => script.remove());
+ const hm = /^hm/i;
+ document.cookie
+ .split(';')
+ .map((c) => c.trim())
+ .forEach((c) => {
+ const key = decodeURIComponent(c.split('=')[0]);
+ if (hm.test(key)) {
+ console.log('removecookie', key)
+ this.removeCustomCookie(key);
+ }
+ });
+ [sessionStorage, localStorage].forEach((storage) => {
+ const keys = [];
+ for (let i = 0; i < storage.length; i++) {
+ const key = storage.key(i);
+ if (hm.test(key)) {
+ keys.push(key);
+ }
+ }
+ keys.forEach(key => storage.removeItem(key));
+ });
+ },
+ enableOA() {
+ import("./modules/analytics.js")
+ .then(({ enableOA, reportPV }) => {
+ enableOA();
+ reportPV();
+ })
+ .catch(() => {});
+ },
+ enableHM() {
+ // 百度统计
+ window._hmt = window._hmt || [];
+ var hm = document.createElement("script");
+ hm.classList.add('analytics-script');
+ hm.src = "https://hm.baidu.com/hm.js?ab8d86daab9a8e98cf8faa239aefcd3c";
+ var s = document.getElementsByTagName("script")[0];
+ s.parentNode.insertBefore(hm, s);
+ },
+ setCustomCookie: (cname, cvalue, day = 1) => {
+ let expires = new Date(Date.now() + day * 864e5);
+ if (expires) {
+ expires = expires.toUTCString();
+ }
+ document.cookie = `${cname}=${cvalue};domain=${COOKIE_DOMAIN};expires=${expires};path=/`;
+ },
+ // 获取cookie值
+ getCookieByKey: (key) => {
+ const cookieArr = document.cookie.split("; ");
+ for (let i = 0, len = cookieArr.length; i < len; i++) {
+ const item = cookieArr[i];
+ const rlt = item.split("=");
+ if (rlt[0] === key) {
+ return rlt[1];
+ }
+ }
+ },
+ // 是否未签署
+ isNotSigned() {
+ return (
+ this.getUserCookieStatus() ===
+ this.COOKIE_AGREED_STATUS.NOT_SIGNED
+ );
+ },
+ // 是否同意所有
+ isAllAgreed() {
+ return (
+ this.getUserCookieStatus() ===
+ this.COOKIE_AGREED_STATUS.ALL_AGREED
+ );
+ },
+ // 弹框 是否选中统计分析Cookie
+ isManageAgreed: () => {
+ return $(".statistics-switch").prop("checked");
+ },
+ // 显示/隐藏cookie提示
+ toggleNoticeVisible: (val) => {
+ const cookieMain = $(".cookie-notice");
+ val ? cookieMain.show() : cookieMain.hide();
+ },
+ // 获取cookie状态
+ getUserCookieStatus() {
+ const { COOKIE_AGREED_STATUS, COOKEY_KEY } = this;
+ const cookieVal = this.getCookieByKey(COOKEY_KEY) ?? "0";
+ const cookieStatusVal = cookieVal[0];
+ if (cookieStatusVal === COOKIE_AGREED_STATUS.ALL_AGREED) {
+ return COOKIE_AGREED_STATUS.ALL_AGREED;
+ } else if (cookieStatusVal === COOKIE_AGREED_STATUS.NECCESSARY_AGREED) {
+ return COOKIE_AGREED_STATUS.NECCESSARY_AGREED;
+ } else {
+ return COOKIE_AGREED_STATUS.NOT_SIGNED;
+ }
+ },
+ // cookie提示内容
+ getCookieContent: () => {
+ return `
+
+
+
+
+
+ ${cookieNotice.locale.action
+ .map((item) => {
+ return `${
+ isEn ? item.btnEn : item.btn
+ } `;
+ })
+ .join("")}
+
+
+
+
+
`;
+ },
+ // 弹框内容
+ getManageContent: () => {
+ return `
+
+
+
+
+ ${cookieNotice.locale.necessaryDesc}
+
+
+
+
+
+ ${cookieNotice.locale.statisticsDesc}
+
+
+
`;
+ },
+ // 用户同意所有cookie
+ acceptAll() {
+ this.setCustomCookie(
+ this.COOKEY_KEY,
+ this.COOKIE_AGREED_STATUS.ALL_AGREED,
+ 180
+ );
+ this.toggleNoticeVisible(false);
+ this.enableOA();
+ this.enableHM();
+ },
+ // 用户拒绝所有cookie,即仅同意必要cookie
+ rejectAll() {
+ this.setCustomCookie(
+ this.COOKEY_KEY,
+ this.COOKIE_AGREED_STATUS.NECCESSARY_AGREED,
+ 180
+ );
+ this.toggleNoticeVisible(false);
+ this.disableOA();
+ this.removeHM();
+ },
+ removeNotice: () => {
+ $(".cookie-notice").remove();
+ },
+ bindEvents() {
+ const _this = this;
+ $(".cookie-notice-right button").on("click", function () {
+ // 同意
+ if ($(this).hasClass("all")) {
+ _this.acceptAll();
+ _this.removeNotice();
+ }
+ // 拒绝
+ if ($(this).hasClass("refuse")) {
+ _this.rejectAll();
+ _this.removeNotice();
+ }
+ // 管理cookie
+ if ($(this).hasClass("manage")) {
+ // 加载弹窗
+ ODialog &&
+ ODialog.show({
+ title: this.locale.manageTitle,
+ content: _this.getManageContent(),
+ dlgActions: [
+ {
+ id: "save",
+ label: isEn
+ ? this.locale.manageAction[0].btnEn
+ : this.locale.manageAction[0].btn,
+ color: "primary",
+ variant: "outline",
+ onClick: () => {
+ _this.isManageAgreed() ? _this.acceptAll() : _this.rejectAll();
+ _this.removeNotice();
+ },
+ },
+ {
+ id: "allow-all",
+ label: isEn
+ ? this.locale.manageAction[1].btnEn
+ : this.locale.manageAction[1].btn,
+ color: "primary",
+ variant: "outline",
+ onClick: () => {
+ _this.acceptAll();
+ $(".statistics-switch").prop("checked", true);
+ _this.removeNotice();
+ },
+ },
+ ],
+ });
+ }
+ });
+
+ // 隐藏cookie
+ $(".cookie-close").on("click", function () {
+ cookieNotice.toggleNoticeVisible(false);
+ });
+ },
+ init() {
+ if (this.isNotSigned()) {
+ body.append(this.getCookieContent());
+ this.bindEvents();
+ this.toggleNoticeVisible(true);
+ }
+ if (this.isAllAgreed()) {
+ this.acceptAll();
+ } else {
+ this.disableOA();
+ this.removeHM();
+ }
+ },
+ };
+ cookieNotice.init();
+});
diff --git a/static/js/docdetail.js b/static/js/docdetail.js
new file mode 100644
index 0000000000000000000000000000000000000000..afa2ded63918e14c19174673d64927c0d39abb03
--- /dev/null
+++ b/static/js/docdetail.js
@@ -0,0 +1,143 @@
+/**
+ * @file 文档详情内容相关脚本
+ */
+$(function ($) {
+ var urlArr = window.location.pathname.split("/");
+ var isAdd1 = $("#markdown>ul").first().find("li").children().is("ul");
+ var isAdd4 = $("#markdown>ul").first().find("li").children().is("p");
+ var isAdd2 = $("#markdown>ul").first().find("li").children().is("a");
+ var isAdd3 = $("#markdown>.table-of-contents").first().find("ul");
+ var evaluateParams = {
+ name: "",
+ path: "",
+ lang: "",
+ version: "",
+ stars: 0,
+ };
+ evaluateParams.lang = lang;
+ var versionStr = urlArr[3].split("_");
+ versionStr = versionStr.join(" ");
+ var sourceLast = urlArr[6].replace("html", "md");
+ var sourceHref =
+ "https://gitee.com/openeuler/docs-centralized/tree/stable2-" +
+ urlArr[3] +
+ "/docs/" +
+ lang +
+ "/docs/" +
+ urlArr[5] +
+ "/" +
+ sourceLast;
+ $("#source").attr("href", sourceHref);
+ $("#version-select .option li,#h5-menu-top .option a").each(function () {
+ if ($(this).text() === versionStr) {
+ $(this).addClass("active");
+ }
+ });
+ if (evaluateParams.lang === "en") {
+ $("#version-select>span,#h5-menu .h5-sersion").text(
+ "Version: " + versionStr
+ );
+ } else if (evaluateParams.lang === "zh") {
+ $("#version-select>span,#h5-menu .h5-sersion").text("版本: " + versionStr);
+ } else {
+ $("#version-select>span,#h5-menu .h5-sersion").text(
+ "version: " + versionStr
+ );
+ }
+
+ $("#version-select").click(function (e) {
+ $("#version-option").toggleClass("show");
+ $(this).children(".option").toggleClass("option-active");
+ $(this).toggleClass("open-option");
+ $(document).one("click", function () {
+ $("#version-select .option").removeClass("option-active");
+ });
+ e.stopPropagation();
+ });
+ $(".h5_nav_left").click(function (e) {
+ $("#app>.left").addClass("show-left");
+ $(".h5-mask").show();
+ });
+ $("#h5-menu-top .icon-close,.h5-mask").click(function (e) {
+ $("#app>.left").removeClass("show-left");
+ $(".h5-mask").hide();
+ });
+ $("#h5-menu-top .h5-search")
+ .find(".search-btn")
+ .click(function (e) {
+ keyword = $("#h5-menu-top .h5-search").find("input").val();
+ window.location.href = "/" + lang + "/search.html?keyword=" + keyword;
+ });
+ if (isAdd1 && isAdd2 && !isAdd4) {
+ let linkEle = $("#markdown>ul").first().clone();
+ $("#title-evaluate>.title").append(linkEle);
+ } else if (isAdd3) {
+ $("#title-evaluate>.title").append(isAdd3);
+ }
+ $("#title-evaluate>.title")
+ .find("li")
+ .find("a")
+ .click(function (e) {
+ $("#title-evaluate>.title").find("li").find("a").removeClass("active");
+ $(this).addClass("active");
+ });
+ getTreeLink();
+});
+
+function getTreeLink() {
+ setTimeout(function () {
+ let openEle = $(" #docstreeview .jstree-container-ul").find(".jstree-open");
+ let lastBread = "";
+ let h1 = $(".markdown h1");
+ let title = "";
+ if (h1.html()) {
+ title = h1.html().trim();
+ }
+ const urlArr = window.location.pathname.split("/");
+ const versionStr = urlArr[3].split("_").join(" ");
+ let breadVersion = "";
+ if (lang === "zh") {
+ breadVersion = `版本:${versionStr} `;
+ } else {
+ breadVersion = `Version:${versionStr} `;
+ }
+ $(".docs-a").append(breadVersion);
+ let flag = false;
+ if (openEle.length) {
+ let span = " ";
+ flag = true;
+ $(".docs-a").append(span);
+ for (let i = 0; i < openEle.length; i++) {
+ if (i < openEle.length) {
+ $(".docs-a")
+ .append(
+ $(" #docstreeview .jstree-container-ul")
+ .find(".jstree-open")
+ .eq(i)
+ .find("a")
+ .first()
+ .clone()
+ )
+ .append(span);
+ lastBread = $(" #docstreeview .jstree-container-ul")
+ .find(".jstree-open")
+ .eq(i)
+ .find("a")
+ .first()
+ .text();
+ }
+ }
+ }
+ if (title !== lastBread) {
+ const elementLastBread = flag
+ ? `${title} `
+ : `${title} `;
+ $(".docs-a").append(elementLastBread);
+ } else {
+ $(".docs-a i:nth-last-of-type(1)").remove();
+ }
+ if (!$(".docs-a>a:nth-last-of-type(1)").html()) {
+ $(".docs-a>a:nth-last-of-type(1)").remove();
+ }
+ }, 100);
+}
diff --git a/static/js/docsearch.js b/static/js/docsearch.js
new file mode 100644
index 0000000000000000000000000000000000000000..254129e27760de6ffb93bb0c3000e0c090ab8966
--- /dev/null
+++ b/static/js/docsearch.js
@@ -0,0 +1,232 @@
+/**
+ * @file 搜索相关脚本
+ */
+$(async function ($) {
+ var keyword = "";
+ $(".baseof_mask").click(function (e) {
+ $(".baseof_mask").css("display", "none");
+ $(".alert").css("display", "none");
+ $("#result-container").css("display", "none");
+ $("#title-evaluate").removeClass("bug-hide");
+ });
+
+ $(".search-header>.icon-search").click(function (e) {
+ keyword = $(".search-header>.search-text").val();
+ $("#search_content").css("display", "block");
+ searchMethods.search(keyword, 1, "#baseof-pagination");
+ });
+
+ $(".search-header>.search-text").bind("change", function (event) {
+ keyword = $(".search-header>.search-text").val();
+ $("#search_content").css("display", "block");
+ searchMethods.search(keyword, 1, "#baseof-pagination");
+ });
+
+ $(document).ready(function () {
+ $(".search-header>.search-text").blur(function () {
+ var value = $(this).val();
+ value = $.trim(value);
+ if (value == "") {
+ searchMethods.search(decodeURI(value), 1, "#baseof-pagination");
+ $(".search-result>#baseof-pagination").css("display", "none");
+ }
+ });
+ });
+
+ $("#search-input>.icon-search").click(function (e) {
+ keyword = $("#search-input>.search-text").val();
+ $("#search_content").css("display", "block");
+ searchMethods.search(decodeURI(keyword), 1, "#web-pagination");
+ });
+
+ $("#search-input>.search-text").bind("keyup", function (event) {
+ if (!$("#search-input>.search-text").val()) {
+ $("#search_content").css("display", "none");
+ }
+ if (event.keyCode == "13") {
+ keyword = $("#search-input>.search-text").val();
+ $("#search_content").css("display", "block");
+ searchMethods.search(decodeURI(keyword), 1, "#web-pagination");
+ }
+ });
+
+ $(".white_search").click(function (e) {
+ $(".searcher").css("display", "block");
+ $(".mask-mobile").css("display", "block");
+ var height = $(".app-mobile").outerHeight(true) - 279;
+ $(".mask-mobile").css("height", height);
+ });
+ $(".cancel-btn").click(function (e) {
+ $(".searcher").css("display", "none");
+ $(".mask-mobile").css("display", "none");
+ var height = $(".app-mobile").outerHeight(true) - 279;
+ $(".mask-mobile").css("height", height);
+ });
+
+ $(".mask-mobile").click(function (e) {
+ $(".searcher").css("display", "none");
+ $(".mask-mobile").css("display", "none");
+ $(".app-mobile .h5_nav").removeClass("h5_nav_show");
+ });
+
+ $(".h5-search")
+ .find(".search-btn")
+ .click(function (e) {
+ keyword = $(".h5-search").find("input").val();
+ $(".search-result").css("display", "none");
+ searchMethods.search(decodeURI(keyword), 1, "#pagination");
+ });
+ $(".h5-search input").keyup(function () {
+ if ($(this).val() !== "") {
+ $(".icon-clear").show();
+ } else {
+ $(".icon-clear").hide();
+ }
+ });
+ $(".icon-clear").click(function () {
+ $(".h5-search input").val("");
+ $(".icon-clear").hide();
+ });
+ $(".h5-search>.search-text").bind("change", function (event) {
+ keyword = $(".h5-search>.search-text").val();
+ $(".search-result").css("display", "block");
+ searchMethods.search(decodeURI(keyword), 1, "#pagination");
+ });
+ var versionText = "";
+ var totalAmount = 0;
+ var pagecount = 5;
+ var currentScreen = document.body.clientWidth;
+ if (currentScreen <= 1000) {
+ pagecount = 3;
+ }
+ if (lang === "zh") {
+ versionText = "版本";
+ articles = "openeuler_articles";
+ } else if (lang === "en") {
+ versionText = "version";
+ articles = "openeuler_articles_en";
+ } else {
+ versionText = "Версия";
+ articles = "openeuler_articles_ru";
+ }
+
+ var searchMethods = {
+ search: function (value, page, el) {
+ const version = window.location.pathname.split("/")[3];
+ let postData = {
+ keyword: value,
+ lang: lang,
+ version,
+ page: page,
+ };
+ import("./modules/analytics.js")
+ .then(({ reportSearch }) => reportSearch(postData))
+ .catch(() => {});
+ $.ajax({
+ type: "POST",
+ url: "/api-search/search/sort/docs",
+ data: JSON.stringify(postData),
+ contentType: "application/json; charset=utf-8",
+ datatype: "json",
+ success: function (data) {
+ let dataArr = data.obj?.records;
+ totalAmount = data.obj?.count;
+ if (page === 1) {
+ $(".search-result>.title").find(".keyword").text(value);
+ let pag = new Pagination({
+ element: el || "#baseof-pagination",
+ type: 1,
+ pageIndex: 1,
+ pageSize: 10,
+ pageCount: pagecount,
+ total: totalAmount,
+ jumper: false,
+ singlePageHide: false,
+ prevText: "<",
+ nextText: ">",
+ disabled: false,
+ currentChange: function (index) {
+ searchMethods.search(decodeURI(keyword), index);
+ },
+ });
+ }
+ searchMethods.solveData(dataArr, versionText, el, value);
+ },
+ error: function (data) {
+ totalAmount = 0;
+ $(".search-result>.title").find(".keyword").text(value);
+ },
+ });
+ },
+ solveData: function (result, text, el, searchText) {
+ $(".search-result>ul").empty();
+ if (!result?.length) {
+ $("#search_content").hide();
+ if (el === "#pagination") {
+ $(".search-result #pagination").hide();
+ $(".search-result .no-data-mobile").show();
+ } else {
+ $(".search-result #baseof-pagination").hide();
+ $(".search-result .no-data").show();
+ }
+ return;
+ }
+ $("#search_content").show();
+ result.forEach(function (item, index) {
+ let url = `/${item.path.replaceAll(" ", "-")}.html`;
+ $(".search-result>ul").append(
+ "" +
+ '' +
+ searchMethods.escapeHTML(item.title) +
+ "
" +
+ '' +
+ searchMethods.escapeHTML(item.textContent) +
+ "
" +
+ '' +
+ searchMethods.escapeHTML(text) +
+ ':' +
+ searchMethods.escapeHTML(item.version) +
+ " " +
+ "
" +
+ " "
+ );
+
+ $(".search-result>ul li")
+ .find(".res-title")
+ .click(function (e) {
+ window.location.href = $(this).attr("href");
+ });
+ });
+ if (el === "#pagination") {
+ $(".search-result .no-data-mobile").hide();
+ $(".search-result #pagination").show();
+ } else {
+ $(".search-result .no-data").hide();
+ $(".search-result #baseof-pagination").show();
+ }
+ },
+ escapeHTML: function (str) {
+ return str.replace(/[&<>'"]/g, function (tag) {
+ return (
+ {
+ "&": "&",
+ // '<': '<',
+ // '>': '>',
+ "'": "'",
+ '"': """,
+ }[tag] || tag
+ );
+ });
+ },
+ };
+
+ if (typeof keyword === "undefined") {
+ $(".search-result").empty();
+ } else {
+ $(".search-result>.title").find(".keyword").text(decodeURI(keyword));
+ $(".input>.search-text").val(decodeURI(keyword));
+ $(".h5-search>div").find("input").val(decodeURI(keyword));
+ }
+});
diff --git a/static/js/float.js b/static/js/float.js
new file mode 100644
index 0000000000000000000000000000000000000000..1700cc110b81d6fd7b170ab1b47be25036c3a262
--- /dev/null
+++ b/static/js/float.js
@@ -0,0 +1,572 @@
+/**
+ * @file 文档右下角浮窗相关脚本
+ */
+$(document).ready(() => {
+ if (window.innerWidth > 1100) {
+ $(".app-mobile .float-mobile").remove();
+ $(".o-popup1 .submit-btn-mb").remove();
+ } else {
+ $("#app.web .float-wrap").remove();
+ }
+ function toggleIsShow(toggle) {
+ if (toggle) {
+ $(".float-wrap .nav-box1 .item-nav .o-popup1").addClass("active");
+ } else {
+ $(".float-wrap .nav-box1 .item-nav .o-popup1").removeClass("active");
+ }
+ }
+ $(".float-wrap .nav-box1 .item-nav.popup1").mouseenter(function () {
+ toggleIsShow(true);
+ });
+ $(".float-wrap .nav-box1 .item-nav.popup1").mouseleave(function () {
+ toggleIsShow(false);
+ });
+ $(".float-wrap .nav-box1 .item-nav.popup1 .icon-box").mouseleave(function () {
+ setInit();
+ $(".float-wrap .nav-box1 .item-nav .o-popup1").removeClass("show");
+ });
+
+ const sliderTrack = $(".slider-body");
+ const sliderHandle = $("#sliderHandle");
+ const step = 10; // 调整这个值以设置步长大小
+
+ const PLACEHOLDER1 = "请输入您不太满意的原因";
+ const PLACEHOLDER2 = "改进哪些方面会让您更满意?";
+ const PLACEHOLDER3 = "请输入您满意的原因";
+ $("#textarea-input").attr("placeholder", PLACEHOLDER1);
+ let score = 0;
+ let mark = '
';
+ for (let i = 0; i < step; i++) {
+ mark += '
';
+ }
+ $(".slider-track .mark .item-box,.slider-track .pre-mark").append(mark);
+ function handleMouseMove(e) {
+ const trackWidth = sliderTrack.width();
+ $(".slider-track .mark .item-box").css("width", `${trackWidth}px`);
+ const initialX = sliderTrack.offset().left;
+ let newLeft = e.clientX - initialX;
+ const stepSize = trackWidth / step;
+ newLeft = Math.max(0, Math.min(trackWidth, newLeft));
+ newLeft = Math.round(newLeft / stepSize) * stepSize;
+ score = Math.ceil(newLeft / stepSize);
+ sliderHandle.css("left", `${newLeft}px`);
+ $(".mark").css("width", `${newLeft}px`);
+ $(".slider-body .slider-tip").css("left", `${newLeft}px`);
+ $(".slider-body .slider-tip").text(score);
+ $(".o-popup1 .reason").show();
+ $(".o-popup1 .submit-btn-mb .confirm-btn").removeClass("forbidden");
+ $(".o-popup1 .slider-tip").show();
+ $(".o-popup1").addClass("show");
+ $("#textarea-input").placeholder = PLACEHOLDER1;
+ isResonShow = true;
+ if (score < 7) {
+ $("#textarea-input").attr("placeholder", PLACEHOLDER1);
+ } else if (score < 9) {
+ $("#textarea-input").attr("placeholder", PLACEHOLDER2);
+ } else {
+ $("#textarea-input").attr("placeholder", PLACEHOLDER3);
+ }
+ $(`.tip-item`).removeClass("active");
+ $(`.tip-item:eq(${score})`).addClass("active");
+ }
+ function setInit() {
+ score = 0;
+ inputText = "";
+ sliderHandle.css("left", `${0}px`);
+ $(".mark").css("width", `${0}px`);
+ $(".slider-body .slider-tip").css("left", `${0}px`);
+ $(".slider-body .slider-tip").text(score);
+ $(".o-popup1 .reason").hide();
+ $(".o-popup1 .submit-btn-mb .confirm-btn").addClass("forbidden");
+ $(".o-popup1 .slider-tip").hide();
+ $("#textarea-input").placeholder = PLACEHOLDER1;
+ $("#textarea-input").val(inputText);
+ $("#textarea-input+p span").html(inputText.length);
+ $(".o-popup1").removeClass("show");
+ $(".float-mobile .float-content").hide();
+ }
+ sliderTrack.on("mousedown", function () {
+ sliderTrack.on("mousemove", handleMouseMove);
+ });
+
+ $(document).on("mouseup", function () {
+ sliderTrack.off("mousemove", handleMouseMove);
+ });
+ sliderTrack.mouseleave(function () {
+ sliderTrack.off("mousemove", handleMouseMove);
+ });
+ // 初始绑定一次mousemove事件
+ sliderTrack.on("mousedown", handleMouseMove);
+ // 点击回到顶部
+ $(".float-wrap .nav-box2").on("click", function () {
+ $("#right").scrollTop(0);
+ $(window).scrollTop(0);
+ });
+
+ // 输入事件相关
+ let inputText = "";
+ $("#textarea-input").on("input", function (event) {
+ inputText = event.target.value;
+ $("#textarea-input+p span").html(inputText.length);
+ });
+ $("#textarea-input").on("focus", function () {
+ $(".float-wrap .input-area").addClass("is-focus");
+ });
+ $("#textarea-input").on("blur", function () {
+ $(".float-wrap .input-area").removeClass("is-focus");
+ });
+ // 点击关闭
+ $(".o-popup1 .icon-cancel").on("click", function () {
+ setInit();
+ toggleIsShow(false);
+ });
+
+ // 点击提交
+ // 处理提示语 type:success 提交成功 error 提交失败
+ function handleTip(type, tip = "") {
+ if (type === "success") {
+ $("#float-tip").removeClass("error-tip");
+ $("#float-tip").addClass("success-tip");
+ $("#float-tip .tip-text").text("提交成功,感谢您的反馈!");
+ } else {
+ $("#float-tip").removeClass("success-tip");
+ $("#float-tip").addClass("error-tip");
+ $("#float-tip .tip-text").text(tip ? tip : "Error !");
+ }
+ $("#float-tip").addClass("show");
+ setTimeout(() => {
+ $("#float-tip").removeClass("show");
+ }, 2000);
+ }
+ function postScore() {
+ const postData = {
+ feedbackPageUrl: location.href,
+ feedbackText: inputText,
+ feedbackValue: score,
+ };
+ $.ajax({
+ type: "POST",
+ url: "/api-dsapi/query/nps?community=openeuler",
+ data: JSON.stringify(postData),
+ contentType: "application/json; charset=utf-8",
+ datatype: "json",
+ success: function (data) {
+ const res = JSON.parse(data);
+ if (res.code === 200) {
+ handleTip("success");
+ const submitTime = new Date().valueOf();
+ if (window.innerWidth < 1100) {
+ localStorage.setItem(
+ "submit-time-mobile",
+ JSON.stringify(submitTime)
+ );
+ } else {
+ localStorage.setItem("submit-time", JSON.stringify(submitTime));
+ }
+ $(".app-mobile .float-mobile").remove();
+ } else {
+ handleTip("error", res.msg);
+ }
+ setInit();
+ },
+ error: function () {
+ handleTip("error");
+ setInit();
+ },
+ });
+ }
+ $(".o-popup1 .submit-btn .o-button").on("click", function () {
+ const lastSubmitTime = localStorage.getItem("submit-time");
+ const intervalTime = 1 * 12 * 60 * 60 * 1000;
+ const nowTime = new Date().valueOf();
+ if (lastSubmitTime) {
+ const flag = nowTime - JSON.parse(lastSubmitTime) > intervalTime;
+ if (flag) {
+ postScore();
+ } else {
+ handleTip("error", "请不要频繁提交!");
+ }
+ } else {
+ postScore();
+ }
+ });
+ // 浮窗移动端
+ (function () {
+ let tip = "";
+ for (let i = 0; i < 11; i++) {
+ tip =
+ tip +
+ `${i}
`;
+ }
+ $(".o-popup1 .slider .slider-body .slider-tip-mb").append(tip);
+ // 点击浮窗
+ $(".float-mobile .float-head .head-title").on("click", function () {
+ $(".float-content").show();
+ });
+ // 点击遮罩
+ $(".float-mobile .float-content .float-mask").on("click", function () {
+ $(".float-content").hide();
+ });
+ // 点击取消
+ $(".float-mobile .float-content .o-popup1 .submit-btn-mb .cancel-btn").on(
+ "click",
+ function () {
+ $(".float-content").hide();
+ setInit();
+ }
+ );
+ // 移动端点击确定提交
+ $(".float-mobile .float-content .o-popup1 .submit-btn-mb .confirm-btn").on(
+ "click",
+ function () {
+ if (!$(this).hasClass("forbidden")) {
+ postScore();
+ }
+ }
+ );
+ // 点击关闭移动端评分入口
+ $(".float-mobile .float-head .icon-cancel").on("click", function () {
+ $(".app-mobile .float-mobile").remove();
+ const closeTime = new Date().valueOf();
+ localStorage.setItem("close-float-time", JSON.stringify(closeTime));
+ });
+ // 移动端用户关闭后7天不展示,提交后30日内不出现入口
+ (function () {
+ const lastCloseTime = localStorage.getItem("close-float-time");
+ const lastSubmitTime = localStorage.getItem("submit-time-mobile");
+ const sevenDaysInMilliseconds = 7 * 24 * 60 * 60 * 1000;
+ const thirtyInMilliseconds = 30 * 24 * 60 * 60 * 1000;
+ const nowTime = new Date().valueOf();
+ if (lastCloseTime || lastSubmitTime) {
+ let flag1;
+ let flag2;
+ if (lastCloseTime) {
+ flag1 = nowTime - JSON.parse(lastCloseTime) > sevenDaysInMilliseconds;
+ } else if (lastSubmitTime) {
+ flag2 = nowTime - JSON.parse(lastSubmitTime) > thirtyInMilliseconds;
+ }
+ if (flag1 && flag2) {
+ $(".app-mobile .float-mobile").show();
+ } else {
+ $(".app-mobile .float-mobile").remove();
+ }
+ } else {
+ $(".app-mobile .float-mobile").show();
+ }
+ })();
+ })();
+ // 点击关闭捉虫
+ $(".float-wrap .bug-box .icon-close").on("click", function () {
+ $(".float-wrap .bug-box").addClass("is-close");
+ });
+
+ // 捉虫相关
+ (function () {
+ const urlArr = location.href.split('/');
+ const title = urlArr[urlArr.length - 1].replace('.html', '');
+ const version = urlArr[urlArr.length - 4];
+ const lang = location.href.split('/')[3];
+ const versionObj = lang === 'zh' ? versionObjZh : versionObjEn;
+ // 归档版本不支持捉虫
+ if (versionObj[version.replaceAll('_',' ')] && versionObj[version.replaceAll('_',' ')].archive) {
+ $('.float-wrap .bug-box').css('display', 'none');
+ return false;
+ }
+ $('.float-wrap .bug-box').css('display', 'block');
+ function tipShow(value, index) {
+ let tipBox = $("
");
+ $(".title-h3")[index].appendChild(tipBox[0]);
+ $(".tip-box").text(value).slideToggle(500);
+ setTimeout(function () {
+ $(".tip-box").slideToggle("slow");
+ setTimeout(function () {
+ $(".tip-box").remove();
+ }, 500);
+ }, 2500);
+ }
+ function issueTemplate(data) {
+ let Problem = "";
+ data.existProblem.length == 0
+ ? ""
+ : (Problem = `- ${data.existProblem.join("、")}`);
+ return `1. 【文档链接】
+
+ > ${data.link}
+
+ 2. 【"有虫"文档片段】
+
+ > ${data.bugDocFragment.replace(/(\r\n|\r|\n)+/g, "$1")}
+
+ 3. 【存在的问题】
+
+ ${Problem}
+ > ${data.problemDetail.replace(/(\r\n|\r|\n)+/g, "$1")}
+
+ 4. 【预期结果】
+ - 请填写预期结果`;
+ }
+ // 选中文字出现捉虫图标
+ (function () {
+ function selectText() {
+ if (document.selection) {
+ return document.selection.createRange().text;
+ } else {
+ return window.getSelection().toString();
+ }
+ }
+ let content = document.querySelector("#content");
+ let feedback = document.querySelector(".feedback");
+ if (content && feedback) {
+ content.onmouseup = function (event) {
+ let ev = event || window.event;
+ let left = ev.clientX;
+ let top = ev.clientY + 30;
+ let select = selectText().trim();
+ setTimeout(function () {
+ if (
+ select.length > 0 &&
+ window.getSelection() &&
+ window.getSelection().type === "Range"
+ ) {
+ feedback.style.display = "block";
+ feedback.style.left = left + "px";
+ feedback.style.top = top + "px";
+ } else {
+ feedback.style.display = "none";
+ }
+ }, 100);
+ };
+ content.onclick = function (ev) {
+ var ev = ev || window.event;
+ ev.cancelBubble = true;
+ };
+ document.onclick = function () {
+ feedback.style.display = "none";
+ };
+
+ feedback.onclick = function (e) {
+ e.stopPropagation();
+ let count = "";
+ if (selectText().trim().length > 500) {
+ $(".first-input").val(selectText().trim().substring(0, 500));
+ } else {
+ $(".first-input").val(selectText().trim());
+ }
+ count = 500 - $(".first-input").val().length;
+ $("#text-count").text(count);
+ $(".float-wrap .bug-box .bug-text").click();
+ };
+ }
+ })();
+
+ $(".float-wrap .bug-box .bug-text").click(function (e) {
+ if ($(".alert").css("display") === "none") {
+ e.stopPropagation();
+ $(".alert").slideToggle(500);
+ $(".baseof_mask").css("display", "block");
+ } else {
+ $(".alert").slideToggle(500);
+ $(".baseof_mask").css("display", "none");
+ }
+ });
+ $(".alert .icon-close").on("click", function (e) {
+ e.stopPropagation();
+ $(".float-wrap .bug-box .bug-text").click();
+ $(".baseof_mask").css("display", "none");
+ });
+ $(".btn-submit>span").hover(
+ function () {
+ let submitType = $(".submit-type .active-submit").attr("attr_type");
+ if (submitType === "issue") {
+ $(".issue-submit-tip").addClass("tip-show");
+ } else if (submitType === "PR") {
+ $(".pr-submit-tip").addClass("tip-show");
+ }
+ },
+ function () {
+ $(".issue-submit-tip").removeClass("tip-show");
+ $(".pr-submit-tip").removeClass("tip-show");
+ }
+ );
+ // 点击提交
+ $(".btn-submit>span").on("click", function () {
+ let questionValue = $(".main-input").val().trim();
+ const regR = /[\r\n]+/g;
+ let submitType = $(".submit-type .active-submit").attr("attr_type");
+ let feedback = $(".issue-reason").val().trim();
+ let checkedArr = [];
+ const first = questionValue.split(regR)[0];
+ $(".alert .active-border span").each(function (index) {
+ checkedArr.push($(".alert .active-border span")[index].innerHTML);
+ });
+ let satisfaction = $(".satisfaction .active");
+ // 获取要提交的文件的路径
+ const path =
+ urlArr[urlArr.length - 2] +
+ "/" +
+ urlArr[urlArr.length - 1].replace("html", "md");
+
+ let tipText = "";
+ if (!questionValue) {
+ $(".first-input").focus();
+ tipText = lang == "zh" ? "请输入“有虫”片段" : "Enter the buggy content";
+ tipShow(tipText, 0);
+ } else if (!feedback || !submitType) {
+ $(".issue-reason").focus();
+ tipText =
+ lang == "zh"
+ ? "请选择提交类型并输入问题描述"
+ : "Choose a submission type and describe the bug";
+ tipShow(tipText, 1);
+ } else if (satisfaction.length === 0) {
+ tipText =
+ lang == "zh"
+ ? "请选择满意度"
+ : "Rate your satisfaction with this document";
+ tipShow(tipText, 2);
+ } else {
+ let postData = {
+ bugDocFragment: questionValue,
+ existProblem: checkedArr,
+ problemDetail: feedback,
+ comprehensiveSatisfication: parseInt(satisfaction.attr("key")),
+ };
+ postData.link = window.location.href;
+ function openUrl(url = "#") {
+ let tempALink = document.createElement("a");
+ tempALink.setAttribute("target", "_blank");
+ tempALink.setAttribute("id", "openWin");
+ tempALink.setAttribute("href", url);
+ document.body.appendChild(tempALink);
+ document.getElementById("openWin").click();
+ document.body.removeChild(tempALink);
+ }
+ $.ajax({
+ type: "POST",
+ url: `/api-dsapi/query/add/bugquestionnaire?community=openeuler&lang=${lang}`,
+ data: JSON.stringify(postData),
+ contentType: "application/json; charset=utf-8",
+ datatype: "json",
+ success: function (data) {
+ postData.link = window.location.href;
+ let body = encodeURIComponent(issueTemplate(postData));
+ try {
+ if (JSON.parse(data).code === 200) {
+ if (submitType === "issue") {
+ openUrl(
+ `https://gitee.com/openeuler/docs-centralized/issues/new?issue%5Bassignee_id%5D=0&issue%5Bmilestone_id%5D=0&title=文档捉虫&description=${body}`
+ );
+ } else {
+ openUrl(
+ `https://gitee.com/-/ide/project/openeuler/docs/edit/stable2-${version}/-/docs/${lang}/docs/${path}?search=${first}&title=文档捉虫-openEuler ${version}-${title}&description=${feedback}&message=${feedback}&label_names=文档捉虫`
+ );
+ }
+ } else {
+ console.error(JSON.parse(data));
+ }
+ } catch (error) {
+ console.error(error);
+ }
+ $("#title-evaluate").css("z-index", "1003");
+ $("#title-evaluate img").css("display", "none");
+ },
+ error: function (err) {
+ $("#title-evaluate").css("z-index", "1003");
+ $("#title-evaluate img").css("display", "none");
+ console.error(err);
+ },
+ });
+ }
+ });
+ let template = "";
+ for (let i = 1; i <= 10; i++) {
+ let rank = "";
+ if (i <= 6) {
+ rank = lang === "zh" ? "失望" : "Disappointed";
+ } else if (i > 6 && i <= 8) {
+ rank = lang === "zh" ? "一般" : "Neutral";
+ } else {
+ rank = lang === "zh" ? "满意" : "Satisfied";
+ }
+ template =
+ template +
+ ``;
+ }
+ $(".score-box").html(template);
+ $(".evaluates .issue").on("click", function () {
+ let text = `\n${this.children[0].innerHTML}:`;
+ let preTag = null;
+ if ($(".active-border").length) {
+ preTag = `\n${$(".active-border")[0].childNodes[1].innerHTML}:\n`;
+ }
+ const textList = $(this).find(".issue-detail").text().split("●");
+ for (let i = 0; i < textList.length; i++) {
+ textList[i] = textList[i].trim();
+ }
+ let itemtext = text + textList.join("\n");
+ let preText = null;
+ if ($(".active-border").length) {
+ preText =
+ preTag +
+ $(".active-border .issue-detail")
+ .text()
+ .replace(/\s+/gi, "")
+ .replaceAll(";", "\n")
+ .replaceAll("●", "");
+ }
+ text = itemtext;
+ if ($(this).hasClass("active-border")) {
+ text = text.replaceAll(itemtext.trim(), "");
+ $(this).removeClass("active-border");
+ } else {
+ preText ? (text = text.replaceAll(preText.trim(), "")) : "";
+ $(this)
+ .addClass("active-border")
+ .siblings()
+ .removeClass("active-border");
+ }
+ text = text.trim();
+ let count = "";
+ if (text.trim().length > 500) {
+ $(".issue-reason").val(text.trim().substring(0, 500));
+ } else if (text.length === 0) {
+ $(".issue-reason").val("");
+ } else {
+ $(".issue-reason").val(`${text.trim()}\n`);
+ }
+ count = $(".issue-reason").val().length;
+ $("#text-count-tow").text(count);
+ });
+ $(".submit-type .type-issue,.submit-type .type-PR").on(
+ "click",
+ function () {
+ $(this)
+ .addClass("active-submit")
+ .siblings()
+ .removeClass("active-submit");
+ }
+ );
+ $(".satisfaction .score").on("click", function () {
+ $(this).addClass("active");
+ $(this).siblings(".score").removeClass("active");
+ });
+ $(".first-input").on("input propertychange", function () {
+ let _val = $(this).val();
+ let count = "";
+ if (_val.length > 500) {
+ $(this).val(_val.substring(0, 500));
+ }
+ count = $(this).val().length;
+ $("#text-count").text(count);
+ });
+ $(".issue-reason").on("input propertychange", function () {
+ (_val = $(this).val()), (count = "");
+ if (_val.length > 500) {
+ $(this).val(_val.substring(0, 500));
+ }
+ count = $(this).val().length;
+ $("#text-count-tow").text(count);
+ });
+ })();
+});
diff --git a/static/js/highlight.min.js b/static/js/highlight.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..0835bb417c5daf0717662f4811844466df828a57
--- /dev/null
+++ b/static/js/highlight.min.js
@@ -0,0 +1,1396 @@
+/*!
+ Highlight.js v11.10.0 (git: 366a8bd012)
+ (c) 2006-2024 Josh Goebel and other contributors
+ License: BSD-3-Clause
+ */
+var hljs=function(){"use strict";function e(t){
+return t instanceof Map?t.clear=t.delete=t.set=()=>{
+throw Error("map is read-only")}:t instanceof Set&&(t.add=t.clear=t.delete=()=>{
+throw Error("set is read-only")
+}),Object.freeze(t),Object.getOwnPropertyNames(t).forEach((n=>{
+const i=t[n],s=typeof i;"object"!==s&&"function"!==s||Object.isFrozen(i)||e(i)
+})),t}class t{constructor(e){
+void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}
+ignoreMatch(){this.isMatchIgnored=!0}}function n(e){
+return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")
+}function i(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t]
+;return t.forEach((e=>{for(const t in e)n[t]=e[t]})),n}const s=e=>!!e.scope
+;class o{constructor(e,t){
+this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){
+this.buffer+=n(e)}openNode(e){if(!s(e))return;const t=((e,{prefix:t})=>{
+if(e.startsWith("language:"))return e.replace("language:","language-")
+;if(e.includes(".")){const n=e.split(".")
+;return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${"_".repeat(t+1)}`))].join(" ")
+}return`${t}${e}`})(e.scope,{prefix:this.classPrefix});this.span(t)}
+closeNode(e){s(e)&&(this.buffer+="")}value(){return this.buffer}span(e){
+this.buffer+=``}}const r=(e={})=>{const t={children:[]}
+;return Object.assign(t,e),t};class a{constructor(){
+this.rootNode=r(),this.stack=[this.rootNode]}get top(){
+return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){
+this.top.children.push(e)}openNode(e){const t=r({scope:e})
+;this.add(t),this.stack.push(t)}closeNode(){
+if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){
+for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}
+walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){
+return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t),
+t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){
+"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{
+a._collapse(e)})))}}class c extends a{constructor(e){super(),this.options=e}
+addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){
+this.closeNode()}__addSublanguage(e,t){const n=e.root
+;t&&(n.scope="language:"+t),this.add(n)}toHTML(){
+return new o(this,this.options).value()}finalize(){
+return this.closeAllNodes(),!0}}function l(e){
+return e?"string"==typeof e?e:e.source:null}function g(e){return h("(?=",e,")")}
+function u(e){return h("(?:",e,")*")}function d(e){return h("(?:",e,")?")}
+function h(...e){return e.map((e=>l(e))).join("")}function f(...e){const t=(e=>{
+const t=e[e.length-1]
+;return"object"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{}
+})(e);return"("+(t.capture?"":"?:")+e.map((e=>l(e))).join("|")+")"}
+function p(e){return RegExp(e.toString()+"|").exec("").length-1}
+const b=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./
+;function m(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n
+;let i=l(e),s="";for(;i.length>0;){const e=b.exec(i);if(!e){s+=i;break}
+s+=i.substring(0,e.index),
+i=i.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?s+="\\"+(Number(e[1])+t):(s+=e[0],
+"("===e[0]&&n++)}return s})).map((e=>`(${e})`)).join(t)}
+const E="[a-zA-Z]\\w*",x="[a-zA-Z_]\\w*",w="\\b\\d+(\\.\\d+)?",y="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",_="\\b(0b[01]+)",O={
+begin:"\\\\[\\s\\S]",relevance:0},v={scope:"string",begin:"'",end:"'",
+illegal:"\\n",contains:[O]},k={scope:"string",begin:'"',end:'"',illegal:"\\n",
+contains:[O]},N=(e,t,n={})=>{const s=i({scope:"comment",begin:e,end:t,
+contains:[]},n);s.contains.push({scope:"doctag",
+begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",
+end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0})
+;const o=f("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/)
+;return s.contains.push({begin:h(/[ ]+/,"(",o,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),s
+},S=N("//","$"),M=N("/\\*","\\*/"),R=N("#","$");var j=Object.freeze({
+__proto__:null,APOS_STRING_MODE:v,BACKSLASH_ESCAPE:O,BINARY_NUMBER_MODE:{
+scope:"number",begin:_,relevance:0},BINARY_NUMBER_RE:_,COMMENT:N,
+C_BLOCK_COMMENT_MODE:M,C_LINE_COMMENT_MODE:S,C_NUMBER_MODE:{scope:"number",
+begin:y,relevance:0},C_NUMBER_RE:y,END_SAME_AS_BEGIN:e=>Object.assign(e,{
+"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{
+t.data._beginMatch!==e[1]&&t.ignoreMatch()}}),HASH_COMMENT_MODE:R,IDENT_RE:E,
+MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+x,relevance:0},
+NUMBER_MODE:{scope:"number",begin:w,relevance:0},NUMBER_RE:w,
+PHRASAL_WORDS_MODE:{
+begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/
+},QUOTE_STRING_MODE:k,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/,
+end:/\/[gimuy]*/,contains:[O,{begin:/\[/,end:/\]/,relevance:0,contains:[O]}]},
+RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",
+SHEBANG:(e={})=>{const t=/^#![ ]*\//
+;return e.binary&&(e.begin=h(t,/.*\b/,e.binary,/\b.*/)),i({scope:"meta",begin:t,
+end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},
+TITLE_MODE:{scope:"title",begin:E,relevance:0},UNDERSCORE_IDENT_RE:x,
+UNDERSCORE_TITLE_MODE:{scope:"title",begin:x,relevance:0}});function A(e,t){
+"."===e.input[e.index-1]&&t.ignoreMatch()}function I(e,t){
+void 0!==e.className&&(e.scope=e.className,delete e.className)}function T(e,t){
+t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",
+e.__beforeBegin=A,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,
+void 0===e.relevance&&(e.relevance=0))}function L(e,t){
+Array.isArray(e.illegal)&&(e.illegal=f(...e.illegal))}function B(e,t){
+if(e.match){
+if(e.begin||e.end)throw Error("begin & end are not supported with match")
+;e.begin=e.match,delete e.match}}function P(e,t){
+void 0===e.relevance&&(e.relevance=1)}const D=(e,t)=>{if(!e.beforeMatch)return
+;if(e.starts)throw Error("beforeMatch cannot be used with starts")
+;const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t]
+})),e.keywords=n.keywords,e.begin=h(n.beforeMatch,g(n.begin)),e.starts={
+relevance:0,contains:[Object.assign(n,{endsParent:!0})]
+},e.relevance=0,delete n.beforeMatch
+},H=["of","and","for","in","not","or","if","then","parent","list","value"],C="keyword"
+;function $(e,t,n=C){const i=Object.create(null)
+;return"string"==typeof e?s(n,e.split(" ")):Array.isArray(e)?s(n,e):Object.keys(e).forEach((n=>{
+Object.assign(i,$(e[n],t,n))})),i;function s(e,n){
+t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((t=>{const n=t.split("|")
+;i[n[0]]=[e,U(n[0],n[1])]}))}}function U(e,t){
+return t?Number(t):(e=>H.includes(e.toLowerCase()))(e)?0:1}const z={},W=e=>{
+console.error(e)},X=(e,...t)=>{console.log("WARN: "+e,...t)},G=(e,t)=>{
+z[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),z[`${e}/${t}`]=!0)
+},K=Error();function F(e,t,{key:n}){let i=0;const s=e[n],o={},r={}
+;for(let e=1;e<=t.length;e++)r[e+i]=s[e],o[e+i]=!0,i+=p(t[e-1])
+;e[n]=r,e[n]._emit=o,e[n]._multi=!0}function Z(e){(e=>{
+e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,
+delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={
+_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope
+}),(e=>{if(Array.isArray(e.begin)){
+if(e.skip||e.excludeBegin||e.returnBegin)throw W("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),
+K
+;if("object"!=typeof e.beginScope||null===e.beginScope)throw W("beginScope must be object"),
+K;F(e,e.begin,{key:"beginScope"}),e.begin=m(e.begin,{joinWith:""})}})(e),(e=>{
+if(Array.isArray(e.end)){
+if(e.skip||e.excludeEnd||e.returnEnd)throw W("skip, excludeEnd, returnEnd not compatible with endScope: {}"),
+K
+;if("object"!=typeof e.endScope||null===e.endScope)throw W("endScope must be object"),
+K;F(e,e.end,{key:"endScope"}),e.end=m(e.end,{joinWith:""})}})(e)}function V(e){
+function t(t,n){
+return RegExp(l(t),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(n?"g":""))
+}class n{constructor(){
+this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}
+addRule(e,t){
+t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),
+this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null)
+;const e=this.regexes.map((e=>e[1]));this.matcherRe=t(m(e,{joinWith:"|"
+}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex
+;const t=this.matcherRe.exec(e);if(!t)return null
+;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),i=this.matchIndexes[n]
+;return t.splice(0,n),Object.assign(t,i)}}class s{constructor(){
+this.rules=[],this.multiRegexes=[],
+this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){
+if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n
+;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))),
+t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){
+return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){
+this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){
+const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex
+;let n=t.exec(e)
+;if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{
+const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}
+return n&&(this.regexIndex+=n.position+1,
+this.regexIndex===this.count&&this.considerAll()),n}}
+if(e.compilerExtensions||(e.compilerExtensions=[]),
+e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.")
+;return e.classNameAliases=i(e.classNameAliases||{}),function n(o,r){const a=o
+;if(o.isCompiled)return a
+;[I,B,Z,D].forEach((e=>e(o,r))),e.compilerExtensions.forEach((e=>e(o,r))),
+o.__beforeBegin=null,[T,L,P].forEach((e=>e(o,r))),o.isCompiled=!0;let c=null
+;return"object"==typeof o.keywords&&o.keywords.$pattern&&(o.keywords=Object.assign({},o.keywords),
+c=o.keywords.$pattern,
+delete o.keywords.$pattern),c=c||/\w+/,o.keywords&&(o.keywords=$(o.keywords,e.case_insensitive)),
+a.keywordPatternRe=t(c,!0),
+r&&(o.begin||(o.begin=/\B|\b/),a.beginRe=t(a.begin),o.end||o.endsWithParent||(o.end=/\B|\b/),
+o.end&&(a.endRe=t(a.end)),
+a.terminatorEnd=l(a.end)||"",o.endsWithParent&&r.terminatorEnd&&(a.terminatorEnd+=(o.end?"|":"")+r.terminatorEnd)),
+o.illegal&&(a.illegalRe=t(o.illegal)),
+o.contains||(o.contains=[]),o.contains=[].concat(...o.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((t=>i(e,{
+variants:null},t)))),e.cachedVariants?e.cachedVariants:q(e)?i(e,{
+starts:e.starts?i(e.starts):null
+}):Object.isFrozen(e)?i(e):e))("self"===e?o:e)))),o.contains.forEach((e=>{n(e,a)
+})),o.starts&&n(o.starts,r),a.matcher=(e=>{const t=new s
+;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin"
+}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end"
+}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t})(a),a}(e)}function q(e){
+return!!e&&(e.endsWithParent||q(e.starts))}class J extends Error{
+constructor(e,t){super(e),this.name="HTMLInjectionError",this.html=t}}
+const Y=n,Q=i,ee=Symbol("nomatch"),te=n=>{
+const i=Object.create(null),s=Object.create(null),o=[];let r=!0
+;const a="Could not find the language '{}', did you forget to load/include a language module?",l={
+disableAutodetect:!0,name:"Plain text",contains:[]};let p={
+ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,
+languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",
+cssSelector:"pre code",languages:null,__emitter:c};function b(e){
+return p.noHighlightRe.test(e)}function m(e,t,n){let i="",s=""
+;"object"==typeof t?(i=e,
+n=t.ignoreIllegals,s=t.language):(G("10.7.0","highlight(lang, code, ...args) has been deprecated."),
+G("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),
+s=e,i=t),void 0===n&&(n=!0);const o={code:i,language:s};N("before:highlight",o)
+;const r=o.result?o.result:E(o.language,o.code,n)
+;return r.code=o.code,N("after:highlight",r),r}function E(e,n,s,o){
+const c=Object.create(null);function l(){if(!N.keywords)return void M.addText(R)
+;let e=0;N.keywordPatternRe.lastIndex=0;let t=N.keywordPatternRe.exec(R),n=""
+;for(;t;){n+=R.substring(e,t.index)
+;const s=_.case_insensitive?t[0].toLowerCase():t[0],o=(i=s,N.keywords[i]);if(o){
+const[e,i]=o
+;if(M.addText(n),n="",c[s]=(c[s]||0)+1,c[s]<=7&&(j+=i),e.startsWith("_"))n+=t[0];else{
+const n=_.classNameAliases[e]||e;u(t[0],n)}}else n+=t[0]
+;e=N.keywordPatternRe.lastIndex,t=N.keywordPatternRe.exec(R)}var i
+;n+=R.substring(e),M.addText(n)}function g(){null!=N.subLanguage?(()=>{
+if(""===R)return;let e=null;if("string"==typeof N.subLanguage){
+if(!i[N.subLanguage])return void M.addText(R)
+;e=E(N.subLanguage,R,!0,S[N.subLanguage]),S[N.subLanguage]=e._top
+}else e=x(R,N.subLanguage.length?N.subLanguage:null)
+;N.relevance>0&&(j+=e.relevance),M.__addSublanguage(e._emitter,e.language)
+})():l(),R=""}function u(e,t){
+""!==e&&(M.startScope(t),M.addText(e),M.endScope())}function d(e,t){let n=1
+;const i=t.length-1;for(;n<=i;){if(!e._emit[n]){n++;continue}
+const i=_.classNameAliases[e[n]]||e[n],s=t[n];i?u(s,i):(R=s,l(),R=""),n++}}
+function h(e,t){
+return e.scope&&"string"==typeof e.scope&&M.openNode(_.classNameAliases[e.scope]||e.scope),
+e.beginScope&&(e.beginScope._wrap?(u(R,_.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),
+R=""):e.beginScope._multi&&(d(e.beginScope,t),R="")),N=Object.create(e,{parent:{
+value:N}}),N}function f(e,n,i){let s=((e,t)=>{const n=e&&e.exec(t)
+;return n&&0===n.index})(e.endRe,i);if(s){if(e["on:end"]){const i=new t(e)
+;e["on:end"](n,i),i.isMatchIgnored&&(s=!1)}if(s){
+for(;e.endsParent&&e.parent;)e=e.parent;return e}}
+if(e.endsWithParent)return f(e.parent,n,i)}function b(e){
+return 0===N.matcher.regexIndex?(R+=e[0],1):(T=!0,0)}function m(e){
+const t=e[0],i=n.substring(e.index),s=f(N,e,i);if(!s)return ee;const o=N
+;N.endScope&&N.endScope._wrap?(g(),
+u(t,N.endScope._wrap)):N.endScope&&N.endScope._multi?(g(),
+d(N.endScope,e)):o.skip?R+=t:(o.returnEnd||o.excludeEnd||(R+=t),
+g(),o.excludeEnd&&(R=t));do{
+N.scope&&M.closeNode(),N.skip||N.subLanguage||(j+=N.relevance),N=N.parent
+}while(N!==s.parent);return s.starts&&h(s.starts,e),o.returnEnd?0:t.length}
+let w={};function y(i,o){const a=o&&o[0];if(R+=i,null==a)return g(),0
+;if("begin"===w.type&&"end"===o.type&&w.index===o.index&&""===a){
+if(R+=n.slice(o.index,o.index+1),!r){const t=Error(`0 width match regex (${e})`)
+;throw t.languageName=e,t.badRule=w.rule,t}return 1}
+if(w=o,"begin"===o.type)return(e=>{
+const n=e[0],i=e.rule,s=new t(i),o=[i.__beforeBegin,i["on:begin"]]
+;for(const t of o)if(t&&(t(e,s),s.isMatchIgnored))return b(n)
+;return i.skip?R+=n:(i.excludeBegin&&(R+=n),
+g(),i.returnBegin||i.excludeBegin||(R=n)),h(i,e),i.returnBegin?0:n.length})(o)
+;if("illegal"===o.type&&!s){
+const e=Error('Illegal lexeme "'+a+'" for mode "'+(N.scope||"")+'"')
+;throw e.mode=N,e}if("end"===o.type){const e=m(o);if(e!==ee)return e}
+if("illegal"===o.type&&""===a)return 1
+;if(I>1e5&&I>3*o.index)throw Error("potential infinite loop, way more iterations than matches")
+;return R+=a,a.length}const _=O(e)
+;if(!_)throw W(a.replace("{}",e)),Error('Unknown language: "'+e+'"')
+;const v=V(_);let k="",N=o||v;const S={},M=new p.__emitter(p);(()=>{const e=[]
+;for(let t=N;t!==_;t=t.parent)t.scope&&e.unshift(t.scope)
+;e.forEach((e=>M.openNode(e)))})();let R="",j=0,A=0,I=0,T=!1;try{
+if(_.__emitTokens)_.__emitTokens(n,M);else{for(N.matcher.considerAll();;){
+I++,T?T=!1:N.matcher.considerAll(),N.matcher.lastIndex=A
+;const e=N.matcher.exec(n);if(!e)break;const t=y(n.substring(A,e.index),e)
+;A=e.index+t}y(n.substring(A))}return M.finalize(),k=M.toHTML(),{language:e,
+value:k,relevance:j,illegal:!1,_emitter:M,_top:N}}catch(t){
+if(t.message&&t.message.includes("Illegal"))return{language:e,value:Y(n),
+illegal:!0,relevance:0,_illegalBy:{message:t.message,index:A,
+context:n.slice(A-100,A+100),mode:t.mode,resultSoFar:k},_emitter:M};if(r)return{
+language:e,value:Y(n),illegal:!1,relevance:0,errorRaised:t,_emitter:M,_top:N}
+;throw t}}function x(e,t){t=t||p.languages||Object.keys(i);const n=(e=>{
+const t={value:Y(e),illegal:!1,relevance:0,_top:l,_emitter:new p.__emitter(p)}
+;return t._emitter.addText(e),t})(e),s=t.filter(O).filter(k).map((t=>E(t,e,!1)))
+;s.unshift(n);const o=s.sort(((e,t)=>{
+if(e.relevance!==t.relevance)return t.relevance-e.relevance
+;if(e.language&&t.language){if(O(e.language).supersetOf===t.language)return 1
+;if(O(t.language).supersetOf===e.language)return-1}return 0})),[r,a]=o,c=r
+;return c.secondBest=a,c}function w(e){let t=null;const n=(e=>{
+let t=e.className+" ";t+=e.parentNode?e.parentNode.className:""
+;const n=p.languageDetectRe.exec(t);if(n){const t=O(n[1])
+;return t||(X(a.replace("{}",n[1])),
+X("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"}
+return t.split(/\s+/).find((e=>b(e)||O(e)))})(e);if(b(n))return
+;if(N("before:highlightElement",{el:e,language:n
+}),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e)
+;if(e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),
+console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),
+console.warn("The element with unescaped HTML:"),
+console.warn(e)),p.throwUnescapedHTML))throw new J("One of your code blocks includes unescaped HTML.",e.innerHTML)
+;t=e;const i=t.textContent,o=n?m(i,{language:n,ignoreIllegals:!0}):x(i)
+;e.innerHTML=o.value,e.dataset.highlighted="yes",((e,t,n)=>{const i=t&&s[t]||n
+;e.classList.add("hljs"),e.classList.add("language-"+i)
+})(e,n,o.language),e.result={language:o.language,re:o.relevance,
+relevance:o.relevance},o.secondBest&&(e.secondBest={
+language:o.secondBest.language,relevance:o.secondBest.relevance
+}),N("after:highlightElement",{el:e,result:o,text:i})}let y=!1;function _(){
+"loading"!==document.readyState?document.querySelectorAll(p.cssSelector).forEach(w):y=!0
+}function O(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}
+function v(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{
+s[e.toLowerCase()]=t}))}function k(e){const t=O(e)
+;return t&&!t.disableAutodetect}function N(e,t){const n=e;o.forEach((e=>{
+e[n]&&e[n](t)}))}
+"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(()=>{
+y&&_()}),!1),Object.assign(n,{highlight:m,highlightAuto:x,highlightAll:_,
+highlightElement:w,
+highlightBlock:e=>(G("10.7.0","highlightBlock will be removed entirely in v12.0"),
+G("10.7.0","Please use highlightElement now."),w(e)),configure:e=>{p=Q(p,e)},
+initHighlighting:()=>{
+_(),G("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")},
+initHighlightingOnLoad:()=>{
+_(),G("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")
+},registerLanguage:(e,t)=>{let s=null;try{s=t(n)}catch(t){
+if(W("Language definition for '{}' could not be registered.".replace("{}",e)),
+!r)throw t;W(t),s=l}
+s.name||(s.name=e),i[e]=s,s.rawDefinition=t.bind(null,n),s.aliases&&v(s.aliases,{
+languageName:e})},unregisterLanguage:e=>{delete i[e]
+;for(const t of Object.keys(s))s[t]===e&&delete s[t]},
+listLanguages:()=>Object.keys(i),getLanguage:O,registerAliases:v,
+autoDetection:k,inherit:Q,addPlugin:e=>{(e=>{
+e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{
+e["before:highlightBlock"](Object.assign({block:t.el},t))
+}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{
+e["after:highlightBlock"](Object.assign({block:t.el},t))})})(e),o.push(e)},
+removePlugin:e=>{const t=o.indexOf(e);-1!==t&&o.splice(t,1)}}),n.debugMode=()=>{
+r=!1},n.safeMode=()=>{r=!0},n.versionString="11.10.0",n.regex={concat:h,
+lookahead:g,either:f,optional:d,anyNumberOfTimes:u}
+;for(const t in j)"object"==typeof j[t]&&e(j[t]);return Object.assign(n,j),n
+},ne=te({});return ne.newInstance=()=>te({}),ne}()
+;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);/*! `bash` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{const s=e.regex,t={},n={begin:/\$\{/,
+end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]};Object.assign(t,{
+className:"variable",variants:[{
+begin:s.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},n]});const a={
+className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]
+},i=e.inherit(e.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),c={
+begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,
+end:/(\w+)/,className:"string"})]}},o={className:"string",begin:/"/,end:/"/,
+contains:[e.BACKSLASH_ESCAPE,t,a]};a.contains.push(o);const r={begin:/\$?\(\(/,
+end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t]
+},l=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10
+}),m={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,
+contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{
+name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,
+keyword:["if","then","else","elif","fi","for","while","until","in","do","done","case","esac","function","select"],
+literal:["true","false"],
+built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"]
+},contains:[l,e.SHEBANG(),m,r,i,c,{match:/(\/[a-z._-]+)+/},o,{match:/\\"/},{
+className:"string",begin:/'/,end:/'/},{match:/\\'/},t]}}})()
+;hljs.registerLanguage("bash",e)})();/*! `c` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{const n=e.regex,t=e.COMMENT("//","$",{
+contains:[{begin:/\\\n/}]
+}),a="decltype\\(auto\\)",s="[a-zA-Z_]\\w*::",i="("+a+"|"+n.optional(s)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",r={
+className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{
+match:/\batomic_[a-z]{3,6}\b/}]},l={className:"string",variants:[{
+begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{
+begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",
+end:"'",illegal:"."},e.END_SAME_AS_BEGIN({
+begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},o={
+className:"number",variants:[{begin:"\\b(0b[01']+)"},{
+begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"
+},{
+begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"
+}],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{
+keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef elifdef elifndef include"
+},contains:[{begin:/\\\n/,relevance:0},e.inherit(l,{className:"string"}),{
+className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={
+className:"title",begin:n.optional(s)+e.IDENT_RE,relevance:0
+},_=n.optional(s)+e.IDENT_RE+"\\s*\\(",u={
+keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","typeof","typeof_unqual","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"],
+type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_BitInt","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal96","_Decimal128","_Decimal64x","_Decimal128x","_Float16","_Float32","_Float64","_Float128","_Float32x","_Float64x","_Float128x","const","static","constexpr","complex","bool","imaginary"],
+literal:"true false NULL",
+built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr"
+},g=[c,r,t,e.C_BLOCK_COMMENT_MODE,o,l],m={variants:[{begin:/=/,end:/;/},{
+begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],
+keywords:u,contains:g.concat([{begin:/\(/,end:/\)/,keywords:u,
+contains:g.concat(["self"]),relevance:0}]),relevance:0},p={
+begin:"("+i+"[\\*&\\s]+)+"+_,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,
+keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:u,relevance:0},{
+begin:_,returnBegin:!0,contains:[e.inherit(d,{className:"title.function"})],
+relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,
+keywords:u,relevance:0,contains:[t,e.C_BLOCK_COMMENT_MODE,l,o,r,{begin:/\(/,
+end:/\)/,keywords:u,relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,l,o,r]
+}]},r,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C",aliases:["h"],keywords:u,
+disableAutodetect:!0,illegal:"",contains:[].concat(m,p,g,[c,{
+begin:e.IDENT_RE+"::",keywords:u},{className:"class",
+beginKeywords:"enum class struct union",end:/[{;:<>=]/,contains:[{
+beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:c,
+strings:l,keywords:u}}}})();hljs.registerLanguage("c",e)})();/*! `cpp` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{const t=e.regex,a=e.COMMENT("//","$",{
+contains:[{begin:/\\\n/}]
+}),n="decltype\\(auto\\)",r="[a-zA-Z_]\\w*::",i="(?!struct)("+n+"|"+t.optional(r)+"[a-zA-Z_]\\w*"+t.optional("<[^<>]+>")+")",s={
+className:"type",begin:"\\b[a-z\\d_]*_t\\b"},c={className:"string",variants:[{
+begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{
+begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",
+end:"'",illegal:"."},e.END_SAME_AS_BEGIN({
+begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},o={
+className:"number",variants:[{
+begin:"[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)"
+},{
+begin:"[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)"
+}],relevance:0},l={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{
+keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"
+},contains:[{begin:/\\\n/,relevance:0},e.inherit(c,{className:"string"}),{
+className:"string",begin:/<.*?>/},a,e.C_BLOCK_COMMENT_MODE]},u={
+className:"title",begin:t.optional(r)+e.IDENT_RE,relevance:0
+},d=t.optional(r)+e.IDENT_RE+"\\s*\\(",p={
+type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],
+keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],
+literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],
+_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"]
+},_={className:"function.dispatch",relevance:0,keywords:{
+_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"]
+},
+begin:t.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,t.lookahead(/(<[^<>]+>|)\s*\(/))
+},m=[_,l,s,a,e.C_BLOCK_COMMENT_MODE,o,c],f={variants:[{begin:/=/,end:/;/},{
+begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],
+keywords:p,contains:m.concat([{begin:/\(/,end:/\)/,keywords:p,
+contains:m.concat(["self"]),relevance:0}]),relevance:0},g={className:"function",
+begin:"("+i+"[\\*&\\s]+)+"+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,
+keywords:p,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:n,keywords:p,relevance:0},{
+begin:d,returnBegin:!0,contains:[u],relevance:0},{begin:/::/,relevance:0},{
+begin:/:/,endsWithParent:!0,contains:[c,o]},{relevance:0,match:/,/},{
+className:"params",begin:/\(/,end:/\)/,keywords:p,relevance:0,
+contains:[a,e.C_BLOCK_COMMENT_MODE,c,o,s,{begin:/\(/,end:/\)/,keywords:p,
+relevance:0,contains:["self",a,e.C_BLOCK_COMMENT_MODE,c,o,s]}]
+},s,a,e.C_BLOCK_COMMENT_MODE,l]};return{name:"C++",
+aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:p,illegal:"",
+classNameAliases:{"function.dispatch":"built_in"},
+contains:[].concat(f,g,_,m,[l,{
+begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\s*<(?!<)",
+end:">",keywords:p,contains:["self",s]},{begin:e.IDENT_RE+"::",keywords:p},{
+match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],
+className:{1:"keyword",3:"title.class"}}])}}})();hljs.registerLanguage("cpp",e)
+})();/*! `csharp` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{const n={
+keyword:["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","async","await","by","descending","equals","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","remove","select","set","unmanaged","value|0","var","when","where","with","yield"]),
+built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"],
+literal:["default","false","null","true"]},a=e.inherit(e.TITLE_MODE,{
+begin:"[a-zA-Z](\\.?\\w)*"}),i={className:"number",variants:[{
+begin:"\\b(0b[01']+)"},{
+begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{
+begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"
+}],relevance:0},s={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]
+},t=e.inherit(s,{illegal:/\n/}),r={className:"subst",begin:/\{/,end:/\}/,
+keywords:n},l=e.inherit(r,{illegal:/\n/}),c={className:"string",begin:/\$"/,
+end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/
+},e.BACKSLASH_ESCAPE,l]},o={className:"string",begin:/\$@"/,end:'"',contains:[{
+begin:/\{\{/},{begin:/\}\}/},{begin:'""'},r]},d=e.inherit(o,{illegal:/\n/,
+contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},l]})
+;r.contains=[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,e.C_BLOCK_COMMENT_MODE],
+l.contains=[d,c,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,e.inherit(e.C_BLOCK_COMMENT_MODE,{
+illegal:/\n/})];const g={variants:[{className:"string",
+begin:/"""("*)(?!")(.|\n)*?"""\1/,relevance:1
+},o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},E={begin:"<",end:">",
+contains:[{beginKeywords:"in out"},a]
+},_=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",b={
+begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],
+keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,
+contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{
+begin:"\x3c!--|--\x3e"},{begin:"?",end:">"}]}]
+}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",
+end:"$",keywords:{
+keyword:"if else elif endif define undef warning error line region endregion pragma checksum"
+}},g,i,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,
+illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"
+},a,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",
+relevance:0,end:/[{;=]/,illegal:/[^\s:]/,
+contains:[a,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{
+beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,
+contains:[a,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",
+begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{
+className:"string",begin:/"/,end:/"/}]},{
+beginKeywords:"new return throw await else",relevance:0},{className:"function",
+begin:"("+_+"\\s+)+"+e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,
+end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{
+beginKeywords:"public private protected static internal protected abstract async extern override unsafe virtual new sealed partial",
+relevance:0},{begin:e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,
+contains:[e.TITLE_MODE,E],relevance:0},{match:/\(\)/},{className:"params",
+begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,
+contains:[g,i,e.C_BLOCK_COMMENT_MODE]
+},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},b]}}})()
+;hljs.registerLanguage("csharp",e)})();/*! `css` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict"
+;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video","defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],r=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),t=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),i=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),o=["accent-color","align-content","align-items","align-self","alignment-baseline","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-end-end-radius","border-end-start-radius","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","cx","cy","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","empty-cells","enable-background","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","flood-color","flood-opacity","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","inset","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","kerning","justify-content","justify-items","justify-self","left","letter-spacing","lighting-color","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","marker","marker-end","marker-mid","marker-start","mask","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","scale","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","speak","speak-as","src","tab-size","table-layout","text-anchor","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-offset","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","vector-effect","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index"].sort().reverse()
+;return n=>{const a=n.regex,l=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},
+BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",
+begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{
+className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{
+scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",
+contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{
+scope:"number",
+begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",
+relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}
+}))(n),s=[n.APOS_STRING_MODE,n.QUOTE_STRING_MODE];return{name:"CSS",
+case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},
+classNameAliases:{keyframePosition:"selector-tag"},contains:[l.BLOCK_COMMENT,{
+begin:/-(webkit|moz|ms|o)-(?=[a-z])/},l.CSS_NUMBER_MODE,{
+className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{
+className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0
+},l.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{
+begin:":("+t.join("|")+")"},{begin:":(:)?("+i.join("|")+")"}]},l.CSS_VARIABLE,{
+className:"attribute",begin:"\\b("+o.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,
+contains:[l.BLOCK_COMMENT,l.HEXCOLOR,l.IMPORTANT,l.CSS_NUMBER_MODE,...s,{
+begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"
+},contains:[...s,{className:"string",begin:/[^)]/,endsWithParent:!0,
+excludeEnd:!0}]},l.FUNCTION_DISPATCH]},{begin:a.lookahead(/@/),end:"[{;]",
+relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/
+},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{
+$pattern:/[a-z-]+/,keyword:"and or not only",attribute:r.join(" ")},contains:[{
+begin:/[a-z-]+(?=:)/,className:"attribute"},...s,l.CSS_NUMBER_MODE]}]},{
+className:"selector-tag",begin:"\\b("+e.join("|")+")\\b"}]}}})()
+;hljs.registerLanguage("css",e)})();/*! `diff` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{const a=e.regex;return{name:"Diff",
+aliases:["patch"],contains:[{className:"meta",relevance:10,
+match:a.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)
+},{className:"comment",variants:[{
+begin:a.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),
+end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{
+className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,
+end:/$/}]}}})();hljs.registerLanguage("diff",e)})();/*! `go` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{const a={
+keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"],
+type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"],
+literal:["true","false","iota","nil"],
+built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"]
+};return{name:"Go",aliases:["golang"],keywords:a,illegal:"",
+contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",
+variants:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{begin:"`",end:"`"}]},{
+className:"number",variants:[{
+match:/-?\b0[xX]\.[a-fA-F0-9](_?[a-fA-F0-9])*[pP][+-]?\d(_?\d)*i?/,relevance:0
+},{
+match:/-?\b0[xX](_?[a-fA-F0-9])+((\.([a-fA-F0-9](_?[a-fA-F0-9])*)?)?[pP][+-]?\d(_?\d)*)?i?/,
+relevance:0},{match:/-?\b0[oO](_?[0-7])*i?/,relevance:0},{
+match:/-?\.\d(_?\d)*([eE][+-]?\d(_?\d)*)?i?/,relevance:0},{
+match:/-?\b\d(_?\d)*(\.(\d(_?\d)*)?)?([eE][+-]?\d(_?\d)*)?i?/,relevance:0}]},{
+begin:/:=/},{className:"function",beginKeywords:"func",end:"\\s*(\\{|$)",
+excludeEnd:!0,contains:[e.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,
+endsParent:!0,keywords:a,illegal:/["']/}]}]}}})();hljs.registerLanguage("go",e)
+})();/*! `graphql` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{const a=e.regex;return{name:"GraphQL",
+aliases:["gql"],case_insensitive:!0,disableAutodetect:!1,keywords:{
+keyword:["query","mutation","subscription","type","input","schema","directive","interface","union","scalar","fragment","enum","on"],
+literal:["true","false","null"]},
+contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{
+scope:"punctuation",match:/[.]{3}/,relevance:0},{scope:"punctuation",
+begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:"variable",begin:/\$/,
+end:/\W/,excludeEnd:!0,relevance:0},{scope:"meta",match:/@\w+/,excludeEnd:!0},{
+scope:"symbol",begin:a.concat(/[_A-Za-z][_0-9A-Za-z]*/,a.lookahead(/\s*:/)),
+relevance:0}],illegal:[/[;<']/,/BEGIN/]}}})();hljs.registerLanguage("graphql",e)
+})();/*! `ini` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{const n=e.regex,a={className:"number",
+relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{begin:e.NUMBER_RE}]
+},s=e.COMMENT();s.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];const i={
+className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)\}/
+}]},t={className:"literal",begin:/\bon|off|true|false|yes|no\b/},r={
+className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",
+end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'
+},{begin:"'",end:"'"}]},l={begin:/\[/,end:/\]/,contains:[s,t,i,r,a,"self"],
+relevance:0},c=n.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{
+name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,
+contains:[s,{className:"section",begin:/\[+/,end:/\]+/},{
+begin:n.concat(c,"(\\s*\\.\\s*",c,")*",n.lookahead(/\s*=\s*[^#\s]/)),
+className:"attr",starts:{end:/$/,contains:[s,l,t,i,r,a]}}]}}})()
+;hljs.registerLanguage("ini",e)})();/*! `java` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict"
+;var e="[0-9](_*[0-9])*",a=`\\.(${e})`,n="[0-9a-fA-F](_*[0-9a-fA-F])*",s={
+className:"number",variants:[{
+begin:`(\\b(${e})((${a})|\\.)?|(${a}))[eE][+-]?(${e})[fFdD]?\\b`},{
+begin:`\\b(${e})((${a})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${a})[fFdD]?\\b`
+},{begin:`\\b(${e})[fFdD]\\b`},{
+begin:`\\b0[xX]((${n})\\.?|(${n})?\\.(${n}))[pP][+-]?(${e})[fFdD]?\\b`},{
+begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${n})[lL]?\\b`},{
+begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],
+relevance:0};function t(e,a,n){return-1===n?"":e.replace(a,(s=>t(e,a,n-1)))}
+return e=>{
+const a=e.regex,n="[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*",i=n+t("(?:<"+n+"~~~(?:\\s*,\\s*"+n+"~~~)*>)?",/~~~/g,2),r={
+keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits","goto"],
+literal:["false","true","null"],
+type:["char","boolean","long","float","int","byte","short","double"],
+built_in:["super","this"]},l={className:"meta",begin:"@"+n,contains:[{
+begin:/\(/,end:/\)/,contains:["self"]}]},c={className:"params",begin:/\(/,
+end:/\)/,keywords:r,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0}
+;return{name:"Java",aliases:["jsp"],keywords:r,illegal:/<\/|#/,
+contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,
+relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{
+begin:/import java\.[a-z]+\./,keywords:"import",relevance:2
+},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,
+className:"string",contains:[e.BACKSLASH_ESCAPE]
+},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{
+match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,n],className:{
+1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{
+begin:[a.concat(/(?!else)/,n),/\s+/,n,/\s+/,/=(?!=)/],className:{1:"type",
+3:"variable",5:"operator"}},{begin:[/record/,/\s+/,n],className:{1:"keyword",
+3:"title.class"},contains:[c,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{
+beginKeywords:"new throw return else",relevance:0},{
+begin:["(?:"+i+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{
+2:"title.function"},keywords:r,contains:[{className:"params",begin:/\(/,
+end:/\)/,keywords:r,relevance:0,
+contains:[l,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,s,e.C_BLOCK_COMMENT_MODE]
+},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},s,l]}}})()
+;hljs.registerLanguage("java",e)})();/*! `javascript` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict"
+;const e="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],a=["true","false","null","undefined","NaN","Infinity"],t=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],s=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],r=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],c=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],i=[].concat(r,t,s)
+;return o=>{const l=o.regex,b=e,d={begin:/<[A-Za-z0-9\\._:-]+/,
+end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{
+const a=e[0].length+e.index,t=e.input[a]
+;if("<"===t||","===t)return void n.ignoreMatch();let s
+;">"===t&&(((e,{after:n})=>{const a=""+e[0].slice(1)
+;return-1!==e.input.indexOf(a,n)})(e,{after:a})||n.ignoreMatch())
+;const r=e.input.substring(a)
+;((s=r.match(/^\s*=/))||(s=r.match(/^\s+extends\s+/))&&0===s.index)&&n.ignoreMatch()
+}},g={$pattern:e,keyword:n,literal:a,built_in:i,"variable.language":c
+},u="[0-9](_?[0-9])*",m=`\\.(${u})`,E="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",A={
+className:"number",variants:[{
+begin:`(\\b(${E})((${m})|\\.)?|(${m}))[eE][+-]?(${u})\\b`},{
+begin:`\\b(${E})\\b((${m})\\b|\\.)?|(${m})\\b`},{
+begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{
+begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{
+begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{
+begin:"\\b0[0-7]+n?\\b"}],relevance:0},y={className:"subst",begin:"\\$\\{",
+end:"\\}",keywords:g,contains:[]},h={begin:".?html`",end:"",starts:{end:"`",
+returnEnd:!1,contains:[o.BACKSLASH_ESCAPE,y],subLanguage:"xml"}},N={
+begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,
+contains:[o.BACKSLASH_ESCAPE,y],subLanguage:"css"}},_={begin:".?gql`",end:"",
+starts:{end:"`",returnEnd:!1,contains:[o.BACKSLASH_ESCAPE,y],
+subLanguage:"graphql"}},f={className:"string",begin:"`",end:"`",
+contains:[o.BACKSLASH_ESCAPE,y]},p={className:"comment",
+variants:[o.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{
+begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",
+begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,
+excludeBegin:!0,relevance:0},{className:"variable",begin:b+"(?=\\s*(-)|$)",
+endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]
+}),o.C_BLOCK_COMMENT_MODE,o.C_LINE_COMMENT_MODE]
+},v=[o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,h,N,_,f,{match:/\$\d+/},A]
+;y.contains=v.concat({begin:/\{/,end:/\}/,keywords:g,contains:["self"].concat(v)
+});const S=[].concat(p,y.contains),w=S.concat([{begin:/(\s*)\(/,end:/\)/,
+keywords:g,contains:["self"].concat(S)}]),R={className:"params",begin:/(\s*)\(/,
+end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:g,contains:w},O={variants:[{
+match:[/class/,/\s+/,b,/\s+/,/extends/,/\s+/,l.concat(b,"(",l.concat(/\./,b),")*")],
+scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{
+match:[/class/,/\s+/,b],scope:{1:"keyword",3:"title.class"}}]},k={relevance:0,
+match:l.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),
+className:"title.class",keywords:{_:[...t,...s]}},I={variants:[{
+match:[/function/,/\s+/,b,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],
+className:{1:"keyword",3:"title.function"},label:"func.def",contains:[R],
+illegal:/%/},x={
+match:l.concat(/\b/,(T=[...r,"super","import"].map((e=>e+"\\s*\\(")),
+l.concat("(?!",T.join("|"),")")),b,l.lookahead(/\s*\(/)),
+className:"title.function",relevance:0};var T;const C={
+begin:l.concat(/\./,l.lookahead(l.concat(b,/(?![0-9A-Za-z$_(])/))),end:b,
+excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},M={
+match:[/get|set/,/\s+/,b,/(?=\()/],className:{1:"keyword",3:"title.function"},
+contains:[{begin:/\(\)/},R]
+},B="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+o.UNDERSCORE_IDENT_RE+")\\s*=>",$={
+match:[/const|var|let/,/\s+/,b,/\s*/,/=\s*/,/(async\s*)?/,l.lookahead(B)],
+keywords:"async",className:{1:"keyword",3:"title.function"},contains:[R]}
+;return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:g,exports:{
+PARAMS_CONTAINS:w,CLASS_REFERENCE:k},illegal:/#(?![$_A-z])/,
+contains:[o.SHEBANG({label:"shebang",binary:"node",relevance:5}),{
+label:"use_strict",className:"meta",relevance:10,
+begin:/^\s*['"]use (strict|asm)['"]/
+},o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,h,N,_,f,p,{match:/\$\d+/},A,k,{
+className:"attr",begin:b+l.lookahead(":"),relevance:0},$,{
+begin:"("+o.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",
+keywords:"return throw case",relevance:0,contains:[p,o.REGEXP_MODE,{
+className:"function",begin:B,returnBegin:!0,end:"\\s*=>",contains:[{
+className:"params",variants:[{begin:o.UNDERSCORE_IDENT_RE,relevance:0},{
+className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,
+excludeBegin:!0,excludeEnd:!0,keywords:g,contains:w}]}]},{begin:/,/,relevance:0
+},{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:">"},{
+match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:d.begin,
+"on:begin":d.isTrulyOpeningTag,end:d.end}],subLanguage:"xml",contains:[{
+begin:d.begin,end:d.end,skip:!0,contains:["self"]}]}]},I,{
+beginKeywords:"while if switch catch for"},{
+begin:"\\b(?!function)"+o.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",
+returnBegin:!0,label:"func.def",contains:[R,o.inherit(o.TITLE_MODE,{begin:b,
+className:"title.function"})]},{match:/\.\.\./,relevance:0},C,{match:"\\$"+b,
+relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},
+contains:[R]},x,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,
+className:"variable.constant"},O,M,{match:/\$[(.]/}]}}})()
+;hljs.registerLanguage("javascript",e)})();/*! `json` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{const a=["true","false","null"],s={
+scope:"literal",beginKeywords:a.join(" ")};return{name:"JSON",aliases:["jsonc"],
+keywords:{literal:a},contains:[{className:"attr",
+begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},{match:/[{}[\],:]/,
+className:"punctuation",relevance:0
+},e.QUOTE_STRING_MODE,s,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],
+illegal:"\\S"}}})();hljs.registerLanguage("json",e)})();/*! `kotlin` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict"
+;var e="[0-9](_*[0-9])*",n=`\\.(${e})`,a="[0-9a-fA-F](_*[0-9a-fA-F])*",i={
+className:"number",variants:[{
+begin:`(\\b(${e})((${n})|\\.)?|(${n}))[eE][+-]?(${e})[fFdD]?\\b`},{
+begin:`\\b(${e})((${n})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${n})[fFdD]?\\b`
+},{begin:`\\b(${e})[fFdD]\\b`},{
+begin:`\\b0[xX]((${a})\\.?|(${a})?\\.(${a}))[pP][+-]?(${e})[fFdD]?\\b`},{
+begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${a})[lL]?\\b`},{
+begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],
+relevance:0};return e=>{const n={
+keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",
+built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",
+literal:"true false null"},a={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"
+},s={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},t={
+className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},r={className:"string",
+variants:[{begin:'"""',end:'"""(?=[^"])',contains:[t,s]},{begin:"'",end:"'",
+illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,
+contains:[e.BACKSLASH_ESCAPE,t,s]}]};s.contains.push(r);const l={
+className:"meta",
+begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"
+},c={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,
+end:/\)/,contains:[e.inherit(r,{className:"string"}),"self"]}]
+},o=i,b=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),E={
+variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,
+contains:[]}]},d=E;return d.variants[1].contains=[E],E.variants[1].contains=[d],
+{name:"Kotlin",aliases:["kt","kts"],keywords:n,
+contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",
+begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,b,{className:"keyword",
+begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",
+begin:/@\w+/}]}},a,l,c,{className:"function",beginKeywords:"fun",end:"[(]|$",
+returnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:[{
+begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,
+contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin:/,end:/>/,
+keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,
+endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,
+endsWithParent:!0,contains:[E,e.C_LINE_COMMENT_MODE,b],relevance:0
+},e.C_LINE_COMMENT_MODE,b,l,c,r,e.C_NUMBER_MODE]},b]},{
+begin:[/class|interface|trait/,/\s+/,e.UNDERSCORE_IDENT_RE],beginScope:{
+3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,
+illegal:"extends implements",contains:[{
+beginKeywords:"public protected internal private constructor"
+},e.UNDERSCORE_TITLE_MODE,{className:"type",begin:/,end:/>/,excludeBegin:!0,
+excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/,
+excludeBegin:!0,returnEnd:!0},l,c]},r,{className:"meta",begin:"^#!/usr/bin/env",
+end:"$",illegal:"\n"},o]}}})();hljs.registerLanguage("kotlin",e)})();/*! `less` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict"
+;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video","defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],t=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),r=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),i=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),o=["accent-color","align-content","align-items","align-self","alignment-baseline","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-end-end-radius","border-end-start-radius","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","cx","cy","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","empty-cells","enable-background","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","flood-color","flood-opacity","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","inset","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","kerning","justify-content","justify-items","justify-self","left","letter-spacing","lighting-color","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","marker","marker-end","marker-mid","marker-start","mask","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","scale","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","speak","speak-as","src","tab-size","table-layout","text-anchor","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-offset","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","vector-effect","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index"].sort().reverse(),n=r.concat(i).sort().reverse()
+;return a=>{const l=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},
+BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",
+begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{
+className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{
+scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",
+contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{
+scope:"number",
+begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",
+relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}
+}))(a),s=n,d="[\\w-]+",c="("+d+"|@\\{"+d+"\\})",g=[],b=[],m=e=>({
+className:"string",begin:"~?"+e+".*?"+e}),p=(e,t,r)=>({className:e,begin:t,
+relevance:r}),f={$pattern:/[a-z-]+/,keyword:"and or not only",
+attribute:t.join(" ")},u={begin:"\\(",end:"\\)",contains:b,keywords:f,
+relevance:0}
+;b.push(a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,m("'"),m('"'),l.CSS_NUMBER_MODE,{
+begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",
+excludeEnd:!0}
+},l.HEXCOLOR,u,p("variable","@@?"+d,10),p("variable","@\\{"+d+"\\}"),p("built_in","~?`[^`]*?`"),{
+className:"attribute",begin:d+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0
+},l.IMPORTANT,{beginKeywords:"and not"},l.FUNCTION_DISPATCH);const h=b.concat({
+begin:/\{/,end:/\}/,contains:g}),k={beginKeywords:"when",endsWithParent:!0,
+contains:[{beginKeywords:"and not"}].concat(b)},v={begin:c+"\\s*:",
+returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/
+},l.CSS_VARIABLE,{className:"attribute",begin:"\\b("+o.join("|")+")\\b",
+end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:b}}]
+},y={className:"keyword",
+begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",
+starts:{end:"[;{}]",keywords:f,returnEnd:!0,contains:b,relevance:0}},w={
+className:"variable",variants:[{begin:"@"+d+"\\s*:",relevance:15},{begin:"@"+d
+}],starts:{end:"[;}]",returnEnd:!0,contains:h}},x={variants:[{
+begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:c,end:/\{/}],returnBegin:!0,
+returnEnd:!0,illegal:"[<='$\"]",relevance:0,
+contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,k,p("keyword","all\\b"),p("variable","@\\{"+d+"\\}"),{
+begin:"\\b("+e.join("|")+")\\b",className:"selector-tag"
+},l.CSS_NUMBER_MODE,p("selector-tag",c,0),p("selector-id","#"+c),p("selector-class","\\."+c,0),p("selector-tag","&",0),l.ATTRIBUTE_SELECTOR_MODE,{
+className:"selector-pseudo",begin:":("+r.join("|")+")"},{
+className:"selector-pseudo",begin:":(:)?("+i.join("|")+")"},{begin:/\(/,
+end:/\)/,relevance:0,contains:h},{begin:"!important"},l.FUNCTION_DISPATCH]},_={
+begin:d+":(:)?"+`(${s.join("|")})`,returnBegin:!0,contains:[x]}
+;return g.push(a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,y,w,_,v,x,k,l.FUNCTION_DISPATCH),
+{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:g}}})()
+;hljs.registerLanguage("less",e)})();/*! `lua` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{const t="\\[=*\\[",a="\\]=*\\]",n={
+begin:t,end:a,contains:["self"]
+},o=[e.COMMENT("--(?!"+t+")","$"),e.COMMENT("--"+t,a,{contains:[n],relevance:10
+})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE,
+literal:"true false nil",
+keyword:"and break do else elseif end for goto if in local not or repeat return then until while",
+built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"
+},contains:o.concat([{className:"function",beginKeywords:"function",end:"\\)",
+contains:[e.inherit(e.TITLE_MODE,{
+begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",
+begin:"\\(",endsWithParent:!0,contains:o}].concat(o)
+},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",
+begin:t,end:a,contains:[n],relevance:5}])}}})();hljs.registerLanguage("lua",e)
+})();/*! `makefile` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{const i={className:"variable",
+variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",
+contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%\^\+\*]/}]},a={className:"string",
+begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,i]},n={className:"variable",
+begin:/\$\([\w-]+\s/,end:/\)/,keywords:{
+built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"
+},contains:[i]},s={begin:"^"+e.UNDERSCORE_IDENT_RE+"\\s*(?=[:+?]?=)"},r={
+className:"section",begin:/^[^\s]+:/,end:/$/,contains:[i]};return{
+name:"Makefile",aliases:["mk","mak","make"],keywords:{$pattern:/[\w-]+/,
+keyword:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath"
+},contains:[e.HASH_COMMENT_MODE,i,a,n,s,{className:"meta",begin:/^\.PHONY:/,
+end:/$/,keywords:{$pattern:/[\.\w]+/,keyword:".PHONY"}},r]}}})()
+;hljs.registerLanguage("makefile",e)})();/*! `markdown` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{const n={begin:/<\/?[A-Za-z_]/,
+end:">",subLanguage:"xml",relevance:0},a={variants:[{begin:/\[.+?\]\[.*?\]/,
+relevance:0},{
+begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,
+relevance:2},{
+begin:e.regex.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/),
+relevance:2},{begin:/\[.+?\]\([./?].*?\)/,relevance:1},{
+begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/
+},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,
+returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",
+excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",
+end:"\\]",excludeBegin:!0,excludeEnd:!0}]},i={className:"strong",contains:[],
+variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]
+},s={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{
+begin:/_(?![_\s])/,end:/_/,relevance:0}]},c=e.inherit(i,{contains:[]
+}),t=e.inherit(s,{contains:[]});i.contains.push(t),s.contains.push(c)
+;let g=[n,a];return[i,s,c,t].forEach((e=>{e.contains=e.contains.concat(g)
+})),g=g.concat(i,s),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{
+className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:g},{
+begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",
+contains:g}]}]},n,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",
+end:"\\s+",excludeEnd:!0},i,s,{className:"quote",begin:"^>\\s+",contains:g,
+end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{
+begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{
+begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",
+contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{
+begin:"^[-\\*]{3,}",end:"$"},a,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{
+className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{
+className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},{scope:"literal",
+match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}})()
+;hljs.registerLanguage("markdown",e)})();/*! `objectivec` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{const n=/[a-zA-Z@][a-zA-Z0-9_]*/,_={
+$pattern:n,keyword:["@interface","@class","@protocol","@implementation"]}
+;return{name:"Objective-C",
+aliases:["mm","objc","obj-c","obj-c++","objective-c++"],keywords:{
+"variable.language":["this","super"],$pattern:n,
+keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"],
+literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"],
+built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"],
+type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"]
+},illegal:"",contains:[{className:"built_in",
+begin:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"
+},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{
+className:"string",variants:[{begin:'@"',end:'"',illegal:"\\n",
+contains:[e.BACKSLASH_ESCAPE]}]},{className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,
+keywords:{
+keyword:"if else elif endif define undef warning error line pragma ifdef ifndef include"
+},contains:[{begin:/\\\n/,relevance:0},e.inherit(e.QUOTE_STRING_MODE,{
+className:"string"}),{className:"string",begin:/<.*?>/,end:/$/,illegal:"\\n"
+},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",
+begin:"("+_.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:_,
+contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,
+relevance:0}]}}})();hljs.registerLanguage("objectivec",e)})();/*! `perl` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{
+const n=e.regex,t=/[dualxmsipngr]{0,12}/,s={$pattern:/[\w.]+/,
+keyword:"abs accept alarm and atan2 bind binmode bless break caller chdir chmod chomp chop chown chr chroot class close closedir connect continue cos crypt dbmclose dbmopen defined delete die do dump each else elsif endgrent endhostent endnetent endprotoent endpwent endservent eof eval exec exists exit exp fcntl field fileno flock for foreach fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt given glob gmtime goto grep gt hex if index int ioctl join keys kill last lc lcfirst length link listen local localtime log lstat lt ma map method mkdir msgctl msgget msgrcv msgsnd my ne next no not oct open opendir or ord our pack package pipe pop pos print printf prototype push q|0 qq quotemeta qw qx rand read readdir readline readlink readpipe recv redo ref rename require reset return reverse rewinddir rindex rmdir say scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat state study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn when while write x|0 xor y|0"
+},r={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:s},a={begin:/->\{/,
+end:/\}/},i={scope:"attr",match:/\s+:\s*\w+(\s*\(.*?\))?/},c={scope:"variable",
+variants:[{begin:/\$\d/},{
+begin:n.concat(/[$%@](?!")(\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])")
+},{begin:/[$%@](?!")[^\s\w{=]|\$=/,relevance:0}],contains:[i]},o={
+className:"number",variants:[{match:/0?\.[0-9][0-9_]+\b/},{
+match:/\bv?(0|[1-9][0-9_]*(\.[0-9_]+)?|[1-9][0-9_]*)\b/},{
+match:/\b0[0-7][0-7_]*\b/},{match:/\b0x[0-9a-fA-F][0-9a-fA-F_]*\b/},{
+match:/\b0b[0-1][0-1_]*\b/}],relevance:0
+},l=[e.BACKSLASH_ESCAPE,r,c],g=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],d=(e,s,r="\\1")=>{
+const a="\\1"===r?r:n.concat(r,s)
+;return n.concat(n.concat("(?:",e,")"),s,/(?:\\.|[^\\\/])*?/,a,/(?:\\.|[^\\\/])*?/,r,t)
+},m=(e,s,r)=>n.concat(n.concat("(?:",e,")"),s,/(?:\\.|[^\\\/])*?/,r,t),p=[c,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{
+endsWithParent:!0}),a,{className:"string",contains:l,variants:[{
+begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",
+end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{
+begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">",
+relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",
+contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",
+contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{
+begin:"-?\\w+\\s*=>",relevance:0}]},o,{
+begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",
+keywords:"split return print reverse grep",relevance:0,
+contains:[e.HASH_COMMENT_MODE,{className:"regexp",variants:[{
+begin:d("s|tr|y",n.either(...g,{capture:!0}))},{begin:d("s|tr|y","\\(","\\)")},{
+begin:d("s|tr|y","\\[","\\]")},{begin:d("s|tr|y","\\{","\\}")}],relevance:2},{
+className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{
+begin:m("(?:m|qr)?",/\//,/\//)},{begin:m("m|qr",n.either(...g,{capture:!0
+}),/\1/)},{begin:m("m|qr",/\(/,/\)/)},{begin:m("m|qr",/\[/,/\]/)},{
+begin:m("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub method",
+end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE,i]
+},{className:"class",beginKeywords:"class",end:"[;{]",excludeEnd:!0,relevance:5,
+contains:[e.TITLE_MODE,i,o]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",
+end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",
+className:"comment"}]}];return r.contains=p,a.contains=p,{name:"Perl",
+aliases:["pl","pm"],keywords:s,contains:p}}})();hljs.registerLanguage("perl",e)
+})();/*! `php` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{
+const t=e.regex,a=/(?![A-Za-z0-9])(?![$])/,r=t.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,a),n=t.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,a),o={
+scope:"variable",match:"\\$+"+r},c={scope:"subst",variants:[{begin:/\$\w+/},{
+begin:/\{\$/,end:/\}/}]},i=e.inherit(e.APOS_STRING_MODE,{illegal:null
+}),s="[ \t\n]",l={scope:"string",variants:[e.inherit(e.QUOTE_STRING_MODE,{
+illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(c)}),i,{
+begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/,
+contains:e.QUOTE_STRING_MODE.contains.concat(c),"on:begin":(e,t)=>{
+t.data._beginMatch=e[1]||e[2]},"on:end":(e,t)=>{
+t.data._beginMatch!==e[1]&&t.ignoreMatch()}},e.END_SAME_AS_BEGIN({
+begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/})]},d={scope:"number",variants:[{
+begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{
+begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{
+begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?"
+}],relevance:0
+},_=["false","null","true"],p=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],b=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],E={
+keyword:p,literal:(e=>{const t=[];return e.forEach((e=>{
+t.push(e),e.toLowerCase()===e?t.push(e.toUpperCase()):t.push(e.toLowerCase())
+})),t})(_),built_in:b},u=e=>e.map((e=>e.replace(/\|\d+$/,""))),g={variants:[{
+match:[/new/,t.concat(s,"+"),t.concat("(?!",u(b).join("\\b|"),"\\b)"),n],scope:{
+1:"keyword",4:"title.class"}}]},h=t.concat(r,"\\b(?!\\()"),m={variants:[{
+match:[t.concat(/::/,t.lookahead(/(?!class\b)/)),h],scope:{2:"variable.constant"
+}},{match:[/::/,/class/],scope:{2:"variable.language"}},{
+match:[n,t.concat(/::/,t.lookahead(/(?!class\b)/)),h],scope:{1:"title.class",
+3:"variable.constant"}},{match:[n,t.concat("::",t.lookahead(/(?!class\b)/))],
+scope:{1:"title.class"}},{match:[n,/::/,/class/],scope:{1:"title.class",
+3:"variable.language"}}]},I={scope:"attr",
+match:t.concat(r,t.lookahead(":"),t.lookahead(/(?!::)/))},f={relevance:0,
+begin:/\(/,end:/\)/,keywords:E,contains:[I,o,m,e.C_BLOCK_COMMENT_MODE,l,d,g]
+},O={relevance:0,
+match:[/\b/,t.concat("(?!fn\\b|function\\b|",u(p).join("\\b|"),"|",u(b).join("\\b|"),"\\b)"),r,t.concat(s,"*"),t.lookahead(/(?=\()/)],
+scope:{3:"title.function.invoke"},contains:[f]};f.contains.push(O)
+;const v=[I,m,e.C_BLOCK_COMMENT_MODE,l,d,g];return{case_insensitive:!1,
+keywords:E,contains:[{begin:t.concat(/#\[\s*/,n),beginScope:"meta",end:/]/,
+endScope:"meta",keywords:{literal:_,keyword:["new","array"]},contains:[{
+begin:/\[/,end:/]/,keywords:{literal:_,keyword:["new","array"]},
+contains:["self",...v]},...v,{scope:"meta",match:n}]
+},e.HASH_COMMENT_MODE,e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/",{contains:[{
+scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/,
+keywords:"__halt_compiler",starts:{scope:"comment",end:e.MATCH_NOTHING_RE,
+contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},{scope:"meta",variants:[{
+begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{
+begin:/\?>/}]},{scope:"variable.language",match:/\$this\b/},o,O,m,{
+match:[/const/,/\s/,r],scope:{1:"keyword",3:"variable.constant"}},g,{
+scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,
+excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"
+},e.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params",
+begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:E,
+contains:["self",o,m,e.C_BLOCK_COMMENT_MODE,l,d]}]},{scope:"class",variants:[{
+beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",
+illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{
+beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{
+beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,
+contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{
+beginKeywords:"use",relevance:0,end:";",contains:[{
+match:/\b(as|const|function)\b/,scope:"keyword"},e.UNDERSCORE_TITLE_MODE]},l,d]}
+}})();hljs.registerLanguage("php",e)})();/*! `php-template` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var n=(()=>{"use strict";return n=>({name:"PHP template",
+subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",
+contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{
+begin:"b'",end:"'",skip:!0},n.inherit(n.APOS_STRING_MODE,{illegal:null,
+className:null,contains:null,skip:!0}),n.inherit(n.QUOTE_STRING_MODE,{
+illegal:null,className:null,contains:null,skip:!0})]}]})})()
+;hljs.registerLanguage("php-template",n)})();/*! `plaintext` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var t=(()=>{"use strict";return t=>({name:"Plain text",
+aliases:["text","txt"],disableAutodetect:!0})})()
+;hljs.registerLanguage("plaintext",t)})();/*! `python` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{
+const n=e.regex,a=/[\p{XID_Start}_]\p{XID_Continue}*/u,s=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],t={
+$pattern:/[A-Za-z]\w+|__\w+__/,keyword:s,
+built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],
+literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],
+type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]
+},i={className:"meta",begin:/^(>>>|\.\.\.) /},r={className:"subst",begin:/\{/,
+end:/\}/,keywords:t,illegal:/#/},l={begin:/\{\{/,relevance:0},o={
+className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{
+begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,
+contains:[e.BACKSLASH_ESCAPE,i],relevance:10},{
+begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,
+contains:[e.BACKSLASH_ESCAPE,i],relevance:10},{
+begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,
+contains:[e.BACKSLASH_ESCAPE,i,l,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,
+end:/"""/,contains:[e.BACKSLASH_ESCAPE,i,l,r]},{begin:/([uU]|[rR])'/,end:/'/,
+relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{
+begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,
+end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,
+contains:[e.BACKSLASH_ESCAPE,l,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,
+contains:[e.BACKSLASH_ESCAPE,l,r]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]
+},b="[0-9](_?[0-9])*",c=`(\\b(${b}))?\\.(${b})|\\b(${b})\\.`,d="\\b|"+s.join("|"),g={
+className:"number",relevance:0,variants:[{
+begin:`(\\b(${b})|(${c}))[eE][+-]?(${b})[jJ]?(?=${d})`},{begin:`(${c})[jJ]?`},{
+begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${d})`},{
+begin:`\\b0[bB](_?[01])+[lL]?(?=${d})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${d})`
+},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${d})`},{begin:`\\b(${b})[jJ](?=${d})`
+}]},p={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:t,
+contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},m={
+className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,
+end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,
+contains:["self",i,g,o,e.HASH_COMMENT_MODE]}]};return r.contains=[o,g,i],{
+name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:t,
+illegal:/(<\/|\?)|=>/,contains:[i,g,{scope:"variable.language",match:/\bself\b/
+},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"
+},o,p,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,a],scope:{1:"keyword",
+3:"title.function"},contains:[m]},{variants:[{
+match:[/\bclass/,/\s+/,a,/\s*/,/\(\s*/,a,/\s*\)/]},{match:[/\bclass/,/\s+/,a]}],
+scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{
+className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[g,m,o]}]}}})()
+;hljs.registerLanguage("python",e)})();/*! `python-repl` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var a=(()=>{"use strict";return a=>({aliases:["pycon"],contains:[{
+className:"meta.prompt",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}
+},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]})})()
+;hljs.registerLanguage("python-repl",a)})();/*! `r` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{
+const a=e.regex,n=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,i=a.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),s=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,t=a.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/)
+;return{name:"R",keywords:{$pattern:n,
+keyword:"function if in break next repeat else for while",
+literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10",
+built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm"
+},contains:[e.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/,
+starts:{end:a.lookahead(a.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)),
+endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{
+scope:"variable",variants:[{match:n},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0
+}]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}]
+}),e.HASH_COMMENT_MODE,{scope:"string",contains:[e.BACKSLASH_ESCAPE],
+variants:[e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/
+}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/
+}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/
+}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/
+}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/
+}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"',
+relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{
+1:"operator",2:"number"},match:[s,i]},{scope:{1:"operator",2:"number"},
+match:[/%[^%]*%/,i]},{scope:{1:"punctuation",2:"number"},match:[t,i]},{scope:{
+2:"number"},match:[/[^a-zA-Z0-9._]|^/,i]}]},{scope:{3:"operator"},
+match:[n,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:s},{
+match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:t},{begin:"`",end:"`",
+contains:[{begin:/\\./}]}]}}})();hljs.registerLanguage("r",e)})();/*! `ruby` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{
+const n=e.regex,a="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",s=n.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),i=n.concat(s,/(::\w+)*/),t={
+"variable.constant":["__FILE__","__LINE__","__ENCODING__"],
+"variable.language":["self","super"],
+keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield","include","extend","prepend","public","private","protected","raise","throw"],
+built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"],
+literal:["true","false","nil"]},c={className:"doctag",begin:"@[A-Za-z]+"},r={
+begin:"#<",end:">"},b=[e.COMMENT("#","$",{contains:[c]
+}),e.COMMENT("^=begin","^=end",{contains:[c],relevance:10
+}),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],l={className:"subst",begin:/#\{/,
+end:/\}/,keywords:t},d={className:"string",contains:[e.BACKSLASH_ESCAPE,l],
+variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{
+begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{
+begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?,end:/>/},{begin:/%[qQwWx]?\//,
+end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{
+begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{
+begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{
+begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{
+begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{
+begin:n.concat(/<<[-~]?'?/,n.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),
+contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,
+contains:[e.BACKSLASH_ESCAPE,l]})]}]},o="[0-9](_?[0-9])*",g={className:"number",
+relevance:0,variants:[{
+begin:`\\b([1-9](_?[0-9])*|0)(\\.(${o}))?([eE][+-]?(${o})|r)?i?\\b`},{
+begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"
+},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{
+begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{
+begin:"\\b0(_?[0-7])+r?i?\\b"}]},_={variants:[{match:/\(\)/},{
+className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,
+keywords:t}]},u=[d,{variants:[{match:[/class\s+/,i,/\s+<\s+/,i]},{
+match:[/\b(class|module)\s+/,i]}],scope:{2:"title.class",
+4:"title.class.inherited"},keywords:t},{match:[/(include|extend)\s+/,i],scope:{
+2:"title.class"},keywords:t},{relevance:0,match:[i,/\.new[. (]/],scope:{
+1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,
+className:"variable.constant"},{relevance:0,match:s,scope:"title.class"},{
+match:[/def/,/\s+/,a],scope:{1:"keyword",3:"title.function"},contains:[_]},{
+begin:e.IDENT_RE+"::"},{className:"symbol",
+begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",
+begin:":(?!\\s)",contains:[d,{begin:a}],relevance:0},g,{className:"variable",
+begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{
+className:"params",begin:/\|/,end:/\|/,excludeBegin:!0,excludeEnd:!0,
+relevance:0,keywords:t},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",
+keywords:"unless",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,l],
+illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{
+begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",
+end:"\\][a-z]*"}]}].concat(r,b),relevance:0}].concat(r,b)
+;l.contains=u,_.contains=u;const m=[{begin:/^\s*=>/,starts:{end:"$",contains:u}
+},{className:"meta.prompt",
+begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])",
+starts:{end:"$",keywords:t,contains:u}}];return b.unshift(r),{name:"Ruby",
+aliases:["rb","gemspec","podspec","thor","irb"],keywords:t,illegal:/\/\*/,
+contains:[e.SHEBANG({binary:"ruby"})].concat(m).concat(b).concat(u)}}})()
+;hljs.registerLanguage("ruby",e)})();/*! `rust` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{
+const t=e.regex,n=/(r#)?/,a=t.concat(n,e.UNDERSCORE_IDENT_RE),i=t.concat(n,e.IDENT_RE),r={
+className:"title.function.invoke",relevance:0,
+begin:t.concat(/\b/,/(?!let|for|while|if|else|match\b)/,i,t.lookahead(/\s*\(/))
+},s="([ui](8|16|32|64|128|size)|f(32|64))?",l=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","eprintln!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],o=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"]
+;return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",type:o,
+keyword:["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","union","unsafe","unsized","use","virtual","where","while","yield"],
+literal:["true","false","Some","None","Ok","Err"],built_in:l},illegal:"",
+contains:[e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:["self"]
+}),e.inherit(e.QUOTE_STRING_MODE,{begin:/b?"/,illegal:null}),{
+className:"string",variants:[{begin:/b?r(#*)"(.|\n)*?"\1(?!#)/},{
+begin:/b?'\\?(x\w{2}|u\w{4}|U\w{8}|.)'/}]},{className:"symbol",
+begin:/'[a-zA-Z_][a-zA-Z0-9_]*/},{className:"number",variants:[{
+begin:"\\b0b([01_]+)"+s},{begin:"\\b0o([0-7_]+)"+s},{
+begin:"\\b0x([A-Fa-f0-9_]+)"+s},{
+begin:"\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)"+s}],relevance:0},{
+begin:[/fn/,/\s+/,a],className:{1:"keyword",3:"title.function"}},{
+className:"meta",begin:"#!?\\[",end:"\\]",contains:[{className:"string",
+begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE]}]},{
+begin:[/let/,/\s+/,/(?:mut\s+)?/,a],className:{1:"keyword",3:"keyword",
+4:"variable"}},{begin:[/for/,/\s+/,a,/\s+/,/in/],className:{1:"keyword",
+3:"variable",5:"keyword"}},{begin:[/type/,/\s+/,a],className:{1:"keyword",
+3:"title.class"}},{begin:[/(?:trait|enum|struct|union|impl|for)/,/\s+/,a],
+className:{1:"keyword",3:"title.class"}},{begin:e.IDENT_RE+"::",keywords:{
+keyword:"Self",built_in:l,type:o}},{className:"punctuation",begin:"->"},r]}}})()
+;hljs.registerLanguage("rust",e)})();/*! `scss` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict"
+;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video","defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],r=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),t=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),i=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),o=["accent-color","align-content","align-items","align-self","alignment-baseline","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-end-end-radius","border-end-start-radius","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","cx","cy","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","empty-cells","enable-background","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","flood-color","flood-opacity","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","inset","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","kerning","justify-content","justify-items","justify-self","left","letter-spacing","lighting-color","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","marker","marker-end","marker-mid","marker-start","mask","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","scale","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","speak","speak-as","src","tab-size","table-layout","text-anchor","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-offset","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","vector-effect","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index"].sort().reverse()
+;return n=>{const a=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},
+BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",
+begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{
+className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{
+scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",
+contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{
+scope:"number",
+begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",
+relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}
+}))(n),l=i,s=t,d="@[a-z-]+",c={className:"variable",
+begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b",relevance:0};return{name:"SCSS",
+case_insensitive:!0,illegal:"[=/|']",
+contains:[n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE,a.CSS_NUMBER_MODE,{
+className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{
+className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0
+},a.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag",
+begin:"\\b("+e.join("|")+")\\b",relevance:0},{className:"selector-pseudo",
+begin:":("+s.join("|")+")"},{className:"selector-pseudo",
+begin:":(:)?("+l.join("|")+")"},c,{begin:/\(/,end:/\)/,
+contains:[a.CSS_NUMBER_MODE]},a.CSS_VARIABLE,{className:"attribute",
+begin:"\\b("+o.join("|")+")\\b"},{
+begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"
+},{begin:/:/,end:/[;}{]/,relevance:0,
+contains:[a.BLOCK_COMMENT,c,a.HEXCOLOR,a.CSS_NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,a.IMPORTANT,a.FUNCTION_DISPATCH]
+},{begin:"@(page|font-face)",keywords:{$pattern:d,keyword:"@page @font-face"}},{
+begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,
+keyword:"and or not only",attribute:r.join(" ")},contains:[{begin:d,
+className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"
+},c,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,a.HEXCOLOR,a.CSS_NUMBER_MODE]
+},a.FUNCTION_DISPATCH]}}})();hljs.registerLanguage("scss",e)})();/*! `shell` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var s=(()=>{"use strict";return s=>({name:"Shell Session",
+aliases:["console","shellsession"],contains:[{className:"meta.prompt",
+begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,
+subLanguage:"bash"}}]})})();hljs.registerLanguage("shell",s)})();/*! `sql` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{
+const r=e.regex,t=e.COMMENT("--","$"),n=["true","false","unknown"],a=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],i=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],s=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],o=i,c=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!i.includes(e))),l={
+begin:r.concat(/\b/,r.either(...o),/\s*\(/),relevance:0,keywords:{built_in:o}}
+;return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{
+$pattern:/\b[\w\.]+/,keyword:((e,{exceptions:r,when:t}={})=>{const n=t
+;return r=r||[],e.map((e=>e.match(/\|\d+$/)||r.includes(e)?e:n(e)?e+"|0":e))
+})(c,{when:e=>e.length<3}),literal:n,type:a,
+built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"]
+},contains:[{begin:r.either(...s),relevance:0,keywords:{$pattern:/[\w\.]+/,
+keyword:c.concat(s),literal:n,type:a}},{className:"type",
+begin:r.either("double precision","large object","with timezone","without timezone")
+},l,{className:"variable",begin:/@[a-z0-9][a-z0-9_]*/},{className:"string",
+variants:[{begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/"/,end:/"/,
+contains:[{begin:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{
+className:"operator",begin:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,
+relevance:0}]}}})();hljs.registerLanguage("sql",e)})();/*! `swift` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";function e(e){
+return e?"string"==typeof e?e:e.source:null}function n(e){return t("(?=",e,")")}
+function t(...n){return n.map((n=>e(n))).join("")}function a(...n){const t=(e=>{
+const n=e[e.length-1]
+;return"object"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{}
+})(n);return"("+(t.capture?"":"?:")+n.map((n=>e(n))).join("|")+")"}
+const i=e=>t(/\b/,e,/\w$/.test(e)?/\b/:/\B/),s=["Protocol","Type"].map(i),c=["init","self"].map(i),u=["Any","Self"],o=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","borrowing","break","case","catch","class","consume","consuming","continue","convenience","copy","default","defer","deinit","didSet","distributed","do","dynamic","each","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","macro","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","package","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],r=["false","nil","true"],l=["assignment","associativity","higherThan","left","lowerThan","none","right"],m=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warning"],p=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],d=a(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),F=a(d,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),b=t(d,F,"*"),h=a(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),f=a(h,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),w=t(h,f,"*"),g=t(/[A-Z]/,f,"*"),y=["attached","autoclosure",t(/convention\(/,a("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","freestanding","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",t(/objc\(/,w,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","Sendable","testable","UIApplicationMain","unchecked","unknown","usableFromInline","warn_unqualified_access"],v=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"]
+;return e=>{const d={match:/\s+/,relevance:0},h=e.COMMENT("/\\*","\\*/",{
+contains:["self"]}),E=[e.C_LINE_COMMENT_MODE,h],A={match:[/\./,a(...s,...c)],
+className:{2:"keyword"}},C={match:t(/\./,a(...o)),relevance:0
+},k=o.filter((e=>"string"==typeof e)).concat(["_|0"]),N={variants:[{
+className:"keyword",
+match:a(...o.filter((e=>"string"!=typeof e)).concat(u).map(i),...c)}]},S={
+$pattern:a(/\b\w+/,/#\w+/),keyword:k.concat(m),literal:r},B=[A,C,N],D=[{
+match:t(/\./,a(...p)),relevance:0},{className:"built_in",
+match:t(/\b/,a(...p),/(?=\()/)}],_={match:/->/,relevance:0},M=[_,{
+className:"operator",relevance:0,variants:[{match:b},{match:`\\.(\\.|${F})+`}]
+}],x="([0-9]_*)+",L="([0-9a-fA-F]_*)+",$={className:"number",relevance:0,
+variants:[{match:`\\b(${x})(\\.(${x}))?([eE][+-]?(${x}))?\\b`},{
+match:`\\b0x(${L})(\\.(${L}))?([pP][+-]?(${x}))?\\b`},{match:/\b0o([0-7]_*)+\b/
+},{match:/\b0b([01]_*)+\b/}]},I=(e="")=>({className:"subst",variants:[{
+match:t(/\\/,e,/[0\\tnr"']/)},{match:t(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}]
+}),O=(e="")=>({className:"subst",match:t(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/)
+}),P=(e="")=>({className:"subst",label:"interpol",begin:t(/\\/,e,/\(/),end:/\)/
+}),j=(e="")=>({begin:t(e,/"""/),end:t(/"""/,e),contains:[I(e),O(e),P(e)]
+}),K=(e="")=>({begin:t(e,/"/),end:t(/"/,e),contains:[I(e),P(e)]}),T={
+className:"string",
+variants:[j(),j("#"),j("##"),j("###"),K(),K("#"),K("##"),K("###")]
+},q=[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,
+contains:[e.BACKSLASH_ESCAPE]}],U={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//,
+contains:q},z=e=>{const n=t(e,/\//),a=t(/\//,e);return{begin:n,end:a,
+contains:[...q,{scope:"comment",begin:`#(?!.*${a})`,end:/$/}]}},V={
+scope:"regexp",variants:[z("###"),z("##"),z("#"),U]},W={match:t(/`/,w,/`/)
+},Z=[W,{className:"variable",match:/\$\d+/},{className:"variable",
+match:`\\$${f}+`}],G=[{match:/(@|#(un)?)available/,scope:"keyword",starts:{
+contains:[{begin:/\(/,end:/\)/,keywords:v,contains:[...M,$,T]}]}},{
+scope:"keyword",match:t(/@/,a(...y),n(a(/\(/,/\s+/)))},{scope:"meta",
+match:t(/@/,w)}],H={match:n(/\b[A-Z]/),relevance:0,contains:[{className:"type",
+match:t(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,f,"+")
+},{className:"type",match:g,relevance:0},{match:/[?!]+/,relevance:0},{
+match:/\.\.\./,relevance:0},{match:t(/\s+&\s+/,n(g)),relevance:0}]},R={
+begin:/,end:/>/,keywords:S,contains:[...E,...B,...G,_,H]};H.contains.push(R)
+;const X={begin:/\(/,end:/\)/,relevance:0,keywords:S,contains:["self",{
+match:t(w,/\s*:/),keywords:"_|0",relevance:0
+},...E,V,...B,...D,...M,$,T,...Z,...G,H]},J={begin:/,end:/>/,
+keywords:"repeat each",contains:[...E,H]},Q={begin:/\(/,end:/\)/,keywords:S,
+contains:[{begin:a(n(t(w,/\s*:/)),n(t(w,/\s+/,w,/\s*:/))),end:/:/,relevance:0,
+contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:w}]
+},...E,...B,...M,$,T,...G,H,X],endsParent:!0,illegal:/["']/},Y={
+match:[/(func|macro)/,/\s+/,a(W.match,w,b)],className:{1:"keyword",
+3:"title.function"},contains:[J,Q,d],illegal:[/\[/,/%/]},ee={
+match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"},
+contains:[J,Q,d],illegal:/\[|%/},ne={match:[/operator/,/\s+/,b],className:{
+1:"keyword",3:"title"}},te={begin:[/precedencegroup/,/\s+/,g],className:{
+1:"keyword",3:"title"},contains:[H],keywords:[...l,...r],end:/}/},ae={
+begin:[/(struct|protocol|class|extension|enum|actor)/,/\s+/,w,/\s*/],
+beginScope:{1:"keyword",3:"title.class"},keywords:S,contains:[J,...B,{begin:/:/,
+end:/\{/,keywords:S,contains:[{scope:"title.class.inherited",match:g},...B],
+relevance:0}]};for(const e of T.variants){
+const n=e.contains.find((e=>"interpol"===e.label));n.keywords=S
+;const t=[...B,...D,...M,$,T,...Z];n.contains=[...t,{begin:/\(/,end:/\)/,
+contains:["self",...t]}]}return{name:"Swift",keywords:S,
+contains:[...E,Y,ee,ae,ne,te,{beginKeywords:"import",end:/$/,contains:[...E],
+relevance:0},V,...B,...D,...M,$,T,...Z,...G,H,X]}}})()
+;hljs.registerLanguage("swift",e)})();/*! `typescript` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict"
+;const e="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],a=["true","false","null","undefined","NaN","Infinity"],t=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],s=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],r=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],c=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],i=[].concat(r,t,s)
+;function o(o){const l=o.regex,d=e,b={begin:/<[A-Za-z0-9\\._:-]+/,
+end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{
+const a=e[0].length+e.index,t=e.input[a]
+;if("<"===t||","===t)return void n.ignoreMatch();let s
+;">"===t&&(((e,{after:n})=>{const a=""+e[0].slice(1)
+;return-1!==e.input.indexOf(a,n)})(e,{after:a})||n.ignoreMatch())
+;const r=e.input.substring(a)
+;((s=r.match(/^\s*=/))||(s=r.match(/^\s+extends\s+/))&&0===s.index)&&n.ignoreMatch()
+}},g={$pattern:e,keyword:n,literal:a,built_in:i,"variable.language":c
+},u="[0-9](_?[0-9])*",m=`\\.(${u})`,E="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",A={
+className:"number",variants:[{
+begin:`(\\b(${E})((${m})|\\.)?|(${m}))[eE][+-]?(${u})\\b`},{
+begin:`\\b(${E})\\b((${m})\\b|\\.)?|(${m})\\b`},{
+begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{
+begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{
+begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{
+begin:"\\b0[0-7]+n?\\b"}],relevance:0},y={className:"subst",begin:"\\$\\{",
+end:"\\}",keywords:g,contains:[]},p={begin:".?html`",end:"",starts:{end:"`",
+returnEnd:!1,contains:[o.BACKSLASH_ESCAPE,y],subLanguage:"xml"}},N={
+begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,
+contains:[o.BACKSLASH_ESCAPE,y],subLanguage:"css"}},f={begin:".?gql`",end:"",
+starts:{end:"`",returnEnd:!1,contains:[o.BACKSLASH_ESCAPE,y],
+subLanguage:"graphql"}},_={className:"string",begin:"`",end:"`",
+contains:[o.BACKSLASH_ESCAPE,y]},h={className:"comment",
+variants:[o.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{
+begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",
+begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,
+excludeBegin:!0,relevance:0},{className:"variable",begin:d+"(?=\\s*(-)|$)",
+endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]
+}),o.C_BLOCK_COMMENT_MODE,o.C_LINE_COMMENT_MODE]
+},S=[o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,p,N,f,_,{match:/\$\d+/},A]
+;y.contains=S.concat({begin:/\{/,end:/\}/,keywords:g,contains:["self"].concat(S)
+});const v=[].concat(h,y.contains),w=v.concat([{begin:/(\s*)\(/,end:/\)/,
+keywords:g,contains:["self"].concat(v)}]),R={className:"params",begin:/(\s*)\(/,
+end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:g,contains:w},k={variants:[{
+match:[/class/,/\s+/,d,/\s+/,/extends/,/\s+/,l.concat(d,"(",l.concat(/\./,d),")*")],
+scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{
+match:[/class/,/\s+/,d],scope:{1:"keyword",3:"title.class"}}]},x={relevance:0,
+match:l.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),
+className:"title.class",keywords:{_:[...t,...s]}},O={variants:[{
+match:[/function/,/\s+/,d,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],
+className:{1:"keyword",3:"title.function"},label:"func.def",contains:[R],
+illegal:/%/},I={
+match:l.concat(/\b/,(C=[...r,"super","import"].map((e=>e+"\\s*\\(")),
+l.concat("(?!",C.join("|"),")")),d,l.lookahead(/\s*\(/)),
+className:"title.function",relevance:0};var C;const T={
+begin:l.concat(/\./,l.lookahead(l.concat(d,/(?![0-9A-Za-z$_(])/))),end:d,
+excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},M={
+match:[/get|set/,/\s+/,d,/(?=\()/],className:{1:"keyword",3:"title.function"},
+contains:[{begin:/\(\)/},R]
+},B="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+o.UNDERSCORE_IDENT_RE+")\\s*=>",$={
+match:[/const|var|let/,/\s+/,d,/\s*/,/=\s*/,/(async\s*)?/,l.lookahead(B)],
+keywords:"async",className:{1:"keyword",3:"title.function"},contains:[R]}
+;return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:g,exports:{
+PARAMS_CONTAINS:w,CLASS_REFERENCE:x},illegal:/#(?![$_A-z])/,
+contains:[o.SHEBANG({label:"shebang",binary:"node",relevance:5}),{
+label:"use_strict",className:"meta",relevance:10,
+begin:/^\s*['"]use (strict|asm)['"]/
+},o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,p,N,f,_,h,{match:/\$\d+/},A,x,{
+className:"attr",begin:d+l.lookahead(":"),relevance:0},$,{
+begin:"("+o.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",
+keywords:"return throw case",relevance:0,contains:[h,o.REGEXP_MODE,{
+className:"function",begin:B,returnBegin:!0,end:"\\s*=>",contains:[{
+className:"params",variants:[{begin:o.UNDERSCORE_IDENT_RE,relevance:0},{
+className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,
+excludeBegin:!0,excludeEnd:!0,keywords:g,contains:w}]}]},{begin:/,/,relevance:0
+},{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:">"},{
+match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:b.begin,
+"on:begin":b.isTrulyOpeningTag,end:b.end}],subLanguage:"xml",contains:[{
+begin:b.begin,end:b.end,skip:!0,contains:["self"]}]}]},O,{
+beginKeywords:"while if switch catch for"},{
+begin:"\\b(?!function)"+o.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",
+returnBegin:!0,label:"func.def",contains:[R,o.inherit(o.TITLE_MODE,{begin:d,
+className:"title.function"})]},{match:/\.\.\./,relevance:0},T,{match:"\\$"+d,
+relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},
+contains:[R]},I,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,
+className:"variable.constant"},k,M,{match:/\$[(.]/}]}}return t=>{
+const s=o(t),r=e,l=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],d={
+begin:[/namespace/,/\s+/,t.IDENT_RE],beginScope:{1:"keyword",3:"title.class"}
+},b={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{
+keyword:"interface extends",built_in:l},contains:[s.exports.CLASS_REFERENCE]
+},g={$pattern:e,
+keyword:n.concat(["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"]),
+literal:a,built_in:i.concat(l),"variable.language":c},u={className:"meta",
+begin:"@"+r},m=(e,n,a)=>{const t=e.contains.findIndex((e=>e.label===n))
+;if(-1===t)throw Error("can not find mode to replace");e.contains.splice(t,1,a)}
+;Object.assign(s.keywords,g),s.exports.PARAMS_CONTAINS.push(u)
+;const E=s.contains.find((e=>"attr"===e.className))
+;return s.exports.PARAMS_CONTAINS.push([s.exports.CLASS_REFERENCE,E]),
+s.contains=s.contains.concat([u,d,b]),
+m(s,"shebang",t.SHEBANG()),m(s,"use_strict",{className:"meta",relevance:10,
+begin:/^\s*['"]use strict['"]/
+}),s.contains.find((e=>"func.def"===e.label)).relevance=0,Object.assign(s,{
+name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),s}})()
+;hljs.registerLanguage("typescript",e)})();/*! `vbnet` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{
+const n=e.regex,t=/\d{1,2}\/\d{1,2}\/\d{4}/,a=/\d{4}-\d{1,2}-\d{1,2}/,i=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,s=/\d{1,2}(:\d{1,2}){1,2}/,r={
+className:"literal",variants:[{begin:n.concat(/# */,n.either(a,t),/ *#/)},{
+begin:n.concat(/# */,s,/ *#/)},{begin:n.concat(/# */,i,/ *#/)},{
+begin:n.concat(/# */,n.either(a,t),/ +/,n.either(i,s),/ *#/)}]
+},l=e.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}]
+}),o=e.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]})
+;return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0,
+classNameAliases:{label:"symbol"},keywords:{
+keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield",
+built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort",
+type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort",
+literal:"true false nothing"},
+illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[{
+className:"string",begin:/"(""|[^/n])"C\b/},{className:"string",begin:/"/,
+end:/"/,illegal:/\n/,contains:[{begin:/""/}]},r,{className:"number",relevance:0,
+variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/
+},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{
+begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},{
+className:"label",begin:/^\w+:/},l,o,{className:"meta",
+begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/,
+end:/$/,keywords:{
+keyword:"const disable else elseif enable end externalsource if region then"},
+contains:[o]}]}}})();hljs.registerLanguage("vbnet",e)})();/*! `wasm` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{e.regex;const a=e.COMMENT(/\(;/,/;\)/)
+;return a.contains.push("self"),{name:"WebAssembly",keywords:{$pattern:/[\w.]+/,
+keyword:["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"]
+},contains:[e.COMMENT(/;;/,/$/),a,{match:[/(?:offset|align)/,/\s*/,/=/],
+className:{1:"keyword",3:"operator"}},{className:"variable",begin:/\$[\w_]+/},{
+match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},{
+begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword",
+3:"title.function"}},e.QUOTE_STRING_MODE,{match:/(i32|i64|f32|f64)(?!\.)/,
+className:"type"},{className:"keyword",
+match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/
+},{className:"number",relevance:0,
+match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/
+}]}}})();hljs.registerLanguage("wasm",e)})();/*! `xml` grammar compiled for Highlight.js 11.10.0 */
+(()=>{var e=(()=>{"use strict";return e=>{
+const a=e.regex,n=a.concat(/[\p{L}_]/u,a.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),s={
+className:"symbol",begin:/&[a-z]+;|[0-9]+;|[a-f0-9]+;/},t={begin:/\s/,
+contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]
+},i=e.inherit(t,{begin:/\(/,end:/\)/}),c=e.inherit(e.APOS_STRING_MODE,{
+className:"string"}),l=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),r={
+endsWithParent:!0,illegal:/,relevance:0,contains:[{className:"attr",
+begin:/[\p{L}0-9._:-]+/u,relevance:0},{begin:/=\s*/,relevance:0,contains:[{
+className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[s]},{
+begin:/'/,end:/'/,contains:[s]},{begin:/[^\s"'=<>`]+/}]}]}]};return{
+name:"HTML, XML",
+aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],
+case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[t,l,c,i,{begin:/\[/,end:/\]/,contains:[{
+className:"meta",begin://,contains:[t,i,l,c]}]}]
+},e.COMMENT(//,{relevance:10}),{begin://,
+relevance:10},s,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,
+relevance:10,contains:[l]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",
+begin:/